From 1d4295431368fb47087188ad199091b67e280579 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sun, 9 Jan 2022 13:08:03 +0800 Subject: [PATCH 001/272] Batch publish events from outbox to the event bus --- .../PostgreSqlDbContextEventOutbox.cs | 2 +- .../DistributedEvents/DbContextEventOutbox.cs | 11 + .../Azure/AzureDistributedEventBus.cs | 9 +- .../Kafka/KafkaDistributedEventBus.cs | 9 +- .../RabbitMq/RabbitMqDistributedEventBus.cs | 509 ++++++++++-------- .../Rebus/RebusDistributedEventBus.cs | 9 +- .../Distributed/DistributedEventBusBase.cs | 236 ++++---- .../Abp/EventBus/Distributed/IEventOutbox.cs | 2 + .../Distributed/ISupportsEventBoxes.cs | 6 + .../EventBus/Distributed/InboxProcessor.cs | 4 +- .../Abp/EventBus/Distributed/OutboxSender.cs | 21 +- .../MultipleOutgoingEventPublishResult.cs | 14 + .../MongoDbContextEventOutbox.cs | 14 + 13 files changed, 488 insertions(+), 358 deletions(-) create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/MultipleOutgoingEventPublishResult.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventOutbox.cs index e5f2e0c4b6..7c5ef12fa7 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventOutbox.cs @@ -13,7 +13,7 @@ public class PostgreSqlDbContextEventOutbox : DbContextEventOutbox : IDbContextEventOutbox ids) + { + var dbContext = (IHasEventOutbox)await DbContextProvider.GetDbContextAsync(); + var outgoingEvents = await dbContext.OutgoingEvents.Where(x => ids.Contains(x.Id)).ToListAsync(); + if (outgoingEvents.Any()) + { + dbContext.RemoveRange(outgoingEvents); + } + } } diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs index 49add5df84..b253164161 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs @@ -85,12 +85,17 @@ public class AzureDistributedEventBus : DistributedEventBusBase, ISingletonDepen await TriggerHandlersAsync(eventType, eventData); } - public override async Task PublishFromOutboxAsync(OutgoingEventInfo outgoingEvent, OutboxConfig outboxConfig) + public async override Task PublishFromOutboxAsync(OutgoingEventInfo outgoingEvent, OutboxConfig outboxConfig) { await PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData); } - public override async Task ProcessFromInboxAsync(IncomingEventInfo incomingEvent, InboxConfig inboxConfig) + public override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) + { + throw new NotImplementedException(); + } + + public async override Task ProcessFromInboxAsync(IncomingEventInfo incomingEvent, InboxConfig inboxConfig) { var eventType = _eventTypes.GetOrDefault(incomingEvent.EventName); if (eventType == null) diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index ec1901161a..23ae188170 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -162,7 +162,7 @@ public class KafkaDistributedEventBus : DistributedEventBusBase, ISingletonDepen GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear()); } - protected override async Task PublishToEventBusAsync(Type eventType, object eventData) + protected async override Task PublishToEventBusAsync(Type eventType, object eventData) { await PublishAsync( eventType, @@ -196,7 +196,12 @@ public class KafkaDistributedEventBus : DistributedEventBusBase, ISingletonDepen ); } - public override async Task ProcessFromInboxAsync( + public override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) + { + throw new NotImplementedException(); + } + + public async override Task ProcessFromInboxAsync( IncomingEventInfo incomingEvent, InboxConfig inboxConfig) { diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 1564cfd213..c65e9a60d1 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -16,225 +16,290 @@ using Volo.Abp.Threading; using Volo.Abp.Timing; using Volo.Abp.Uow; -namespace Volo.Abp.EventBus.RabbitMq; - -/* TODO: How to handle unsubscribe to unbind on RabbitMq (may not be possible for) - */ -[Dependency(ReplaceServices = true)] -[ExposeServices(typeof(IDistributedEventBus), typeof(RabbitMqDistributedEventBus))] -public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDependency +namespace Volo.Abp.EventBus.RabbitMq { - protected AbpRabbitMqEventBusOptions AbpRabbitMqEventBusOptions { get; } - protected IConnectionPool ConnectionPool { get; } - protected IRabbitMqSerializer Serializer { get; } - - //TODO: Accessing to the List may not be thread-safe! - protected ConcurrentDictionary> HandlerFactories { get; } - protected ConcurrentDictionary EventTypes { get; } - protected IRabbitMqMessageConsumerFactory MessageConsumerFactory { get; } - protected IRabbitMqMessageConsumer Consumer { get; private set; } - - public RabbitMqDistributedEventBus( - IOptions options, - IConnectionPool connectionPool, - IRabbitMqSerializer serializer, - IServiceScopeFactory serviceScopeFactory, - IOptions distributedEventBusOptions, - IRabbitMqMessageConsumerFactory messageConsumerFactory, - ICurrentTenant currentTenant, - IUnitOfWorkManager unitOfWorkManager, - IGuidGenerator guidGenerator, - IClock clock) - : base( - serviceScopeFactory, - currentTenant, - unitOfWorkManager, - distributedEventBusOptions, - guidGenerator, - clock) + /* TODO: How to handle unsubscribe to unbind on RabbitMq (may not be possible for) + */ + [Dependency(ReplaceServices = true)] + [ExposeServices(typeof(IDistributedEventBus), typeof(RabbitMqDistributedEventBus))] + public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDependency { - ConnectionPool = connectionPool; - Serializer = serializer; - MessageConsumerFactory = messageConsumerFactory; - AbpRabbitMqEventBusOptions = options.Value; - - HandlerFactories = new ConcurrentDictionary>(); - EventTypes = new ConcurrentDictionary(); - } + protected AbpRabbitMqEventBusOptions AbpRabbitMqEventBusOptions { get; } + protected IConnectionPool ConnectionPool { get; } + protected IRabbitMqSerializer Serializer { get; } + + //TODO: Accessing to the List may not be thread-safe! + protected ConcurrentDictionary> HandlerFactories { get; } + protected ConcurrentDictionary EventTypes { get; } + protected IRabbitMqMessageConsumerFactory MessageConsumerFactory { get; } + protected IRabbitMqMessageConsumer Consumer { get; private set; } + + public RabbitMqDistributedEventBus( + IOptions options, + IConnectionPool connectionPool, + IRabbitMqSerializer serializer, + IServiceScopeFactory serviceScopeFactory, + IOptions distributedEventBusOptions, + IRabbitMqMessageConsumerFactory messageConsumerFactory, + ICurrentTenant currentTenant, + IUnitOfWorkManager unitOfWorkManager, + IGuidGenerator guidGenerator, + IClock clock) + : base( + serviceScopeFactory, + currentTenant, + unitOfWorkManager, + distributedEventBusOptions, + guidGenerator, + clock) + { + ConnectionPool = connectionPool; + Serializer = serializer; + MessageConsumerFactory = messageConsumerFactory; + AbpRabbitMqEventBusOptions = options.Value; - public void Initialize() - { - Consumer = MessageConsumerFactory.Create( - new ExchangeDeclareConfiguration( - AbpRabbitMqEventBusOptions.ExchangeName, - type: "direct", - durable: true - ), - new QueueDeclareConfiguration( - AbpRabbitMqEventBusOptions.ClientName, - durable: true, - exclusive: false, - autoDelete: false - ), - AbpRabbitMqEventBusOptions.ConnectionName - ); - - Consumer.OnMessageReceived(ProcessEventAsync); - - SubscribeHandlers(AbpDistributedEventBusOptions.Handlers); - } + HandlerFactories = new ConcurrentDictionary>(); + EventTypes = new ConcurrentDictionary(); + } - private async Task ProcessEventAsync(IModel channel, BasicDeliverEventArgs ea) - { - var eventName = ea.RoutingKey; - var eventType = EventTypes.GetOrDefault(eventName); - if (eventType == null) + public void Initialize() { - return; + Consumer = MessageConsumerFactory.Create( + new ExchangeDeclareConfiguration( + AbpRabbitMqEventBusOptions.ExchangeName, + type: "direct", + durable: true + ), + new QueueDeclareConfiguration( + AbpRabbitMqEventBusOptions.ClientName, + durable: true, + exclusive: false, + autoDelete: false + ), + AbpRabbitMqEventBusOptions.ConnectionName + ); + + Consumer.OnMessageReceived(ProcessEventAsync); + + SubscribeHandlers(AbpDistributedEventBusOptions.Handlers); } - var eventBytes = ea.Body.ToArray(); + private async Task ProcessEventAsync(IModel channel, BasicDeliverEventArgs ea) + { + var eventName = ea.RoutingKey; + var eventType = EventTypes.GetOrDefault(eventName); + if (eventType == null) + { + return; + } + + var eventBytes = ea.Body.ToArray(); + + if (await AddToInboxAsync(ea.BasicProperties.MessageId, eventName, eventType, eventBytes)) + { + return; + } + + var eventData = Serializer.Deserialize(eventBytes, eventType); + + await TriggerHandlersAsync(eventType, eventData); + } - if (await AddToInboxAsync(ea.BasicProperties.MessageId, eventName, eventType, eventBytes)) + public override IDisposable Subscribe(Type eventType, IEventHandlerFactory factory) { - return; + var handlerFactories = GetOrCreateHandlerFactories(eventType); + + if (factory.IsInFactories(handlerFactories)) + { + return NullDisposable.Instance; + } + + handlerFactories.Add(factory); + + if (handlerFactories.Count == 1) //TODO: Multi-threading! + { + Consumer.BindAsync(EventNameAttribute.GetNameOrDefault(eventType)); + } + + return new EventHandlerFactoryUnregistrar(this, eventType, factory); } - var eventData = Serializer.Deserialize(eventBytes, eventType); + /// + public override void Unsubscribe(Func action) + { + Check.NotNull(action, nameof(action)); - await TriggerHandlersAsync(eventType, eventData); - } + GetOrCreateHandlerFactories(typeof(TEvent)) + .Locking(factories => + { + factories.RemoveAll( + factory => + { + var singleInstanceFactory = factory as SingleInstanceHandlerFactory; + if (singleInstanceFactory == null) + { + return false; + } + + var actionHandler = singleInstanceFactory.HandlerInstance as ActionEventHandler; + if (actionHandler == null) + { + return false; + } + + return actionHandler.Action == action; + }); + }); + } - public override IDisposable Subscribe(Type eventType, IEventHandlerFactory factory) - { - var handlerFactories = GetOrCreateHandlerFactories(eventType); + /// + public override void Unsubscribe(Type eventType, IEventHandler handler) + { + GetOrCreateHandlerFactories(eventType) + .Locking(factories => + { + factories.RemoveAll( + factory => + factory is SingleInstanceHandlerFactory && + (factory as SingleInstanceHandlerFactory).HandlerInstance == handler + ); + }); + } - if (factory.IsInFactories(handlerFactories)) + /// + public override void Unsubscribe(Type eventType, IEventHandlerFactory factory) { - return NullDisposable.Instance; + GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Remove(factory)); } - handlerFactories.Add(factory); + /// + public override void UnsubscribeAll(Type eventType) + { + GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear()); + } - if (handlerFactories.Count == 1) //TODO: Multi-threading! + protected async override Task PublishToEventBusAsync(Type eventType, object eventData) { - Consumer.BindAsync(EventNameAttribute.GetNameOrDefault(eventType)); + await PublishAsync(eventType, eventData, null); } - return new EventHandlerFactoryUnregistrar(this, eventType, factory); - } + protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord) + { + unitOfWork.AddOrReplaceDistributedEvent(eventRecord); + } - /// - public override void Unsubscribe(Func action) - { - Check.NotNull(action, nameof(action)); + public override Task PublishFromOutboxAsync( + OutgoingEventInfo outgoingEvent, + OutboxConfig outboxConfig) + { + return PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData, null, eventId: outgoingEvent.Id); + } - GetOrCreateHandlerFactories(typeof(TEvent)) - .Locking(factories => + public async override Task PublishManyFromOutboxAsync( + IEnumerable outgoingEvents, + OutboxConfig outboxConfig) + { + using (var channel = ConnectionPool.Get(AbpRabbitMqEventBusOptions.ConnectionName).CreateModel()) { - factories.RemoveAll( - factory => + var outgoingEventArray = outgoingEvents.ToArray(); + channel.ConfirmSelect(); + + var pendingConfirms = new ConcurrentDictionary(); + var failures = new ConcurrentBag(); + + void CleanPendingConfirms(ulong sequenceNumber, bool multiple, bool ack) + { + if (multiple) { - var singleInstanceFactory = factory as SingleInstanceHandlerFactory; - if (singleInstanceFactory == null) + var confirmed = pendingConfirms.Where(x => x.Key <= sequenceNumber); + foreach (var entry in confirmed) { - return false; + pendingConfirms.TryRemove(entry.Key, out var eventId); + + if (!ack) + { + failures.Add(eventId); + } } + } + else + { + pendingConfirms.TryRemove(sequenceNumber, out var eventId); - var actionHandler = singleInstanceFactory.HandlerInstance as ActionEventHandler; - if (actionHandler == null) + if (!ack) { - return false; + failures.Add(eventId); } + } + } - return actionHandler.Action == action; - }); - }); - } + foreach (var outgoingEvent in outgoingEventArray) + { + pendingConfirms.TryAdd(channel.NextPublishSeqNo, outgoingEvent.Id); + await PublishInternalAsync(channel, outgoingEvent.EventName, outgoingEvent.EventData, null, eventId: outgoingEvent.Id); + } - /// - public override void Unsubscribe(Type eventType, IEventHandler handler) - { - GetOrCreateHandlerFactories(eventType) - .Locking(factories => - { - factories.RemoveAll( - factory => - factory is SingleInstanceHandlerFactory && - (factory as SingleInstanceHandlerFactory).HandlerInstance == handler - ); - }); - } + channel.BasicAcks += (_, ea) => CleanPendingConfirms(ea.DeliveryTag, ea.Multiple, true); + channel.BasicNacks += (_, ea) => CleanPendingConfirms(ea.DeliveryTag, ea.Multiple, false); - /// - public override void Unsubscribe(Type eventType, IEventHandlerFactory factory) - { - GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Remove(factory)); - } - - /// - public override void UnsubscribeAll(Type eventType) - { - GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear()); - } + channel.WaitForConfirms(); - protected override async Task PublishToEventBusAsync(Type eventType, object eventData) - { - await PublishAsync(eventType, eventData, null); - } - - protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord) - { - unitOfWork.AddOrReplaceDistributedEvent(eventRecord); - } - - public override Task PublishFromOutboxAsync( - OutgoingEventInfo outgoingEvent, - OutboxConfig outboxConfig) - { - return PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData, null, eventId: outgoingEvent.Id); - } + return new MultipleOutgoingEventPublishResult(outgoingEventArray.Where(x => !failures.Contains(x.Id)).ToList()); + } + } - public override async Task ProcessFromInboxAsync( - IncomingEventInfo incomingEvent, - InboxConfig inboxConfig) - { - var eventType = EventTypes.GetOrDefault(incomingEvent.EventName); - if (eventType == null) + public async override Task ProcessFromInboxAsync( + IncomingEventInfo incomingEvent, + InboxConfig inboxConfig) { - return; + var eventType = EventTypes.GetOrDefault(incomingEvent.EventName); + if (eventType == null) + { + return; + } + + var eventData = Serializer.Deserialize(incomingEvent.EventData, eventType); + var exceptions = new List(); + await TriggerHandlersAsync(eventType, eventData, exceptions, inboxConfig); + if (exceptions.Any()) + { + ThrowOriginalExceptions(eventType, exceptions); + } } - var eventData = Serializer.Deserialize(incomingEvent.EventData, eventType); - var exceptions = new List(); - await TriggerHandlersAsync(eventType, eventData, exceptions, inboxConfig); - if (exceptions.Any()) + protected override byte[] Serialize(object eventData) { - ThrowOriginalExceptions(eventType, exceptions); + return Serializer.Serialize(eventData); } - } - protected override byte[] Serialize(object eventData) - { - return Serializer.Serialize(eventData); - } + public virtual Task PublishAsync(Type eventType, object eventData, IBasicProperties properties, Dictionary headersArguments = null) + { + var eventName = EventNameAttribute.GetNameOrDefault(eventType); + var body = Serializer.Serialize(eventData); - public Task PublishAsync(Type eventType, object eventData, IBasicProperties properties, Dictionary headersArguments = null) - { - var eventName = EventNameAttribute.GetNameOrDefault(eventType); - var body = Serializer.Serialize(eventData); + return PublishAsync(eventName, body, properties, headersArguments); + } - return PublishAsync(eventName, body, properties, headersArguments); - } + protected virtual Task PublishAsync( + string eventName, + byte[] body, + IBasicProperties properties, + Dictionary headersArguments = null, + Guid? eventId = null) + { + using (var channel = ConnectionPool.Get(AbpRabbitMqEventBusOptions.ConnectionName).CreateModel()) + { + return PublishInternalAsync(channel, eventName, body, properties, headersArguments, eventId); + } + } - protected Task PublishAsync( - string eventName, - byte[] body, - IBasicProperties properties, - Dictionary headersArguments = null, - Guid? eventId = null) - { - using (var channel = ConnectionPool.Get(AbpRabbitMqEventBusOptions.ConnectionName).CreateModel()) + protected virtual Task PublishInternalAsync( + IModel channel, + string eventName, + byte[] body, + IBasicProperties properties, + Dictionary headersArguments = null, + Guid? eventId = null) { channel.ExchangeDeclare( AbpRabbitMqEventBusOptions.ExchangeName, @@ -262,68 +327,68 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe basicProperties: properties, body: body ); - } - return Task.CompletedTask; - } - - private void SetEventMessageHeaders(IBasicProperties properties, Dictionary headersArguments) - { - if (headersArguments == null) - { - return; + return Task.CompletedTask; } - properties.Headers ??= new Dictionary(); - - foreach (var header in headersArguments) + private void SetEventMessageHeaders(IBasicProperties properties, Dictionary headersArguments) { - properties.Headers[header.Key] = header.Value; - } - } - - private List GetOrCreateHandlerFactories(Type eventType) - { - return HandlerFactories.GetOrAdd( - eventType, - type => + if (headersArguments == null) { - var eventName = EventNameAttribute.GetNameOrDefault(type); - EventTypes[eventName] = type; - return new List(); + return; } - ); - } - protected override IEnumerable GetHandlerFactories(Type eventType) - { - var handlerFactoryList = new List(); + properties.Headers ??= new Dictionary(); - foreach (var handlerFactory in - HandlerFactories.Where(hf => ShouldTriggerEventForHandler(eventType, hf.Key))) - { - handlerFactoryList.Add( - new EventTypeWithEventHandlerFactories(handlerFactory.Key, handlerFactory.Value)); + foreach (var header in headersArguments) + { + properties.Headers[header.Key] = header.Value; + } } - return handlerFactoryList.ToArray(); - } - - private static bool ShouldTriggerEventForHandler(Type targetEventType, Type handlerEventType) - { - //Should trigger same type - if (handlerEventType == targetEventType) + private List GetOrCreateHandlerFactories(Type eventType) { - return true; + return HandlerFactories.GetOrAdd( + eventType, + type => + { + var eventName = EventNameAttribute.GetNameOrDefault(type); + EventTypes[eventName] = type; + return new List(); + } + ); } - //TODO: Support inheritance? But it does not support on subscription to RabbitMq! - //Should trigger for inherited types - if (handlerEventType.IsAssignableFrom(targetEventType)) + protected override IEnumerable GetHandlerFactories(Type eventType) { - return true; + var handlerFactoryList = new List(); + + foreach (var handlerFactory in + HandlerFactories.Where(hf => ShouldTriggerEventForHandler(eventType, hf.Key))) + { + handlerFactoryList.Add( + new EventTypeWithEventHandlerFactories(handlerFactory.Key, handlerFactory.Value)); + } + + return handlerFactoryList.ToArray(); } - return false; + private static bool ShouldTriggerEventForHandler(Type targetEventType, Type handlerEventType) + { + //Should trigger same type + if (handlerEventType == targetEventType) + { + return true; + } + + //TODO: Support inheritance? But it does not support on subscription to RabbitMq! + //Should trigger for inherited types + if (handlerEventType.IsAssignableFrom(targetEventType)) + { + return true; + } + + return false; + } } } diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 0542a705eb..aad844a4d7 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -146,7 +146,7 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen await TriggerHandlersAsync(eventType, eventData); } - protected override async Task PublishToEventBusAsync(Type eventType, object eventData) + protected async override Task PublishToEventBusAsync(Type eventType, object eventData) { await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData); } @@ -210,7 +210,12 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen return PublishToEventBusAsync(eventType, eventData); } - public override async Task ProcessFromInboxAsync( + public override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) + { + throw new NotImplementedException(); + } + + public async override Task ProcessFromInboxAsync( IncomingEventInfo incomingEvent, InboxConfig inboxConfig) { diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index dee9d1f7d3..178dea1340 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -8,156 +8,162 @@ using Volo.Abp.MultiTenancy; using Volo.Abp.Timing; using Volo.Abp.Uow; -namespace Volo.Abp.EventBus.Distributed; - -public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventBus, ISupportsEventBoxes +namespace Volo.Abp.EventBus.Distributed { - protected IGuidGenerator GuidGenerator { get; } - protected IClock Clock { get; } - protected AbpDistributedEventBusOptions AbpDistributedEventBusOptions { get; } - - protected DistributedEventBusBase( - IServiceScopeFactory serviceScopeFactory, - ICurrentTenant currentTenant, - IUnitOfWorkManager unitOfWorkManager, - IOptions abpDistributedEventBusOptions, - IGuidGenerator guidGenerator, - IClock clock - ) : base( - serviceScopeFactory, - currentTenant, - unitOfWorkManager) - { - GuidGenerator = guidGenerator; - Clock = clock; - AbpDistributedEventBusOptions = abpDistributedEventBusOptions.Value; - } - - public IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class + public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventBus, ISupportsEventBoxes { - return Subscribe(typeof(TEvent), handler); - } + protected IGuidGenerator GuidGenerator { get; } + protected IClock Clock { get; } + protected AbpDistributedEventBusOptions AbpDistributedEventBusOptions { get; } + + protected DistributedEventBusBase( + IServiceScopeFactory serviceScopeFactory, + ICurrentTenant currentTenant, + IUnitOfWorkManager unitOfWorkManager, + IOptions abpDistributedEventBusOptions, + IGuidGenerator guidGenerator, + IClock clock + ) : base( + serviceScopeFactory, + currentTenant, + unitOfWorkManager) + { + GuidGenerator = guidGenerator; + Clock = clock; + AbpDistributedEventBusOptions = abpDistributedEventBusOptions.Value; + } - public override Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true) - { - return PublishAsync(eventType, eventData, onUnitOfWorkComplete, useOutbox: true); - } + public IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class + { + return Subscribe(typeof(TEvent), handler); + } - public Task PublishAsync( - TEvent eventData, - bool onUnitOfWorkComplete = true, - bool useOutbox = true) - where TEvent : class - { - return PublishAsync(typeof(TEvent), eventData, onUnitOfWorkComplete, useOutbox); - } + public override Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true) + { + return PublishAsync(eventType, eventData, onUnitOfWorkComplete, useOutbox: true); + } - public async Task PublishAsync( - Type eventType, - object eventData, - bool onUnitOfWorkComplete = true, - bool useOutbox = true) - { - if (onUnitOfWorkComplete && UnitOfWorkManager.Current != null) + public Task PublishAsync( + TEvent eventData, + bool onUnitOfWorkComplete = true, + bool useOutbox = true) + where TEvent : class { - AddToUnitOfWork( - UnitOfWorkManager.Current, - new UnitOfWorkEventRecord(eventType, eventData, EventOrderGenerator.GetNext(), useOutbox) - ); - return; + return PublishAsync(typeof(TEvent), eventData, onUnitOfWorkComplete, useOutbox); } - if (useOutbox) + public async Task PublishAsync( + Type eventType, + object eventData, + bool onUnitOfWorkComplete = true, + bool useOutbox = true) { - if (await AddToOutboxAsync(eventType, eventData)) + if (onUnitOfWorkComplete && UnitOfWorkManager.Current != null) { + AddToUnitOfWork( + UnitOfWorkManager.Current, + new UnitOfWorkEventRecord(eventType, eventData, EventOrderGenerator.GetNext(), useOutbox) + ); return; } - } - await PublishToEventBusAsync(eventType, eventData); - } + if (useOutbox) + { + if (await AddToOutboxAsync(eventType, eventData)) + { + return; + } + } - public abstract Task PublishFromOutboxAsync( - OutgoingEventInfo outgoingEvent, - OutboxConfig outboxConfig - ); + await PublishToEventBusAsync(eventType, eventData); + } - public abstract Task ProcessFromInboxAsync( - IncomingEventInfo incomingEvent, - InboxConfig inboxConfig); + public abstract Task PublishFromOutboxAsync( + OutgoingEventInfo outgoingEvent, + OutboxConfig outboxConfig + ); - private async Task AddToOutboxAsync(Type eventType, object eventData) - { - var unitOfWork = UnitOfWorkManager.Current; - if (unitOfWork == null) - { - return false; - } + public abstract Task PublishManyFromOutboxAsync( + IEnumerable outgoingEvents, + OutboxConfig outboxConfig + ); + + public abstract Task ProcessFromInboxAsync( + IncomingEventInfo incomingEvent, + InboxConfig inboxConfig); - foreach (var outboxConfig in AbpDistributedEventBusOptions.Outboxes.Values) + private async Task AddToOutboxAsync(Type eventType, object eventData) { - if (outboxConfig.Selector == null || outboxConfig.Selector(eventType)) + var unitOfWork = UnitOfWorkManager.Current; + if (unitOfWork == null) { - var eventOutbox = (IEventOutbox)unitOfWork.ServiceProvider.GetRequiredService(outboxConfig.ImplementationType); - var eventName = EventNameAttribute.GetNameOrDefault(eventType); - await eventOutbox.EnqueueAsync( - new OutgoingEventInfo( - GuidGenerator.Create(), - eventName, - Serialize(eventData), - Clock.Now - ) - ); - return true; + return false; } - } - return false; - } + foreach (var outboxConfig in AbpDistributedEventBusOptions.Outboxes.Values) + { + if (outboxConfig.Selector == null || outboxConfig.Selector(eventType)) + { + var eventOutbox = (IEventOutbox)unitOfWork.ServiceProvider.GetRequiredService(outboxConfig.ImplementationType); + var eventName = EventNameAttribute.GetNameOrDefault(eventType); + await eventOutbox.EnqueueAsync( + new OutgoingEventInfo( + GuidGenerator.Create(), + eventName, + Serialize(eventData), + Clock.Now + ) + ); + return true; + } + } - protected async Task AddToInboxAsync( - string messageId, - string eventName, - Type eventType, - byte[] eventBytes) - { - if (AbpDistributedEventBusOptions.Inboxes.Count <= 0) - { return false; } - using (var scope = ServiceScopeFactory.CreateScope()) + protected async Task AddToInboxAsync( + string messageId, + string eventName, + Type eventType, + byte[] eventBytes) { - foreach (var inboxConfig in AbpDistributedEventBusOptions.Inboxes.Values) + if (AbpDistributedEventBusOptions.Inboxes.Count <= 0) { - if (inboxConfig.EventSelector == null || inboxConfig.EventSelector(eventType)) - { - var eventInbox = (IEventInbox)scope.ServiceProvider.GetRequiredService(inboxConfig.ImplementationType); + return false; + } - if (!messageId.IsNullOrEmpty()) + using (var scope = ServiceScopeFactory.CreateScope()) + { + foreach (var inboxConfig in AbpDistributedEventBusOptions.Inboxes.Values) + { + if (inboxConfig.EventSelector == null || inboxConfig.EventSelector(eventType)) { - if (await eventInbox.ExistsByMessageIdAsync(messageId)) + var eventInbox = (IEventInbox) scope.ServiceProvider.GetRequiredService(inboxConfig.ImplementationType); + + if (!messageId.IsNullOrEmpty()) { - continue; + if (await eventInbox.ExistsByMessageIdAsync(messageId)) + { + continue; + } } - } - await eventInbox.EnqueueAsync( - new IncomingEventInfo( - GuidGenerator.Create(), - messageId, - eventName, - eventBytes, - Clock.Now - ) - ); + await eventInbox.EnqueueAsync( + new IncomingEventInfo( + GuidGenerator.Create(), + messageId, + eventName, + eventBytes, + Clock.Now + ) + ); + } } } + + return true; } - return true; + protected abstract byte[] Serialize(object eventData); } - - protected abstract byte[] Serialize(object eventData); } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs index 6ecefcf002..018747945c 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs @@ -12,4 +12,6 @@ public interface IEventOutbox Task> GetWaitingEventsAsync(int maxCount, CancellationToken cancellationToken = default); Task DeleteAsync(Guid id); + + Task DeleteManyAsync(IEnumerable ids); } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs index 37405fb58a..7c23be5ecd 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Threading.Tasks; namespace Volo.Abp.EventBus.Distributed; @@ -9,6 +10,11 @@ public interface ISupportsEventBoxes OutboxConfig outboxConfig ); + Task PublishManyFromOutboxAsync( + IEnumerable outgoingEvents, + OutboxConfig outboxConfig + ); + Task ProcessFromInboxAsync( IncomingEventInfo incomingEvent, InboxConfig inboxConfig diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs index 50c1a4e009..0d22245d13 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs @@ -98,7 +98,7 @@ public class InboxProcessor : IInboxProcessor, ITransientDependency break; } - Logger.LogInformation($"Found {waitingEvents.Count} events in the inbox."); + //Logger.LogInformation($"Found {waitingEvents.Count} events in the inbox."); foreach (var waitingEvent in waitingEvents) { @@ -113,7 +113,7 @@ public class InboxProcessor : IInboxProcessor, ITransientDependency await uow.CompleteAsync(); } - Logger.LogInformation($"Processed the incoming event with id = {waitingEvent.Id:N}"); + //Logger.LogInformation($"Processed the incoming event with id = {waitingEvent.Id:N}"); } } } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs index 6ed60ba34c..d42110e4ea 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs @@ -1,4 +1,6 @@ using System; +using System.Diagnostics; +using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -76,25 +78,20 @@ public class OutboxSender : IOutboxSender, ITransientDependency while (true) { var waitingEvents = await Outbox.GetWaitingEventsAsync(EventBusBoxesOptions.OutboxWaitingEventMaxCount, StoppingToken); - if (waitingEvents.Count <= 0) + if (waitingEvents.Count < 1000) { break; } Logger.LogInformation($"Found {waitingEvents.Count} events in the outbox."); - foreach (var waitingEvent in waitingEvents) - { - await DistributedEventBus - .AsSupportsEventBoxes() - .PublishFromOutboxAsync( - waitingEvent, - OutboxConfig - ); + var result = await DistributedEventBus + .AsSupportsEventBoxes() + .PublishManyFromOutboxAsync(waitingEvents, OutboxConfig); - await Outbox.DeleteAsync(waitingEvent.Id); - Logger.LogInformation($"Sent the event to the message broker with id = {waitingEvent.Id:N}"); - } + await Outbox.DeleteManyAsync(result.PublishedOutgoingEvents.Select(x => x.Id).ToArray()); + + Logger.LogInformation($"Sent {result.PublishedOutgoingEvents.Count} events to message broker"); } } else diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/MultipleOutgoingEventPublishResult.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/MultipleOutgoingEventPublishResult.cs new file mode 100644 index 0000000000..515dec1ae6 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/MultipleOutgoingEventPublishResult.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EventBus; + +public class MultipleOutgoingEventPublishResult +{ + public IReadOnlyList PublishedOutgoingEvents { get; } + + public MultipleOutgoingEventPublishResult(IReadOnlyList outgoingEvents) + { + PublishedOutgoingEvents = outgoingEvents; + } +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs index 1f3ae999b0..fae0709953 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs @@ -68,4 +68,18 @@ public class MongoDbContextEventOutbox : IMongoDbContextEventOu await dbContext.OutgoingEvents.DeleteOneAsync(x => x.Id.Equals(id)); } } + + [UnitOfWork] + public async Task DeleteManyAsync(IEnumerable ids) + { + var dbContext = (IHasEventOutbox)await MongoDbContextProvider.GetDbContextAsync(); + if (dbContext.SessionHandle != null) + { + await dbContext.OutgoingEvents.DeleteManyAsync(dbContext.SessionHandle, x => ids.Contains(x.Id)); + } + else + { + await dbContext.OutgoingEvents.DeleteManyAsync(x => ids.Contains(x.Id)); + } + } } From 5ee59194637c187ecfee34aab7163c801e182044 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sun, 9 Jan 2022 20:24:39 +0800 Subject: [PATCH 002/272] Batch publish events from outbox to the kafka event bus --- .../Kafka/KafkaDistributedEventBus.cs | 44 ++++++++++++++----- .../Abp/EventBus/Kafka/MessageExtensions.cs | 18 ++++++++ .../EventBus/Distributed/InboxProcessor.cs | 4 +- .../Abp/EventBus/Distributed/OutboxSender.cs | 2 +- 4 files changed, 55 insertions(+), 13 deletions(-) create mode 100644 framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/MessageExtensions.cs diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index 23ae188170..aef7662095 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -77,12 +77,7 @@ public class KafkaDistributedEventBus : DistributedEventBusBase, ISingletonDepen return; } - string messageId = null; - - if (message.Headers.TryGetLastBytes("messageId", out var messageIdBytes)) - { - messageId = System.Text.Encoding.UTF8.GetString(messageIdBytes); - } + var messageId = message.GetMessageId(); if (await AddToInboxAsync(messageId, eventName, eventType, message.Value)) { @@ -196,9 +191,38 @@ public class KafkaDistributedEventBus : DistributedEventBusBase, ISingletonDepen ); } - public override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) + public async override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) { - throw new NotImplementedException(); + var pendingConfirms = new ConcurrentDictionary(); + var outgoingEventArray = outgoingEvents.ToArray(); + + var tasks = new List(); + foreach (var outgoingEvent in outgoingEventArray) + { + var messageId = outgoingEvent.Id.ToString("N"); + pendingConfirms.TryAdd(messageId, outgoingEvent.Id); + + var task = PublishAsync( + AbpKafkaEventBusOptions.TopicName, + outgoingEvent.EventName, + outgoingEvent.EventData, + new Headers { { "messageId", System.Text.Encoding.UTF8.GetBytes(messageId)} }, + null + ); + + tasks.Add(task.ContinueWith(t => + { + if (!t.IsFaulted) + { + var message = t.Result.Message; + pendingConfirms.TryRemove(message.GetMessageId(), out _); + } + })); + } + + await Task.WhenAll(tasks); + + return new MultipleOutgoingEventPublishResult(outgoingEventArray.Where(x => !pendingConfirms.Select(p => p.Value).Contains(x.Id)).ToList()); } public async override Task ProcessFromInboxAsync( @@ -244,13 +268,13 @@ public class KafkaDistributedEventBus : DistributedEventBusBase, ISingletonDepen return PublishAsync(topicName, eventName, body, headers, headersArguments); } - private async Task PublishAsync(string topicName, string eventName, byte[] body, Headers headers, Dictionary headersArguments) + private Task> PublishAsync(string topicName, string eventName, byte[] body, Headers headers, Dictionary headersArguments) { var producer = ProducerPool.Get(AbpKafkaEventBusOptions.ConnectionName); SetEventMessageHeaders(headers, headersArguments); - await producer.ProduceAsync( + return producer.ProduceAsync( topicName, new Message { diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/MessageExtensions.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/MessageExtensions.cs new file mode 100644 index 0000000000..17a80ec87c --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/MessageExtensions.cs @@ -0,0 +1,18 @@ +using Confluent.Kafka; + +namespace Volo.Abp.EventBus.Kafka; + +public static class MessageExtensions +{ + public static string GetMessageId(this Message message) + { + string messageId = null; + + if (message.Headers.TryGetLastBytes("messageId", out var messageIdBytes)) + { + messageId = System.Text.Encoding.UTF8.GetString(messageIdBytes); + } + + return messageId; + } +} diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs index 0d22245d13..50c1a4e009 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs @@ -98,7 +98,7 @@ public class InboxProcessor : IInboxProcessor, ITransientDependency break; } - //Logger.LogInformation($"Found {waitingEvents.Count} events in the inbox."); + Logger.LogInformation($"Found {waitingEvents.Count} events in the inbox."); foreach (var waitingEvent in waitingEvents) { @@ -113,7 +113,7 @@ public class InboxProcessor : IInboxProcessor, ITransientDependency await uow.CompleteAsync(); } - //Logger.LogInformation($"Processed the incoming event with id = {waitingEvent.Id:N}"); + Logger.LogInformation($"Processed the incoming event with id = {waitingEvent.Id:N}"); } } } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs index d42110e4ea..17dec0a810 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs @@ -78,7 +78,7 @@ public class OutboxSender : IOutboxSender, ITransientDependency while (true) { var waitingEvents = await Outbox.GetWaitingEventsAsync(EventBusBoxesOptions.OutboxWaitingEventMaxCount, StoppingToken); - if (waitingEvents.Count < 1000) + if (waitingEvents.Count <= 0) { break; } From f36c44fc78203c4f520cfce62d99fce82ecb24c4 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sun, 9 Jan 2022 20:50:17 +0800 Subject: [PATCH 003/272] Batch publish events from outbox to the azure event bus --- .../Azure/AzureDistributedEventBus.cs | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs index b253164161..a253a8ba96 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs @@ -90,9 +90,38 @@ public class AzureDistributedEventBus : DistributedEventBusBase, ISingletonDepen await PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData); } - public override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) + public async override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) { - throw new NotImplementedException(); + var outgoingEventArray = outgoingEvents.ToArray(); + var failures = new List(); + + var publisher = await _publisherPool.GetAsync( + _options.TopicName, + _options.ConnectionName); + + using var messageBatch = await publisher.CreateMessageBatchAsync(); + + var failed = false; + foreach (var outgoingEvent in outgoingEventArray) + { + if (failed) + { + failures.Add(outgoingEvent.Id); + continue; + } + + var body = _serializer.Serialize(outgoingEvent.EventData); + + if (!messageBatch.TryAddMessage(new ServiceBusMessage(body) { Subject = outgoingEvent.EventName })) + { + failed = true; + failures.Add(outgoingEvent.Id); + } + } + + await publisher.SendMessagesAsync(messageBatch); + + return new MultipleOutgoingEventPublishResult(outgoingEventArray.Where(x => !failures.Contains(x.Id)).ToList()); } public async override Task ProcessFromInboxAsync(IncomingEventInfo incomingEvent, InboxConfig inboxConfig) @@ -183,7 +212,7 @@ public class AzureDistributedEventBus : DistributedEventBusBase, ISingletonDepen .Locking(factories => factories.Clear()); } - protected override async Task PublishToEventBusAsync(Type eventType, object eventData) + protected async override Task PublishToEventBusAsync(Type eventType, object eventData) { await PublishAsync(EventNameAttribute.GetNameOrDefault(eventType), eventData); } From 9ec54780d475ca56c2c6086039a9bb4d42a4371c Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sun, 9 Jan 2022 21:18:48 +0800 Subject: [PATCH 004/272] Batch publish events from outbox to the rebus event bus --- .../EventBus/Rebus/AbpRebusEventBusOptions.cs | 13 +--------- .../Rebus/RebusDistributedEventBus.cs | 24 ++++++++++++++++--- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs index 5238cdd8bb..4c39b9bf1d 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs @@ -20,24 +20,13 @@ public class AbpRebusEventBusOptions } private Action _configurer; - [NotNull] - public Func Publish { - get => _publish; - set => _publish = Check.NotNull(value, nameof(value)); - } - private Func _publish; + public Func Publish { get; set; } public AbpRebusEventBusOptions() { - _publish = DefaultPublish; _configurer = DefaultConfigure; } - private async Task DefaultPublish(IBus bus, Type eventType, object eventData) - { - await bus.Advanced.Routing.Send(InputQueueName, eventData); - } - private void DefaultConfigure(RebusConfigurer configure) { configure.Subscriptions(s => s.StoreInMemory()); diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index aad844a4d7..fc6a0667af 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -148,7 +148,18 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen protected async override Task PublishToEventBusAsync(Type eventType, object eventData) { - await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData); + await PublishAsync(eventType, eventData); + } + + protected virtual async Task PublishAsync(Type eventType, object eventData) + { + if (AbpRebusEventBusOptions.Publish != null) + { + await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData); + return; + } + + await Rebus.Advanced.Routing.Send(AbpRebusEventBusOptions.InputQueueName, eventData); } protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord) @@ -210,9 +221,16 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen return PublishToEventBusAsync(eventType, eventData); } - public override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) + public async override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) { - throw new NotImplementedException(); + var outgoingEventArray = outgoingEvents.ToArray(); + + foreach (var outgoingEvent in outgoingEventArray) + { + await PublishFromOutboxAsync(outgoingEvent, outboxConfig); + } + + return new MultipleOutgoingEventPublishResult(outgoingEventArray); } public async override Task ProcessFromInboxAsync( From 325f82a3d7a7448f7e7b3b73438f965810b93500 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 10 Jan 2022 17:11:06 +0800 Subject: [PATCH 005/272] Update AzureDistributedEventBus --- .../Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs index ffcf6df8c7..5e91a224c5 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs @@ -110,9 +110,7 @@ public class AzureDistributedEventBus : DistributedEventBusBase, ISingletonDepen continue; } - var body = _serializer.Serialize(outgoingEvent.EventData); - - if (!messageBatch.TryAddMessage(new ServiceBusMessage(body) { Subject = outgoingEvent.EventName })) + if (!messageBatch.TryAddMessage(new ServiceBusMessage(outgoingEvent.EventData) { Subject = outgoingEvent.EventName })) { failed = true; failures.Add(outgoingEvent.Id); From 3364e7e2273b395b87a5395513a3b5585ac5ddf9 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 14 Jan 2022 14:28:30 +0800 Subject: [PATCH 006/272] Update RabbitMqDistributedEventBus.cs --- .../Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index a9cfb4dc23..a9d6a42207 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -238,7 +238,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe foreach (var outgoingEvent in outgoingEventArray) { pendingConfirms.TryAdd(channel.NextPublishSeqNo, outgoingEvent.Id); - await PublishInternalAsync(channel, outgoingEvent.EventName, outgoingEvent.EventData, null, + await PublishAsync(channel, outgoingEvent.EventName, outgoingEvent.EventData, null, eventId: outgoingEvent.Id); } @@ -293,11 +293,11 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe { using (var channel = ConnectionPool.Get(AbpRabbitMqEventBusOptions.ConnectionName).CreateModel()) { - return PublishInternalAsync(channel, eventName, body, properties, headersArguments, eventId); + return PublishAsync(channel, eventName, body, properties, headersArguments, eventId); } } - protected virtual Task PublishInternalAsync( + protected virtual Task PublishAsync( IModel channel, string eventName, byte[] body, From 0c45dccd54f9c70b6fb2008df81b22655a5f2d20 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 25 Jan 2022 14:17:09 +0800 Subject: [PATCH 007/272] Update Rebus --- .../Abp/EventBus/Rebus/RebusDistributedEventBus.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 81611e180a..a5cac31235 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -7,6 +7,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Rebus.Bus; using Rebus.Pipeline; +using Rebus.Transport; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Guids; @@ -227,9 +228,14 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen { var outgoingEventArray = outgoingEvents.ToArray(); - foreach (var outgoingEvent in outgoingEventArray) + using (var scope = new RebusTransactionScope()) { - await PublishFromOutboxAsync(outgoingEvent, outboxConfig); + foreach (var outgoingEvent in outgoingEventArray) + { + await PublishFromOutboxAsync(outgoingEvent, outboxConfig); + } + + await scope.CompleteAsync(); } return new MultipleOutgoingEventPublishResult(outgoingEventArray); From 282d9ada01463503afbfce2bcbe34f68b9cb48db Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 25 Jan 2022 14:20:56 +0800 Subject: [PATCH 008/272] Update RabbitMqMessageConsumer.cs --- .../Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs index 049e8da712..8ce184295a 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs @@ -176,14 +176,6 @@ public class RabbitMqMessageConsumer : IRabbitMqMessageConsumer, ITransientDepen } catch (Exception ex) { - if (ex is OperationInterruptedException operationInterruptedException && - operationInterruptedException.ShutdownReason.ReplyCode == 406 && - operationInterruptedException.Message.Contains("arg 'x-dead-letter-exchange'")) - { - Logger.LogException(ex, LogLevel.Warning); - await ExceptionNotifier.NotifyAsync(ex, logLevel: LogLevel.Warning); - } - Logger.LogException(ex, LogLevel.Warning); await ExceptionNotifier.NotifyAsync(ex, logLevel: LogLevel.Warning); } From 7e0c9dbf2d5b10066819cdee116ad9cdae6c8d23 Mon Sep 17 00:00:00 2001 From: berkansasmaz Date: Tue, 1 Mar 2022 13:33:02 +0300 Subject: [PATCH 009/272] Update en.json --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 3bb6320874..ff1305a336 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -103,6 +103,7 @@ "PreviousEvents": "Previous Events", "WatchTheEvent": "Watch the Event", "RegisterNow": "Register Now", - "ThereIsNoEvent": "There is no event." + "ThereIsNoEvent": "There is no event.", + "Events": "Events" } } From 64bb78f9dcf86b4bb8e67c42ea75815ef5dbe449 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Sat, 5 Mar 2022 20:34:33 +0300 Subject: [PATCH 010/272] Update en.json --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 3af6d451e4..54c1660f18 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -384,6 +384,7 @@ "SpeakerDeletionConfirmationMessage": "Are you sure you want to delete this speaker?", "Menu:Speakers": "Speakers", "ChooseSpeakerImage": "Choose a speaker image...", - "SpeakerImage": "Speaker image" + "SpeakerImage": "Speaker image", + "AddSpeaker": "Add Speaker" } } From 1355b55a980ee68de88b849f2688bdc4cb66b426 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Tue, 8 Mar 2022 11:42:25 +0300 Subject: [PATCH 011/272] Add new localizations for abp.io --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 21a64a34ef..68a6b254ff 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -318,6 +318,7 @@ "InstallingTheABPCLI": "Installing the ABP CLI", "CreateYourProjectNow": "Create Your Project Now", "OrderOn": "Order on {0}", - "DownloadFreeDDDBook": "Download Free DDD Book" + "DownloadFreeDDDBook": "Download Free DDD Book", + "WhatIsABPFramework": "What is the ABP Framework?" } } From abf75f88953e6ac006a3a6fbff28bbedd1d23e5c Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 8 Mar 2022 13:55:05 +0300 Subject: [PATCH 012/272] Blogging: Convert tags to lowercase resolves https://github.com/abpframework/abp/issues/11699 --- .../Volo/Blogging/Posts/PostAppService.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs index 457656291f..15506ecf70 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs @@ -231,11 +231,16 @@ namespace Volo.Blogging.Posts return url; } - private async Task SaveTags(ICollection newTags, Post post) + private async Task SaveTags(ICollection tags, Post post) { - await RemoveOldTags(newTags, post); - - await AddNewTags(newTags, post); + tags = tags + .Select(t => t.ToLowerInvariant()) + .Distinct() + .ToList(); + + await RemoveOldTags(tags, post); + + await AddNewTags(tags, post); } private async Task RemoveOldTags(ICollection newTags, Post post) From db7daeda5ba410837c7545a34955ade6250e66b1 Mon Sep 17 00:00:00 2001 From: rqx110 Date: Thu, 10 Mar 2022 13:55:07 +0800 Subject: [PATCH 013/272] feat(cms-kit): using codemirror as global resources editor --- .../Pages/CmsKit/GlobalResources/Index.cshtml | 8 ++++++++ .../Pages/CmsKit/GlobalResources/index.js | 19 +++++++++++++++++-- npm/packs/cms-kit.admin/package.json | 3 ++- npm/packs/codemirror/abp.resourcemapping.js | 5 ++++- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml index b67a147baa..615ef31477 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml @@ -2,6 +2,7 @@ @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.AspNetCore.Mvc.UI.Layout +@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Codemirror @using Volo.CmsKit.Admin.Web.Pages.CmsKit.GlobalResources @using Volo.CmsKit.Admin.Web.Menus @using Volo.CmsKit.Localization @@ -17,8 +18,15 @@ PageLayout.Content.MenuItemName = CmsKitAdminMenus.GlobalResources.GlobalResourcesMenu; } +@section styles{ + +} + @section scripts { + + + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js index 72fb11e8dc..c58447b22d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js @@ -3,11 +3,26 @@ $(function (){ var service = volo.cmsKit.admin.globalResources.globalResourceAdmin; + var scriptEditor = CodeMirror.fromTextArea(document.getElementById("ScriptContent"),{ + mode:"javascript", + lineNumbers:true + }); + + var styleEditor = CodeMirror.fromTextArea(document.getElementById("StyleContent"),{ + mode:"css", + lineNumbers:true + }); + + $('.nav-tabs a').on('shown.bs.tab', function() { + scriptEditor.refresh(); + styleEditor.refresh(); + }); + $('#SaveResourcesButton').on('click','',function(){ service.setGlobalResources( { - style: $('#StyleContent').val(), - script: $('#ScriptContent').val() + style: styleEditor.getValue(), + script: scriptEditor.getValue() } ).then(function () { abp.message.success(l("SavedSuccessfully")); diff --git a/npm/packs/cms-kit.admin/package.json b/npm/packs/cms-kit.admin/package.json index 528bdb3ac0..524583a187 100644 --- a/npm/packs/cms-kit.admin/package.json +++ b/npm/packs/cms-kit.admin/package.json @@ -8,7 +8,8 @@ "@abp/jstree": "~5.2.0-rc.1", "@abp/slugify": "~5.2.0-rc.1", "@abp/tui-editor": "~5.2.0-rc.1", - "@abp/uppy": "~5.2.0-rc.1" + "@abp/uppy": "~5.2.0-rc.1", + "@abp/codemirror": "~5.2.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/codemirror/abp.resourcemapping.js b/npm/packs/codemirror/abp.resourcemapping.js index 71731c389b..d7f349b54a 100644 --- a/npm/packs/codemirror/abp.resourcemapping.js +++ b/npm/packs/codemirror/abp.resourcemapping.js @@ -1,5 +1,8 @@ module.exports = { mappings: { - "@node_modules/codemirror/lib/*.*": "@libs/codemirror/" + "@node_modules/codemirror/lib/*.*": "@libs/codemirror/", + "@node_modules/codemirror/mode/**/*.*": "@libs/codemirror/mode/", + "@node_modules/codemirror/theme/**/*.*": "@libs/codemirror/theme/", + "@node_modules/codemirror/addon/**/*.*": "@libs/codemirror/addon/" } } \ No newline at end of file From 7317e493279e09d2f11322b04310c7442916bf27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 10 Mar 2022 18:49:39 +0300 Subject: [PATCH 014/272] Increment version --- common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.props b/common.props index 12a177739b..facc92f0bc 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 5.2.0-rc.1 + 5.3.0 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ From eb7fa083356f10c5f251379093b90d3fb92bba5d Mon Sep 17 00:00:00 2001 From: William Obando Date: Thu, 10 Mar 2022 22:49:14 -0500 Subject: [PATCH 015/272] Add option to disable service bus --- .../Abp/EventBus/Azure/AbpAzureEventBusOptions.cs | 2 ++ .../Abp/EventBus/Azure/AbpEventBusAzureModule.cs | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs index a6aa2f9857..57fa4b7f48 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs @@ -7,4 +7,6 @@ public class AbpAzureEventBusOptions public string SubscriberName { get; set; } public string TopicName { get; set; } + + public bool IsServiceBusDisabled { get; set; } } diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpEventBusAzureModule.cs b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpEventBusAzureModule.cs index 64c8b2fcd3..129004c871 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpEventBusAzureModule.cs +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpEventBusAzureModule.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Volo.Abp.AzureServiceBus; using Volo.Abp.Modularity; @@ -19,9 +20,15 @@ public class AbpEventBusAzureModule : AbpModule public override void OnApplicationInitialization(ApplicationInitializationContext context) { - context - .ServiceProvider - .GetRequiredService() - .Initialize(); + var options = context.ServiceProvider.GetRequiredService>().Value; + + if (!options.IsServiceBusDisabled) + { + context + .ServiceProvider + .GetRequiredService() + .Initialize(); + } + } } From b73781874aaa245505264da1dabe7366314176a2 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Fri, 11 Mar 2022 15:43:05 +0300 Subject: [PATCH 016/272] feat: Convert short date,time and datetime functions to pipe #11909 --- .../packages/core/src/lib/core.module.ts | 10 ++++++ .../packages/core/src/lib/pipes/index.ts | 3 ++ .../src/lib/pipes/short-date-time.pipe.ts | 32 +++++++++++++++++++ .../core/src/lib/pipes/short-date.pipe.ts | 32 +++++++++++++++++++ .../core/src/lib/pipes/short-time.pipe.ts | 32 +++++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 npm/ng-packs/packages/core/src/lib/pipes/short-date-time.pipe.ts create mode 100644 npm/ng-packs/packages/core/src/lib/pipes/short-date.pipe.ts create mode 100644 npm/ng-packs/packages/core/src/lib/pipes/short-time.pipe.ts diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index 1de96ef0ba..238ed9bb02 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -34,6 +34,9 @@ import { TENANT_KEY } from './tokens/tenant-key.token'; import { noop } from './utils/common-utils'; import './utils/date-extensions'; import { getInitialData, localeInitializer } from './utils/initial-utils'; +import { ShortDateTimePipe } from './pipes/short-date-time.pipe'; +import { ShortTimePipe } from './pipes/short-time.pipe'; +import { ShortDatePipe } from './pipes/short-date.pipe'; export function storageFactory(): OAuthStorage { return oAuthStorage; @@ -67,6 +70,9 @@ export function storageFactory(): OAuthStorage { SortPipe, StopPropagationDirective, ToInjectorPipe, + ShortDateTimePipe, + ShortTimePipe, + ShortDatePipe ], imports: [ OAuthModule, @@ -92,6 +98,10 @@ export function storageFactory(): OAuthStorage { SortPipe, StopPropagationDirective, ToInjectorPipe, + ShortDateTimePipe, + ShortTimePipe, + ShortDatePipe + ], providers: [LocalizationPipe] }) diff --git a/npm/ng-packs/packages/core/src/lib/pipes/index.ts b/npm/ng-packs/packages/core/src/lib/pipes/index.ts index 31e0a76593..71ce383cd3 100644 --- a/npm/ng-packs/packages/core/src/lib/pipes/index.ts +++ b/npm/ng-packs/packages/core/src/lib/pipes/index.ts @@ -1,3 +1,6 @@ export * from './localization.pipe'; export * from './sort.pipe'; export * from './to-injector.pipe'; +export * from './short-date.pipe'; +export * from './short-time.pipe'; +export * from './short-date-time.pipe'; diff --git a/npm/ng-packs/packages/core/src/lib/pipes/short-date-time.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/short-date-time.pipe.ts new file mode 100644 index 0000000000..ef12be47d8 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/pipes/short-date-time.pipe.ts @@ -0,0 +1,32 @@ +import { DatePipe, DATE_PIPE_DEFAULT_TIMEZONE } from '@angular/common'; +import { Inject, LOCALE_ID, Optional, Pipe, PipeTransform } from '@angular/core'; +import { ConfigStateService } from '../services'; +import { getShortDateShortTimeFormat } from '../utils/date-utils'; + +@Pipe({ + name: 'shortDateTime', + pure: true, +}) +export class ShortDateTimePipe extends DatePipe implements PipeTransform { + + constructor(private configStateService: ConfigStateService, + @Inject(LOCALE_ID) locale: string, + @Inject(DATE_PIPE_DEFAULT_TIMEZONE) @Optional() defaultTimezone?: string|null + ) { + super(locale, defaultTimezone) + } + + transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string | null; + transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null; + transform( + value: string|number|Date|null|undefined, timezone?: string, + locale?: string): string|null { + + const format = getShortDateShortTimeFormat(this.configStateService); + return super.transform(value,format,timezone,locale) + } + + +} + + diff --git a/npm/ng-packs/packages/core/src/lib/pipes/short-date.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/short-date.pipe.ts new file mode 100644 index 0000000000..30c9bd9323 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/pipes/short-date.pipe.ts @@ -0,0 +1,32 @@ +import { DatePipe, DATE_PIPE_DEFAULT_TIMEZONE } from '@angular/common'; +import { Inject, LOCALE_ID, Optional, Pipe, PipeTransform } from '@angular/core'; +import { ConfigStateService } from '../services'; +import { getShortDateFormat } from '../utils/date-utils'; + +@Pipe({ + name: 'shortDate', + pure: true, +}) +export class ShortDatePipe extends DatePipe implements PipeTransform { + + constructor(private configStateService: ConfigStateService, + @Inject(LOCALE_ID) locale: string, + @Inject(DATE_PIPE_DEFAULT_TIMEZONE) @Optional() defaultTimezone?: string|null + ) { + super(locale, defaultTimezone) + } + + transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string | null; + transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null; + transform( + value: string|number|Date|null|undefined, timezone?: string, + locale?: string): string|null { + + const format = getShortDateFormat(this.configStateService); + return super.transform(value,format,timezone,locale) + } + + +} + + diff --git a/npm/ng-packs/packages/core/src/lib/pipes/short-time.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/short-time.pipe.ts new file mode 100644 index 0000000000..cf0450673d --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/pipes/short-time.pipe.ts @@ -0,0 +1,32 @@ +import { DatePipe, DATE_PIPE_DEFAULT_TIMEZONE } from '@angular/common'; +import { Inject, LOCALE_ID, Optional, Pipe, PipeTransform } from '@angular/core'; +import { ConfigStateService } from '../services'; +import { getShortTimeFormat } from '../utils/date-utils'; + +@Pipe({ + name: 'shortTime', + pure: true, +}) +export class ShortTimePipe extends DatePipe implements PipeTransform { + + constructor(private configStateService: ConfigStateService, + @Inject(LOCALE_ID) locale: string, + @Inject(DATE_PIPE_DEFAULT_TIMEZONE) @Optional() defaultTimezone?: string|null + ) { + super(locale, defaultTimezone) + } + + transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string | null; + transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null; + transform( + value: string|number|Date|null|undefined, timezone?: string, + locale?: string): string|null { + + const format = getShortTimeFormat(this.configStateService); + return super.transform(value,format,timezone,locale) + } + + +} + + From 41cd83240f09bda635b2a00e56945d77f735db2d Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Fri, 11 Mar 2022 21:22:44 +0800 Subject: [PATCH 017/272] Update abp/docs/zh-Hans/Modules/Background-Jobs.md --- docs/zh-Hans/Modules/Background-Jobs.md | 56 ++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Modules/Background-Jobs.md b/docs/zh-Hans/Modules/Background-Jobs.md index b183febd80..87c57acde7 100644 --- a/docs/zh-Hans/Modules/Background-Jobs.md +++ b/docs/zh-Hans/Modules/Background-Jobs.md @@ -1,3 +1,55 @@ -# Background Jobs Module +# 后台作业模块 -待添加 \ No newline at end of file +后台作业模块实现了 `IBackgroundJobStore` 接口,并且可以使用ABP框架的默认后台作业管理。如果你不想使用这个模块,那么你需要自己实现 `IBackgroundJobStore` 接口。 + +> 本文档仅介绍后台作业模块,该模块将后台作业持久化到数据库。有关后台作业系统的更多信息,请参阅[后台作业](../Background-Jobs.md)文档。 + +## 如何使用 + +当您使用ABP框架[创建一个新的解决方案](https://abp.io/get-started)时,这个模块是(作为NuGet/NPM包)预先安装的。您可以继续将其作为软件包使用并轻松获取更新,也可以将其源代码包含到解决方案中(请参阅 `get-source` [CLI](../CLI.md)命令)以开发自定义模块。 + +### 源代码 + +此模块的源代码可在[此处](https://github.com/abpframework/abp/tree/dev/modules/background-jobs)访问。源代码是由[麻省理工学院](https://choosealicense.com/licenses/mit/)授权的,所以你可以自由使用和定制它。 + +## 内部结构 + +### 领域层 + +#### 聚合 + +- `BackgroundJobRecord` (聚合根): 表示后台工作记录. + +#### 仓储 + +为该模块定义了以下自定义仓储: + +- `IBackgroundJobRepository` + +### 数据库提供程序 + +#### 通用 + +##### 表/集合的前缀与架构 + +默认情况下,所有表/集合都使用 `Abp` 前缀。如果需要更改表前缀或设置架构名称(如果数据库提供程序支持),请在 `BackgroundJobsDbProperties` 类上设置静态属性。 + +##### 连接字符串 + +此模块使用 `AbpBackgroundJobs` 作为连接字符串名称。如果不使用此名称定义连接字符串,它将返回 `Default` 连接字符串。有关详细信息,请参阅[连接字符串](https://docs.abp.io/en/abp/latest/Connection-Strings)文档。 + +#### Entity Framework Core + +##### 表 + +- **AbpBackgroundJobs** + +#### MongoDB + +##### 集合 + +- **AbpBackgroundJobs** + +## 另请参阅 + +* [后台作业系统](../Background-Jobs.md) From 1a4d44ce9fb3185019001f5dab70cb6b44345dfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 11 Mar 2022 16:41:21 +0300 Subject: [PATCH 018/272] Added discord channel link --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index dbf8bce537..1d7b7e51a7 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,10 @@ ABP is a community-driven open source project. See [the contribution guide](http Love ABP Framework? **Please give a star** to this repository :star: +## Discord Channel + +You can use this link to join the ABP Community Discord Server: https://discord.gg/uVGt6hyhcm + ## ABP Commercial See also [ABP Commercial](https://commercial.abp.io/) if you are looking for pre-built application modules, professional themes, code generation tooling and premium support for the ABP Framework. From 4c67d1a1dc8a63108d1d21d7def67effbe1f12b7 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Fri, 11 Mar 2022 22:45:11 +0800 Subject: [PATCH 019/272] Update Specification.md --- docs/zh-Hans/Specifications.md | 258 ++++++++++++++++++++++++++++++++- 1 file changed, 256 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Specifications.md b/docs/zh-Hans/Specifications.md index f927c80255..bc5c67101b 100644 --- a/docs/zh-Hans/Specifications.md +++ b/docs/zh-Hans/Specifications.md @@ -1,3 +1,257 @@ -## 规约 +## 规范 -TODO.. \ No newline at end of file +规范模式用于为实体和其他业务对象定义 **命名、可复用、可组合和可测试的过滤器** 。 + +> 规范是领域层的一部分。 + +## 安装 + +> 这个包 **已经安装** 在启动模板中。所以,大多数时候你不需要手动去安装。 + +添加 [Volo.Abp.Specifications](https://abp.io/package-detail/Volo.Abp.Specifications) 包到你的项目. 如果当前文件夹是您的项目的根目录(`.csproj`)时,您可以在命令行终端中使用 [ABP CLI](CLI.md) *add package* 命令: + +````bash +abp add-package Volo.Abp.Specifications +```` + +## 定义规范 + +假设您定义了如下的顾客实体: + +````csharp +using System; +using Volo.Abp.Domain.Entities; + +namespace MyProject +{ + public class Customer : AggregateRoot + { + public string Name { get; set; } + + public byte Age { get; set; } + + public long Balance { get; set; } + + public string Location { get; set; } + } +} +```` + +您可以创建一个由 `Specification` 派生的新规范类。 + +**例如:规定选择一个18岁以上的顾客** + +````csharp +using System; +using System.Linq.Expressions; +using Volo.Abp.Specifications; + +namespace MyProject +{ + public class Age18PlusCustomerSpecification : Specification + { + public override Expression> ToExpression() + { + return c => c.Age >= 18; + } + } +} +```` + +您只需通过定义一个lambda[表达式](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/lambda-expressions)来定义规范。 + +> 您也可以直接实现`ISpecification`接口,但是基类`Specification`做了大量简化。 + +## 使用规范 + +这里有两种常见的规范用例。 + +### IsSatisfiedBy + +`IsSatisfiedBy` 方法可以用于检查单个对象是否满足规范。 + +**例如:如果顾客不满足年龄规定,则抛出异常** + +````csharp +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace MyProject +{ + public class CustomerService : ITransientDependency + { + public async Task BuyAlcohol(Customer customer) + { + if (!new Age18PlusCustomerSpecification().IsSatisfiedBy(customer)) + { + throw new Exception( + "这位顾客不满足年龄规定!" + ); + } + + //TODO... + } + } +} +```` + +### ToExpression & Repositories + +`ToExpression()` 方法可用于将规范转化为表达式。通过这种方式,您可以使用规范在**数据库查询时过滤实体**。 + +````csharp +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Domain.Services; + +namespace MyProject +{ + public class CustomerManager : DomainService, ITransientDependency + { + private readonly IRepository _customerRepository; + + public CustomerManager(IRepository customerRepository) + { + _customerRepository = customerRepository; + } + + public async Task> GetCustomersCanBuyAlcohol() + { + var queryable = await _customerRepository.GetQueryableAsync(); + var query = queryable.Where( + new Age18PlusCustomerSpecification().ToExpression() + ); + + return await AsyncExecuter.ToListAsync(query); + } + } +} +```` + +> 规范被正确地转换为SQL/数据库查询语句,并且在DBMS端高效执行。虽然它与规范无关,但如果您想了解有关 `AsyncExecuter` 的更多信息,请参阅[仓储](Repositories.md)文档。 + +实际上,没有必要使用 `ToExpression()` 方法,因为规范会自动转换为表达式。这也会起作用: + +````csharp +var queryable = await _customerRepository.GetQueryableAsync(); +var query = queryable.Where( + new Age18PlusCustomerSpecification() +); +```` + +## 编写规范 + +规范有一个强大的功能是,它们可以与`And`、`Or`、`Not`以及`AndNot`扩展方法组合使用。 + +假设您有另一个规范,定义如下: + +```csharp +using System; +using System.Linq.Expressions; +using Volo.Abp.Specifications; + +namespace MyProject +{ + public class PremiumCustomerSpecification : Specification + { + public override Expression> ToExpression() + { + return (customer) => (customer.Balance >= 100000); + } + } +} +``` + +您可以将 `PremiumCustomerSpecification` 和 `Age18PlusCustomerSpecification` 结合起来,查询优质成人顾客的数量,如下所示: + +````csharp +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Domain.Services; +using Volo.Abp.Specifications; + +namespace MyProject +{ + public class CustomerManager : DomainService, ITransientDependency + { + private readonly IRepository _customerRepository; + + public CustomerManager(IRepository customerRepository) + { + _customerRepository = customerRepository; + } + + public async Task GetAdultPremiumCustomerCountAsync() + { + return await _customerRepository.CountAsync( + new Age18PlusCustomerSpecification() + .And(new PremiumCustomerSpecification()).ToExpression() + ); + } + } +} +```` + +如果你想让这个组合成为一个可复用的规范,你可以创建这样一个组合的规范类,它派生自`AndSpecification`: + +````csharp +using Volo.Abp.Specifications; + +namespace MyProject +{ + public class AdultPremiumCustomerSpecification : AndSpecification + { + public AdultPremiumCustomerSpecification() + : base(new Age18PlusCustomerSpecification(), + new PremiumCustomerSpecification()) + { + } + } +} +```` + +现在,您就可以向下面一样重新编写 `GetAdultPremiumCustomerCountAsync` 方法: + +````csharp +public async Task GetAdultPremiumCustomerCountAsync() +{ + return await _customerRepository.CountAsync( + new AdultPremiumCustomerSpecification() + ); +} +```` + +> 你可以从这些例子中看到规范的强大之处。如果您之后想要更改 `PremiumCustomerSpecification` ,比如将余额从 `100.000` 修改为 `200.000` ,所有查询语句和合并的规范都将受到本次更改的影响。这是减少代码重复的好方法! + +## 讨论 + +虽然规范模式通常与C#的lambda表达式相比较,算是一种更老的方式。一些开发人员可能认为不再需要它,我们可以直接将表达式传入到仓储或领域服务中,如下所示: + +````csharp +var count = await _customerRepository.CountAsync(c => c.Balance > 100000 && c.Age => 18); +```` + +自从ABP的[仓储](Repositories.md)支持表达式,这是一个完全有效的用法。您不必在应用程序中定义或使用任何规范,可以直接使用表达式。 + +所以,规范的意义是什么?为什么或者应该在什么时候考虑去使用它? + +### 何时使用? + +使用规范的一些好处: + +- **可复用**:假设您在代码库的许多地方都需要用到优质顾客过滤器。如果使用表达式而不创建规范,那么如果以后更改“优质顾客”的定义会发生什么?假设您想将最低余额从100000美元更改为250000美元,并添加另一个条件,成为顾客超过3年。如果使用了规范,只需修改一个类。如果在任何其他地方重复(复制/粘贴)相同的表达式,则需要更改所有的表达式。 +- **可组合**:可以组合多个规范来创建新规范。这是另一种可复用性。 +- **命名**:`PremiumCustomerSpecification` 更好地解释了为什么使用规范,而不是复杂的表达式。因此,如果在您的业务中使用了一个有意义的表达式,请考虑使用规范。 +- **可测试**:规范是一个单独(且易于)测试的对象。 + +### 什么时侯不要使用? + +- **没有业务含义的表达式**:不要对与业务无关的表达式和操作使用规范。 +- **报表**:如果只是创建报表,不要创建规范,而是直接使用 `IQueryable` 和LINQ表达式。您甚至可以使用普通SQL、视图或其他工具生成报表。DDD不关心报表,因此从性能角度来看,查询底层数据存储的方式可能很重要。 From 8d5dd8260a1c2dee6d49d88d85901a5261fb3bf3 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Fri, 11 Mar 2022 17:59:43 +0300 Subject: [PATCH 020/272] Move some localizations in AdminResources to BaseResources --- .../Admin/Localization/Resources/en.json | 12 ------------ .../Base/Localization/Resources/en.json | 12 ++++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index d2702c83b9..023a4b18ed 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -337,18 +337,6 @@ "Expired": "Expired", "TrialLicenseDeletionWarningMessage": "Are you sure you want to delete the trial license? Trial license, organization, support accounts will be deleted!", "LicenseCategoryFilter": "License category", - "Volo.AbpIo.Commercial:030000": "You already used your trial period.", - "Volo.AbpIo.Commercial:030001": "This organization name already exists.", - "Volo.AbpIo.Commercial:030002": "Once activated, trial license cannot be set to requested!", - "Volo.AbpIo.Commercial:030003": "There is no such status!", - "Volo.AbpIo.Commercial:030004": "Status could not be changed due to an unexpected error!", - "Volo.AbpIo.Commercial:030005": "Start and end date can be updated when the trial license is in the -activated- status!", - "Volo.AbpIo.Commercial:030006": "End date must always be greater than start date!", - "Volo.AbpIo.Commercial:030007": "This trial license has already been activated once!", - "Volo.AbpIo.Commercial:030008": "Purchase date can be set only when status is Purchased!", - "Volo.AbpIo.Commercial:030009": "User not found!", - "Volo.AbpIo.Commercial:030010": "To purchase the trial license, first you need to activate your trial license!", - "Volo.AbpIo.Commercial:030011": "You cannot delete a trial license when it is purchased!", "Permission:SendWelcomeEmail": "Send Welcome Email", "SendWelcomeEmail": "Send Welcome Email", "SendWelcomeEmailWarningMessage": "Are you sure you want to send welcome email to the organization members?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index a214e251af..bfb5da247b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -14,6 +14,18 @@ "Volo.AbpIo.Domain:020002": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package.", "Volo.AbpIo.Domain:020003": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package and \"{NugetPackages}\" Nuget Packages are dependent to this package.", "Volo.AbpIo.Domain:020004": "Could not delete this Nuget Package because \"{Modules}\" Modules are using this package.", + "Volo.AbpIo.Domain:030000": "You already used your trial period.", + "Volo.AbpIo.Domain:030001": "This organization name already exists.", + "Volo.AbpIo.Domain:030002": "Once activated, trial license cannot be set to requested!", + "Volo.AbpIo.Domain:030003": "There is no such status!", + "Volo.AbpIo.Domain:030004": "Status could not be changed due to an unexpected error!", + "Volo.AbpIo.Domain:030005": "Start and end date can be updated when the trial license is in the -activated- status!", + "Volo.AbpIo.Domain:030006": "End date must always be greater than start date!", + "Volo.AbpIo.Domain:030007": "This trial license has already been activated once!", + "Volo.AbpIo.Domain:030008": "Purchase date can be set only when status is Purchased!", + "Volo.AbpIo.Domain:030009": "User not found!", + "Volo.AbpIo.Domain:030010": "To purchase the trial license, first you need to activate your trial license!", + "Volo.AbpIo.Domain:030011": "You cannot delete a trial license when it is purchased!", "WantToLearn?": "Want to learn?", "ReadyToGetStarted?": "Ready to get started?", "JoinOurCommunity": "Join our community", From 1263bf51e6a82494d77926513bdfc4dca913640e Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sat, 12 Mar 2022 13:27:44 +0800 Subject: [PATCH 021/272] Update Background-Jobs.md --- docs/zh-Hans/Modules/Background-Jobs.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/zh-Hans/Modules/Background-Jobs.md b/docs/zh-Hans/Modules/Background-Jobs.md index 87c57acde7..fe021f1a56 100644 --- a/docs/zh-Hans/Modules/Background-Jobs.md +++ b/docs/zh-Hans/Modules/Background-Jobs.md @@ -1,16 +1,16 @@ # 后台作业模块 -后台作业模块实现了 `IBackgroundJobStore` 接口,并且可以使用ABP框架的默认后台作业管理。如果你不想使用这个模块,那么你需要自己实现 `IBackgroundJobStore` 接口。 +后台作业模块实现了 `IBackgroundJobStore` 接口,并且可以使用ABP框架的默认后台作业管理.如果你不想使用这个模块,那么你需要自己实现 `IBackgroundJobStore` 接口. -> 本文档仅介绍后台作业模块,该模块将后台作业持久化到数据库。有关后台作业系统的更多信息,请参阅[后台作业](../Background-Jobs.md)文档。 +> 本文档仅介绍后台作业模块,该模块将后台作业持久化到数据库.有关后台作业系统的更多信息,请参阅[后台作业](../Background-Jobs.md)文档. ## 如何使用 -当您使用ABP框架[创建一个新的解决方案](https://abp.io/get-started)时,这个模块是(作为NuGet/NPM包)预先安装的。您可以继续将其作为软件包使用并轻松获取更新,也可以将其源代码包含到解决方案中(请参阅 `get-source` [CLI](../CLI.md)命令)以开发自定义模块。 +当你使用ABP框架[创建一个新的解决方案](https://abp.io/get-started)时,这个模块是(作为NuGet/NPM包)预先安装的.你可以继续将其作为软件包使用并轻松获取更新,也可以将其源代码包含到解决方案中(请参阅 `get-source` [CLI](../CLI.md)命令)以开发自定义模块. ### 源代码 -此模块的源代码可在[此处](https://github.com/abpframework/abp/tree/dev/modules/background-jobs)访问。源代码是由[麻省理工学院](https://choosealicense.com/licenses/mit/)授权的,所以你可以自由使用和定制它。 +此模块的源代码可在[此处](https://github.com/abpframework/abp/tree/dev/modules/background-jobs)访问.源代码是由[MIT](https://choosealicense.com/licenses/mit/)授权的,所以你可以自由使用和定制它. ## 内部结构 @@ -32,11 +32,11 @@ ##### 表/集合的前缀与架构 -默认情况下,所有表/集合都使用 `Abp` 前缀。如果需要更改表前缀或设置架构名称(如果数据库提供程序支持),请在 `BackgroundJobsDbProperties` 类上设置静态属性。 +默认情况下,所有表/集合都使用 `Abp` 前缀.如果需要更改表前缀或设置架构名称(如果数据库提供程序支持),请在 `BackgroundJobsDbProperties` 类上设置静态属性. ##### 连接字符串 -此模块使用 `AbpBackgroundJobs` 作为连接字符串名称。如果不使用此名称定义连接字符串,它将返回 `Default` 连接字符串。有关详细信息,请参阅[连接字符串](https://docs.abp.io/en/abp/latest/Connection-Strings)文档。 +此模块使用 `AbpBackgroundJobs` 作为连接字符串名称.如果不使用此名称定义连接字符串,它将返回 `Default` 连接字符串.有关详细信息,请参阅[连接字符串](https://docs.abp.io/en/abp/latest/Connection-Strings)文档. #### Entity Framework Core From 00014eee2f58f50d5b3508cffe5b42ede6694e69 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sat, 12 Mar 2022 13:30:19 +0800 Subject: [PATCH 022/272] Update Specifications.md --- docs/zh-Hans/Specifications.md | 70 +++++++++++++++++----------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/zh-Hans/Specifications.md b/docs/zh-Hans/Specifications.md index bc5c67101b..40a473dbc0 100644 --- a/docs/zh-Hans/Specifications.md +++ b/docs/zh-Hans/Specifications.md @@ -1,22 +1,22 @@ -## 规范 +## 规约 -规范模式用于为实体和其他业务对象定义 **命名、可复用、可组合和可测试的过滤器** 。 +规约模式用于为实体和其他业务对象定义 **命名、可复用、可组合和可测试的过滤器** . -> 规范是领域层的一部分。 +> 规约是领域层的一部分. ## 安装 -> 这个包 **已经安装** 在启动模板中。所以,大多数时候你不需要手动去安装。 +> 这个包 **已经安装** 在启动模板中.所以,大多数时候你不需要手动去安装. -添加 [Volo.Abp.Specifications](https://abp.io/package-detail/Volo.Abp.Specifications) 包到你的项目. 如果当前文件夹是您的项目的根目录(`.csproj`)时,您可以在命令行终端中使用 [ABP CLI](CLI.md) *add package* 命令: +添加 [Volo.Abp.Specifications](https://abp.io/package-detail/Volo.Abp.Specifications) 包到你的项目. 如果当前文件夹是你的项目的根目录(`.csproj`)时,你可以在命令行终端中使用 [ABP CLI](CLI.md) *add package* 命令: ````bash abp add-package Volo.Abp.Specifications ```` -## 定义规范 +## 定义规约 -假设您定义了如下的顾客实体: +假设你定义了如下的顾客实体: ````csharp using System; @@ -37,9 +37,9 @@ namespace MyProject } ```` -您可以创建一个由 `Specification` 派生的新规范类。 +你可以创建一个由 `Specification` 派生的新规约类. -**例如:规定选择一个18岁以上的顾客** +**例如:规定选择一个18岁以上的顾客** ````csharp using System; @@ -58,19 +58,19 @@ namespace MyProject } ```` -您只需通过定义一个lambda[表达式](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/lambda-expressions)来定义规范。 +你只需通过定义一个lambda[表达式](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/lambda-expressions)来定义规约. -> 您也可以直接实现`ISpecification`接口,但是基类`Specification`做了大量简化。 +> 你也可以直接实现`ISpecification`接口,但是基类`Specification`做了大量简化. -## 使用规范 +## 使用规约 -这里有两种常见的规范用例。 +这里有两种常见的规约用例. ### IsSatisfiedBy -`IsSatisfiedBy` 方法可以用于检查单个对象是否满足规范。 +`IsSatisfiedBy` 方法可以用于检查单个对象是否满足规约. -**例如:如果顾客不满足年龄规定,则抛出异常** +**例如:如果顾客不满足年龄规定,则抛出异常** ````csharp using System; @@ -98,7 +98,7 @@ namespace MyProject ### ToExpression & Repositories -`ToExpression()` 方法可用于将规范转化为表达式。通过这种方式,您可以使用规范在**数据库查询时过滤实体**。 +`ToExpression()` 方法可用于将规约转化为表达式.通过这种方式,你可以使用规约在**数据库查询时过滤实体**. ````csharp using System; @@ -133,9 +133,9 @@ namespace MyProject } ```` -> 规范被正确地转换为SQL/数据库查询语句,并且在DBMS端高效执行。虽然它与规范无关,但如果您想了解有关 `AsyncExecuter` 的更多信息,请参阅[仓储](Repositories.md)文档。 +> 规约被正确地转换为SQL/数据库查询语句,并且在DBMS端高效执行.虽然它与规约无关,但如果你想了解有关 `AsyncExecuter` 的更多信息,请参阅[仓储](Repositories.md)文档. -实际上,没有必要使用 `ToExpression()` 方法,因为规范会自动转换为表达式。这也会起作用: +实际上,没有必要使用 `ToExpression()` 方法,因为规约会自动转换为表达式.这也会起作用: ````csharp var queryable = await _customerRepository.GetQueryableAsync(); @@ -144,11 +144,11 @@ var query = queryable.Where( ); ```` -## 编写规范 +## 编写规约 -规范有一个强大的功能是,它们可以与`And`、`Or`、`Not`以及`AndNot`扩展方法组合使用。 +规约有一个强大的功能是,它们可以与`And`、`Or`、`Not`以及`AndNot`扩展方法组合使用. -假设您有另一个规范,定义如下: +假设你有另一个规约,定义如下: ```csharp using System; @@ -167,7 +167,7 @@ namespace MyProject } ``` -您可以将 `PremiumCustomerSpecification` 和 `Age18PlusCustomerSpecification` 结合起来,查询优质成人顾客的数量,如下所示: +你可以将 `PremiumCustomerSpecification` 和 `Age18PlusCustomerSpecification` 结合起来,查询优质成人顾客的数量,如下所示: ````csharp using System; @@ -199,7 +199,7 @@ namespace MyProject } ```` -如果你想让这个组合成为一个可复用的规范,你可以创建这样一个组合的规范类,它派生自`AndSpecification`: +如果你想让这个组合成为一个可复用的规约,你可以创建这样一个组合的规约类,它派生自`AndSpecification`: ````csharp using Volo.Abp.Specifications; @@ -217,7 +217,7 @@ namespace MyProject } ```` -现在,您就可以向下面一样重新编写 `GetAdultPremiumCustomerCountAsync` 方法: +现在,你就可以向下面一样重新编写 `GetAdultPremiumCustomerCountAsync` 方法: ````csharp public async Task GetAdultPremiumCustomerCountAsync() @@ -228,30 +228,30 @@ public async Task GetAdultPremiumCustomerCountAsync() } ```` -> 你可以从这些例子中看到规范的强大之处。如果您之后想要更改 `PremiumCustomerSpecification` ,比如将余额从 `100.000` 修改为 `200.000` ,所有查询语句和合并的规范都将受到本次更改的影响。这是减少代码重复的好方法! +> 你可以从这些例子中看到规约的强大之处.如果你之后想要更改 `PremiumCustomerSpecification` ,比如将余额从 `100.000` 修改为 `200.000` ,所有查询语句和合并的规约都将受到本次更改的影响.这是减少代码重复的好方法! ## 讨论 -虽然规范模式通常与C#的lambda表达式相比较,算是一种更老的方式。一些开发人员可能认为不再需要它,我们可以直接将表达式传入到仓储或领域服务中,如下所示: +虽然规约模式通常与C#的lambda表达式相比较,算是一种更老的方式.一些开发人员可能认为不再需要它,我们可以直接将表达式传入到仓储或领域服务中,如下所示: ````csharp var count = await _customerRepository.CountAsync(c => c.Balance > 100000 && c.Age => 18); ```` -自从ABP的[仓储](Repositories.md)支持表达式,这是一个完全有效的用法。您不必在应用程序中定义或使用任何规范,可以直接使用表达式。 +自从ABP的[仓储](Repositories.md)支持表达式,这是一个完全有效的用法.你不必在应用程序中定义或使用任何规约,可以直接使用表达式. -所以,规范的意义是什么?为什么或者应该在什么时候考虑去使用它? +所以,规约的意义是什么?为什么或者应该在什么时候考虑去使用它? ### 何时使用? -使用规范的一些好处: +使用规约的一些好处: -- **可复用**:假设您在代码库的许多地方都需要用到优质顾客过滤器。如果使用表达式而不创建规范,那么如果以后更改“优质顾客”的定义会发生什么?假设您想将最低余额从100000美元更改为250000美元,并添加另一个条件,成为顾客超过3年。如果使用了规范,只需修改一个类。如果在任何其他地方重复(复制/粘贴)相同的表达式,则需要更改所有的表达式。 -- **可组合**:可以组合多个规范来创建新规范。这是另一种可复用性。 -- **命名**:`PremiumCustomerSpecification` 更好地解释了为什么使用规范,而不是复杂的表达式。因此,如果在您的业务中使用了一个有意义的表达式,请考虑使用规范。 -- **可测试**:规范是一个单独(且易于)测试的对象。 +- **可复用**:假设你在代码库的许多地方都需要用到优质顾客过滤器.如果使用表达式而不创建规约,那么如果以后更改“优质顾客”的定义会发生什么?假设你想将最低余额从100000美元更改为250000美元,并添加另一个条件,成为顾客超过3年.如果使用了规约,只需修改一个类.如果在任何其他地方重复(复制/粘贴)相同的表达式,则需要更改所有的表达式. +- **可组合**:可以组合多个规约来创建新规约.这是另一种可复用性. +- **命名**:`PremiumCustomerSpecification` 更好地解释了为什么使用规约,而不是复杂的表达式.因此,如果在你的业务中使用了一个有意义的表达式,请考虑使用规约. +- **可测试**:规约是一个单独(且易于)测试的对象. ### 什么时侯不要使用? -- **没有业务含义的表达式**:不要对与业务无关的表达式和操作使用规范。 -- **报表**:如果只是创建报表,不要创建规范,而是直接使用 `IQueryable` 和LINQ表达式。您甚至可以使用普通SQL、视图或其他工具生成报表。DDD不关心报表,因此从性能角度来看,查询底层数据存储的方式可能很重要。 +- **没有业务含义的表达式**:不要对与业务无关的表达式和操作使用规约. +- **报表**:如果只是创建报表,不要创建规约,而是直接使用 `IQueryable` 和LINQ表达式.你甚至可以使用普通SQL、视图或其他工具生成报表.DDD不关心报表,因此从性能角度来看,查询底层数据存储的方式可能很重要. From 848c4947b87cc88d3a18f6079ea2a21fefd6e62a Mon Sep 17 00:00:00 2001 From: albert <9526587+ebicoglu@users.noreply.github.com> Date: Sat, 12 Mar 2022 19:39:18 +0300 Subject: [PATCH 023/272] Update en.json --- .../Base/Localization/Resources/en.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index bfb5da247b..fe0947da89 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -14,17 +14,17 @@ "Volo.AbpIo.Domain:020002": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package.", "Volo.AbpIo.Domain:020003": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package and \"{NugetPackages}\" Nuget Packages are dependent to this package.", "Volo.AbpIo.Domain:020004": "Could not delete this Nuget Package because \"{Modules}\" Modules are using this package.", - "Volo.AbpIo.Domain:030000": "You already used your trial period.", + "Volo.AbpIo.Domain:030000": "You have already completed your trial period.", "Volo.AbpIo.Domain:030001": "This organization name already exists.", - "Volo.AbpIo.Domain:030002": "Once activated, trial license cannot be set to requested!", + "Volo.AbpIo.Domain:030002": "Once activated, you cannot switch the trial license to -requested- status!", "Volo.AbpIo.Domain:030003": "There is no such status!", "Volo.AbpIo.Domain:030004": "Status could not be changed due to an unexpected error!", "Volo.AbpIo.Domain:030005": "Start and end date can be updated when the trial license is in the -activated- status!", - "Volo.AbpIo.Domain:030006": "End date must always be greater than start date!", - "Volo.AbpIo.Domain:030007": "This trial license has already been activated once!", - "Volo.AbpIo.Domain:030008": "Purchase date can be set only when status is Purchased!", + "Volo.AbpIo.Domain:030006": "The end date must be greater than the start date!", + "Volo.AbpIo.Domain:030007": "This trial license has already been activated!", + "Volo.AbpIo.Domain:030008": "The purchase date can be set only when the status is -purchased-!", "Volo.AbpIo.Domain:030009": "User not found!", - "Volo.AbpIo.Domain:030010": "To purchase the trial license, first you need to activate your trial license!", + "Volo.AbpIo.Domain:030010": "To purchase the trial license, you first need to activate your trial license!", "Volo.AbpIo.Domain:030011": "You cannot delete a trial license when it is purchased!", "WantToLearn?": "Want to learn?", "ReadyToGetStarted?": "Ready to get started?", From b870fbe4769add75cab464791b546bad18f61af0 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 14 Mar 2022 08:54:31 +0300 Subject: [PATCH 024/272] Add code-mirror mapping for test app --- .../Volo.CmsKit.Web.Unified/abp.resourcemapping.js | 5 ++++- .../host/Volo.CmsKit.Web.Unified/package.json | 3 ++- .../cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock | 13 +++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js index 82b2d4b649..b473302023 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js @@ -7,6 +7,9 @@ module.exports = { "@libs" ], mappings: { - + "@node_modules/codemirror/lib/*.*": "@libs/codemirror/", + "@node_modules/codemirror/mode/**/*.*": "@libs/codemirror/mode/", + "@node_modules/codemirror/theme/**/*.*": "@libs/codemirror/theme/", + "@node_modules/codemirror/addon/**/*.*": "@libs/codemirror/addon/" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json index c27b4dc457..909a876b9d 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.1", - "@abp/cms-kit": "5.2.0-rc.1" + "@abp/cms-kit": "5.2.0-rc.1", + "@abp/codemirror": "~5.2.0-rc.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index 47305a1cad..e69e2daced 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -90,6 +90,14 @@ "@abp/cms-kit.admin" "~5.2.0-rc.1" "@abp/cms-kit.public" "~5.2.0-rc.1" +"@abp/codemirror@~5.2.0-rc.1": + version "5.2.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-5.2.0-rc.1.tgz#0f06b4396056d1f3c854e67127d84781690d554f" + integrity sha512-iYl9LnHJTZFGUF/WJdGwXwTDUtfrodqr4RAEG+OBETe55yjGLmEW9cRjqgyZdX8UZvYGv9kSD3ScVUrv3woa/A== + dependencies: + "@abp/core" "~5.2.0-rc.1" + codemirror "^5.65.1" + "@abp/core@~5.2.0-rc.1": version "5.2.0-rc.1" resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.1.tgz#28dd4949d6b45a2a75f4b76fe0b78b9fa809755d" @@ -987,6 +995,11 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +codemirror@^5.65.1: + version "5.65.2" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.2.tgz#5799a70cb3d706e10f60e267245e3a75205d3dd9" + integrity sha512-SZM4Zq7XEC8Fhroqe3LxbEEX1zUPWH1wMr5zxiBuiUF64iYOUH/JI88v4tBag8MiBS8B8gRv8O1pPXGYXQ4ErA== + collection-map@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" From 68194d7f85b736e5834aeab6700b4c97a1dcf8d1 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 14 Mar 2022 09:08:52 +0300 Subject: [PATCH 025/272] Add style & script editor for Page Create/Update --- .../Pages/CmsKit/Pages/Create.cshtml | 9 ++++++-- .../Pages/CmsKit/Pages/Update.cshtml | 5 +++++ .../Pages/CmsKit/Pages/create.js | 22 +++++++++++++++++-- .../Pages/CmsKit/Pages/update.js | 18 +++++++++++++++ 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml index 841576e761..4671cb2ca2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml @@ -1,6 +1,7 @@ @page @using System.Globalization +@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Codemirror @using Volo.Abp.AspNetCore.Mvc.UI.Packages.TuiEditor @using Volo.Abp.AspNetCore.Mvc.UI.Packages.Uppy @using Volo.CmsKit.Admin.Web.Pages @@ -22,6 +23,9 @@ + + + @@ -31,6 +35,7 @@ @section styles { + } @@ -56,11 +61,11 @@ - + - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml index 1271502946..499ad1b633 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml @@ -1,6 +1,7 @@ @page "{Id}" @using System.Globalization +@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Codemirror @using Volo.Abp.AspNetCore.Mvc.UI.Packages.TuiEditor @using Volo.Abp.AspNetCore.Mvc.UI.Packages.Uppy @using Volo.Abp.AspNetCore.Mvc.UI.Packages.Slugify @@ -23,6 +24,9 @@ + + + @@ -32,6 +36,7 @@ @section styles { + } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js index ffe37fe5a8..1de6021a7d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js @@ -6,22 +6,40 @@ $(function () { var $slug = $('#ViewModel_Slug'); var $buttonSubmit = $('#button-page-create'); + var scriptEditor = CodeMirror.fromTextArea(document.getElementById("ViewModel_Script"), { + mode: "javascript", + lineNumbers: true + }); + + var styleEditor = CodeMirror.fromTextArea(document.getElementById("ViewModel_Style"), { + mode: "css", + lineNumbers: true + }); + + $('.nav-tabs a').on('shown.bs.tab', function () { + scriptEditor.refresh(); + styleEditor.refresh(); + }); + $createForm.data('validator').settings.ignore = ":hidden, [contenteditable='true']:not([name]), .tui-popup-wrapper"; $createForm.on('submit', function (e) { e.preventDefault(); - + if ($createForm.valid()) { abp.ui.setBusy(); + $("#ViewModel_Style").val(styleEditor.getValue()); + $("#ViewModel_Script").val(scriptEditor.getValue()); + $createForm.ajaxSubmit({ success: function (result) { abp.notify.success(l('SuccessfullySaved')); abp.ui.clearBusy(); location.href = "../Pages"; }, - error: function(result){ + error: function (result) { abp.ui.clearBusy(); abp.notify.error(result.responseJSON.error.message); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js index 99af38b70c..6bd90dd934 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js @@ -7,6 +7,21 @@ $(function () { $formUpdate.data('validator').settings.ignore = ":hidden, [contenteditable='true']:not([name]), .tui-popup-wrapper"; + var scriptEditor = CodeMirror.fromTextArea(document.getElementById("ViewModel_Script"), { + mode: "javascript", + lineNumbers: true + }); + + var styleEditor = CodeMirror.fromTextArea(document.getElementById("ViewModel_Style"), { + mode: "css", + lineNumbers: true + }); + + $('.nav-tabs a').on('shown.bs.tab', function () { + scriptEditor.refresh(); + styleEditor.refresh(); + }); + $formUpdate.on('submit', function (e) { e.preventDefault(); @@ -14,6 +29,9 @@ $(function () { abp.ui.setBusy(); + $("#ViewModel_Style").val(styleEditor.getValue()); + $("#ViewModel_Script").val(scriptEditor.getValue()); + $formUpdate.ajaxSubmit({ success: function (result) { abp.notify.success(l('SuccessfullySaved')); From 880d23357af54ef7afca428dedc6bac10a089d9a Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 14 Mar 2022 09:32:21 +0300 Subject: [PATCH 026/272] Revert local changes for Volo.CmsKit.Web.Unified --- .../host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js | 4 ---- modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json | 3 +-- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js index b473302023..26cdc6aad9 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js @@ -7,9 +7,5 @@ module.exports = { "@libs" ], mappings: { - "@node_modules/codemirror/lib/*.*": "@libs/codemirror/", - "@node_modules/codemirror/mode/**/*.*": "@libs/codemirror/mode/", - "@node_modules/codemirror/theme/**/*.*": "@libs/codemirror/theme/", - "@node_modules/codemirror/addon/**/*.*": "@libs/codemirror/addon/" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json index 909a876b9d..c27b4dc457 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json @@ -4,7 +4,6 @@ "private": true, "dependencies": { "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.1", - "@abp/cms-kit": "5.2.0-rc.1", - "@abp/codemirror": "~5.2.0-rc.1" + "@abp/cms-kit": "5.2.0-rc.1" } } \ No newline at end of file From e40dfb586e18ac522614e0180aafbdc31a36d5b4 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 14 Mar 2022 09:33:14 +0300 Subject: [PATCH 027/272] Update yarn.lock --- .../cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index e69e2daced..47305a1cad 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -90,14 +90,6 @@ "@abp/cms-kit.admin" "~5.2.0-rc.1" "@abp/cms-kit.public" "~5.2.0-rc.1" -"@abp/codemirror@~5.2.0-rc.1": - version "5.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-5.2.0-rc.1.tgz#0f06b4396056d1f3c854e67127d84781690d554f" - integrity sha512-iYl9LnHJTZFGUF/WJdGwXwTDUtfrodqr4RAEG+OBETe55yjGLmEW9cRjqgyZdX8UZvYGv9kSD3ScVUrv3woa/A== - dependencies: - "@abp/core" "~5.2.0-rc.1" - codemirror "^5.65.1" - "@abp/core@~5.2.0-rc.1": version "5.2.0-rc.1" resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.1.tgz#28dd4949d6b45a2a75f4b76fe0b78b9fa809755d" @@ -995,11 +987,6 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -codemirror@^5.65.1: - version "5.65.2" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.2.tgz#5799a70cb3d706e10f60e267245e3a75205d3dd9" - integrity sha512-SZM4Zq7XEC8Fhroqe3LxbEEX1zUPWH1wMr5zxiBuiUF64iYOUH/JI88v4tBag8MiBS8B8gRv8O1pPXGYXQ4ErA== - collection-map@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" From d703bfedae34bd110d0cd0e387335f00fdad66be Mon Sep 17 00:00:00 2001 From: mehmetuken Date: Mon, 14 Mar 2022 09:50:51 +0300 Subject: [PATCH 028/272] add imports.razor --- .../_Imports.razor | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor new file mode 100644 index 0000000000..fe27745143 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor @@ -0,0 +1,13 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop +@using MyCompanyName.MyProjectName.Blazor.Server +@using Blazorise +@using Blazorise.DataGrid +@using Volo.Abp.BlazoriseUI +@using Volo.Abp.BlazoriseUI.Components \ No newline at end of file From d6157e632f75e5859e0b65f10cde06df2333a46c Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 14 Mar 2022 13:14:56 +0300 Subject: [PATCH 029/272] Add new localizations for abp.io website --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index fe0947da89..f772006632 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -84,7 +84,7 @@ "WouldLikeToReceiveMarketingMaterials": "I would like to receive marketing materials like product deals & special offers.", "JoinOurMarketingNewsletter": "Join our marketing newsletter", "CommunityPrivacyPolicyConfirmation": "I agree to the Terms & Conditions and Privacy Policy.", - "ABPIO-Common": "ABPIO-Common", + "WouldLikeToReceiveNotification": "I would like to receive the latest news from abp.io websites.", "CommercialNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.", "FreeDDDEBook": "Free DDD E-Book", "AdditionalServices": "Additional Services", @@ -118,6 +118,7 @@ "ThereIsNoEvent": "There is no event.", "Events": "Events", "Volo.AbpIo.Domain:080000": "There is already a purchase item named \"{Name}\"", - "MasteringAbpFrameworkBook": "Book: Mastering ABP Framework" + "MasteringAbpFrameworkBook": "Book: Mastering ABP Framework", + "ABPIO-CommonPreferenceDefinition": "Get latest news about ABP Platform like new posts, events and more." } } From c543dd5c6b27a588918f43bc15981659780c7280 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 14 Mar 2022 20:47:18 +0800 Subject: [PATCH 030/272] Update distributed-Event-Bus.md Update Distributed-Event-Bus-RabbitMQ-Integration.md --- .../zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md b/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md index ab7cb68bd7..1cd6b5b9dd 100644 --- a/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md +++ b/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md @@ -1,10 +1,10 @@ # 分布式事件总线RabbitMQ集成 -> 本文解释了**如何配置[RabbitMQ](https://www.rabbitmq.com/)**做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. +> 本文解释了 **如何配置[RabbitMQ](https://www.rabbitmq.com/)** 做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. ## 安装 -使用ABP CLI添加[Volo.Abp.EventBus.RabbitMQ[Volo.Abp.EventBus.RabbitMQ](https://www.nuget.org/packages/Volo.Abp.EventBus.RabbitMQ)NuGet包到你的项目: +使用ABP CLI添加[Volo.Abp.EventBus.RabbitMQ](https://www.nuget.org/packages/Volo.Abp.EventBus.RabbitMQ)NuGet包到你的项目: * 安装[ABP CLI](https://docs.abp.io/en/abp/latest/CLI),如果你还没有安装. * 在你想要安装 `Volo.Abp.EventBus.RabbitMQ` 包的 `.csproj` 文件目录打开命令行(终端). @@ -18,7 +18,7 @@ ### `appsettings.json` 文件配置 -这是配置RabbitMQ设置最简单的方法. 它也非常强大,因为你可以使用[由AspNet Core支持的](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/)的任何其他配置源(如环境变量). +这是配置RabbitMQ设置最简单的方法. 它也非常强大,因为你可以使用[由AspNet Core支持](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/)的任何其他配置源(如环境变量). **示例:最小化配置与默认配置连接到本地的RabbitMQ服务器** @@ -151,4 +151,4 @@ Configure(options => }); ```` -使用这些选项类可以与 `appsettings.json` 组合在一起. 在代码中配置选项属性会覆盖配置文件中的值. \ No newline at end of file +使用这些选项类可以与 `appsettings.json` 组合在一起. 在代码中配置选项属性会覆盖配置文件中的值. From d2e1863bbf9cbb5bcf4bbfd0d8ec75199d59eac4 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 14 Mar 2022 20:49:42 +0800 Subject: [PATCH 031/272] Update Rebus-Integration.md Update Distributed-Event-Bus-Rebus-Integration.md --- docs/zh-Hans/Distributed-Event-Bus-Rebus-Integration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Distributed-Event-Bus-Rebus-Integration.md b/docs/zh-Hans/Distributed-Event-Bus-Rebus-Integration.md index 409b935ace..64fce06d1b 100644 --- a/docs/zh-Hans/Distributed-Event-Bus-Rebus-Integration.md +++ b/docs/zh-Hans/Distributed-Event-Bus-Rebus-Integration.md @@ -1,10 +1,10 @@ # 分布式事件总线Rebus集成 -> 本文解释了**如何配置[Rebus](http://mookid.dk/category/rebus/)**做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. +> 本文解释了 **如何配置[Rebus](http://mookid.dk/category/rebus/)** 做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. ## 安装 -使用ABP CLI添加[Volo.Abp.EventBus.Rebus[Volo.Abp.EventBus.Rebus](https://www.nuget.org/packages/Volo.Abp.EventBus.Rebus)NuGet包到你的项目: +使用ABP CLI添加[Volo.Abp.EventBus.Rebus](https://www.nuget.org/packages/Volo.Abp.EventBus.Rebus)NuGet包到你的项目: * 安装[ABP CLI](https://docs.abp.io/en/abp/latest/CLI),如果你还没有安装. * 在你想要安装 `Volo.Abp.EventBus.Rebus` 包的 `.csproj` 文件目录打开命令行(终端). From 069c338dcbf0037b01cee7c2a999faf9c94b2e62 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 14 Mar 2022 20:51:29 +0800 Subject: [PATCH 032/272] Update Kafka-Integration.md Update Distributed-Event-Bus-Kafka-Integration.md --- docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md b/docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md index f621a95fae..171fe3c23b 100644 --- a/docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md +++ b/docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md @@ -1,10 +1,10 @@ # 分布式事件总线Kafka集成 -> 本文解释了**如何配置[Kafka](https://kafka.apache.org/)**做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. +> 本文解释了 **如何配置[Kafka](https://kafka.apache.org/)** 做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. ## 安装 -使用ABP CLI添加[Volo.Abp.EventBus.Kafka[Volo.Abp.EventBus.Kafka](https://www.nuget.org/packages/Volo.Abp.EventBus.Kafka)NuGet包到你的项目: +使用ABP CLI添加[Volo.Abp.EventBus.Kafka](https://www.nuget.org/packages/Volo.Abp.EventBus.Kafka)NuGet包到你的项目: * 安装[ABP CLI](https://docs.abp.io/en/abp/latest/CLI),如果你还没有安装. * 在你想要安装 `Volo.Abp.EventBus.Kafka` 包的 `.csproj` 文件目录打开命令行(终端). @@ -18,7 +18,7 @@ ### `appsettings.json` 文件配置 -这是配置Kafka设置最简单的方法. 它也非常强大,因为你可以使用[由AspNet Core支持的](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/)的任何其他配置源(如环境变量). +这是配置Kafka设置最简单的方法. 它也非常强大,因为你可以使用[由AspNet Core支持](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/)的任何其他配置源(如环境变量). **示例:最小化配置与默认配置连接到本地的Kafka服务器** @@ -160,4 +160,4 @@ Configure(options => }); ```` -使用这些选项类可以与 `appsettings.json` 组合在一起. 在代码中配置选项属性会覆盖配置文件中的值. \ No newline at end of file +使用这些选项类可以与 `appsettings.json` 组合在一起. 在代码中配置选项属性会覆盖配置文件中的值. From 2bb482deec38d4916baebb4103e90f03ed89b544 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 14 Mar 2022 20:52:43 +0800 Subject: [PATCH 033/272] Update Distributed-Event-Bus.md --- docs/zh-Hans/Distributed-Event-Bus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/zh-Hans/Distributed-Event-Bus.md b/docs/zh-Hans/Distributed-Event-Bus.md index f16aa0610f..e59fa5e726 100644 --- a/docs/zh-Hans/Distributed-Event-Bus.md +++ b/docs/zh-Hans/Distributed-Event-Bus.md @@ -264,7 +264,7 @@ Configure(options => 因此可以实现 `IDistributedEventHandler>` 订阅事件. 但是订阅这样的通用事件不是一个好方法,你可以为实体类型定义对应的ETO. -**示例: 为 `Product` 声明使用 `ProductDto`** +**示例: 为 `Product` 声明使用 `ProductEto`** ````csharp Configure(options => From 8b57594b4b78e672be40fd066ca2d1a1ba9d660f Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 14 Mar 2022 22:23:26 +0800 Subject: [PATCH 034/272] Update Caching.md --- docs/zh-Hans/Caching.md | 259 +++++++++++++++++++++++++--------------- 1 file changed, 162 insertions(+), 97 deletions(-) diff --git a/docs/zh-Hans/Caching.md b/docs/zh-Hans/Caching.md index a75199ce47..491e60eb29 100644 --- a/docs/zh-Hans/Caching.md +++ b/docs/zh-Hans/Caching.md @@ -1,164 +1,180 @@ # 缓存 -ABP框架扩展了ASP.NET Core的分布式缓存系统. +ABP框架扩展了 [ASP.NET Core的分布式缓存系统](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed). -## Volo.Abp.Caching Package +## 安装 -> 默认情况下启动模板已经安装了这个包,所以大部分情况下你不需要手动安装. +> 默认情况下 [启动模板](Startup-Templates/Application.md) 已经安装了这个包. 所以大部分情况下你不需要手动安装. -Volo.Abp.Caching是缓存系统的核心包.使用包管理控制台(PMC)安装到项目: +[Volo.Abp.Caching](https://www.nuget.org/packages/Volo.Abp.Caching)是缓存系统的核心包. 可以使用 [ABP CLI](CLI.md) 的add-package命令将其安装到项目中: ``` -Install-Package Volo.Abp.Caching +abp add-package Volo.Abp.Caching ``` +你需要在包含 `csproj` 文件的文件夹中的命令行终端上运行此命令(请参阅 [其他选项](https://abp.io/package-detail/Volo.Abp.Caching) 安装). -然后将 **AbpCachingModule** 依赖添加到你的模块: +## 使用方式 -```c# -using Volo.Abp.Modularity; -using Volo.Abp.Caching; - -namespace MyCompany.MyProject -{ - [DependsOn(typeof(AbpCachingModule))] - public class MyModule : AbpModule - { - //... - } -} -``` - -## `IDistributedCache` 接口 +### `IDistributedCache` 接口 -ASP.NET Core 定义了 `IDistributedCache` 接口用于 get/set 缓存值 . 但是会有以下问题: +ASP.NET Core 定义了 `IDistributedCache` 接口用于 get/set 缓存值. 但是会有以下问题: * 它适用于 **byte 数组** 而不是 .NET 对象. 因此你需要对缓存的对象进行**序列化/反序列化**. -* 它为所有的缓存项提供了 **单个 key 池** , 因此 ; +* 它为所有的缓存项提供了 **单个 key 池** , 因此; * 你需要注意键区分 **不同类型的对象**. * 你需要注意**不同租户**(参见[多租户](Multi-Tenancy.md))的缓存项. > `IDistributedCache` 定义在 `Microsoft.Extensions.Caching.Abstractions` 包中. 这使它不仅适用于ASP.NET Core应用程序, 也可用于**任何类型的程序**. -> `IDistributedCache` 接口的默认实现是 `MemoryDistributedCache` 它使用**内存**工作. 参见 [ASP.NET Core文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed) 了解如何切换到 **Redis** 或其他缓存提供程序. +> `IDistributedCache` 接口的默认实现是 `MemoryDistributedCache` 它使用**内存**工作. 参见 [ASP.NET Core文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed) 了解如何切换到 **Redis** 或其他缓存提供程序. 此外, 如果要将Redis用作分布式缓存服务器, [Redis缓存](Redis-Cache.md) 文档. 有关更多信息, 参见 [ASP.NET Core 分布式缓存文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed). -## `IDistributedCache` 接口 +### `IDistributedCache` 接口 ABP框架在[Volo.Abp.Caching](https://www.nuget.org/packages/Volo.Abp.Caching/)包定义了通用的泛型 `IDistributedCache` 接口. `TCacheItem` 是存储在缓存中的对象类型. -`IDistributedCache` 接口了上述中的问题; +`IDistributedCache` 接口解决了上述中的问题; * 它在内部 **序列化/反序列化** 缓存对象. 默认使用 **JSON** 序列化, 但可以替换[依赖注入](Dependency-Injection.md)系统中 `IDistributedCacheSerializer` 服务的实现来覆盖默认的处理. -* 它根据缓存中对象类型自动向缓存key添加 **缓存名称** 前缀. 默认缓存名是缓存对象类的全名(如果你的类名以`CacheItem` 结尾, 那么`CacheItem` 会被忽略,不应用到缓存名称上). 你也可以在缓存类上使用 `CacheName` 设置换缓存的名称. -* 它自动将当前的**租户id**添加到缓存键中, 以区分不同租户的缓存项 (只有在你的应用程序是[多租户](Multi-Tenancy.md)的情况下生效). 在缓存类上应用 `IgnoreMultiTenancy` attribute, 可以在所有的租户间共享缓存. -* 允许为每个应用程序定义 **全局缓存键前缀** ,不同的应用程序可以在共享的分布式缓存中拥有自己的隔离池. +* 它根据缓存中对象类型自动向缓存key添加 **缓存名称** 前缀. 默认缓存名是缓存对象类的全名(如果你的类名以`CacheItem` 结尾, 那么`CacheItem` 会被忽略,不应用到缓存名称上). 你也可以在缓存类上使用 **`CacheName` 特性** 设置缓存的名称. +* 它自动将**当前的租户id**添加到缓存键中, 以区分不同租户的缓存项 (只有在你的应用程序是[多租户](Multi-Tenancy.md)的情况下生效). 如果要在多租户应用程序中的所有租户之间共享缓存对象, 请在缓存项类上定义`IgnoreMultiTenancy`特性以禁用此选项. +* 允许为每个应用程序定义 **全局缓存键前缀** , 不同的应用程序可以在共享的分布式缓存中拥有自己的隔离池. +* 它可以在任何可能绕过缓存的情况下 **容忍错误** 的发生. 这在缓存服务器出现临时问题时非常有用. +* 它有 `GetManyAsync` 和 `SetManyAsync` 等方法, 可以显著提高**批处理**的性能. -### 使用方式 - -缓存中存储项的示例类: +**示例: 在缓存中存储图书名称和价格** ````csharp -public class BookCacheItem +namespace MyProject { - public string Name { get; set; } + public class BookCacheItem + { + public string Name { get; set; } - public float Price { get; set; } + public float Price { get; set; } + } } ```` 你可以注入 `IDistributedCache` 服务用于 get/set `BookCacheItem` 对象. -使用示例: - ````csharp -public class BookService : ITransientDependency -{ - private readonly IDistributedCache _cache; - - public BookService(IDistributedCache cache) - { - _cache = cache; - } - - public async Task GetAsync(Guid bookId) - { - return await _cache.GetOrAddAsync( - bookId.ToString(), //Cache key - async () => await GetBookFromDatabaseAsync(bookId), - () => new DistributedCacheEntryOptions - { - AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) - } - ); - } +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Distributed; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; - private Task GetBookFromDatabaseAsync(Guid bookId) +namespace MyProject +{ + public class BookService : ITransientDependency { - //TODO: get from database + private readonly IDistributedCache _cache; + + public BookService(IDistributedCache cache) + { + _cache = cache; + } + + public async Task GetAsync(Guid bookId) + { + return await _cache.GetOrAddAsync( + bookId.ToString(), //缓存键 + async () => await GetBookFromDatabaseAsync(bookId), + () => new DistributedCacheEntryOptions + { + AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) + } + ); + } + + private Task GetBookFromDatabaseAsync(Guid bookId) + { + //TODO: 从数据库获取数据 + } } } ```` -* 示例服务代码中的 `GetOrAddAsync()` 方法从缓存中获取图书项. +* 示例服务代码中的 `GetOrAddAsync()` 方法从缓存中获取图书项. `GetOrAddAsync`是ABP框架在 ASP.NET Core 分布式缓存方法中添增的附加方法. * 如果没有在缓存中找到图书,它会调用工厂方法 (本示例中是 `GetBookFromDatabaseAsync`)从原始数据源中获取图书项. * `GetOrAddAsync` 有一个可选参数 `DistributedCacheEntryOptions` , 可用于设置缓存的生命周期. -`IDistributedCache` 的其他方法与ASP.NET Core的`IDistributedCache` 接口相同, 你可以参考 [ASP.NET Core文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed). +`IDistributedCache` 与ASP.NET Core的`IDistributedCache` 接口拥有相同的方法, 你可以参考 [ASP.NET Core文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed). -## `IDistributedCache` 接口 +### `IDistributedCache` 接口 -`IDistributedCache` 接口默认了键是 `string` 类型 (如果你的键不是string类型需要进行手动类型转换). `IDistributedCache` 将键的类型泛型化试图简化手动转换的操作. +`IDistributedCache` 接口默认了**缓存键**是 `string` 类型 (如果你的键不是string类型需要进行手动类型转换). 但当缓存键的类型不是`string`时, 可以使用`IDistributedCache`. -### 使用示例 +**示例: 在缓存中存储图书名称和价格** 示例缓存项 ````csharp -public class BookCacheItem +using Volo.Abp.Caching; + +namespace MyProject { - public string Name { get; set; } + [CacheName("Books")] + public class BookCacheItem + { + public string Name { get; set; } - public float Price { get; set; } + public float Price { get; set; } + } } ```` -用法示例 (这里假设你的键类型是 `Guid`): +* 在本例中使用`CacheName`特性给`BookCacheItem`类设置缓存名称. -````csharp -public class BookService : ITransientDependency -{ - private readonly IDistributedCache _cache; +你可以注入 `IDistributedCache` 服务用于 get/set `BookCacheItem` 对象. - public BookService(IDistributedCache cache) - { - _cache = cache; - } +````csharp +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Distributed; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; - public async Task GetAsync(Guid bookId) - { - return await _cache.GetOrAddAsync( - bookId, //Guid type used as the cache key - async () => await GetBookFromDatabaseAsync(bookId), - () => new DistributedCacheEntryOptions - { - AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) - } - ); - } - private Task GetBookFromDatabaseAsync(Guid bookId) +namespace MyProject +{ + public class BookService : ITransientDependency { - //TODO: get from database + private readonly IDistributedCache _cache; + + public BookService(IDistributedCache cache) + { + _cache = cache; + } + + public async Task GetAsync(Guid bookId) + { + return await _cache.GetOrAddAsync( + bookId, //Guid类型作为缓存键 + async () => await GetBookFromDatabaseAsync(bookId), + () => new DistributedCacheEntryOptions + { + AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) + } + ); + } + private Task GetBookFromDatabaseAsync(Guid bookId) + { + //TODO: 从数据库获取数据 + } } } ```` * 示例服务中 `GetOrAddAsync()` 方法获取缓存的图书项. -* 我们采用了 `Guid` 做为键,在 `_cache_GetOrAddAsync()` 方法中传入 `Guid` 类型的bookid. +* 我们采用了 `Guid` 做为键, 在 `_cache_GetOrAddAsync()` 方法中传入 `Guid` 类型的bookid. + +#### 复杂类型的缓存键 -`IDistributedCache` 在内部使用键对象的 `ToString()` 方法转换类型为string. 如果你的将复杂对象做为键,那么需要重写类的 `ToString` 方法. +`IDistributedCache` 在内部使用键对象的 `ToString()` 方法转换类型为string. 如果你的将复杂对象做为缓存键,那么需要重写类的 `ToString` 方法. -示例: +举例一个作为缓存键的类: ````csharp public class UserInOrganizationCacheKey @@ -187,23 +203,72 @@ public class BookService : ITransientDependency { _cache = cache; } - + ... } ```` +## 配置 + +### AbpDistributedCacheOptions +`AbpDistributedCacheOptions` 是配置缓存的主要[Option类](Options.md). + +**示例:为应用程序设置缓存键前缀** + +```csharp +Configure(options => +{ + options.KeyPrefix = "MyApp1"; +}); +``` +> 在[模块类](Module-Development-Basics.md)的`ConfigureServices`方法中添加代码. + +#### 可用选项 + +* `HideErrors` (`bool`, 默认: `true`): 启用/禁用隐藏从缓存服务器写入/读取值时的错误. +* `KeyPrefix` (`string`, 默认: `null`): 如果你的缓存服务器由多个应用程序共同使用, 则可以为应用程序的缓存键设置一个前缀. 在这种情况下, 不同的应用程序不能覆盖彼此的缓存内容. +* `GlobalCacheEntryOptions` (`DistributedCacheEntryOptions`): 用于设置保存缓内容却没有指定选项时, 默认的分布式缓存选项 (例如 `AbsoluteExpiration` 和 `SlidingExpiration`). `SlidingExpiration`的默认值设置为20分钟. + +## 错误处理 + +当为你的对象设计缓存时, 通常会首先尝试从缓存中获取值. 如果在缓存中找不到该值, 则从**来源**查询对象. 它可能在**数据库**中, 或者可能需要通过HTTP调用远程服务器. + +在大多数情况下, 你希望**容忍缓存错误**; 如果缓存服务器出现错误, 也不希望取消该操作. 相反, 你可以默默地隐藏(并记录)错误并**从来源查询**. 这就是ABP框架默认的功能. + +ABP的分布式缓存 [异常处理](Exception-Handling.md), 默认记录并隐藏错误. 有一个全局修改该功能的选项(参见下面的选项内容). + +所有的`IDistributedCache` (和 `IDistributedCache`)方法都有一个可选的参数`hideErrors`, 默认值为`null`. 如果此参数设置为`null`, 则全局生效, 否则你可以选择单个方法调用时隐藏或者抛出异常. + ## 批量操作 ABP的分布式缓存接口定义了以下批量操作方法,当你需要在一个方法中调用多次缓存操作时,这些方法可以提高性能 -* `SetManyAsync` 和 `SetMany` 方法可以用来设置多个值. +* `SetManyAsync` 和 `SetMany` 方法可以用来向缓存中设置多个值. * `GetManyAsync` 和 `GetMany` 方法可以用来从缓存中获取多个值. * `GetOrAddManyAsync` 和 `GetOrAddMany` 方法可以用来从缓存中获取并添加缺少的值. * `RefreshManyAsync` 和 `RefreshMany` 方法可以来用重置多个值的滚动过期时间. -* `RemoveManyAsync` 和 `RemoveMany` 方法呆以用来删除多个值. +* `RemoveManyAsync` 和 `RemoveMany` 方法可以用来从缓存中删除多个值. > 这些不是标准的ASP.NET Core缓存方法, 所以某些提供程序可能不支持. [ABP Redis集成包](Redis-Cache.md)实现了它们. 如果提供程序不支持,会回退到 `SetAsync` 和 `GetAsync` ... 方法(循环调用). -### DistributedCacheOptions +## 高级主题 + +### 工作单元级别的缓存 + +分布式缓存服务提供了一个有趣的功能. 假设你已经更新了数据库中某本书的价格, 然后将新价格设置到缓存中, 以便以后使用缓存的值. 如果设置缓存后出现异常, 并且更新图书价格的**事务被回滚了**, 该怎么办?在这种情况下, 缓存值是错误的. + +`IDistributedCache<..>`方法提供一个可选参数, `considerOuw`, 默认为`false`. 如果将其设置为`true`, 则你对缓存所做的更改不会应用于真正的缓存存储, 而是与当前的[工作单元](Unit-Of-Work.md)关联. 你将获得在同一工作单元中设置的缓存值, 但**仅当前工作单元成功时**更改才会生效. + +### IDistributedCacheSerializer + +`IDistributedCacheSerializer`服务用于序列化和反序列化缓存内容. 默认实现是`Utf8JsonDistributedCacheSerializer`类, 它使用`IJsonSerializer`服务将对象转换为[JSON](Json-Serialization.md), 反之亦然. 然后, 它使用UTC8编码将JSON字符串转换为分布式缓存接受的字节数组. + +如果你想实现自己的序列化逻辑, 可以自己实现并[替换](Dependency-Injection.md) 此服务. + +### IDistributedCacheKeyNormalizer + +默认情况下, `IDistributedCacheKeyNormalizer`是由`DistributedCacheKeyNormalizer`类实现的. 它将缓存名称、应用程序缓存前缀和当前租户id添加到缓存键中. 如果需要更高级的键规范化, 可以自己实现并[替换](Dependency-Injection.md)此服务. + +## 另请参阅 -TODO \ No newline at end of file +* [Redis 缓存](Redis-Cache.md) From 7221600e75719a494447953b789e79539fb7f10e Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 17 Mar 2022 21:55:33 +0800 Subject: [PATCH 035/272] Refactor --- .../Azure/AzureDistributedEventBus.cs | 15 +--- .../Kafka/KafkaDistributedEventBus.cs | 76 ++++++++++++------- .../RabbitMq/RabbitMqDistributedEventBus.cs | 69 +++++++---------- .../Rebus/RebusDistributedEventBus.cs | 8 +- .../Distributed/AbpEventBusBoxesOptions.cs | 6 ++ .../Distributed/DistributedEventBusBase.cs | 2 +- .../Distributed/ISupportsEventBoxes.cs | 2 +- .../Abp/EventBus/Distributed/OutboxSender.cs | 46 +++++++++-- .../MultipleOutgoingEventPublishResult.cs | 14 ---- .../Volo/Abp/Kafka/ConsumerPool.cs | 1 + .../Volo/Abp/Kafka/KafkaMessageConsumer.cs | 21 +++-- .../Volo/Abp/Kafka/ProducerPool.cs | 31 +++++--- 12 files changed, 161 insertions(+), 130 deletions(-) delete mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/MultipleOutgoingEventPublishResult.cs diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs index add6670bd4..fa6e155081 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AzureDistributedEventBus.cs @@ -92,10 +92,9 @@ public class AzureDistributedEventBus : DistributedEventBusBase, ISingletonDepen await PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData, outgoingEvent.Id); } - public async override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) + public async override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) { var outgoingEventArray = outgoingEvents.ToArray(); - var failures = new List(); var publisher = await _publisherPool.GetAsync( _options.TopicName, @@ -103,25 +102,15 @@ public class AzureDistributedEventBus : DistributedEventBusBase, ISingletonDepen using var messageBatch = await publisher.CreateMessageBatchAsync(); - var failed = false; foreach (var outgoingEvent in outgoingEventArray) { - if (failed) - { - failures.Add(outgoingEvent.Id); - continue; - } - if (!messageBatch.TryAddMessage(new ServiceBusMessage(outgoingEvent.EventData) { Subject = outgoingEvent.EventName })) { - failed = true; - failures.Add(outgoingEvent.Id); + throw new AbpException("The message is too large to fit in the batch. Set AbpEventBusBoxesOptions.OutboxWaitingEventMaxCount to reduce the number"); } } await publisher.SendMessagesAsync(messageBatch); - - return new MultipleOutgoingEventPublishResult(outgoingEventArray.Where(x => !failures.Contains(x.Id)).ToList()); } public async override Task ProcessFromInboxAsync(IncomingEventInfo incomingEvent, InboxConfig inboxConfig) diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index e271ad502c..4dba728c51 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -193,38 +193,40 @@ public class KafkaDistributedEventBus : DistributedEventBusBase, ISingletonDepen ); } - public async override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) + public override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) { - var pendingConfirms = new ConcurrentDictionary(); + var producer = ProducerPool.Get(); var outgoingEventArray = outgoingEvents.ToArray(); - - var tasks = new List(); - foreach (var outgoingEvent in outgoingEventArray) + producer.BeginTransaction(); + try { - var messageId = outgoingEvent.Id.ToString("N"); - pendingConfirms.TryAdd(messageId, outgoingEvent.Id); - - var task = PublishAsync( - AbpKafkaEventBusOptions.TopicName, - outgoingEvent.EventName, - outgoingEvent.EventData, - new Headers { { "messageId", System.Text.Encoding.UTF8.GetBytes(messageId)} }, - null - ); - - tasks.Add(task.ContinueWith(t => - { - if (!t.IsFaulted) - { - var message = t.Result.Message; - pendingConfirms.TryRemove(message.GetMessageId(), out _); - } - })); + foreach (var outgoingEvent in outgoingEventArray) + { + var messageId = outgoingEvent.Id.ToString("N"); + var headers = new Headers + { + { "messageId", System.Text.Encoding.UTF8.GetBytes(messageId)} + }; + + producer.Produce( + AbpKafkaEventBusOptions.TopicName, + new Message + { + Key = outgoingEvent.EventName, + Value = outgoingEvent.EventData, + Headers = headers + }); + } + + producer.CommitTransaction(); } - - await Task.WhenAll(tasks); - - return new MultipleOutgoingEventPublishResult(outgoingEventArray.Where(x => !pendingConfirms.Select(p => p.Value).Contains(x.Id)).ToList()); + catch (Exception e) + { + producer.AbortTransaction(); + throw; + } + + return Task.CompletedTask; } public async override Task ProcessFromInboxAsync( @@ -270,10 +272,26 @@ public class KafkaDistributedEventBus : DistributedEventBusBase, ISingletonDepen return PublishAsync(topicName, eventName, body, headers, headersArguments); } - private Task> PublishAsync(string topicName, string eventName, byte[] body, Headers headers, Dictionary headersArguments) + private Task> PublishAsync( + string topicName, + string eventName, + byte[] body, + Headers headers, + Dictionary headersArguments) { var producer = ProducerPool.Get(AbpKafkaEventBusOptions.ConnectionName); + return PublishAsync(producer, topicName, eventName, body, headers, headersArguments); + } + + private Task> PublishAsync( + IProducer producer, + string topicName, + string eventName, + byte[] body, + Headers headers, + Dictionary headersArguments) + { SetEventMessageHeaders(headers, headersArguments); return producer.ProduceAsync( diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 9b3bc5b76e..b9210a6eb8 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -34,6 +34,8 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe protected IRabbitMqMessageConsumerFactory MessageConsumerFactory { get; } protected IRabbitMqMessageConsumer Consumer { get; private set; } + private bool _exchangeCreated; + public RabbitMqDistributedEventBus( IOptions options, IConnectionPool connectionPool, @@ -84,6 +86,8 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe Consumer.OnMessageReceived(ProcessEventAsync); SubscribeHandlers(AbpDistributedEventBusOptions.Handlers); + + } private async Task ProcessEventAsync(IModel channel, BasicDeliverEventArgs ea) @@ -197,7 +201,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe return PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData, null, eventId: outgoingEvent.Id); } - public async override Task PublishManyFromOutboxAsync( + public async override Task PublishManyFromOutboxAsync( IEnumerable outgoingEvents, OutboxConfig outboxConfig) { @@ -206,48 +210,17 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe var outgoingEventArray = outgoingEvents.ToArray(); channel.ConfirmSelect(); - var pendingConfirms = new ConcurrentDictionary(); - var failures = new ConcurrentBag(); - - void CleanPendingConfirms(ulong sequenceNumber, bool multiple, bool ack) - { - if (multiple) - { - var confirmed = pendingConfirms.Where(x => x.Key <= sequenceNumber); - foreach (var entry in confirmed) - { - pendingConfirms.TryRemove(entry.Key, out var eventId); - - if (!ack) - { - failures.Add(eventId); - } - } - } - else - { - pendingConfirms.TryRemove(sequenceNumber, out var eventId); - - if (!ack) - { - failures.Add(eventId); - } - } - } - foreach (var outgoingEvent in outgoingEventArray) { - pendingConfirms.TryAdd(channel.NextPublishSeqNo, outgoingEvent.Id); - await PublishAsync(channel, outgoingEvent.EventName, outgoingEvent.EventData, null, + await PublishAsync( + channel, + outgoingEvent.EventName, + outgoingEvent.EventData, + properties: null, eventId: outgoingEvent.Id); } - channel.BasicAcks += (_, ea) => CleanPendingConfirms(ea.DeliveryTag, ea.Multiple, true); - channel.BasicNacks += (_, ea) => CleanPendingConfirms(ea.DeliveryTag, ea.Multiple, false); - - channel.WaitForConfirms(); - - return new MultipleOutgoingEventPublishResult(outgoingEventArray.Where(x => !failures.Contains(x.Id)).ToList()); + channel.WaitForConfirmsOrDie(); } } @@ -308,11 +281,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe Dictionary headersArguments = null, Guid? eventId = null) { - channel.ExchangeDeclare( - AbpRabbitMqEventBusOptions.ExchangeName, - "direct", - durable: true - ); + EnsureExchangeExists(channel); if (properties == null) { @@ -338,6 +307,20 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe return Task.CompletedTask; } + private void EnsureExchangeExists(IModel channel) + { + if (_exchangeCreated) + { + return; + } + + channel.ExchangeDeclare( + AbpRabbitMqEventBusOptions.ExchangeName, + "direct", + durable: true + ); + } + private void SetEventMessageHeaders(IBasicProperties properties, Dictionary headersArguments) { if (headersArguments == null) diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index a5cac31235..4ccd72ba15 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -162,7 +162,7 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen return; } - await Rebus.Advanced.Routing.Send(AbpRebusEventBusOptions.InputQueueName, eventData); + await Rebus.Publish(eventData); } protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord) @@ -224,7 +224,7 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen return PublishToEventBusAsync(eventType, eventData); } - public async override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) + public async override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) { var outgoingEventArray = outgoingEvents.ToArray(); @@ -234,11 +234,9 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen { await PublishFromOutboxAsync(outgoingEvent, outboxConfig); } - + await scope.CompleteAsync(); } - - return new MultipleOutgoingEventPublishResult(outgoingEventArray); } public async override Task ProcessFromInboxAsync( diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpEventBusBoxesOptions.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpEventBusBoxesOptions.cs index a46fc76238..749aa3d6d2 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpEventBusBoxesOptions.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpEventBusBoxesOptions.cs @@ -34,6 +34,11 @@ public class AbpEventBusBoxesOptions /// Default: 2 hours /// public TimeSpan WaitTimeToDeleteProcessedInboxEvents { get; set; } + + /// + /// Default: false + /// + public bool OutboxPublishInBatch { get; set; } public AbpEventBusBoxesOptions() { @@ -43,5 +48,6 @@ public class AbpEventBusBoxesOptions PeriodTimeSpan = TimeSpan.FromSeconds(2); DistributedLockWaitDuration = TimeSpan.FromSeconds(15); WaitTimeToDeleteProcessedInboxEvents = TimeSpan.FromHours(2); + OutboxPublishInBatch = false; } } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index 0add75f9c4..69ae91505d 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -85,7 +85,7 @@ public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventB OutboxConfig outboxConfig ); - public abstract Task PublishManyFromOutboxAsync( + public abstract Task PublishManyFromOutboxAsync( IEnumerable outgoingEvents, OutboxConfig outboxConfig ); diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs index 7c23be5ecd..73f74a68ad 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs @@ -10,7 +10,7 @@ public interface ISupportsEventBoxes OutboxConfig outboxConfig ); - Task PublishManyFromOutboxAsync( + Task PublishManyFromOutboxAsync( IEnumerable outgoingEvents, OutboxConfig outboxConfig ); diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs index 17dec0a810..ac92740e86 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxSender.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading; @@ -84,14 +85,15 @@ public class OutboxSender : IOutboxSender, ITransientDependency } Logger.LogInformation($"Found {waitingEvents.Count} events in the outbox."); - - var result = await DistributedEventBus - .AsSupportsEventBoxes() - .PublishManyFromOutboxAsync(waitingEvents, OutboxConfig); - - await Outbox.DeleteManyAsync(result.PublishedOutgoingEvents.Select(x => x.Id).ToArray()); - - Logger.LogInformation($"Sent {result.PublishedOutgoingEvents.Count} events to message broker"); + + if (EventBusBoxesOptions.OutboxPublishInBatch) + { + await PublishOutgoingMessagesInBatchAsync(waitingEvents); + } + else + { + await PublishOutgoingMessagesAsync(waitingEvents); + } } } else @@ -105,4 +107,32 @@ public class OutboxSender : IOutboxSender, ITransientDependency } } } + + protected virtual async Task PublishOutgoingMessagesAsync(List waitingEvents) + { + foreach (var waitingEvent in waitingEvents) + { + await DistributedEventBus + .AsSupportsEventBoxes() + .PublishFromOutboxAsync( + waitingEvent, + OutboxConfig + ); + + await Outbox.DeleteAsync(waitingEvent.Id); + + Logger.LogInformation($"Sent the event to the message broker with id = {waitingEvent.Id:N}"); + } + } + + protected virtual async Task PublishOutgoingMessagesInBatchAsync(List waitingEvents) + { + await DistributedEventBus + .AsSupportsEventBoxes() + .PublishManyFromOutboxAsync(waitingEvents, OutboxConfig); + + await Outbox.DeleteManyAsync(waitingEvents.Select(x => x.Id).ToArray()); + + Logger.LogInformation($"Sent {waitingEvents.Count} events to message broker"); + } } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/MultipleOutgoingEventPublishResult.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/MultipleOutgoingEventPublishResult.cs deleted file mode 100644 index 515dec1ae6..0000000000 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/MultipleOutgoingEventPublishResult.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; -using Volo.Abp.EventBus.Distributed; - -namespace Volo.Abp.EventBus; - -public class MultipleOutgoingEventPublishResult -{ - public IReadOnlyList PublishedOutgoingEvents { get; } - - public MultipleOutgoingEventPublishResult(IReadOnlyList outgoingEvents) - { - PublishedOutgoingEvents = outgoingEvents; - } -} diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ConsumerPool.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ConsumerPool.cs index 81a5c195c1..7147c81271 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ConsumerPool.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ConsumerPool.cs @@ -76,6 +76,7 @@ public class ConsumerPool : IConsumerPool, ISingletonDependency try { + consumer.Value.Unsubscribe(); consumer.Value.Close(); consumer.Value.Dispose(); } diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs index da21f48883..704c15845f 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs @@ -80,9 +80,11 @@ public class KafkaMessageConsumer : IKafkaMessageConsumer, ITransientDependency, protected virtual async Task Timer_Elapsed(AbpAsyncTimer timer) { - await CreateTopicAsync(); - Consume(); - Timer.Stop(); + if (Consumer == null) + { + await CreateTopicAsync(); + Consume(); + } } protected virtual async Task CreateTopicAsync() @@ -164,12 +166,21 @@ public class KafkaMessageConsumer : IKafkaMessageConsumer, ITransientDependency, public virtual void Dispose() { + Timer.Stop(); if (Consumer == null) { return; } - Consumer.Close(); - Consumer.Dispose(); + try + { + Consumer.Unsubscribe(); + Consumer.Close(); + Consumer.Dispose(); + Consumer = null; + } + catch (ObjectDisposedException) + { + } } } diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ProducerPool.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ProducerPool.cs index 49287a20e9..0a31a3483a 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ProducerPool.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/ProducerPool.cs @@ -17,6 +17,8 @@ public class ProducerPool : IProducerPool, ISingletonDependency protected ConcurrentDictionary>> Producers { get; } protected TimeSpan TotalDisposeWaitDuration { get; set; } = TimeSpan.FromSeconds(10); + + protected TimeSpan DefaultTransactionsWaitDuration { get; set; } = TimeSpan.FromSeconds(30); public ILogger Logger { get; set; } @@ -37,11 +39,18 @@ public class ProducerPool : IProducerPool, ISingletonDependency return Producers.GetOrAdd( connectionName, connection => new Lazy>(() => { - var config = Options.Connections.GetOrDefault(connection); - - Options.ConfigureProducer?.Invoke(new ProducerConfig(config)); - - return new ProducerBuilder(config).Build(); + var producerConfig = new ProducerConfig(Options.Connections.GetOrDefault(connection)); + Options.ConfigureProducer?.Invoke(producerConfig); + + if (producerConfig.TransactionalId.IsNullOrWhiteSpace()) + { + producerConfig.TransactionalId = Guid.NewGuid().ToString(); + } + + var producer = new ProducerBuilder(producerConfig).Build(); + producer.InitTransactions(DefaultTransactionsWaitDuration); + + return producer; })).Value; } @@ -69,7 +78,7 @@ public class ProducerPool : IProducerPool, ISingletonDependency foreach (var producer in Producers.Values) { var poolItemDisposeStopwatch = Stopwatch.StartNew(); - + try { producer.Value.Dispose(); @@ -77,19 +86,19 @@ public class ProducerPool : IProducerPool, ISingletonDependency catch { } - + poolItemDisposeStopwatch.Stop(); - + remainingWaitDuration = remainingWaitDuration > poolItemDisposeStopwatch.Elapsed ? remainingWaitDuration.Subtract(poolItemDisposeStopwatch.Elapsed) : TimeSpan.Zero; } - + poolDisposeStopwatch.Stop(); - + Logger.LogInformation( $"Disposed Kafka Producer Pool ({Producers.Count} producers in {poolDisposeStopwatch.Elapsed.TotalMilliseconds:0.00} ms)."); - + if (poolDisposeStopwatch.Elapsed.TotalSeconds > 5.0) { Logger.LogWarning( From 2a62c18ee685a6f2b6ea35f9622ff7a4a42e7c98 Mon Sep 17 00:00:00 2001 From: "gerardo.greco@porini.it" Date: Thu, 17 Mar 2022 16:23:30 +0100 Subject: [PATCH 036/272] pass option from appsettings to servicebusadminclient --- .../Volo/Abp/AzureServiceBus/ConnectionPool.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs index 5f9d9eacfd..d616e1264f 100644 --- a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs +++ b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs @@ -47,7 +47,7 @@ public class ConnectionPool : IConnectionPool, ISingletonDependency connectionName, new Lazy(() => { var config = _options.Connections.GetOrDefault(connectionName); - return new ServiceBusAdministrationClient(config.ConnectionString); + return new ServiceBusAdministrationClient(config.ConnectionString, config.Admin); }) ).Value; } From f1cbcb16c7e7fa5f4b21603d981fdbf9619dc223 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 18 Mar 2022 11:55:14 +0800 Subject: [PATCH 037/272] Update RabbitMqDistributedEventBus --- .../RabbitMq/RabbitMqDistributedEventBus.cs | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index b9210a6eb8..73ca0cbb61 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -86,8 +86,6 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe Consumer.OnMessageReceived(ProcessEventAsync); SubscribeHandlers(AbpDistributedEventBusOptions.Handlers); - - } private async Task ProcessEventAsync(IModel channel, BasicDeliverEventArgs ea) @@ -313,12 +311,20 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe { return; } - - channel.ExchangeDeclare( - AbpRabbitMqEventBusOptions.ExchangeName, - "direct", - durable: true - ); + + try + { + channel.ExchangeDeclarePassive(AbpRabbitMqEventBusOptions.ExchangeName); + } + catch (Exception) + { + channel.ExchangeDeclare( + AbpRabbitMqEventBusOptions.ExchangeName, + "direct", + durable: true + ); + } + _exchangeCreated = true; } private void SetEventMessageHeaders(IBasicProperties properties, Dictionary headersArguments) From dfb6025654a2112d3a2088cc393900cf2235a110 Mon Sep 17 00:00:00 2001 From: gaoabout Date: Fri, 18 Mar 2022 16:55:37 +0800 Subject: [PATCH 038/272] docs: fix typo in Caching.md --- docs/en/Caching.md | 2 +- docs/zh-Hans/Caching.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Caching.md b/docs/en/Caching.md index 13129bbc95..074d6d951f 100644 --- a/docs/en/Caching.md +++ b/docs/en/Caching.md @@ -258,7 +258,7 @@ ABP's distributed cache interfaces provide methods to perform batch methods thos Distributed cache service provides an interesting feature. Assume that you've updated the price of a book in the database, then set the new price to the cache, so you can use the cached value later. What if you have an exception after setting the cache and you **rollback the transaction** that updates the price of the book? In this case, cache value will be incorrect. -`IDistributedCache<..>` methods gets an optional parameter, named `considerOuw`, which is `false` by default. If you set it to `true`, then the changes you made for the cache are not actually applied to the real cache store, but associated with the current [unit of work](Unit-Of-Work.md). You get the value you set in the same unit of work, but the changes are applied **only if the current unit of work succeed**. +`IDistributedCache<..>` methods gets an optional parameter, named `considerUow`, which is `false` by default. If you set it to `true`, then the changes you made for the cache are not actually applied to the real cache store, but associated with the current [unit of work](Unit-Of-Work.md). You get the value you set in the same unit of work, but the changes are applied **only if the current unit of work succeed**. ### IDistributedCacheSerializer diff --git a/docs/zh-Hans/Caching.md b/docs/zh-Hans/Caching.md index 491e60eb29..d8f064a24e 100644 --- a/docs/zh-Hans/Caching.md +++ b/docs/zh-Hans/Caching.md @@ -257,7 +257,7 @@ ABP的分布式缓存接口定义了以下批量操作方法,当你需要在一 分布式缓存服务提供了一个有趣的功能. 假设你已经更新了数据库中某本书的价格, 然后将新价格设置到缓存中, 以便以后使用缓存的值. 如果设置缓存后出现异常, 并且更新图书价格的**事务被回滚了**, 该怎么办?在这种情况下, 缓存值是错误的. -`IDistributedCache<..>`方法提供一个可选参数, `considerOuw`, 默认为`false`. 如果将其设置为`true`, 则你对缓存所做的更改不会应用于真正的缓存存储, 而是与当前的[工作单元](Unit-Of-Work.md)关联. 你将获得在同一工作单元中设置的缓存值, 但**仅当前工作单元成功时**更改才会生效. +`IDistributedCache<..>`方法提供一个可选参数, `considerUow`, 默认为`false`. 如果将其设置为`true`, 则你对缓存所做的更改不会应用于真正的缓存存储, 而是与当前的[工作单元](Unit-Of-Work.md)关联. 你将获得在同一工作单元中设置的缓存值, 但**仅当前工作单元成功时**更改才会生效. ### IDistributedCacheSerializer From 13d6864843ce9ee9bfb12035c11110a2f8d74c4f Mon Sep 17 00:00:00 2001 From: Bishnu Rawal Date: Fri, 18 Mar 2022 17:20:49 +0545 Subject: [PATCH 039/272] Update Background-Workers-Hangfire.md --- docs/en/Background-Workers-Hangfire.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Background-Workers-Hangfire.md b/docs/en/Background-Workers-Hangfire.md index 2ea7fd633e..4cbaf8cc24 100644 --- a/docs/en/Background-Workers-Hangfire.md +++ b/docs/en/Background-Workers-Hangfire.md @@ -1,6 +1,6 @@ # Hangfire Background Worker Manager -[Hangfire](https://https://www.hangfire.io/) is an advanced background jobs and worker manager. You can integrate Hangfire with the ABP Framework to use it instead of the [default background worker manager](Background-Workers.md). +[Hangfire](https://www.hangfire.io/) is an advanced background jobs and worker manager. You can integrate Hangfire with the ABP Framework to use it instead of the [default background worker manager](Background-Workers.md). The major advantage is that you can use the same server farm to manage your Background Jobs and Workers, as well as leverage the advanced scheduling that is available from Hangfire for [Recurring Jobs](https://docs.hangfire.io/en/latest/background-methods/performing-recurrent-tasks.html?highlight=recurring), aka Background Workers. @@ -126,4 +126,4 @@ context.ServiceProvider So, it resolves the given background worker and adds to the `IBackgroundWorkerManager`. -While we generally add workers in OnApplicationInitialization, there are no restrictions on that. You can inject IBackgroundWorkerManager anywhere and add workers at runtime. Background worker manager will stop and release all the registered workers when your application is being shut down. \ No newline at end of file +While we generally add workers in OnApplicationInitialization, there are no restrictions on that. You can inject IBackgroundWorkerManager anywhere and add workers at runtime. Background worker manager will stop and release all the registered workers when your application is being shut down. From 86d89ebba52b99927f37ef9a592ed01d2b80d8e5 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 19 Mar 2022 20:44:44 +0100 Subject: [PATCH 040/272] Allow the exchange type to be specified --- .../RabbitMq/AbpRabbitMqEventBusOptions.cs | 20 ++++++++++++++++++- .../RabbitMq/RabbitMqDistributedEventBus.cs | 2 +- .../Volo/Abp/RabbitMQ/RabbitMqConsts.cs | 11 ++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs index ad09223f05..dd451d2127 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs @@ -1,10 +1,28 @@ -namespace Volo.Abp.EventBus.RabbitMq; +using Volo.Abp.RabbitMQ; + +namespace Volo.Abp.EventBus.RabbitMq; public class AbpRabbitMqEventBusOptions { + public const string DefaultExchangeType = RabbitMqConsts.ExchangeTypes.Direct; + public string ConnectionName { get; set; } public string ClientName { get; set; } public string ExchangeName { get; set; } + + public string ExchangeType { get; set; } + + public AbpRabbitMqEventBusOptions() + { + ExchangeType = "direct"; + } + + public string GetExchangeTypeOrDefault() + { + return string.IsNullOrEmpty(ExchangeType) + ? DefaultExchangeType + : ExchangeType; + } } diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index c57d9e9417..38070ae7ce 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -69,7 +69,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe Consumer = MessageConsumerFactory.Create( new ExchangeDeclareConfiguration( AbpRabbitMqEventBusOptions.ExchangeName, - type: "direct", + type: AbpRabbitMqEventBusOptions.ExchangeType, durable: true ), new QueueDeclareConfiguration( diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqConsts.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqConsts.cs index 19b8ddb573..996e88959b 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqConsts.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqConsts.cs @@ -8,4 +8,15 @@ public static class RabbitMqConsts public const int Persistent = 2; } + + public static class ExchangeTypes + { + public const string Direct = "direct"; + + public const string Topic = "topic"; + + public const string Fanout = "fanout"; + + public const string Headers = "headers"; + } } From 5cfd2fa012817a521b12987ff68eec5ad5a6c5a6 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 19 Mar 2022 20:45:53 +0100 Subject: [PATCH 041/272] fix hardcoded reference --- .../Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 38070ae7ce..33663086c4 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -244,7 +244,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe { channel.ExchangeDeclare( AbpRabbitMqEventBusOptions.ExchangeName, - "direct", + AbpRabbitMqEventBusOptions.ExchangeType, durable: true ); From ff9ebdbcabbf0e3806644378a39d127bbccb882f Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 19 Mar 2022 20:46:56 +0100 Subject: [PATCH 042/272] Update usage of default value --- .../Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs | 5 ----- .../Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs index dd451d2127..addbc49171 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs @@ -14,11 +14,6 @@ public class AbpRabbitMqEventBusOptions public string ExchangeType { get; set; } - public AbpRabbitMqEventBusOptions() - { - ExchangeType = "direct"; - } - public string GetExchangeTypeOrDefault() { return string.IsNullOrEmpty(ExchangeType) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 33663086c4..a2932de52e 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -69,7 +69,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe Consumer = MessageConsumerFactory.Create( new ExchangeDeclareConfiguration( AbpRabbitMqEventBusOptions.ExchangeName, - type: AbpRabbitMqEventBusOptions.ExchangeType, + type: AbpRabbitMqEventBusOptions.GetExchangeTypeOrDefault(), durable: true ), new QueueDeclareConfiguration( @@ -244,7 +244,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe { channel.ExchangeDeclare( AbpRabbitMqEventBusOptions.ExchangeName, - AbpRabbitMqEventBusOptions.ExchangeType, + AbpRabbitMqEventBusOptions.GetExchangeTypeOrDefault(), durable: true ); From 9082870eec79dfb271561e3ab6721f61e32f003a Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Mon, 21 Mar 2022 00:01:25 +0300 Subject: [PATCH 043/272] add filter by user --- .../Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs | 2 ++ .../CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 3 ++- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 3 ++- .../Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs | 4 +++- .../CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs | 4 +++- .../Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs | 11 +++++++++++ .../CmsKit/Public/Blogs/IBlogPostPublicAppService.cs | 2 +- .../CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 7 ++++--- .../CmsKit/Public/Blogs/BlogPostPublicController.cs | 5 ++--- .../Pages/Public/CmsKit/Blogs/Index.cshtml.cs | 3 +-- 10 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs index e8fa497e15..3b2d4c2c93 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs @@ -8,4 +8,6 @@ public class BlogPostGetListInput : PagedAndSortedResultRequestDto public string Filter { get; set; } public Guid? BlogId { get; set; } + + public Guid? AuthorId { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 83899199f0..fbea1d81c7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -89,7 +89,8 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { var blogs = (await BlogRepository.GetListAsync()).ToDictionary(x => x.Id); - var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.MaxResultCount, input.SkipCount, input.Sorting); + var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.AuthorId, + input.MaxResultCount, input.SkipCount, input.Sorting); var count = await BlogPostRepository.GetCountAsync(input.Filter); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index 8b1e86f8b7..5b04ffee07 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -16,6 +16,7 @@ public interface IBlogPostRepository : IBasicRepository Task> GetListAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, @@ -24,4 +25,4 @@ public interface IBlogPostRepository : IBasicRepository Task SlugExistsAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); Task GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); -} +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index f0a6aa61ee..64fe2e2e02 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -54,6 +54,7 @@ public class EfCoreBlogPostRepository : EfCoreRepository> GetListAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, @@ -66,7 +67,8 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId) - .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); + .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId); queryable = queryable.OrderBy(sorting.IsNullOrEmpty() ? $"{nameof(BlogPost.CreationTime)} desc" : sorting); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index f52dc3add4..adf394b90f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -55,6 +55,7 @@ public class MongoBlogPostRepository : MongoDbRepository> GetListAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, @@ -68,7 +69,8 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId) - .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); + .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId); queryable = queryable.OrderBy(sorting.IsNullOrEmpty() ? $"{nameof(BlogPost.CreationTime)} desc" : sorting); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs new file mode 100644 index 0000000000..82388fdb42 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs @@ -0,0 +1,11 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Public.Blogs; + +public class BlogPostGetListInput : PagedAndSortedResultRequestDto +{ + public string BlogSlug { get; set; } + + public Guid? AuthorId { get; set; } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index f561a289cf..89103979ba 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -7,7 +7,7 @@ namespace Volo.CmsKit.Public.Blogs; public interface IBlogPostPublicAppService : IApplicationService { - Task> GetListAsync([NotNull] string blogSlug, PagedAndSortedResultRequestDto input); + Task> GetListAsync(BlogPostGetListInput input); Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 4160639815..39e5e75128 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -32,11 +32,12 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub return ObjectMapper.Map(blogPost); } - public virtual async Task> GetListAsync([NotNull] string blogSlug, PagedAndSortedResultRequestDto input) + public virtual async Task> GetListAsync(BlogPostGetListInput input) { - var blog = await BlogRepository.GetBySlugAsync(blogSlug); + var blog = await BlogRepository.GetBySlugAsync(input.BlogSlug); - var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.MaxResultCount, input.SkipCount, input.Sorting); + var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, input.MaxResultCount, + input.SkipCount, input.Sorting); return new PagedResultDto( await BlogPostRepository.GetCountAsync(blogId: blog.Id), diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index bdd0b2cf32..b89939627f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -30,9 +30,8 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub } [HttpGet] - [Route("{blogSlug}")] - public virtual Task> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input) + public virtual Task> GetListAsync(BlogPostGetListInput input) { - return BlogPostPublicAppService.GetListAsync(blogSlug, input); + return BlogPostPublicAppService.GetListAsync(input); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index 30d4c6bcf2..b93a5d5f40 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -34,8 +34,7 @@ public class IndexModel : CmsKitPublicPageModelBase public async Task OnGetAsync() { Blogs = await BlogPostPublicAppService.GetListAsync( - BlogSlug, - new PagedAndSortedResultRequestDto + new BlogPostGetListInput { SkipCount = PageSize * (CurrentPage - 1), MaxResultCount = PageSize From 02ab0c64520b997a77db759f993fa82adf8fd20c Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 21 Mar 2022 14:20:47 +0800 Subject: [PATCH 044/272] Upgrade Minio to 4.0.1. Resolve #11995 --- .../Volo.Abp.BlobStoring.Minio.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj b/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj index 822189c677..a78b131962 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj @@ -3,7 +3,7 @@ - netstandard2.0 + net6.0 Volo.Abp.BlobStoring.Minio Volo.Abp.BlobStoring.Minio $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; @@ -15,7 +15,7 @@ - + From 4dc23548a58795d8fd7274a31f7ffe51fb47a0bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=A8=E6=AC=A3?= Date: Mon, 21 Mar 2022 15:45:53 +0800 Subject: [PATCH 045/272] Update Domain-Services.md --- docs/zh-Hans/Domain-Services.md | 129 +++++++++++++++++++++++++++++++- 1 file changed, 127 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Domain-Services.md b/docs/zh-Hans/Domain-Services.md index 9c9bb7dfd2..692d16ab2e 100644 --- a/docs/zh-Hans/Domain-Services.md +++ b/docs/zh-Hans/Domain-Services.md @@ -1,3 +1,128 @@ -# ABP Documentation +# 领域服务 -待添加 +## 介绍 + +在 [领域驱动设计](Domain-Driven-Design.md) (DDD) 解决方案中,核心业务逻辑通常在聚合 ([实体](Entities.md)) 和领域服务中实现. 在以下情况下特别需要创建域服务: + +* 您实现了依赖于某些服务(如存储库或其他外部服务)的核心域逻辑. +* 您需要实现的逻辑与多个聚合/实体相关,因此它不适合任何聚合. + +## ABP 领域服务基础设施 + +域服务是简单的无状态类.虽然您不必从任何服务或接口派生,但 ABP 框架提供了一些有用的基类和约定. + +### DomainService 和 IDomainService + +从基类派生域服务 `DomainService` 或直接实现 `IDomainService` 接口. + +**示例: 创建从 `DomainService` 基类派生的领域服务.** + +````csharp +using Volo.Abp.Domain.Services; +namespace MyProject.Issues +{ + public class IssueManager : DomainService + { + + } +} +```` + +当你这样做时: + +* ABP 框架自动将类注册到具有瞬态生命周期的依赖注入系统. +* 您可以直接使用一些常用服务作为基础属性,而无需手动注入 (例如 [ILogger](Logging.md) and [IGuidGenerator](Guid-Generation.md)). + +> 建议使用 `Manager` 或 `Service` 后缀命名领域服务. 我们通常使用如上面示例中的 `Manager` 后缀. +**示例: 实现将问题分配给用户的领域逻辑** + +````csharp +public class IssueManager : DomainService +{ + private readonly IRepository _issueRepository; + public IssueManager(IRepository issueRepository) + { + _issueRepository = issueRepository; + } + + public async Task AssignAsync(Issue issue, AppUser user) + { + var currentIssueCount = await _issueRepository + .CountAsync(i => i.AssignedUserId == user.Id); + + //Implementing a core business validation + if (currentIssueCount >= 3) + { + throw new IssueAssignmentException(user.UserName); + } + issue.AssignedUserId = user.Id; + } +} +```` + +问题是定义如下所示的 [聚合根](Entities.md): + +````csharp +public class Issue : AggregateRoot +{ + public Guid? AssignedUserId { get; internal set; } + + //... +} +```` + +* 使用 `internal` 的 set 确保外层调用者不能直接在调用 set ,并强制始终使用 `IssueManager` 为 `User` 分配 `Issue`. + +### 使用领域服务 + +域服务通常用于 [应用程序服务](Application-Services.md). + +**示例: 使用 `IssueManager` 将问题分配给用户** + +````csharp +using System; +using System.Threading.Tasks; +using MyProject.Users; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; +namespace MyProject.Issues +{ + public class IssueAppService : ApplicationService, IIssueAppService + { + private readonly IssueManager _issueManager; + private readonly IRepository _userRepository; + private readonly IRepository _issueRepository; + public IssueAppService( + IssueManager issueManager, + IRepository userRepository, + IRepository issueRepository) + { + _issueManager = issueManager; + _userRepository = userRepository; + _issueRepository = issueRepository; + } + public async Task AssignAsync(Guid id, Guid userId) + { + var issue = await _issueRepository.GetAsync(id); + var user = await _userRepository.GetAsync(userId); + await _issueManager.AssignAsync(issue, user); + await _issueRepository.UpdateAsync(issue); + } + } +} +```` + +由于 `IssueAppService` 在应用层, 它不能直接将问题分配给用户。因此,它使用 `IssueManager`. + +## 应用程序服务与领域服务 + +虽然应用服务和领域服务都实现了业务规则,但存在根本的逻辑和形式差异; +虽然 [应用服务](Application-Services.md) 和领域服务都实现了业务规则,但存在根本的逻辑和形式差异: + +* 应用程序服务实现应用程序的 **用例** (典型 Web 应用程序中的用户交互), 而域服务实现 **核心的、用例独立的域逻辑**. +* 应用程序服务获取/返回 [数据传输对象](Data-Transfer-Objects.md), 域服务方法通常获取和返回 **域对象** ([实体](Entities.md), [值对象](Value-Objects.md)). +* 领域服务通常由应用程序服务或其他领域服务使用,而应用程序服务由表示层或客户端应用程序使用. + +## 生命周期 + +领域服务的生命周期是 [瞬态](https://docs.abp.io/en/abp/latest/Dependency-Injection) 的,它们会自动注册到依赖注入服务. From efd92737b22f8e627b7a66d46c85322c5c43ae29 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 21 Mar 2022 16:38:23 +0800 Subject: [PATCH 046/272] Update Domain-Services.md --- docs/zh-Hans/Domain-Services.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/zh-Hans/Domain-Services.md b/docs/zh-Hans/Domain-Services.md index 692d16ab2e..a617aea645 100644 --- a/docs/zh-Hans/Domain-Services.md +++ b/docs/zh-Hans/Domain-Services.md @@ -2,18 +2,18 @@ ## 介绍 -在 [领域驱动设计](Domain-Driven-Design.md) (DDD) 解决方案中,核心业务逻辑通常在聚合 ([实体](Entities.md)) 和领域服务中实现. 在以下情况下特别需要创建域服务: +在 [领域驱动设计](Domain-Driven-Design.md) (DDD) 解决方案中,核心业务逻辑通常在聚合 ([实体](Entities.md)) 和领域服务中实现. 在以下情况下特别需要创建领域服务 -* 您实现了依赖于某些服务(如存储库或其他外部服务)的核心域逻辑. -* 您需要实现的逻辑与多个聚合/实体相关,因此它不适合任何聚合. +* 你实现了依赖于某些服务(如存储库或其他外部服务)的核心域逻辑. +* 你需要实现的逻辑与多个聚合/实体相关,因此它不适合任何聚合. ## ABP 领域服务基础设施 -域服务是简单的无状态类.虽然您不必从任何服务或接口派生,但 ABP 框架提供了一些有用的基类和约定. +领域服务是简单的无状态类. 虽然你不必从任何服务或接口派生,但 ABP 框架提供了一些有用的基类和约定. ### DomainService 和 IDomainService -从基类派生域服务 `DomainService` 或直接实现 `IDomainService` 接口. +从 `DomainService` 基类派生领域服务或直接实现 `IDomainService` 接口. **示例: 创建从 `DomainService` 基类派生的领域服务.** @@ -30,8 +30,8 @@ namespace MyProject.Issues 当你这样做时: -* ABP 框架自动将类注册到具有瞬态生命周期的依赖注入系统. -* 您可以直接使用一些常用服务作为基础属性,而无需手动注入 (例如 [ILogger](Logging.md) and [IGuidGenerator](Guid-Generation.md)). +* ABP 框架自动将类注册为瞬态生命周期到依赖注入系统. +* 你可以直接使用一些常用服务作为基础属性,而无需手动注入 (例如 [ILogger](Logging.md) and [IGuidGenerator](Guid-Generation.md)). > 建议使用 `Manager` 或 `Service` 后缀命名领域服务. 我们通常使用如上面示例中的 `Manager` 后缀. **示例: 实现将问题分配给用户的领域逻辑** @@ -75,7 +75,7 @@ public class Issue : AggregateRoot ### 使用领域服务 -域服务通常用于 [应用程序服务](Application-Services.md). +领域服务通常用于 [应用程序服务](Application-Services.md). **示例: 使用 `IssueManager` 将问题分配给用户** @@ -112,16 +112,16 @@ namespace MyProject.Issues } ```` -由于 `IssueAppService` 在应用层, 它不能直接将问题分配给用户。因此,它使用 `IssueManager`. +由于 `IssueAppService` 在应用层, 它不能直接将问题分配给用户.因此,它使用 `IssueManager`. ## 应用程序服务与领域服务 -虽然应用服务和领域服务都实现了业务规则,但存在根本的逻辑和形式差异; -虽然 [应用服务](Application-Services.md) 和领域服务都实现了业务规则,但存在根本的逻辑和形式差异: +虽然应用服务和领域服务都实现了业务规则,但存在根本的逻辑和形式差异; +虽然 [应用服务](Application-Services.md) 和领域服务都实现了业务规则,但存在根本的逻辑和形式差异: -* 应用程序服务实现应用程序的 **用例** (典型 Web 应用程序中的用户交互), 而域服务实现 **核心的、用例独立的域逻辑**. -* 应用程序服务获取/返回 [数据传输对象](Data-Transfer-Objects.md), 域服务方法通常获取和返回 **域对象** ([实体](Entities.md), [值对象](Value-Objects.md)). -* 领域服务通常由应用程序服务或其他领域服务使用,而应用程序服务由表示层或客户端应用程序使用. +* 应用程序服务实现应用程序的 **用例** (典型 Web 应用程序中的用户交互), 而领域服务实现 **核心的、用例独立的领域逻辑**. +* 应用程序服务获取/返回 [数据传输对象](Data-Transfer-Objects.md), 领域服务方法通常获取和返回 **领域对象** ([实体](Entities.md), [值对象](Value-Objects.md)). +* 领域服务通常由应用程序服务或其他领域服务使用,而应用程序服务由表示层或客户端应用程序使用. ## 生命周期 From 9b0b1a8e6d61135f2024789db503de9dd1cfc1b0 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 22 Mar 2022 15:52:08 +0800 Subject: [PATCH 047/272] Provide Global Features in application configuration. Resolve #12042 --- .../ApplicationConfigurationDto.cs | 2 ++ ...pplicationGlobalFeatureConfigurationDto.cs | 18 +++++++++++++++++ .../AbpApplicationConfigurationAppService.cs | 20 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationGlobalFeatureConfigurationDto.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs index 9b6a66992f..eb29c5c7cb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs @@ -17,6 +17,8 @@ public class ApplicationConfigurationDto public ApplicationFeatureConfigurationDto Features { get; set; } + public ApplicationGlobalFeatureConfigurationDto GlobalFeatures { get; set; } + public MultiTenancyInfoDto MultiTenancy { get; set; } public CurrentTenantDto CurrentTenant { get; set; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationGlobalFeatureConfigurationDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationGlobalFeatureConfigurationDto.cs new file mode 100644 index 0000000000..e911cd911d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationGlobalFeatureConfigurationDto.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; + +[Serializable] +public class ApplicationGlobalFeatureConfigurationDto +{ + public HashSet EnabledFeatures { get; set; } + + public Dictionary> ModuleEnabledFeatures { get; set; } + + public ApplicationGlobalFeatureConfigurationDto() + { + EnabledFeatures = new HashSet(); + ModuleEnabledFeatures = new Dictionary>(); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs index 6ecd9fc195..bfa2e6a285 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs @@ -14,6 +14,7 @@ using Volo.Abp.AspNetCore.Mvc.MultiTenancy; using Volo.Abp.Authorization; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Features; +using Volo.Abp.GlobalFeatures; using Volo.Abp.Localization; using Volo.Abp.MultiTenancy; using Volo.Abp.Settings; @@ -87,6 +88,7 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp { Auth = await GetAuthConfigAsync(), Features = await GetFeaturesConfigAsync(), + GlobalFeatures = await GetGlobalFeaturesConfigAsync(), Localization = await GetLocalizationConfigAsync(), CurrentUser = GetCurrentUser(), Setting = await GetSettingConfigAsync(), @@ -284,6 +286,24 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp return result; } + protected virtual Task GetGlobalFeaturesConfigAsync() + { + var result = new ApplicationGlobalFeatureConfigurationDto(); + + foreach (var enabledFeatureName in GlobalFeatureManager.Instance.GetEnabledFeatureNames()) + { + result.EnabledFeatures.AddIfNotContains(enabledFeatureName); + } + + foreach (var module in GlobalFeatureManager.Instance.Modules) + { + result.ModuleEnabledFeatures.AddIfNotContains(new KeyValuePair>(module.Key, module.Value.GetFeatures().Select(x => x.FeatureName).ToList())); + } + + return Task.FromResult(result); + } + + protected virtual async Task GetTimingConfigAsync() { var windowsTimeZoneId = await _settingProvider.GetOrNullAsync(TimingSettingNames.TimeZone); From 59fed8a9ddb2b7fb2f6afb87aac04a740c3f9f69 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Tue, 22 Mar 2022 15:51:28 +0300 Subject: [PATCH 048/272] Update en.json --- .../Commercial/Localization/Resources/en.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 8fa96b5ee2..8aa62afbb4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -495,7 +495,9 @@ "LicenseTypeNotCorrect": "The license type is not correct!", "Trainings": "Trainings", "ChoseTrainingPlaceholder": "Chose the training...", - "ContactUsToGetQuote": "Contact us to get a quote", + "DoYouNeedTrainings": "Do you need one of these trainings?", + "DoYouNeedTraining": "Do you need {0} training?", + "GetInTouchUs": "Get in touch with us", "ForMoreInformationClickHere": "For more information, click here.", "IsGetOnboardingTraining": "Would you like to get onboarding & web application development training?", "OnboardingWebApplicationDevelopmentTrainingMessage": "To schedule your training calendar, please contact {0} after creating the organization", From cf226dca5297bb6f89891c5aeead11c6336dee32 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Tue, 22 Mar 2022 16:03:56 +0300 Subject: [PATCH 049/272] filter by user completed --- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 3 ++ .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 6 +++ .../MongoDB/Blogs/MongoBlogPostRepository.cs | 6 +++ .../Public/Blogs/BlogPostGetListInput.cs | 2 - .../Public/Blogs/IBlogPostPublicAppService.cs | 8 +++- .../Public/Blogs/BlogPostPublicAppService.cs | 12 +++++- .../Public/Blogs/BlogPostPublicController.cs | 15 +++++-- .../Pages/Public/CmsKit/Blogs/BlogPost.cshtml | 4 +- .../Pages/Public/CmsKit/Blogs/Index.cshtml | 39 ++++++++++++++++--- .../Pages/Public/CmsKit/Blogs/Index.cshtml.cs | 13 ++++++- .../Pages/Public/CmsKit/Blogs/index.css | 4 ++ .../Pages/Public/CmsKit/Blogs/index.js | 18 +++++++++ 12 files changed, 113 insertions(+), 17 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.js diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index 5b04ffee07..6e650113d3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Blogs; @@ -25,4 +26,6 @@ public interface IBlogPostRepository : IBasicRepository Task SlugExistsAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); Task GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); + + Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index 64fe2e2e02..cbd8fa3cfe 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -97,4 +97,10 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId && x.Slug.ToLower() == slug, GetCancellationToken(cancellationToken)); } + + public async Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) + { + return await (await GetDbContextAsync()).BlogPosts.Select(x => x.Author).Distinct() + .ToListAsync(GetCancellationToken(cancellationToken)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index adf394b90f..a2bae9e317 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -101,4 +101,10 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId && x.Slug.ToLower() == slug, token); } + + public async Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) + { + var queryable = (await GetQueryableAsync()).Select(x => x.Author).Distinct(); + return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs index 82388fdb42..b471171f3b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs @@ -5,7 +5,5 @@ namespace Volo.CmsKit.Public.Blogs; public class BlogPostGetListInput : PagedAndSortedResultRequestDto { - public string BlogSlug { get; set; } - public Guid? AuthorId { get; set; } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index 89103979ba..7f2b50c2a5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -1,13 +1,17 @@ -using JetBrains.Annotations; +using System.Collections.Generic; +using JetBrains.Annotations; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Blogs; public interface IBlogPostPublicAppService : IApplicationService { - Task> GetListAsync(BlogPostGetListInput input); + Task> GetListAsync(string blogSlug, BlogPostGetListInput input); Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); + + Task> GetAuthorsHasBlogPosts(); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 39e5e75128..12543b0ed4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -5,6 +5,7 @@ using Volo.Abp.Application.Dtos; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Blogs; using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Blogs; @@ -14,6 +15,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub protected IBlogRepository BlogRepository { get; } protected IBlogPostRepository BlogPostRepository { get; } + public BlogPostPublicAppService( IBlogRepository blogRepository, @@ -32,9 +34,9 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub return ObjectMapper.Map(blogPost); } - public virtual async Task> GetListAsync(BlogPostGetListInput input) + public virtual async Task> GetListAsync(string blogSlug, BlogPostGetListInput input) { - var blog = await BlogRepository.GetBySlugAsync(input.BlogSlug); + var blog = await BlogRepository.GetBySlugAsync(blogSlug); var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, input.MaxResultCount, input.SkipCount, input.Sorting); @@ -43,4 +45,10 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub await BlogPostRepository.GetCountAsync(blogId: blog.Id), ObjectMapper.Map, List>(blogPosts)); } + + public virtual async Task> GetAuthorsHasBlogPosts() + { + var authors = await BlogPostRepository.GetAuthorsHasBlogPosts(); + return ObjectMapper.Map, List>(authors); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index b89939627f..6db900c6ad 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -1,11 +1,13 @@ using Microsoft.AspNetCore.Mvc; using System; +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Content; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Blogs; @@ -30,8 +32,15 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub } [HttpGet] - public virtual Task> GetListAsync(BlogPostGetListInput input) + [Route("{blogSlug}")] + public virtual Task> GetListAsync(string blogSlug, BlogPostGetListInput input) { - return BlogPostPublicAppService.GetListAsync(input); + return BlogPostPublicAppService.GetListAsync(blogSlug, input); } -} + + [HttpGet] + public virtual Task> GetAuthorsHasBlogPosts() + { + return BlogPostPublicAppService.GetAuthorsHasBlogPosts(); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml index d8c1f428da..496ce7f8c5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml @@ -41,7 +41,9 @@

@Model.BlogPost.Title

- @@@Model.BlogPost.Author?.UserName + + @@@Model.BlogPost.Author?.UserName + @Model.BlogPost.CreationTime

diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index 32c5585f8e..dbc0d699ef 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml @@ -8,12 +8,40 @@ @model IndexModel @section styles{ - + } + +@section scripts { + + + +} + @{ const string dummyImageSource = "https://dummyimage.com/320x180/a3a3a3/fff.png"; } + + +
+ + +
+
+
@foreach (var blog in Model.Blogs.Items) { @@ -21,16 +49,16 @@ @if (blog.CoverImageMediaId != null) { - + } else { - + }
@blog.Title

- @@@blog.Author?.UserName + @@@blog.Author?.UserName @blog.CreationTime

@blog.ShortDescription

@@ -42,11 +70,10 @@
- }
- + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index b93a5d5f40..92c4ff235c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination; using Volo.CmsKit.Public.Blogs; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Blogs; @@ -19,10 +20,16 @@ public class IndexModel : CmsKitPublicPageModelBase [BindProperty(SupportsGet = true)] public int CurrentPage { get; set; } = 1; + + [BindProperty(SupportsGet = true)] + public Guid? AuthorId { get; set; } public PagedResultDto Blogs { get; private set; } public PagerModel PagerModel => new PagerModel(Blogs.TotalCount, Blogs.Items.Count, CurrentPage, PageSize, Request.Path.ToString()); + + [BindProperty(SupportsGet = true)] + public List Authors { get; set; } protected IBlogPostPublicAppService BlogPostPublicAppService { get; } @@ -34,10 +41,14 @@ public class IndexModel : CmsKitPublicPageModelBase public async Task OnGetAsync() { Blogs = await BlogPostPublicAppService.GetListAsync( + BlogSlug, new BlogPostGetListInput { SkipCount = PageSize * (CurrentPage - 1), - MaxResultCount = PageSize + MaxResultCount = PageSize, + AuthorId = AuthorId }); + + Authors = await BlogPostPublicAppService.GetAuthorsHasBlogPosts(); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css index 161bb41190..19137de2cb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css @@ -3,4 +3,8 @@ .popover { min-width: 276px; +} + +.author-name-span{ + cursor: pointer; } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.js new file mode 100644 index 0000000000..0d567d1650 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.js @@ -0,0 +1,18 @@ +$(function () { + var $selectAuthor = $('#AuthorSelect'); + var $authorNameSpan = $('.author-name-span'); + + $selectAuthor.on('change', function () { + var authorId = $selectAuthor.val(); + reloadPageWithQueryString({'authorId': authorId}); + }); + + $authorNameSpan.click(function () { + var authorId = $(this).data('author-id'); + reloadPageWithQueryString({'authorId': authorId}); + }); + + function reloadPageWithQueryString(param) { + window.location.href = window.location.pathname + "?" + $.param(param); + } +}); From 8fa4afa2601c3510f3406a000b5089fbee91aa7d Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Tue, 22 Mar 2022 16:32:13 +0300 Subject: [PATCH 050/272] Update BlogPostPublicClientProxy.Generated.cs --- .../BlogPostPublicClientProxy.Generated.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs index c96e37f579..62a79cf6a5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs @@ -1,5 +1,6 @@ // This file is automatically generated by ABP framework to use MVC Controllers from CSharp using System; +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Http.Client; @@ -7,6 +8,7 @@ using Volo.Abp.Http.Modeling; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.ClientProxying; using Volo.CmsKit.Public.Blogs; +using Volo.CmsKit.Users; // ReSharper disable once CheckNamespace namespace Volo.CmsKit.Public.Blogs.ClientProxies; @@ -23,13 +25,18 @@ public partial class BlogPostPublicClientProxy : ClientProxyBase> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input) + + public virtual async Task> GetListAsync(string blogSlug, BlogPostGetListInput input) { return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue { { typeof(string), blogSlug }, - { typeof(PagedAndSortedResultRequestDto), input } + { typeof(BlogPostGetListInput), input } }); } + + public virtual async Task> GetAuthorsHasBlogPosts() + { + return await RequestAsync>(nameof(GetAuthorsHasBlogPosts)); + } } From c9f348db49fd5d8afe19a8789759cdb36468a8d7 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 23 Mar 2022 12:55:19 +0800 Subject: [PATCH 051/272] Always use GetCancellationToken --- .../CmsKit/Blogs/IBlogFeatureRepository.cs | 7 +- .../Volo/CmsKit/Tags/ITagRepository.cs | 8 +- .../Blogs/EfCoreBlogFeatureRepository.cs | 13 +- .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 8 +- .../Blogs/MongoBlogFeatureRepository.cs | 17 +- .../MongoDB/Blogs/MongoBlogPostRepository.cs | 18 +- .../MongoDB/Blogs/MongoBlogRepository.cs | 2 +- .../CmsKit/MongoDB/Tags/MongoTagRepository.cs | 12 +- .../Documents/EFCoreDocumentRepository.cs | 12 +- .../Docs/Documents/MongoDocumentRepository.cs | 10 +- .../EfCoreOrganizationUnitRepository.cs | 8 +- .../MongoDB/MongoIdentityUserRepository.cs | 20 +- .../MongoOrganizationUnitRepository.cs | 11 +- .../EfCoreTenantRepository.cs | 2 +- .../MongoDb/MongoTenantRepository.cs | 2 +- .../MyCompanyName.MyProjectName.Web/yarn.lock | 343 +++++++++--------- 16 files changed, 246 insertions(+), 247 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogFeatureRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogFeatureRepository.cs index 1854353429..8ce64ac4df 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogFeatureRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogFeatureRepository.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; @@ -9,9 +10,9 @@ namespace Volo.CmsKit.Blogs; public interface IBlogFeatureRepository : IBasicRepository { - Task> GetListAsync(Guid blogId); + Task> GetListAsync(Guid blogId, CancellationToken cancellationToken = default); - Task> GetListAsync(Guid blogId, List featureNames); + Task> GetListAsync(Guid blogId, List featureNames, CancellationToken cancellationToken = default); - Task FindAsync(Guid blogId, string featureName); + Task FindAsync(Guid blogId, string featureName, CancellationToken cancellationToken = default); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs index 7ac48eeb1a..e74b767078 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs @@ -24,9 +24,13 @@ public interface ITagRepository : IBasicRepository [NotNull] string name, CancellationToken cancellationToken = default); - Task> GetListAsync(string filter); + Task> GetListAsync( + string filter, + CancellationToken cancellationToken = default); - Task GetCountAsync(string filter); + Task GetCountAsync( + string filter, + CancellationToken cancellationToken = default); Task> GetAllRelatedTagsAsync( [NotNull] string entityType, diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogFeatureRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogFeatureRepository.cs index 8c674e11f5..3f0a9cf726 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogFeatureRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogFeatureRepository.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -15,22 +16,22 @@ public class EfCoreBlogFeatureRepository : EfCoreRepository FindAsync(Guid blogId, string featureName) + public Task FindAsync(Guid blogId, string featureName, CancellationToken cancellationToken = default) { - return base.FindAsync(x => x.BlogId == blogId && x.FeatureName == featureName); + return base.FindAsync(x => x.BlogId == blogId && x.FeatureName == featureName, cancellationToken: cancellationToken); } - public async Task> GetListAsync(Guid blogId) + public async Task> GetListAsync(Guid blogId, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()) .Where(x => x.BlogId == blogId) - .ToListAsync(); + .ToListAsync(GetCancellationToken(cancellationToken)); } - public async Task> GetListAsync(Guid blogId, List featureNames) + public async Task> GetListAsync(Guid blogId, List featureNames, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()) .Where(x => x.BlogId == blogId && featureNames.Contains(x.FeatureName)) - .ToListAsync(); + .ToListAsync(GetCancellationToken(cancellationToken)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs index dc026b32aa..9b750eaac5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -80,14 +80,14 @@ public class EfCoreTagRepository : EfCoreRepository return await query.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); } - public async Task> GetListAsync(string filter) + public async Task> GetListAsync(string filter, CancellationToken cancellationToken = default) { - return await (await GetQueryableByFilterAsync(filter)).ToListAsync(); + return await (await GetQueryableByFilterAsync(filter)).ToListAsync(GetCancellationToken(cancellationToken)); } - public async Task GetCountAsync(string filter) + public async Task GetCountAsync(string filter, CancellationToken cancellationToken = default) { - return await (await GetQueryableByFilterAsync(filter)).CountAsync(); + return await (await GetQueryableByFilterAsync(filter)).CountAsync(GetCancellationToken(cancellationToken)); } private async Task> GetQueryableByFilterAsync(string filter) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogFeatureRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogFeatureRepository.cs index 45253b3991..334debe8c8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogFeatureRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogFeatureRepository.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using MongoDB.Driver.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; @@ -17,22 +18,22 @@ public class MongoBlogFeatureRepository : MongoDbRepository FindAsync(Guid blogId, string featureName) + public Task FindAsync(Guid blogId, string featureName, CancellationToken cancellationToken = default) { - return base.FindAsync(x => x.BlogId == blogId && x.FeatureName == featureName); + return base.FindAsync(x => x.BlogId == blogId && x.FeatureName == featureName, cancellationToken: cancellationToken); } - public virtual async Task> GetListAsync(Guid blogId) + public virtual async Task> GetListAsync(Guid blogId, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync()) + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.BlogId == blogId) - .ToListAsync(); + .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> GetListAsync(Guid blogId, List featureNames) + public virtual async Task> GetListAsync(Guid blogId, List featureNames, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync()) + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.BlogId == blogId && featureNames.Contains(x.FeatureName)) - .ToListAsync(); + .ToListAsync(GetCancellationToken(cancellationToken)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index f52dc3add4..3583fdfc68 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -44,12 +44,12 @@ public class MongoBlogPostRepository : MongoDbRepository>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf>(blogId.HasValue, x => x.BlogId == blogId) - .CountAsync(GetCancellationToken(cancellationToken)); + .CountAsync(cancellationToken); } public virtual async Task> GetListAsync( @@ -60,8 +60,8 @@ public class MongoBlogPostRepository : MongoDbRepository().AsQueryable(); @@ -81,7 +81,7 @@ public class MongoBlogPostRepository : MongoDbRepository { @@ -95,8 +95,8 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId && x.Slug.ToLower() == slug, token); + cancellationToken = GetCancellationToken(cancellationToken); + var queryable = await GetMongoQueryableAsync(cancellationToken); + return await queryable.AnyAsync(x => x.BlogId == blogId && x.Slug.ToLower() == slug, cancellationToken); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs index 00d12a0246..b34c452621 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs @@ -66,7 +66,7 @@ public class MongoBlogRepository : MongoDbRepository> GetListQueryAsync(string filter = null, CancellationToken cancellationToken = default) { - return (await GetMongoQueryableAsync(GetCancellationToken(cancellationToken))) + return (await GetMongoQueryableAsync(cancellationToken)) .WhereIf(!filter.IsNullOrWhiteSpace(), b => b.Name.Contains(filter)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index 2230c36f19..6b4be3dbbf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -82,19 +82,19 @@ public class MongoTagRepository : MongoDbRepository> GetListAsync(string filter) + public async Task> GetListAsync(string filter, CancellationToken cancellationToken = default) { - return await (await GetQueryableByFilterAsync(filter)).ToListAsync(); + return await (await GetQueryableByFilterAsync(filter, cancellationToken)).ToListAsync(GetCancellationToken(cancellationToken)); } - public async Task GetCountAsync(string filter) + public async Task GetCountAsync(string filter, CancellationToken cancellationToken = default) { - return await (await GetQueryableByFilterAsync(filter)).CountAsync(); + return await (await GetQueryableByFilterAsync(filter, cancellationToken)).CountAsync(GetCancellationToken(cancellationToken)); } - private async Task> GetQueryableByFilterAsync(string filter) + private async Task> GetQueryableByFilterAsync(string filter, CancellationToken cancellationToken = default) { - var mongoQueryable = await GetMongoQueryableAsync(); + var mongoQueryable = await GetMongoQueryableAsync(cancellationToken: cancellationToken); if (!filter.IsNullOrWhiteSpace()) { diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs index a322120c3d..d1d78cc24a 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs @@ -29,13 +29,13 @@ namespace Volo.Docs.Documents LanguageCode = x.LanguageCode, Format = x.Format, }) - .ToListAsync(cancellationToken: cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListByProjectId(Guid projectId, CancellationToken cancellationToken = default) { - return await (await GetDbSetAsync()).Where(d => d.ProjectId == projectId).ToListAsync(cancellationToken: cancellationToken); + return await (await GetDbSetAsync()).Where(d => d.ProjectId == projectId).ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListAsync(Guid? projectId, string version, string name, CancellationToken cancellationToken = default) @@ -44,7 +44,7 @@ namespace Volo.Docs.Documents .WhereIf(version != null, x => x.Version == version) .WhereIf(name != null, x => x.Name == name) .WhereIf(projectId.HasValue, x => x.ProjectId == projectId) - .ToListAsync(cancellationToken: cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetAllAsync( @@ -86,7 +86,7 @@ namespace Volo.Docs.Documents ); query = query.OrderBy(string.IsNullOrWhiteSpace(sorting) ? nameof(Document.Name) : sorting); - return await query.PageBy(skipCount, maxResultCount).ToListAsync(cancellationToken); + return await query.PageBy(skipCount, maxResultCount).ToListAsync(GetCancellationToken(cancellationToken)); } public async Task GetAllCountAsync( @@ -138,7 +138,7 @@ namespace Volo.Docs.Documents .FirstOrDefaultAsync(x => x.ProjectId == projectId && x.Name == name && x.LanguageCode == languageCode && x.Version == version, - cancellationToken); + GetCancellationToken(cancellationToken)); } public async Task DeleteAsync(Guid projectId, string name, string languageCode, string version, CancellationToken cancellationToken = default) @@ -150,7 +150,7 @@ namespace Volo.Docs.Documents public async Task GetAsync(Guid id, CancellationToken cancellationToken = default) { - return await (await GetDbSetAsync()).Where(x => x.Id == id).SingleAsync(cancellationToken: cancellationToken); + return await (await GetDbSetAsync()).Where(x => x.Id == id).SingleAsync(cancellationToken: GetCancellationToken(cancellationToken)); } protected virtual IQueryable ApplyFilterForGetAll( diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs index 3a57330557..c812947388 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs @@ -31,12 +31,12 @@ namespace Volo.Docs.Documents LanguageCode = x.LanguageCode, Format = x.Format }) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListByProjectId(Guid projectId, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync(cancellationToken)).Where(d => d.ProjectId == projectId).ToListAsync(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(d => d.ProjectId == projectId).ToListAsync(GetCancellationToken(cancellationToken)); } public async Task FindAsync(Guid projectId, string name, string languageCode, string version, @@ -46,7 +46,7 @@ namespace Volo.Docs.Documents return await (await GetMongoQueryableAsync(cancellationToken)).FirstOrDefaultAsync(x => x.ProjectId == projectId && x.Name == name && x.LanguageCode == languageCode && - x.Version == version, cancellationToken); + x.Version == version, GetCancellationToken(cancellationToken)); } public async Task DeleteAsync(Guid projectId, string name, string languageCode, string version, @@ -64,7 +64,7 @@ namespace Volo.Docs.Documents .WhereIf(name != null, x => x.Name == name) .WhereIf(projectId.HasValue, x => x.ProjectId == projectId) .As>() - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetAllAsync( @@ -156,7 +156,7 @@ namespace Volo.Docs.Documents public async Task GetAsync(Guid id, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id == id).SingleAsync(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id == id).SingleAsync(GetCancellationToken(cancellationToken)); } protected virtual IMongoQueryable ApplyFilterForGetAll( diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs index eae1306975..cd2e2af595 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs @@ -137,7 +137,7 @@ public class EfCoreOrganizationUnitRepository .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .OrderBy(sorting.IsNullOrEmpty() ? nameof(IdentityRole.Name) : sorting) .PageBy(skipCount, maxResultCount) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetUnaddedRolesCountAsync( @@ -151,7 +151,7 @@ public class EfCoreOrganizationUnitRepository return await dbContext.Roles .Where(r => !roleIds.Contains(r.Id)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) - .CountAsync(cancellationToken); + .CountAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetMembersAsync( @@ -211,7 +211,7 @@ public class EfCoreOrganizationUnitRepository .IncludeDetails(includeDetails) .OrderBy(sorting.IsNullOrEmpty() ? nameof(IdentityUser.Name) : sorting) .PageBy(skipCount, maxResultCount) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetUnaddedUsersCountAsync( @@ -231,7 +231,7 @@ public class EfCoreOrganizationUnitRepository u.UserName.Contains(filter) || u.Email.Contains(filter) || (u.PhoneNumber != null && u.PhoneNumber.Contains(filter))) - .CountAsync(cancellationToken); + .CountAsync(GetCancellationToken(cancellationToken)); } [Obsolete("Use WithDetailsAsync method.")] diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs index 7a953ed81e..2edcff0388 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs @@ -36,7 +36,8 @@ public class MongoIdentityUserRepository : MongoDbRepository r.OrganizationUnitId) .ToArray(); @@ -47,14 +48,15 @@ public class MongoIdentityUserRepository : MongoDbRepository x.Roles.Select(r => r.RoleId)).ToArray(); var roleIds = user.Roles.Select(r => r.RoleId).ToArray(); var allRoleIds = orgUnitRoleIds.Union(roleIds); - return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(cancellationToken); } public virtual async Task> GetRoleNamesInOrganizationUnitAsync( Guid id, CancellationToken cancellationToken = default) { - var user = await GetAsync(id, cancellationToken: GetCancellationToken(cancellationToken)); + cancellationToken = GetCancellationToken(cancellationToken); + var user = await GetAsync(id, cancellationToken: cancellationToken); var organizationUnitIds = user.OrganizationUnits .Select(r => r.OrganizationUnitId) @@ -71,7 +73,7 @@ public class MongoIdentityUserRepository : MongoDbRepository roleIds.Contains(r.Id)) .Select(r => r.Name) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); } public virtual async Task FindByLoginAsync( @@ -172,7 +174,8 @@ public class MongoIdentityUserRepository : MongoDbRepository r.OrganizationUnitId) .ToArray(); @@ -183,7 +186,7 @@ public class MongoIdentityUserRepository : MongoDbRepository x.Roles.Select(r => r.RoleId)).ToArray(); var roleIds = user.Roles.Select(r => r.RoleId).ToArray(); var allRoleIds = orgUnitRoleIds.Union(roleIds); - return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).ToListAsync(cancellationToken); } public virtual async Task> GetOrganizationUnitsAsync( @@ -191,12 +194,13 @@ public class MongoIdentityUserRepository : MongoDbRepository r.OrganizationUnitId); return await (await GetMongoQueryableAsync(cancellationToken)) .Where(ou => organizationUnitIds.Contains(ou.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); } public virtual async Task GetCountAsync( diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs index 5f0f5fd097..23726693ad 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs @@ -95,7 +95,7 @@ public class MongoOrganizationUnitRepository .OrderBy(sorting.IsNullOrEmpty() ? nameof(IdentityRole.Name) : sorting) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetRolesCountAsync( @@ -104,7 +104,7 @@ public class MongoOrganizationUnitRepository { var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); - return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => roleIds.Contains(r.Id)).CountAsync(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => roleIds.Contains(r.Id)).CountAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetUnaddedRolesAsync( @@ -124,7 +124,7 @@ public class MongoOrganizationUnitRepository .OrderBy(sorting.IsNullOrEmpty() ? nameof(IdentityRole.Name) : sorting) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetUnaddedRolesCountAsync( @@ -138,7 +138,7 @@ public class MongoOrganizationUnitRepository .Where(r => !roleIds.Contains(r.Id)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .As>() - .CountAsync(cancellationToken); + .CountAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetMembersAsync( @@ -218,12 +218,13 @@ public class MongoOrganizationUnitRepository public virtual async Task RemoveAllMembersAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) { + cancellationToken = GetCancellationToken(cancellationToken); var userQueryable = await GetMongoQueryableAsync(cancellationToken); var dbContext = await GetDbContextAsync(cancellationToken); var users = await userQueryable .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) .As>() - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); foreach (var user in users) { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs index 1fdeeb562b..34d350d242 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs @@ -74,7 +74,7 @@ public class EfCoreTenantRepository : EfCoreRepository u.Name.Contains(filter) - ).CountAsync(cancellationToken: cancellationToken); + ).CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); } [Obsolete("Use WithDetailsAsync method.")] diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs index 5da1dad761..321dcf365f 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs @@ -69,6 +69,6 @@ public class MongoTenantRepository : MongoDbRepository u.Name.Contains(filter) - ).CountAsync(cancellationToken: cancellationToken); + ).CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock index 4eb7e9ff11..ba1ca22dfb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.0.1.tgz#884a4bc9ea043654891be56cd7e7c7bbf9bbad8c" - integrity sha512-JGTQyg3Zyfda84yg/Geq6rGuBN2SX4gIOaFL2h8BX9bA8CVuBC+zcwfO1bBsP89xfTyPvdSAGBvSfhCjPwsukQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~5.0.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.0.1.tgz#77a4900424603e0be048f3507aa852701f3139a2" - integrity sha512-mn9HEOHBkmBr7d/VUt0bfg9K58IyRDb7j3ZiDoHo263WLXJkf0+C7MEbv/zxfDHW4NeztsNCd3ugA7PdTxPzmA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~5.0.1" - "@abp/bootstrap" "~5.0.1" - "@abp/bootstrap-datepicker" "~5.0.1" - "@abp/datatables.net-bs5" "~5.0.1" - "@abp/font-awesome" "~5.0.1" - "@abp/jquery-form" "~5.0.1" - "@abp/jquery-validation-unobtrusive" "~5.0.1" - "@abp/lodash" "~5.0.1" - "@abp/luxon" "~5.0.1" - "@abp/malihu-custom-scrollbar-plugin" "~5.0.1" - "@abp/select2" "~5.0.1" - "@abp/sweetalert2" "~5.0.1" - "@abp/timeago" "~5.0.1" - "@abp/toastr" "~5.0.1" - -"@abp/aspnetcore.mvc.ui@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.0.1.tgz#f5aa4e0dcc10878f590e30836887f3f9861e91e3" - integrity sha512-bN15UcNhTqeo0RXlIYws7Jd8ZfSBsVM6Y5wiAqbq1Q3Lvs1uLmryhZpn6sHmKw2Z3Lnhec7VjnZN0FwNpzEqUw== +"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.0-rc.2.tgz#d2cf4a0f2b8a93f1fe53a0bc6c66d9c3233b620a" + integrity sha512-aQk3RSl31UT4gEqiHT3oV06BZ/k6q1DVKBwVOj+YQEIb8ojptJtbGv+aUhHEql5I7zwiWe4EWf2rM2Ve0JQa6Q== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.0-rc.2" + +"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.0-rc.2.tgz#9ff2eb2a1b5f438d8f848659400100e20f74fc77" + integrity sha512-m06zMEt0C9P3f7+Qg7SjvP+k4wHPqvAOzsd5jDNN0JekeWH4gIMsqgDAoRB2SA72HUUpMbGe8Utune7EgE/T1Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~5.2.0-rc.2" + "@abp/bootstrap" "~5.2.0-rc.2" + "@abp/bootstrap-datepicker" "~5.2.0-rc.2" + "@abp/datatables.net-bs5" "~5.2.0-rc.2" + "@abp/font-awesome" "~5.2.0-rc.2" + "@abp/jquery-form" "~5.2.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~5.2.0-rc.2" + "@abp/lodash" "~5.2.0-rc.2" + "@abp/luxon" "~5.2.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~5.2.0-rc.2" + "@abp/select2" "~5.2.0-rc.2" + "@abp/sweetalert2" "~5.2.0-rc.2" + "@abp/timeago" "~5.2.0-rc.2" + "@abp/toastr" "~5.2.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.0-rc.2.tgz#427811f66eb738dbb89434e926b36a2309fe43b2" + integrity sha512-+ss9MctYTF9Ewn7VEsMqszEoiX51G070kN2bIepgyXnYetrQRFsTgQGa4yi1bAqyAF9rZ1j0hSB0eM2clFyJMg== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,152 +41,151 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.0.1.tgz#52116a154e343d84c87257ad1ef10b54012f4c33" - integrity sha512-ZJWaZKzGzshBAfyBqaUScfWqeBVfWGbZIwIplF8VKtDGcyI8R54bqDsydhS88CCnolRz4+tfq3QY6yAXrUEKAw== +"@abp/bootstrap-datepicker@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.0-rc.2.tgz#bfb648e7b8e5d2a9806301417c7864abb4cc26e2" + integrity sha512-wKR+5g/xx7zqFGFaOZVO9XySlrOmOFH/ZidDpq9QYjE+OoHSlS8X5DUnkbXj2MbQy4etZuvz9ILcmnBPonrQ7g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.0.1.tgz#d542a8fd7151e22eda1643e313a67f9892c50533" - integrity sha512-wyVAp6a4OIwlqK7AZozs7wpsBZgzG55EKeChBBfUXloJPuirQHxccFNE41aAYWfKur+wj25WD5NBnzFuKyNYiQ== +"@abp/bootstrap@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.0-rc.2.tgz#0375b38317c5d1f5f6cb7d46a0ee6bf9b85a6f4f" + integrity sha512-hsgxY8WNRonQZP3cmMKvBNHnyCSBfbBB4savLW5r7CxysjnRt6MDyhmmj7XVwVTC1siBviUcWClOHCJisaNRSw== dependencies: - "@abp/core" "~5.0.1" - bootstrap "^5.1.0" - bootstrap-v4-rtl "4.6.0-1" + "@abp/core" "~5.2.0-rc.2" + bootstrap "^5.1.3" -"@abp/core@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.0.1.tgz#904fa2c22bcbf42deb56abf772c3a53362807a2f" - integrity sha512-QzX35Oa+Vncu2OP1tXvGjAVFznmD1tZRn4tlDQgn36B2MU06UEO0JSx7JVedPvhzQZceUe5+WWMfuYNM2xeBTw== +"@abp/core@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.2.tgz#f0c3dd7f0b12e8e13a702a3b0a53aa4525da673e" + integrity sha512-zotgZOXmkh+aD0KExBr4QytQfDDHxrG15e2HFzYKywhd0mpnwAVdR2Z2Ye01C360wJ2opv0mtgaSuEZniXNO3Q== dependencies: - "@abp/utils" "~5.0.1" + "@abp/utils" "~5.2.0-rc.2" -"@abp/datatables.net-bs5@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.0.1.tgz#b8afa2255e374c86c50e57bd57c2b36a86d6a890" - integrity sha512-1fuCk+K4xW3XnDFo2+kPXHMoOTol4HLRcWVRELjoBQ5YbTxEPsbrhfNUeUsECDAmkxoqY7G3MEdtIVwmy5NPpg== +"@abp/datatables.net-bs5@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.0-rc.2.tgz#df5cbe004ba3a2330cc667b3724440c4881cc6b2" + integrity sha512-Q2Sy6MMWM3EuELHeHxKkDflPTX09ictonjB5vn/Cau2PHuOkWTnL0Ystl91a1DetQIa1ejJL/YB+Pz1TUVoUNA== dependencies: - "@abp/datatables.net" "~5.0.1" - datatables.net-bs5 "^1.10.25" + "@abp/datatables.net" "~5.2.0-rc.2" + datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.0.1.tgz#0ce5bdf7aa5bf224b93a22758a016c50562d6569" - integrity sha512-x9D2YNtnOJRrKXi2Pwrqzz9sIOrn3o6x2c8ZxjyC54vh+SLQtLycAzQw7OyaZGdbFkudlJiCuME/FiuZvht8Og== +"@abp/datatables.net@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.0-rc.2.tgz#bfdc01302d19eab0d73eff908238bf88c5806e74" + integrity sha512-TG1b8moW4RqCyNtzQKB7RnCmDt1cDEy/5WD++Maz2x4/yvu1uBBa6qLR7Mn6UNgoC51Y/op+LzaabkwXUSJl4w== dependencies: - "@abp/jquery" "~5.0.1" - datatables.net "^1.10.21" + "@abp/jquery" "~5.2.0-rc.2" + datatables.net "^1.11.4" -"@abp/font-awesome@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.0.1.tgz#661753403499925661f880c53214841dd34f5210" - integrity sha512-C+alReNvHZzST55ITBTyFqhdTehPo5ondzfqc9QlyB3Kwk1DIq0CaLqfS2xU5glYGDSqKi7xfkyQnJdwu2hKRA== +"@abp/font-awesome@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.0-rc.2.tgz#0292cb22c0280dccfe148ad3d46947ede26f8b14" + integrity sha512-FzjH/lnAglswqU7/YAXZP0H/ocGBrDkegMiQ7OjzZVcgGPS9BnqRPbiHDz7mjBHaQHzBtTCcZrXnU0l3GXCdbw== dependencies: - "@abp/core" "~5.0.1" - "@fortawesome/fontawesome-free" "^5.13.0" + "@abp/core" "~5.2.0-rc.2" + "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.0.1.tgz#20fa51946f68a7acd6ef3dd3d8d1349307f681b4" - integrity sha512-Q7GG0+XFXs7pDoa4p3r7vm8+sUh5ohwovedPNVghtX8Rm2I1sfVfJKamPr24PCAyJcFVntU1WCt/CngneES3pw== +"@abp/jquery-form@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.0-rc.2.tgz#797e3b72a91435d74f19ddaa9b2e6e04fcfed616" + integrity sha512-cVbReCeM5q7nqeQDjSIH7VmuMwX8lE36D9sariUw8xSUn5GJlnrGYNV4kE7G9JLIlIRanIlS3SPuA3RFA2z9ZA== dependencies: - "@abp/jquery" "~5.0.1" + "@abp/jquery" "~5.2.0-rc.2" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.0.1.tgz#50798d3c087d0b103944b3a9e7c39a1f51db9fdc" - integrity sha512-w5SAYB0EZRbOhIFcCUXWvoGB/dWj3zyQOarbvzJ9LelgrXvvoissaaSSqq6BySjr1UigIWBCVuruAQssizmXBQ== +"@abp/jquery-validation-unobtrusive@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.0-rc.2.tgz#ec0c22cecef3016c1da0b8dca4374a263915a835" + integrity sha512-b+ttLlnRPgDB7V2tnYp8+1Q3niM4ZmiU/ZaQB4z6gSMk/2tPAIhOOwAQt7DYRWSMUsgGFI0NvsgEBM9aLTikFA== dependencies: - "@abp/jquery-validation" "~5.0.1" - jquery-validation-unobtrusive "^3.2.11" + "@abp/jquery-validation" "~5.2.0-rc.2" + jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.0.1.tgz#5932060d1fdf04a81e998caac959188aefdf1669" - integrity sha512-T5p0U2cWh6Jov55AiUxJYRw92L6ubFXfqL0EkaePV5AnoetVXheluhq9gQAKnwVAqtc/3Rxkr/lO047catUkjw== +"@abp/jquery-validation@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.0-rc.2.tgz#a98383e6c7fb21b74ecde937c25d7fa46810a333" + integrity sha512-6lVxJyMfL0kHmv8tpxLhVfK0Rf+qjLMPkm1qHd0pSwvH+GM0QMN39s9TaexCvH3QO70BlEnwXJ2PWVY9OQY5uw== dependencies: - "@abp/jquery" "~5.0.1" - jquery-validation "^1.19.2" + "@abp/jquery" "~5.2.0-rc.2" + jquery-validation "^1.19.3" -"@abp/jquery@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.0.1.tgz#1522ba1e0c488bffdc30a230ab35e225ae32d028" - integrity sha512-AacK4cy/RpzBfRYf7Jjn+TmVm72TW0jEjRoQ3TOXmlOrunRph05mQm72Ux2o8+Z1lOwxJKRz5gKSbRTfa6Tgpw== +"@abp/jquery@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.0-rc.2.tgz#3235b92834cbca4d3e22fb0b19122aa2a24b8262" + integrity sha512-u7xpQcaMpzlXq018qBdzwWmPx+65QHPq5VhI7aAvZAUlQrvQjiiCeG25egxOeCL0aROcCjsAlnTItT1U/q9loQ== dependencies: - "@abp/core" "~5.0.1" + "@abp/core" "~5.2.0-rc.2" jquery "~3.6.0" -"@abp/lodash@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.0.1.tgz#ad22895772ce65e52941dddb84d0a7d26c521d59" - integrity sha512-r1QqZCXfDd0YQnE4MkcY291H5jWFdZtGeYmwjIkn7aeOZ0PP9qsDPkWTwPwbpfmnz4DhmIdO5a1rveWz/J5ZwQ== +"@abp/lodash@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.0-rc.2.tgz#e55f11279d4f374785a56ec68ed99cdf2495a9aa" + integrity sha512-BR6d1NbTcuk772RK8VdeHBokbqZ1OHUgRKdPG3MXlDGKZmUS4/ijFdRiIvo7Rd0WFqgk2QdbHw3lfKQ/CGqyhw== dependencies: - "@abp/core" "~5.0.1" - lodash "^4.17.15" + "@abp/core" "~5.2.0-rc.2" + lodash "^4.17.21" -"@abp/luxon@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.0.1.tgz#7930e30db60e63b486a51030c60e09b54bcb3867" - integrity sha512-cXbnyAI9Gn2bZBQuCN46UFOkzb+djA3LMgpeMlTTv0aA87PrjzT60EPQ4a9FLovESqNnblaQ9Je43QwoGH8kZA== +"@abp/luxon@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.0-rc.2.tgz#0d263482b9a73269164a8a58562ce8bd69b57f36" + integrity sha512-KIhpvl9kf43Bc/E/u6bmb1lp0asf81NoUoERQTRz7JqmH1XYJvJCqGHxommvItcu7zNjCLL6FK/JtO0v7DUiEw== dependencies: - "@abp/core" "~5.0.1" - luxon "^1.24.1" + "@abp/core" "~5.2.0-rc.2" + luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.0.1.tgz#268ec30eef8ba72a0c8cb997e55d48a1508b2719" - integrity sha512-mqF6OizoWp6kg5pztNfF78+mbfyX3JAXDfv+ZUCvjtAqllIzyOUIqRSXULDkAcDeCC1+PluRsd+uSltIppC5hA== +"@abp/malihu-custom-scrollbar-plugin@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.0-rc.2.tgz#5136c0d59d5d385350f560c6d8a3d10f6393dea7" + integrity sha512-7Q8yZbU9YRA5/Y+rRLLiPD724rjfrVBuCpfp1+b99LyeFTFTSD2oNG3r/I6FC7tE5HLaFscJLJyOca4GPS1mww== dependencies: - "@abp/core" "~5.0.1" + "@abp/core" "~5.2.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.0.1.tgz#644c46c7c942a6b9d36bc76c7132f32ad577933b" - integrity sha512-FHVqEebQS3XiYn5TMEhGaQJOAYnPqxivKpeOB0F0F2bEDGqt3OXh05KcQBOm+sDSScq3c7T7HLr9mMzlYtyHXw== +"@abp/select2@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.0-rc.2.tgz#2eef30442957ac02133357604a1256e995a9ebe7" + integrity sha512-1cFOavpWP6zRfrpXi0zozFkL6W0tEEBkWj7AiHU3AGctAQEZ0qWGKSTIExqnEsDb3LsjAKMdBycGdkLFbK97Og== dependencies: - "@abp/core" "~5.0.1" + "@abp/core" "~5.2.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert2@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.0.1.tgz#acf2acfc04619c7907237238bfaeb63f2d75fb22" - integrity sha512-CPqXIaHK7Ff6i8gNhxoZ9r3te9LIEiDCUpdHNtgRVMCaLbywfkiLyirlfRIB6lxRWSw8BZ+M/azdp5uzidW8Vw== +"@abp/sweetalert2@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.0-rc.2.tgz#15b6718b1378e8bd7e0ea019b965e7b51f0cb1ea" + integrity sha512-1ROKcfpu0Xyk7ebUFMNBhFgENcHCMj48+1Lj/OxdJH3U7KhyF5WEs54uYgn8EvY2wTCgOkHCnqeK9bRCp5M9+g== dependencies: - "@abp/core" "~5.0.1" - sweetalert2 "^11.0.18" + "@abp/core" "~5.2.0-rc.2" + sweetalert2 "^11.3.6" -"@abp/timeago@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.0.1.tgz#09ca6302304de09baa5ac8c72b950515ab0d0451" - integrity sha512-6onXho8R6eiWfncONZFBn18OwgQPKIaRM73rVevpRGJTf2pylcHtCp4uHGsoqgCc+TQU7FyoKTTkg4lfvCQa0A== +"@abp/timeago@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.0-rc.2.tgz#e6ad0cb584515b95e47258976d726fd996b7f47d" + integrity sha512-D9Y7xfpP6neURDkP/WMrFh25G++0SUiGIDaCIElgymhNdVp2gm9pC633ShetMOFrPCSuOUvlzC2p4YkUdq0Lnw== dependencies: - "@abp/jquery" "~5.0.1" + "@abp/jquery" "~5.2.0-rc.2" timeago "^1.6.7" -"@abp/toastr@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.0.1.tgz#a3959df1de0c4640fabf508da9ccd3ed37ae2b03" - integrity sha512-ndL1uj2ce4PbGDzxh+QCIWYu+GAmW1Xwma4aJcq5zKo+xhlLJJnTe6QFGKr7wSsTVZMB7z1Pp2olvXH6an82+g== +"@abp/toastr@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.0-rc.2.tgz#b5f013f1f00dab648da2fe1cf4ece6691e6eafc7" + integrity sha512-FSkva7zP3kJFSh6SlmvrgjPFJscJbmrgCilxGxPGVxlg5p9LNORgkotNk2yKsGHX0F0rnKJ4kHepTq7g+oGMdw== dependencies: - "@abp/jquery" "~5.0.1" + "@abp/jquery" "~5.2.0-rc.2" toastr "^2.1.4" -"@abp/utils@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.0.1.tgz#57934383004a21172bf7e08130813c08946894fb" - integrity sha512-WLCWe7iJ8krxsz8Z7E+8GDaGZuG/6PZDdqPcMIh95opi0kvcLxb+mjPXXpiXdtFzW7O09a+NaNOxorsEFxjoKw== +"@abp/utils@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.0-rc.2.tgz#1280059ff3e948ae0827eaf06d916e5a90f8907b" + integrity sha512-/mo4dSXPkhCEbqyKunuURcF1cEzuJqRTPOGpjSrjDwOgymVSWp/AqqjJPBXuc4qrMfB4q9y+Iod5nslXp2cXeA== dependencies: just-compare "^1.3.0" -"@fortawesome/fontawesome-free@^5.13.0": - version "5.13.1" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.1.tgz#c53b4066edae16cd1fd669f687baf031b45fb9d6" - integrity sha512-D819f34FLHeBN/4xvw0HR0u7U2G7RqjPSggXqf7LktsxWQ48VAfGwvMrhcVuaZV2fF069c/619RdgCCms0DHhw== +"@fortawesome/fontawesome-free@^5.15.4": + version "5.15.4" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" + integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== abbrev@1: version "1.1.1" @@ -391,12 +390,7 @@ bootstrap-datepicker@^1.9.0: dependencies: jquery ">=1.7.1 <4.0.0" -bootstrap-v4-rtl@4.6.0-1: - version "4.6.0-1" - resolved "https://registry.yarnpkg.com/bootstrap-v4-rtl/-/bootstrap-v4-rtl-4.6.0-1.tgz#8fc502e800308fb725151128dd288df1c027cd8e" - integrity sha512-ChcbO5JeEQx6/Yz40YZLq3A4RIWcCmCCiRpweF5wg32/Q8CfWrwDNpcDTJ2SU+aSAewUJoCSzf/tRxhAgnZuog== - -bootstrap@^5.1.0: +bootstrap@^5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.1.3.tgz#ba081b0c130f810fa70900acbc1c6d3c28fa8f34" integrity sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q== @@ -603,25 +597,18 @@ d@1: dependencies: es5-ext "^0.10.9" -datatables.net-bs5@^1.10.25: - version "1.11.3" - resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-1.11.3.tgz#939d0e66fbf518718a519534a88fc88cd29405b0" - integrity sha512-u0tosKUR1XNpXzxOOt2NInnNYayt7GQoG+OM1xPRhdkZ7ZBD4oNF8S0aKve8yvSUq/ZwTMh4WJeh80GdmrJAdQ== +datatables.net-bs5@^1.11.4: + version "1.11.5" + resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-1.11.5.tgz#593608d54aeb7f91bcbd80bde304155ba3795663" + integrity sha512-1zyh972GtuK1uAb9h8nP3jJ7f/3UgCDq69LAaZS2bVd4mEHECJ6vrZLacxrkOHOs/q/H3v5sEMeZ46vXz8ox4w== dependencies: - datatables.net ">=1.10.25" + datatables.net ">=1.11.3" jquery ">=1.7" -datatables.net@>=1.10.25: - version "1.11.3" - resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.11.3.tgz#80e691036efcd62467558ee64c07dd566cb761b4" - integrity sha512-VMj5qEaTebpNurySkM6jy6sGpl+s6onPK8xJhYr296R/vUBnz1+id16NVqNf9z5aR076OGcpGHCuiTuy4E05oQ== - dependencies: - jquery ">=1.7" - -datatables.net@^1.10.21: - version "1.10.21" - resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.10.21.tgz#f1d35c8e5c3eb7f5caef39e80cd5b836a8c77103" - integrity sha512-/bSZtxmf3GTpYcvEmwZ8q26I1yhSx8qklR2B+s1K8+/51UW/zc2zTYwJMqr/Z+iCYixAc00ildj4g2x0Qamolw== +datatables.net@>=1.11.3, datatables.net@^1.11.4: + version "1.11.5" + resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.11.5.tgz#858a69953a01e1d5b18786769802117b04b8e3c9" + integrity sha512-nlFst2xfwSWaQgaOg5sXVG3cxYC0tH8E8d65289w9ROgF2TmLULOOpcdMpyxxUim/qEwVSEem42RjkTWEpr3eA== dependencies: jquery ">=1.7" @@ -1375,12 +1362,12 @@ jquery-mousewheel@>=3.0.6: version "3.1.13" resolved "https://registry.yarnpkg.com/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz#06f0335f16e353a695e7206bf50503cb523a6ee5" -jquery-validation-unobtrusive@^3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.11.tgz#175ee46380385a0e33ed320f255fad321f68f9f5" - integrity sha512-3FQPllaWdD+Aq55zJLGSW39+eXPDz1HhwAvrSwYi8zHQ8DVcu5IJ1HVeTiCl0BnCnrIBvfFU3zEB/DrGdcoRIQ== +jquery-validation-unobtrusive@^3.2.12: + version "3.2.12" + resolved "https://registry.yarnpkg.com/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.12.tgz#1d52841f653e516525c251e494b042e664dad8af" + integrity sha512-kPixGhVcuat7vZXngGFfSIksy4VlzZcHyRgnBIZdsfVneCU+D5sITC8T8dD/9c9K/Q+qkMlgp7ufJHz93nKSuQ== dependencies: - jquery ">=1.8" + jquery "^3.5.1" jquery-validation ">=1.16" jquery-validation@>=1.16: @@ -1389,12 +1376,12 @@ jquery-validation@>=1.16: dependencies: jquery "^1.7 || ^2.0 || ^3.1" -jquery-validation@^1.19.2: - version "1.19.2" - resolved "https://registry.yarnpkg.com/jquery-validation/-/jquery-validation-1.19.2.tgz#c602831b0d8c5881400af424e872757ce241eff9" - integrity sha512-yHaAqOGaAB7+p2u5lpzhhQVt3CBMUw3fHcuCJ7nXmXz0LWLHPN7yOhwnocp5nrn2SmnXR1jpV+whx2j1kLz1tQ== +jquery-validation@^1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/jquery-validation/-/jquery-validation-1.19.3.tgz#50b350eba8b02bcfd119ba15f199487b7eb64086" + integrity sha512-iXxCS5W7STthSTMFX/NDZfWHBLbJ1behVK3eAgHXAV8/0vRa9M4tiqHvJMr39VGWHMGdlkhrtrkBuaL2UlE8yw== -jquery@>=1.12.0, jquery@>=1.7, jquery@>=1.7.2, jquery@>=1.8, "jquery@^1.7 || ^2.0 || ^3.1": +jquery@>=1.12.0, jquery@>=1.7, jquery@>=1.7.2, "jquery@^1.7 || ^2.0 || ^3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" @@ -1403,7 +1390,7 @@ jquery@>=1.12.0, jquery@>=1.7, jquery@>=1.7.2, jquery@>=1.8, "jquery@^1.7 || ^2. resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== -jquery@~3.6.0: +jquery@^3.5.1, jquery@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== @@ -1497,15 +1484,15 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -lodash@^4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -luxon@^1.24.1: - version "1.24.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.24.1.tgz#a8383266131ed4eaed4b5f430f96f3695403a52a" - integrity sha512-CgnIMKAWT0ghcuWFfCWBnWGOddM0zu6c4wZAWmD0NN7MZTnro0+833DF6tJep+xlxRPg4KtsYEHYLfTMBQKwYg== +luxon@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-2.3.1.tgz#f276b1b53fd9a740a60e666a541a7f6dbed4155a" + integrity sha512-I8vnjOmhXsMSlNMZlMkSOvgrxKJl0uOsEzdGgGNZuZPaS9KlefpE9KV95QFftlJSC+1UyCC9/I69R02cz/zcCA== make-iterator@^1.0.0: version "1.0.1" @@ -2356,10 +2343,10 @@ sver-compat@^1.5.0: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -sweetalert2@^11.0.18: - version "11.3.3" - resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.3.3.tgz#92ca0408380de8f29180788ce7ed5d5faf799cea" - integrity sha512-10Keqbmjng/+XpkpSOQ6dttpztl7XNohjnpC6bX6XFgm0WpRXM81YE0wmonGYOP6uyzd76vpfnZS04PdVvO31Q== +sweetalert2@^11.3.6: + version "11.4.6" + resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.4.6.tgz#c17ae901150c8a89ea85b93cefe5c4791f32e68a" + integrity sha512-7UDJV8etrJQ6vJGh88k7D63qBKtwEl8JV7zIxmO2Frp8ZGQDgQQC6f9ivqiVwLRxoEyfxsn/v3T6Zykk7/vlEg== tar@^4: version "4.4.10" From 2c9b725554b280bea262941e8a5c8b3bc7210343 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 23 Mar 2022 12:15:17 +0300 Subject: [PATCH 052/272] Fix CmsKit Tests --- .../Blogs/BlogPostPublicAppService_Tests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs index 2301941920..f7a1ad3e7c 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs @@ -26,7 +26,7 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase [Fact] public async Task GetListAsync_ShouldWorkProperly_WithExistingBlog() { - var blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, new PagedAndSortedResultRequestDto { MaxResultCount = 2 }); + var blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, new BlogPostGetListInput { MaxResultCount = 2 }); blogPosts.ShouldNotBeNull(); blogPosts.TotalCount.ShouldBe(2); From fe34681006020edd9a8cbc2a6d36c63be84cf55a Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 23 Mar 2022 12:15:35 +0300 Subject: [PATCH 053/272] Add simple test for GetAuthorsHasBlogPosts --- .../Blogs/BlogPostRepository_Test.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs index 0479ce75b2..4d696e916d 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs @@ -145,4 +145,14 @@ public abstract class BlogPostRepository_Test : CmsKitTestBase x.Id == testData.User1Id); + } } From df12120c4323c48f909f0ff7ee3ccfb30868b75f Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 23 Mar 2022 12:27:24 +0300 Subject: [PATCH 054/272] Fix MongoDB query for GetAuthorsHasBlogPosts --- .../MongoDB/Blogs/MongoBlogPostRepository.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index a2bae9e317..3b04f46fb6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -104,7 +104,19 @@ public class MongoBlogPostRepository : MongoDbRepository> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) { - var queryable = (await GetQueryableAsync()).Select(x => x.Author).Distinct(); + var blogPostQueryable = (await GetQueryableAsync()); + + var usersQueryable = (await GetDbContextAsync()).Collection().AsQueryable(); + + var queryable = blogPostQueryable + .Join( + usersQueryable, + o => o.AuthorId, + i => i.Id, + (blogPost, user) => new { blogPost, user }) + .Select(s => s.user) + .Distinct(); + return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken)); } } From c81536a91ab28fd3e2de9dca396e8e93a2108cda Mon Sep 17 00:00:00 2001 From: Hamza Albreem <94292623+braim23@users.noreply.github.com> Date: Wed, 23 Mar 2022 16:26:25 +0300 Subject: [PATCH 055/272] open link in new tab quick fix --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 2f2b4c8481..dbdd8b47ef 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -183,7 +183,7 @@ "InstallABPCLIInfo": "ABP CLI is the fastest way to start a new solution with the ABP framework. Install the ABP CLI using a command line window:", "DifferentLevelOfNamespaces": "You can use different levels of namespaces; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore.", "ABPCLIExamplesInfo": "The new command creates a layered MVC application with Entity Framework Core as the database provider. However, it has additional options.", - "SeeCliDocumentForMoreInformation": "Check out the ABP CLI document for more options or select the \"Direct Download\" tab above.", + "SeeCliDocumentForMoreInformation": "Check out the ABP CLI document for more options or select the \"Direct Download\" tab above.", "Optional": "Optional", "LocalFrameworkRef": "Keep the local project reference for the framework packages.", "BlobStoring": "BLOB Storing", From a676ab306760fbc2484db971ccbfe7c1d242e27b Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 23 Mar 2022 22:40:20 +0300 Subject: [PATCH 056/272] rename GetAuthorsHasBlogPosts as GetAuthorsHasBlogPostsAsync --- .../Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs | 2 +- .../Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 2 +- .../ClientProxies/BlogPostPublicClientProxy.Generated.cs | 4 ++-- .../Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs | 4 ++-- .../Pages/Public/CmsKit/Blogs/Index.cshtml.cs | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index 7f2b50c2a5..d411869bd2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -13,5 +13,5 @@ public interface IBlogPostPublicAppService : IApplicationService Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); - Task> GetAuthorsHasBlogPosts(); + Task> GetAuthorsHasBlogPostsAsync(); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 12543b0ed4..4d2af29f2d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -46,7 +46,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub ObjectMapper.Map, List>(blogPosts)); } - public virtual async Task> GetAuthorsHasBlogPosts() + public virtual async Task> GetAuthorsHasBlogPostsAsync() { var authors = await BlogPostRepository.GetAuthorsHasBlogPosts(); return ObjectMapper.Map, List>(authors); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs index 62a79cf6a5..9cc926515d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs @@ -35,8 +35,8 @@ public partial class BlogPostPublicClientProxy : ClientProxyBase> GetAuthorsHasBlogPosts() + public virtual async Task> GetAuthorsHasBlogPostsAsync() { - return await RequestAsync>(nameof(GetAuthorsHasBlogPosts)); + return await RequestAsync>(nameof(GetAuthorsHasBlogPostsAsync)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index 6db900c6ad..a08ccdfa95 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -39,8 +39,8 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub } [HttpGet] - public virtual Task> GetAuthorsHasBlogPosts() + public virtual Task> GetAuthorsHasBlogPostsAsync() { - return BlogPostPublicAppService.GetAuthorsHasBlogPosts(); + return BlogPostPublicAppService.GetAuthorsHasBlogPostsAsync(); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index 92c4ff235c..c9dc49931d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -49,6 +49,6 @@ public class IndexModel : CmsKitPublicPageModelBase AuthorId = AuthorId }); - Authors = await BlogPostPublicAppService.GetAuthorsHasBlogPosts(); + Authors = await BlogPostPublicAppService.GetAuthorsHasBlogPostsAsync(); } } From 2e9a25dc0628a55a2af309b28da8d592c5cd2a45 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 23 Mar 2022 22:42:28 +0300 Subject: [PATCH 057/272] add [NotNullAttribute] --- .../Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs | 2 +- .../Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index d411869bd2..02b6d2a5f4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -9,7 +9,7 @@ namespace Volo.CmsKit.Public.Blogs; public interface IBlogPostPublicAppService : IApplicationService { - Task> GetListAsync(string blogSlug, BlogPostGetListInput input); + Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input); Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 4d2af29f2d..62a970cf2f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -34,7 +34,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub return ObjectMapper.Map(blogPost); } - public virtual async Task> GetListAsync(string blogSlug, BlogPostGetListInput input) + public virtual async Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input) { var blog = await BlogRepository.GetBySlugAsync(blogSlug); From ae27b07a77f8b6157195f11da9be634687c98439 Mon Sep 17 00:00:00 2001 From: Musa Demir <48536631+demirmusa@users.noreply.github.com> Date: Wed, 23 Mar 2022 22:43:17 +0300 Subject: [PATCH 058/272] Update modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs Co-authored-by: Enis Necipoglu --- .../Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index 6db900c6ad..b3ba981b43 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -39,6 +39,7 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub } [HttpGet] + [Route("authors") public virtual Task> GetAuthorsHasBlogPosts() { return BlogPostPublicAppService.GetAuthorsHasBlogPosts(); From 0cd4c2bbf546bf8857e3448871079d554513a863 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 23 Mar 2022 23:14:53 +0300 Subject: [PATCH 059/272] allow filtering by user for GetCountAsync function --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 2 +- .../Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs | 1 + .../Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs | 2 ++ .../Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs | 2 ++ .../Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 2 +- 5 files changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index fbea1d81c7..58ea5b9b83 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -92,7 +92,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.AuthorId, input.MaxResultCount, input.SkipCount, input.Sorting); - var count = await BlogPostRepository.GetCountAsync(input.Filter); + var count = await BlogPostRepository.GetCountAsync(input.Filter, input.BlogId, input.AuthorId); var dtoList = blogPosts.Select(x => { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index 6e650113d3..fed0eed037 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -12,6 +12,7 @@ public interface IBlogPostRepository : IBasicRepository Task GetCountAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, CancellationToken cancellationToken = default); Task> GetListAsync( diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cbd8fa3cfe..cfc39a62c7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -41,10 +41,12 @@ public class EfCoreBlogPostRepository : EfCoreRepository GetCountAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, CancellationToken cancellationToken = default) { var queryable = (await GetDbSetAsync()) .WhereIf(blogId.HasValue, x => x.BlogId == blogId) + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) .WhereIf(!string.IsNullOrEmpty(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); var count = await queryable.CountAsync(GetCancellationToken(cancellationToken)); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 3b04f46fb6..5f72246d93 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -42,6 +42,7 @@ public class MongoBlogPostRepository : MongoDbRepository GetCountAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, CancellationToken cancellationToken = default) { var token = GetCancellationToken(cancellationToken); @@ -49,6 +50,7 @@ public class MongoBlogPostRepository : MongoDbRepository>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf>(blogId.HasValue, x => x.BlogId == blogId) + .WhereIf>(authorId.HasValue, x => x.AuthorId == authorId) .CountAsync(GetCancellationToken(cancellationToken)); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 62a970cf2f..a9121a5c2b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -42,7 +42,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub input.SkipCount, input.Sorting); return new PagedResultDto( - await BlogPostRepository.GetCountAsync(blogId: blog.Id), + await BlogPostRepository.GetCountAsync(blogId: blog.Id, authorId: input.AuthorId), ObjectMapper.Map, List>(blogPosts)); } From 859d7ceb218419a2ab5b789e80e3654f260d2b7c Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 23 Mar 2022 23:15:12 +0300 Subject: [PATCH 060/272] Test user filter --- .../Blogs/BlogPostPublicAppService_Tests.cs | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs index f7a1ad3e7c..64725fc700 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Domain.Entities; using Volo.CmsKit.Public.Blogs; +using Volo.CmsKit.Users; using Xunit; namespace Volo.CmsKit.Blogs; @@ -17,10 +18,20 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase private readonly CmsKitTestData cmsKitTestData; + private readonly ICmsUserRepository userRepository; + + private readonly IBlogRepository blogRepository; + private readonly IBlogPostRepository blogPostRepository; + + private readonly BlogPostManager blogPostManager; public BlogPostPublicAppService_Tests() { blogPostAppService = GetRequiredService(); cmsKitTestData = GetRequiredService(); + userRepository = GetRequiredService(); + blogRepository = GetRequiredService(); + blogPostManager = GetRequiredService(); + blogPostRepository = GetRequiredService(); } [Fact] @@ -62,4 +73,49 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase exception.EntityType.ShouldBe(typeof(Blog)); } + + [Fact] + public async Task GetListAsync_ShouldFilterByUser() + { + var user2 = await userRepository.GetAsync(cmsKitTestData.User2Id); + var blog = await blogRepository.GetAsync(cmsKitTestData.Blog_Id); + + var blogPost = await blogPostManager.CreateAsync( + user2, + blog, + cmsKitTestData.BlogPost_1_Title + "by user2", + cmsKitTestData.BlogPost_1_Slug + "by user2", + "Short desc 1", + "Blog Post 1 Content" + ); + + await blogPostRepository.InsertAsync(blogPost); + + //should get all not filtered by user + var blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, + new BlogPostGetListInput {}); + + blogPosts.ShouldNotBeNull(); + blogPosts.TotalCount.ShouldBe(3); + blogPosts.Items.ShouldNotBeEmpty(); + blogPosts.Items.Count.ShouldBe(3); + + //should get only one filtered by user + blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, + new BlogPostGetListInput {AuthorId = user2.Id}); + + blogPosts.ShouldNotBeNull(); + blogPosts.TotalCount.ShouldBe(1); + blogPosts.Items.ShouldNotBeEmpty(); + blogPosts.Items.Count.ShouldBe(1); + + //should get filtered by user1 + blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, + new BlogPostGetListInput {AuthorId = cmsKitTestData.User1Id}); + + blogPosts.ShouldNotBeNull(); + blogPosts.TotalCount.ShouldBe(2); + blogPosts.Items.ShouldNotBeEmpty(); + blogPosts.Items.Count.ShouldBe(2); + } } From d5dc276f590da9f9ccbdabf60b2173c701ef84fa Mon Sep 17 00:00:00 2001 From: selman koc <64414348+skoc10@users.noreply.github.com> Date: Thu, 24 Mar 2022 17:44:34 +0300 Subject: [PATCH 061/272] unit test added trx --- nupkg/unit_test.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nupkg/unit_test.ps1 b/nupkg/unit_test.ps1 index 6f53d6c738..07cdfe3655 100644 --- a/nupkg/unit_test.ps1 +++ b/nupkg/unit_test.ps1 @@ -4,7 +4,7 @@ foreach($solution in $solutions) { $solutionFolder = Join-Path $rootFolder $solution Set-Location $solutionFolder - dotnet test --no-build + dotnet test --no-build --logger trx -} \ No newline at end of file +} From 9834f1e4182b3029a35f4430dd288cdcf68aba56 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 02:34:50 +0300 Subject: [PATCH 062/272] add status to BlogPost --- .../CmsKit/Admin/Blogs/BlogPostListDto.cs | 3 +++ .../Admin/Blogs/BlogPostAdminAppService.cs | 16 +++++++------ .../Volo/CmsKit/Blogs/BlogPostStatus.cs | 7 ++++++ .../Volo/CmsKit/Blogs/BlogPost.cs | 19 +++++++++++++-- .../Volo/CmsKit/Blogs/BlogPostManager.cs | 24 ++++++++++--------- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 2 ++ .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 12 ++++++---- 7 files changed, 59 insertions(+), 24 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs index 0953bf2c00..fc8cbc9e0e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs @@ -1,6 +1,7 @@ using System; using Volo.Abp.Application.Dtos; using Volo.Abp.Auditing; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Admin.Blogs; @@ -24,4 +25,6 @@ public class BlogPostListDto : EntityDto, IHasCreationTime, IHasModificati public DateTime CreationTime { get; set; } public DateTime? LastModificationTime { get; set; } + + public BlogPostStatus? Status { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 58ea5b9b83..9968f6610c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -42,13 +42,15 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe var blog = await BlogRepository.GetAsync(input.BlogId); var blogPost = await BlogPostManager.CreateAsync( - author, - blog, - input.Title, - input.Slug, - input.ShortDescription, - input.Content, - input.CoverImageMediaId); + author, + blog, + input.Title, + input.Slug, + BlogPostStatus.Draft, + input.ShortDescription, + input.Content, + input.CoverImageMediaId + ); await BlogPostRepository.InsertAsync(blogPost); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs new file mode 100644 index 0000000000..e0a2385d7e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs @@ -0,0 +1,7 @@ +namespace Volo.CmsKit.Blogs; + +public enum BlogPostStatus +{ + Draft, + Published +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs index faf6c4bcb6..5116d0a95e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs @@ -29,7 +29,9 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant public Guid AuthorId { get; set; } public virtual CmsUser Author { get; set; } - + + public virtual BlogPostStatus Status { get; set; } + protected BlogPost() { } @@ -43,7 +45,9 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant [CanBeNull] string shortDescription = null, [CanBeNull] string content = null, [CanBeNull] Guid? coverImageMediaId = null, - [CanBeNull] Guid? tenantId = null) : base(id) + [CanBeNull] Guid? tenantId = null, + [CanBeNull] BlogPostStatus? state = null + ) : base(id) { TenantId = tenantId; BlogId = blogId; @@ -53,6 +57,7 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant SetShortDescription(shortDescription); SetContent(content); CoverImageMediaId = coverImageMediaId; + Status = state ?? BlogPostStatus.Draft; } public virtual void SetTitle(string title) @@ -76,4 +81,14 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant { Content = Check.Length(content, nameof(content), BlogPostConsts.MaxContentLength); } + + public virtual void SetDraft() + { + Status = BlogPostStatus.Draft; + } + + public virtual void SetPublished() + { + Status = BlogPostStatus.Published; + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs index a19643308d..9e21078707 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs @@ -30,6 +30,7 @@ public class BlogPostManager : DomainService [NotNull] Blog blog, [NotNull] string title, [NotNull] string slug, + [NotNull] BlogPostStatus status, [CanBeNull] string shortDescription = null, [CanBeNull] string content = null, [CanBeNull] Guid? coverImageMediaId = null) @@ -40,17 +41,18 @@ public class BlogPostManager : DomainService Check.NotNullOrEmpty(slug, nameof(slug)); var blogPost = new BlogPost( - GuidGenerator.Create(), - blog.Id, - author.Id, - title, - slug, - shortDescription, - content, - coverImageMediaId, - CurrentTenant.Id - ); - + GuidGenerator.Create(), + blog.Id, + author.Id, + title, + slug, + shortDescription, + content, + coverImageMediaId, + CurrentTenant.Id, + status + ); + await CheckSlugExistenceAsync(blog.Id, blogPost.Slug); return blogPost; diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index fed0eed037..d73512a204 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -13,12 +13,14 @@ public interface IBlogPostRepository : IBasicRepository string filter = null, Guid? blogId = null, Guid? authorId = null, + BlogPostStatus? statusFilter = null, CancellationToken cancellationToken = default); Task> GetListAsync( string filter = null, Guid? blogId = null, Guid? authorId = null, + BlogPostStatus? statusFilter = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cfc39a62c7..cc78ffa698 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -42,12 +42,14 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId) - .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) - .WhereIf(!string.IsNullOrEmpty(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); + .WhereIf(blogId.HasValue, x => x.BlogId == blogId) + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) + .WhereIf(statusFilter.HasValue, x => x.Status == statusFilter) + .WhereIf(!string.IsNullOrEmpty(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); var count = await queryable.CountAsync(GetCancellationToken(cancellationToken)); return count; @@ -57,6 +59,7 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId) .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) - .WhereIf(authorId.HasValue, x => x.AuthorId == authorId); + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) + .WhereIf(statusFilter.HasValue, x => x.Status == statusFilter); queryable = queryable.OrderBy(sorting.IsNullOrEmpty() ? $"{nameof(BlogPost.CreationTime)} desc" : sorting); From c756673a26e00204e86e85fd28d1209c97bfe757 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 02:35:36 +0300 Subject: [PATCH 063/272] add migration --- ...324203918_Added_BlogPostStatus.Designer.cs | 2118 +++++++++++++++++ .../20220324203918_Added_BlogPostStatus.cs | 26 + .../UnifiedDbContextModelSnapshot.cs | 3 + 3 files changed, 2147 insertions(+) create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.Designer.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.cs diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.Designer.cs new file mode 100644 index 0000000000..d04ca4c0ed --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.Designer.cs @@ -0,0 +1,2118 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +#nullable disable + +namespace Volo.CmsKit.Migrations +{ + [DbContext(typeof(UnifiedDbContext))] + [Migration("20220324203918_Added_BlogPostStatus")] + partial class Added_BlogPostStatus + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasColumnType("nvarchar(max)"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ImpersonatorTenantName"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorUserId"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ImpersonatorUserName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("TenantName"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("datetime2") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("tinyint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .HasMaxLength(2147483647) + .HasColumnType("varbinary(max)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("TenantId", "ContainerId", "Name"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("SourceTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique() + .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("bit") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("bit") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("bit") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("SecurityStamp"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("nvarchar(196)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("nvarchar(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[TenantId] IS NOT NULL"); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Blogs.Blog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("CmsBlogs", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Blogs.BlogFeature", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("BlogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FeatureName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.HasKey("Id"); + + b.ToTable("CmsBlogFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Blogs.BlogPost", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuthorId") + .HasColumnType("uniqueidentifier"); + + b.Property("BlogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.Property("CoverImageMediaId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ShortDescription") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorId"); + + b.HasIndex("Slug", "BlogId"); + + b.ToTable("CmsBlogPosts", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Comments.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("RepliedCommentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "RepliedCommentId"); + + b.HasIndex("TenantId", "EntityType", "EntityId"); + + b.ToTable("CmsComments", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.GlobalResources.GlobalResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("CmsGlobalResources", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.MediaDescriptors.MediaDescriptor", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MimeType") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Size") + .HasMaxLength(2147483647) + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("CmsMediaDescriptors", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Menus.MenuItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("CssClass") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ElementId") + .HasColumnType("nvarchar(max)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Icon") + .HasColumnType("nvarchar(max)"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("PageId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Target") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("Id"); + + b.ToTable("CmsMenuItems", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Pages.Page", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Script") + .HasColumnType("nvarchar(max)"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Style") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Slug"); + + b.ToTable("CmsPages", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Ratings.Rating", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("StarCount") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId", "CreatorId"); + + b.ToTable("CmsRatings", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Reactions.UserReaction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ReactionName") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId", "ReactionName"); + + b.HasIndex("TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName"); + + b.ToTable("CmsUserReactions", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.EntityTag", b => + { + b.Property("EntityId") + .HasColumnType("nvarchar(450)"); + + b.Property("TagId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("EntityId", "TagId"); + + b.HasIndex("TenantId", "EntityId", "TagId"); + + b.ToTable("CmsEntityTags", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.Tag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("CmsTags", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Users.CmsUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Email"); + + b.HasIndex("TenantId", "UserName"); + + b.ToTable("CmsUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.HasOne("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.CmsKit.Blogs.BlogPost", b => + { + b.HasOne("Volo.CmsKit.Users.CmsUser", "Author") + .WithMany() + .HasForeignKey("AuthorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.cs new file mode 100644 index 0000000000..8624383a73 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Volo.CmsKit.Migrations +{ + public partial class Added_BlogPostStatus : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Status", + table: "CmsBlogPosts", + type: "int", + nullable: false, + defaultValue: 0); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Status", + table: "CmsBlogPosts"); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 29bd29f91c..3299179fcb 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -1341,6 +1341,9 @@ namespace Volo.CmsKit.Migrations .HasMaxLength(256) .HasColumnType("nvarchar(256)"); + b.Property("Status") + .HasColumnType("int"); + b.Property("TenantId") .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); From 5697171ee1a672cfc99304df5e77f44423d0e29a Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 02:39:31 +0300 Subject: [PATCH 064/272] add publish --- .../Admin/Blogs/BlogPostGetListInput.cs | 7 ++-- .../Admin/Blogs/IBlogPostAdminAppService.cs | 3 ++ ...CmsKitAdminPermissionDefinitionProvider.cs | 2 ++ .../Permissions/CmsKitAdminPermissions.cs | 1 + .../Admin/Blogs/BlogPostAdminAppService.cs | 11 ++++++- .../BlogPostAdminClientProxy.Generated.cs | 9 +++++ .../Admin/Blogs/BlogPostAdminController.cs | 9 +++++ .../Pages/CmsKit/BlogPosts/Create.cshtml | 11 +++++-- .../Pages/CmsKit/BlogPosts/Create.cshtml.cs | 16 +++++++-- .../Pages/CmsKit/BlogPosts/create.js | 21 ++++++++++++ .../Pages/CmsKit/BlogPosts/index.js | 33 +++++++++++++++++-- .../client-proxies/cms-kit-admin-proxy.js | 10 +++++- .../CmsKit/Localization/Resources/en.json | 9 ++++- .../CmsKit/Localization/Resources/tr.json | 9 ++++- .../MongoDB/Blogs/MongoBlogPostRepository.cs | 7 ++-- .../Public/Blogs/BlogPostPublicAppService.cs | 2 +- .../CmsKitDataSeedContributor.cs | 2 ++ 17 files changed, 147 insertions(+), 15 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs index 3b2d4c2c93..f136fe6562 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs @@ -1,5 +1,6 @@ using System; using Volo.Abp.Application.Dtos; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Admin.Blogs; @@ -8,6 +9,8 @@ public class BlogPostGetListInput : PagedAndSortedResultRequestDto public string Filter { get; set; } public Guid? BlogId { get; set; } - + public Guid? AuthorId { get; set; } -} + + public BlogPostStatus? Status { get; set; } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 314b7a1def..06617fea37 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Blogs; @@ -12,4 +13,6 @@ public interface IBlogPostAdminAppService CreateBlogPostDto, UpdateBlogPostDto> { + Task PublishAsync(Guid id); + } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs index eb733cc36f..b89b38d43a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs @@ -55,6 +55,8 @@ public class CmsKitAdminPermissionDefinitionProvider : PermissionDefinitionProvi .RequireGlobalFeatures(typeof(BlogsFeature)); blogPostManagement.AddChild(CmsKitAdminPermissions.BlogPosts.Delete, L("Permission:BlogPostManagement.Delete")) .RequireGlobalFeatures(typeof(BlogsFeature)); + blogPostManagement.AddChild(CmsKitAdminPermissions.BlogPosts.Publish, L("Permission:BlogPostManagement.Publish")) + .RequireGlobalFeatures(typeof(BlogsFeature)); var menuManagement = cmsGroup.AddPermission(CmsKitAdminPermissions.Menus.Default, L("Permission:MenuManagement")) .RequireGlobalFeatures(typeof(MenuFeature)); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs index 49fa7c8ffc..b5d2a8eaa6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs @@ -51,6 +51,7 @@ public class CmsKitAdminPermissions public const string Create = Default + ".Create"; public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; + public const string Publish = Default + ".Publish"; } public static class Menus diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 9968f6610c..ed3d7693a3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -92,6 +92,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe var blogs = (await BlogRepository.GetListAsync()).ToDictionary(x => x.Id); var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.AuthorId, + statusFilter: input.Status, input.MaxResultCount, input.SkipCount, input.Sorting); var count = await BlogPostRepository.GetCountAsync(input.Filter, input.BlogId, input.AuthorId); @@ -112,4 +113,12 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { await BlogPostRepository.DeleteAsync(id); } -} + + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public virtual async Task PublishAsync(Guid id) + { + var blogPost = await BlogPostRepository.GetAsync(id); + blogPost.SetPublished(); + } + +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 560ba4e2de..93e16e3172 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -55,4 +55,13 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase
+
@@ -84,6 +87,10 @@ - + + @if ((await AuthorizationService.AuthorizeAsync(CmsKitAdminPermissions.BlogPosts.Publish)).Succeeded) + { + + } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs index 08d4d24b37..3e0fcd30b0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs @@ -31,9 +31,17 @@ public class CreateModel : CmsKitAdminPageModel { var dto = ObjectMapper.Map(ViewModel); - var created = await BlogPostAdminAppService.CreateAsync(dto); + BlogPostDto createResult; + if (ViewModel.Status == BlogPostStatus.Published) + { + createResult = await BlogPostAdminAppService.CreateAndPublishAsync(dto); + } + else + { + createResult = await BlogPostAdminAppService.CreateAsync(dto); + } - return new OkObjectResult(created); + return new OkObjectResult(createResult); } [AutoMap(typeof(CreateBlogPostDto), ReverseMap = true)] @@ -65,5 +73,9 @@ public class CreateModel : CmsKitAdminPageModel [HiddenInput] public Guid? CoverImageMediaId { get; set; } + + [HiddenInput] + [DynamicFormIgnore] + public BlogPostStatus Status { get; set; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js index eba7f51654..b94e8b2353 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js @@ -2,13 +2,20 @@ $(function () { var l = abp.localization.getResource("CmsKit"); + var blogPostStatus = { + Draft: 0, + Published: 1 + }; + var $selectBlog = $('#BlogSelectionSelect'); var $formCreate = $('#form-blog-post-create'); var $title = $('#ViewModel_Title'); var $shortDescription = $('#ViewModel_ShortDescription'); var $coverImage = $('#ViewModel_CoverImageMediaId'); var $url = $('#ViewModel_Slug'); + var $status = $('#ViewModel_Status'); var $buttonSubmit = $('#button-blog-post-create'); + var $buttonPublish = $('#button-blog-post-publish'); var $pageContentInput = $('#ViewModel_Content'); var $tagsInput = $('.tag-editor-form input[name=tags]'); var $fileInput = $('#BlogPostCoverImage'); @@ -59,9 +66,23 @@ $(function () { $buttonSubmit.click(function (e) { e.preventDefault(); + $status.val(blogPostStatus.Draft); submitCoverImage(); }); + $buttonPublish.click(function (e) { + abp.message.confirm( + l('BlogPostPublishConfirmationMessage', $title.val()), + function (isConfirmed) { + if (isConfirmed) { + e.preventDefault(); + $status.val(blogPostStatus.Published); + submitCoverImage(); + } + } + ); + }); + function submitEntityTags(blogPostId) { var tags = $tagsInput.val().split(',').map(x => x.trim()).filter(x => x); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index 60d0de3cb5..9f3402d23a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -1,7 +1,11 @@ $(function () { var l = abp.localization.getResource("CmsKit"); - + var blogPostStatus = { + Draft: 0, + Published: 1 + }; + var blogsService = volo.cmsKit.admin.blogs.blogPostAdmin; var getFilter = function () { @@ -33,6 +37,23 @@ $(function () { location.href = "BlogPosts/Update/" + data.record.id } }, + { + text: l('Publish'), + visible: function(data) { + return data?.status !== blogPostStatus.Published && abp.auth.isGranted('CmsKit.BlogPosts.Publish'); + }, + confirmMessage: function (data) { + return l("BlogPostPublishConfirmationMessage", data.record.title) + }, + action: function (data) { + blogsService + .publish(data.record.id) + .then(function () { + dataTable.ajax.reload(); + abp.notify.success(l('SuccessfullyPublished')); + }); + } + }, { text: l('Delete'), visible: abp.auth.isGranted('CmsKit.BlogPosts.Delete'), @@ -71,7 +92,15 @@ $(function () { orderable: true, data: 'creationTime', dataFormat: "datetime" - } + }, + { + title: l("Status"), + orderable: true, + data: "status", + render: function (data) { + return l("CmsKit.BlogPost.Status." + data); + } + }, ] })); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 0a1424d92a..f4c08efff2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -378,7 +378,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.getList = function(input, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'blogId', value: input.blogId }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'blogId', value: input.blogId }, { name: 'authorId', value: input.authorId }, { name: 'status', value: input.status }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '', type: 'GET' }, ajaxParams)); }; @@ -391,6 +391,14 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.publish = function(id, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/publish/' + id + '', + type: 'POST', + dataType: null + }, ajaxParams)); + }; + })(); })(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 0dd826480d..9e8bb49d2e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -85,6 +85,7 @@ "Permission:BlogPostManagement.Create": "Create", "Permission:BlogPostManagement.Delete": "Delete", "Permission:BlogPostManagement.Update": "Update", + "Permission:BlogPostManagement.Publish": "Publish", "Permission:CmsKit": "CmsKit", "Permission:Comments": "Comment Management", "Permission:Comments.Delete": "Delete", @@ -164,6 +165,12 @@ "GlobalResources": "Global Resources", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Saved successfully" + "SavedSuccessfully": "Saved successfully", + "CmsKit.BlogPost.Status.0": "Draft", + "CmsKit.BlogPost.Status.1": "Published", + "BlogPostPublishConfirmationMessage": "Are you sure to publish the blog post \"{0}\"?", + "SuccessfullyPublished": "Successfully published!", + "Draft": "Draft", + "Publish": "Publish", } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 95ef414c17..e1367ab204 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -85,6 +85,7 @@ "Permission:BlogPostManagement.Create": "Oluşturma", "Permission:BlogPostManagement.Delete": "Silme", "Permission:BlogPostManagement.Update": "Güncelleme", + "Permission:BlogPostManagement.Publish": "Yayınlama", "Permission:CmsKit": "CmsKit", "Permission:Comments": "Yorum Yönetimi", "Permission:Comments.Delete": "Silmek", @@ -163,6 +164,12 @@ "GlobalResources": "Global Kaynaklar", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Başarıyla kaydedildi" + "SavedSuccessfully": "Başarıyla kaydedildi", + "CmsKit.BlogPost.Status.0": "Taslak", + "CmsKit.BlogPost.Status.1": "Yayınlandı", + "BlogPostPublishConfirmationMessage": "\"{0}\" başlıklı gönderiyi yayınlamak istediğinize emin misiniz?", + "SuccessfullyPublished": "Başarıyla yayınlandı", + "Draft": "Taslak olarak kaydet", + "Publish": "Yayınla", } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 1db7fee75e..65a8bf9c13 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -43,6 +43,7 @@ public class MongoBlogPostRepository : MongoDbRepository>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf>(blogId.HasValue, x => x.BlogId == blogId) .WhereIf>(authorId.HasValue, x => x.AuthorId == authorId) + .WhereIf>(statusFilter.HasValue, x => x.Status == statusFilter) .CountAsync(cancellationToken); - } public virtual async Task> GetListAsync( string filter = null, Guid? blogId = null, Guid? authorId = null, + BlogPostStatus? statusFilter = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, @@ -73,7 +75,8 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId) .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) - .WhereIf(authorId.HasValue, x => x.AuthorId == authorId); + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) + .WhereIf(statusFilter.HasValue, x => x.Status == statusFilter); queryable = queryable.OrderBy(sorting.IsNullOrEmpty() ? $"{nameof(BlogPost.CreationTime)} desc" : sorting); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index a9121a5c2b..76232c69a3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -38,7 +38,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub { var blog = await BlogRepository.GetBySlugAsync(blogSlug); - var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, input.MaxResultCount, + var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, BlogPostStatus.Published, input.MaxResultCount, input.SkipCount, input.Sorting); return new PagedResultDto( diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index 13414b4573..af5ee0754a 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -367,6 +367,7 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende blog, _cmsKitTestData.BlogPost_1_Title, _cmsKitTestData.BlogPost_1_Slug, + BlogPostStatus.Published, "Short desc 1", "Blog Post 1 Content"))).Id; @@ -377,6 +378,7 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende blog, _cmsKitTestData.BlogPost_2_Title, _cmsKitTestData.BlogPost_2_Slug, + BlogPostStatus.Published, "Short desc 2", "Blog Post 2 Content"))).Id; } From 6b4dcecb6695db7f4a4b492ab152301328aa18a2 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 02:40:18 +0300 Subject: [PATCH 065/272] add create and publish --- .../CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs | 2 ++ .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 10 ++++++++++ .../BlogPostAdminClientProxy.Generated.cs | 7 +++++++ .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 8 ++++++++ .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 8 ++++++++ 5 files changed, 35 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 06617fea37..d90d5211c4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -15,4 +15,6 @@ public interface IBlogPostAdminAppService { Task PublishAsync(Guid id); + + Task CreateAndPublishAsync(CreateBlogPostDto input); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index ed3d7693a3..d666b8e5d6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -121,4 +121,14 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.SetPublished(); } + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public virtual async Task CreateAndPublishAsync(CreateBlogPostDto input) + { + var blogPost = await CreateAsync(input); + await CurrentUnitOfWork.SaveChangesAsync(); + + await PublishAsync(blogPost.Id); + return blogPost; + } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 93e16e3172..b0d733cc8c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -64,4 +64,11 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase CreateAndPublishAsync(CreateBlogPostDto input) + { + return await RequestAsync(nameof(CreateAndPublishAsync), new ClientProxyRequestTypeValue + { + { typeof(CreateBlogPostDto), input } + }); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index f7304a5613..eedd8e5074 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -70,4 +70,12 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS return BlogPostAdminAppService.PublishAsync(id); } + [HttpPost] + [Route("createandpublish")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public virtual Task CreateAndPublishAsync(CreateBlogPostDto input) + { + return BlogPostAdminAppService.CreateAndPublishAsync(input); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index f4c08efff2..7513ae8956 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -399,6 +399,14 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.createAndPublish = function(input, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/createandpublish', + type: 'POST', + data: JSON.stringify(input) + }, ajaxParams)); + }; + })(); })(); From 425beff41db63833b4ad2f3078e385c8d92a14a8 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 02:42:11 +0300 Subject: [PATCH 066/272] add draft --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 1 + .../Admin/Blogs/BlogPostAdminAppService.cs | 7 +++++++ .../BlogPostAdminClientProxy.Generated.cs | 8 ++++++++ .../Admin/Blogs/BlogPostAdminController.cs | 8 ++++++++ .../Pages/CmsKit/BlogPosts/index.js | 17 +++++++++++++++++ .../client-proxies/cms-kit-admin-proxy.js | 8 ++++++++ .../Volo/CmsKit/Localization/Resources/en.json | 1 + .../Volo/CmsKit/Localization/Resources/tr.json | 1 + 8 files changed, 51 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index d90d5211c4..d8f74d6d66 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -15,6 +15,7 @@ public interface IBlogPostAdminAppService { Task PublishAsync(Guid id); + Task DraftAsync(Guid id); Task CreateAndPublishAsync(CreateBlogPostDto input); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index d666b8e5d6..2635935efe 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -121,6 +121,13 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.SetPublished(); } + [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] + public virtual async Task DraftAsync(Guid id) + { + var blogPost = await BlogPostRepository.GetAsync(id); + blogPost.SetDraft(); + } + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] public virtual async Task CreateAndPublishAsync(CreateBlogPostDto input) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index b0d733cc8c..25d8bcf9fd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -64,6 +64,14 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase CreateAndPublishAsync(CreateBlogPostDto input) { return await RequestAsync(nameof(CreateAndPublishAsync), new ClientProxyRequestTypeValue diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index eedd8e5074..ccc2e4fd25 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -70,6 +70,14 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS return BlogPostAdminAppService.PublishAsync(id); } + [HttpPost] + [Route("draft/{id}")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] + public virtual Task DraftAsync(Guid id) + { + return BlogPostAdminAppService.DraftAsync(id); + } + [HttpPost] [Route("createandpublish")] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index 9f3402d23a..8b941f84b5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -54,6 +54,23 @@ $(function () { }); } }, + { + text: l('Draft'), + visible: function(data) { + return data?.status !== blogPostStatus.Draft && abp.auth.isGranted('CmsKit.BlogPosts.Update'); + }, + confirmMessage: function (data) { + return l("BlogPostDraftConfirmationMessage", data.record.title) + }, + action: function (data) { + blogsService + .draft(data.record.id) + .then(function () { + dataTable.ajax.reload(); + abp.notify.success(l('SuccessfullySaved')); + }); + } + }, { text: l('Delete'), visible: abp.auth.isGranted('CmsKit.BlogPosts.Delete'), diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 7513ae8956..aafdf7d245 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -399,6 +399,14 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.draft = function(id, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/draft/' + id + '', + type: 'POST', + dataType: null + }, ajaxParams)); + }; + volo.cmsKit.admin.blogs.blogPostAdmin.createAndPublish = function(input, ajaxParams) { return abp.ajax($.extend(true, { url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/createandpublish', diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 9e8bb49d2e..1083826bf7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -172,5 +172,6 @@ "SuccessfullyPublished": "Successfully published!", "Draft": "Draft", "Publish": "Publish", + "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index e1367ab204..67ca5eeafd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -171,5 +171,6 @@ "SuccessfullyPublished": "Başarıyla yayınlandı", "Draft": "Taslak olarak kaydet", "Publish": "Yayınla", + "BlogPostDraftConfirmationMessage": "\"{0}\" başlıklı gönderiyi taslak haline getirmek istediğinize emin misiniz?" } } From 4a78cc14b5c0bb6abca19bb4cbe60e212b4cd9e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Mar 2022 09:37:39 +0300 Subject: [PATCH 067/272] Update discord server link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d7b7e51a7..ebba20da41 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ Love ABP Framework? **Please give a star** to this repository :star: ## Discord Channel -You can use this link to join the ABP Community Discord Server: https://discord.gg/uVGt6hyhcm +You can use this link to join the ABP Community Discord Server: https://discord.gg/abp ## ABP Commercial From dca9f2965bcca342c226dc8a6cc302ee311aa76c Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Fri, 25 Mar 2022 09:45:29 +0300 Subject: [PATCH 068/272] Add new localizations for admin website --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 023a4b18ed..9f8e88f180 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -380,6 +380,7 @@ "PurchaseItems": "Purchase Items", "SuccessfullyUpdated": "Successfully updated", "SuccessfullyAdded": "Successfully added", - "PurchaseState": "Purchase State" + "PurchaseState": "Purchase State", + "ShowBetweenDayCount": "Show Between Days" } } \ No newline at end of file From c24446f7b7a975c2c95ced6b07816f16a134ebfa Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 10:06:43 +0300 Subject: [PATCH 069/272] Add BlogPostStatus to BlogPostDto --- .../Volo/CmsKit/Admin/Blogs/BlogPostDto.cs | 3 +++ .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 1 + 2 files changed, 4 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs index 6ea2fddd90..3e109a9eed 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs @@ -2,6 +2,7 @@ using Volo.Abp.Application.Dtos; using Volo.Abp.Auditing; using Volo.Abp.Domain.Entities; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Admin.Blogs; @@ -25,4 +26,6 @@ public class BlogPostDto : EntityDto, IHasCreationTime, IHasModificationTi public DateTime? LastModificationTime { get; set; } public string ConcurrencyStamp { get; set; } + + public BlogPostStatus Status { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 2635935efe..7e1c11bbcd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -136,6 +136,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe await CurrentUnitOfWork.SaveChangesAsync(); await PublishAsync(blogPost.Id); + blogPost.Status = BlogPostStatus.Published; return blogPost; } } \ No newline at end of file From e7928ff76acfa3bc2908db7c73c244eb62645e1a Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 10:07:47 +0300 Subject: [PATCH 070/272] Use status filter in GetCountAsync method in public blog post GetAllListAsync --- .../Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 76232c69a3..aa893f41c8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -42,7 +42,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub input.SkipCount, input.Sorting); return new PagedResultDto( - await BlogPostRepository.GetCountAsync(blogId: blog.Id, authorId: input.AuthorId), + await BlogPostRepository.GetCountAsync(blogId: blog.Id, statusFilter: BlogPostStatus.Published, authorId: input.AuthorId), ObjectMapper.Map, List>(blogPosts)); } From 0b282f88ac12091e1c205256c22dc7222e08ef1f Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 10:09:12 +0300 Subject: [PATCH 071/272] fix tests --- .../Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs index 40f552dfdb..5120138282 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs @@ -41,7 +41,7 @@ public class BlogPostManager_Tests : CmsKitDomainTestBase var blog = await blogRepository.GetAsync(cmsKitTestData.Blog_Id); - var blogPost = await blogPostManager.CreateAsync(author, blog, title, slug); + var blogPost = await blogPostManager.CreateAsync(author, blog, title, slug, BlogPostStatus.Published); blogPost.Id.ShouldNotBe(Guid.Empty); blogPost.Title.ShouldBe(title); @@ -57,7 +57,7 @@ public class BlogPostManager_Tests : CmsKitDomainTestBase var blog = await blogRepository.GetAsync(cmsKitTestData.Blog_Id); await Should.ThrowAsync(async () => - await blogPostManager.CreateAsync(author, blog, "Any New Title", cmsKitTestData.BlogPost_1_Slug)); + await blogPostManager.CreateAsync(author, blog, "Any New Title", cmsKitTestData.BlogPost_1_Slug, BlogPostStatus.Published)); } [Fact] From 39239d7c5e983f0bcfba359d8b81f960bbcee82e Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 10:13:13 +0300 Subject: [PATCH 072/272] add tests --- .../Blogs/BlogPostAdminAppService_Tests.cs | 82 ++++++++++++ .../Blogs/BlogPostPublicAppService_Tests.cs | 61 +++++++++ .../Blogs/BlogPostRepository_Test.cs | 121 +++++++++++++++++- 3 files changed, 263 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostAdminAppService_Tests.cs index 1910e3b925..bc5d6b2a5e 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostAdminAppService_Tests.cs @@ -156,4 +156,86 @@ public class BlogPostAdminAppService_Tests : CmsKitApplicationTestBase exception.EntityType.ShouldBe(typeof(BlogPost)); exception.Id.ShouldBe(cmsKitTestData.Page_2_Id); } + + [Fact] + public async Task PublishAsync_ShouldWorkProperly() + { + var newPost = await CreateBlogPost(); + newPost.Status.ShouldBe(BlogPostStatus.Draft); + + await blogPostAdminAppService.PublishAsync(newPost.Id); + var post = await blogPostAdminAppService.GetAsync(newPost.Id); + post.Status.ShouldBe(BlogPostStatus.Published); + } + + [Fact] + public async Task DraftAsync_ShouldWorkProperly() + { + var newPost = await CreateBlogPost(); + newPost.Status.ShouldBe(BlogPostStatus.Draft); + + await blogPostAdminAppService.PublishAsync(newPost.Id); + var post = await blogPostAdminAppService.GetAsync(newPost.Id); + post.Status.ShouldBe(BlogPostStatus.Published); + + await blogPostAdminAppService.DraftAsync(newPost.Id); + post = await blogPostAdminAppService.GetAsync(newPost.Id); + post.Status.ShouldBe(BlogPostStatus.Draft); + } + + [Fact] + public async Task CreateAndPublishAsync_ShouldWorkProperly() + { + var title = "My awesome new Post"; + var slug = "my-awesome-new-post"; + var shortDescription = "This blog is all about awesomeness 🤗!"; + var content = "Another blog post shared on internet"; + + var created = await blogPostAdminAppService.CreateAndPublishAsync(new CreateBlogPostDto + { + BlogId = cmsKitTestData.Blog_Id, + Title = title, + Slug = slug, + ShortDescription = shortDescription, + Content = content + }); + + created.Id.ShouldNotBe(Guid.Empty); + created.Status.ShouldBe(BlogPostStatus.Published); + + var blogPost = await blogPostRepository.GetAsync(created.Id); + + blogPost.Title.ShouldBe(title); + blogPost.Slug.ShouldBe(slug); + blogPost.ShortDescription.ShouldBe(shortDescription); + blogPost.Content.ShouldBe(content); + blogPost.Status.ShouldBe(BlogPostStatus.Published); + } + + private async Task CreateBlogPost() + { + var title = "My awesome new Post"; + var slug = "my-awesome-new-post"; + var shortDescription = "This blog is all about awesomeness 🤗!"; + var content = "Another blog post shared on internet"; + + var created = await blogPostAdminAppService.CreateAsync(new CreateBlogPostDto + { + BlogId = cmsKitTestData.Blog_Id, + Title = title, + Slug = slug, + ShortDescription = shortDescription, + Content = content + }); + + created.Id.ShouldNotBe(Guid.Empty); + + var blogPost = await blogPostRepository.GetAsync(created.Id); + + blogPost.Title.ShouldBe(title); + blogPost.Slug.ShouldBe(slug); + blogPost.ShortDescription.ShouldBe(shortDescription); + blogPost.Content.ShouldBe(content); + return created; + } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs index 64725fc700..677e1ac086 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs @@ -85,6 +85,7 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase blog, cmsKitTestData.BlogPost_1_Title + "by user2", cmsKitTestData.BlogPost_1_Slug + "by user2", + BlogPostStatus.Published, "Short desc 1", "Blog Post 1 Content" ); @@ -118,4 +119,64 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase blogPosts.Items.ShouldNotBeEmpty(); blogPosts.Items.Count.ShouldBe(2); } + + [Fact] + public async Task GetListAsync_ShouldNotGet_UnPublishedItems() + { + var user2 = await userRepository.GetAsync(cmsKitTestData.User2Id); + var blog = await blogRepository.GetAsync(cmsKitTestData.Blog_Id); + + var draftBlogPost1 = await blogPostManager.CreateAsync( + user2, + blog, + cmsKitTestData.BlogPost_1_Title + "draft1", + cmsKitTestData.BlogPost_1_Slug + "draft1", + BlogPostStatus.Draft, + "Short desc 1", + "Blog Post 1 Content" + ); + + var draftBlogPost2 = await blogPostManager.CreateAsync( + user2, + blog, + cmsKitTestData.BlogPost_1_Title + "draft2", + cmsKitTestData.BlogPost_1_Slug + "draft2", + BlogPostStatus.Draft, + "Short desc 1", + "Blog Post 1 Content" + ); + + var publishedBlogPost1 = await blogPostManager.CreateAsync( + user2, + blog, + cmsKitTestData.BlogPost_1_Title + "published1", + cmsKitTestData.BlogPost_1_Slug + "published1", + BlogPostStatus.Published, + "Short desc 1", + "Blog Post 1 Content" + ); + + await blogPostRepository.InsertAsync(draftBlogPost1); + await blogPostRepository.InsertAsync(draftBlogPost2); + await blogPostRepository.InsertAsync(publishedBlogPost1); + + //should get all not filtered by user + var blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, + new BlogPostGetListInput {}); + + blogPosts.ShouldNotBeNull(); + blogPosts.TotalCount.ShouldBe(3); + blogPosts.Items.ShouldNotBeEmpty(); + blogPosts.Items.Count.ShouldBe(3); + blogPosts.Items.Any(x => x.Id == draftBlogPost1.Id).ShouldBeFalse(); + blogPosts.Items.Any(x => x.Id == draftBlogPost2.Id).ShouldBeFalse(); + blogPosts.Items.Any(x => x.Id == publishedBlogPost1.Id).ShouldBeTrue(); + + var allItemsFromRepository = await blogPostRepository.GetListAsync(); + allItemsFromRepository.ShouldNotBeNull(); + allItemsFromRepository.Count.ShouldBe(5);//3 new added 2 already existing + allItemsFromRepository.Any(x => x.Id == draftBlogPost1.Id).ShouldBeTrue(); + allItemsFromRepository.Any(x => x.Id == draftBlogPost2.Id).ShouldBeTrue(); + allItemsFromRepository.Any(x => x.Id == publishedBlogPost1.Id).ShouldBeTrue(); + } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs index 4d696e916d..37ec33b83c 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs @@ -6,6 +6,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Entities; using Volo.Abp.Modularity; +using Volo.CmsKit.Users; using Xunit; namespace Volo.CmsKit.Blogs; @@ -15,11 +16,16 @@ public abstract class BlogPostRepository_Test : CmsKitTestBase(); blogPostRepository = GetRequiredService(); + blogPostManager = GetRequiredService(); + userRepository = GetRequiredService(); + blogRepository = GetRequiredService(); } [Fact] @@ -155,4 +161,117 @@ public abstract class BlogPostRepository_Test : CmsKitTestBase x.Id == testData.User1Id); } + + [Fact] + public async Task ShouldCreateItem_WithDraftStatus() + { + var user2 = await userRepository.GetAsync(testData.User2Id); + var blog = await blogRepository.GetAsync(testData.Blog_Id); + + var draftPost = await blogPostManager.CreateAsync( + user2, + blog, + testData.BlogPost_1_Title + "draft", + testData.BlogPost_1_Slug + "draft", + BlogPostStatus.Draft, + "Short desc 1", + "Blog Post 1 Content" + ); + + + await blogPostRepository.InsertAsync(draftPost); + + var draftPostFromDb = await blogPostRepository.GetAsync(draftPost.Id); + + draftPostFromDb.Title.ShouldBe(draftPost.Title); + draftPostFromDb.Slug.ShouldBe(draftPost.Slug); + draftPostFromDb.ShortDescription.ShouldBe(draftPost.ShortDescription); + draftPostFromDb.Content.ShouldBe(draftPost.Content); + draftPostFromDb.Status.ShouldBe(BlogPostStatus.Draft); + } + + [Fact] + public async Task ShouldCreateItem_WithPublishedStatus() + { + var user2 = await userRepository.GetAsync(testData.User2Id); + var blog = await blogRepository.GetAsync(testData.Blog_Id); + + var publishedPost = await blogPostManager.CreateAsync( + user2, + blog, + testData.BlogPost_1_Title + "published", + testData.BlogPost_1_Slug + "published", + BlogPostStatus.Published, + "Short desc 1", + "Blog Post 1 Content" + ); + + await blogPostRepository.InsertAsync(publishedPost); + + var publishedPostFromDb = await blogPostRepository.GetAsync(publishedPost.Id); + + publishedPostFromDb.Title.ShouldBe(publishedPost.Title); + publishedPostFromDb.Slug.ShouldBe(publishedPost.Slug); + publishedPostFromDb.ShortDescription.ShouldBe(publishedPost.ShortDescription); + publishedPostFromDb.Content.ShouldBe(publishedPost.Content); + publishedPostFromDb.Status.ShouldBe(BlogPostStatus.Published); + } + + [Fact] + public async Task GetListAsync_ShouldFilter_ByStatus() + { + var user2 = await userRepository.GetAsync(testData.User2Id); + var blog = await blogRepository.GetAsync(testData.Blog_Id); + + var draftPost = await blogPostManager.CreateAsync( + user2, + blog, + testData.BlogPost_1_Title + "draft", + testData.BlogPost_1_Slug + "draft", + BlogPostStatus.Draft, + "Short desc 1", + "Blog Post 1 Content" + ); + + var publishedPost = await blogPostManager.CreateAsync( + user2, + blog, + testData.BlogPost_1_Title + "published", + testData.BlogPost_1_Slug + "published", + BlogPostStatus.Published, + "Short desc 1", + "Blog Post 1 Content" + ); + + await blogPostRepository.InsertAsync(draftPost); + await blogPostRepository.InsertAsync(publishedPost); + + var draftPostFromDb = await blogPostRepository.GetAsync(draftPost.Id); + + draftPostFromDb.Title.ShouldBe(draftPost.Title); + draftPostFromDb.Slug.ShouldBe(draftPost.Slug); + draftPostFromDb.ShortDescription.ShouldBe(draftPost.ShortDescription); + draftPostFromDb.Content.ShouldBe(draftPost.Content); + draftPostFromDb.Status.ShouldBe(BlogPostStatus.Draft); + + var publishedPostFromDb = await blogPostRepository.GetAsync(publishedPost.Id); + + publishedPostFromDb.Title.ShouldBe(publishedPost.Title); + publishedPostFromDb.Slug.ShouldBe(publishedPost.Slug); + publishedPostFromDb.ShortDescription.ShouldBe(publishedPost.ShortDescription); + publishedPostFromDb.Content.ShouldBe(publishedPost.Content); + publishedPostFromDb.Status.ShouldBe(BlogPostStatus.Published); + + var draftPosts = await blogPostRepository.GetListAsync(null, statusFilter: BlogPostStatus.Draft); + draftPosts.ShouldNotBeNull(); + draftPosts.Count.ShouldBe(1); + draftPosts.Any(x => x.Id == draftPost.Id).ShouldBeTrue(); + draftPosts.Any(x => x.Id == publishedPost.Id).ShouldBeFalse(); + + var publishedPosts = await blogPostRepository.GetListAsync(null, statusFilter: BlogPostStatus.Published); + publishedPosts.ShouldNotBeNull(); + publishedPosts.Count.ShouldBe(3);//1 new added 2 already existing + publishedPosts.Any(x => x.Id == draftPost.Id).ShouldBeFalse(); + publishedPosts.Any(x => x.Id == publishedPost.Id).ShouldBeTrue(); + } } From b8eb61cdec3ca833f773726f39158b31ad2c3694 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 16:00:10 +0300 Subject: [PATCH 073/272] Implements send to admin approval to publish --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 8 +++++-- .../Admin/Blogs/BlogPostAdminAppService.cs | 18 ++++++++++++++++ .../BlogPostAdminClientProxy.Generated.cs | 16 ++++++++++++++ .../Admin/Blogs/BlogPostAdminController.cs | 16 ++++++++++++++ .../Pages/CmsKit/BlogPosts/Create.cshtml | 5 ++++- .../Pages/CmsKit/BlogPosts/Create.cshtml.cs | 4 ++++ .../Pages/CmsKit/BlogPosts/create.js | 17 ++++++++++++++- .../Pages/CmsKit/BlogPosts/index.js | 21 ++++++++++++++++++- .../client-proxies/cms-kit-admin-proxy.js | 16 ++++++++++++++ .../Volo/CmsKit/Blogs/BlogPostStatus.cs | 3 ++- .../CmsKit/Localization/Resources/en.json | 8 ++++++- .../CmsKit/Localization/Resources/tr.json | 8 ++++++- .../Volo/CmsKit/Blogs/BlogPost.cs | 5 +++++ 13 files changed, 137 insertions(+), 8 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index d8f74d6d66..061f9094b8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -14,8 +14,12 @@ public interface IBlogPostAdminAppService UpdateBlogPostDto> { Task PublishAsync(Guid id); - + Task DraftAsync(Guid id); - + Task CreateAndPublishAsync(CreateBlogPostDto input); + + Task SendToReviewAsync(Guid id); + + Task CreateAndSendToReviewAsync(CreateBlogPostDto input); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 7e1c11bbcd..b512406454 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -139,4 +139,22 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.Status = BlogPostStatus.Published; return blogPost; } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + public virtual async Task SendToReviewAsync(Guid id) + { + var blogPost = await BlogPostRepository.GetAsync(id); + blogPost.SetWaitingForReview(); + } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + public virtual async Task CreateAndSendToReviewAsync(CreateBlogPostDto input) + { + var blogPost = await CreateAsync(input); + await CurrentUnitOfWork.SaveChangesAsync(); + + await SendToReviewAsync(blogPost.Id); + blogPost.Status = BlogPostStatus.WaitingForReview; + return blogPost; + } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 25d8bcf9fd..c3f94e1992 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -79,4 +79,20 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase CreateAndSendToReviewAsync(CreateBlogPostDto input) + { + return await RequestAsync(nameof(CreateAndSendToReviewAsync), new ClientProxyRequestTypeValue + { + { typeof(CreateBlogPostDto), input } + }); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index ccc2e4fd25..0efb2bf2d5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -86,4 +86,20 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS { return BlogPostAdminAppService.CreateAndPublishAsync(input); } + + [HttpPost] + [Route("sendtoreview/{id}")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + public virtual Task SendToReviewAsync(Guid id) + { + return BlogPostAdminAppService.SendToReviewAsync(id); + } + + [HttpPost] + [Route("createandsendtoreview")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + public virtual Task CreateAndSendToReviewAsync(CreateBlogPostDto input) + { + return BlogPostAdminAppService.CreateAndSendToReviewAsync(input); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml index 70b17ea9ad..eefc59e849 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml @@ -87,10 +87,13 @@ - + @if ((await AuthorizationService.AuthorizeAsync(CmsKitAdminPermissions.BlogPosts.Publish)).Succeeded) { + }else + { + } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs index 3e0fcd30b0..a76385491a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs @@ -36,6 +36,10 @@ public class CreateModel : CmsKitAdminPageModel { createResult = await BlogPostAdminAppService.CreateAndPublishAsync(dto); } + else if (ViewModel.Status == BlogPostStatus.WaitingForReview) + { + createResult = await BlogPostAdminAppService.CreateAndSendToReviewAsync(dto); + } else { createResult = await BlogPostAdminAppService.CreateAsync(dto); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js index b94e8b2353..adc2e53c85 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js @@ -4,7 +4,8 @@ $(function () { var blogPostStatus = { Draft: 0, - Published: 1 + Published: 1, + SendToReview: 2 }; var $selectBlog = $('#BlogSelectionSelect'); @@ -16,6 +17,7 @@ $(function () { var $status = $('#ViewModel_Status'); var $buttonSubmit = $('#button-blog-post-create'); var $buttonPublish = $('#button-blog-post-publish'); + var $buttonSendToReview = $('#button-blog-post-send-to-review'); var $pageContentInput = $('#ViewModel_Content'); var $tagsInput = $('.tag-editor-form input[name=tags]'); var $fileInput = $('#BlogPostCoverImage'); @@ -83,6 +85,19 @@ $(function () { ); }); + $buttonSendToReview.click(function (e) { + abp.message.confirm( + l('BlogPostSendToReviewConfirmationMessage', $title.val()), + function (isConfirmed) { + if (isConfirmed) { + e.preventDefault(); + $status.val(blogPostStatus.SendToReview); + submitCoverImage(); + } + } + ); + }); + function submitEntityTags(blogPostId) { var tags = $tagsInput.val().split(',').map(x => x.trim()).filter(x => x); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index 8b941f84b5..a813a612ea 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -3,7 +3,8 @@ $(function () { var l = abp.localization.getResource("CmsKit"); var blogPostStatus = { Draft: 0, - Published: 1 + Published: 1, + SendToReview: 2 }; var blogsService = volo.cmsKit.admin.blogs.blogPostAdmin; @@ -54,6 +55,24 @@ $(function () { }); } }, + { + text: l('SendToReview'), + visible: function(data) { + return data?.status === blogPostStatus.Draft && + !abp.auth.isGranted('CmsKit.BlogPosts.Publish'); + }, + confirmMessage: function (data) { + return l("BlogPostPublishConfirmationMessage", data.record.title) + }, + action: function (data) { + blogsService + .sendToReview(data.record.id) + .then(function () { + dataTable.ajax.reload(); + abp.notify.success(l('BlogPostSendToReviewSuccessMessage', data.record.title)); + }); + } + }, { text: l('Draft'), visible: function(data) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index aafdf7d245..4c97f154a8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -415,6 +415,22 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.sendToReview = function(id, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/sendtoreview/' + id + '', + type: 'POST', + dataType: null + }, ajaxParams)); + }; + + volo.cmsKit.admin.blogs.blogPostAdmin.createAndSendToReview = function(input, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/createandsendtoreview', + type: 'POST', + data: JSON.stringify(input) + }, ajaxParams)); + }; + })(); })(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs index e0a2385d7e..2d849e9d93 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs @@ -3,5 +3,6 @@ public enum BlogPostStatus { Draft, - Published + Published, + WaitingForReview } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 1083826bf7..48dc92ce92 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -168,10 +168,16 @@ "SavedSuccessfully": "Saved successfully", "CmsKit.BlogPost.Status.0": "Draft", "CmsKit.BlogPost.Status.1": "Published", + "CmsKit.BlogPost.Status.2": "Waiting for review", "BlogPostPublishConfirmationMessage": "Are you sure to publish the blog post \"{0}\"?", "SuccessfullyPublished": "Successfully published!", "Draft": "Draft", "Publish": "Publish", - "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?" + "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?", + "BlogPostSendToReviewConfirmationMessage": "Are you sure to send the blog post \"{0}\" to admin review for publishing?", + "SaveAsDraft": "Save as draft", + "SendToReview": "Send to review", + "SendToReviewToPublish": "Send to review to publish", + "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 67ca5eeafd..38d8243ad6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -167,10 +167,16 @@ "SavedSuccessfully": "Başarıyla kaydedildi", "CmsKit.BlogPost.Status.0": "Taslak", "CmsKit.BlogPost.Status.1": "Yayınlandı", + "CmsKit.BlogPost.Status.2": "İnceleme Bekliyor", "BlogPostPublishConfirmationMessage": "\"{0}\" başlıklı gönderiyi yayınlamak istediğinize emin misiniz?", "SuccessfullyPublished": "Başarıyla yayınlandı", "Draft": "Taslak olarak kaydet", "Publish": "Yayınla", - "BlogPostDraftConfirmationMessage": "\"{0}\" başlıklı gönderiyi taslak haline getirmek istediğinize emin misiniz?" + "BlogPostDraftConfirmationMessage": "\"{0}\" başlıklı gönderiyi taslak haline getirmek istediğinize emin misiniz?", + "BlogPostSendToReviewConfirmationMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine göndermek istediğinize emin misiniz?", + "SaveAsDraft": "Taslak olarak kaydet", + "SendToReview": "İncelemeye gönder", + "SendToReviewToPublish": "Yayınlamak için admin incelemesine gönder", + "BlogPostSendToReviewSuccessMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine gönderildi." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs index 5116d0a95e..cca45bf4fe 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs @@ -91,4 +91,9 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant { Status = BlogPostStatus.Published; } + + public virtual void SetWaitingForReview() + { + Status = BlogPostStatus.WaitingForReview; + } } From 4784e3e7656faae625560e2de2f922ec93e4908b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Mar 2022 16:24:25 +0300 Subject: [PATCH 074/272] Get user's name, surname and phone number from external login, if available. --- .../Claims/AbpClaimActionCollectionExtensions.cs | 14 ++++++++++++++ .../Pages/Account/Login.cshtml.cs | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Microsoft/AspNetCore/Authentication/OAuth/Claims/AbpClaimActionCollectionExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Microsoft/AspNetCore/Authentication/OAuth/Claims/AbpClaimActionCollectionExtensions.cs index 01dc489c54..2aedea2608 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Microsoft/AspNetCore/Authentication/OAuth/Claims/AbpClaimActionCollectionExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Microsoft/AspNetCore/Authentication/OAuth/Claims/AbpClaimActionCollectionExtensions.cs @@ -13,6 +13,20 @@ public static class AbpClaimActionCollectionExtensions claimActions.DeleteClaim("name"); claimActions.RemoveDuplicate(AbpClaimTypes.UserName); } + + if (AbpClaimTypes.Name != "given_name") + { + claimActions.MapJsonKey(AbpClaimTypes.Name, "given_name"); + claimActions.DeleteClaim("given_name"); + claimActions.RemoveDuplicate(AbpClaimTypes.Name); + } + + if (AbpClaimTypes.SurName != "family_name") + { + claimActions.MapJsonKey(AbpClaimTypes.SurName, "family_name"); + claimActions.DeleteClaim("family_name"); + claimActions.RemoveDuplicate(AbpClaimTypes.SurName); + } if (AbpClaimTypes.Email != "email") { diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs index fe94f47415..5ec85d4078 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs @@ -277,6 +277,18 @@ public class LoginModel : AccountPageModel CheckIdentityErrors(await UserManager.SetEmailAsync(user, emailAddress)); CheckIdentityErrors(await UserManager.AddLoginAsync(user, info)); CheckIdentityErrors(await UserManager.AddDefaultRolesAsync(user)); + + user.Name = info.Principal.FindFirstValue(AbpClaimTypes.Name); + user.Surname = info.Principal.FindFirstValue(AbpClaimTypes.SurName); + + var phoneNumber = info.Principal.FindFirstValue(AbpClaimTypes.PhoneNumber); + if (!phoneNumber.IsNullOrWhiteSpace()) + { + var phoneNumberConfirmed = string.Equals(info.Principal.FindFirstValue(AbpClaimTypes.PhoneNumberVerified), "true", StringComparison.InvariantCultureIgnoreCase); + user.SetPhoneNumber(phoneNumber, phoneNumberConfirmed); + } + + await UserManager.UpdateAsync(user); return user; } From 7d190a3d9ff2011b136551851f9c416d82a8ef62 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 16:47:02 +0300 Subject: [PATCH 075/272] shows users with publish permission that they have blog posts waiting for review --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 2 ++ .../Admin/Blogs/BlogPostAdminAppService.cs | 6 ++++ .../BlogPostAdminClientProxy.Generated.cs | 5 +++ .../Admin/Blogs/BlogPostAdminController.cs | 10 +++++- .../Pages/CmsKit/BlogPosts/Index.cshtml | 7 +++- .../Pages/CmsKit/BlogPosts/index.js | 34 +++++++++++++++++-- .../client-proxies/cms-kit-admin-proxy.js | 7 ++++ .../CmsKit/Localization/Resources/en.json | 3 +- .../CmsKit/Localization/Resources/tr.json | 3 +- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 2 ++ .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 6 ++++ .../MongoDB/Blogs/MongoBlogPostRepository.cs | 8 +++++ 12 files changed, 87 insertions(+), 6 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 061f9094b8..5b7868627f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -22,4 +22,6 @@ public interface IBlogPostAdminAppService Task SendToReviewAsync(Guid id); Task CreateAndSendToReviewAsync(CreateBlogPostDto input); + + Task HasBlogPostWaitingForReviewAsync(); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index b512406454..1fef52f0c8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -157,4 +157,10 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.Status = BlogPostStatus.WaitingForReview; return blogPost; } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public async Task HasBlogPostWaitingForReviewAsync() + { + return await BlogPostRepository.HasBlogPostWaitingForReviewAsync(); + } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index c3f94e1992..974d0a279b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -95,4 +95,9 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase HasBlogPostWaitingForReviewAsync() + { + return await RequestAsync(nameof(HasBlogPostWaitingForReviewAsync)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index 0efb2bf2d5..b48350a361 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -102,4 +102,12 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS { return BlogPostAdminAppService.CreateAndSendToReviewAsync(input); } -} + + [HttpGet] + [Route("hasblogpostwaitingforreview")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public virtual Task HasBlogPostWaitingForReviewAsync() + { + return BlogPostAdminAppService.HasBlogPostWaitingForReviewAsync(); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml index 9eeb977e84..e9e882098a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml @@ -27,6 +27,11 @@ @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new {pageName = typeof(IndexModel).FullName}) } + + +
@@ -43,4 +48,4 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index a813a612ea..1e3b898225 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -8,11 +8,18 @@ $(function () { }; var blogsService = volo.cmsKit.admin.blogs.blogPostAdmin; - + var _statusFilter; var getFilter = function () { - return { + var filter = { filter: $('#CmsKitBlogPostsWrapper input.page-search-filter-text').val() }; + + if (_statusFilter) { + filter.status = _statusFilter; + _statusFilter = null; + } + + return filter; }; var dataTable = $("#BlogPostsTable").DataTable(abp.libs.datatables.normalizeConfiguration({ @@ -52,6 +59,7 @@ $(function () { .then(function () { dataTable.ajax.reload(); abp.notify.success(l('SuccessfullyPublished')); + checkHasBlogPostWaitingForReview(); }); } }, @@ -87,6 +95,7 @@ $(function () { .then(function () { dataTable.ajax.reload(); abp.notify.success(l('SuccessfullySaved')); + checkHasBlogPostWaitingForReview(); }); } }, @@ -149,4 +158,25 @@ $(function () { e.preventDefault(); window.location.href = "BlogPosts/Create" }); + + $('#button-show-waiting-for-review').on('click', function (e) { + e.preventDefault(); + _statusFilter = blogPostStatus.SendToReview; + dataTable.ajax.reload(); + }); + + function checkHasBlogPostWaitingForReview(){ + if (!abp.auth.isGranted('CmsKit.BlogPosts.Publish')){ + $('#alertHasBlogPostWaitingForReview').hide(); + } + + blogsService.hasBlogPostWaitingForReview().then(function (result) { + if (result) { + $('#alertHasBlogPostWaitingForReview').show('fast'); + } else { + $('#alertHasBlogPostWaitingForReview').hide('fast'); + } + }); + } + checkHasBlogPostWaitingForReview(); }); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 4c97f154a8..754efd41b5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -431,6 +431,13 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.hasBlogPostWaitingForReview = function(ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/hasblogpostwaitingforreview', + type: 'GET' + }, ajaxParams)); + }; + })(); })(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 48dc92ce92..eeb81b7447 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -178,6 +178,7 @@ "SaveAsDraft": "Save as draft", "SendToReview": "Send to review", "SendToReviewToPublish": "Send to review to publish", - "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing." + "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing.", + "HasBlogPostWaitingForReviewMessage": "You have a blog post waiting for review. Click to list." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 38d8243ad6..3dad725d5b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -177,6 +177,7 @@ "SaveAsDraft": "Taslak olarak kaydet", "SendToReview": "İncelemeye gönder", "SendToReviewToPublish": "Yayınlamak için admin incelemesine gönder", - "BlogPostSendToReviewSuccessMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine gönderildi." + "BlogPostSendToReviewSuccessMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine gönderildi.", + "HasBlogPostWaitingForReviewMessage": "Yayınlanmak için onay bekleyen blog postlar var! Listelemek için tıklayın." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index d73512a204..aa1b2e134a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -31,4 +31,6 @@ public interface IBlogPostRepository : IBasicRepository Task GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default); + + Task HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cc78ffa698..a5d36e2f01 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -109,4 +109,10 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.Author).Distinct() .ToListAsync(GetCancellationToken(cancellationToken)); } + + public virtual async Task HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()) + .AnyAsync(x => x.Status == BlogPostStatus.WaitingForReview, GetCancellationToken(cancellationToken)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 65a8bf9c13..8a8cf70d57 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -125,4 +125,12 @@ public class MongoBlogPostRepository : MongoDbRepository HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default) + { + cancellationToken = GetCancellationToken(cancellationToken); + + return await (await GetMongoQueryableAsync(cancellationToken)) + .AnyAsync(x => x.Status == BlogPostStatus.WaitingForReview, cancellationToken); + } } From df34d665e923b217e0b5a2d815de6759b3b80de7 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 17:14:18 +0300 Subject: [PATCH 076/272] implements filter by status to index page --- .../Pages/CmsKit/BlogPosts/Index.cshtml | 13 +++++++++++-- .../Pages/CmsKit/BlogPosts/index.js | 11 ++++++----- .../Volo/CmsKit/Localization/Resources/en.json | 4 +++- .../Volo/CmsKit/Localization/Resources/tr.json | 4 +++- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml index e9e882098a..a3f8c7b37a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml @@ -5,6 +5,7 @@ @using Volo.CmsKit.Admin.Web.Pages @using Volo.CmsKit.Admin.Web.Menus @using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar +@using Volo.CmsKit.Blogs @inherits CmsKitAdminPageBase @@ -27,7 +28,6 @@ @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new {pageName = typeof(IndexModel).FullName}) } - @@ -36,7 +36,16 @@
- + + + + @await Component.InvokeAsync(typeof(AbpPageSearchBoxViewComponent)) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index 1e3b898225..73e19a178a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -1,6 +1,8 @@ $(function () { var l = abp.localization.getResource("CmsKit"); + var $statusFilter = $("#StatusSelect"); + var blogPostStatus = { Draft: 0, Published: 1, @@ -8,15 +10,14 @@ $(function () { }; var blogsService = volo.cmsKit.admin.blogs.blogPostAdmin; - var _statusFilter; + var getFilter = function () { var filter = { filter: $('#CmsKitBlogPostsWrapper input.page-search-filter-text').val() }; - if (_statusFilter) { - filter.status = _statusFilter; - _statusFilter = null; + if ($statusFilter.val()) { + filter.status = $statusFilter.val(); } return filter; @@ -161,7 +162,7 @@ $(function () { $('#button-show-waiting-for-review').on('click', function (e) { e.preventDefault(); - _statusFilter = blogPostStatus.SendToReview; + $statusFilter.val(blogPostStatus.SendToReview); dataTable.ajax.reload(); }); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index eeb81b7447..d81c3a8c89 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -179,6 +179,8 @@ "SendToReview": "Send to review", "SendToReviewToPublish": "Send to review to publish", "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing.", - "HasBlogPostWaitingForReviewMessage": "You have a blog post waiting for review. Click to list." + "HasBlogPostWaitingForReviewMessage": "You have a blog post waiting for review. Click to list.", + "SelectAStatus": "Select a status", + "Status": "Status" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 3dad725d5b..975c644224 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -178,6 +178,8 @@ "SendToReview": "İncelemeye gönder", "SendToReviewToPublish": "Yayınlamak için admin incelemesine gönder", "BlogPostSendToReviewSuccessMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine gönderildi.", - "HasBlogPostWaitingForReviewMessage": "Yayınlanmak için onay bekleyen blog postlar var! Listelemek için tıklayın." + "HasBlogPostWaitingForReviewMessage": "Yayınlanmak için onay bekleyen blog postlar var! Listelemek için tıklayın.", + "SelectAStatus": "Durum seçin", + "Status": "Durum" } } From 973b5789c8cabc211298f65a3b7f3ae6ba9b816f Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 17:38:43 +0300 Subject: [PATCH 077/272] move changes to dev based branch moved from https://github.com/abpframework/abp/pull/12064 --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 2 ++ .../Admin/Blogs/BlogPostAdminAppService.cs | 23 +++++++++++++++++-- .../BlogPostAdminClientProxy.Generated.cs | 8 +++++++ .../Admin/Blogs/BlogPostAdminController.cs | 8 +++++++ .../Pages/CmsKit/BlogPosts/Update.cshtml | 18 +++++++++------ .../Pages/CmsKit/BlogPosts/update.js | 18 ++++++++++++++- .../client-proxies/cms-kit-admin-proxy.js | 8 +++++++ .../CmsKit/Localization/Resources/en.json | 3 ++- .../CmsKit/Localization/Resources/tr.json | 3 ++- 9 files changed, 79 insertions(+), 12 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 314b7a1def..23562020d4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Blogs; @@ -12,4 +13,5 @@ public interface IBlogPostAdminAppService CreateBlogPostDto, UpdateBlogPostDto> { + Task RemoveCoverImageAsync(Guid id); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 83899199f0..d463f8dcb1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -6,6 +6,7 @@ using Volo.Abp.Application.Dtos; using Volo.Abp.Data; using Volo.Abp.GlobalFeatures; using Volo.Abp.Users; +using Volo.CmsKit.Admin.MediaDescriptors; using Volo.CmsKit.Blogs; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; @@ -22,16 +23,20 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe protected IBlogRepository BlogRepository { get; } protected ICmsUserLookupService UserLookupService { get; } + protected IMediaDescriptorAdminAppService MediaDescriptorAdminAppService { get; } + public BlogPostAdminAppService( BlogPostManager blogPostManager, IBlogPostRepository blogPostRepository, IBlogRepository blogRepository, - ICmsUserLookupService userLookupService) + ICmsUserLookupService userLookupService, + IMediaDescriptorAdminAppService mediaDescriptorAdminAppService) { BlogPostManager = blogPostManager; BlogPostRepository = blogPostRepository; BlogRepository = blogRepository; UserLookupService = userLookupService; + MediaDescriptorAdminAppService = mediaDescriptorAdminAppService; } [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] @@ -109,4 +114,18 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { await BlogPostRepository.DeleteAsync(id); } -} + + [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] + public virtual async Task RemoveCoverImageAsync(Guid id) + { + var blogPost = await BlogPostRepository.GetAsync(id); + if (blogPost?.CoverImageMediaId == null) + { + return; + } + + await MediaDescriptorAdminAppService.DeleteAsync(blogPost.CoverImageMediaId.Value); + + blogPost.CoverImageMediaId = null; + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 560ba4e2de..0f201fb469 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -55,4 +55,12 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase
- @if (Model.ViewModel.CoverImageMediaId != null) - { - -
- } - - +
+ @if (Model.ViewModel.CoverImageMediaId != null) + { + +
+ +
+ } +
+ +
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js index 5902dc111b..65e9c89146 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js @@ -10,6 +10,7 @@ $(function () { var $blogPostIdInput = $('#Id'); var $tagsInput = $('.tag-editor-form input[name=tags]'); var $fileInput = $('#BlogPostCoverImage'); + var $buttonRemoveCoverImage = $('#button-remove-cover-image'); var UPPY_FILE_ID = "uppy-upload-file"; @@ -152,7 +153,6 @@ $(function () { } } - // ----------------------------------- var fileUploadUri = "/api/cms-kit-admin/media/blogpost"; var fileUriPrefix = "/api/cms-kit/media/"; @@ -225,4 +225,20 @@ $(function () { } }); } + + $buttonRemoveCoverImage.on('click', function () { + abp.message.confirm( + l('RemoveCoverImageConfirmationMessage'), + function (isConfirmed) { + if (isConfirmed) { + volo.cmsKit.admin.blogs.blogPostAdmin + .removeCoverImage($blogPostIdInput.val()) + .then(function () { + $coverImage.val(null); + $('#CurrentCoverImageArea').remove(); + }); + } + } + ); + }); }); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 0a1424d92a..9bce6416a3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -391,6 +391,14 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.removeCoverImage = function(id, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/removeCoverImage/' + id + '', + type: 'DELETE', + dataType: null + }, ajaxParams)); + }; + })(); })(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 0dd826480d..8cbd7ef946 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -164,6 +164,7 @@ "GlobalResources": "Global Resources", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Saved successfully" + "SavedSuccessfully": "Saved successfully", + "RemoveCoverImageConfirmationMessage": "Are you sure to remove the cover image?" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 95ef414c17..90b10f153c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -163,6 +163,7 @@ "GlobalResources": "Global Kaynaklar", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Başarıyla kaydedildi" + "SavedSuccessfully": "Başarıyla kaydedildi", + "RemoveCoverImageConfirmationMessage": "Kapak resmini kaldırmak istediğinize emin misiniz?" } } From f08f00ad279d0fe299f5d377e914f48759213ca5 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 17:44:16 +0300 Subject: [PATCH 078/272] change route requested in https://github.com/abpframework/abp/pull/12064#discussion_r835134372 --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 2 +- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index 5492633078..0dbf8ec10d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -63,7 +63,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpDelete] - [Route("removeCoverImage/{id}")] + [Route("{id}/cover-image")] [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] public Task RemoveCoverImageAsync(Guid id) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 9bce6416a3..2cb7d2ab98 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -393,7 +393,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.removeCoverImage = function(id, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/removeCoverImage/' + id + '', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/' + id + '/cover-image', type: 'DELETE', dataType: null }, ajaxParams)); From 484e4952dba54aeba09d62c83fc1c160c749a42d Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 17:46:47 +0300 Subject: [PATCH 079/272] add localization --- .../Volo/CmsKit/Localization/Resources/en.json | 3 ++- .../Volo/CmsKit/Localization/Resources/tr.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 8cbd7ef946..43f620bfd9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -165,6 +165,7 @@ "Script": "Script", "Style": "Style", "SavedSuccessfully": "Saved successfully", - "RemoveCoverImageConfirmationMessage": "Are you sure to remove the cover image?" + "RemoveCoverImageConfirmationMessage": "Are you sure to remove the cover image?", + "RemoveCoverImage": "Remove the cover image" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 90b10f153c..527e119a2e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -164,6 +164,7 @@ "Script": "Script", "Style": "Style", "SavedSuccessfully": "Başarıyla kaydedildi", - "RemoveCoverImageConfirmationMessage": "Kapak resmini kaldırmak istediğinize emin misiniz?" + "RemoveCoverImageConfirmationMessage": "Kapak resmini kaldırmak istediğinize emin misiniz?", + "RemoveCoverImage": "Kapak resmini kaldır" } } From 03e790547fbc0fb02589edb216218b657d9367d5 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 17:52:37 +0300 Subject: [PATCH 080/272] update blog post when it's status changed It is required for MongoDb. It is requested in https://github.com/abpframework/abp/pull/12073#discussion_r835100870 --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 7e1c11bbcd..acb7620472 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -119,6 +119,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { var blogPost = await BlogPostRepository.GetAsync(id); blogPost.SetPublished(); + await BlogPostRepository.UpdateAsync(blogPost); } [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] @@ -126,6 +127,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { var blogPost = await BlogPostRepository.GetAsync(id); blogPost.SetDraft(); + await BlogPostRepository.UpdateAsync(blogPost); } [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] From 7aa9b086d2e300ee3e413e916fa5d5380e6a1f8f Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:00:32 +0300 Subject: [PATCH 081/272] use kebab-case in route --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 2 +- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index ccc2e4fd25..1ae18e01c5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -79,7 +79,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpPost] - [Route("createandpublish")] + [Route("create-and-publish")] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] public virtual Task CreateAndPublishAsync(CreateBlogPostDto input) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index aafdf7d245..e7de57cb09 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -409,7 +409,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.createAndPublish = function(input, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/createandpublish', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/create-and-publish', type: 'POST', data: JSON.stringify(input) }, ajaxParams)); From d58c40f1eec1886ee85e4e0d562a02c8f8c86aeb Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:07:07 +0300 Subject: [PATCH 082/272] update blog post when it's status changed --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 8c8caecb76..e0af645131 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -147,6 +147,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { var blogPost = await BlogPostRepository.GetAsync(id); blogPost.SetWaitingForReview(); + await BlogPostRepository.UpdateAsync(blogPost); } [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] From 6a7ea6a0ffd6ac6c58bb2f7f40f2f385615c9b46 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:11:34 +0300 Subject: [PATCH 083/272] use kebap case in route --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 6 +++--- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index f285e3a542..85f53bed42 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -88,7 +88,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpPost] - [Route("sendtoreview/{id}")] + [Route("{id}/send-to-review")] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] public virtual Task SendToReviewAsync(Guid id) { @@ -96,7 +96,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpPost] - [Route("createandsendtoreview")] + [Route("create-and-send-to-review")] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] public virtual Task CreateAndSendToReviewAsync(CreateBlogPostDto input) { @@ -104,7 +104,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpGet] - [Route("hasblogpostwaitingforreview")] + [Route("has-blogpost-waiting-for-review")] [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] public virtual Task HasBlogPostWaitingForReviewAsync() { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index af615bfb86..f424c921ee 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -417,7 +417,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.sendToReview = function(id, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/sendtoreview/' + id + '', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/' + id + '/send-to-review', type: 'POST', dataType: null }, ajaxParams)); @@ -425,7 +425,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.createAndSendToReview = function(input, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/createandsendtoreview', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/create-and-send-to-review', type: 'POST', data: JSON.stringify(input) }, ajaxParams)); @@ -433,7 +433,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.hasBlogPostWaitingForReview = function(ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/hasblogpostwaitingforreview', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/has-blogpost-waiting-for-review', type: 'GET' }, ajaxParams)); }; From 3dfa70bbef30fb2d048e25ff4a41c43730113e7d Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:15:08 +0300 Subject: [PATCH 084/272] change route --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 4 ++-- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index 1ae18e01c5..fe30fd481c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -63,7 +63,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpPost] - [Route("publish/{id}")] + [Route("{id}/publish")] [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] public virtual Task PublishAsync(Guid id) { @@ -71,7 +71,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpPost] - [Route("draft/{id}")] + [Route("{id}/draft")] [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] public virtual Task DraftAsync(Guid id) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index e7de57cb09..6215960b6c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -393,7 +393,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.publish = function(id, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/publish/' + id + '', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/' + id + '/publish', type: 'POST', dataType: null }, ajaxParams)); @@ -401,7 +401,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.draft = function(id, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/draft/' + id + '', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/' + id + '/draft', type: 'POST', dataType: null }, ajaxParams)); From 62d5bab0715a697ec8d80557acff66b66d85c7c2 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:16:31 +0300 Subject: [PATCH 085/272] add forgetten localization key --- .../Volo/CmsKit/Localization/Resources/en.json | 3 ++- .../Volo/CmsKit/Localization/Resources/tr.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 1083826bf7..af0bc386d6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -172,6 +172,7 @@ "SuccessfullyPublished": "Successfully published!", "Draft": "Draft", "Publish": "Publish", - "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?" + "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?", + "SelectAnAuthor": "Select an author" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 67ca5eeafd..7842224900 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -171,6 +171,7 @@ "SuccessfullyPublished": "Başarıyla yayınlandı", "Draft": "Taslak olarak kaydet", "Publish": "Yayınla", - "BlogPostDraftConfirmationMessage": "\"{0}\" başlıklı gönderiyi taslak haline getirmek istediğinize emin misiniz?" + "BlogPostDraftConfirmationMessage": "\"{0}\" başlıklı gönderiyi taslak haline getirmek istediğinize emin misiniz?", + "SelectAnAuthor": "Bir yazar seçin" } } From d7d0bc42a6afbba71a703661f4ef444df0c39c1e Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:20:31 +0300 Subject: [PATCH 086/272] list author only has published posts --- .../Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs | 4 +++- .../Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cc78ffa698..0c1f748f10 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -106,7 +106,9 @@ public class EfCoreBlogPostRepository : EfCoreRepository> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) { - return await (await GetDbContextAsync()).BlogPosts.Select(x => x.Author).Distinct() + return await (await GetDbContextAsync()).BlogPosts + .Where(x => x.Status == BlogPostStatus.Published) + .Select(x => x.Author).Distinct() .ToListAsync(GetCancellationToken(cancellationToken)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 65a8bf9c13..a57c0973ce 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -110,9 +110,12 @@ public class MongoBlogPostRepository : MongoDbRepository> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) { - var blogPostQueryable = (await GetQueryableAsync()); + cancellationToken = GetCancellationToken(cancellationToken); + + var blogPostQueryable = (await GetQueryableAsync()) + .Where(x => x.Status == BlogPostStatus.Published); - var usersQueryable = (await GetDbContextAsync()).Collection().AsQueryable(); + var usersQueryable = (await GetDbContextAsync(cancellationToken)).Collection().AsQueryable(); var queryable = blogPostQueryable .Join( @@ -123,6 +126,6 @@ public class MongoBlogPostRepository : MongoDbRepository s.user) .Distinct(); - return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken)); + return await AsyncExecuter.ToListAsync(queryable, cancellationToken); } } From a38d0001456975cf10422d5df2399560bc38d763 Mon Sep 17 00:00:00 2001 From: Musa Demir <48536631+demirmusa@users.noreply.github.com> Date: Fri, 25 Mar 2022 18:58:17 +0300 Subject: [PATCH 087/272] use form select for select item --- .../Pages/Public/CmsKit/Blogs/Index.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index dbc0d699ef..4ae3c007c7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml @@ -25,7 +25,7 @@
- @foreach (var author in Model.Authors) { @@ -76,4 +76,4 @@ - \ No newline at end of file + From 50a11f2f53272250177072a099c34bcce6899923 Mon Sep 17 00:00:00 2001 From: Musa Demir <48536631+demirmusa@users.noreply.github.com> Date: Fri, 25 Mar 2022 19:01:49 +0300 Subject: [PATCH 088/272] use form select for select item --- .../Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml index a3f8c7b37a..6587509d11 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml @@ -37,7 +37,7 @@
- @foreach (var status in (BlogPostStatus[]) Enum.GetValues(typeof(BlogPostStatus))) { @@ -57,4 +57,4 @@ - \ No newline at end of file + From a23509a3be61360e3d762bf5bdd6189807af4ed5 Mon Sep 17 00:00:00 2001 From: Roc Date: Mon, 28 Mar 2022 02:32:28 +0800 Subject: [PATCH 089/272] Update CultureHelper.cs --- .../src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs index d4d4a5bed0..dded0d794e 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs @@ -57,8 +57,6 @@ public static class CultureHelper public static string GetBaseCultureName(string cultureName) { - return cultureName.Contains("-") - ? cultureName.Left(cultureName.IndexOf("-", StringComparison.Ordinal)) - : cultureName; + return new CultureInfo(cultureName).Parent.Name; } } From 5fac9c9d1d06db94212f27c99e7e4c7503e56d6b Mon Sep 17 00:00:00 2001 From: Roc Date: Mon, 28 Mar 2022 02:35:31 +0800 Subject: [PATCH 090/272] Update AbpLocalization_Tests.cs --- .../Abp/Localization/AbpLocalization_Tests.cs | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs index b8375485f7..6c4bdfff08 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs @@ -1,4 +1,4 @@ -using System.Globalization; +using System.Globalization; using System.Linq; using Microsoft.Extensions.Localization; using Shouldly; @@ -183,6 +183,60 @@ public class AbpLocalization_Tests : AbpIntegratedTest Date: Mon, 28 Mar 2022 13:35:17 +0800 Subject: [PATCH 091/272] Support for exporting generic interfaces. --- .../ExposeServicesAttribute.cs | 6 ++++- .../AutoRegistrationHelper_Tests.cs | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposeServicesAttribute.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposeServicesAttribute.cs index 72e7870125..286b9a8c76 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposeServicesAttribute.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposeServicesAttribute.cs @@ -15,7 +15,7 @@ public class ExposeServicesAttribute : Attribute, IExposedServiceTypesProvider public ExposeServicesAttribute(params Type[] serviceTypes) { - ServiceTypes = serviceTypes ?? new Type[0]; + ServiceTypes = serviceTypes ?? Type.EmptyTypes; } public Type[] GetExposedServiceTypes(Type targetType) @@ -49,6 +49,10 @@ public class ExposeServicesAttribute : Attribute, IExposedServiceTypesProvider foreach (var interfaceType in type.GetTypeInfo().GetInterfaces()) { var interfaceName = interfaceType.Name; + if (interfaceType.IsGenericType) + { + interfaceName = interfaceType.Name.Left(interfaceType.Name.IndexOf('`')); + } if (interfaceName.StartsWith("I")) { diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/AutoRegistrationHelper_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/AutoRegistrationHelper_Tests.cs index 3c7ccfbc6a..5d8716a70c 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/AutoRegistrationHelper_Tests.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/AutoRegistrationHelper_Tests.cs @@ -33,6 +33,21 @@ public class AutoRegistrationHelper_Tests exposedServices.ShouldContain(typeof(IDerivedService)); } + [Fact] + public void Should_Get_Conventional_Exposed_Generic_Types_By_Default() + { + //Act + var exposedServices = ExposedServiceExplorer.GetExposedServices(typeof(DefaultGenericService)); + + //Assert + exposedServices.Count.ShouldBe(4); + exposedServices.ShouldContain(typeof(IService)); + exposedServices.ShouldContain(typeof(IGenericService)); + exposedServices.ShouldContain(typeof(IGenericService)); + exposedServices.ShouldContain(typeof(DefaultGenericService)); + } + + public class DefaultDerivedService : IDerivedService { } @@ -50,4 +65,14 @@ public class AutoRegistrationHelper_Tests { } + + public interface IGenericService + { + + } + + public class DefaultGenericService : IService, IGenericService, IGenericService + { + + } } From a676e2ebbcb9faa3c7597a77d0660a35873ff209 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 28 Mar 2022 09:37:27 +0300 Subject: [PATCH 092/272] CmsKit - Add AutoComplete Select for Author filtering --- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 11 +- .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 27 ++- .../MongoDB/Blogs/MongoBlogPostRepository.cs | 31 ++- ...tFilteredPagedAndSortedResultRequestDto.cs | 8 + .../Public/Blogs/IBlogPostPublicAppService.cs | 7 +- .../Public/Blogs/BlogPostPublicAppService.cs | 19 +- .../BlogPostPublicClientProxy.Generated.cs | 18 +- ...obalResourcePublicClientProxy.Generated.cs | 27 +++ .../GlobalResourcePublicClientProxy.cs | 7 + .../ClientProxies/cms-kit-generate-proxy.json | 190 +++++++++++++++++- .../Public/Blogs/BlogPostPublicController.cs | 11 +- .../Pages/Public/CmsKit/Blogs/Index.cshtml | 26 +-- .../Pages/Public/CmsKit/Blogs/Index.cshtml.cs | 14 +- 13 files changed, 353 insertions(+), 43 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.Generated.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index fed0eed037..16c4f066a3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -28,5 +28,14 @@ public interface IBlogPostRepository : IBasicRepository Task GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); - Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default); + Task> GetAuthorsHasBlogPostsAsync( + int skipCount, + int maxResultCount, + string sorting, + string filter, + CancellationToken cancellationToken = default); + + Task GetAuthorsHasBlogPostsCountAsync(string filter, CancellationToken cancellationToken = default); + + Task GetAuthorHasBlogPostAsync(Guid id, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cfc39a62c7..b7fce01be6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -7,6 +7,7 @@ using System.Linq.Dynamic.Core; using System.Threading; using System.Threading.Tasks; using Volo.Abp; +using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore; @@ -100,9 +101,31 @@ public class EfCoreBlogPostRepository : EfCoreRepository> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) + public async Task> GetAuthorsHasBlogPostsAsync(int skipCount, int maxResultCount, string sorting, string filter, CancellationToken cancellationToken = default) { - return await (await GetDbContextAsync()).BlogPosts.Select(x => x.Author).Distinct() + return await (await CreateAuthorsQueryableAsync()) + .Skip(skipCount) + .Take(maxResultCount) + .WhereIf(!filter.IsNullOrEmpty(), x => x.UserName.Contains(filter.ToLower())) + .OrderBy(sorting.IsNullOrEmpty() ? nameof(CmsUser.UserName) : sorting) .ToListAsync(GetCancellationToken(cancellationToken)); } + + public async Task GetAuthorsHasBlogPostsCountAsync(string filter, CancellationToken cancellationToken = default) + { + return await (await CreateAuthorsQueryableAsync()) + .WhereIf(!filter.IsNullOrEmpty(), x => x.UserName.Contains(filter.ToLower())) + .CountAsync(GetCancellationToken(cancellationToken)); + } + + public async Task GetAuthorHasBlogPostAsync(Guid id, CancellationToken cancellationToken = default) + { + return await (await CreateAuthorsQueryableAsync()).FirstOrDefaultAsync(x => x.Id == id, GetCancellationToken(cancellationToken)) + ?? throw new EntityNotFoundException(typeof(CmsUser), id); + } + + private async Task> CreateAuthorsQueryableAsync() + { + return (await GetDbContextAsync()).BlogPosts.Select(x => x.Author).Distinct(); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 1db7fee75e..84570810cd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -8,6 +8,7 @@ using System.Linq.Dynamic.Core; using System.Threading; using System.Threading.Tasks; using Volo.Abp; +using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Blogs; @@ -105,13 +106,37 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId && x.Slug.ToLower() == slug, cancellationToken); } - public async Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) + public async Task> GetAuthorsHasBlogPostsAsync(int skipCount, int maxResultCount, string sorting, string filter, CancellationToken cancellationToken = default) + { + var queryable = (await CreateAuthorsQueryableAsync()) + .Skip(skipCount) + .Take(maxResultCount) + .OrderBy(sorting.IsNullOrEmpty() ? nameof(CmsUser.UserName) : sorting) + .WhereIf(!filter.IsNullOrEmpty(), x => x.UserName.Contains(filter.ToLower())); + + return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken)); + } + + public async Task GetAuthorsHasBlogPostsCountAsync(string filter, CancellationToken cancellationToken = default) + { + return await AsyncExecuter.CountAsync( + (await CreateAuthorsQueryableAsync()) + .WhereIf(!filter.IsNullOrEmpty(), x => x.UserName.Contains(filter.ToLower()))); + } + + public async Task GetAuthorHasBlogPostAsync(Guid id, CancellationToken cancellationToken = default) + { + return await AsyncExecuter.FirstOrDefaultAsync(await CreateAuthorsQueryableAsync(), x => x.Id == id) + ?? throw new EntityNotFoundException(typeof(CmsUser), id); + } + + private async Task> CreateAuthorsQueryableAsync() { var blogPostQueryable = (await GetQueryableAsync()); var usersQueryable = (await GetDbContextAsync()).Collection().AsQueryable(); - var queryable = blogPostQueryable + return blogPostQueryable .Join( usersQueryable, o => o.AuthorId, @@ -119,7 +144,5 @@ public class MongoBlogPostRepository : MongoDbRepository new { blogPost, user }) .Select(s => s.user) .Distinct(); - - return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs new file mode 100644 index 0000000000..cb930ea37c --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs @@ -0,0 +1,8 @@ +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Public.Blogs; + +public class BlogPostFilteredPagedAndSortedResultRequestDto : PagedAndSortedResultRequestDto +{ + public string Filter { get; set; } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index 02b6d2a5f4..42161f884c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.CmsKit.Users; +using System; namespace Volo.CmsKit.Public.Blogs; @@ -12,6 +13,8 @@ public interface IBlogPostPublicAppService : IApplicationService Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input); Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); - - Task> GetAuthorsHasBlogPostsAsync(); + + Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input); + + Task GetAuthorHasBlogPostAsync(Guid id); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index a9121a5c2b..fc9da1bffb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -1,4 +1,5 @@ using JetBrains.Annotations; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; @@ -15,7 +16,6 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub protected IBlogRepository BlogRepository { get; } protected IBlogPostRepository BlogPostRepository { get; } - public BlogPostPublicAppService( IBlogRepository blogRepository, @@ -46,9 +46,20 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub ObjectMapper.Map, List>(blogPosts)); } - public virtual async Task> GetAuthorsHasBlogPostsAsync() + public virtual async Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input) { - var authors = await BlogPostRepository.GetAuthorsHasBlogPosts(); - return ObjectMapper.Map, List>(authors); + var authors = await BlogPostRepository.GetAuthorsHasBlogPostsAsync(input.SkipCount, input.MaxResultCount, input.Sorting, input.Filter); + var authorDtos = ObjectMapper.Map, List>(authors); + + return new PagedResultDto( + await BlogPostRepository.GetAuthorsHasBlogPostsCountAsync(input.Filter), + authorDtos); + } + + public async Task GetAuthorHasBlogPostAsync(Guid id) + { + var author = await BlogPostRepository.GetAuthorHasBlogPostAsync(id); + + return ObjectMapper.Map(author); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs index 9cc926515d..b1bbf6be07 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs @@ -1,6 +1,5 @@ // This file is automatically generated by ABP framework to use MVC Controllers from CSharp using System; -using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Http.Client; @@ -25,7 +24,7 @@ public partial class BlogPostPublicClientProxy : ClientProxyBase> GetListAsync(string blogSlug, BlogPostGetListInput input) { return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue @@ -35,8 +34,19 @@ public partial class BlogPostPublicClientProxy : ClientProxyBase> GetAuthorsHasBlogPostsAsync() + public virtual async Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input) + { + return await RequestAsync>(nameof(GetAuthorsHasBlogPostsAsync), new ClientProxyRequestTypeValue + { + { typeof(BlogPostFilteredPagedAndSortedResultRequestDto), input } + }); + } + + public virtual async Task GetAuthorHasBlogPostAsync(Guid id) { - return await RequestAsync>(nameof(GetAuthorsHasBlogPostsAsync)); + return await RequestAsync(nameof(GetAuthorHasBlogPostAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.Generated.cs new file mode 100644 index 0000000000..d7354b9e87 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.Generated.cs @@ -0,0 +1,27 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Modeling; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client.ClientProxying; +using Volo.CmsKit.Public.GlobalResources; + +// ReSharper disable once CheckNamespace +namespace Volo.CmsKit.Public.GlobalResources.ClientProxies; + +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(IGlobalResourcePublicAppService), typeof(GlobalResourcePublicClientProxy))] +public partial class GlobalResourcePublicClientProxy : ClientProxyBase, IGlobalResourcePublicAppService +{ + public virtual async Task GetGlobalScriptAsync() + { + return await RequestAsync(nameof(GetGlobalScriptAsync)); + } + + public virtual async Task GetGlobalStyleAsync() + { + return await RequestAsync(nameof(GetGlobalStyleAsync)); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.cs new file mode 100644 index 0000000000..76549aec1e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.cs @@ -0,0 +1,7 @@ +// This file is part of GlobalResourcePublicClientProxy, you can customize it here +// ReSharper disable once CheckNamespace +namespace Volo.CmsKit.Public.GlobalResources.ClientProxies; + +public partial class GlobalResourcePublicClientProxy +{ +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json index 0387176b02..d39e795845 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json @@ -7,6 +7,8 @@ "Volo.CmsKit.Public.Tags.TagPublicController": { "controllerName": "TagPublic", "controllerGroupName": "TagPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Tags.TagPublicController", "interfaces": [ { @@ -76,6 +78,8 @@ "Volo.CmsKit.Public.Reactions.ReactionPublicController": { "controllerName": "ReactionPublic", "controllerGroupName": "ReactionPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Reactions.ReactionPublicController", "interfaces": [ { @@ -299,6 +303,8 @@ "Volo.CmsKit.Public.Ratings.RatingPublicController": { "controllerName": "RatingPublic", "controllerGroupName": "RatingPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Ratings.RatingPublicController", "interfaces": [ { @@ -502,6 +508,8 @@ "Volo.CmsKit.Public.Pages.PagesPublicController": { "controllerName": "PagesPublic", "controllerGroupName": "PagesPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Pages.PagesPublicController", "interfaces": [ { @@ -551,6 +559,8 @@ "Volo.CmsKit.Public.Menus.MenuItemPublicController": { "controllerName": "MenuItemPublic", "controllerGroupName": "MenuItemPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Menus.MenuItemPublicController", "interfaces": [ { @@ -575,9 +585,55 @@ } } }, + "Volo.CmsKit.Public.GlobalResources.GlobalResourcePublicController": { + "controllerName": "GlobalResourcePublic", + "controllerGroupName": "GlobalResourcePublic", + "isRemoteService": true, + "apiVersion": null, + "type": "Volo.CmsKit.Public.GlobalResources.GlobalResourcePublicController", + "interfaces": [ + { + "type": "Volo.CmsKit.Public.GlobalResources.IGlobalResourcePublicAppService" + } + ], + "actions": { + "GetGlobalScriptAsync": { + "uniqueName": "GetGlobalScriptAsync", + "name": "GetGlobalScriptAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/global-resources/script", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.CmsKit.Public.GlobalResources.GlobalResourceDto", + "typeSimple": "Volo.CmsKit.Public.GlobalResources.GlobalResourceDto" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Public.GlobalResources.IGlobalResourcePublicAppService" + }, + "GetGlobalStyleAsync": { + "uniqueName": "GetGlobalStyleAsync", + "name": "GetGlobalStyleAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/global-resources/style", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.CmsKit.Public.GlobalResources.GlobalResourceDto", + "typeSimple": "Volo.CmsKit.Public.GlobalResources.GlobalResourceDto" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Public.GlobalResources.IGlobalResourcePublicAppService" + } + } + }, "Volo.CmsKit.Public.Comments.CommentPublicController": { "controllerName": "CommentPublic", "controllerGroupName": "CommentPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Comments.CommentPublicController", "interfaces": [ { @@ -818,6 +874,8 @@ "Volo.CmsKit.Public.Blogs.BlogPostPublicController": { "controllerName": "BlogPostPublic", "controllerGroupName": "BlogPostPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Blogs.BlogPostPublicController", "interfaces": [ { @@ -899,9 +957,9 @@ }, { "name": "input", - "typeAsString": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto, Volo.Abp.Ddd.Application.Contracts", - "type": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "typeAsString": "Volo.CmsKit.Public.Blogs.BlogPostGetListInput, Volo.CmsKit.Public.Application.Contracts", + "type": "Volo.CmsKit.Public.Blogs.BlogPostGetListInput", + "typeSimple": "Volo.CmsKit.Public.Blogs.BlogPostGetListInput", "isOptional": false, "defaultValue": null } @@ -919,6 +977,30 @@ "bindingSourceId": "Path", "descriptorName": "" }, + { + "nameOnMethod": "input", + "name": "AuthorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { "nameOnMethod": "input", "name": "SkipCount", @@ -942,6 +1024,43 @@ "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" + }, + "GetAuthorsHasBlogPostsAsyncByInput": { + "uniqueName": "GetAuthorsHasBlogPostsAsyncByInput", + "name": "GetAuthorsHasBlogPostsAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/blog-posts/authors", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Public.Blogs.BlogPostFilteredPagedAndSortedResultRequestDto, Volo.CmsKit.Public.Application.Contracts", + "type": "Volo.CmsKit.Public.Blogs.BlogPostFilteredPagedAndSortedResultRequestDto", + "typeSimple": "Volo.CmsKit.Public.Blogs.BlogPostFilteredPagedAndSortedResultRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" }, { "nameOnMethod": "input", @@ -954,11 +1073,72 @@ "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" + }, + "GetAuthorHasBlogPostAsyncById": { + "uniqueName": "GetAuthorHasBlogPostAsyncById", + "name": "GetAuthorHasBlogPostAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/blog-posts/authors/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Users.CmsUserDto", + "typeSimple": "Volo.CmsKit.Users.CmsUserDto" }, "allowAnonymous": null, "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index 8a788f7a34..9f43d65766 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -40,8 +40,15 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub [HttpGet] [Route("authors")] - public virtual Task> GetAuthorsHasBlogPostsAsync() + public Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input) { - return BlogPostPublicAppService.GetAuthorsHasBlogPostsAsync(); + return BlogPostPublicAppService.GetAuthorsHasBlogPostsAsync(input); + } + + [HttpGet] + [Route("authors/{id}")] + public Task GetAuthorHasBlogPostAsync(Guid id) + { + return BlogPostPublicAppService.GetAuthorHasBlogPostAsync(id); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index 4ae3c007c7..32df5fb2fd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml @@ -24,19 +24,19 @@
- - + + @if(Model.SelectedAuthor != null) + { + }
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index c9dc49931d..c7f667382b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -20,16 +20,15 @@ public class IndexModel : CmsKitPublicPageModelBase [BindProperty(SupportsGet = true)] public int CurrentPage { get; set; } = 1; - + [BindProperty(SupportsGet = true)] public Guid? AuthorId { get; set; } public PagedResultDto Blogs { get; private set; } public PagerModel PagerModel => new PagerModel(Blogs.TotalCount, Blogs.Items.Count, CurrentPage, PageSize, Request.Path.ToString()); - - [BindProperty(SupportsGet = true)] - public List Authors { get; set; } + + public CmsUserDto SelectedAuthor { get; set; } protected IBlogPostPublicAppService BlogPostPublicAppService { get; } @@ -48,7 +47,10 @@ public class IndexModel : CmsKitPublicPageModelBase MaxResultCount = PageSize, AuthorId = AuthorId }); - - Authors = await BlogPostPublicAppService.GetAuthorsHasBlogPostsAsync(); + + if (AuthorId != null) + { + SelectedAuthor = await BlogPostPublicAppService.GetAuthorHasBlogPostAsync(AuthorId.Value); + } } } From 511540a2642e355b1a8bf7c3e78062abfc226563 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 28 Mar 2022 09:50:07 +0300 Subject: [PATCH 093/272] Update resources --- .../Volo/CmsKit/Localization/Resources/en.json | 1 + .../Volo/CmsKit/Localization/Resources/tr.json | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 0dd826480d..0e201329ef 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -130,6 +130,7 @@ "SelectAll": "Select All", "Send": "Send", "SendMessage": "Send Message", + "SelectedAuthor": "Author", "ShortDescription": "Short description", "Slug": "Slug", "Source": "Source", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 95ef414c17..3f855f13a9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -129,6 +129,7 @@ "SelectAll": "Hepsini seç", "Send": "Gönder", "SendMessage": "Mesajı Gönder", + "SelectedAuthor": "Yazar", "ShortDescription": "Kısa açıklama", "Slug": "Etiket", "Source": "Kaynak", From 5723fd0a924a65f0acb3c8024845fa73bc6c19c7 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 28 Mar 2022 09:53:45 +0300 Subject: [PATCH 094/272] Update tests --- .../test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs index 4d696e916d..c9cc6472fe 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs @@ -149,7 +149,7 @@ public abstract class BlogPostRepository_Test : CmsKitTestBase Date: Mon, 28 Mar 2022 18:15:07 +0300 Subject: [PATCH 095/272] Update en.json --- .../Commercial/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 8fa96b5ee2..446d165f21 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -503,6 +503,7 @@ "AdditionalNote": "Additional Note", "OnboardingTrainingFaqTitle": "Do you have ABP onboarding training?", "OnboardingTrainingFaqExplanation": "Yes, we have ABP Training Services to help you get your ABP project started fast. You will learn about ABP from an ABP core team member and you will get the skills to begin your ABP project. In the onboarding training, we will explain how to set up your development environment, install the required tools, create a fully functional CRUD page. The training will be live and the Zoom application will be used, and we are open to using other online meeting platforms. The language of the training will be English. You can also ask your questions about ABP during the sessions. A convenient time and date will be planned for both parties. To get more information, contact us at info@abp.io.", - "AddBasket": "Add to Basket" + "AddBasket": "Add to Basket", + "SendTrainingRequest": "Send Training Request" } } From e8a810ba4bd94bd1d4ca447ec4d8645354c75d1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 29 Mar 2022 15:04:20 +0300 Subject: [PATCH 096/272] Check for null for receivedContext.TokenEndpointRequest --- .../DependencyInjection/AbpOpenIdConnectExtensions.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs index 02b292a984..894ba470a8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs @@ -57,8 +57,7 @@ public static class AbpOpenIdConnectExtensions if (receivedContext.Request.Cookies.ContainsKey(tenantKey)) { - receivedContext.TokenEndpointRequest.SetParameter(tenantKey, - receivedContext.Request.Cookies[tenantKey]); + receivedContext.TokenEndpointRequest?.SetParameter(tenantKey, receivedContext.Request.Cookies[tenantKey]); } } } From 45685fb58a92212266a6f286a11f47d811e304a9 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Tue, 29 Mar 2022 16:26:39 +0300 Subject: [PATCH 097/272] add scroll index to blog post page --- .../BlogPostScrollIndexFeature.cs | 17 ++ .../GlobalFeatures/GlobalCmsKitFeatures.cs | 3 + .../CmsKit/Localization/Resources/en.json | 4 +- .../CmsKit/Localization/Resources/tr.json | 4 +- .../Pages/Public/CmsKit/Blogs/BlogPost.cshtml | 167 +++++++++-------- .../Pages/Public/CmsKit/Blogs/blogPost.css | 17 ++ .../Pages/Public/CmsKit/Blogs/blogpost.js | 46 +++++ .../Public/CmsKit/Blogs/bootstrap-toc.css | 60 +++++++ .../Public/CmsKit/Blogs/bootstrap-toc.js | 168 ++++++++++++++++++ 9 files changed, 414 insertions(+), 72 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogPostScrollIndexFeature.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.js diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogPostScrollIndexFeature.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogPostScrollIndexFeature.cs new file mode 100644 index 0000000000..9f03f973e1 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogPostScrollIndexFeature.cs @@ -0,0 +1,17 @@ +using JetBrains.Annotations; +using Volo.Abp.GlobalFeatures; + +namespace Volo.CmsKit.GlobalFeatures; + + +[GlobalFeatureName(Name)] +public class BlogPostScrollIndexFeature : GlobalFeature +{ + public const string Name = "CmsKit.BlogPost.ScrollIndex"; + + internal BlogPostScrollIndexFeature( + [NotNull] GlobalCmsKitFeatures cmsKit + ) : base(cmsKit) + { + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs index 9c07101616..6a7ca3245a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs @@ -26,6 +26,8 @@ public class GlobalCmsKitFeatures : GlobalModuleFeatures public MenuFeature Menu => GetFeature(); public GlobalResourcesFeature GlobalResources => GetFeature(); + + public BlogPostScrollIndexFeature BlogPostScrollIndex => GetFeature(); public GlobalCmsKitFeatures([NotNull] GlobalFeatureManager featureManager) : base(featureManager) @@ -40,5 +42,6 @@ public class GlobalCmsKitFeatures : GlobalModuleFeatures AddFeature(new CmsUserFeature(this)); AddFeature(new MenuFeature(this)); AddFeature(new GlobalResourcesFeature(this)); + AddFeature(new BlogPostScrollIndexFeature(this)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 0dd826480d..2634099fd1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -164,6 +164,8 @@ "GlobalResources": "Global Resources", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Saved successfully" + "SavedSuccessfully": "Saved successfully", + "GoToTop": "Go to top", + "InThisDocument": "In this document" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 95ef414c17..00cc5303d4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -163,6 +163,8 @@ "GlobalResources": "Global Kaynaklar", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Başarıyla kaydedildi" + "SavedSuccessfully": "Başarıyla kaydedildi", + "GoToTop": "Yukarı Git", + "InThisDocument": "Bu belgede" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml index d8c1f428da..90f16c18fd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml @@ -17,91 +17,118 @@ @inject IMarkdownToHtmlRenderer MarkdownRenderer @section styles{ - - - - + + + + + } @section scripts{ - - - - + + + + + + } @{ string dummyImageSource = "https://dummyimage.com/1280x720/a3a3a3/fff.png?text=" + Model.BlogPost.Title; + var isScrollIndexEnabled = GlobalFeatureManager.Instance.IsEnabled(); } - - - - -
-

@Model.BlogPost.Title

-

- @@@Model.BlogPost.Author?.UserName - @Model.BlogPost.CreationTime -

+
+
+ + + + +
+

@Model.BlogPost.Title

+

+ @@@Model.BlogPost.Author?.UserName + @Model.BlogPost.CreationTime +

- @if(!Model.BlogPost.Content.IsNullOrEmpty()) - { - @Html.Raw(await MarkdownRenderer.RenderAsync(Model.BlogPost.Content)) - } + @if (!Model.BlogPost.Content.IsNullOrEmpty()) + { + @Html.Raw(await MarkdownRenderer.RenderAsync(Model.BlogPost.Content)) + } -

- @if (Model.BlogPost.LastModificationTime != null) - { - @L["LastModification"].Value : @Model.BlogPost.LastModificationTime - } -

-
+

+ @if (Model.BlogPost.LastModificationTime != null) + { + @L["LastModification"].Value : @Model.BlogPost.LastModificationTime + } +

+
- @if (GlobalFeatureManager.Instance.IsEnabled()) - { - if (Model.TagsFeature?.IsEnabled == true) - { - @await Component.InvokeAsync(typeof(TagViewComponent), new - { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString() - }) - } - } -
-
+ @if (GlobalFeatureManager.Instance.IsEnabled()) + { + if (Model.TagsFeature?.IsEnabled == true) + { + @await Component.InvokeAsync(typeof(TagViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) + } + } +
+ - - - @if (GlobalFeatureManager.Instance.IsEnabled()) - { - if (Model.ReactionsFeature?.IsEnabled == true) - { - @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new + + + @if (GlobalFeatureManager.Instance.IsEnabled()) { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString() - }) - } - } - - - @if (GlobalFeatureManager.Instance.IsEnabled()) - { - if (Model.RatingsFeature?.IsEnabled == true) - { - @await Component.InvokeAsync(typeof(RatingViewComponent), new + if (Model.ReactionsFeature?.IsEnabled == true) + { + @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) + } + } + + + @if (GlobalFeatureManager.Instance.IsEnabled()) { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString() - }) - } - } - - - - + if (Model.RatingsFeature?.IsEnabled == true) + { + @await Component.InvokeAsync(typeof(RatingViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) + } + } + + + + +
+ @if (isScrollIndexEnabled) + { +
+
+
@L["InThisDocument"]
+ + + +
+
+ } + +
@if (GlobalFeatureManager.Instance.IsEnabled()) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css index 98c4a3100d..d09be3150d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css @@ -20,4 +20,21 @@ span.area-title { } .popover { min-width: 276px; +} + +#scroll-index { + position: sticky; + top: 20px; +} + +#scroll-index .scroll-top-btn.showup{ + display: block; +} + +#scroll-index .scroll-top-btn{ + display: none; + font-size: .85em; + color: #aaa; + text-decoration: none; + padding-left: 18px; } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js new file mode 100644 index 0000000000..603649e2c9 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js @@ -0,0 +1,46 @@ +$(function () { + var $myNav = $('#blog-post-sticky-index'); + var $scrollToTopBtn = $('.scroll-top-btn'); + + window.Toc.helpers.createNavList = function () { + return $(''); + }; + + window.Toc.helpers.createChildNavList = function ($parent) { + var $childList = this.createNavList(); + $parent.append($childList); + return $childList; + }; + + window.Toc.helpers.generateNavEl = function (anchor, text) { + var $a = $(''); + $a.attr('href', '#' + anchor); + $a.text(text); + var $li = $(''); + $li.append($a); + return $li; + }; + + Toc.init($myNav); + + $('body').scrollspy({ + target: $myNav, + }); + + $scrollToTopBtn.click(function () { + $('html, body').animate({scrollTop: 0}, 'fast'); + }); + + // When the user scrolls down 20px from the top of the document, show the button + window.onscroll = function () { + scrollFunction() + }; + + function scrollFunction() { + if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { + $scrollToTopBtn.addClass('showup'); + } else { + $scrollToTopBtn.removeClass('showup'); + } + } +}); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css new file mode 100644 index 0000000000..b15e18ee85 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css @@ -0,0 +1,60 @@ +/*! + * Bootstrap Table of Contents v<%= version %> (http://afeld.github.io/bootstrap-toc/) + * Copyright 2015 Aidan Feldman + * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ + +/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ + +/* All levels of nav */ +nav[data-toggle='toc'] .nav > li > a { + display: block; + padding: 4px 20px; + font-size: 13px; + font-weight: 500; + color: #767676; +} +nav[data-toggle='toc'] .nav > li > a:hover, +nav[data-toggle='toc'] .nav > li > a:focus { + padding-left: 19px; + color: #563d7c; + text-decoration: none; + background-color: transparent; + border-left: 1px solid #563d7c; +} +nav[data-toggle='toc'] .nav-link.active, +nav[data-toggle='toc'] .nav-link.active:hover, +nav[data-toggle='toc'] .nav-link.active:focus { + padding-left: 18px; + font-weight: bold; + color: #563d7c; + background-color: transparent; + border-left: 2px solid #563d7c; +} + +/* Nav: second level (shown on .active) */ +nav[data-toggle='toc'] .nav-link + ul { + display: none; /* Hide by default, but at >768px, show it */ + padding-bottom: 10px; +} + +nav[data-toggle='toc'] .nav .nav > li > a { + padding-top: 1px; + padding-bottom: 1px; + padding-left: 30px; + font-size: 12px; + font-weight: normal; +} +nav[data-toggle='toc'] .nav .nav > li > a:hover, +nav[data-toggle='toc'] .nav .nav > li > a:focus { + padding-left: 29px; +} +nav[data-toggle='toc'] .nav .nav > li > .active, +nav[data-toggle='toc'] .nav .nav > li > .active:hover, +nav[data-toggle='toc'] .nav .nav > li > .active:focus { + padding-left: 28px; + font-weight: 500; +} + +nav[data-toggle='toc'] .nav-link.active + ul { + display: block; +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.js new file mode 100644 index 0000000000..13a4d1f6a5 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.js @@ -0,0 +1,168 @@ +/*! + * Bootstrap Table of Contents v1.0.0 (http://afeld.github.io/bootstrap-toc/) + * Copyright 2015 Aidan Feldman + * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ +(function ($) { + 'use strict'; + + window.Toc = { + helpers: { + // return all matching elements in the set, or their descendants + findOrFilter: function ($el, selector) { + // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ + // http://stackoverflow.com/a/12731439/358804 + var $descendants = $el.find(selector); + return $el + .filter(selector) + .add($descendants) + .filter(':not([data-toc-skip])'); + }, + + generateUniqueIdBase: function (el) { + var text = $(el).text(); + var anchor = text + .trim() + .toLowerCase() + .replace(/[^A-Za-z0-9]+/g, '-'); + return anchor || el.tagName.toLowerCase(); + }, + + generateUniqueId: function (el) { + var anchorBase = this.generateUniqueIdBase(el); + for (var i = 0; ; i++) { + var anchor = anchorBase; + if (i > 0) { + // add suffix + anchor += '-' + i; + } + // check if ID already exists + if (!document.getElementById(anchor)) { + return anchor; + } + } + }, + + generateAnchor: function (el) { + if (el.id) { + return el.id; + } else { + var anchor = this.generateUniqueId(el); + el.id = anchor; + return anchor; + } + }, + + createNavList: function () { + return $(''); + }, + + createChildNavList: function ($parent) { + var $childList = this.createNavList(); + $parent.append($childList); + return $childList; + }, + + generateNavEl: function (anchor, text) { + var $a = $(''); + $a.attr('href', '#' + anchor); + $a.text(text); + var $li = $('
  • '); + $li.append($a); + return $li; + }, + + generateNavItem: function (headingEl) { + var anchor = this.generateAnchor(headingEl); + var $heading = $(headingEl); + var text = $heading.data('toc-text') || $heading.text(); + return this.generateNavEl(anchor, text); + }, + + // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). + getTopLevel: function ($scope) { + for (var i = 1; i <= 6; i++) { + var $headings = this.findOrFilter($scope, 'h' + i); + if ($headings.length > 1) { + return i; + } + } + + return 1; + }, + + // returns the elements for the top level, and the next below it + getHeadings: function ($scope, topLevel) { + var topSelector = 'h' + topLevel; + + var secondaryLevel = topLevel + 1; + var secondarySelector = 'h' + secondaryLevel; + + return this.findOrFilter( + $scope, + topSelector + ',' + secondarySelector + ); + }, + + getNavLevel: function (el) { + return parseInt(el.tagName.charAt(1), 10); + }, + + populateNav: function ($topContext, topLevel, $headings) { + var $context = $topContext; + var $prevNav; + + var helpers = this; + $headings.each(function (i, el) { + var $newNav = helpers.generateNavItem(el); + var navLevel = helpers.getNavLevel(el); + + // determine the proper $context + if (navLevel === topLevel) { + // use top level + $context = $topContext; + } else if ($prevNav && $context === $topContext) { + // create a new level of the tree and switch to it + $context = helpers.createChildNavList($prevNav); + } // else use the current $context + + $context.append($newNav); + + $prevNav = $newNav; + }); + }, + + parseOps: function (arg) { + var opts; + if (arg.jquery) { + opts = { + $nav: arg, + }; + } else { + opts = arg; + } + opts.$scope = opts.$scope || $(document.body); + return opts; + }, + }, + + // accepts a jQuery object, or an options object + init: function (opts) { + opts = this.helpers.parseOps(opts); + + // ensure that the data attribute is in place for styling + opts.$nav.attr('data-toggle', 'toc'); + + var $topContext = this.helpers.createChildNavList(opts.$nav); + var topLevel = this.helpers.getTopLevel(opts.$scope); + var $headings = this.helpers.getHeadings(opts.$scope, topLevel); + this.helpers.populateNav($topContext, topLevel, $headings); + }, + }; + + $(function () { + $('nav[data-toggle="toc"]').each(function (i, el) { + var $nav = $(el); + Toc.init($nav); + }); + }); +})(jQuery); From db9a022d1aad8c48156d5a01a14a1f5906323e2d Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Tue, 29 Mar 2022 23:55:11 +0300 Subject: [PATCH 098/272] import scroll index style and js file if feature enabled --- .../Pages/Public/CmsKit/Blogs/BlogPost.cshtml | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml index 2c29649dd3..d28a57889e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml @@ -16,28 +16,40 @@ @inject IMarkdownToHtmlRenderer MarkdownRenderer + +@{ + string dummyImageSource = "https://dummyimage.com/1280x720/a3a3a3/fff.png?text=" + Model.BlogPost.Title; + var isScrollIndexEnabled = GlobalFeatureManager.Instance.IsEnabled(); +} + @section styles{ + @if (isScrollIndexEnabled) + { + + + + } - } @section scripts{ + @if (isScrollIndexEnabled) + { + + + + } + - } -@{ - string dummyImageSource = "https://dummyimage.com/1280x720/a3a3a3/fff.png?text=" + Model.BlogPost.Title; - var isScrollIndexEnabled = GlobalFeatureManager.Instance.IsEnabled(); -} -
    From 7e0b99201881ba6ddf85ac27199b035e0391fdb6 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 30 Mar 2022 00:12:57 +0300 Subject: [PATCH 099/272] use setting CoverImageMediaId to null and remove cover image in the update request --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 1 - .../Admin/Blogs/BlogPostAdminAppService.cs | 21 ++++++------------- .../BlogPostAdminClientProxy.Generated.cs | 8 ------- .../Admin/Blogs/BlogPostAdminController.cs | 8 ------- .../Pages/CmsKit/BlogPosts/update.js | 8 ++----- 5 files changed, 8 insertions(+), 38 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 23562020d4..14704a26ad 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -13,5 +13,4 @@ public interface IBlogPostAdminAppService CreateBlogPostDto, UpdateBlogPostDto> { - Task RemoveCoverImageAsync(Guid id); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index ba346b752e..3c79e6220b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -69,8 +69,13 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.SetShortDescription(input.ShortDescription); blogPost.SetContent(input.Content); blogPost.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); + + if (blogPost.CoverImageMediaId != null && input.CoverImageMediaId == null) + { + await MediaDescriptorAdminAppService.DeleteAsync(blogPost.CoverImageMediaId.Value); + } blogPost.CoverImageMediaId = input.CoverImageMediaId; - + if (blogPost.Slug != input.Slug) { await BlogPostManager.SetSlugUrlAsync(blogPost, input.Slug); @@ -115,18 +120,4 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { await BlogPostRepository.DeleteAsync(id); } - - [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] - public virtual async Task RemoveCoverImageAsync(Guid id) - { - var blogPost = await BlogPostRepository.GetAsync(id); - if (blogPost?.CoverImageMediaId == null) - { - return; - } - - await MediaDescriptorAdminAppService.DeleteAsync(blogPost.CoverImageMediaId.Value); - - blogPost.CoverImageMediaId = null; - } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 0f201fb469..560ba4e2de 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -55,12 +55,4 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase Date: Wed, 30 Mar 2022 00:18:34 +0300 Subject: [PATCH 100/272] code clean --- .../Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs | 1 - .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 2 +- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 8 -------- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 14704a26ad..314b7a1def 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -1,5 +1,4 @@ using System; -using System.Threading.Tasks; using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Blogs; diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 3c79e6220b..d78571ba21 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -64,7 +64,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe public virtual async Task UpdateAsync(Guid id, UpdateBlogPostDto input) { var blogPost = await BlogPostRepository.GetAsync(id); - + blogPost.SetTitle(input.Title); blogPost.SetShortDescription(input.ShortDescription); blogPost.SetContent(input.Content); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 2cb7d2ab98..0a1424d92a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -391,14 +391,6 @@ }, ajaxParams)); }; - volo.cmsKit.admin.blogs.blogPostAdmin.removeCoverImage = function(id, ajaxParams) { - return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/' + id + '/cover-image', - type: 'DELETE', - dataType: null - }, ajaxParams)); - }; - })(); })(); From 69e2be7ba99d66c151ccfd7a05b42c827aae7994 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 30 Mar 2022 11:30:34 +0800 Subject: [PATCH 101/272] Identity: Enhancements for Blazor UI --- .../Layout/PageHeader.razor | 2 +- .../Components/AbpExtensibleDataGrid.razor | 1 + .../Pages/Identity/RoleManagement.razor.cs | 5 ++++- .../Pages/Identity/UserManagement.razor | 6 ++++++ .../Pages/Identity/UserManagement.razor.cs | 15 +++++++++++++-- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/PageHeader.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/PageHeader.razor index e6959f1d3a..c9c704b471 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/PageHeader.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/PageHeader.razor @@ -7,7 +7,7 @@ @if(Options.Value.RenderPageTitle) { -

    @PageLayout.Title

    +
    @PageLayout.Title
    } diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor index e7ea795eee..c674ec3612 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor @@ -11,6 +11,7 @@ CurrentPage="@CurrentPage" PageSize="@PageSize" Responsive="@Responsive" + Striped Class="@Class"> diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs index f14e5cef90..db5d7939d6 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs @@ -64,7 +64,10 @@ public partial class RoleManagement new EntityAction { Text = L["Delete"], - Visible = (data) => HasDeletePermission, + Visible = (data) => + { + return HasDeletePermission && !data.As().IsStatic + }, Clicked = async (data) => await DeleteEntityAsync(data.As()), ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 2f632422c1..6fe89dd768 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -18,6 +18,12 @@ + + @L["Search"] + + + + @* ************************* DATA GRID ************************* *@ HasDeletePermission, + Visible = (data) => + { + return HasDeletePermission && CurrentUser.GetId() != data.As().Id; + }, Clicked = async (data) => await DeleteEntityAsync(data.As()), ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) } @@ -180,7 +191,7 @@ public partial class UserManagement }, new TableColumn { - Title = L["Email"], + Title = L["EmailAddress"], Data = nameof(IdentityUserDto.Email), }, new TableColumn From c526630a38e067aa9bebaf52f9621fffc24076e7 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 30 Mar 2022 11:41:00 +0800 Subject: [PATCH 102/272] Improved --- .../Pages/Identity/RoleManagement.razor.cs | 5 +---- .../Pages/Identity/UserManagement.razor.cs | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs index db5d7939d6..6a3052bea0 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs @@ -64,10 +64,7 @@ public partial class RoleManagement new EntityAction { Text = L["Delete"], - Visible = (data) => - { - return HasDeletePermission && !data.As().IsStatic - }, + Visible = (data) => HasDeletePermission && !data.As().IsStatic, Clicked = async (data) => await DeleteEntityAsync(data.As()), ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index dd754ed07f..462ce6ec72 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -162,10 +162,7 @@ public partial class UserManagement new EntityAction { Text = L["Delete"], - Visible = (data) => - { - return HasDeletePermission && CurrentUser.GetId() != data.As().Id; - }, + Visible = (data) => HasDeletePermission && CurrentUser.GetId() != data.As().Id, Clicked = async (data) => await DeleteEntityAsync(data.As()), ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) } From b12d8f71c993e34444bcffe8ae6d82be46de489d Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 30 Mar 2022 09:37:16 +0300 Subject: [PATCH 103/272] load blogpost-scroll-index when it's feature is enabled --- .../Pages/Public/CmsKit/Blogs/BlogPost.cshtml | 2 +- .../CmsKit/Blogs/{blogpost.js => blogpost-scroll-index.js} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/{blogpost.js => blogpost-scroll-index.js} (100%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml index d28a57889e..709d96182f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml @@ -40,13 +40,13 @@ { + } - } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost-scroll-index.js similarity index 100% rename from modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost-scroll-index.js From 7aad8e5a25940f06e227de90edd22cd13fe18a9f Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 30 Mar 2022 10:38:04 +0300 Subject: [PATCH 104/272] Make select clearable --- .../Pages/Public/CmsKit/Blogs/Index.cshtml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index 32df5fb2fd..060f0c5c95 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml @@ -28,6 +28,8 @@ + +
    + +
    diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml index 725a9610dd..db0dd8422e 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml @@ -7,6 +7,7 @@ @using Volo.Abp.Localization @using Volo.Abp.ObjectExtending @using Volo.Abp.Data +@using Volo.Abp.Identity @model EditModalModel @inject IHtmlLocalizer L @inject IStringLocalizerFactory StringLocalizerFactory @@ -25,7 +26,16 @@ - +
    + +
    + + +
    + +
    diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml index 1f7f338ba4..48ad716306 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml @@ -19,6 +19,7 @@ @section styles { + } @section scripts { diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.css b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.css new file mode 100644 index 0000000000..acdafe715a --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.css @@ -0,0 +1,7 @@ +/* + By default Microsoft Edge, adds password reveal button inside the password input. + https://docs.microsoft.com/en-us/microsoft-edge/web-platform/password-reveal + */ +::-ms-reveal { + display: none; +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js index 96ee7e5361..fcd3a72f52 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js @@ -2,12 +2,51 @@ var l = abp.localization.getResource('AbpIdentity'); var _identityUserAppService = volo.abp.identity.identityUser; - var _editModal = new abp.ModalManager( - abp.appPath + 'Identity/Users/EditModal' - ); - var _createModal = new abp.ModalManager( - abp.appPath + 'Identity/Users/CreateModal' - ); + + var togglePasswordVisibility = function () { + $("#PasswordVisibilityButton").click(function (e) { + var button = $(this); + var passwordInput = button.parent().find("input"); + if(!passwordInput) { + return; + } + + if(passwordInput.attr("type") === "password") { + passwordInput.attr("type", "text"); + } + else { + passwordInput.attr("type", "password"); + } + + var icon = button.find("i"); + if(icon) { + icon.toggleClass("fa-eye-slash").toggleClass("fa-eye"); + } + }); + } + + abp.modals.createUser = function () { + var initModal = function (publicApi, args) { + togglePasswordVisibility(); + }; + return { initModal: initModal }; + } + + abp.modals.editUser = function () { + var initModal = function (publicApi, args) { + togglePasswordVisibility(); + }; + return { initModal: initModal }; + } + + var _editModal = new abp.ModalManager({ + viewUrl: abp.appPath + 'Identity/Users/EditModal', + modalClass: "editUser" + }); + var _createModal = new abp.ModalManager({ + viewUrl: abp.appPath + 'Identity/Users/CreateModal', + modalClass: "createUser" + }); var _permissionsModal = new abp.ModalManager( abp.appPath + 'AbpPermissionManagement/PermissionManagementModal' ); @@ -44,9 +83,9 @@ }, { text: l('Delete'), - visible: abp.auth.isGranted( - 'AbpIdentity.Users.Delete' - ), + visible: function(data) { + return abp.auth.isGranted('AbpIdentity.Users.Delete') && abp.currentUser.id !== data.id; + }, confirmMessage: function (data) { return l( 'UserDeletionConfirmationMessage', diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs index 1c83245c63..6bee4b3c3d 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AutoMapper; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; using Volo.Abp.Modularity; using Volo.Abp.SettingManagement.Web.Navigation; @@ -14,6 +15,7 @@ namespace Volo.Abp.SettingManagement.Web; [DependsOn( typeof(AbpSettingManagementApplicationContractsModule), + typeof(AbpAutoMapperModule), typeof(AbpAspNetCoreMvcUiThemeSharedModule), typeof(AbpSettingManagementDomainSharedModule) )] @@ -58,5 +60,11 @@ public class AbpSettingManagementWebModule : AbpModule { options.DisableModule(SettingManagementRemoteServiceConsts.ModuleName); }); + + context.Services.AddAutoMapperObjectMapper(); + Configure(options => + { + options.AddProfile(validate: true); + }); } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml index 974e316687..338c13f8a9 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml @@ -1,14 +1,14 @@ @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.SettingManagement.Localization @inject IHtmlLocalizer L -@model Volo.Abp.SettingManagement.EmailSettingsDto +@model Volo.Abp.SettingManagement.UpdateEmailSettingsDto -
    +
    - - + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js index a5b8288d41..c9871bb3d9 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js @@ -6,8 +6,12 @@ $("#EmailSettingsForm").on('submit', function (event) { event.preventDefault(); + + if(!$(this).valid()) { + return; + } + var form = $(this).serializeFormToObject(); - volo.abp.settingManagement.emailSettings.update(form).then(function (result) { $(document).trigger("AbpSettingSaved"); }); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs index bd0e8d924e..f9c24e1369 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs @@ -16,8 +16,8 @@ public class EmailSettingGroupViewComponent : AbpViewComponent public virtual async Task InvokeAsync() { - var model = await EmailSettingsAppService.GetAsync(); - + var emailSettings = await EmailSettingsAppService.GetAsync(); + var model = ObjectMapper.Map(emailSettings); return View("~/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml", model); } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs new file mode 100644 index 0000000000..20ae382454 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs @@ -0,0 +1,11 @@ +using AutoMapper; + +namespace Volo.Abp.SettingManagement.Web; + +public class SettingManagementWebAutoMapperProfile : Profile +{ + public SettingManagementWebAutoMapperProfile() + { + CreateMap(); + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj index c7cbc9c60b..b802865379 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj @@ -15,6 +15,7 @@ + From 2b514b8da898b63b21bc73c7b688f98e555b07e7 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 30 Mar 2022 14:42:35 +0300 Subject: [PATCH 109/272] PermissionManagement: Inform before removing all permissions --- .../Localization/Domain/en.json | 3 ++- .../PermissionManagementModal.cshtml | 2 +- .../permission-management-modal.js | 22 +++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json index ba775f3ab0..98f3a60216 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json @@ -5,6 +5,7 @@ "OnlyProviderPermissons": "Only this provider", "All": "All", "SelectAllInAllTabs": "Grant all permissions", - "SelectAllInThisTab": "Select all" + "SelectAllInThisTab": "Select all", + "RemoveAllPermissionsWarningMessage": "Are you sure you want to remove all permissions?" } } \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml index adc5547693..31639bf136 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml @@ -9,7 +9,7 @@ Layout = null; } - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js index c33106d884..09063b8c26 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js @@ -3,6 +3,8 @@ var abp = abp || {}; abp.modals = abp.modals || {}; abp.modals.PermissionManagement = function () { + var l = abp.localization.getResource("AbpPermissionManagement"); + function checkParents($tab, $checkBox) { var parentName = $checkBox .closest('.custom-checkbox') @@ -255,6 +257,26 @@ var abp = abp || {}; initSelectAllInThisTab(); setSelectAllInAllTabs(); + + var $form = $("#PermissionManagementForm"); + var $submitButton = $form.find("button[type='submit']"); + if($submitButton) { + $submitButton.click(function (e) { + e.preventDefault(); + + if(!$form.find("input:checked").length > 0) { + abp.message.confirm(l("RemoveAllPermissionsWarningMessage")) + .then(function (confirmed) { + if(!confirmed) { + return false; + } + }); + } + + $submitButton.submit(); + }); + } + }; }; })(jQuery); From 4cceac737d28d91a4470cbe06ea822fbedbcf9ed Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 30 Mar 2022 15:29:42 +0300 Subject: [PATCH 110/272] Update permission-management-modal.js --- .../permission-management-modal.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js index 09063b8c26..208047314c 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js @@ -267,13 +267,14 @@ var abp = abp || {}; if(!$form.find("input:checked").length > 0) { abp.message.confirm(l("RemoveAllPermissionsWarningMessage")) .then(function (confirmed) { - if(!confirmed) { - return false; + if(confirmed) { + $form.submit(); } }); } - - $submitButton.submit(); + else { + $form.submit(); + } }); } From d484affc5b46dd7d7f88bc2a2a6af0bf01e08bd7 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Wed, 30 Mar 2022 20:24:42 +0300 Subject: [PATCH 111/272] Add document of date pipes --- docs/en/UI/Angular/DateTime-Format-Pipe.md | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/en/UI/Angular/DateTime-Format-Pipe.md diff --git a/docs/en/UI/Angular/DateTime-Format-Pipe.md b/docs/en/UI/Angular/DateTime-Format-Pipe.md new file mode 100644 index 0000000000..4841ffe665 --- /dev/null +++ b/docs/en/UI/Angular/DateTime-Format-Pipe.md @@ -0,0 +1,29 @@ +# DateTime Format Pipes + +You can format date by Date pipe of angular. + +Example + +```html + {{today | date 'dd/mm/yy'}} +``` + +ShortDate, ShortTime and ShortDateTime format data like angular's data pipe but easier. Also the pipes get format from config service by culture. + +# ShortDate Pipe + +```html + {{today | shortDatePipe }} +``` + +# ShortTime Pipe + +```html + {{today | shortTimePipe }} +``` + +# ShortDateTime Pipe + +```html + {{today | shortDateTimePipe }} +``` From 6f6993471d5fcf125729680b02e2cc252094355e Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 31 Mar 2022 10:05:56 +0800 Subject: [PATCH 112/272] Add `TimeZone` and `Queue` to `IHangfireBackgroundWorker`. Resolve #12095 --- .../Hangfire/HangfireBackgroundWorkerBase.cs | 13 ++++++++++++- .../Hangfire/HangfireBackgroundWorkerManager.cs | 7 ++++--- .../HangfirePeriodicBackgroundWorkerAdapter.cs | 2 +- .../Hangfire/IHangfireBackgroundWorker.cs | 7 ++++++- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs index 466fbe457f..dfeda11df8 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; namespace Volo.Abp.BackgroundWorkers.Hangfire; @@ -7,6 +8,16 @@ public abstract class HangfireBackgroundWorkerBase : BackgroundWorkerBase, IHang public string RecurringJobId { get; set; } public string CronExpression { get; set; } + + public TimeZoneInfo TimeZone { get; set; } + + public string Queue { get; set; } public abstract Task DoWorkAsync(); + + protected HangfireBackgroundWorkerBase() + { + TimeZone = null; + Queue = "default"; + } } diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs index 89d6105967..b2cb275dab 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs @@ -40,12 +40,13 @@ public class HangfireBackgroundWorkerManager : IBackgroundWorkerManager, ISingle var unProxyWorker = ProxyHelper.UnProxy(hangfireBackgroundWorker); if (hangfireBackgroundWorker.RecurringJobId.IsNullOrWhiteSpace()) { - RecurringJob.AddOrUpdate(() => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(), hangfireBackgroundWorker.CronExpression); + RecurringJob.AddOrUpdate(() => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(), + hangfireBackgroundWorker.CronExpression, hangfireBackgroundWorker.TimeZone, hangfireBackgroundWorker.Queue); } else { RecurringJob.AddOrUpdate(hangfireBackgroundWorker.RecurringJobId, () => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(), - hangfireBackgroundWorker.CronExpression); + hangfireBackgroundWorker.CronExpression, hangfireBackgroundWorker.TimeZone, hangfireBackgroundWorker.Queue); } } else @@ -79,7 +80,7 @@ public class HangfireBackgroundWorkerManager : IBackgroundWorkerManager, ISingle var adapterType = typeof(HangfirePeriodicBackgroundWorkerAdapter<>).MakeGenericType(ProxyHelper.GetUnProxiedType(worker)); var workerAdapter = Activator.CreateInstance(adapterType) as IHangfireBackgroundWorker; - RecurringJob.AddOrUpdate(() => workerAdapter.DoWorkAsync(), GetCron(period.Value)); + RecurringJob.AddOrUpdate(() => workerAdapter.DoWorkAsync(), GetCron(period.Value), workerAdapter.TimeZone, workerAdapter.Queue); } return Task.CompletedTask; diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs index 483210ace6..8fe24f10ed 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs @@ -17,7 +17,7 @@ public class HangfirePeriodicBackgroundWorkerAdapter : HangfireBackgrou _doWorkMethod = typeof(TWorker).GetMethod("DoWork", BindingFlags.Instance | BindingFlags.NonPublic); } - public override async Task DoWorkAsync() + public async override Task DoWorkAsync() { var workerContext = new PeriodicBackgroundWorkerContext(ServiceProvider); var worker = ServiceProvider.GetRequiredService(); diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/IHangfireBackgroundWorker.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/IHangfireBackgroundWorker.cs index 0b8c89e95b..7402d8427a 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/IHangfireBackgroundWorker.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/IHangfireBackgroundWorker.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; namespace Volo.Abp.BackgroundWorkers.Hangfire; @@ -7,6 +8,10 @@ public interface IHangfireBackgroundWorker : IBackgroundWorker string RecurringJobId { get; set; } string CronExpression { get; set; } + + TimeZoneInfo TimeZone { get; set; } + + string Queue { get; set; } Task DoWorkAsync(); } From f373329a935994cb071a99ba2f8d5be19485c463 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Thu, 31 Mar 2022 14:22:10 +0300 Subject: [PATCH 113/272] Improve EmailSettingGroupViewComponent --- .../EmailSettingGroup/Default.cshtml | 2 +- .../EmailSettingGroupViewComponent.cs | 38 ++++++++++++++++++- .../SettingManagementWebAutoMapperProfile.cs | 3 +- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml index 338c13f8a9..0a46e4f0fa 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml @@ -1,7 +1,7 @@ @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.SettingManagement.Localization @inject IHtmlLocalizer L -@model Volo.Abp.SettingManagement.UpdateEmailSettingsDto +@model Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup.EmailSettingGroupViewComponent.UpdateEmailSettingsViewModel diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs index f9c24e1369..b60823a621 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs @@ -1,6 +1,8 @@ -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Auditing; namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup; @@ -17,7 +19,39 @@ public class EmailSettingGroupViewComponent : AbpViewComponent public virtual async Task InvokeAsync() { var emailSettings = await EmailSettingsAppService.GetAsync(); - var model = ObjectMapper.Map(emailSettings); + var model = ObjectMapper.Map(emailSettings); return View("~/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml", model); } + + public class UpdateEmailSettingsViewModel + { + [MaxLength(256)] + public string SmtpHost { get; set; } + + [Range(1, 65535)] + public int SmtpPort { get; set; } + + [MaxLength(1024)] + public string SmtpUserName { get; set; } + + [MaxLength(1024)] + [DataType(DataType.Password)] + [DisableAuditing] + public string SmtpPassword { get; set; } + + [MaxLength(1024)] + public string SmtpDomain { get; set; } + + public bool SmtpEnableSsl { get; set; } + + public bool SmtpUseDefaultCredentials { get; set; } + + [MaxLength(1024)] + [Required] + public string DefaultFromAddress { get; set; } + + [MaxLength(1024)] + [Required] + public string DefaultFromDisplayName { get; set; } + } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs index 20ae382454..19e512da56 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup; namespace Volo.Abp.SettingManagement.Web; @@ -6,6 +7,6 @@ public class SettingManagementWebAutoMapperProfile : Profile { public SettingManagementWebAutoMapperProfile() { - CreateMap(); + CreateMap(); } } \ No newline at end of file From 86657e22580542ab704347dfbd1a2e4c8f7ac7b7 Mon Sep 17 00:00:00 2001 From: braim23 <94292623+braim23@users.noreply.github.com> Date: Thu, 31 Mar 2022 15:03:48 +0300 Subject: [PATCH 114/272] Adding the Purchase Order Localization --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 9f8e88f180..18c5524d1f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -381,6 +381,7 @@ "SuccessfullyUpdated": "Successfully updated", "SuccessfullyAdded": "Successfully added", "PurchaseState": "Purchase State", - "ShowBetweenDayCount": "Show Between Days" + "ShowBetweenDayCount": "Show Between Days", + "PurchaseOrder": "Purchase Order" } } \ No newline at end of file From 55d96e41558fc6ecb7b1c95e0fe55eba65582a9c Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 31 Mar 2022 20:26:36 +0800 Subject: [PATCH 115/272] Fix localization problem --- .../AbpSettingManagementDomainSharedModule.cs | 5 +++- .../AbpSettingManagementWebModule.cs | 8 ++++++ .../EmailSettingGroup/Default.cshtml | 26 ++++++++++--------- .../EmailSettingGroupViewComponent.cs | 9 +++++++ 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/AbpSettingManagementDomainSharedModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/AbpSettingManagementDomainSharedModule.cs index 012133e10b..7e19e63a2f 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/AbpSettingManagementDomainSharedModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/AbpSettingManagementDomainSharedModule.cs @@ -3,6 +3,7 @@ using Volo.Abp.Modularity; using Volo.Abp.Localization; using Volo.Abp.SettingManagement.Localization; using Volo.Abp.Validation; +using Volo.Abp.Validation.Localization; using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.SettingManagement; @@ -23,7 +24,9 @@ public class AbpSettingManagementDomainSharedModule : AbpModule { options.Resources .Add("en") - .AddVirtualJson("/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement"); + .AddBaseTypes( + typeof(AbpValidationResource) + ).AddVirtualJson("/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement"); }); } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs index 6bee4b3c3d..61874c0b6b 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs @@ -1,10 +1,12 @@ using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AutoMapper; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; using Volo.Abp.Modularity; +using Volo.Abp.SettingManagement.Localization; using Volo.Abp.SettingManagement.Web.Navigation; using Volo.Abp.SettingManagement.Web.Pages.SettingManagement; using Volo.Abp.SettingManagement.Web.Settings; @@ -23,6 +25,11 @@ public class AbpSettingManagementWebModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { + context.Services.PreConfigure(options => + { + options.AddAssemblyResource(typeof(AbpSettingManagementResource), typeof(AbpSettingManagementWebModule).Assembly); + }); + PreConfigure(mvcBuilder => { mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpSettingManagementWebModule).Assembly); @@ -31,6 +38,7 @@ public class AbpSettingManagementWebModule : AbpModule public override void ConfigureServices(ServiceConfigurationContext context) { + Configure(options => { options.MenuContributors.Add(new SettingManagementMainMenuContributor()); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml index 0a46e4f0fa..e5d20309f6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml @@ -7,22 +7,24 @@
    - - - - - - + + + + + +
    - - - + + +
    -
    +
    - @L["Save"] + + @L["Save"] +
    - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs index b60823a621..83458b28e2 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs @@ -26,32 +26,41 @@ public class EmailSettingGroupViewComponent : AbpViewComponent public class UpdateEmailSettingsViewModel { [MaxLength(256)] + [Display(Name = "SmtpHost")] public string SmtpHost { get; set; } [Range(1, 65535)] + [Display(Name = "SmtpPort")] public int SmtpPort { get; set; } [MaxLength(1024)] + [Display(Name = "SmtpUserName")] public string SmtpUserName { get; set; } [MaxLength(1024)] [DataType(DataType.Password)] [DisableAuditing] + [Display(Name = "SmtpPassword")] public string SmtpPassword { get; set; } [MaxLength(1024)] + [Display(Name = "SmtpDomain")] public string SmtpDomain { get; set; } + [Display(Name = "SmtpEnableSsl")] public bool SmtpEnableSsl { get; set; } + [Display(Name = "SmtpUseDefaultCredentials")] public bool SmtpUseDefaultCredentials { get; set; } [MaxLength(1024)] [Required] + [Display(Name = "DefaultFromAddress")] public string DefaultFromAddress { get; set; } [MaxLength(1024)] [Required] + [Display(Name = "DefaultFromDisplayName")] public string DefaultFromDisplayName { get; set; } } } From 8d24bb661aed4eefc0c07f095772d3a645b5fe16 Mon Sep 17 00:00:00 2001 From: rqx110 Date: Sat, 2 Apr 2022 09:06:34 +0800 Subject: [PATCH 116/272] make show blazor ui message alert extendable --- .../Components/UiMessageAlert.razor.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs index f0c8fa8aff..d913a966b0 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs @@ -94,7 +94,12 @@ public partial class UiMessageAlert : ComponentBase, IDisposable Options = e.Options; Callback = e.Callback; - await InvokeAsync(ModalRef.Show); + await ShowMessageAlert(); + } + + protected virtual Task ShowMessageAlert() + { + return InvokeAsync(ModalRef.Show); } public void Dispose() From 3b25e359a3fdce21cb4e7f0281a15187169f7d05 Mon Sep 17 00:00:00 2001 From: rqx110 Date: Sat, 2 Apr 2022 10:02:41 +0800 Subject: [PATCH 117/272] uses async/await instead of return task --- .../Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs index d913a966b0..c7fe013b3c 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs @@ -97,9 +97,9 @@ public partial class UiMessageAlert : ComponentBase, IDisposable await ShowMessageAlert(); } - protected virtual Task ShowMessageAlert() + protected virtual async Task ShowMessageAlert() { - return InvokeAsync(ModalRef.Show); + await InvokeAsync(ModalRef.Show); } public void Dispose() From f14853785eb0043f9227b13ab0628e333924e5ae Mon Sep 17 00:00:00 2001 From: braim23 <94292623+braim23@users.noreply.github.com> Date: Mon, 4 Apr 2022 12:41:41 +0300 Subject: [PATCH 118/272] Update SolutionModuleAdder.cs --- .../Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 310e613035..e7ab27613e 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -100,7 +100,7 @@ public class SolutionModuleAdder : ITransientDependency Check.NotNull(solutionFile, nameof(solutionFile)); Check.NotNull(moduleName, nameof(moduleName)); - await PublishEventAsync(1, "Retriving module info..."); + await PublishEventAsync(1, "Retrieving module info..."); var module = await GetModuleInfoAsync(moduleName, newTemplate, newProTemplate); From ce45aea0b2fc53462bf26e5e449b3acc675781ed Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 4 Apr 2022 17:45:54 +0800 Subject: [PATCH 119/272] Some enhancements for Blazor UI --- .../Pages/Identity/UserManagement.razor | 35 ++++++++---- .../Pages/Identity/UserManagement.razor.cs | 17 +++++- .../PermissionManagementModal.razor.cs | 9 +++ .../EmailSettingGroupViewComponent.razor | 6 +- .../EmailSettingGroupViewComponent.razor.cs | 56 +++++++++++++++++-- ...ettingManagementBlazorAutoMapperProfile.cs | 4 +- 6 files changed, 108 insertions(+), 19 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 6fe89dd768..5b67c74784 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -89,11 +89,18 @@ @L["DisplayName:Password"] - - - - - + + + + + + + + + + + + @@ -203,11 +210,19 @@ @L["DisplayName:Password"] - - - - - + + + + + + + + + + + + + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index 462ce6ec72..db9a718949 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -39,7 +39,8 @@ public partial class UserManagement protected PageToolbar Toolbar { get; } = new(); private List UserManagementTableColumns => TableColumns.Get(); - + private TextRole _passwordTextRole = TextRole.Password; + public UserManagement() { ObjectMapperContext = typeof(AbpIdentityBlazorModule); @@ -90,6 +91,7 @@ public partial class UserManagement IsAssigned = x.IsDefault }).ToArray(); + ChangePasswordTextRole(TextRole.Password); return base.OpenCreateModalAsync(); } @@ -115,6 +117,7 @@ public partial class UserManagement IsAssigned = userRoleNames.Contains(x.Name) }).ToArray(); + ChangePasswordTextRole(TextRole.Password); await base.OpenEditModalAsync(entity); } catch (Exception ex) @@ -211,6 +214,18 @@ public partial class UserManagement return base.SetToolbarItemsAsync(); } + + protected virtual void ChangePasswordTextRole(TextRole? textRole) + { + if (textRole == null) + { + ChangePasswordTextRole(_passwordTextRole == TextRole.Password ? TextRole.Text: TextRole.Password); + } + else + { + _passwordTextRole = textRole.Value; + } + } } public class AssignedRoleViewModel diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs index 2a908140b5..6683690002 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs @@ -122,6 +122,7 @@ public partial class PermissionManagementModal { try { + var updateDto = new UpdatePermissionsDto { Permissions = _groups @@ -129,6 +130,14 @@ public partial class PermissionManagementModal .Select(p => new UpdatePermissionDto { IsGranted = p.IsGranted, Name = p.Name }) .ToArray() }; + + if (!updateDto.Permissions.Any(x => x.IsGranted)) + { + if (!await Message.Confirm(L["RemoveAllPermissionsWarningMessage"].Value)) + { + return; + } + } await PermissionAppService.UpdateAsync(_providerName, _providerKey, updateDto); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor index 6037231df0..36d5857776 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor @@ -5,12 +5,12 @@ @if (EmailSettings != null) {
    - + - @L["DefaultFromDisplayName"] + @L["DefaultFromDisplayName"] * @@ -20,7 +20,7 @@ - @L["DefaultFromAddress"] + @L["DefaultFromAddress"] * diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs index 9e5638bfd9..1cd8ceeb1b 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs @@ -1,9 +1,11 @@ using System; +using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Blazorise; using Microsoft.AspNetCore.Components; using Volo.Abp.AspNetCore.Components.Messages; using Volo.Abp.AspNetCore.Components.Web.Configuration; +using Volo.Abp.Auditing; using Volo.Abp.SettingManagement.Localization; namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup; @@ -19,9 +21,9 @@ public partial class EmailSettingGroupViewComponent [Inject] protected IUiMessageService UiMessageService { get; set; } - protected EmailSettingsDto EmailSettings; + protected UpdateEmailSettingsViewModel EmailSettings; - protected Validations IdentitySettingValidation; + protected Validations EmailSettingValidation; public EmailSettingGroupViewComponent() { @@ -33,7 +35,7 @@ public partial class EmailSettingGroupViewComponent { try { - EmailSettings = await EmailSettingsAppService.GetAsync(); + EmailSettings = ObjectMapper.Map(await EmailSettingsAppService.GetAsync()); } catch (Exception ex) { @@ -45,7 +47,12 @@ public partial class EmailSettingGroupViewComponent { try { - await EmailSettingsAppService.UpdateAsync(ObjectMapper.Map(EmailSettings)); + if (!await EmailSettingValidation.ValidateAll()) + { + return; + } + + await EmailSettingsAppService.UpdateAsync(ObjectMapper.Map(EmailSettings)); await CurrentApplicationConfigurationCacheResetService.ResetAsync(); @@ -56,4 +63,45 @@ public partial class EmailSettingGroupViewComponent await HandleErrorAsync(ex); } } + + public class UpdateEmailSettingsViewModel + { + [MaxLength(256)] + [Display(Name = "SmtpHost")] + public string SmtpHost { get; set; } + + [Range(1, 65535)] + [Display(Name = "SmtpPort")] + public int SmtpPort { get; set; } + + [MaxLength(1024)] + [Display(Name = "SmtpUserName")] + public string SmtpUserName { get; set; } + + [MaxLength(1024)] + [DataType(DataType.Password)] + [DisableAuditing] + [Display(Name = "SmtpPassword")] + public string SmtpPassword { get; set; } + + [MaxLength(1024)] + [Display(Name = "SmtpDomain")] + public string SmtpDomain { get; set; } + + [Display(Name = "SmtpEnableSsl")] + public bool SmtpEnableSsl { get; set; } + + [Display(Name = "SmtpUseDefaultCredentials")] + public bool SmtpUseDefaultCredentials { get; set; } + + [MaxLength(1024)] + [Required] + [Display(Name = "DefaultFromAddress")] + public string DefaultFromAddress { get; set; } + + [MaxLength(1024)] + [Required] + [Display(Name = "DefaultFromDisplayName")] + public string DefaultFromDisplayName { get; set; } + } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs index d5309e0aff..38279c09d4 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup; namespace Volo.Abp.SettingManagement.Blazor; @@ -6,6 +7,7 @@ public class SettingManagementBlazorAutoMapperProfile : Profile { public SettingManagementBlazorAutoMapperProfile() { - CreateMap(); + CreateMap(); + CreateMap(); } } From e1a1519e0227f5b623193255dcc3a8e77ed2ef9f Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Tue, 5 Apr 2022 04:03:01 +0300 Subject: [PATCH 120/272] add migrate database ps --- templates/app-nolayers/aspnet-core/migrate-database.ps1 | 1 + 1 file changed, 1 insertion(+) create mode 100644 templates/app-nolayers/aspnet-core/migrate-database.ps1 diff --git a/templates/app-nolayers/aspnet-core/migrate-database.ps1 b/templates/app-nolayers/aspnet-core/migrate-database.ps1 new file mode 100644 index 0000000000..3af47fcb21 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/migrate-database.ps1 @@ -0,0 +1 @@ +dotnet run --migrate-database \ No newline at end of file From f56da4506f1cc981cc39810f7fef6b8a68fa0c6f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Apr 2022 11:05:54 +0800 Subject: [PATCH 121/272] Update UserManagement.razor --- .../Pages/Identity/UserManagement.razor | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 5b67c74784..fdd979b2a0 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -19,10 +19,16 @@ - @L["Search"] - - - + + + + + + + + + + @* ************************* DATA GRID ************************* *@ - - - + @@ -213,16 +217,13 @@ - - - - + From f3893e3c2e3c54fd3ad747e589036de5e55bbecc Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Tue, 5 Apr 2022 09:44:21 +0300 Subject: [PATCH 122/272] Update MyProjectNameWebHostModule.cs --- .../MyProjectNameWebHostModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs index 95f2d69043..874e5a9eb5 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs @@ -193,7 +193,7 @@ public class MyProjectNameWebHostModule : AbpModule options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}modules{0}permission-management{0}src{0}Volo.Abp.PermissionManagement.Web", Path.DirectorySeparatorChar))); options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}modules{0}identity{0}src{0}Volo.Abp.Identity.Web", Path.DirectorySeparatorChar))); // - options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Domain", Path.DirectorySeparatorChar))); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Domain.Shared", Path.DirectorySeparatorChar))); options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Application.Contracts", Path.DirectorySeparatorChar))); options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Web", Path.DirectorySeparatorChar))); }); From 49e9491d3b103618757d65e0d32a26904f350047 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 5 Apr 2022 10:51:31 +0300 Subject: [PATCH 123/272] Add BlogFeatureDataSeedContributor --- .../Blogs/BlogFeatureDataSeedContributor.cs | 29 +++++++++++++++++++ .../Volo/CmsKit/Blogs/BlogFeatureManager.cs | 20 +++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs new file mode 100644 index 0000000000..b212e5e21a --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace Volo.CmsKit.Blogs; + +public class BlogFeatureDataSeedContributor : IDataSeedContributor, ITransientDependency +{ + private readonly BlogFeatureManager _blogFeatureManager; + private readonly IBlogRepository _blogRepository; + + public BlogFeatureDataSeedContributor( + BlogFeatureManager blogFeatureManager, + IBlogRepository blogRepository) + { + _blogFeatureManager = blogFeatureManager; + _blogRepository = blogRepository; + } + + public async Task SeedAsync(DataSeedContext context) + { + var blogs = await _blogRepository.GetListAsync(); + + foreach (var blog in blogs) + { + await _blogFeatureManager.SetDefaultsIfNotSetAsync(blog.Id); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs index 77a519daf3..f9dd101ef9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs @@ -44,4 +44,24 @@ public class BlogFeatureManager : DomainService await SetAsync(blogId, feature.FeatureName, isEnabled: true); } } + + public async Task SetIfNotSetAsync(Guid blogId, string featureName, bool isEnabled) + { + var blogFeature = await BlogFeatureRepository.FindAsync(blogId, featureName); + if (blogFeature == null) + { + var newBlogFeature = new BlogFeature(blogId, featureName, isEnabled); + await BlogFeatureRepository.InsertAsync(newBlogFeature); + } + } + + public async Task SetDefaultsIfNotSetAsync(Guid blogId) + { + var defaultFeatures = await DefaultBlogFeatureProvider.GetDefaultFeaturesAsync(blogId); + + foreach (var feature in defaultFeatures) + { + await SetIfNotSetAsync(blogId, feature.FeatureName, isEnabled: true); + } + } } From dad1f8505c8b91121b6ff0382e8fe101bfe97cad Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 5 Apr 2022 14:00:35 +0300 Subject: [PATCH 124/272] Add PWA Support to template --- .../Commands/ProjectCreationCommandBase.cs | 11 +++++ .../Building/Steps/RemoveFileStep.cs | 21 ++++++++ .../Templates/App/AppTemplateBase.cs | 18 +++++++ .../MyCompanyName.MyProjectName.Blazor.csproj | 6 +++ .../wwwroot/manifest.json | 21 ++++++++ .../wwwroot/service-worker.js | 4 ++ .../wwwroot/service-worker.published.js | 48 +++++++++++++++++++ 7 files changed, 129 insertions(+) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index d638a21f87..860147c584 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -48,6 +48,12 @@ public abstract class ProjectCreationCommandBase Logger.LogInformation("Preview: yes"); } + var pwa = commandLineArgs.Options.ContainsKey(Options.ProgressiveWebApp.Short); + if (pwa) + { + Logger.LogInformation("Progressive Web App: yes"); + } + var databaseProvider = GetDatabaseProvider(commandLineArgs); if (databaseProvider != DatabaseProvider.NotSpecified) { @@ -476,5 +482,10 @@ public abstract class ProjectCreationCommandBase { public const string Long = "preview"; } + + public static class ProgressiveWebApp + { + public const string Short = "pwa"; + } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs new file mode 100644 index 0000000000..203a927536 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs @@ -0,0 +1,21 @@ +using System; + +namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps; + +public class RemoveFileStep : ProjectBuildPipelineStep +{ + private readonly string _filePath; + public RemoveFileStep(string filePath) + { + _filePath = filePath; + } + + public override void Execute(ProjectBuildContext context) + { + var fileToRemove = context.Files.Find(x => x.Name.EndsWith(_filePath)); + if (fileToRemove != null) + { + context.Files.Remove(fileToRemove); + } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs index 20b72cdc50..e232629e5a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs @@ -209,6 +209,15 @@ public abstract class AppTemplateBase : TemplateInfo { RemoveCmsKitDependenciesFromPackageJsonFiles(steps); } + + if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.ProgressiveWebApp.Short)) + { + context.Symbols.Add("PWA"); + } + else + { + RemovePwaFiles(steps); + } } protected static void RemoveCmsKitDependenciesFromPackageJsonFiles(List steps) @@ -238,6 +247,15 @@ public abstract class AppTemplateBase : TemplateInfo } } + protected static void RemovePwaFiles(List steps) + { + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png")); + } + protected bool IsCmsKitSupportedForTargetVersion(ProjectBuildContext context) { if (string.IsNullOrWhiteSpace(context.BuildArgs.Version)) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index 593ebf5868..32ab98eba9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -29,4 +29,10 @@ + + + + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json new file mode 100644 index 0000000000..eefb83cb28 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "MyProjectName", + "short_name": "MyCompanyName.MyProjectName", + "start_url": "./", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#03173d", + "prefer_related_applications": false, + "icons": [ + { + "src": "icon-512.png", + "type": "image/png", + "sizes": "512x512" + }, + { + "src": "icon-192.png", + "type": "image/png", + "sizes": "192x192" + } + ] +} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js new file mode 100644 index 0000000000..fe614daee0 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js @@ -0,0 +1,4 @@ +// In development, always fetch from the network and do not enable offline support. +// This is because caching would make development more difficult (changes would not +// be reflected on the first load after each change). +self.addEventListener('fetch', () => { }); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js new file mode 100644 index 0000000000..0d9986fce1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js @@ -0,0 +1,48 @@ +// Caution! Be sure you understand the caveats before publishing an application with +// offline support. See https://aka.ms/blazor-offline-considerations + +self.importScripts('./service-worker-assets.js'); +self.addEventListener('install', event => event.waitUntil(onInstall(event))); +self.addEventListener('activate', event => event.waitUntil(onActivate(event))); +self.addEventListener('fetch', event => event.respondWith(onFetch(event))); + +const cacheNamePrefix = 'offline-cache-'; +const cacheName = `${cacheNamePrefix}${self.assetsManifest.version}`; +const offlineAssetsInclude = [ /\.dll$/, /\.pdb$/, /\.wasm/, /\.html/, /\.js$/, /\.json$/, /\.css$/, /\.woff$/, /\.png$/, /\.jpe?g$/, /\.gif$/, /\.ico$/, /\.blat$/, /\.dat$/ ]; +const offlineAssetsExclude = [ /^service-worker\.js$/ ]; + +async function onInstall(event) { + console.info('Service worker: Install'); + + // Fetch and cache all matching items from the assets manifest + const assetsRequests = self.assetsManifest.assets + .filter(asset => offlineAssetsInclude.some(pattern => pattern.test(asset.url))) + .filter(asset => !offlineAssetsExclude.some(pattern => pattern.test(asset.url))) + .map(asset => new Request(asset.url, { integrity: asset.hash, cache: 'no-cache' })); + await caches.open(cacheName).then(cache => cache.addAll(assetsRequests)); +} + +async function onActivate(event) { + console.info('Service worker: Activate'); + + // Delete unused caches + const cacheKeys = await caches.keys(); + await Promise.all(cacheKeys + .filter(key => key.startsWith(cacheNamePrefix) && key !== cacheName) + .map(key => caches.delete(key))); +} + +async function onFetch(event) { + let cachedResponse = null; + if (event.request.method === 'GET') { + // For all navigation requests, try to serve index.html from cache + // If you need some URLs to be server-rendered, edit the following check to exclude those URLs + const shouldServeIndexHtml = event.request.mode === 'navigate'; + + const request = shouldServeIndexHtml ? 'index.html' : event.request; + const cache = await caches.open(cacheName); + cachedResponse = await cache.match(request); + } + + return cachedResponse || fetch(event.request); +} From f748c9375d55c46738d30ea1bbe0923df4427eb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 5 Apr 2022 14:34:05 +0300 Subject: [PATCH 125/272] Blog post for 5.2 stable release. --- .../2022-04-05 v5_2_Release_Stable/POST.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md diff --git a/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md b/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md new file mode 100644 index 0000000000..3575fb396f --- /dev/null +++ b/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md @@ -0,0 +1,49 @@ +# ABP.IO Platform 5.2 Final Has Been Released! + +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 5.2 versions have been released today. + +## What's New With 5.2? + +Since all the new features are already explained in details with the [5.2 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) for all the features and enhancements. + +## Creating New Solutions + +You can create a new solution with the ABP Framework version 5.2 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started). + +> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for more. + +## How to Upgrade an Existing Solution + +### Install/Update the ABP CLI + +First of all, install the ABP CLI or upgrade to the latest version. + +If you haven't installed yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update an existing installation: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +### ABP UPDATE Command + +[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command: + +```bash +abp update +``` + +Run this command in the root folder of your solution. + +## Migration Guide + +Check [the migration guide](https://docs.abp.io/en/abp/5.2/Migration-Guides/Abp-5_2) for the applications with the version 5.x upgrading to the version 5.2. + +## About the Next Version + +The next feature version will be 5.3. It is planned to release the 5.3 RC (Release Candidate) on May 03 and the final version on May 31, 2022. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). From aa89d0bb1fea74c8b94eda0af4fdbc29866ccc1a Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Tue, 5 Apr 2022 16:25:32 +0300 Subject: [PATCH 126/272] Add missing assets to index.html for blazor pwa support --- .../Building/Steps/TemplateCodeDeleteStep.cs | 6 +++++- .../MyCompanyName.MyProjectName.Blazor.csproj | 3 +++ .../wwwroot/icon-192.png | Bin 0 -> 2626 bytes .../wwwroot/icon-512.png | Bin 0 -> 6311 bytes .../wwwroot/index.html | 10 ++++++++++ 5 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs index 69dada9a8e..39186e900c 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs @@ -8,7 +8,11 @@ public class TemplateCodeDeleteStep : ProjectBuildPipelineStep { foreach (var file in context.Files) { - if (file.Name.EndsWith(".cs") || file.Name.EndsWith(".csproj") || file.Name.EndsWith(".cshtml") || file.Name.EndsWith(".json")) + if (file.Name.EndsWith(".cs") || + file.Name.EndsWith(".csproj") || + file.Name.EndsWith(".cshtml") || + file.Name.EndsWith(".json") || + file.Name.EndsWith(".html")) { file.RemoveTemplateCode(context.Symbols); file.RemoveTemplateCodeMarkers(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index 32ab98eba9..93f45f455d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -5,6 +5,9 @@ net6.0 true + + service-worker-assets.js + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..166f56da7612ea74df6a297154c8d281a4f28a14 GIT binary patch literal 2626 zcmV-I3cdA-P)v0A9xRwxP|bki~~&uFk>U z#P+PQh zyZ;-jwXKqnKbb6)@RaxQz@vm={%t~VbaZrdbaZrdbaeEeXj>~BG?&`J0XrqR#sSlO zg~N5iUk*15JibvlR1f^^1czzNKWvoJtc!Sj*G37QXbZ8LeD{Fzxgdv#Q{x}ytfZ5q z+^k#NaEp>zX_8~aSaZ`O%B9C&YLHb(mNtgGD&Kezd5S@&C=n~Uy1NWHM`t07VQP^MopUXki{2^#ryd94>UJMYW|(#4qV`kb7eD)Q=~NN zaVIRi@|TJ!Rni8J=5DOutQ#bEyMVr8*;HU|)MEKmVC+IOiDi9y)vz=rdtAUHW$yjt zrj3B7v(>exU=IrzC<+?AE=2vI;%fafM}#ShGDZx=0Nus5QHKdyb9pw&4>4XCpa-o?P(Gnco1CGX|U> z$f+_tA3+V~<{MU^A%eP!8R*-sD9y<>Jc7A(;aC5hVbs;kX9&Sa$JMG!W_BLFQa*hM zri__C@0i0U1X#?)Y=)>JpvTnY6^s;fu#I}K9u>OldV}m!Ch`d1Vs@v9 zb}w(!TvOmSzmMBa9gYvD4xocL2r0ds6%Hs>Z& z#7#o9PGHDmfG%JQq`O5~dt|MAQN@2wyJw_@``7Giyy(yyk(m8U*kk5$X1^;3$a3}N^Lp6hE5!#8l z#~NYHmKAs6IAe&A;bvM8OochRmXN>`D`{N$%#dZCRxp4-dJ?*3P}}T`tYa3?zz5BA zTu7uE#GsDpZ$~j9q=Zq!LYjLbZPXFILZK4?S)C-zE1(dC2d<7nO4-nSCbV#9E|E1MM|V<9>i4h?WX*r*ul1 z5#k6;po8z=fdMiVVz*h+iaTlz#WOYmU^SX5#97H~B32s-#4wk<1NTN#g?LrYieCu> zF7pbOLR;q2D#Q`^t%QcY06*X-jM+ei7%ZuanUTH#9Y%FBi*Z#22({_}3^=BboIsbg zR0#jJ>9QR8SnmtSS6x($?$}6$x+q)697#m${Z@G6Ujf=6iO^S}7P`q8DkH!IHd4lB zDzwxt3BHsPAcXFFY^Fj}(073>NL_$A%v2sUW(CRutd%{G`5ow?L`XYSO*Qu?x+Gzv zBtR}Y6`XF4xX7)Z04D+fH;TMapdQFFameUuHL34NN)r@aF4RO%x&NApeWGtr#mG~M z6sEIZS;Uj1HB1*0hh=O@0q1=Ia@L>-tETu-3n(op+97E z#&~2xggrl(LA|giII;RwBlX2^Q`B{_t}gxNL;iB11gEPC>v` zb4SJ;;BFOB!{chn>?cCeGDKuqI0+!skyWTn*k!WiPNBf=8rn;@y%( znhq%8fj2eAe?`A5mP;TE&iLEmQ^xV%-kmC-8mWao&EUK_^=GW-Y3z ksi~={si~={skwfB0gq6itke#r1ONa407*qoM6N<$g11Kq@c;k- literal 0 HcmV?d00001 diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..c2dd4842dc93df73c322218ee03eca142a19a338 GIT binary patch literal 6311 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 literal 0 HcmV?d00001 diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html index cea9eeca0d..4a86d7bdc6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html @@ -12,6 +12,12 @@ + + + + + + @@ -25,5 +31,9 @@ + + + + From 9323fa4db07dbc56d08e11ab0b04ced53c8a4d5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 5 Apr 2022 21:40:48 +0300 Subject: [PATCH 127/272] Update POST.md --- docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md b/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md index 3575fb396f..ed83f36e19 100644 --- a/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md +++ b/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md @@ -47,3 +47,5 @@ Check [the migration guide](https://docs.abp.io/en/abp/5.2/Migration-Guides/Abp- ## About the Next Version The next feature version will be 5.3. It is planned to release the 5.3 RC (Release Candidate) on May 03 and the final version on May 31, 2022. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). + +Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problem with this version. From c1b5956431557f60b2b004e4ddfda88e68f8b3b1 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 6 Apr 2022 10:43:28 +0800 Subject: [PATCH 128/272] Upgrade AutoMapper to v11 --- framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj | 4 ++-- .../Volo/Abp/AutoMapper/AbpAutoMapperModule.cs | 3 ++- .../Volo.Abp.Account.Application.csproj | 2 +- .../Volo.Abp.BackgroundJobs.Domain.csproj | 2 +- .../Volo.Abp.BackgroundJobs.MongoDB.csproj | 2 +- .../Volo.BloggingTestApp.MongoDB.csproj | 2 +- .../Volo.Blogging.Admin.Application.csproj | 2 +- .../Volo.Blogging.Application.csproj | 2 +- .../src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj | 2 +- .../src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj | 2 +- .../Volo.CmsKit.Admin.Application.csproj | 2 +- .../Volo.CmsKit.Application/Volo.CmsKit.Application.csproj | 2 +- .../Volo.CmsKit.Common.Application.csproj | 2 +- .../Volo.CmsKit.Public.Application.csproj | 2 +- .../Volo.Docs.Admin.Application.csproj | 2 +- .../src/Volo.Docs.Application/Volo.Docs.Application.csproj | 2 +- modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj | 2 +- modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj | 2 +- .../Volo.Abp.FeatureManagement.Application.csproj | 2 +- .../Volo.Abp.Identity.Application.csproj | 2 +- .../Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj | 2 +- .../Volo.Abp.Identity.MongoDB.csproj | 2 +- .../Volo.Abp.PermissionManagement.Application.csproj | 2 +- .../Volo.Abp.SettingManagement.Application.csproj | 2 +- .../Volo.Abp.TenantManagement.Application.csproj | 2 +- .../Volo.Abp.TenantManagement.Domain.csproj | 2 +- .../Volo.Abp.TenantManagement.MongoDB.csproj | 2 +- .../MyCompanyName.MyProjectName.Application.csproj | 2 +- 28 files changed, 30 insertions(+), 29 deletions(-) diff --git a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj index 9f028d31ee..32f9da017c 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj +++ b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Abp.AutoMapper Volo.Abp.AutoMapper $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs index 6ed44a6300..18fef842da 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs @@ -1,5 +1,6 @@ using System; using AutoMapper; +using AutoMapper.Internal; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.Auditing; @@ -49,7 +50,7 @@ public class AbpAutoMapperModule : AbpModule { foreach (var profileType in options.ValidatingProfiles) { - config.AssertConfigurationIsValid(((Profile)Activator.CreateInstance(profileType)).ProfileName); + config.Internal().AssertConfigurationIsValid(((Profile)Activator.CreateInstance(profileType)).ProfileName); } } diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj index 3879cf9569..32b27998cc 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj +++ b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Abp.Account.Application Volo.Abp.Account.Application true diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj index 7eb9015b73..b46209de47 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj index 56c1391ab9..7d29486644 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj index a846bb0ca6..e707190be5 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj @@ -3,7 +3,7 @@ - netstandard2.0 + netstandard2.1 diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj index 456777e60a..6df6b27bb7 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Blogging.Admin.Application Volo.Blogging.Admin.Application diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj index 504d32836d..99c491231b 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj +++ b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Blogging.Application Volo.Blogging.Application diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj index c6c096105b..905494aa41 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj +++ b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Blogging.Domain Volo.Blogging.Domain diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj index 5019b843f2..83d8759d14 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Blogging.MongoDB Volo.Blogging.MongoDB diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj index bf1ff4f610..684446b1f0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj index fa1557674e..51282692af 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj index 1d7baff506..145c7adac6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj index 702523e3c6..0e192cec7a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj b/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj index e3d556c9e0..72f94bdd47 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Docs.Admin.Application Volo.Docs.Admin.Application diff --git a/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj b/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj index 788edd430d..b00754b104 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj +++ b/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Docs.Application Volo.Docs.Application diff --git a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj index b68893b40b..29020e50bc 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj +++ b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Docs.Domain Volo.Docs.Domain true diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj index 9a5cd19550..25994142c5 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Docs.MongoDB Volo.Docs.MongoDB diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj index b2f186ce71..4ea705d8ef 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj b/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj index fc01ba4400..4698a381fa 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Abp.Identity.Application Volo.Abp.Identity.Application $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj index e951457688..5e20e76f3f 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Abp.Identity.Domain Volo.Abp.Identity.Domain $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj index 762582ef67..96e949d6d5 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Abp.Identity.MongoDB Volo.Abp.Identity.MongoDB $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj index d81f87d28c..080432db39 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Abp.PermissionManagement.Application Volo.Abp.PermissionManagement.Application $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj index 0ea73276ff..8061d285e7 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj index 3c9da24d7e..25e39ab17c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Abp.TenantManagement.Application Volo.Abp.TenantManagement.Application $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj index 5de64b7a1d..f461433d14 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Abp.TenantManagement.Domain Volo.Abp.TenantManagement.Domain $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj index dd8726dccb..d10686b721 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Abp.TenantManagement.MongoDB Volo.Abp.TenantManagement.MongoDB $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj index c24b0db2a5..f97a38e9bf 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj @@ -3,7 +3,7 @@ - netstandard2.0 + net6.0 MyCompanyName.MyProjectName From ab1e9ee166c77bc75db3454efcd09d0b8289f663 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 6 Apr 2022 11:25:41 +0300 Subject: [PATCH 129/272] Grammatical fixes on CLI.md --- docs/en/CLI.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index d381290508..6d5ed901c0 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -18,13 +18,13 @@ dotnet tool update -g Volo.Abp.Cli ## Global Options -While each command may have a set of options, there are some global options those can be used with any command; +While each command may have a set of options, there are some global options that can be used with any command; * `--skip-cli-version-check`: Skips to check the latest version of the ABP CLI. If you don't specify, it will check the latest version and shows a warning message if there is a newer version of the ABP CLI. ## Commands -Here, the list of all available commands before explaining their details: +Here, is the list of all available commands before explaining their details: * **`help`**: Shows help on the usage of the ABP CLI. * **`new`**: Generates a new solution based on the ABP [startup templates](Startup-Templates/Index.md). From 659d2da2daf11d32622931f1b9d73eb7785419f4 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 6 Apr 2022 11:26:16 +0300 Subject: [PATCH 130/272] Add `--pwa` option description to CLI.md --- docs/en/CLI.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 6d5ed901c0..72fe0cf221 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -115,6 +115,7 @@ For more samples, go to [ABP CLI Create Solution Samples](CLI-New-Command-Sample * `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers: * `ef`: Entity Framework Core. * `mongodb`: MongoDB. + * `--pwa`: Specifies to Configure Angular or Blazor WebAssembly project as Progressive Web Application. * `--output-folder` or `-o`: Specifies the output folder. Default value is the current directory. * `--version` or `-v`: Specifies the ABP & template version. It can be a [release tag](https://github.com/abpframework/abp/releases) or a [branch name](https://github.com/abpframework/abp/branches). Uses the latest release if not specified. Most of the times, you will want to use the latest version. * `--preview`: Use latest preview version. From f2de6d56b99ef1ddb1566a25dad12fb3c6272795 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 6 Apr 2022 11:31:53 +0300 Subject: [PATCH 131/272] Create community article about Concurrency Check in ABP --- .../POST.md | 552 ++++++++++++++++++ .../concurrency-mismatch.gif | Bin 0 -> 1237571 bytes .../optimistic-concurrency.png | Bin 0 -> 21478 bytes 3 files changed, 552 insertions(+) create mode 100644 docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md create mode 100644 docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif create mode 100644 docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md new file mode 100644 index 0000000000..4a594669ec --- /dev/null +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -0,0 +1,552 @@ +# Concurrency Check in ABP Based Applications + +In this article, we'll create a basic application to demonstrate how "Concurrency Check/Control" can be done in an ABP based application. + +## Creating the Solution + +For this article, we can create a simple BookStore application and perform CRUD operations. + +> To keep the article simple and shor, we'll only add **Book** entity and ignore the **Author** part. + +We can create a new startup template with EF Core as a database provider and MVC for the UI Framework. + +> If you already have a project, you don't need to create a new startup template, you can directly implement the following steps to your project. So you can skip this section. + +We can create a new startup template by using the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI). + +```bash +abp new Acme.BookStore -t app -csf +``` + +After running the above command, our project boilerplate will be downloaded. Then we can open the solution and start to the development. + +## Starting the Development + +Let's start with defining our entities. + +### Creating Entitites + +Create a `Book.cs` (/Books/Book.cs) class in the `.Domain` layer: + +```csharp +public class Book : AuditedAggregateRoot +{ + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } +} +``` + +* To enable **Concurrency Check** for our entities, our entities should implement the `IHasConcurrencyStamp` interface, directly or indirectly. + +* [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes we don't need to manually implement the `IHasConcurrencyStamp` interface. + +* And we've derieved the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class is already implement the `IHasConcurrencyStamp` interface. + +> You can read more details from the [Concurreny Check](https://docs.abp.io/en/abp/5.2/Concurrency-Check) documentation. + +Then, create a `BookType` (/Books/BookType.cs) enum in the `.Domain.Shared` layer: + +```csharp +public enum BookType +{ + Undefined, + Adventure, + Biography, + Dystopia, + Fantastic, + Horror, + Science, + ScienceFiction, + Poetry +} +``` + +### Database Integration + +Open the `BookStoreDbContext` (/EntityFrameworkCore/BookStoreDbContext.cs) class in the `*.EntityFrameworkCore` project and add the following `DbSet` statement: + +```csharp +namespace Acme.BookStore.EntityFrameworkCore; + +[ReplaceDbContext(typeof(IIdentityDbContext))] +[ReplaceDbContext(typeof(ITenantManagementDbContext))] +[ConnectionStringName("Default")] +public class BookStoreDbContext : + AbpDbContext, + IIdentityDbContext, + ITenantManagementDbContext +{ + //Entities from the modules + + public DbSet Books { get; set; } //add this line +} +``` + +Then we can navigate to the `OnModelCreating` method in the same class and configure our tables/entities: + +```csharp +protected override void OnModelCreating(ModelBuilder builder) +{ + base.OnModelCreating(builder); + + /* Include modules to your migration db context */ + + builder.ConfigurePermissionManagement(); + ... + + //* Configure your own tables/entities inside here */ + + builder.Entity(b => + { + b.ToTable(BookStoreConsts.DbTablePrefix + "Books", + BookStoreConsts.DbSchema); + b.ConfigureByConvention(); //auto configure for the base class props + b.Property(x => x.Name).IsRequired().HasMaxLength(128); + }); +} +``` + +After the mapping configurations, we can create a new migration and apply changes to the database. + +To do this, open your command line terminal in the directory of the `EntityFrameworkCore` project and run the below command: + +```bash +dotnet ef migrations add Added_Books +``` + +After this command a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the lastly created migration. + +### Defining DTOs and Application Service Interfaces + +We can start to define the use cases of the application. + +Create the DTO classes (under **Books** folder) in the `Application.Contracts` project: + +* **BookDto.cs** + +```csharp +public class BookDto : AuditedEntityDto, IHasConcurrencyStamp +{ + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } + + public string ConcurrencyStamp { get; set; } +} +``` + +* `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for **BookDto** class we need to implement the `IHasConcurrencyStamp`. + +* This is important, because we need to return books with their **ConcurrencyStamp** value. + +* **CreateBookDto.cs** + +```csharp +public class CreateBookDto +{ + [Required] + [StringLength(128)] + public string Name { get; set; } + + [Required] + public BookType Type { get; set; } = BookType.Undefined; + + [Required] + [DataType(DataType.Date)] + public DateTime PublishDate { get; set; } = DateTime.Now; + + [Required] + public float Price { get; set; } +} +``` + +* **UpdateBookDto.cs** + +```csharp +public class UpdateBookDto : IHasConcurrencyStamp +{ + [Required] + [StringLength(128)] + public string Name { get; set; } + + [Required] + public BookType Type { get; set; } = BookType.Undefined; + + [Required] + [DataType(DataType.Date)] + public DateTime PublishDate { get; set; } = DateTime.Now; + + [Required] + public float Price { get; set; } + + public string ConcurrencyStamp { get; set; } +} +``` + +* Here, we've also implemented the `IHasConcurrencyStamp` interface for the **UpdateBookDto** class. + +* We will use this value while updating an existing book. ABP Framework will compare the current book's **ConcurrencyStamp** value with the provided one, if values are matched, this means everything is as it is supposed to be and will update the record. + +* If values are mismatched, then it means record that we're trying to update is already updated by an other user and we need to get the latest changes to be able to make changes on it. + +* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it behalf of use and shows a user-friendly error message as in the image below. + +![](./optimistic-concurrency.png) + +Create a new `IBookAppService` (/Books/IBookAppService.cs) interface in the `Application.Contracts` project: + +```csharp +public interface IBookAppService : + ICrudAppService +{ +} +``` +* We've implemented the `ICrudAppService` here, because we just need to perform CRUD operations and this interface help us to define common CRUD operation methods. + +### Application Service Implementations + +Create a `BookAppService` (/Books/BookAppService.cs) class inside the `*.Application` project and implement the application service methods, as shown below: + +```csharp +public class BookAppService : + CrudAppService, + IBookAppService +{ + public BookAppService(IRepository repository) + : base(repository) + { + } + + public override async Task UpdateAsync(Guid id, UpdateBookDto input) + { + var book = await Repository.GetAsync(id); + + book.Name = input.Name; + book.Price = input.Price; + book.Type = input.Type; + book.PublishDate = input.PublishDate; + + book.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); + + var updatedBook = await Repository.UpdateAsync(book); + return ObjectMapper.Map(updatedBook); + } +} +``` + +* He've used the `CrudAppService` base class. This class implements the all common CRUD operations and if we want to change a method, we can simply override the method and change it by our needs. + +> Normally, you don't need to override the `UpdateAsync` method to do **Concurrency Check**. I wanted to override this method to show what we need to do for **Concurrency Check**. + +* We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating. We've used the `SetConcurrencyStampIfNotNull` extension method to set the **ConcurrencyStamp** value to our entity and update the record. + +* In that point, if the given record already updated by any other user, **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown and thanks to **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overrided. + +* And if the values are matched, the record will be updated successfully. + +After implementing the application service methods, we can do the related mapping configurations, so open the `BookStoreApplicationAutoMapperProfile.cs` and update the content as below: + +```csharp +public class BookStoreApplicationAutoMapperProfile : Profile +{ + public BookStoreApplicationAutoMapperProfile() + { + CreateMap(); + CreateMap(); + } +} +``` + +### User Interface + +So far, we've applied the all neccessary steps for the **Concurrency Check** system, let's see it in the action. + +Create a razor page in the `.Web` layer named `Index` (**/Pages/Books/Index.cshtml**), open this file and replace the content with the following code block: + +```html +@page +@using Acme.BookStore.Localization +@using Microsoft.Extensions.Localization +@model Acme.BookStore.Web.Pages.Books.Index + +@section scripts +{ + +} + + + + + + Books + + + + + + + + + + +``` + +* We've defined a table and "New Book" button inside a card element here, we'll fill the table with our book records in the next step by using the **Datatables** library. + +Create a `Index.js` (**/Pages/Books/Index.js**) file and add the following code block: + +```js +$(function () { + var l = abp.localization.getResource('BookStore'); + var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); + var editModal = new abp.ModalManager(abp.appPath + 'Books/EditModal'); + + var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + scrollX: true, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + action: function (data) { + editModal.open({ id: data.record.id }); + } + } + ] + } + }, + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), + data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + }) + ); + + createModal.onResult(function () { + dataTable.ajax.reload(); + }); + + editModal.onResult(function () { + dataTable.ajax.reload(); + }); + + $('#NewBookButton').click(function (e) { + e.preventDefault(); + createModal.open(); + }); +}); +``` + +* We've used the [Datatables](https://datatables.net/) to list our books. + +* Also defined **create** and **update** modals by using [ABP Modal Manager](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Modals#modalmanager-reference), but we didn't create them yet, so let's create the modals. + +First, create **CreateModal** razor page and update the **CreateModal.cshtml** and **CreateModal.cshtml.cs** files as below: + +* **CreateModal.cshtml** + +```html +@page +@using Acme.BookStore.Web.Pages.Books +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@model CreateModalModel +@{ + Layout = null; +} + + + + + + + + + +``` + +* We've used `abp-dynamic-form` tag-helper and pass it a `Book` model, this tag helper will simply create form contents (inputs, select boxes etc.) behalf of us. + +* **CreateModal.cshtml.cs** + +```csharp +using System.Threading.Tasks; +using Acme.BookStore.Books; +using Microsoft.AspNetCore.Mvc; + +namespace Acme.BookStore.Web.Pages.Books; + +public class CreateModalModel : BookStorePageModel +{ + [BindProperty] + public CreateBookDto Book { get; set; } + + private readonly IBookAppService _bookAppService; + + public CreateModalModel(IBookAppService bookAppService) + { + _bookAppService = bookAppService; + } + + public void OnGet() + { + Book = new CreateBookDto(); + } + + public async Task OnPostAsync() + { + await _bookAppService.CreateAsync(Book); + return NoContent(); + } +} +``` + +* In this file, we simply define **CreateBookDto** as bind property and we'll use this classes' properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of this form elements one by one, it will generate behalf of us. + +We can create **EditModal** razor page and update the **EditModal.cshtml** and **EditModal.cshtml.cs** files as below: + +* **EditModal.cshtml** + +```html +@page +@using Acme.BookStore.Web.Pages.Books +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@model EditModalModel +@{ + Layout = null; +} + + + + + + + + + + + + + + +``` + +* Here, we didn't use the `abp-dynamic-form` tag-helper and add all neccessary form elements to our form one by one. + +* As you may notice, we've set input type as **hidden** for the **ConcurrencyStamp** input, because end-user should not see this value. + +> Instead of doing it like that, we could create a view model class and use the `[HiddenInput]` data attribute for the **ConcurrencyStamp** property and use the `abp-dynamic-form` tag-helper. But to simplify the article I didn't want to do that, if you want you can create a view model and define the neccessary data attributes for properties. + +* **EditModal.cshtml.cs** + +```csharp +public class EditModalModel : BookStorePageModel +{ + [HiddenInput] + [BindProperty(SupportsGet = true)] + public Guid Id { get; set; } + + [BindProperty] + public UpdateBookDto Book { get; set; } + + private readonly IBookAppService _bookAppService; + + public EditModalModel(IBookAppService bookAppService) + { + _bookAppService = bookAppService; + } + + public async Task OnGetAsync() + { + var bookDto = await _bookAppService.GetAsync(Id); + Book = ObjectMapper.Map(bookDto); + } + + public async Task OnPostAsync() + { + await _bookAppService.UpdateAsync(Id, Book); + return NoContent(); + } +} +``` + +Lastly, we can define the neccessary mapping configurations and run the application to see results. + +Open the `BookStoreWebAutoMapperProfile.cs` and update the content as below: + +```csharp +public class BookStoreWebAutoMapperProfile : Profile +{ + public BookStoreWebAutoMapperProfile() + { + CreateMap(); + } +} +``` + +Then we can run the application, navigates to **/Books** endpoint and see the result. + +![](concurrency-mismatch.gif) + +* In the image above, we can see that multiple users open the edit model to change a record and try to update the relevant record independently of each other. + +* After the first user updated the record, the second user tries to update the same record without getting the last state of the record. And therefore `AbpDbConcurrencyException` is thrown because **ConcurrencyStamp** values are different from each other. + +* The second user should close and re-open the model to get the last state of the record and then he/she can make changes to the current record. + + +Thanks for reading the article. \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif new file mode 100644 index 0000000000000000000000000000000000000000..922bb5b7cac20d196fd54a3a01dc69887d503ac6 GIT binary patch literal 1237571 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

    3@ueQ4j36av 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 z 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 P8GdQVTMf|(?Pc5M%vj?y1?ZnrWQAd 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�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%0DAj}33LXcvyq>oO4 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�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≠W!8ZlL(m>A!zJ)0T;f~6g6eT)_#qj&JjI^f|Z>a z*Pa%=Weh8B_{{H z6Ypfp29Hl}KSgw9?*jJA48=^29haL}ndFK|Bo^)>Swn`FkaKaPFm)8VOmq~mf8psA zs(b3&ac&j%^TuHmDt6E2i_h{spGBrW17cBD>e9lGxFT=3V&BHC&wAgNmFE0Keqh5Q zvte`$gn)wGE{8Snr~A*;nw^;GVt?+ph6SL$^i|A^%8m*q|4vS?z@xb$=Bdao43y0O z@?8|cFot}L8RNZ}5+=-k?;EY9%>J01yD>N`bawG5c24;$>Y|+VD;%lFkB6aC;#M0>XrO#*Q zkawkLy-)>j<_N0aDssLxNFSYbb|zm9^g(Iiw2M&t{N~FW*qSh*@%Hg z0uaf=@K9?Q>=}|Q2X)Sd(6V+Slq!cl#H*|!H zd>A`I!)P-H;7I{uQ5vwf);kxo)}=v-&W0R9P9-kDsot;|Z!td>gY-D9 zbKbqZl#7FNM{UUisla@Xscw%b2-a7a*K6UeYG3f-Bupz+|y6V0ta!uy)lV0+TNzO{|xti$h`F3;SKGe(%!LfhGdQ31bWS>JLzy0 z{GiGDd>>MSEWlI{H(cL8KlKDanFhKHK?ASRWydSqy7u4slL0A;R*zb@{0rD{Ih~Ht z@3!8CuD^SXb!7tXnq}m?G9iQ{YJ&2`#1*=>x8&CIdeh~PLy}tBJ5M9!ZjWhjE+OKO zSdY#P^m%tVtEjHdXhOS!ZLqasRuBo>!oa>qnKWCs26dt2%qX5o7$I?XWx0zmUix9q^cZG^%{3=yguXm63G$?b$lPu|-U z+!WKdxH%gmcMqQ@My$*ckCXl|u=?2Jl2FGUYzV3)8v7Bgz`U(U?R|nlZMj72(ztt) zCBE>naNSl7FRRc;i(eR;^{@`h@UG`Yq}e?mJ#6$~GWr04~sgkm&kyf1k{S0uv_IEnOyonDnepPq+UVyRGt z5sU)U)_aEaSd-V+Je5?UN2}MFk>%`Df3B7vtv&POX8d!3IAgCu@FqvkJ%D>yXs4>s;DEiYt0O!%%FuQ7t4@VaK)*8cr(sL&KzrNTj`$$7E%`E|F$}sJw1ft{-H=U(! z!+@M8_vEhPWUVOa&QcB|>>Pv8Ddo034!Ol5L3o8YSW~St2_9-pq!Hf_s%g-hiO_HX5 zsgC99zOG;P)&3i}3Db@%hNNxnO&dRhU$3C6kO7R_b|x~D)(|Oyg-eX&#hnT+>vo-F z0!%J&#^42tDCr>9tArEj6Dg*iudl= z`;&6wN}p53^DWGdmQ+M(F|o#tOP^kb9W1$M%94)UY&I=vHjv+-oa*D7DyvC|z5IJq zy&ncfA+Wl=!qW!?q;_dGUzCn_gqypk7+uHGv96ko(m>&}Y!=9v*Do2(21*0=#Ox$r z?>KA|{%j8(lu6CmyJJBWPSYq3;t9cT;e;#W2u8Aeh&RC+q*g!?$2Lt{Pr_(OQE@^q zWg4R50XO-!2GZx~**9MU#1>*!@R$`U|+d+uQfy z(w?J|rw^wMH(j|FTYPkqKd<>5y+>Q>OC+WVsL=orl104Q?ZCW=_>`StlrTttEPF`4 zj!*gg#xb=eS_t~gTSRM!uhyA=K%QYwm+9wQjYoUH$eofbwg!}hmec*IP(2_PmCOr+g>LS!!Ozh|~Ng~SOY}Ed>NO>MP=Ce&(3U~3XXOpP}Asa+; z2#Yxi2C7LtY&(~-kl@r?Dl^J6L50)^5<>W4Fk=ArHVMXPjW9t;S{@HM#JQ z1;Mhjv#Mo2Y90>ic;ujfFx}=}x7gUn^5cTy>hn`PjOn-A2n?*JTSatpJDO=76I6B! z7V6z=fbuc()=+>&4O~!ee$?kN?)qBoOQ)j&e|7Cq<>I7@J~L^6+!{ zYMu(U6WG|$tbHzfPQDifYL~iIaJeX7h5{41>$eKRv#Y!q7HQ>|6s*4Cgs+{rW}@9d zfMFAfmrF;03TjtRCpfRCSK1$XpI)!ys&!_^^K9NjF8VZd*O`o~>xUX1`NC2fip54Y z8A|@BNWW^lY=2-2y2(UYa5)5v3O}PPxsmqRvq?zY6DEY%d16ChiP?wKpz}hS5V;99 z{NyW`Sv$Wc#BM40yQ>Mxp>6kVCIvpYS+s0NY>fZyYNGw+odIkWM41TLTq*Va9SXt5qRCAr zl6kOJiC}N)sNknREN3&#=z>ps2rmpCU~Qof863MKxMkQ=6s^i(>6Ok>5g+e&8Kx2< z3DM2aV=#{YbJ~mWKn3XjXu4FVhGTMK9+KI(U|J~d8Wqct&lv&6OP`OdgT>swu_SJi zJIK)B&B&Kxh*)p}(il7~G1i;@IIQO8h-vE4J>}jX)K8!B*!|j7R{h&e)* z{l*RX+A+_g(hGVxBjg6>tIT3Y*yo~#QfX@0ABIUM#Q;y!%Qrd4f>fM0Ff9_LcS2;> z5!Y~UFUFPFG8+}7abi7CvrdXJ$uQKFZoq9EFRIl_O+)H{QvgtH6sXlP!X1s)h?4E- zL6yZDc0YjjROwtR+D&j^+NM@T0l-=#IXbSOKotfNwO>EKc9gc^E$>70! zg36j(iP6aMD1c)09>nyA>X~(&*Z^8xOvo0ID58QB%$B+9ZzZ!)gLZH>!2kfV z8^D>NgpAk0vUL)w(awdA(2)HgUEEMnY5O&b1Kmb%q+vWPl+D~>wB%35IOiZD5V zhABJYKIQ6gSI9RDdH^@6(kkjCS}VDz`~V25y9p%wM%=KVS}b?dF*GgLa1#{ul3k=< zDph_{rIanKL8eL)X!|@OLNLOZKtqA;UTT*k^Sn%L07_T^b1J}wcKI~J8UQlG2`jLx zC}ag2R!=uTiX;h=u?`>Oyoq;*XmlPw;+At`n<~RkRHrn%(z?G`y_qv8^>iq`bNZ;& zO>jF8seq^QTtz%g0&$)gV7-m#olqAZNQR|9hGQ(@ge8Dbw^2*l z#@ld*h~3Rm%*q&Z8BnAz`rPn$FtatdgA4~P&g zv|%z^SlWZWR!Se!5EM+Gw(1$-$Q00Hk>5G>$e$IVW8VA zweSpj;1dJgRJH3M=*dpXH&zD5nj@h}p<;S)o*8;ch{+=*wUn7;h`hKn#R;w{OfbpY^MpJ3F{>v3kuBb&rp2xHNRbo_9TTH zjx9PO=!EEP0>yfYBP^#^^bHaYxB6WuA5;Y0>$x*lP6b&nFC;j=H#Sy8pG zM0gt0wD7be7PRXdCqwbo7&6l5HC+xnXrM!Qc@J`AC*O@@oO;pa@;oYY1KRipcoL_Y zE*oAx6XV7MDd2=39xbn8Hp!t5?HYa&RdbQl9d0p<(Eyq8 zn2-Ak5yHncH5_)NaGLz{P$40ro$z%Y1P`X!+6kYurea66a!eq4=rAlFEGTYZ8USK# zT*GZ~V1-nW?qRKYQ`$wGunC%aQl`!3+L`mFZ6TcznywQaw?BDcX!goBrFF)sd&A${ zrWtsL{|!uXB7s}(3)@&wo~28XrK+kU60cXBNutcQ3nS zej0?;a9{;O?@NL&x`y9Nr4vy*dP3og{Bb>!1Y0~T-f-e556E^O{^8fL_9r}5OsM;C zxQRvFEnnD4obY8_q>p1yjA+|&>#gV|d`f817Wx zacW4Ik~1pNz5{%(LSRC z`@--f+MDBGtOh8l{)n>`+C zd_ENeR_Ihx0D$x{7TFOI8l6g-{9U7Ku^xP|MrYv>0NC{Wk2E&5{wm&2!?a|(j z6PMjO_vbYIVWYUMfO>;JAVABy)MTAYjS3(O;{|m|M=Yp!z0PV_fb||CwD?KX; zUO>=M+~-?)u^5<;20Bc0?2m23wZ0b$^2#HQ${SKrhx&Gm{sOvg(sxG4~k0@E|h`0v*#V z`Mk=eZaQ_!<;!Y;CrTKr%nf?BOIDb65(p~UPqf?J&M@sCS*b zieZGX6Ao&N3WwLzFQs0$WxhJ;z0aE*z8EfCZBMth1D``3+<8*EtB4~qVZ?01H|daJ z`pU&@^C%Q!<~nWsEZy2$c(rs_Z;hTfAT_zye~Zx3>N!CYhVNcsSgHEqo4;;?(O%x$sel5X zw4)sk5I^bU;Okf)wr9}vIqsPbXen+{?V=(XE5#Q zcrYW}(@q#t%g4IFb_R&MxuXhMe2-1MYmWVO82^O%U6-9jML)U|$!q;yv@=ThS`l4I z-Iwt+`ram0PUCgg{E{UdZk`OZ7<%6~53hOt0h&Bk6-Gqow@8-=#Q*&s+%mp1?aiRUv&)__jX}96)u;?$2z_H>3Cy6 zY%ZKT>pvpkTi$)#o82ho!Mt(HGQblWaO>PpXB;zCeF;TC(-xqfjgN9lL&vEXOWJWY15`@$AOR(P-D`w}VPo_kw0 zcj##C3%OfcmNi>deV%>lR`BtyJf%Nkd7I8KnhqbRPoh@_{HbO9se230F92z6QcRdd zH|_>sMhRibR03~821jdpTW0^yk_`lF@PIkPzhBgPhX4BA+rI^W@~2y=#qA%%$>NAH z2_h(|-F^rCJMefj^Ec($!I0j6fp!S0OdU|xn0nD}<&k+n?jBrX3hmKS$L=ljRu6Q>DVQgyxveR7T7xc&hLC~a zh<#cv@5@d-0mI-(yK*(=n$kcvk+J)*`v&fPzGcepi(OSarJ=foL#@T@#l~5uYwxWH zmVT&?ux@oEoQb$dw@SS*++E$Ur*x?D&=X}9;j>;{&Q#0kYi6$dM!gvD`(IVc6LYTZ zZPT>9fIf&fjebA<;`Gqshico=v-cn9me0k#Y)4h@559H6#xME!>?`WP+mJ3e*4=+& zU&e$d7j^Icuk3O;M(3pi3Ql8hz4C_})v{YyGd4 zT6@oHyOcbemQwsTARiJc+MGnZfSBgJ|0aLwfXV!r(P~#poCj+z&q~sbyEdqk6-Tr; z-J;zyK^)&;Q4vJUt(cHzv16BfI<_3oV2L4X{l0@|lrY5aJdVYKe-{EK2|@^1g1=xw z+3Cw8Y>a}LGVZ6VoE7i6%ZK1|lp#l=+Mz@^+Kow-cPpr0P$WL*aZjB9wl5qE5tdVo z)#{m87*sLct99E%$TGDB(}|&4DLZXqL~qOOcA3x-^zISU8lLrav>7-BosSttt%a+= z`k1o0wBSU?fTOp%6wQqw%7f1x#Oo8{&8HGST(xYskb9iWDI7Rrl-fLRv}M0|tpxfU z)QPIWMi!;Y>DhN9Y3zo$j2vE^MacIu1)5C3qKHD)+NUc;k&SXrV&yTA&7zW0y6Ix< z(_88B1w^8v`uQxx-jbp_@xMolt8b0EmAyQygyr^%f0CEsH?z5W?iH7ph|e!IY9H+SkYIWAJPd`O zH8xZBys{oHIjFH4j4;N$cL|xR3o}FDmr)(6zm&Bhh+`8wWpva;?J-Ofe5OUrh$eK? z^OFXV)_ZUJ{hYybR1Q|;gdN_)K(iEEJH?`9E}T_$=aH#M2FZ88;O#&~Eh_r- zhdCp^mouW`$JK;xo`~4wixL;PyO~Jqm(4wfuNCslWO^}*u{aas7wxJmho$-4j{we}}6CkMRcwpbAK-vuf`(b2FR zU?N`-fbxb5!B$Hr#j zW%Q;tpznBI0al+|fI%G6-!Y;vK|uH%HM{k8R3qyP%2~gE-tAnr2J-}f0K57J$^sDR zTBuwxLl_6w(7`;$GltVNXcK-e8je`i6Llz%bj>fdyu7N3OZ@}4EE`Fw%|7Y{~~jiJOiER58d z-F8J2rlIo*m78jI|BVI{0}#5bpGqw+05WB1`%nac(1HGZ)TsA`%uoOblbIu{2@Xpv z_(;Iy0<$jnt|4f!T*>`l8+q0TIE~bTpc#uU^g8Y%a4C1cV8CTpDvCFl0 z2kbHmB0}#0#*kh7@cGTW>z?VdXn${}`{n`p7X!^`R|he;%FA}vCPAvfrUrv*Mm3Bj z>6**PH;lfJyo;i$bJr2h)`uhsByM(zCJY-Lrsby!Qb?A_4zbqUyUyS9r+q+lVHPBD zU(uDf9Un{VwDVsl3rh}>;h}&iXf*nQp6N75A0TGOxo1%k{0reCBUF8U%{u0O1?zIA zo-CsinBq_^>dh{c4&@ONU+iR}n}kmM&PdSOxj|fhf05c=2R94iV@$zTH3tMjU_|xr zH@2G~$y+!R?fi*oziPegTyC{dNrh-A$#GvD^RYS;1@+uCp%{`(mbXnKF)YGm?q;jn zDH~N!F~YvpVg#Z;`=;ZLiN^CzbA82yp^|Ie4Ai z498vGA5di@X1t9NA0?mDuX(z&k{A%opU#tiy)WC1iG`IZyDM|J$6PX}p{1}O+-8y( zjc>t85Iq%kP_JvBMxD}XFzeIveLwy1UnE$YV9Q@2RdU?MPc)Q(XHakxf>kpyjur`X zys})P+_xX@>S}=R1%RD4Q{aB2_L8YVXiZ8V)SadN>20DDP;*qimqbN7U>he75}~=g z9HUD>IuXG1^5(UZxxO(c5-EHEz#Lnxi@UfFb|NcETPqig`6Ms&XbX@mBYhv47Zk6-L50ZC7Q>L8K(bDR|FUsn zGvg>q2yl|Cq6t#36Z(f1DwGtL&3?8rEk7M3gi;i$yf|*OLEiT;Wp726ks?*n?`rxs zLDv2nnQVgDHZFeg9$R$d#Duskc)b415H1=kmoxFT?=tNq0zo6D#C4(_CU6@uai_7; z`M}wemLu0D&7EYsPumWQw+?T0%m2=4UKTn4;7Ep0P_qE(qDcuR@KrMd&x%*d2OR+e zWt*rm6XKZ84b<|EmixNFJqa;H_O*9KO24a-TEJN5~Xc-~#vnEo}lx>KQ6IT`=l4k0q(??yt;xJ9MFUC~nBd^e3a}UyUQsW2NP(Oi zlbEW6>T$nz>y@&Qc(f4C*+f}JNH!5Dp1B*fmWIS}=C@3=dx41&AVg(qViIxReUQ9x z557NFf!U1S7VHc>yD`zk{g51WEN0bb6^uaNq&8oJ<>Wg?y8DZP0<$u@tn! zsVQOg{O0M`R4jhl;Son6v03+ikG!bt(9`g+2urMU8`i(I>9q5w6=K_9GX_Vzc6NsD zV;;h6QDBnv*kMQ%F$Km{k0ZD*PL`(LN`hI)^Vq5biO8LVF^b}6sf1<|b>eS7v5=df z?G3qb{e%ux0VXFYBc#uKcw&pM5J+H z@NSA^qL9A*lVus2a2RmT_#>PB#bTN)DZ{~{4v70(oX~HPp9RGKRgxvO=wO77U|#-l@QWf_%Bw&6Z26V@8TC*hB&{k)lwP8J++< zI|Wm3ZANuAV=!S#AwWqT%mj{lDx4rcQn>WP3398q#txd_nTCtY#G@}GO$&n)C^)i0 zt_%lJN30`Tk)0IoYB@;)h**s&BJDOOf0hg`M%pNznqGKrzmDi zoZM|=X$>KN3p<_6W;CWlHJD@A)H2MCAn%ok5$%&A7DzWZ>$MV4T%z8#g=%t6pN2M@JKot`n8fP3AV5qP<0sc*C8J6%HR zh{u1PQtrQWuf5}5LBHxxf^u2dji zL6fN&&lRasiC7}uL?j)%5|sCdjxhbfmTxVsZ3q*2ah4+YQ5M4^G&yFpI)0x}Iw2Qk z#7;ut!kWv4)K15sTY>7HatCI~PQOuFiH@jV;Lh@ZjAvK-T3AP*3id*`PW8L;Q#}TJ zp#zu?@}?k%2wm&^ zjGsqS1M$G&ECn9hpY_`HU@eBy*OZodQ?Fzq#ZK4e3ntj3cT&$o$zr|nymp1R|y z=|85b7$(`7y4PRj0H3Y0y%^Tia+8xzp3OvUw-^{65{*@%#e`+)wP5m_)jK7z(R1w_ zp;yWZZn;+Guo>t4)8*e(Jm{0{JCg$p*gXeYL914(=Xk9-YexgcN6bRX;)*f?k*K&Z z{N6CkDZ4G65Sj(F!J2wA^GBLHv{=o^BBHK9?-xOG5@%cX{gw%FYI*u5Lp}SWh@6Ks z_$lqE3A(IV1w7JMe*;NcT03x>wY<|EEjE&Ox* z>Es8mgpf`dJU%GYV0Drzd$j)zp^tYzLV|8XkzdYLx3i=-t3jY%HD^M$t35$${$by)=2sPH!6+ z10kqlOtl9nd$EFyN-{wjb6vZdfC5Kk(TJp^vY7mxv0b%qV?Z4ROvIkmTP8{g-+LJg z#@?M=DxWt~`}t2l;^sU64d(cz0mV)4RbG-l_y}Jy!h$-O#okp%a+0jJ!5Ls zB&=;m15srZtPJsb{YBM3J%$tU$kt};cC%4FVRE+RNGrupR!IBirB||Hh=~gd@G!|t z!Y#(jlsX|vG^b3aRp<2TnZG~Lt^L2lzEG+^QWb<`nY-_KYq#hx8*$Gg2b!^E939La zf!{8DiC#f0Ogr+t0*W(1nYjI%EsYkE-C1ws0&Zm9mO_OEftnTPO%Cb)+Uce%ncCd8 z!mJd~C`eW_mc3Woo~1h5j#VT|Zv$jHFCCL9K(U*#s4(+62Ru*+n@y3jzJE&lPL$2% zNI40#R6iy*?XV8?>hIcbz zJ!5m{-IGT@n6iv{FD}R8?32mY{!B8KS4=KiqPWX2Hu^+Gmne394{fw?dr4s%a0?Z9 z);vU@;E-O&0kcf*Tv54rs3z=7mFm_IJh>;_K z;s^Oy-h4WNS>nn8$)_s1If6AjTJx&bg|oT^0X?@gBe+kQP8*B*$=8x5`K+=%;zvMZ z3`kPdnA^KY0m9o-7j??bn7&En2BJ@p4%6=XtA__L1q_d~XR6^|68e9{<$5wc)9s|d zrhi(IkZxu2hEZ{hGVKZ1?+c?(l%Dvz<(v>v`izlA#1|tjh)7fwdW%=9l=$_F()zkelna1W<4h< zewsu#19<1#+mYO?gL;^Md%iKeDaM)vgnApOb#8Dez4IHl#SBUUJJJ(>W6m&=u^Uy% zuatL^aKQL$dFk9tSK>jflcfM-=S%Cg@zRHue$}D_G5o{lzyoTFZ_*W9N_+YV!i{%j z*Sz!jzfSAj8i%j)zNQp5h0Fd8ExtM_Zkfecz4Q6%*Dw0l-lwN4LK{SEGtCP(A-Ol^ zx`IAngLy-$uNz$dFw|nzM97=2xtvjpZpo_peC_+fFwHc8!@0E5{sQ)OuG%6Un|5fYJoX~N&8GV-n)Q84@t|3t-q+e58C$0CO6xE=IkqXNWTioXu*7)%pB%W*}rYbRcEYbE_Q!ux4<8E z*7!01AB_yE&T+-eKF#AMSuMQmURV3ttd;}K)E@*T4<1otcT8~yoC;5)mF>(Bs#o0K z=_0>KNJAab_VtrkrS?E;o4Tr-Zxnh&RE8Xe^C#LByqjv@Nv|Azw?xI+Pku0augGI+ zDAHi#Xq?dYZV-Ql(Wl{f-jp@?yxBp}Pbat6qJhq?*ZyYPpTBiF(8>R?sr{G_+Q~cD z@5#c-gJZBaG9O)D2My;sM6XL}9Uh{yrf%lW-ko+@(|h>FzQBvm;*xusg8@+}U}_;j zB0cAFl6=k7Vv5?B<5HS-a6H$sXqy=Lv54QsLYTciWiivCbsXG_WR<&=n}Pm)IvSDA zBP@`;&|@Kd0NoTNOxUX;P5Ti}L_0;g#L@+BhKZ=QS?vz-T)ALn>m-}A}u>^Zfz zA6!%G`*Pe`VeMpZ@sIZ+iDrP`mH;|YHzRXjh+(7`j+tTtN!qScjA>@KDh)H!no7T*&iR>U$$DO zgr%LHk3IKT|HpU5*R#LAL~*E_(QTHynO;EBMsu)8NNJ?@|f znXC0=WtwzO!)^7!y19C>ep0!OWfH{?en@r1r|AuSoMW`UFgzCe?%~?0KYzYow3+W3U*mApmxze$>-v%DJ}!#HJxg^H{-{ATLV13IJH(6#$;T`&xV1 z<)z+;Ug2kmIhM{piR;koeqw!oPAyxp~gvV&`i~PcdQ(xi==0% zrVMP>I5VhviO-J)l5&mWBw$_%x5CQRv)^O{P}LvWzZv6cbw@l<&W>q@`)FeBWcUF= zg;T%d%%momPhw7pzo*4%P;U)gI$DhXj*U0-JxnezQV<`e^}YLGf9}@$E?*lp{=!5T zJWsbsqy=kcbtbg_d<`X%$hq~FYKJ(VSO_%)dN6DfJ(0^&LdnP&?g)B}nxc_VCMu50 zNR2}a5(UNMdo^`D(rhU^P+U{Y3F;cUg@*->rGt=%0O#lJXlRUMpJ+TaMgsF(D6=bG zc93>a70H6sZYjKO0b&!I!9xv^VCCH?m>7u#Wk~N5xH6m(8qy6-1-1+s28l5u`}q1P zM-xH)j70GnJbDYwDzdwI(TLuyHHKsnHOE0E==1PO8#bvyIv7@C^!%TyC)cAt;2#bY zbbM1Kla-rGQS?N43|>QWM5W#}^Ga%w>lFwOW3$Z(I#-|yc8vpIE>k|oC_wDZ7;3y} zP9eNCaZn;0-y4)F2}^|a2}e_6RKi&*-s8bS7Pv&!-%MeUYKqergt(Z*qD@qHL}Dp1 zJW^VcpX5wM7=M_9SA~d6rz;)P%8ZmAHQfFerruAQK$z^$!xMh@N=&K79wXio3Z&yi zt)3)mGT#e~CJwqSQQ3?`o+I(dXgMvGbkidYBJnrGdzb;FfZlqdy?!^(u*QhcNMT>8$8HzAYGypek z(*U%xq5%#fhVekR(lk(WlPR6f?=5>r(z63;&F8j@tg&&gx{}`(eoUMO**hZ;%~`0 za*W~8@c}&sR6ZUbuZ@;OXRk)dCOR>=?1&4TnXa*-{gfCPw@-eaPj|&fE%wtSO89W* z;3MYnjTl;0?6OR3)?O4`7w(Q0IoLuf$fw&tK*+>9eaI=m@D=X@GO5j6Jp}Z^pG4SVpIK6FgE+A_|&>Fx5>_f z+p5v9Sb~{JFAgSdvZE_B(uFC#g?!2@!L@bSlzWwMGjeyP@X%dPGlBV~K_ARj$A-hx9#kcoNBIDvUDokcNxIivwBcV;1iMWF&y87CKsZ>3?30N|C-7X< zTU;No`DVo_IL{eWD7s39GXGs5<&Ak%P95Q1TXY>K z6vCH@!qrjm2>>o@vd0y@mk6X4bN3CQ1eKV_4`EQHC*2gnlCnLFmYd zK|pUCLwhT3W)+15KckZ2ArpOrWXVDssF{Sg^Eb>rD^$yZbW0&3o+uEnA_}E%V|LSY!$hFTW+^bXGJdYE*I=Ls)pdL+Bbh_`KVNyhfVC8SZ&(tNl~t3~O*3z?3$`C8<~ zf(zjhWVl?Q`X?d^*hQW!m-^c!8$(1tkAeqN;T?etb-qGj^DZc1%vhLL!PrXS3=XE> zbvzRUzxP)B$_PBC>o^Y%8ZD>zw{U=eQ1LSs7K9T;gWwht%3O;|`Bt}fZ(rP0_x*O; z7}SrYfChh}RJ~yW@$-lf9(g7c#$@ZX^l^ zX)a_y&3Fwhc%RG>p%(8HFHVX-MPl3oPuaV}ct9e~!?Vi065<=p3PF-mS5c;BLKPQa z*?ZDClc&zqf=lX-mrv>zvgno2RVS%@x6x;EK__&iWBT!?+#cT&$$V8HM9{YNt$N|r zLUcG4nc0J>-I4z*p>QVE@GmcX5F-s`)MJ$vvAp{+b6&V4GLCyuQNrFRZk~6VM__*9 z)N57~%MxS6s#H~p0DYoX}DBOF!j=T zBjHIvXhH%x=wKX#gAHO1Yc9YHZ0&y487eIrsyJXj5wQp~u502#pSpeFxVX84z^*FH z$5z^~5ajgUSnKM=YcfNOT630+njzvv74{YBD+|zA{PET(R0#gk9u6(Jr}AZiua^ur zc<3lJ>3F}v^IDozO(9yrRM%Vr3Uq1Ix(|nwp)Y=z+p2R}X^4kN!ysusdMZ$=gBII5 z@+in+B^nhEAO{1TP-4Zg0>c#mXnjq=^LKU`7 ze#yv2-2-c@ud{t1>imroVi2MH?#Er-p;WSDWfnRZE-FYuHhNrr2SClV3}xSY<+FIJ z-SIy81Ecf9`;MZI=|dm!{d2WDPy>+godqa?{6@GJZcrE=@zd`n^kT(;attc0?X^J= zt1K6&qko>kJaxh5nWO5G_iy3hg8a}#3>$a!HSR@&vS4Tc5ys4fz?zwrcnS{z& zev$7U0F5Vd4Pl`je8R^cOHJ%EaalcA95e_(z(7Lt^~dWb#VI&=;5?iG%p?-6&OH`e z!b9JY5#a!oL1vSmitZtEk70u^yGNcA{4+*|j^N=Dk1s^Ow!09Fy(txXz-^!Z+6VO< z9Z!we0O0m%ZzzSrEFkFNnCZ~npxDL-UUx{t(oQCJe0H2LX>)WhU}Un(M`2V#rvij3 zV$jie%=yLeY5eiMD1rHTD0Y<#A9dz@bj@b9S5Opch^qAuWQuY}G1riXfFyUj_=a+} z30=G$RNhTlmAOK+-4;AED*EdOgP|zUX^9MRb|Fi9;?S@WN>Yf;y)Aa0`}$Am=UqHf zmFNx(>Ylu~YZnF5C}rXf3!mr8aTf*(4;3ZFouj@AH-z28)^jYV+*%Sgni3ir^w#fs z6Ky2$jtb2=fehG|u2^9GbPi4Ex+WFS+|RYpY3&f@!`e(Lnn%}ebphQ z^;h|e7At2SV$^fWXkHE9C!P1=&mPRKheRta?%!mDY=IgpCEip2<@{qRXX!LK+SK z)GkSj<#h>5OKpu|mQ(X@VMS^#nbw>Svtco9xqPxA!IV+?_nsBSSm5@=@}pMD`CHK;mrrT$9` z33oO8GE5~(*xF~UwlMB;a$LiM{MN0O#;1$^y%^XsULc*b;p<`ZMwnyls`GwWBR8v} z%``L~fJYEvZ0`Bqt+g5Vs?_p*PDc$S5n+vAku&gi`6KbR%f6~lQl9B|M&?(Rthk`{ zdObf6z1BCa@w}?v#Y>8E`O$J-SHJ&jynW+kAG(Ml6~wQPL!qNk7eQW^^Q(&T2bYS= z2&A$6X346ySI|>K+&)95FNRK#Xn}d->E z6+C(WK4v1cUEr*kiSNLT*!xqrp8DbbzJG9k`bGQnuk}w+moNjLa-2PPgl}mWT z>7LH^nbE&9bum*}zB4aGXPH?7%`UT-`=%D!=f1kUTbX_E{Ql?f?O* zcgeG1>0HE$6XUkYF_N>vs`oR3tHFj3WA&E74Tk?*ePGAh{bMY)1~m?hwWN-9C7(6p z+4YAJ8)9r5B~LdB4K}lSHx67js~MZGrPe#c)?amO_*{){pc;^<<}A^*Dn?^l%J@3_d{Nu9rwzOcggmYV>T2X(R zsNTIJn0oPGhVGM4yoH*nSQ7@f_KZsmPvaSK)b8=}%=^3nj&Vs}k2XzQVlxG(Cdn)8t+VdS%A`XqtXtVQ_Vd zBy$+&apROxQi-!w#j4jM*V5xF*=E5%y>oqUu-oyTAMqH~XB20pN}My<@74H-WU=L~ zOU!y3in(*uhin&j)$`#zd$OOsUvO_MgEvt>i(B^-p4Zx7Z=~Dp>0QPoL}HAV1&@>f z<@vq9qMVBhf4E%ruas08vMqZ%vNWO?rC(^SzIkP{*D#Ogd8yKO9jVQ7Mssr2*(Xke zvpME6oJwXC|K48ShUKMHiFTv?Sfzt27ZP6v^VIsBdMjwh^J2Uv3{@deQGsdQwb=47 zf9iUHtCUwleN3+|F)U3o)!s8rGBC6FTN_8~XT>(5+6qeBq)%~~?gvpL+o$&pY-P0? zbe0gMR>fi0du9IhP;QMGg{#-|dKUW{yq!Na&O5Zs>;H7ctH`<>Ds|=d@Ls9n=OLpL zN4uu?4mAS%wU@egG#2%Fts6hHAQ+3|TRcy5$DQl)>rL-<1m5bOq-mt^=8YL~>b?PX z>&)3BXB9r)4?XvK_(!Rexz^J9i44j0;=Pxp@#w`7y$mNc}{k7df48QqL@i}Z& zYb5HZ(RkndHb!6;8ODjcDUN$wO2uhMzO?L*?bnk$bW@kM2Ay4PdE@a}Z#CEi$-?l81J5hX-ql%x#2K#z-aGXskUo0y`Q+!= z5XIC)`{0Q2JIc*ud6>^(b^M{Qo>drfBz z)9p;iRvGY18|3zrFS00Tn-ivv!|V_3lnEop!vfe%+|>OZ`)`ymg%&H@V;b0As}!}z zSD$+E@Z=qYa=p8^2WOnHFtkgjVJ7UZw>$2rhAQeJV#fTo2n#_ zr}_smO;58^$EIxp*y5cOiagD$_h^w7MWTu~URb(uOy&#)m1^GK(A&+h3xB4m&3S*# zS}%K&%yFmOM5)3y?eN0=n!w<1#cpyI3LgY&@}YE;^srE%UjdWn>YEYLcB*^{ZO1%&Y2Sot)||m3xt%ED{Rc1`;ms(+xeU> zEvL0x-re{VRGBhc*!45Nc9f=E%jvoi@Y+2ou1~)^WiD&f7`3Ey)#J=~+Wyd8*V!E7 zuoSi~BWWq|y{|WG3Gp$1f)Ua8>9Hq|Qt%g?dU&Bo`Ya3%JCBj-LTmA=>w^;69@qyb ze*NZnNJ}t8ck@;f;*!p%dY~Um_9+IuN^yfP2@Z$!Yu3Ci+-d6uK@#Js z0rf@Vhz)bgdlT6;^(89I`KfF7CZBw(FEd1J+N9ijSFGIdg13F$5-O|}Bl9xhLF|To z!MzXlH4W7_)3&Z`-TT<~t>I;u(w4=`Je}&`@0F~)TW%-9K8*x4))gSW`dR8tca`o_ znD;c71g0n6KWlv5iTFlH37c6~)_$#a|Hf~$NN3Wy#^x`G?;*osbNe;gC9O&uK>~iW z;DBExJ7OEBmggC42^~F1X4Ek-Lq?=_^a%2k2t376Pw=;0HX7VBpD-sM>SR)h5@{>`=XMR-E_|T>n18K<8Q0| zp_b{?e>Ivy01`-an;CM0VY$Bni)xOuYbbL-6dTSK=Q&Hmn*V$>e&_H4gA|zl%Z=VQU6Eyht^1lm74gd~ zqHgUT4-ybmh3H}cRwUqOLolG>rp!&A`^Z_YO0~QHHlgL z(eaH@fn+edHejN9U(?sm3kevi1_u$qV5W;nxfcX@i2RPi$;BG4UzhjumXhNYSTL5p z%YW}N>Liv0T?htaQ6M_^X&}-mhj7})-9?Ab+#Cf0{l8AbImjkJU?G9ZzCX$Np8xpU zpO23Z6HD;$@L<9T zuCA_^FJHcN>C%M@7nsh1si`RrhchrR_;2pPz|hdx#MtiqxgZbM+G{?e1pnDv*A@xP z_FuepeeU*+_klNC18+SFyd57Dct0rcF4J3J)}8;X;Qy??XeE-Wl$stP3~C8echWo4D6C3VGxZ;K13OP;^0 ztZ0AvlJZ~0gcg`pUtizQ@Ve=BOG|TWYfBroxplm$@yqLm56!QKT3fo?+dBUfRG?C+ zOi!V&x39l%U|`_Qo5A6sH^aljBO@cD%pPU-=;+wk*jr}*chTOC(`Yp2HbtW?z8%{b z8{HUxyF58D_x|0d4nYG#3)h}Px7UtI%7q^y{ z)|Qu7mRDAnSJzfHS69BSt$tfy`?|5dwYjmmvBBIn|D!fGw>CDvZ*1&sZ0u}q(zmyF znEmzZ&bM#$@67(rY^J^N9|FV9&hF0t;0yoDU-uUUb4>AGzZZhj_S$Y;FY$?klvrD|6fkSP($U% zm-wD!G0XpU8ipIIKffj{4ISS)?rtxAz9wR4k?v-!7HonGJNtik8hqgAvc=S(hN9A0 z<NYxNO&ojZ%=$&_)@#d+lm@@uPd5u{L=Xn-!kVlaE(2ora2;^4bsnTi5F6 zDz<9!R))4-QjJ!xQF{5WO;P$~EEQ{qv|3NpjhUS|Q9p69Qla6452r%oba0sb>$!MN z`KHB3VRFr@rCYMhS*9@A)^Gh=GHtsb!erWiu5!wB9RAEd-pNRod7%H@ug6Nc1Ru>V z9uCaYd*COk&MLq4+Z&^TBB6x-eAMnAG`J%+0aI2A2 z?ZaE}*?!&2G7mJ{rLA_~K)rr(yJVG#<(a*z8tbP|v^t+evjeg(pX`6c zzrI2RSTtRRR8}0H`n>nwT0N)C$!ViGi+v(778 z%O%SmsalNXnm^y#{w$@b!Bj?m0IsjCbY+@Dq~316deL$3RL^xK><$|eLp414IX&$A z%-w=kEo#cqgPAjr)6S~IX#A7;ycr{NPClG;vkf4vbz7a9V>%6b7!^@q+oH%#zW7z! z&-?wMH^LIsTz%_7N7d-p!{T0TA9a1G-y;#%g;geenQ|Y^f6km$9B^!h8Z3#;_E`Oz zTS(&^8}$ay8!PBc;YPx3e0T9?G621sC0mJ?F+w`?9oy6Hziktt2&Mv@jy=OOs-Dcd z92pjywxtc0xR(6UZ*zq@iw#v*JIL<5$M;MkA4&;?lO>142NUcxjT4(&N52(I)Y2MK zBT7X)y@$$GZjf)?vp6Bfs7=hDJ;;bsEOJw5D;#)3A9wXlE%=zO4Odhc5Z_IlTl_Yd za6z>;quWDVPN>K9Y^`E^Nk}|0KTFTo&m$`-dqMWho18QKmd7IZ^Ca6*XV#W$;-r>~ z=lz^4ZF%-osj4L)dQ;hYcQN!qFsz|szmz@VoaN(zkvc*(?1 zZ88bb*<;;aMrmw`3#wfj)|!tl@YXP{u327xp?rZ(NCR~GHhMM2?5VW?Fc|l4`px;k zgGDkx>s4fTPPaRn^bW_z8?a8;+`3Vhuc%R`*}ZY>s@1K`oIzRRS7)t4+inM_d9j`S zqLKQ$K@oW2SbkD(v)TCOKBYS>XmO3bdi;Cp?U^9>E>LO951@WZ!y!8&iOtn6PX zih0`>y@6icPY}|ocD0#ow!h{Olka9<9tqdg1{G&lIlY%sc0UDJUAbd0jjeQi-!j>h zzEg!c2>{_4@BXeYJ`Zq^R~uGPay<$HE+S}ps;JROx@3Opor|Vmx~VJrkzqSP{3vT|3 z7l34|V`ng3XvjMt`bh0ciO}oj&U1WfOzLY+d7V=9bWP6pvSMg9OEGKHw`ekFD}d!| zl^sGU$#S;#YRSFCxO}xbw>9(g;Zm7JYDM(&tz_!4JDvBWZ&HrN;o~wHFX0^3Hv*&Z zpME|LHJPmjy&J}O0>9CG0nekOR=CeC3-DImplMub9kCPrNR(ncG<4klFd?~KbnRVl z%4Y#j*8?z>r-Y_A_F3I(+wuPCx%Us;1@Igw9ZC*%Aw;E3H}Z-m*<++SMqAO_M#kyV z#cu(RcF|LCTO{|Mo;$n4xJ{h>lc z%GVb49IZO#c@ZfO7ANX6`5f&w_wT)_f%7`8zr6N6@t*X{9Yu->u9r@zM)l~;#N}#t z4;RwkT))t8^Q2Y_19z~@JQ4z8kKtYQYV;7_CvlLq-+oh-{zTc|Q?V!dP5<3W4)*j} zQ5yK&=2U~o<+OS&BOa6|g}CBuvGl5u4M9`s&`%rCU&+cyaOET>`TTygF0gpwY`(g)j32gy!!X4jKZ#G|7Kk9SnY~Sb=eLZ1!FZ6Dm=mM)aVo7}1Jp*iz zKOM5-clz?-Q1RbyNdt$FziOM(Eq}NEHkNw2p8?Rnb~St>&rDzVp6gb7Ot8i9%FDYB zTop3vWdmzgyZ;z!l-uwp2T$DFwv7+N=8b3a+JA4vXXO1Ix$cIU{nxRmk)`K$RNusv zP`UizVB$h%$KOXg5wY%fOa<=87wY-4p8w_@SR)YrY1w_9&t`NvqRdw|Vy;o@t#WM6 zh78)~`eAc>lOjAX708{L@w5{#O)d>d4o!?b%s%V>&^&JK^eY_hC)B*nFR3vxxhW@Q zTq<=(+VYTB7`==rBS%ccTK9#dXgH=_)JcKRH2aCBJjFtPG~jwBMv@L`f3lN3dlQP9 zte%=+55dIro%9@ggk*7Qw0CS@dE%%MepB}1V3Gc=Ac^IyYVw}Z_Eg}ix!~ctqF*eo z|AMZL6p4pvPfwbf)upX1-MyBWPVR+EdOldq;us|(&go=)m*bwM!CzobzcMz=BU`W^ zFfgL*7QV6OcOk&Z9?rL_<}z9Jy3g;~4d#gOi@dS`Wad%4lh=PF5|=PgHEVpcgpO*`ILn0>?eor%q`g8Q@d7 zHhLrT566;ncRW;c>rUm(=Wt{_hZ4=5Ur}N(@{>Pd@%8^Kb~W=oUsk&gRc6)Otr2_Alg{F09-u z#3O&3q^7TfqM+3A){*p*z|RCLTM8LBP0;;-m>STbz)+#~OS zmvd>EV5#5G3ICSTmWk2;{}Tk^vdP<}LCM)`cgvu8UM*ROG8@iW zj}e5NEbjoG4Ucn#UgWGK>NUB;%PDaBy3i*oM>Y0E-Ya+|7EY)a8zyjcQ1oI8;bla4 zx$rTu61@dHM>-8w?_61bkK+@C1BGFWN_gI%!jgiUTD0rU`SQ$Pm$Q;y|CAB*>o@8yf}V z!NRIJjv*TKXn0mM9>h-o2@*gIe~=4}vt_7qbgh!AP{sCGkA~!^oVV)ruNthV8o4Lb zN@mriu^;YmRn4=D9`1p0pVi|Qq^#a z&@d4eqRMFmLAX#M;|jBrmtVPvly~bweE)F&84A2%S$)$| z@K$B*Yund>p9MqmTUcJb*2))+sI2>;&}1M|*!D^8YqQ>2o?OgtQVJ&tPqB+zvFvsh|eYhqb!br!|87WF(tEAQ}mmQ;L*rVQxaP_K`k19I8`=%w}G9fzG9FNNdW6^ zKJ-Btv694QYSR^Cb2ACUnx<;QnCG-3vq|+ebYo$b0L0n`R<*+YlmdB3Nrw5^W#}*TDv4)?-K9{QyjE1QLhAPj(HQ zB|#f7Epng1l{V}S7>Fenrr>~hNM|)gLLBf^771o#I;#;D;!WWwc!+q4VKbfwpC`gT zVeRgm;C>FU##1m%<@7=^{E;Zch6sxRUPhik>Rm>JkRV2Q2J1u0 zST~K;j#|;;2`A854UgIzP#y7l9j(_`{qSIG3Yd=o&ZKoSh;Ua7NR0x~#(-QXoIfu| zx?n&kI=49$Frxuo99{lM5EsCD76a18!(REb=@UUZs;piZj_*X6E&w`9hago!S4jw= zZSE-~D;mimeuZ6)%tn;sFi-`l&qIumAh;?_NfF^o0h~nIvch`$@}Oss5GxwM53n{} z|7ec^X#uQQ49E<_u}fp;$Fl}iH+ju~%jp`P#CMitFb|$}+P!mk9%cZ5EGdwHYWOD- z6am1>zH(3RKyvb`ylhz2Xb>wTh{uMlo7}Wt!FHNKf}B+aAyn)2$q-{a2t|akxWj$0 z5GFoHphNztg3gm!qitXgbl@Kea)HF=8aIZbfX`6?UOH=;68tg(WI=$SkgTm~wORo5 zG#O%|3gX2>La5hd&17k74d23RNKjr1zg}pkx3sWrKK112-|aKG{^=AtFA} zxfU?&ar2z-ZMM(N17rEy&7Lp;GMi&8!k;?zoe0;b198N!699(+9e6&^ojf`vuGmJp z58@?3Cy0nT3QT8wp0!z=;6jJrO3r zJhy@777<;oQ~)>6`3cFjfQ36yfq$593=G_h&K-i^9VD;`;CtSaph#6VJvT%p01*V* z30sTCboTe;Ax;9gESY%*h4s23o)f^9SZo0Wa0TF>3^-dc_S34cbUa+&kTYwPW1)DF zhXVE@a14_X!*mEgW|Rq&_)!3taB3hHzTwL0MFvN1b6dZJG?0Fk%`d8PLitr;x4hsE zWN>8~zJLl=r?F4fz@JgqQjlOi06LZq4`g6LzLc>_610*+A0|O%=eh%}cc+x$x2fBc zaD*)$M6@}Ip#iD}c6C%h4apIz!f^%*X;S3&!!p0XgNb>VHW8HH;kM5K0&evSHu@JN z&#X(I&x})9I69b&mt`Yg=l=V*C&zZlEM4q$#5=hc!-L#XXDnE9?N)};`TsiHBdiq+ zJD@NlwM|3js3%pD*o;RSgJ^FdrR2?Vug9i0;w6J5f>BGYglYdf5+0iiWKMNoi-(s^ zieNb6G@UhrjbW68YLbo<$GVYNsM}w@Oj3VAy#}X(`^@yiCF5qh`q6CP#Hc)P?tgEJ z^3I`=<&5Rk+}!H)bc^rKrVKm_f^b60HulE8_KBoSC!)sMRV<3IC7WirL5r&R)_M1t zpQC$lE&S$X`6#|*AlgZv+|5pn0AyOK!rlS|3y{Gsq-bO+VaRSVx*7Rj#Q_ z>V1CqTOuff5bn%)uEy9TGlgGGo*I~_IL8?z+cMECS3=lvsKB*KbrJp8F^Cw_#LjPd9zFSs|^+OdNmd0y<7&FCJY@#vGHL$ zkSx)hwHzar3AMSb8Jd}n)aY89FjzWFA>)U**e+E@R9+H${DV`F>T}_aBbE{Inl|0x zT27d}K(^R~&8mc#(W@ekW71S|?Zsn>EP3yq__4^Es1iLLE>n}%WBY~OOc9qfar zq6E*+G5D0E@WLT4i|&?^3hlF35~;jSl}_HIbHB#~O z(a?WMgl-P8nndlBlB&J))^pwRPh9zJW0C~raxi@kqUDQE1uhABFwMeO(QH5Jn?0dt zM5hxUO6Qo@4n*>2MA-}wojj6C<|In9bj!&&7S4+OH47cettx&w5-shjzZj=4iFG12 zK9SW#O^^iLr21rV?oRC$m`Kw0OjBcvmd4-o=deHEL}oN(Nz79wcdcHpnM-F{Z7$k< z8~EinnX_G?#-g^(a|dd>+zgK4kRf+QNC(URqU&E*U8X1nR;Q{>AVEURm^oj7eFHkIf2#GieX)Ru*s%>$l{B*;Lz^B{S%k%_uV~(<$dLwnB z+3x71(h}JU(nPDFI&WZNirCZMQ&AvJ7z=uW1~xg65@9aDgIvcXT!7q`8gA-g;itwN zFLr15wG@eyTOjJ`$cXq5J{*%J$2rHw@Ng2ST#vBv^1WsvUk@zIU<_ZKB^<#0o$iQM zc%5PM8*B3DGK9;2MbKTY3tAbHAeT)iiij3+`uYKzHL(d`mtId}q^Z{7^JCMWl+X23 zx>&tVfv(Rku+(J@?PPu|QrA_1**jXCz}T=}H!tGCk|DYEXAHiDzT|wU%Wi!9Uf1I% zZ!c_dI`GZNKG4Tw;i14)a}-K5C02@C9TWS{t3;}N&=|?J7ncw#!N&URnq{G!5s$vD zwUMLhMTVmpUo4g50%if;O^0eRFF{8SEd`BXk2!|l8~MFqjo;3YP@OA`=Xe+8c~ZE$ zh93lCMnH3!!{QQvs3?_K`{G#r6fJ!moA~lop^L>ieX79>k$yif{&Rqk&~bc!Bo>_J z53v$);(w|$rsfmZAZ2#_xXkNlH0pjfNKD}o%1xE*x0Bl~!CP!@GFZe5C$nf}ZN>pE zCda5iEblSZ*z;9tQXE|%K5Ge`QL>#;g;$Av{Vg{3^1|BC@?LfSF0jbD-bu(k3Ujq5%a0oVEz0|-+0PAKPzfb>Ll>_Dr!EVy236F7w%g3f z0kR0M`FWp#)22GbYl({zETJ4LSrE1zIh%bd=XLf3L199&la)J%j_sVuz?w~B{P`Z< zlWt|VpBwzVx_>_{C*_9A`h&Y@Nwzl!$yz)M0HfUA6AmZXU(T_atO1gd>Xe>>17m2H{f}o~hZHp9kuk2AQXZ`-2bE-M zthLSpeDPr~>pa=x;b1bKX(Cp(ULx^xC?Wn4)k*VGw&gAp5e)DmYUM6Us-`6FKQ_NFIKhL4$V(p0;u@?T2Y!oI&Q)}Wg!v!Mj zMz5Z}_-W_`4abr;sA{IrB{3kF4T=b(qB{Nvo}VY?OcB9cqM!t+@Mx=y%Pgp%tOY;o zJ;^nfKKWP-s~f$H2Tpt$K6=*8mJz#T6+4xsxr&U^bns;7qEc4i5^EA-T->5Y1hd$> zx6?{^F2?Q|SxG{IDFnpL$Nn=xtZT`ZtAk3;6Saby*l z3HR%KvU;ZqI%B`i=8zMY@CX;r37H1{%}-Jpp%C@$i&K-$6h&tLANKAusHyh-7kxUR zhaP$oT0oG1fT8%1P$X1Cm8x_BQ9%I#QPK%b0YO1gLr1Wn^r9xADn$@bKvepJii(H| zin#Op&wrn@XTR9{?RjxBYck1XWhS#`&7FH)>$*Q*cz+2tOb8$K!Me^J22T#%Kb*!t zStBj7GrS8D*^#*>heO2VA`2$|qE6sHpr}@Oh%zmi0=^fSlN@3vYsR4^o0KaG1v~o` zAheoCf4mlfzOocc<{LK>e~P$rM1@2guz3V^Ibs=zPH8h7Apk=kSI8XLvXL30czsg5 z0*pg^u}mXYoV=}aPCTg$?;Oqh`m`-u??G;A z2C>cDlw@o|205&2X4kSTDHIeLY|{YN!-C+Htg|Qv980svQS3xnitz#ZmdlO(I^&mnUT@Oc#dswgq;+|2eh``fD z$RP76JM20zRaE3?G7a7UvLtuwZP7G^g)ECHAEg-Pc{EG|<-Aja1_`8k2dotZ*g7L) zl}AD1!0^CYWMHO34)*>~p`wb>#cx8Fz9FJf42?VrJPx3aEq*hg9*SU~I20iO=z16R z83AVLOA+=3=pZ0>Mn#;T(SCB)Sna;J% z^~Zr>Y>H4G)d&vdJ$imv=_zH$6g;y;gR>9EKy5wQwyDXO z+GScyDGT+2g>=i6-04vG3urRPZfkEC7p&ees?kQb#NMNPBUr)R;cQBJ8@+y7#)}Pv zVed-FIxAEbW(|6}#Aikzpuq%n-DvUZD5mGuUUo6meTzZ%g+}C!?(kqfa3~qijG(|o zlnWy8P%@n9SIhGEWm->XyB&b0^H_dxs6#I+Wge+ekU^fK8rB}_-6posORcr9Kzf0x`=n~ z%Z_A&gvpU*?&L{vktcN%&XX|rQMZe6?VeG}Ijca{>QrVm%@ z64K8H3iFH-`z8$yUq?j1y#`Aj2PS$&t>-~+Lxa6xVR$C|5j;HAH#86C<;w)~*l{EV zl0x6ufT#GvlK((FNA(0}glFx{jz82ZSamzh%N@mvAu#vmiu_VwUvt|i^UctCct{=y z6WlY^`(}3X&6`}FHwvT|Z2k5V+{YKB?#mkz&oE?D`QdMd6NBcNZ?hXUo4amwWee7M zyj{x;O5wsHICMNP=#99oXDut1~w}C2VJ&9f@uLt8*A1wOGjD zN28N0D++)}n9C)=JVI3;+=1bdw5FJFbNRPs5}_#ruz&|}yEb6#wxA;jrb`0(MrTHl z!4cs`_%=#@KGto7b?Os4rj{pys5{SlGJ z?k(G(=;XYt=zA;9+Ul_{BQI7joZOAf8(C777}OZa6po{v(XJrBU5uB=FlnP&IxTxA zT~mB}lTiUQO1^W+_o4*_kbJqwn@oE@KV<<}`REre9TXh-X=#FV~#d;h|09O;T>E!`@rwek`m{%g=ZS6MGxz;+1N zTr$hP4XkhrN(MmY)5Jof7|=_~uj^QD4eP@{%5Se1k(2*DG5|i5hYWufKYTBK1jBGz zSCUnSOv$T;Bn#Og81F_{b^wU74hz!?wyCw8jaaiYV5b=>6i*|EYQxsJW6^jHvS%DL{RN*!X65tk69I1(8Xy-Wy`+^RP2M}y85}Mp4q^0J|D+=AO<(!_h<$4psI7{3sc$Lg|DC`?suT9HdYz@O#t;4w!Ho z(xaG0+$z;L9JXN`Z4NbT04g?6k+mRuA-%J=ehJ0VREODdd5k65``HM{ujGuFIEJn- zKxqmn#08qxmL8g-?hUq1$FU3>sBYMsaZ$(*?$XBsSZDE2<2K;JQGjkkc--f4@1M^E zvaTwG?Z$z9LU{}xZ8i}g2Dc%4lH%%RJKF)x;XD<`GR>;YkSgyMZw6NEy=L82D?6ju z9HOjU7TJHCCWv%fe8$QYP6z)M!qiAf|2 zeLc81;f5ZsJ^o;^b$HO42}mniEZ1sk$22S0{#XUEW;de#+ZSgHnN_`tlO5T#K5;Qw zW$cacC4{I$;UA5a<$=2NMvM~3TbNw?r9RJ&vbcH~om9N>91{u0jG{=g=q&5M15$!2 z!yFO5=TWg#w_>lB4GSyRi1#_H-;fmkF{*-3}2@*K=| zk>kCP7!%N(0>X~MzQn~n;2ya#5l@#tB84F;7NyY!P(ptM773AoIc(}Y%5}mQiJ=*) z-rB|oeV=W8dnyqGaL6}0YSk_qU1S&BcY5CuDBJ3h3!1J{lyKTX%pKV{!I_&*-E*&9 zTgy@5(S_0D_nY5a=s#%Rt0igF7yJIXWgLMlY!mH5>8pN$zwUsa#%E`k$Ua>ZRWcH@ z8P}7+yVqH>O#lpRz}semT+fzmrda5}>Ls)6RSwI9=uI$4b~gP!u^Zy<>g}z7a52#^ z`^U$FifsIKSsZ1At&xYhmTm;`rlTGZ!gm3-EOCa{qJhygK)cwR>FUB3j~V!Q2u~re z&+9qi2&CIRaI|gOZh{RRIUtrzj;Y_abx|`~B@bFZ99xkzi?kaZIJ>)P%tG86kQvdR z*3^2gL&!rLswlv-?@yJ_&Giuf&Mw<3_E27B%UR+vW{I@g{+s94|BMU6qPs2^noSQ} zc2!D9+|z12*(8)><>-CJ;c3R8J5ahlR`DX*r1*jJ^4|$QBcoZ{-bDeQ1`5qmfO}M1 zng5P^)`}N_5m=H&~ScF+E|+YB=s0{?Z!1`S0||kw1Y2p^QzGQ_*P{;r$x6}arPey*fB4#wRTkLL>gRM9W zg90n+2ZOBOz4MjY!s$byLatm`^uzoNWrU4#h7?R|4h2>9<%k|pWI%5suD)2}0U4te z?`t^_=Z6Pn|JkCwAvIF6TK3u z$#*zi-;-CTbIDH=B;ncygpQ0Fe7aqh`gcH4#%&V=`*cVtCKym!M};WCV-7Oo0H~(1 zLL-w)Wp{*`h(44?3YWSIx|x@OWs#Z8&tFs-6oM)r$a5`u>PfZ;F5zN+$%zynwFtHS&gzq3h2LscjFPJLg!fBM@aG`VZvZyUuj;!L8qNE@<`^X$H zVtux!ngSF_{?UkB=im82rnP< zAb{PXw!w(#CaTamn$WHL&Q4i*amIsXA;5qhTiA<$*P@#Qa+Pqe#K@@KIO?g;k>hz* zR%3vD3H1s=c@!vS4*Wf{(0OX+=$>nF5HI}-!EgRx-2lvhai1cMxZIRI6rdGnRak*C zrh8>F)EGWb=5l$`b@2*nwPkw0FFRmE0WWVmjn;9L0L&W;b%uqQ}vKV-GlZ#OpZ*=w82`@gpu^DXAfM$wB%}@1f+qHfm zP!CN^s`HV2>7Kqjc58DI4f?KV$!X&y41S=0FW@x%kS_f!%o^{40G z#ro)G39WLb-X65Y_Cx}27NlC|Rt@M?#!*Gnh{zevURjk3YnG%|lfnj`i_@7o$Wc#S zZk{}>kdl?oD7UVwhf1kX;3o!bm6@YJwz`RwXcAC3!u4yGb;9$PkG9lxJ@}`iW+}>H z6ztYbdXLk$%=6Go11yNW-Q`(;;6zr6$m6OM5wKFq%5T$5GAt(TzJhMG}?e4XcWq|>b-Bk=a!ld|4>q>BpSN%*Xy{Jz=hYYEeb5ScA zB`RHGAIEMeU6I}XuGcV@uQ8s589bT9#TEz&U_(ryFG1<*#ziuc2Q1*S6tHnwANI2` z3)-z79@5mwzyj&VnUO)cmZ#2Sqv84y)=#!y=a3aJkievQ5#E@3a?UHg94aL!I#s3gh*k`1SR)jqi5tCZ#2(#OGiz_kYB4ajSSt$ug&N$RelTP62 z3tX~Ieh$S(GEhZTi4UG4;wgLyU!eB`38=V}nV5|r+gTETu+b+pehUA~Ui~0jOX)Dwv>3nzCkqjUl7IiM__YM8q1%tAQqi zlkOh?n?%ufrC?2gZenqRIB9S@miVMs9jMl)Gbik^L$^YL_YiEk99GQivt)F)j6Ovd zJ^El-7lKx0g$X$af-1Kjv616kw)hn65e!y?Eav^O-2Qyc#Z2 z0$Db3VodK28&`PI%5H>I0Q;EdSF)vH77Q*RhfD>PnNUCyUck7WZsQ>ygi?kyW6z!t zQ}NoRs1`oklA}VnPc2JX8(Zjxhx0*#nff(Wu{aeKcry^MD4|btd>|p7 z384^e@ z8Kj8g>itlwPt3-`d4Eg2uoFOuG%Ba746M)Bkr5sU@6J7fvBpj@^&V>}OiLU|FAkTGHYsKL_ zsZzn2Tie(JkXoaNm+lgkeu4LBxDb(_#Zaz=_gu5V&c{8U=#jDLu~s za-4!$SsN)kf*6De$rS2ek-TSts% zJx5Uj*mBfDq)$ryHK5G7-I3;0en7>h833e4xzcPKKc6z|a;;SeRd*X8%_T|>MBLte zm4mX8av_MVo>26nz8xlE#DL2;^(DAe<8W}*6c;hal^CEN_C*?b@t`KWH}=D*(wm=g zfKMLY*x4lzl8DIT$pjwHQlx=#1bYK!vdhUQGu+VCa%R=XyQA72PPhkm_MmHtN}AWP zyIkVWD6rNX@O|>2{t!{aOEMH-qf|;w*L>+g>P9u-^vYd^1 z^0y0BLtJfS+Ujt5ile-9FL{`7Th*6DB@R(F85C~-mAv1egtR%dZQE!gZa>7A&Ldhs z^EYGDR7-h<$r5H>AT>q~cJu_Vt6Oi0C(;eXActQ7XlQtN6OT9K4iQ|mDXrIdP4kAN z3d~f#Ql_%ZlKHBT;bS8_MN+&Dd?|-bQ)y_>nV_jI$AK` zS5TEud}9Xf*6Gk<)p#X+nu!-(6+p9RW@rxahB_kl)B{m>Xp+ovl?tBX1hL0mS#9;9 z^-I1AJd&>RRdI-_EA~S8Fyoe5sgW26H9P1yNtM*GG2{a6xAXARK*7rK#Ro zSMl0_S0fXPR?DL4x^qCwqb4HH2lQrnij`C}9E`z79sJw9cMhlqz|=Bq9bY}rB)dZb z8luT@YwtJj#$u$!pTW)0=-ZQR825JXqaNzRDzNYFGR=1;i#$IO3_|X>A0BNpGxgB< zehJXrh(_5Gn>~-3{^kYv(Gxu{e|NuR$_9M*KebzK+W4KUe$D4^g5NRIpw2|!#N05VbutkLpIc}DcPxj*fBQK}H0s?bJN z$J3OvLtE9tbdqbt+vpB$j6-f_8|xH4<7`_-_gPlDAc+j0d9^L`V*>kD zTh@Jib}K%+rY*a_E$2BtR~eu43Lo*rR!H;+JHmMpWkOM%Gdnk)BbZ|y_enCHqlymzG=_iZk_k$TvkwShIWgeA*VWA& zp46wG7%yrFDJAh;+l|-SMFHkl?zdh!lX7d&RY>O68kHt#N6o*+Ip*ArfrEYo6_-?) zKd3do?))oW11P~kRzK=ing>$;O^IDJuRXhP^Qd{+-;}E|1tx_+ae(i~Nf)rom8gGn zWD%()w^Ba3r(PdivD~yVU_{iQZFgNS{Ho1vsa5E#nRhO_{_9*t>aE{k6JH{@EwzT( zt%?HxGR^ehz}dXMy8#{dRxR2zEHA2Cw)c~t=SB#!1|BN-c4QQVTshd1cg-v(qU&m( z<-~92(?2S-M|?L_j)&6?BAk6oRy&W``T#AGyR_wS1T3S-ItKhaLX^K}B+AL^*b{mz zo}h-M8yH*+d1;v^lg7JL%}vjJba-TeYk4n9aQhi3WB2atti`jdUD1d%Gr)GiJ@fZ> zen0-%*->vilF@Csl$Pa}_WWz$SYz5g%def_G!H=z!m9goMePygok_!y$(x-gu35f1 z+AwHMW%Y7ZcEGpPS;qRbiwAcVc${s5C#c6mPq|K$5mI92=(Gh;b~_405dO| zj2(qeBx0we_q-v8YPu)aznH2>_)gn%-YhGFt|TY>@1d zocJv9TaK#%wug0_it6DaeY4C+K!hC(M+Oo!r4n`enDCgSr@w!G838-oC?IpVJ(tbW z|H6XumUf@NtJ4Vjrz}1$1jva|_{$9NhS8YtI8CEbQ0}75_5JZH6YZCe9lB*LXj8OE zsIA=VV6AdMFEh%s=1|$eqK@%fW_F_TF8SkC{kia@huizKt3i^+0SZ0Hgcs_nqG5SC z?sNvI@W|gCDd%s`N!Rurz=)-0T&}>P4h)TsEfCn)l-(y>-W!-`3$Jn zToe#v%jd-I|HBlucj$kzFA)~<(Y`lBP8Hu&$O|UTTc>144do|!9;vr-##-gul3w3N zx|R=&QXTxXV3NgL_cNOOLT?eK!5nb;U7(1^#2glUY=E(se>&1OVTGDwl4xUE)4<5u zmBIU{u(^56rLPb+td3$U0xyVyR$b?mE!;AS+p>|^gJjREpV)m0Lx{u)y2P|lxbCaj zzVC@N%?W%MTwNP!TT)jE2$fH#l$B@b<&bT~)wEIIlI+hEPL5g^r9xPk9XE6<$LzxZ z8+|hwBw-}q2FN?RlOj}zLHU9%?n_2tXeBY%oQ6%OW54NEaq=QuX^#@Vs(N~47ow$-ZexC^G5v}o zIKzoA+(L!{ga>bV8hcg9UyS@30(3FQ92AGIP*&7Kka?U*kK47uK&PGjV^_3JuG;CO zlco5Xr_3#wAYpEu69V2tUQrLbA{fs0Hu5xRmauMJ{-2YZI@j%@D10JW4TlK}8Ep&6 zkE?r6qgm;Hh{_TTuN*t5ve;aHH8sF|0cQQDJ&cAVq==QA`NCas%>75s287SK-FjI# zC#pliFx)r0;z)4=U|8tu+RVrM=V*=Dm4)RpYmH+qjm`ul*ES%XMF;2yXSMMZy6}9K zgpkYeL7Jsny#hjbJ=x)nnh)$BFT%D11FK+V+>NKOeIA($n1)k z3HX``pJni}dRhfl>7QN~PowtyCE5$`Ng8`U6Z_R-nTqylC#ey&Yb#pc=K6+SNmPc1 zUd?{nZc8(|(q4PbLLN!3x$w8yaSp@29W95xLb-pLuJ2zfr&i9@u7PW@PoqOeip{Q@ zXs%akrzr8zZ#*$`ke01Jgao_9OyFLr7;t0)X+f$;9J_xjM}m4z=+ z>`-$xhuqX|;6w%E=q0DpOzlAD*PL68pa?Tl+li3`TCi zaBJdSlqHH{?K0&w5m|9!3$T>YE2mt>D0k=cZhjZL?h%F8IrsVUO_ltjQ}$mqComrKTAwGE$N0+$k&TQfOoi=CIhlh z*Q4ey(u;j{fFX49LU>`7OE=x?JzaSi2sRtQRtyki0wm^B%$~AT1?vt%MwiQv^@2@| z`NKk{-%9okx=S0sL=$my64Pk}t&XSQ>#7D$YTGtjP$t?Rm&hc%HIxxpA|! ztaRw5-`IuWTaj#@j@>aFjM6JB(O}cNeuWL4nAc2*Tb21EHJ16=21Ww(>QaNz2)2}qVue4xf;Isr;r4lmtH+7eIA_kF5ll`LUG3 z^WfpQGT;q7F7AApu7N?Lw9#rk=r+K&(Ccyo%U<89tKB!=LjIv>zCN}I$VP@APcP4N z6m_`1*mS-n*5b#58IQ1x`h{U+R58Gp5zm0-ZDda7(Z$?ej%J*;Yn}IHNhjl65qtMl z-CzS1Su!>Rm8H|euDS``#0=57vi-Y=g9_S|AgdUK8jIfR*ia743LYZW(Ce7my4!pN zB*o9^|NURp?#}6-+FO%fd``W1m%gKL#~D#?jWwd`o=h2R>6)PXj4`yM7sX_XWoyh| zWQyQNf|PFn4hLYWa>jJ6PMtZT*tHD<+G86JkL=XJE+<3u!vWg{icCG z8Y@72@*E&4*l$Q z+~1_j4g7Zj+VKTp4?#B6r+a}V4f4-8eNg~9ZdP|D^<^7ZkJ5Eqs88)o>ryAVN76TG zaA_>0dvFvGY&4^N@d#VzXZ>YAdpq^&I`?KFy-N_b*Y??Q zS1Lx_G^Zd%bhE3HkTrf*!sT$eYRXm=cv4pV9}wm0H}=@ z{RQx5%AbDM1H4+u%x@to#fSPp2nOo9SzT?2sTL{DMSnK)4;2vJCn0y;S-A>L*`UBE%%i(NiK&m7Lsh^eNfC<>zZD^&o;huJ2yiy@C9F&cLDfl`7t=(6 z06=A*d5&780*4UJ$dKzofdY3iB89!+GU~U;GBE=bY?TwOrYRfV07A}*`4D-j^P<`m zP##BGk5>|Dr`*JaKVBZ*jp%_VTnQvv_B-GMlhAy2=mc#2F~h@T=4LtGJB6Y(nXd(;d;jJFTe-j9L* zbyq!8zLmxiQ_9p^%U5mBQ5%mhc^R+zvlsPKN^LtHz4%p4u3+3kOuX)xn(&6|z73T5 z33c-g)G}4MpJHGktvV=mi!i9^eOjw?MY%CU%lzY{8l}(fqiSDH=#rH7#}SpphdSpU z>c*gjuW%MFY{c&R^WJ#a$QA|**${arNy@2IWU8&26(2?jL1i0%PBz}tUa;rgyo?I3 z3C?@oAuVVZ7X$F*zj1_>C=!u&>fZk}B02GdbVS?dn+)}l1-1bvL^Kbh;-E+18BCzuq;<#%a zT2@ed0+b=_%E0?&PFx|H`dt<*{y5?0*>AOPf693O%!B>YnwafOH1%?0QX@WppLx+4 zbMtTbl5gf^`z)%)KbM}dxcklG!9L5QwHD2dmXE$!@;tF^`>dWeS`Eus_J6aQJab@r z-~RE&-2?Oc{#o|ad3WZYPv8Fe+Gyzhuz#b``p-A(^gI6m69~dhgpw21H--sv2}H#N zS4a~PZDOOmNz`hxF_^H{-Lx@HuzkJH)_l{JxM_L7#LltFuHuZHtBJjL(|-2^`=Cwx z?T7Xu2?wKPwIiAi#+x`0*AFH(Ih;2kNELp*kU+{TR7q(f<(oL3)h9WS9dB$pT3&W6 zOK`e9(OB8!^uWZKw?b-ea(*`PF_auJzd`-dXHaBWFdtJvU?=|)EYxWMB^ghH9XMw$4zdJ=2-O>hn z&hLe~%^^-s;!k`({QJGf$Gtvbp1#jlyz-lMcFM%pMtrYMIxRA+D<)ajzWcqN^R1UV zRG1hb-0hcb8t}-J)sYx@3m&*A;Xj<{SYt|jB^P_oG_d)5kgAFA`{v^dra`^mk36Xk z95y{V?-sP(e0(P{5GX$bNecc_8T{yb@GXN7xgUhr-Xx6{HbIBc%0vXpupf zsgEnZ#s9#Meu7zeRcLrcbNKnSaCe{2Yu_WPXc37+5fLrAUP*q@X8o~0BC|1(=U?jX zCcV^2mXoyM$sOUz>6MAQakXa%vVp*$FI>4mwB)rG-BhzED&|;zVpIwSI>VLgLdSK4 zD@n}9yyhS;0s~(Y6qnF3o?P9BKF80~jx#5ZpIv|i6T|ET*(N}waTQ|0?8K`d>U?9lFH_``WsI4^FpMSO#x$N@?weAiw1kr2;6nQoeR3KZLjRtANf{R@l*D#(U5 zBMZu8lFF3C=1*6YpFOYO;`%f7r`G8V4AiFIWATUf=8qHC6_g9nDuKMj`m?+7%|CT0 zKYf_5v^`LW9iGRT1;~+k^%wh3G|nTNfbuq1&rY|V{}LT~y^zxSQ-wdmFRx&W%PrP8{C$paWj?Tv*#W5(;F42&%LRKxJCs) zNgMo`{jH2wKOk_lauZd`26Rht4UUxZro3zU`K=9h+qyb!pn|vSRF&>0{SZ+-_|jFW-)=@pG%6K7P+HvT@tB zwf%UYK3`6#erWH#A_8{Xhr{O zPS7?-%0k^cwaTxfD)Vx=0_NuQbX9am^@*8E@oVf5CCsUgn%(oMH5wMTB#^b4sXFc* zwfP-Bi59m@{H?Ec+%B8x54WiMoluyQ=-Q|vZZ?4|^WO4sb`w! z)Xxoyo$9J+l5mKR^0|k%vJf;`iJ82II_Ko)P^3;S0_4%CtgIwPblbQsIzo}I^k|X{ z5VQqKk8qoom$0M8vc6^Vah9!#=j0MPThIS)rCPQz&$VTCw&nhA%eQPVI@ey(*?!}9 zdzocN)wzz_ogH_7cRaA{th(OHye?-0L<|JCSkI|PUT>KXu9XfjXc||ziz~jvm9pYNOCK%&)*tK?dHS2D z6{t%K<{RwrjjXy&)4I*Ox)1Dh6Rmpe(|R1cdR%vU+^u@O(|Y~7dV>Oc_Uv?@;CF}Z z^q$!1i?`}eOzThS>Oa5JPqiALcJ-NC>EKHTm{w1V(w>%dJ-xB>w9M*RiON%>9c>Wk z|D{&#ACI2SJm9Fu6=y-)?x&kL|LqltGOKWRKX9thh**)6+WVNMfqor{}@Z8b*^~s~Pp6&(o?o7uIuZx-Lq&AnTgn_E~~So-+yzn?z5 z|FpKY{vY}CKkTQ#{M_8w__?|H^ZR#!?J3x{e*WCv+WNJ%{h#MwzkUla&z+q=0+#bX z+yAC-{{L_PzkUS%{{8!Z_=*4LPX%B6e|8YO_@C5jDVd(xPKV3r1rGdQs8#KfiDDEP zMN!0tJu7u={9mY5#y$X?vE5iZRzbR~7xb*@_IUojUDsr%=KrQvQwvf5lUiMSPKz9` z3;GYWdLQ=g*$wB`dv7|EzkPT!*n0n6mH}8)&E@|>t!5sgskwGEy&tdjtUof`(fsjM zu_OPcYiG-+*KKD$z8&s-Fz}X37gcxbYWuoaVT(CB($)U$-_eS*K6@W^eE&Grc)UjZ z^nX*U>V{hy+uv5l>yMs#ZS`N&>a8!YHU9kG`u0)b%Y`QbY88eIOb5wF%~9dn$Bqi9 z)zvwAmK1!RA?t(WFytd^=UE>@2L3~>`rgRET!~u9ZGGLZ?9bIs(QL|J&wN;S(@-NdZsjK<#tVE^5^&e-pczfyvkuHX-Ac@F{x4I zIlJuwYISBis!OdbgiZUm-_D&d$g<~|GL86A-JX?ediP(Gp zMXt!+7!N#^A%Sb7=r@kGeEi(GPDAkFnr#5OgaiKTr?#QYLBpt8LO!HJA1ey#g6rhq z;FAyI45i6yzfQ&Px^*eaxj?9N(Pv4Vh9*=Tf^6Kg8_?_F%*v9%H=_8wFV9{# zJi@O6>=3p{Dn!~*GyaE^EdIrM>H9uo8v#_zuGyv$r9J$oadsph^znZVm^;tT46{~U;Qz8@5qss zk#hw6Lt9GvH_vYKcC_1Lf&+K-+?&G7k0EkqMreqHf9GrJhC^w(&gQS<@{oR-C{Q>U z!036e8TR3u>e|6|8VY+aeSBUWVgQE7GbqtwXQ&bd0PCBa&|pIZ@V7sQzTz6UZ{>{I zcUe4MdX4~hZzG-8lZI-{Q6LGO>Y`4`HnL6)8M}F7K;a~qfn;28#;DU*yo zuhDQ*qO#%O)5?ZZCt_d0Pp?Bhjm4)+Y@;ML;Fi(=bmaL`v;$_l7}Y?C)0on*^Sw;c z)_-_Xe?U%4t3BV{xDT$6S`f0zbF?*EGL=l>V~#3VC=hss+1p{mr2w$}1x`^$m#S^} z_M;>w0G8IH6`Bxjq^oZnajJ(Zt8!X7W8DMdB1)7%-5%oMz8$TFF9}^#RA8;$MLVN3 z#t)JiCzV99E39lpS79IpB(F$hH(JIvZ;poOl7JWtT(^8A{G4P16p9d26;+8EDKXH5 z<4v?B+RR5!(M070x0ITU&4-y{8EB6IqS4`}Bh)K3oZ~KhQLmICEtAa((fKOS0RT;5 z_C+P=0rq|^2YgV^1ioc8uz>9-sW+$A>Ua-Gk+>#OtAHAF`)K)X$5vvJ2|9ZW`93d3 z5i3~COc2ktA?MQ>Gz!#(Qs-u?1y$871RD})4stS#gy9eQrC&dYG7b{%wS=R|aYWBE z9G}~u{97L27dv)1px zOoT?g?~vDzhnG(5@}zcty<(7nu+P%K5LYFCH}iRDW>Bn;foQ>&9+42Lso9<2rs>^gZc)V;GJS3s`sCZv)S_ z5uKT&l6^KG{jp^tyo4RnoLKyK;)Y@5z_)-eaP)k_VQuTQ;E1;`gESE~{~XGB2d~E) z{nRp~7!DOP^m#Q^RbMqbg`rT%5$NGJdn3w67bl&N1KyAIlP|w_VAzE`s^5&;U+;Wd zs{wJ*^5*H?E8l;I@gdt!0$Rj!sCm9;3(P$%;uhfvIfx;0Nmrlg(DiT1{|=%c!Xy^; z1~Kg)y{=&1nZk{T-O_gi$;eT;w_%Zp1&9K71p05)(hX&Ms5DXr7X8?T#7tYh66`;C z?d>M9^r?yb(xH-yNLksDQn1jm$jLaLuk`^cA55-k!0S|q=i-N>HiU_N#P#p@Uk!o8 z1!*;ay)C7Zp^#hr_@Uv8MHv%*QJM!75(Ua zAr7AOLBc;@_$jS+piP1D`fWww{=o0&ja1>&@BDAxIfej1ap@eW&{5;PuHtvYjJxJ- zw3~W%t;er4k3)yOwS8L`(Lk8Cn7qTVaMkMyL@CA=Rq{4jYl6>{lB;+?R{>+Q=O z?L=^5gZ0aqN+Jo7mYP^vuW~i|OUJR9Bk%w6gNSDoDyJiAU8?JYUYz@DQ8sips71pA9O0?`&MaJx;e=uc3dwJg$a& z=CvhyW%p3Y%D$@~nVA=w&v2Jr56|Wz)&EQvWuB6cJ8JAq-uWpdc^=(K*};Z`c(%vl zzRRdx#iPQGR4RT|IP*LMxo|dp`K_pXBXn<}o1M&D|olqaR>HMyll zQc0t$P+V9t1modUc&x7;ici>#Gtk?E}0>w$~2 z5ZlfcbySpdurpZ(c{&yyeD9{%>}Kz)@#|$#KF<@gZgEEw5~iD9`0%9gcc7?Tn*EiS z+XGiG6QNh^_M-{3Gme-3oPqp-T<+OA`KA9#4pqc{6jYbs69@NaOo^gF5~F1PJXp zh@SZY-+LAJA)d5NO*RbV*|j*m$wrR5n^J~p_Loc^+4G#v5XkZ@U9OwrSuYq+&1sT) zeN2P5-m8Ifc4(K!Qv@L0Qj#*zMCE5WkJWAe&?( zrY+2?7QQQ3BQCi224jvV!3gFFg=tUWv|%X@A*-E#Sj{;N3_(X7*%X? z@ev!I=X2_kAn3K(hUO%HhFyv6jb;z^=9?8o539;hBrO3962ulv z$)X8SC{|~IIkG!NZg&fP%J-mX4eBCZQB%drgE|!YyJv%f zSdD_kV1C7kh!CP6aG}-A;HnxNC@wh;R-Y3aQ zEYZty6cJqL-V|y+DIZ_6=0v&{oG9FvFR0%0j`)GnJw<{0kA)Uo4JkEiW6kRV*PzYj z{9m%J`B{(aerX5@IS9;xAvU7W>xjDWiK@+wVl50*W&F;|0*KOs24$H$w!zRe+S1eE zdh)_JX*%vM+QysC0J(Xi=|^>g>_!Vs4U>gN>k4K(x~3;G$+sUg*)P~W&Tewtr`B0$ zN_*dQbGjtc*60pzdg;@gOAzS2(ERRolm9~VYr2+1v6c|cTu+}CX@{052j!TB7JkB( zgpW<}GVhUw@6#&eGP2)q*1yl$mwof=eG_?Weza8KgH~_1)>1z4^0roysn%*4;TpQO z-y&@daKR>@w)Uj9RyyAHg|^(&He5DOw@iDgetSP1&tP_YY+d_EHuu=C_R!O&Z%-W` zU!PXAoMe7!@cp9cKI`z|`Ogp4T_0+8b(1RMx6u%gHP}m<<~AC*iz*(SfRbVWb+y#~ zla9ONAEI5LFl#`LxkDzub8#L5)df|#AkQ2+AGKNTIe=F+ajh&bt}22^_~~1pfI&4~ z^ow1$6FT-6I+9qrnto=zuf<({>}=NS+FI!RONU$7vYvO~W_Jw5kHMKocN706p`!P> zYtpme^O|3l`mSRK*GC#2XF$UjfG`7^zBgfy?gP!_RJ|Tw9w<2mr0&sup4~0b-hEur z9k7ri})>zk#+IwA8`56^GdeMTcS4z zH0*US5H&F*OW%E_Iv8#<=-oW@rfks4cc^M@Fqd>Fng3bZNNA=bqQT;x%VM8Q%&<_H zdFBX1QRRS=#Q-FKII?S)q#a6w20+dLH`2Bg1tDYxz&BA&X5nop9ybO6qkx-GW*iZe z@@C5ha!dj{G`rYka4>ev|B3hnf`3UuV0>aBv^#OJ3#1FeANhR1hm@?EnkNe9&mG&R zACVx!;{rb6VL{qRqaXC2*6EE*4kvkl2AEfxjoA`E7Ds}l zwE?Qt3X~_rcWGMe7*~n`fzT8Rx1qOgdaaGf(wZ6Ry8tQn@wZ#%z5LC& z@}r;x(D{RYZC^0K1e5{^5LkoQ?gC=hx;X^3P%uPB>7qdFqh_&wiB|#u%o!xbu-efC&0<)m&;^(r5hB`C zmX1?U3>Y7?KI;o&DC(d}07zF?UfiAdba!Sl_p@a?lomCKZw;bK0B_%&A;2yl{2}2% z0Z=pu;j{s^S(>d{T0C4j+1JL`0^LqnVq*ZP$Msh4g4VTxO+O?jVtu`8U7cf1#%hgf zY#fT{rgdJ@W*E4>S!p|QcPc-3i^_T3)fQ3e3^u*Hvt}`HhZ&%7HoBSmf2O^pIlgG1 zvj$s*Y#(=6e%SbH31l%&jm2&fB7u0u9cnB<$h@viH09{OH1}cY7H*4!YRkZCiy?HY zwqvUy7r9pfBCXjcseT-Ly%U%SPO7GrR$hc)K|@a<5X_3O05Il{RB&GLy<<#^1gM-1 z^pWG& z!1azNV)iyO0JWZ5JyQ+q{q=2!QZr*=_+~qZN60cj)Z8eO-Ur?cS%G z%MV=hBf}Z`Wzj&KfMJ#ppx5;sO>!Kg)j1>>DTX}nEBght`om28v+mvFhyF%$a;MwH zT~Pwh1UeRlI(DBNX#gjm!Z1YJBNGHz>&UJE34DqlUB_x*sLF_Vr0&F`92)_v*xZkA z4@tnc74qxQt15#5axhc05mX+`#;VMyhsK6$zu8u!C19PT9|pu6X_e+r3Z%$EcE=&} z=d7~>)To4B8qH;Wc0#ZGj`jh zRhFG$ekliz^9_$z`iXz>8ir6&UsYKsVj{=QK8-PEfXd&)QkC<;LHP<`Fi7l*pOCiI zeQ&xpNjcO8N1Ry1ffi2h=5Ym4U0ddA)CCZ1IU*0w(3#<^W(Xx>s0_Wjz8n+IDKnZY#kvgLM z!|iE{-28M=aPOy@lB;MpdDZ76T2E+|@{jy(#0XnAD_v2Uz&;W$B z1%uf)Wsfy7u}M9b>A{~w7Y1&Na6uaFK7LaOKIPM4*NzuZpKAc4(1CDd=>apyTU=Eu zSOj^_q<7!>n8{EFM;1si{MH^hL7qRjk6maV+QRy<;y~= zH9ZOOo~Y~sEJUr=rb8LIpG*(7H81XZD=Hd8K&T&k`2_B*6=I<^I$#$Nr)irzv3$Kc z0g?Y1%Tg_Wd&c|cOXtT`UMow3z0rCWu!qS?uDh534U-4K9LsO?Jn7O!e^ldNRxe=N zIt_9?%82Ud-TL`Eoa~_xwd@~Fp^~cr9jB80y(HX$!wwD9E2_}ynU1ekS>P|C{vt1C zbRZL_W7N2#M5-(c$^BG9#*^!)SMBGL0s*={(VtVek}mt=f$wm-+4d%RMcbQC)yUQ7 zj-S$t_z8rNZbo8wgX;*fAMexBs4tInDV+Tv4!ey0=rtG~NXS883U`fgrT>Z?l(ILA z|D{Ssfh#)P5|V``G3g_Ndlt}LP_Qn6!RJs44yzLI21vUggI(eE*3qL2@APl>s`+%U zhd6mHtnO!(^wo|h2u&r&-mYzdUU4TzW^FJUw^KFlgZP0L!TM>g_@%KKd+M7HlJJk% zx&qn{?dm_$sPQ+a^I=g4hFA<%wNu92%f> z1czeidX`b(YvSrm&2<6t4YpFGL1YkZ9ijDPZ#N9#8i{X*!ZcEc1PI7#JotPXpC&cH z%#ET!#Amz}$?D;#cZl!JH7YE1;up(s6-^yiD&tgLJE zi3~Ab%mHMQm6P~keHkvY!}N41OoiN2tfx7J*M^>BpV)bV)aGVhKd&!1<|bo zDwT+RkB+eGMnbVK^mfGiZuV$^uw_VqDxurb>zFCo_eIXAKC6aM{`4H7le0j`5@2_% z!;ImxkXtQ~Prw3DiZ1%!nz#q)xN=`gYYrwp^z%Qj+c0~GFb0}Y3plfW3?VZ(^A{h? zj&PPxJg^RVJ4)$`t;z1z7gntDu)XHOK+Z9Sci@Y~<-Kx=nkaGa;yNIC#3p!8?1HId zba4#7X7a?U8gS-Yd&uQ1aB}3BCgGR<0Nf@jor@GysvvUt_Gq#3;-XnCFvxk!XS#th z;|_sTg*_WHqe`HrSh+*tJVJbc56;Zo{qTzhp0yTe@==l0_s}mPgvZie6Jy%o zs+l80bGz8g#{;B0wNn24064)3eQ8r0Z9@;DVY?I@X80KI;QN?W)OM80UNm^Oz*bN- zTACr2fh95j33xF%v^mv`x#9<<~16RQIXpHi{&tz&fu>zU&A;?m&_RfiTjf`v=@%4<|QsR}f ziQ?}D4tvZ)FdBoOfP5HC#A0kdfhLFHg_8X)0k{adS2`dege0q4PzlNI+fLagjH~zd zr3151UIbx-+`$lM5#of`TU8=QQatv;AQ9b=(XDv1qQ2y;-M_J%JKT82NY`u?OoGu!ec|_2Iw|X3leS}{(4a2*BN*-WR0)V)vzh`-* z@LV^pnkTlXI9uh4uK-nD%VxtS%cn)ZlJA{&yy^(#3yGKciNC9ef<@c|F?$IKf>v#M zi(T6(WnR~R_qXOGUJoYxMM(fU6VglxPpO7jtk%~{Ps6buwb$3b_TRpeG8f`c7bLR&Jo=BhN%jL_?TmHvSKc#8I-Y%6^nCp7I?EXrz^5b{$pYKI- zejmFe-b@YnUo>|5t4L+ifP%3ov<<$pAlM@B2iBulzByJb0Ax*Z*o}<@#I6 zs0p5P@!?D{)ah$0;YQ~|HgV~AC&>5S1t0F$W85Mth>#kYN>Genh=Vnt7unzxSW!?Z zP`-Dw-YwcV8c6tvajXA;=bJ)&fIcw5{cJP<&%LuAIsTrz&|Z1= zUIj5F7=@Bpdxx-v(xpQ$2}KV_Oz*5$Z@FuiqEavFw*s<&l_#cTNsYv zUAY|P&s#YtOoSRb*+BNn{tXd%eQjHhemhQSu{$p>Uc4Qhkw-`iZD>;i>GdiT%cvyU zN9lG+Y{y?i$V z@T}RX8mja}@zD+nug>~wx-w^HNx5t2QFE%7`vV8RRGkXrT}9M1V@NQCilI*i@hJvO zEYOJLD26!>pYC!i3to!Ccn2cRQAK$h89-H?!Z<27mqJdsk|JkF&2}+AR+n|{b^p$VbYAoywXBNhq<-k%J>Iz3Rb{?pI@7BOJ48L7eCx0%NsWI@*aJU&7 z8~Pj39HPVty~kXG$&AL(j8wC>fXwIs7&W-=M_0Qd$la`8w~VOXG>Df^m;xyjOz@!u zKC(U>!I}{W=H`u+R;_Ns{52IV=oz`Ln9^!~95Z<}G9Hp5GYt3#QaYcMN()Co>103q z(sN4&MkuCt9;dgv6K99Cmpvg^`YhF*4dYe=O~54!2eoeg>71`=x*q6!b|-cNz%&(F z*FPCv9gMxn1jeYNXsP9MqcP2=nmCG)@?)*>#iocPu{}mT7Q*xq&bPR8Zzj zz$pFc%u$SaoD{E?P`gVrBay!lbvu@n>dTn`@cTnX%7-{?nIjuOI8x19fVl(5$kl;t zlPReoZ$nE1uL*7*a~LAY>l~7yh(M^+r&e)SHVnusw;UaK-d*^MU+yniWZ&Kd>4ARZ zq`u&bQ6UeMA|3s`)@WL0jG3Y^QK<~sUJhY$T09@H-yL^z03bk&Awm*eJBv=b^j9{h zgM@(s#o~}maXCCgfvhGtvoI=9^rdDddTolwhXDPeKsq!v{$u2EPEIg2MnE(v7bP}4 z+z3lhmD`;lV2?j=of>2}(!Kk|x}y2!r$imH&jW>76x**f0*x5-e=AiM78=OJ0`3ffplcYv83Hub>FCF@uBY?wV{&>WD;9 zF6AmsaPj0}s;-%9#BZKSQ%Wl`;JA81I%*(eoSq8~4mPbiN8MsUW5A`wovj!JJZ#BG z6lfgS7c=E-&5sQgnUbXcb#qctAA5&J`?j}$8+B0gmFYfx?dK%=568k~YfKc#C?*sT znTlPIErL6@5SmpM%|>3J)BEaZ0nNK{zQX~lZ~606-@(k?1Y&5cwL{8@u0iB3C!n*0 zc?z$#JR{OlG|dd`W;WoyA)acNOHmsE_-2cfQy!*6xIB=!>O|VKi+N5|IHK-@(UI1J zJ~mB+J9)03pE$3`3c=;Rr&PBEmxHI&BGuAT zbVG4&RJm}O^>#CEt_(-mGZ(?2NAww0FuVg>9j2@ur|s zgM!5zFZbE-c);WTD3a^47oNW#;hHB*QZpaXik_O2^9#DaW%8O&=RhT&Fn9TQ>* z(;@zGUw+1H*+==W6Q1iXWbF`Ssxzj~!uzI5kHjb3yXNp}t-Jad4glD01K=Sa`O&#N z-Akqi2mDOMzU6+{fSc`5vjXu)UpNo@&u2JGTaScTpK5D#%x0%D5Uex5T@<;F@c3fs zgGcYD%#+C7{~rA?Tle9H$Kc8Wf+>;j*X*7CL?IJaxXna@hJJz)Yihy{Iagv9cUJ_d zCGMDGDj;EDWDU+G{7{OqYsMUD+8Qk&1=h%aNTHF?o51S9LX^Fb7#k8h5TaGXvGHw9 zbY>SWnMf|ZHkMlz`0Y=)5@$4iU{sov#T(teB^2LZ3Ye&HpU_cUAT3D;%J#M;GWfT3 zug4P)m&95vQW2I-vgex}%w>#`TUp4B2Bp#-ZOve$Ele+6_RdF7-iD|g4y(*qKQmZ_ zVOl{>)FqEtMxc}=qc-MneOWWZ*et_h$Up?Kt!GRnZoGNVZDV*fBkuZy__XS-Oow`+ zDVWgyHX*aZBSYHwiKmybqcj>ciaJIL>uEtcx_kv}MGVT~O{&k-K~mzS?XT^NKnhul_D1ZrdN1gBdw;-W0WM9pI`Ioc4D6Os!;f8uYMmdpaa|Xj~K#f?>jc*B~EcRv_e7`j#$o{}(;CbNi>tGKXY-L|qO^en$!9hrGvJ_D$H&=1l`sM#_Jr^A5!>KC2_ zpr&c|$=(c0acN(uuTFKs<{jvS->HA@Lzh-d8>Y7qCiXyibj?N%j3Hq1cOMxb1*qLbggBs9K9 zGm7M~Q2#v4vL>PwLa>V1+}?21x(=5!Q+hb&v@^X#M{-RO%IA>mP(<0h1j5korG8{F zJ+81&1rhcKAQ80Mdk~}*3&9}k-PC&wmd)F>rJgD}AJ-Ok%vme3%lG$^ z6I@v?1)OhX5-UwE&@kGp~6bK8(ekE!hUwM=!#W_Jl~2Japbzs*8z4UxRs^^7`$ zxW3QrR!`F>hyPmMSByj@>oj{kyKp86$MLfVxV_@{uaYto32UdiKln<*{AW&n(OuUon5zaBvP*+@LU?soq$~609-O( zbs-~b!I5y61&CUE8Ojt|vlZT`4S$y`walMzTFFe}vSdt;dvUJTdq(}7Kk6(0r%9o% zRiOn^Ft;j4VzbxFgIT(J`pUHZoIl<^V?u-sALgkAGFc0@z&4V47ND5d{UU3N-9KPF z-yl=tW_x{MU$t2xc8K~m-wg15Lwaudz88x_MD+^Z_M+_)iir9IguK_!<8Ov zyfu6CEWuL5hq2;2L2zRBHa|ad9ZjjtT;+mh|LY z4zIz3&S#DB$#VhJO)%~zMgm`!o?3c2*p8e*>SJ|wV?G5%)=lFEn*KX4*mOS&8GT`r zdhPUAo6h&iJ@B9#}BLfh-RQg;Nkvte$*(i;JQ9izmg5 z?n;W;PE#WQP86UZeD5bIu3b+;VfftKXltd-{%BbO0xYv~K>`$nFhuh(DH@R zqbL|G)h~JO`}}-QpPK`gA$v^<4IB+X^f(>JV-?1jDO(T`x)38BLs23q8rWot1vpcT zna3Y*kP*A%F^^+5*G<_>UKYxFvwgGT;YJdmUfZaR{qy}OC0*b_CkKoj9av6!JDw22 z|5(SD)OC!7s)bf5@$9WxgOoNDTdOxr2nMk-gKoZ=dsf`;Co#(4C{64FirKu?$_7HwpddgZTp(H_$t2rYz7EIoP}MG@&Jvo_8s-xDZ0{99H~a;uQ}4p zbe;tR;#r&tX*N+(oSC*+uQ{`x+0kssS@4!}WdBu@4+Om`dtH*Lw?}jPjo;Nzu2eTh zW@wBN$eTMqlDBmy&q&>al$V;G@M(_B&tC3g&BOO)QkmXYWvOx$7*HrS%bT~nY?gjK8CtJ^?pZ(Em!r`|XW|!8 zM%%sfwrUe-Uh@7W(84i|*-zpedBur;oX4!(Vrxfd+jcT6BlO{X-shXaH;qW4&OcYb zZgMy!WkT0RU^-t^HzA*eP}jKNZ&WX-rmQfQSWZK@pT?nGc;Lo`pAKMy=#K{d(+|YsBP;{(F+;xA*R==}xPq zXUpboe>hfFykEG_>J(%3wd_U9n;tqwM-(r)CeuhQ`<1jdZ@uE&uIa&i^A$D734ZOW z65L~<2o^sk{H7u!V~8W6jbtoIv4DrP?&W4Z_Wsn={9@{>D3wL&Q4e`QeL+9dCy(tT ztEFq-tn7#F@4gD_zx&)#88GCtN+pn9HNcbo7z!puot&I@JQ5neEczANep>a{-(af8 zAv(F~3)iRSi=T>e$KS8N3hq|LdEmFd`3>`wOLV@^bGZNIR959)VY^lUf!HYI)n$k3 zGa+ASisi*>XeVUa$rgTq1#-C>DD2clLCiQj%<7#$>?4Z`7913VlN;n`x%qko_X=j4 zPp}BcItGE`SPKIS2|~i}(GR~;0*4L}SOZdy*h?^0S>Vo?g9J8)(EF4eHA?6yaho|!EP#KimT6#9o`3a6JEH1xu5h#%EhcJYh4cMdWNR>D)zCFqam|3 zx=%rs9H~M2RPez~;97npMkgr=#LOc^t&0W=VrfBzfQohoDVQHc`iSwRVp}^#*LSiP zpcl>j=va(a1HXlt0w8=f9KM@za0nC)rWyqDu9CpjP~fJY9i)P>1~%PEQpkk?g)E-? z-jmk8q|_RE6#As7a}J1TBB8`nG={)>$}z)iSo-$(*ejTPa9&}lLM{iA#ZM^{QW{b0 zA08B$We9L4JW<5*XoHcWY^^cHTDWd?qjg>IM2;FD0vJ4It-mhfSzTDA6a&2-6DwVn z?;|Xi1f?`63$+-U;l0}{lzLAgC|ni&NVkg)wyDP~!Hog=A7=qXt3}j#ft5)&Z&10_ znB~>cs&it&tR2Em4?k)?2&Xl1!zw^PEf~HcEC^Is@AKDdRqiSu!{IqxBZ?ea6WpH- z(5k6S9ok7m|qnOt9t2Q7V=*5K_70EKgD5@{k9*Ygb)$W z^8EAF$x?Lj6YWxYd{$lL2gj)acVDJ-5hNSGc|DeG+Ob4`(N-_NIw1pW}^h$5PO$uy->iyy5~Rx(EBXu8}S(n3%8O4R_ey3x{L1(e^3}nO>6{Ja}#| z)=+;l^E7mL6F-{UtkBE1s+Ph8b`J`r9NKuIi^L5r9zQK}zcbQ}@4i7qG$?T8#ZyBz z=ELVa?$)zC!JjD)=-{|Co=!~Wmg4{?-Bf)z6c6;&C0c%TJovi+q`ZIr-6&m)@#D=e zjM3-w&#R7!Dt)54(1K>Zew1#dZ5u>CFVf>aY$Zl-`fT^B_veke+WsnL8`^%*)aG~F zX+K8@beZAcC1bt(#bOnYcVLkyLypm0B$(6C#{0pSDKLR~l>_x3$|%R7~cII;{^X7AMTUe4~2345xv z^(N<(IR6|a|EW2hWv83#j>rszbZ63UP?Y)ZpwHmN8Fo1ehC)B zm2Iu8c?I}MGW`*{3URsG)aqx^S8sUpOfAO@6Y|Wx_rQo2vb3!1JVf+c?Laa#`p*LX zE)?;ejJV8dL)+ri$YN1IdFFaz=?BIm_2`NMPzKh7&MQEmL8XI0K+ z<6>PX6Mo#=kwfMc-*`nNK+?M$Q}ggw5rx0Nnw;SR0406OU}%a353o$D9Ahw+hGUuO zIfc0oEPIg|IQPxo>@K`YLlr-dwfR|X6OaM3RA1F=^$megQg$>{33JDc88*G9(qcm$ zM+{QKy?Bzduocp`)l0t}!jfjGFR4VKPk{8bNTjFml^=e_kgnODN1e1r&WUD^qqu#l z)^A4dRJ&HslgT4JC`XTQ8P}~ew1OdVxl(y}AEE_RnD29Al#qaSLZ~ERvPR6?_a~uA zyJULQeJ%o_Bow%7J@(#vMvT01DzW|2zc=%^f40NYbq&pP89z>-s6qk$9$>6V&&kCUPI` z6+LQ-@gl|*N!lqs!5{*MNSM*pPc#f?fnSZ`ziqb#f=C?tM@Y0V&wm&C(Wu|!?FD+L z%Qo>4>QEDIoQWN$T}N^MZ?yaw=}qV#Zye9p6qB0+Bjdq6AJl-c4>%yWT!Sw0E(@|Dq%S zpD5tE1cTuI0Oby3wxzOz%!UmC1Z8d5y!rBfPeRr<`BJIskYJS!&5lRM%% zj5`xu8j)5SDUBETrZlSDKB~GjI?O)0qcrA`eau*Ctcrc?a%mi^ecVxL{PolL>(Yev zrwNF%#Ez$ljAcn#Pm=`8lKr11-z!TYdzzwCmda?CYE_mdXp`ntmcD0^?q8O%ZITgJ zmN~7T`KByO;eJ+iS@yPecE__8~@<}&Ux}YSC@aE%}7paUAp#TUGyd=)NSn&Cqu)P%B^`;%VvO4X; z;_~DXG{jvKG6GcSl=qGBrlD{Zu9^_{@~UO3;*0X+Ro==|-kRaLQp$aOG4yq{Q*<3` zMQwF?J?DO%m1e!lelmSU8`XJKRj<4C#;gHj@+i^YIndZ>h`s}8_)n&JjtKRL(AMRFh=q`WOvtCiB z!{6tm)Mo|lOX4$D;;*}Rkm<_bZdW<@=%6?0piiH05L_{k^=vq+a?qH6i^J4ne#j5NBM;XwhNHj+ z5x18wT2)K22cB3)Ziex0nLiu0!~I-6Y!X4M-j**J7Wk?XxP5eJl;c!fe3Vk`2-E7K zD8zj%k0bv*Ju`-;&!uMR_i-gTUdlFCcXT6ji}jGsA<0VmULaUq#;l2 z{Ctg3@SPJ1(i?ZGB1phi31#COeS=n0>qA=OR2+}xP?!z#n$&}D1yMCgSNxD!fJ|+Y zg1W1C8%m-Yy_DpH9H?m|J4uAOytO{bGp|j2ev<2T^49evA;={w;UqVzHX-XIv-Bi8 z|0KT7B@=g&)mj@re3CJHk~w)2x9*a0e3G$O8+TQEtzX+S=3EOCA(D96mLJdhfS)BB z#_GevykbA(>cIAihwWkA1z3~gp{s*J0@v5d4$o7L`*pF>0=y-4yzfN#R8P~gPGg$t z_&zqaR876iK>aALUUugD z8@sx@U+YK4>+fBDpE|CWyLHxh?;V<|L4dSDp6g7GtwBNJ>}I93qUu?_LW7dY*_LpF z@>6%Qmr*LO8jPUzs(id^;SJbH9`(0pDw?7i;qJNBVw%kjnor$}`WqAt%C%R-biOv| zd=tBW*>L}_nC`7cT@rCUszyDgo1SW;zL2Nc;u586k zUNxEoh?|Btn(m8{Z;qM16*n(wG=C@lK+%I(O9B00pwZ%!xaCZv<>fH+^EbuS-mgyc=50%ise~-rN;8B5I z0xy9Q002Osn~E720)arGP&_<5e0=;{w{8&-5D*d)!eB5s98N?;L`+PKKp;p+NRUV* zDJdx#85ub_IRyp9?c290DJiL_sHmx_X=rF@X=&-`=;-O`85kHC85xj-Vl2eD>zJ! zKTJtDOiesYOFBwVKFUZv%1S%R$^7;v`x`drTmGBl0_<^7{&7jcNmWPzD)g?{`_O+%a7UVAG0$*=4O8`%>7(i zyjoqpT3@}|T)*1d{PlJF*Y3`*z1?5?d%q6$e;*$FK05k+{O$M2$)E41f6mVSTwMJ5 zarx)xkL#a5udlBD;n%P0-@pG=Kloqf5B}$9JiS^Cwkw!`c)tGDyG3!^5B80xhH4~? zvVO4FkCZD+L>#tu1hmxZ3Wt)pHTSY_y<2LsuIHS~BmYWFCo0*v^EqgW=%#kMGb=CV zFx%vQyuGVAbTb+sd^(@#U{`@;$hPx*zBFu9@=3y-bME<_>ZSG)`zh9jnIj9a2fpiz z2O7=Q#&2C{zeK52=gxQD|5~<>Uzx&i$76JSSF}`*Qzwr#_%x+#0(;NB&a*EXHY?$Q zQA{sPN6@{~d@1%amb^5X*R%!06CGByAmO~)?$Sf~f~Llz#?S*s@$`GPdV6~j`KT}U zgGaH@=u-K>6raUlWoj;$YhK5YOEz`&N!fDGFohF zMA6!wU|#gT)a3EH2GdcdO*r3hO0tc?cgJ8j>(Mje2>wB@jj>1x&e=GL!I4wdn1G#b z;xLJ<&vBwvS|w9Vb=>4}GI%QLx>0K=Hq8*3%s^GXVeE#j!p2!pq>m^o1d)zk{Y*D# zm3<>BB=(0$TrS>gHccOMmi1_fLw7=Mg{#30ZK2r3^8tb7@%kO{O6DeVh8m^h8*$?d z!AgI|xu!GLm_mxuCo}SIHUWN!fZWf`%i1KlyK;6KZtPx2Hd;=jAUa%ekGB9(+BmN< zFIr%KuEI4Ae54n{wmq+|=CHdX);|q=JktuC{ z^V$gl@u!h?u@&Zhb%?rej1d+5=g-$;@8-QuE;Ftl+;GBa|9l)TS^v2rDk~tCJo>p^ z?>efNGgB?;-kPHYr@-W$FFHbAr60$7@M;xfg+7QWBCr>Q!7+UAxZTDESK3c`={g33 zr)9^q^1sNf^DC3djN$4cIjg9HT~aQvWTTvZ$FAH zVjrs4)`}GqQU78xlP-RZdh^+`nRmQYOuJQ@<@Bk+_G11#)5jKwsQe)+IC8~vBX@1t z&tN%Hh;ui2gqiDCYLd(dMcp%@eOVo(?3k|ACe5&G?F39yDRSCtz))4V-TOXI?Q zD(ZPnM1i#Yg_ok{Va-Pb^kcO**k^kHs`r1ixLeSN2~2 zmcn85eK?z(Mg6}{QskS_zb|w|-kou;OJ?ZQ9XNsI$9q~lrW~oaFt4K|x_poDUmT>; zSWS#x-(g42qSU25^RfbbA7fsLV1IJY$P(wWQ5SeU{JlL>V!ulci^XACgLB~3SUPdg%@?;)63gY#sWrN>q@u$M^xBHxz)q@CP zSX!$iP7BrzCTpW|+gZXK*6>+9g9z+uj?sn<>pyEsm6M>t)K-NSq|Iw6UdCGHYfPB2 zpdN8ZLl2d1$~wg#ZdJ0$3HDc7YgDm2stpYVG18Ge0?XV9ZeEYL0@d)j*0u(CtqQ{5 z`8-izRaeq5c8wYv*WhWlLB2+B_?SEQ-TI=h5paM^^)%SZ)!|kje%77(Nb94tWNoq> zvWNKq+xPdHrK{oWG~Hxm9Tljj)#*oo#+az6R3)^lV;uZb*K@`NRQ68rsxPg;|C-p#7BWC$lbJb(t=4=rGd_rAv(Bw8{wl3?Va z&=9EmS#`)XS<9j1{kya?m1!>{fiy@w`T$CSX|=n9nVUwbeAe`vjTHPVkEp7Aq<5^u z{6In;?liLZPESF#r2&9F|6M?9drJN2k6OI*YEV_|j*?)^tvT*0HY#i(ugIOEXmh;@ z#;uxbo(EjDQT%(Kb$VKOh0nU8bI;_d7whzR&<~n5$Av4NlWyvGuOYm5pOiP&-I9VS zT6EHwX53M9_xhW^UvA~OLMuLyJ9^K8a;pErAUg@lAB^Sj0y+_0!tiVcq@Yon;TfVY%n|($&9e@>x4WlaL^~{R^o-K$>TIQ{48ePSTgC8d_!_YPVjiZfqVFym)uLJ;F1Q~J^$PF_!6eU)u< z`n0g~{l#D34m63h*owWYPi{r1f>^;=?6jyP2g7urZdOQ|6GEb?BF^%MCv{A}+abDZ zl~3;I^F6Ib`;-duZQ9_*{MzqA^x9J9Q!NdcN*4h@z&_aAN7Qv1x4S!q1AZL{x>CF(#r%A{=Ww>veX#T)eDF{z@-tu;*s*W)MA z{>ilO!Cf9pVu8`m?`&;+*jMfdYE8~7=3wZ`$XSW;bG5>^h;OB~J<7jYybot*z-I~- zpA;c+;-2;tJ$f%6a4qqa`G9A2uvy1&A~q1mR$x93K}qhVcJ!;^-X7n@O}@ZkOK7ps&Tls@aWaC+(EHeUHNAVIV~mTFKIo0rw4V|iZj)=Ojl zWLXY3&&+-CLd5)UwSGY#O?l>){JgO78x-*q(3C3Aom6-_NiSV-TaswRHOZe6^oCK0 zRs{L4>cN|_oPhB+eP2i?iH98m5g(E7e-><#JXv)`Mym|sKP=Kb`t+9l+8Gh3Y+UC| zwulvzS%cSJ28_y+v^od;eL}Xk3fG<{c-ezF&m);!^>@a=dDe)l#)VdE{Hg7Ax3IAC zKtf$lvLh^!`HaJWeh_{iqJ3OMTK*PII@wkN+;d!OYdzqviE_WSy(|bWr9`$^1N)Og ze8?KCvqo~tOiZzTI|t*evxXR|QIX{g(6J{w!x2{>^9CR#?E?`XP#9@aINNL}cOJ?g6h&M*Lw|&hes_vrp!=%a-v6ow(U(9todlb54haB}e8v$@ zlMytdf?8+w&QORpYiHRm*fc6eLWE?w2G*-^tLm8Viw!p)P-0+hRd?DxZ?Ib`Wzlj+$md)vNF+Bw{-OakJv> zW|LABA>-L9!o>`+iX!etyOh5t+sKeQ%(p8yL^pv@cN3vedP(}fjbOagTyvTg8R zq6o@r;M2^>Q9IlNXn5)IEyr|g4$q0)Z(aBS7+AeE(TcTSlqqsAfw)%}UWFobugR5K z%e7r6ceK9s>M^`0ff(-fhNBj-v`Wp1K6Z0KEAa{%M@} zZ}(f;B*cm}@t8AFM-99g4X;DOYf$-hXn1oCyu+EO9`QPEP zZ+N-w{7-gYyZyKG|F`FR+<5+f@O`y=gWnBa|Ka~e__+wf?fL&w`l!%2hNHM$~^yPW+hqx2WG(`pnPyxu1&* zKbM!TR#&dp*RD1rQ^WQgeesuVMF!S&K$ocvCKYo6B`H!OixKZ?fS^9tZ z`Tsg}_kZ$p@}!;%_zb_%Tjuk~sZia*`{hrTPHkf?y5pG@qv+N3nPpzIKC<2Gt}FVO zF1Vo;)u_4fK1tGTPqxJ=2W6gU4P)RHBNwn)pFXr0KC^Cf9kM57y-C+;YBnUrI?OaU zjJYkkC+;bVBl0zJ(TO4+<%c{5g=mlRkO)>IgVv6vvtfxfDaU4MQjXps3O=*Hp2P)B zhYuuO*1KPCs8mtE3#c>ATo?1;E_twYal!CE*!$|RtkZ36M3fF`knWNa0THFULkUp{ zK|s1e>F!PuDQRhu?s(~tQW5EvmJodTo|kvVL1$*~+27u0pZ%Th{H}G)#ppPHxz=;9 z`@Yv&&)Gj*Q4*s~^!mavUSYFy+zDGWMe_xij4N?dV-j?4%ra7?*J6_)KWjc)>OPiBAsWYmS>0}wY+?fbO{w(hs-)1Xro0S>JSvy6AIQ37-Ftg1K>?|qn zKD{a@|6KkmDet3d9=RJjZb{M4pyjPdvV2dS%h24)hi6UIzJ{pD$>-&a5A&C_@&p&w zcGk@@It`PPPM9n+Ht7~J^W!!nLScogg-!^_PiKV?E5zj#Thu2m z(41t_su$o@NB;z&349w=nbCNxB2X1@gsMp8ucJC3 z>VKfb=y1WNTlyVS#}G}8lRWOAyo$n*;2XP9U;1}Gc70datJ3kzzgCWYR{U7~sG@;3 z&^zd!&pK*h3mAK!$J8tuRdK3lKUgBrUn)g31_Im%=~ zvHnlAFMGo{l6R+NdAHYm6ua*sZS#vxptMJ&$c?o0vbpYF3SjP|s{GvHS@u?LvE)s9 zX!eaNe6&QA)Yo5ufHx_yv@)bFrvr*P??5quAE&GgnDPLD~jO?_CSkwV@nmuWHTKe_)_d#TFTUV31(_iz zF|Kk-$gx?Ic(<;YR4;W2`kV_wV7K(xU*r%;IsYQj2wsGliXgs_Nzk2Zi)eT2vv!vO#KS_@XNHi<7Xrw5==+~G3z>Yl-Q;EBoMU>Hcq+9&MQjH{;G z!oP{rPWs9*{b4bS{#Sm`SQytyG|rG>t_D}$X$ti;ZlN!@6n+DVL_)NnIRZfrXupdA zQte`bMaHPBNcw_tIQk|~6Ms&55tMUR<2Hc8ehB(e-C{=OSE{pdlPX33o51F4SH#q<1YJ@EsqNKPRe|RCdYmTKrxpQjRqz`r6)UIvs9n?}~v#b{wssJZc>>W2@ey`{CiYvS?#C{i&o zBrC)g8j?@$-Xg_!KS^2;FhEAtoJcS1`MhX$L=&bgUGeG)wFG@xjkbive&Llbfh;K> zG&}a_$w-e@?`VO|3dQke>-S9L-VJi43~5x~IP@DGM{8%dODE2dx$EI8fQg9iQ%J8M z>H6p@sfF$cCCO(|dX^;u)RXjh(U+zooER!PG{lUO=BTQ!TZ0k263z8Ez8<&DB8sDi ztUAB@TOqBo7fNZh`LUvcT+sbh(kV4#SEPCU0$?a6KwEFSkc#r zy5)4g+Tn8M<*m7D&Y{9gXL?)fkeUlt2U7d!iL~oXcbTLsr$^Zz7H>dvk=YRkqvYu> z(JetP%pM+LKcsf!IbnakFS(65WG_M(UstQq)r2@Kms*9m9!s>BRasQom7z&pQKZLc76L92a@BdLRG9JI9=B;q`SPQfeT#}UIBmkV(; z=vSbx@oeYx-?Jr3@R#0qdra9f?HLz!_(2*+9j)sW(sL+CN(LYXk*zsY1R7TH_ zM?2R+)G>wHIEehp3X@FJev=b4)owW+jx&)M(r#y`@?-G>$`Q07EB@Py*k3p?3viyWPv4N$$C4evbsa!G ziSUty+-1R~_U1-MHm0rG#I+Vi;SazvA=dkfgAvQ=%omG(xX;uxA#Y_m{H$X1*(t0YVYmC2 z>^5<*YBo`ERRvNxpV*DL#SOTl(PPX-U~O7mH=d_&lf>SPz?!DQC@pq*n1EX0;o=&P zS>A~H^Z?g&6RlqaYZ0`u5kUxQ*gI2L%f)JO9*prRuWmA{$T#6FCgqlr-UW;IV*%@as0&~0sZG<*T{nBle=f!B{ z#pv&ZZJ1G=Cpa;xl+g=y(GsV^#4e%4>7o@XqgQcaeDsLEu7$g}i8;oJQ5%8&Mj5>f z2fb(tO`8P0Od0)61bQte#@Hri^H7W|A&&_W&Ts8y4ieG1&*wJJWh0zJJ_iC31@Sy8 z;(4_5NN7kG&@Nm+zi<)#A~HG(3I-}F1{xYB5P<(c{v{v=x-SU{P<+YB$S5f&sHv#v zsc9I=t|*i8+Y{gPCKd`L778I23MLT>pt$9ERoMQXw0@GdVULN?d&|djHWrI^mP`NM zShlxvC+fP{P6 z&IS0a2KlW5B^IW>27wlCEh1zsG87h3VIW|-D^OgM6V}t7Z)9a`=4Nf?=WOQZZWf#d z_&G0oBRg{=Gi^OBWj*B?kYqn6#eYtSS&NTei;G%~ja-U}n2rwbi-@QQk9-*(lNb>f z8JQ3onHUz86cO_*I__Cq!t3 zUDeT0*WKFK-_bnS)%v!leYn44WDqhs+&MPdH8$Qg{=R!`qI+zzYxGms$ZY4^1<1g1 zNAGHT_eNXCc5CZyOEWB5TXx%8ciY>(fPi#->4deJrz)ZX;;mzkN} zx!K+M`Mt%(z2)Wom6iR~)q}OQgZ1@;jm^WY?V~SWj`#PE_YaN_4!#{8emg7t{&`~w z|DB)P%QKtNnFe39S@%Ch-8NWMAZAlZ*G1iF52F;RPYEqs3QzBj=lo$a`VM`!{UF-b zIg(Pa8C|MmlNsNfygNlXL-zSEo6&L0rTa7}Gj&^nKFEj^gfB=M!(5MSuO;YN31K0U!Gi9o=a@U`^wfy0cu zDwZgD%egu0b4sBShv)L*ps}PQ9r?MVrjJEwDB7el%jyh_rLRn~tQBKlU&_oawRRcy zYvo;CyEDfxyJ+){PNJ`D9Cua8T{5k6f>Vl1^l`?y=Z;3*1yjsFKdb3p}$aI)w?O@Kz>cp(4 zFNoSzb_>Gw)u2~}A#NXEk?ob>B~B?VvF#p8Z5?%TtT$`i3IZD#kwV0NwOqa8N(#u*Q(&#%npf2 z=@pOJdB5pXnN*w$hw_*Z8#)XVDD*l=KT$<0R9PKY8nRZ0_;snS9S+4}Q{WQM9t<1eKTZ97xF#EAtG>#GS?0I=2$`M#{z&6o zKflyHxuY#l1#|VatIK^irciQU39L2M?B{bp9=%}5S2>`m5$=^EX!!nA0!BI3sUw#fBSK|v^pg@_<#oGj| z%`#iT9Mm6T)4kfr{2uz>45Zp?gtP}Bu%R_Zpb@@?wDL5YahdmIh*cB&n#i~L1td_A zvLfZ&S>B33EAduo79qe@oOV+|^;cQ*fXI?&s;Q*v(K>3xi^#V5XO?C%UBJDV@vwk} zZkQT7tr;uBM=vJ5T(vG{E?h4Li`gcp{SpZcHb>J?l+-)JZ!G)R#kFZ31Oij1lwCAS7K={iRp_c z4ynYV=Pn;66XP;1@c2O!(k{xNsr#Yab~?ZhycsUQg+nOe!}@TAL?baGTR+=ZAerU% zrHZBvJ=^?CTX~cBiQbm954i6{ebmb3yYyPJl@i@7^{&BEeR`vkp^!xWw4%0%-Q+cQ z37LuedX;&xs*3q`u7UR~@rIakEK4ZFKans?aZ1a^6;oGToGWC!(^LIe=ndZFDiSLm zt_${!8<^0}2MVjg`H1K?v7u(iC`a#K)`dBjf7YE9-R6H$c^*gMb>J~!3GSM4;k~BM zx(~#-F{Ts6m^@Sc6y2!(Ign;vuwU2F&v^EZFUVYZZE8erhL>;q)~2ycclc;X^R<06 zM|Bl`4rdP|{K$9vb&OYKyC5xt5swYfa6r2KY#O z$@BymEu8WlQ%kqC^C!BQz9L#1xepfOW*EOtR7F=M z>+aW1fM!t9Gs|kN^cXAJirb^~&k>+82L##TeA^m&YGk17Bq}?-Tf2Bmji|5bQjy9< zg{7Msff8i}81dXOi;_~-dI=bvkvQhU4Ak>7$rW}LDE5ZBSNK^45aq%}udJwOBvhWS zmkr`^e98VsyAm5Q*r)F)b+IvI^bH}q`|)`y-HgIG>#JR!Ugk18^5K=MTZx;KVyo#r z{v$mM`E~*(@H;}4?FIy;|%6W=)o;5uS=m;t+e7KGBS!$xO+}I^Zfl)eU5!QDM!bP!r0XV{))Tl zm%lAZD^(B0_w8og__nMZUOk+x_$BY|w-wF)>d`lSUkaamTh+y`8ShZsD}DBD%~+}C z{aD{#Ma{R*R^c@hi;DZzAHJ|8ID*Nl!9s7?akD&XF*!7$KO2;#oPYxhT_1p3N#~)uza`baN*?p$;ZRPIC*YW=P zy*JSQZ|hG^j;6314my;e+s{spmy{a5j`c(LYEHgwhBq89DxG}&a00!UcniAUe*!%M z7gC5l5cxfjG(9dld7vbCpn=UJ;~rQC9yr9Fxcr{@nx2GCp2P{Bq?MjzatM zH2hw4nqCY}UQ7vIER|ktIZR+lO}Hm&F^)$TC&{%X_p8z**CFnl(j+&>y@ZKxl!*V4qj#jIKR=VdJGHmPfxicFfERy&k7j_MQvfs| zAt0zSAY?os>>wb5I53JoFh(;l&M7bjFnK&MJ&Pj5c<9{bYeU-a1kL<*%zz$+%&&0))e-faTsA_n2J-_s%Dtd zQrHHH?>2w9qGtFW#OHvYd9BjtXbF2|AYA4k{D?Y2N;(3HfOUB)T&N`M@@52juFrZU z7OEB6k|v^J00OoY0>uCV>N^CIDlD=?Z2V$0sPH-R0UvzMsFSI47*p7#2)csKCWwa8^SdAsZbXA03?l1A`C)g9rpBCh@O9 zf{FPEG}Il#l^jhhj$qtpNxQjjF6C=h=_uOgp!n$ij0h! zl9HC1hJluzosQ`mJ?jm64pD}y^7Pl#>GktAYKBw{hdVzI6z*o7#kWsGBPqYdSvp**wongv9XDn2?$ej)5jK%%`DB#tjx@~5bdj}^6M`tG|7iZ@u&Mr?~Ks<4M z0^+ILQ&%@vS9doz4|jJDPcLt8A74K||A4^2;NXzZu&~I;$e5TIa1$;5^h@~jFY!-4 za7+z;Pc1n)`T6tbDJkHpS}JHzGcz-@PMg$%f`V7CUKJJ=78Mm07Z;b5l$4g1mX(#2 zmzTeO{koz899DZ%Sy@?CRaISGT~kw2TU%RKS65$O-_X#|*x1FMe1?d$LF9~c-I92^`P8hZP7czAdO#K_1fh|$q85MyKG zqJ3BWwH$OkWaQZDSE-rysT3SB+R#sM4S6A1- z_xbbZ_4Rddt8EL+VsCHn?Ck9B?tc05We*%{1DDzk4}ZAPcG{1^+fnkhL#b0YGVD;- zKBvv;|Xn_Cd*=c=wdkXkA$@WFwkLN9{W0B?yc#ONH+u3^eDouPD1~?Z<2)7y684 z>z%y9S+JBCD$I8HPg^`h+nVExyg_Dhqo1OhC zCnpa#_cb0KK3-maK0esQ0&H9XHme{kBqSmvEGjG_CL$s(Dk>o=CMhN+B`z){At5ax zDJ>}_BPA^(BO@y-D<>~6ub`lysHmu~+S=N8@7@Jh4e#B%cmMudcxYl` zVrpvo`0-;iGc$1f(89vP($dn($_iXTw6U?VwY9agv$MCicW`iUbOc8cot&MWU0htA zJbCi;=~H)icTZ1GA0Hn-Kfi#00B{;HBqRh}M+EgCIyxGZgxJ_vcvblGitzLA{7HfM z;g?T~1?>9b*=hk8t&EHeP%UzDa`N)>K(zp+0u+g#Dg-DGpf;QqhSR#x+|u0A+S1zA z+S=aM*3s79(cTVe@969R0qKH(=geo-J>+oMe|?UR4^RmCiK1ox>qAgf6`LAhJ+1 z1NtG)ti8d?sKto>D7>?%LU$yK4p%t6l=!4@FydKs=WBPqgBdm=F?pV*f4oBca>@_u z+j8{sWWCIJY<3rZ>w)(0CyIs1S9cbYUWj$DxmM4wj4~Vavpd(=u6;@*aF4r1aUe9? z{RB^3s5<=UR&(zOI?8W_qV56>qAbFV|A0b4P0dV4$HvGAiUSur2QN4G^=sE|^79J` z2#5*_ir>5?c}qx2NLX4J>|qd*6#*eCcP8XTL}4KcLhO%2OkDmn6vQPIBtS?iNJ=S6 zNh`_7D9OnwD=4TaDXFQbsH>`hngJ^qpj!MJ3WckytDBn}C>I_c9-v})c>xIF4eExk zFTfFg;HoO99)W>@pnwDeL=h4a8VXQF7^ox>5fPx6L`6mYzMg=J@DpS>%WQ*E0Io`fD!=^1V9fk=x~Y~8X5p%fLDh0R#;hp)r9trt_~0o z5Zylo1kw%Z1kv+7Iy-whyLv%%b@z66_jUL5_x29-^$!gUzJ2=^Uw0Ez$z0u%>O z7yx_#&;f=TPGfm-aT(Nxr6o9afa8YmWdWdu@1Oycgr92y?7r(CeZLe6&a;JrS`5~-rx(Np%eKR6t3@i9(xsv6)E2QVEcKz0()jb z=d!~_Ps43TsKPTR!`bF*m$U1f_e@7>ID{O@$(^=FyTj45Q(SFq)(h?;`G=FAX)&H& zKtohOU`5DAL%W2Ij)#GPkBLcug++voO^ky>@@s?eZvqfBG|cq$Y)s4?tN=7{T;t;6 zyUHWL%PYvwe@j3>SWr;(<}LACLJ~qkl0w2#!XQLoWkLjmC{n5_=>bBitz)0INBkqntRw4ds8(f zxr)}P@A(ydD6+tA>tLqJv->&KyQaQ*Y7IuAo51l_qPFN(_hIj|SB>Eb1OL~Z`Kh!} zOUZhd>yO4->^X=i?(uCck62sw6_VQt|ArHoFD##XfWUJ)01alK|KbNmrNIZLrNMW0 zU>ZzIgHdTPCk-Z~!E7{`iUz~bU<~@dYXDkGN=jP#*LFhgKe3_spHUC~3gyt<-F?bB zoNXlF#KYgJ2d9+7FFggkqd3bvd~YZ~Hvwn{02kmK!&$8Gy?yw83jX(K0ag!&5wKB? z88;gnez*50QzUA`(dQgOu{>r6xN4r%0^1_Iq*NOX8|!~gj` z#ed3j_)Y|n=-=%y@Kp#PswjO|e2mgjm2mhPsa1QbRx*_O(@@R5LfpLq)X)XRZw6Z!*MyH7`sq+#fdN`Jx2bm1F zfoBwxnt)(#Dc}~_4Z_rE%NC^6d2N%1J8fxtQiMsM7_#NMgBg;Mxa4`|SxwPO&%Rq- zOcj=jRvQYT6=0R9M_>4$Y6m{1|z6-Roi2K5c!y%{j+pR(_i4 zW^8QQJ1BcEvN%5>BL4P7Cn2?+lSH8Udzt$^ZNKO2@AsI%mzaQ@1?x*d!h*#mU~9?$ zKGA=h^ZVZ?8uaflao|rN`(J#b|9a;BzP|_99ri>gAfSUMy7-4D8dDU;`APWTa+ppy zanW{!QxUmf$ZXF-qL{9v$aii}cg1lM)Q8B}GAJbQT9)?Y;?eh~(77XCV76P5;L0z@ zVM}ezd7F*5MWVga|KfHIGnbyZj3H~c`F*vo=)pE@T2V&*UIm%FbFmdvZ<|M$91Gj3 z9hhf&(XBZi_`97jlncaJox#&yNUi56!ClXPfS@NL`cBaQK+VIM`hSL?r=nt{hH>{s3m+QRuTwb}o|H<@F`K}tV&OlniQrJ^Z`5G+2HHEF=RMbh3R z?FrbX>hwj{s+h~+HiE=)C=gCC;u-e&thiVlCn_f^2Z-a{zwA}EAmohXFCF{7oKD2~ zobfkS?#B!Y`I>L3HXY49HG(eS=@RS}NpQMfopf?#ruAr{F~}Gceitaq90WC`p1Ab+ zMQ9mzVjIpZ23M2EZ*QzKQpGs}1nR%{#)9_vCtUo$Z|uKBSNkW^_RqNT?{xWh*$fVl zfzJL9(dB2+F_7JX<_;I!e^T4O3+`~u9mwwBYd`&f_zpgh!>}~&gh}vc`(bzjgJx`)=i+55Bnxp}{LDOTs2nKeNq8-3 z_+?8H-ZRA5AUx)g7lM!Pzs!whQcd2*s55cI#BMj^nE&>~o24gHk$~@WnaPE4fg;lI z`C4YIl?Hf{;vt+Mu-Skl#X=xBO;V7CXSpY2WMov>mOe0{frEv02^$;#(j`J%Tw;8D z;B|qq*@T2JIsB)m_77!mxaLhtN_+V-Eg2atIXN9AB^{XPprK))r-yCqV`lz)%ldf1 zrarKy?}osQn}UMEH*bl-NbFPk`jor=MdA__{f)Q=3^pLH#X(5ONl3~`Ny$me$jizq z$jK?nD<}a49LV4Q?c(=8nWX>KnpWvA?iiRo23TW&FXk6%3piq6c9=gBw|-Q%e$}*o zP_{a|V6qlW(}Jns{im-jP_%}D^bL?NV5(PF*S5EJK$Zcf={v`CmTmsm{tQb}KZFxh zvV;B?Onz+f*jG8!r>CK?(JCMF*6 zrChp13`{AfDM(2`0Jo#Sy(oVGb9`39BFiq*Y(2W}+r-Bk(O#*T=kdnU3&A$lEe_w7EgUQX};xM^cQc^)mT2Wd? z@l;jJ4N%~=1cjHO3lK;Lf}>dPBmat0~R&#SORNWeLVoR%}vd~ zc>>p$fw+9CFaJ(i{z+(t|LY&7=6C5C{sUZq?t&#NP@hkewGRN};jyuIz=r~KBw#@U zwlm-+IX*uAvp4V`P1ci>6ZjtiKfqGc3t|5=?bg~0ut)Pk6u&BtUb8#h9+#by6{WZ* z9AcKL7131uUz5b;sQB&^ZIq+8-ilM0wM&nfWZ78rxp;n|Ko>*{JUuh+#zDH z%v6A9CXjulq(ElE1z#0~e^~AP3DutZ#m*SU{-Ry%KPoMO3j{bxOTa5x4$DjU^9a(i z0i41=`}q6J{JUv6Fz|M4{5@zzmzGz6Is?$?{yxB>M<4@iMjNo z{i%f%<)zcpJMJ=Qv10^^^~(B?li&{TZOutPKPlAPy*~KzT7Y;kO@SZXTz&FUF{-#| z>`Hq!dI_r2mm*Y+(5oe;_IooAUYC;EM-kVA2fcDvuSb-iX-pJ;#12*Qj$lwfTgI)w^^(Hf8MlEu1NM+={Os}k(c$@{zw=jv zC(Pn`CS_qB&%faC{EtdmkgsKB@JAFFwd!hX>+4SQwXvzC37)U59j$F3U*ReHm$LTn zrYv|&|07<~z`y&F&Rz+{!9<%#YoBfpI?{RQ47v0YO^ZM*9V340VYBNehWEA0q0@cO zK87WiqbN=_(TZ}cpXW;*sb_elFZu8*Mti*lr*c$kwWaK^{0DNG0bm5J-RJiQrx6?>QjQiT=O1FaBSmq5|7Ba9abDHE>k} zeiq~t@IM0EBk()|!y|Az0;?nNIsTOocp?9p5BMnm>;t{%_YaUq-~--m@B#Za_<(~O zZsG>R9dNhyckAU@3-))h70x9A_a)qb3HM-To!T(}(1{6b+VF7>xD69dCjl-AG^v0& z0zA=A^icl~a~l5|E#|C*3Vc;(2Q$7qCjJZ~!*H%8XhDyWmsJbglc_{VA)60U{ctEn zA2L~|HwF=MDYh>4KM)HeXXf4|-ky>6q`!`}E7d>U>ABmJ8Jk;PU8Ys1Gw}6TuZ>o03=c1UI3RH{(EmW{5}Wa0}$}(2VhtHKKcMNGoMaB zz#m6=uL&Q30MieDd-MVRGMb$ZK!6zt_!tD3ggEfbZ4&^GnaGLO)-jMcP^|I@IF z*Mvm^2ra7wZR>=)HVHbm3HR+1bnO!i91|Y7B$&A-*mxw^c_rBYaU?o;{~V4!iO#OSa#ls^ZF8(y);=yAW8y6EB9}yQH9G~cwnB{5Mb}G9Z1jc8@1cvY1|U7c)mvr>Dz zdS|CbPtV=HzWe?CdIJN7LqldGBlhFt?h_Ni)6+?Fb1xSc3s+XE*Vj9DcHZyr&wu^8 zd33aWe7yVZ+m~1fO~KRv zFbPo!c?rxt3I=XKwLG1`p?+#*>L2#ulx2%5(`%uT3k+k+zmSe*xz`2Gp=2vNGQifY zc8RNecLU-nzLp(j87+pp0nP6!8_wRjxl&R1vBqg<2!8)5{lir{hJM ztU58zj4Whj-jtjUAf{-JTlV%bV4K4R5KY=#--P5{&zoN!0|SVCN!*;h>dcQ;Cwprg zArriwM-+;+mDb+PCJaJgAI{EDx1prFVqLX;?OXSZ+P=CP$MSa~P`?w!`r50)1B9JG!XFO(YG+P4T$aC94reW7Su=8rykAQ3VRIzg8^C`D1%iKb*ON-|CRobMc) z^15)ZGU6$|!%~_(nQ20r8W={#UN^Q;<|3t|80I4A;+6)YWF(pAwUwc7Q=^qi`RC(wDsIom67#AX#y^b9#gEZo zK^aUis#so7kh`z>P}Hp6Wbru#D)US-@<`y~3lCL0+K{J&bB|I37)&3!Unf;J_SI%# zS8g(2a(JSgy zhy|s4EX!H3Su3l>4u~~b#jOl?vr4eJ^4H2J1XvkL2kr!CmSgBW{#@~8qdJbC zzl`bnU)dXf7;nD!&N%zk-g~n*pZ7jkbzIq>up2Yq|LC;%Y9BiJbpP}ICl6%ygDD>( zi-YL^#=?V{5We+;*$652!?_p@i^KVZM}>zA$&TxXi>dzXUzalDExs=2WEXy2DR{H~ zb+x#I{b;Rx%;M;Ck>&9ggt6#&yN7S%cxOP0} z~9OW8%xuWN5Mphue>94E)SW0oi14i<|}pvU_gU=ssI zDgyFSy^>Eeenq4-i>Mxo5dWqpPDm;eqjVFR_NEtcPwGWJNE4RJrZ*Kv8j6&3Gj7tR z50iWvng*nq&}9H8O*&Of)f0v2Jy@97lZNF8X`%SK=?@jgNXNMzfI`AfM}SF|jvEhY zWf0g3R1QhU&t5_nBfdndBzkhjiTfx)tt$kx7Lt0}&KOqUWLZO5@kZC5Ir(DOqez!?pUg|Vgl02F{&3WO!!9+I4X8ZIjg7#Zrwmt9jxl0{UZM_oKuuCV zu;qws_$b@3*ri#TE(uVg4f4v^Q5_W+i!bLY1)0Xk6A?&D3Ylg_Kn*hKE-*`-nDocQ z*}X(E&y~B4*6X5bn`Ow&ENjg||J)@eTY5WJ-t)a$0)t(SxI&b&Wzul^XnBUTIZH&` zdxc!dz`TX>yzt_@kyO%=G?mXQA(bqnl##Csu5mMKk9Cb!RDXG86`HTJC_7gD{!5`# zZ~p!LuCe;BUy3|13v`j?#+ym^iUSl1^ohF1+XePYB0>uuGRnQ{(%vgg=q)hf>weeg zvR9Uh`N~*I?)^~GUU`nfD^rc`_oLN&uZu&Wugo6FeR%(VucET|m4##Xhsm#dZ@`rW zD}T9(8Pfeqh(e)FeD}nHz<$+0XrW!U+{YE|{p#`FLWeiqAJ<*>Yo;)ZoI2ztx0Cj3 zmlTRz#=0l>s`u+QLyMj+%6px5#b3`xEr*eggtlu?MpJ6yoKBMij+jFQT5Q zi#HCMaKegx80DwY?jAG~_Z9o`^-NQEX z;>{N8KD_4tTu*q(1&8$F7vqcUF)H&mb8jxMQI&C9i7d;`(vZa5l1wMMXJ|jCL1uVg zl0)(%`n|byqBdfCZr{1s=6!4;#%yY*(bYk=h4^o*J5qW4eh4l z`yXGdc=alI)s0S!sIu~c+fjj;o}~au>p>e=kY}*TNz!O{`!#mE$PhQ>cO)H9hvLN0 zV7-KAUCWI{MYB5Q4v(w5+UqR~qA@KVEenJC@S7 zQQxU!X}$V>FkEskp4DRWPX76U!&kPYw|rGF#3_?TzBJmpGg=rLK1m!uH)hEg6508lGgufAyF$v!zIyNCLE&(tre-=Lv$p0(EGjuU?D=z_loaQb6w8zp0G73$KbL#{Tr?#`ASLBmN($GD7gt`qU`b77O;5j) znaP=*eKj{1Am|&Vr6Ls-l2ui5b#=D_g;qeJMNnuC6q*i&K8HdRpwMV2H1rf-!;$q5X!`ir z=PZ;yD2fJ(=-+_Su*(IdnG#-1$Vob#u*(JCS4-lnp|y6FW%s`j_C_O@EoTyqK}Ti& z1xo+6TJraUHQM*2aj4U-Xw7szmwN+;(jU9uz*kFB$XEWb%j3j?+RkpViBl^K=WsgX z&v$wJGO0h=d$fy9BUS2?`!qs1jz&Cccd!#c>BWHzxfcLRe_0(bd;AGN>HUq<)sjl} zPY-X&1mJgyzSC{;zRSbGr_@jnR!i=ze(G;%06>O!4B6@~XN-i+IR>y=5`%YX${R;= zN!LY-F18JOM_4`u^J8J6dwl>wA?l^Y$Oi_tX71yCBQW*8yn09H#rjH{Z7 zZ@Xu*kYrY|Y~*fC`f&D{-6(+4<8ALclb!aK7hgE6bTX#;5SkjtdF44TrHAlV8>H(A z04N>fhGOzE!6*2nu$opsDO_Ez-L;Xjs5@B5e_Qu;?-@q}^x_(OBO;N`di+Jkg3V?O zzO~I394WS~R(uV!tv2FE1zYW8j%!;TRQ_z+5W0A??M|lbg6%H0|JhJ_|*Mnuw04;1-SL?TGzMS*_+N>^|Ca)zW~Jd$o9{R1fNFWpK*x)mTTpN<=D7Yc*Y zW19N@sRylAsovz95y&@}sKXr#&XcQ};SfAy3bP+LProm1K)P5GX63^rY*6bbu+T(y zEl-7F*(t+)27QTnQogdgQJO+Nm=oJKtgDUI7Fin@7eYQgY2ZU()|hj7vCVh z?9kljHfS+al?U@2ST5N5!(PM~y^6e)?_~p3)rntQNl2E=%7>vnOhT;c5Z^~ty&bYE zV9;YgUIltb)#3DRCuaGygziMy=p@!UDIv{Vwbc-n$c(uxQtuUPb$t75B{F~Z3(dhg zyBS%#yD!PTS;CD43Gx&R3~hB#<+QS_UnU&0Xg&`ZUKGTQGNot6Z=qH+u76! zw;-K==7usDb`TH{07sL-xnyuF8Ga}kTuBCuJ8avKoSee%mJOYy+rMub`ju$cc9UM&^oot<4o;W{ob$ROk z#Le@Gn-@Hux_kdVT;080J-ppKyxl#0JiL57y?nfV{Cs@o_(x3Svlahj;J@ZXYc7OidE+yr0N{YdY7xz+AZ>Og#Wn{=@W=g$$ zDUqEmmYXYW%mHS&#(sx2*dIy$r=kh`6oI$d24y1VszdW?E| z&HDOm`}>~^40!eThxGTy4Gg5beVaWzTrxUZGd9-v;X}{lb16V~sDNaD4Z=uj$D6}04ZGb}GK%oV{Qi=fV{GLYq zg;o4c8WQKhZYcj9q{BVa7>y{G_XE;Vh-O4zNSl=m{T1neCECA{hCd=5R#iT`ZG1Z7 z6)f_bOusDA1|!6Oh;*EaC(g`mtIz>9$Z4UrxXq@VKo&tt+>f?0*(qWpm!&Wq&_9dRYqX$De zdd8RCm}Ua#un6@7nX+=ybr=f)(qXSanGNA_VKM+n2W2``U~h@mLlDX|7qNXo1|S{3 zM-QXqd1a=p6~Pj12RTKP`PkRD0|C-W$})`C^>cm~uODY(r1vl-cOmJ?%g%*oR_*gf z$#$d8L&**csEjEtd(I3m+%BRq*m)6}E~N#4CE5V#tSn_jNWzfL9nGq;U|z}r$}LHC-tB8xqIbw8KpHkMEfjCm?`;yr)pFlM(IrZbKsx7e&i(6? z2Pa79>r95z(1&#IBN9|LHt=kEUecLFI@Azp)WPw>HT%RPzJ)|e1B>9^xvyA!h%wW)14k43Q6ctq^nVrZz^q$R&~ zW|8l1`ZIkS4Aw-Nr6`|jqx&|Eu0cj?m)P@(A(m0vSX_j6lX#wKgA4sWLQ70d%mwzz zbKR8soIa0v{Hb112aQ9-;%i#luGmaN?kyk^)(0RjX*wM8T=3G6gZKG3T!qU*EXO`+3YIUgKw|DC3_m4 zzG6$Uc%UPKiT3O%i+W7mlrL-X6gHca`isw0OXAT)&+M4C(`ySDq&Q@;<-^o@*OZrT z+N7atL1>86b(SSYriXTV87R14U0};gd>b4Tm5`BM@B;bU@o)m4G` zgqhd5g7d37@?SOL&??yH)bmw7T5DG0+$lkODJ6dSM!W;hNCsIO8_(w^tgiRh3cpU| zKbp4*dxY3RP(M!3VKfa6X4*$K<|s%INM~!V>@kfS)cVA^&?fC zdxXI7M(Z4 zNJzku*Z1`-@MVwiO^;_MU4F7V{NC~Kx0ktrm5<>2zVZ=nbO5%7@1BM;v)>kuj*pz2 zEYI$H{J(Gm0%H>}Ek#9z#Kic=#d#(qJV^qYX|m1p=jJIXCaJ0V>FHV-87i5XvH&8z zd?}KZbt^0D22fG6vUszyc(Ssto(6YT7WXMJ#FLlDTTsAXSSV0je6zGvxU^KXtPFrD zsfr5O*RK_-s_s-(J*cjJR8wPFTkBX?=U!hQ(9jUx*cjK)kkZhQ-PBat(o)sdRtteN zbapoN^tAW)cMT5qzI{75GBONyHiAWLz=!|{BQPrltOj6&4} zZhD~NRWbosB;okW(a)FZ3xZ2RA zR~wPCp>z7caaY`8Y4PPpDKdnw6FKu+{OHU^p$*iz>IN4q!=t~m#`P^m0 z`6iXTk25Fbv{%4B&K=7i$VH#Iw}^4oyw}*5vz+E75Y)XVG&QoEDl8CGynhxM&jwEB zV`PWC@-@@KL*Q;FN7Y5FN-)YNmtur7e*t|epi~VeAtMLzIK>&guk|~Ymu(* ztMZJX&%-$+GD9Mq*DRf6)Gt(XVfMeR6qfY(jT9EAqnkz5R^>!nDwn85iE2I^k07?{ zSsi1sJrpVx{Kmv7U;PBJbc)wONwbU>RmntwQBkmKIAk1skB~lp%Y3B*EXOyV6}Kf- z$ZIX9n9;Ys`Igq&GnV$HO>Q=)xL~s@1<$vx>SQ*46Ycb!Hy2GSUd!&LeMt|W*tlUY zL~q)rW7ck6g>7{drsfGQhI{a!)$G`(G~&_^ER8)K(}@;rwbM3_=~t0Hm?Y>XPMTuD zLXR>o=4D*i&g&M}sQ+)rbTCi@Ob6mMpzpZ~=$EoJFh>LI{vCWneS4wSy+FbS9$?^m z`2Z*1s}InbLLYFgarI#1@na)vYuzVLG@m|IwYOJxbX0P3Qgn7!a&=X8ch~Un(DC#% z^zt(E^|cKO@&t-h;JkSO*|AUsXi`#qa&la1YHV8Cv-I?Ez~yITcmq2B`E$GH&mU)J z>*wSE_!iC22dK>sAREARQ4t#`fYha>fXL@8FXyVL;Hs+PsjlX&so{faVt_2BzFwfA zL9nq=xT#5`xmmQOMYOe5thMzasJ1q7P%mFfc67*fbg1<7X!rIS_VzyM>GA3Bj~*CE ze)TGAXsGb@>vBN$fB4WhH8nat{b6PX+*Ztd`!)+e9GGDNj}3773*=*f`v*Aw7Y1SI z@OuP->_H%_7kocZ()31cAi=s;vPy4zx8_C*t3r{8C#3 zmDK!-?0!Ffc<=3bY;C#zhUqaWU|vo^yL947pJ2-F4Zu7X*}R?YjfMx-oRYCb196C8 zUcQS)4qU#CA@(au1+Sm6S>1Ay-$h@rl!Z zWh?<>Nj6QPh%#TQ^#k(f7GSxRxn^2Uq7h?6Y{#1R!bZ#f6K*^E1nnqOz|;F~wbGpQ zEjG7*uqe-q;ePG7-HnwQaq#JFL&W{y0A5?Bg^>{0gV-CrudvKB5>|eS-DWN z79oULf3l0ppO26x)N+9+=r-Rh!RD_!vJ7m_lT3W+yuJg8LpMhwrnU0Bt0F5AlP(tA z3K7)AjMS_YvnxW?s-v3R?C@b2K@j0j|l+K-Zu>#ERvMX2*7RKf#f1O}{3@q3a9J^r;9j>sz`p zT-Fj@7llZr)7aTaxTgmr>?`l=ZiOU`3MUKPAP^^^Cu~=a5=7XB31sASBMxzg*9;}M z7Hr4)NScMDKEwm@F(Tr1d@np?Z*lilp?bsTKIz0TviXJR)KKaVWOY4ugDK`V!aDRP zSqa~4BT`+}%-6+Mb1hxfT*;pcAxggCd5C`ehQHpyF4Wg-fl}J5Xc69w6P8@GI1`fO zw~`zKlk(m|x5Ju5N+7*ma+0&0WUnM&pWy>;IZRtzbXF$BlrZF|S~Ho80?VE(sy_JcG>#j$yD zNgj5g)YmCPv8&t+rPoal!@iA_pSf`2)2!#@!wV?r=}3EjuUb{qI7Gks#>{c$y4E0# zwZEMfjq)Pa5ErfJ*(vyZr+EuM(Z z0Nwh#2Xz0?2bi=%AMp8renFsuQSkY=5Qzf4v!RKJo~fypxw*QfrHYl6ij9r5t*w~7 zy?}$m14lXG#|rau*je7Z*}jS29;ua#vRhH#cfGH#&EBW_NcE4-Y;sFL56q zC4YbYpr9wAp{@}T0idA=X9VC}0Qz-+UIqa66wsmR>5-Y4epy*AIXO>qbItPd4D$2U z3knnp3Zx1O0RJgmSSV0f$X8g%Q&`AdSjbga$O(QH6>%07fuG#P#XQBue8t5AWo5z@ z6%Q*bB`YiCs;ZRA%hf9?bSo>3D=QyYRXJ2wd)Cy1*49SX)+W}~W!BdhHZ)ZKBM%CY z_y7zifXf8*hTy^=<_&O%0f`Qilat_L9qPUetd~L44?Y&aBLaH5{--yw;4^XA-0wgj zo4@KWf%tL^0vUurIxhCZr4UE~1d@HRABKJ`z=}BLLWKz=m{;|ezkMmd2LgN@4i9|} z4!nN*D4?c+k3#it9|f!ADx5dxdK7C+Sak2%ygDfKDTMzhB8lR1#T9kGb2sCznJBukt&k%_e5WsTmL#qk7K?@*Gu1fJegbrirIs3;VDfui)wZLij@PI^!Gkayk$7c;lSNc zOQlUl=EgG)DS2AbZ!;%XoW{~+-7#GEG-#vJEOF?TojrC@LW|4x6r}n#83GB1MPY`3 z^E^2h3riH6^Dx8crzRJOaCuGtm&}*)d56YwY{=HTx9=8l?G6i#lXc;`JwhVYXI)LH z)8X1W%q6BSI_%aLD7rQg&G%ij3zgUs*DsaX&|v|ASdViDgJVckZ7Q6Zqz?aHRhgd@ z6=c2k73Fa`x)e=z3=4@salE(!F(yUG2P}H2kWtofMacmMjnKZ2^hq8&lEFVFy5(uJ zQCGqQ@~A9KY4Y+!P-Prw#Id>07K)cLT~n16G904R?mQ1br$OO@xsEt)KGUkaoa$~)o zQ0I9CO|9CkFE_8{+I=W7cZym~UCmu%Qla+jx}#mhLj#LgUNt0lq9D147H?HHi4N3^ zRIsIVdA+f;=$Q}Q5G)!!4oYk!s$Qf~x4MV1R!Zbgoowd5+oT=ig7Aku$;?8;k9`1( zWg~ID z^nqsNevDBfazD2I$X*0deA!&oo5~)R+oD&$1lh2Y*R}t{z6Ado<#ToA_Un1eWw-~( z_W*YNY8o19nwn}_TI$-`>N+~=y1E*AdK&urT84&N#>Tpj9s$JHH#0LZH#fAjG_tZX z24!t+Y-3~eM$BhIV!a_V)S?4th>by3lfV)`gafi?)l4rmL&QMS)+mTwQft zT@74a4P9N0+}w=a+)UivO+7r!JUuPEy>0yb>;nT`LP9*l!h9nl0;8frpFN9+i;Ibm zj|D1u=t2#A6@cpy)OZM7wSWhB4_$r0oy+9|Qh%TixO@Q*NB{y4G^qB{p9p$E2EBFx z7cSti1-KDi9FA2qHfA?AMmIFLzj$F)UvE@ft5IDoUsWYlQ={10s@~T2=;g~N-Q7N~ zUnhV3SUoe-wXiV0v9YkVwYIyvwZFf6cnAbSM*#Q#Nty@x*TKI6p9C;D07*U&=5IqF zD-g)sg(QCp0(lRC3|&kSbr4A5#n=GE_?M%?Ir?7?1_1p5% zoc0BDB9h8!jD4vYv0b}wal{^3GKlOc6pk07T4X#kT99XcJeE9&NJ@@WZhS|a0qa(M z*?9E12H*U}#$dheY;%S*bA@ib!!CO3kb16Oo9B(6ukUGW88if*5Ijsj-2C<;^1c9r zi;XUi^Y@vi#|;%ay#r2^KW{f|X0(nMDYqz7%91QM#*L@Q$!fDVM^t`fNPJQ8;`_U; zcS6JE?p1Y8FXM9c8r1Q~vw9})Y-Zqnsnk1*&&6i2owYZ9s}1=ntNw}GX`^s9V{H?k zd%N?SX|DRFoQM0?_n%7YUWG4PA7}{Nz8i{NXHbt8H5Bq7 znWu1})+A28fb&s=-NCn!gqv+fix2gQVkyL<*m9q-7hl^?_E79{%}jqe?K;K#v?L^r z4f%)~nO+IgAG;tf-w7p@f&p)Vued%WC$CX8b&*D?Zq>51EyoqHBreBKBCS~AK=@h7 zn1@|2NzP5$DZw4jsqmb_DJ{$LZvI}=wAzOybe4?;A&+Xgt4T>i1{SA=%5(I>>E)Kw z3r5niDNZ(O3cZ+ZEa zt=xRE#v|)%kR?LfHNJFZ9-akts`d3^^o;<%qN~m@&hzHKi8I)KUnRQ+W@lO@!1Y;Db-J~gwmGqtmOWN&Zc;9%tF z2yk1*!$aYsYnKZRm5hlINlX+-P2~l8%d9NUoE(naT=x8Yz|;VKoxQN|yo!oAKou5p zaQBYl-U00XX&=A$s6xh<@)z;<$9DrZG zwC?CI@8~e;>@@7`)a&fj>FUzz>e2u@iSBNdfdRGQVU4jd-H#uQrlw40X3S=1E#~H| z78jqag6?SDVRO@IYs+PO+Z8}4z*2yym;B4Gzg%s;ul^1&8MNl00Gktib{2PbmUMcW zc6$2!__*Zg=*8h-=fT12y}kF_+tWKcvpYLW;M=jc2lbWP2Q<^s(YdwUpAHY_-;3Yy zeDvHJ=j@lx9vMSQ1_3y%2V<}jv<|$@>5GQr2{S>cnIDMzN%m%_j$C&zhKfs0XL5&p zI2qM?s;BV{KG)N)9ig<&a)xpl6q1=Y3d_Mw)$Hh9-H<(U5eJ#)mYy_n_eGdgUicW9 zS;+GEr#Ba|7FFCXbS>}jvta*jz)f?bVS-vzCRJHKFqU0bZ6Jx&Fz|FjbGZ+rklA`V zS*$eCI!QX|gUi^vz%XiexbKJ&BBkotg53}}0-d6y6@4EZl$#qUnG`f}XZgBomGsyO zj_&?k-3)9q-ixW&k3W}D8+1+~+&*52*w65TpNt%A`^2*Cf4~jVe7Yjf#$EVEhSt8F z+bvsoI9+OYzdv0tVCPlld)+2y9O)gRcZgW?pUI`v)`foHKWT@_5 z@NSNfG3za3N5V$=&M6aZPUMDp~G*T4tN-(YpJWpj{n5%GkhkJo32QX1a-kRua_TA4-&%h1zkkhrszp}bqNS^CD+a*~ zuTnmsUw_*<MIu!Tz4If(RC@BGkwX_FT+%0=ohHdkOv@ zTL0yMJrfgSQ&STQi$|80rdC#FHa6x@o|xO(T0DJfVP|J)Z*S?~VCm=x>amm4c{w}( zQZ6o5&~kOPa&@%^<>qE{QBU06ZQb3UdU)7*dfIz>I(T_Gd3!ti__+G|y8HWk1_XEq z1^I=91cZeJM?{>n_t2dyl%;`sIY3<;pz1hiOAhVCui|u0PHJ9WLP0@vVPRNNQBX;V zZ)vG#S(#f|nR9u$Lq&yMMTKp3wRLUn<6rA(O^s_!jaO}LKy7VkU0qaNU0i*AQhj~; zix*ihUgR}26g4)MH#P!troOrPJd_hWAbaoX#W~a?6!?Myn+IS73L-JC1nd1_9>)0O zqNg>JJ+ON(W+px%K|&^bY-fl>>~%kc18%^fR&iZ?wfKDY$2{ z`8m=S0#&#t3)#X$bW{0dMLl-3V}$fHPhNgl5Eol{S?hTARAm+Aaetu1t$TM`P(Jhb zI-X>A!yi>~IFS2eR}8($`q&&^8zhROy0loeOGT0CszE!##2N z93jtU*2Qk~szTEl8Ue36YmD}GV?*M{pO!xo2?rwG7hcD`l9qJ}(17-r(2V~SR`!3i zce@n9f({N!y@DnV+Q)&N9dvC6wsp{M4!V-FumE$pnvIQ&y*;0^Gn=a`qlX8*mluPt zFH1lGYj7}oNC;bKC~H_4Yj`*)wwM_3lOsI*L3lVud z9VY(XUII9dLLDalN+2(wXTggPyd?lP3w4#ah~NFi*5x84ZweZvd69%Q2SRqiY7gY< zUWVKNp$7E0=O54R(7hgXKnH>hFr9B)Ecg}y8l0WIIXmk(JF7f9dwzBne|8pq(EtXY zoduts2A!OMaoqpM55K)V@9k}`@87S?;xXxKEZULwm-07UmIlcavtcZDj1rv?_ zDLtaBxUw=7HVwlH%=XfAq6(2OG>%}E$RwE~akE!2C6TaH81CWmzQ~W^@Fy0Jr45C} zd=P6os&QLt>nn$dNda+vlS+h&|HAa-tGP02X>`>5}$saVD6gcnV?F`LPK5y&aon|h3pZIu|xt`*9NMwCxu75wBK96pK<)gV5 z3yag~WadlGo01<@xHa@LBfJJ)w2RY?RQc9?LG=Fdoul`)yTB6)+9Q42u7ccrX)6z- z_L=mvg_(8v8Lp)S3rKhXWfix`gXQfctVbXYuNg~P{MyP1gwENIMgYeV?J31)TG5MKW z(?Vym0EQPubda;+o`&y9eIl+uyPSh@)X4^dLD&uMy}MC@Q{BWqJ07NAjBnQmk;U9W zB-2meAV`@vo7Z%G=JQahX~B3+<R_!M&o|OX8?yalI7ne`CedwZICJs{fou38>P5Bn`T+5)>2_5{BjuONxm} zKYSp{%T-qN=H? zrlqc~rJpeM5R@v-vtHTUy-6d0%%9IO)>svRD#5f-Kw7G@k8Y8evZ z5E|+p9`66=0i(YI$iHute#b~&I`Tlhc>Ww3e}{|EZU`D91X>|rcLm@O>WmIR5j@bf z6+lM-jUaU7a%Tll5DI}H@8>H1{WBT|KvP1OSD-BdOeN@vK3}v&qZdqN&BgL6{X*aX zJ!|}huRJ>gWM$ClY2fkkIW!&~`W+njY;6I3n&*|V_FjXmO6=Wf2QlK#^E@H4F#KCPMh~C7`AQe7W|t@JXT+A!Q}iq)S@N9}iTlb}flLfrn^0VB zjY$}(z+nVE23NPLEe6UsnD>G-^wm$gAX(*QVW?>bsgt3xK=hog>%RX~IWNLLl zl@24YM#FCj&QK=IY}h1T`I!G%Ohxv@L1=L~8V#6fy4H`L6M^%swlGQH9BDI~OJW}Uy4cJ#GO80n!2LJ5| zzSDrFbpu+VoHKbUf({oZ+5-ZiSGUGef-{7c@od^P&E_I0@hEi6t0FO?T?JrVah*sy zU)+f;nH3?nR~LF0KXjJ^cKcwN54QJUZx7wrLw(Aiog>tz?6PybN&@~p9zuP}fH&Dc5bpj#Q2U<< zcY}j{LP9)3LtVnc9K*xyBO>e~BcDb^*+oa&N5?qE#JD_r<`Em~8y6Q8A0G+2$je3& z@O{v|&L8r9mkXPJ3LgJr=LkR&03(eAN#i_=rIdbDbZGdZTDv7)^Vz2M52g`p8tol~aRg<85pRoUndFB%^D`~3XVn{% zNwZ&px6uQ?8|3R5ZoG>m$9bsj6EPtNlDx+g&Y`y9CJtXuEG+eQ^q8NA;b* z|3rUvR$DQp&pS@3>s+~^dwS?q!iw{dKBLXud;UfmsR#O=+ez+1QUaexTl}Oc>QS78 z77U3at{ak25RvF@76d}21g>`<4ZpruGgLc^X-Jk@c^`~pMd)Y#*_W(~Z6tJpIDsU@ z9jRMcbEAkOS8JV&wdb)K?7?hcq!n||v&yF;D*P6z6VZgdWy(Etm3)}vGVDi+D0~l5 z0lE!(Xp)N}8Gapx;b1`<7LZZkG8Glcq8??UIyH{C{e+}1fcfWe%#!Y_EFw7OJ6D@O zQn*uqZqP8v|A@KxkD5OTQPF>*`IC`Rk&!(w&;`oMsmg(pSCv;#Q&3P-JnsnA&pSdD z&=G2$cZ8bST3Y9gAOJYf`Tcv*&C}D-%j=1^x22B{kgyv2`56MWQb2%aK!AEskaAFv zQBcsM;9!f85S!3Yhp;erAYlTd@xRQH{dbzbzld&^xjE3doC^cgp|LSQd`$wf3wZYf zwGxoFZft;r*Yhid%i$L^e}AF>JKsP2(E~QvV0{fx543||WesRCK!t&2H9)jjunf6a zi2y7+-5hdL*MOlnkXgZpn7xmCJ@fp9kew!7H~-yuO}->O%PhUh!BNnw>9-2|~AH zBc@coj=ORF?9~ykEqPzKjoFvC`hI0Ri)=ib?quJbw;a2+hW#Y|^H`I0baUMy_IKrk zEeWUlMKvq>-iGunIu?7yys_c08R+t&x4!ga!)u>ORiQ4l@?(gvOHb@{2>;|Kykqrj z#dN$FR*64?BWL0yn-3n~*T0^l9ek+M@WDdln|OAx zYHAG4Zct#9&rVuog5l$7>TbgK;we^QA$TvfAC!9W5u0F=wx494mGGGIv%$WVk$>NR z@2UP_7LndWGF!C#>WWAR|0Za-^ac(6(RjB&arL_^fqFo*2K!veB8 zF5lcI4m)xL2eP)JSr~?wRWV+jvie7>vitkt4$}RyXT7k6rGtZ9C%Q)RpEHnxQz>vJ z1#YDH`2__8goT7eg@wgML?uMUBtZnwL-F&ORN_2dL|ziiq~`;v;>AF!^y@&X{2M08 zshndH03;|TDXJ+dsVga~E30Uzs%omKU5uz;KGo5MiY5Q;nB?K%@rNB(V4zn>h-+Aw zLqvpaRMg|>XtQU}jALW<oGhQ5d^sASay$=p#(BZ0{fU%1s*ya=s2^V~>NrQp z#iHmb@rEtzNyJlbiXXf~P<|xlPaZteDvmNQ;J+OoG=I2R+!>*il*nezwx*P*7uv@r z!MHx=D)IW*#8P2n%FWu^uIJqd*{eE+CCd`p7Z%Mmu0IW%8`SBh9C!;67d2cq`W5LNSVyYj#lFWw7oNn3~Oco!vZl^x1S!sbCS6%SH`=S^1tenDYa;m<) zP0$~&Y%sNM%`-7p@#b3XkCo&ZuK@g%J(D%}pIfi@cfJSjttdPYH74{xA=GsdG^MT& zQOM?#*$Pk<|L zB!0ma{PT?<1Hcu6|K>*UJZKjS3kPKF;^5%n;@-o>#lL$O9}f@z-o5+y`1e6lHX$J) z5fRb9LzxZkFE3z)m!FSMke^?OUqDzuP~@EP5)uQX7r+={5pfX_iF2emZ-4;UNIevn zI*%Nakd~B^0X`TPXFDKrOyU3MlUz_x5O9^hx&!!gqU)-3`+sYagZ4T=pA9nq03-nO zXW;Mrk9qt*>RbLd{_MQhiN4qfUg|d#47!4E-D3%m*v=9S#$u(hDyk;!kHW+8yQyhQ zHt0#jG_~@wLMnnUf6v6*BB6YQ6ibKW_@d5O zWkM2v8kV(gV?j!{Gbzz;6ZtrbN^D{47L#>KPw_-w_#_ID+P1vPm!`9ZZtX8l>e%3r zVX)3~jt~)1k&rO%+yTL3cQ1m+{^^9HzmmH9YYNhN_87GA@W{?{Q}D^}-~Tn|h>DSx zj+K##gO!yVL>+O0s3RU>KE7W=Q-sdbj)a8&IO^z6LQ~FjjzlkVj>Kd^$k9V_xr+oc zc`0cH85u=6d1!75AYRT{7Y#6nTtUe;I7_yQrg!fH7z+Aow}_kLtIq!1DyMkzo)Q_-1rubnNXI*zSFp`SNvX zX&H<#AcX8fGxgt?UH%9I&fn4OYs{P=b@!`)Hw201GR4krApT{I~flSive%%0<*u|H&Jeom!M<_a@u?V5Z zCr&0tV}9Qd2vWEmAN7Uc_rjX*S4z^x5NoTwTV3yc`GgVup-L&*jY)46)6O%z#PWC7 zP%@ehmyr7gn=xkHPH_AS-v@rx37PEMHM#QEp28x-h+ez*@9EfaaBy&Oaqr%}dk=h5 z@81XCQxYN~Qet9|+X>PDsmREv$;oNR$!RGl=qM=YDJelQP*H(m1O?)aK+(`Jfy6*i zbac%0^ehYvER2k-%*<>oEbJgF8`vBC%jO3EaUALY$+s3NZU1*|*TF{VqG`X}DFNQ} zU+mZ~wKm{84Oa1hZUqfI(A|I@9uN|MdIg<4*hv9q0&uWb^Hji!3L2@hy9?NgeeeKc z_ChNOvIl?9&7QxtGgsZ_PnSl%be*q|OeSn|dc)D~tMv?2&j|)&@`be`umEKwigc>z z;8@nH1bX9kols)U;W*ZNemzV*i?Y$I)Z9H=l}jU0LV@V?tGh+Ld6-Eoj>mhsf*Hv9 za`~y-mc5Zb>ueU96>{ZL;UZ&IL)hmZR{z{8)^*=1`;-Ac`#OI}EmyD+=IzFU_D2Q- z-`OD4Osa&;4&oSM#>B?>85pgfA;YOw&x#gIm>_|-U#ILWdCLT3&*4{MjrcwI7-c>U6RCAfQ+ z2oH}K8q7;TKu$;qBJQa{+$Sk1El3w6C#NSTXP}^9q@Z8|MM=s0Yq3yLo);C>-xLiE z8yy`7J;MV=MlNP%9u`(!Ha0$X4uJ=pLR?%T+&rSZykdNO;`{;X$#(Ovl5Q*K1W3kZ3nj7JzY=X?T^hC0+&HuRiav`!D=(jJ+}6-%4jfZLu!jgD_q;mj*WJ7<5L~UBzB!U zj*U(;%%|;*G_)!~2mf2zY;-X?M!jfvZzDP1WO-P-wn{JwB-lp2YuKa5{U(V^T|b2> z?Y9~6*T!+kiy#lgaIMFyCriV$a>{=ygG8R1sOiXgXhUu84FE zVX0umuRXX{_{d=RpDGjm;op_9-td1_L&kdlnWaBu{A>OCe?4TP|7WGI-L0-%EiaQJ z`7mBYD3qVqi<{H&0f!A6s|7QYAp?Up9i18tjUqL*ECr=FDVZQ8l_(9(Lpu7042;^@UpS7qp7*8xuvJIwXdyxu)Y0Nd;3s(`*3^v>-P51 zw$^veO%shTKE0^_TwnX8zGk+z`dfX?+>6?|hPwHthQ;QFrIyB}mZqiF=B2ilrS{gP zmu<@(?aQ4nm%2KZdb$?-dlv@>7KdIfz8+o}d9yI~cJckYrHPMA)1Owpep&rCyEZ?! zzPPZlyu7ixy1B8jwYj;ywY9swy$>vUfZN*s-qHU4(ZT-l!2zffX#F@i0q#AZ051sY z2-MN(@$nfbVCe&z3~;b}c6MG@pI;#5Ebah|{J;6n-bUt)rP$JE3OTnlExk>FK>_ilD2V*=kB&#r3+TS?YRk0h@3y|b2Rl>8}M@BX7~ zOxWzF&_Y@@l~Vra_$Xy9X#?G^J7$n-jBmwbLsIue-e^8f&lN~y*8k8lX-KFYaVu2s zOr!L=#oXT6_yY#5A^+%`uFB2s?28{{{S!(hJf?g7M+nGMgEhBSvrYU{PJ&UinQnAe z&7Rc9|LMJ#_5{xy1)*8*EQqF;GN1?>im+9mzqHE&MYrwbEnQH}EcWD}NP&-uJN zK&WY%rPX3OL!q812S6vE7d9;)LE?PsJl_U~h~F zOdhIV_xb5#JQ~=EpgbZlZ9bTE{nM#(G}HPZ1+oWD{f`lL(PE7a=HOZX#kHA`)I=QhpLLK~i#Iatcv^7?f0!l+@Bx)N<4`3N*Az zw6v;pbn5i&V`o=+@IZ-+OP-rs zo|jjSpI=r`P)1l-T2xf}!qfZQ)cdbor2g)z;Xjrw{d?u^@681MC$wpQuigOLjY}mj zIBxlk*K8Gy<7QCIOa0TfJx0_vL=}K^E4FoIBFWURyY??=OlXbdZXUB z6e^WT#c26ZKmqy3`iu^JZ|c}o62nm3=e({otKBf>G0|X2T>sE^s$uUpzJ$ zK}ODI>L1rx8B2FJQmHe^oFA`VqDG)$x|8v#ku=z`(Kvo(;+guOEoWdC`$WeXx$n-X zCC|JC-+q+_9Bkdh9x6VwMEo`aEZ;yGY^h0)cv95Q4oppEKiC**lp8R=rGmP{vcudx zS61A(0S^m{2nUaZfPiuf5e@M+#%&}lBxD@qJGggH@K8|ip`hZUqTNSDBS1wbL_;S+ z!yrb(AVEJbQglpEB;Y3oCJ6@Cd0}FaVq%kGfx;oh!KJv1M|}^U4*xzQ0UsZv9=PFuZMPqV{7yT?$s-&pU}Z~dbF zu<@1pwa5Bhi+Q!*dS#*yYS2V~;E_S!BZD4O!%j2fHgl6kOVb)Fi!z(Xg|;@?_D|EC z9O7MFBHi6Xy}SZJmbRatpTEC}+oC0zX7> zF#uXFFtY9L902tg7~BpHjzBsR@IN{HadLEca?xO&o_ANkGx3kQD}Wup;e~=hs=oyy zjSeTOp>PoDJ?;qHrzBz_*o+Jg1B$t#QTG}B@LiuyymZb+g(>a-o{}1jCY!@cRq|QD ziqQ}eNh}Yc%$G%3nB~U^K3M>)@@b7~KuSlJWzo@NN}623+XsuD2>n#Dqee%|*Kc!; z`U!Yrf6I@TjL>U0BD$R_ru`)GqxX-+v+%_6)t61!$GF+(C6ldBe-`zTBeFI4A^)%ld4Iv%EP~8blE{n0+Rw#pDZfi<(FXR_qtri052{ z;Q}iF7QBCYmVFBm5$X1A6eMIc%hXjW)Kw}qRH`*q>$KDwbkv)4HCpww+V!;N@)#o`@YePt}M(HEsz~M%7zbK?*)Gq(6)M zdMH>^Rh@&WZeT|!I8^mBzx`@Ah$`d4tb{8cBiMCIR-;n^IsqY{!^sm^4w(P0rV9gz zy0EaYu(AJyh5mPGy8dN2`LhW~RaIME%~(_8v6iNtww9}|wzr;6fWB_1fo_zcUaX;h zg0W%hBjXG+lPrrzIhJO5kInO~%nPh63au>*Z7d6H9v3{Z%Cfaiad;Z*WFO(=5a?j% z>Ez(x?DW{x#lYQN)zeeb+gsGvSHRz&Ga!IFFpxVah&wo#CnSV7G?XtqoIf%`AUaAg zCPp|eRxBZ2COJtlJxw($Q#~(Rw|?vcfGXl?r`Yobm;8@<=Efj z)Zgng(Ca+V=Q7aeHqh%a(CanO>od?B(BB(6&=)h%mpag&JJ4S`I8gO!u>RGnmZ2fw zxZnSeCZLIlx1XloeEvN2B z&d&wS&jrkV^P8XdTVC>8U-#SI_TSqJ_;CQP5(7_;fsH0OQUs@pK&>8fb{2Ye7JhaX zd3F|ib_TK2OmkkPaO$JW_}3QZ#r^CFA>$gtZ*h^BObO3_ ztHbNu%?oLftWoF5(}+8Gwfs((F~l&)vMvnsGlN>&7@wa zu0nA#k$3fs+>4$mG3>#|5X&dF896PLer|h%>y9jEb{NfN?_*RP-XQm3Q*UucEVBiF z<}**;zRY52nzliw#K?2Q=m%c+=aw=N26a~+Gr8tXd|cTnA0hPldpVjz`DGC~ntl31c#7edF1o62!!4 zxXjgTnFJEIx(s>GJZ|8 zF*%MBCyN*$%%V=Bj>4~QME#2~&4t9x^(M!4To~%>g;-dmxVRK}cvSfKv;+k7#KcVG z8tot=}tou|EhsDpj7qeHT@<1-iM5LXvp zS65G0R}WWLchHJlJkWjwsyFxX@qvy+&}IZW5<#b;&`^+;78V{30@FZZ+T{Vvxs&g& z9x)(@HZ?gp4H!c}pL5^F)Kn;q^7lu6;KDCIKmT`*UKjIFWkp5Br7I z=4R;Kb9;L`IDLNkvZJG;tFyBQh|;>c2D-Y2yE;cZJ3e-H%yzz9?0mWQ&(v~P=R!~S zm%iSqf&O=c1Ea5Ay&f7mr(9lxY3lp|yvxW4P@%nfH#+j^?a1ud+xhXaxr@H$)5OQA z$;oqL8K~3+@Gln(%oiYdxzxN|5xhY4E}*+PSG%mQpOY}4zyo}Q!2@J3&Fy@eshV842v1agtGCOZ*TSf72FvId*PJSmA(^1f7~*7Eb} zJM0l1o$j#v(l5$11Nz=9>%^^>efmc!Yk!+3ODdfy(^RuCl+5~gX1M7uu*!wrbRmvC5F-n)s;_>dwN~Dg$Zjps4nu3z(28e5 zS0hM&uR?k{ip@rC_YUTF@ox^qqo`ae3f+QAg7)7f_py0GvEG<0R8-6qn3Q6+pw5qU z-qKdt5?G^H8}H&mMjGo?&|PPi!2h&XQcvZpqtJ)wKV;iXc{DBoi-yuu(~Df{Ue?E# zFg-SaSG*oSK$$eZDK1N_Hi}(QqHEuY5lP5(2t!p}<%%6E;1crfgHt1e_ zG$EF`QVhF5{Pvx`@rmsx2ukl_qXqdN&@(qKo>u=LTY|)mFz93{bRxQS95=$(OXx%( zK0yfoakt_I@!&%5BK;3U%Z@N>+(_f${fZqKm>vPE7W$alpQA86(=h{a(e#pKk-_zw zuXGfUG~&*p$VO`EBYV2kI~u<9Zqmu(5C>HC%G{vl=e!g6X_|kVigsXC>qqm1Z`5P6 z(m-U(Eu@G}SsRDidwuQK5eQGaZ%9`4E(w}N2_0tnyyLvfW*ZY|CsBqUQ(LBdzT|p9w;E>8~<`tBr6S zj(s^AEpaP=S|wysCqD!??>dS^ks!KHNVVbDYp@oh{#d+BaJMSfv1t*6aQ9;1Fb%Q| zl|^6(_J{%z>x2j(0|5k43NY-a{-}!sa|9=c;*Q9T1r^$`ezzqK#qaZ73%#M11@AcO-(Dkl$D5bMnL{KSao2YcxAA(!bD4}D zD_RpQ$mG4Hoy`vSJs)b=r_-!a z_A(-fbw1)Qui`QfdT{w`Eyb%n>kwi!u50pbg?O~G6|k1C$O7xwXd|Z3HBJ$7*qlf* zBI3{^mjL(~a^_dF*SuYBlUAN8-Zrw@x^F(JHIBQc;VY>27?wF0+bbr^yOj;$!&X1D z(U$t?GZ7?$DwAc2rW)<+YiP}D5LiU3uxg`GBmbjAe|QqLC^{b}BDVTsfkZTa1`TNf zH>ythJ2{$f{NCX8(ZcNDaw~p|GC-O~l`!D*2^y*|fl+Y)XO%6t7)zOhw2#n+JBH&dgVqi z|5Uq6EID)CXt2fKyp^*rD~%a4zAE(=5mUmIAS+>5LMq0V%&?g@ZPME+F_iJ6izz#X zZf0=-gDCG^V^ZE4-kBJ&G}T;qEeR7{SkDe`4a17^uJz^Q1r*UyhS%g-Px;qJRno}a z{BL%Cz`9){vlF#cQYPq%rOLyD&Y&@?pyyE`81Kk$2Vqnfq;mJ+?O_M5kSE{W`ZRjVe9DlJ~u zoK=iQ{VkD9-UV<-l*XN!YP%Al;A(R`e`&S;uuFRqYl3w-71`8=7T-8-Vy*ep2E6RY zSMuT=z@fJt=crqccaVnE|; zd@@PVhmu%htMwtrM->6c=0^Su=vWdw%h%47YP~;~1%I+G$^X=tT-mxX-0b$DArsXV z_x_614{otpZoX*$)8en=4=D~50=*vr6L2!;w*>tzJkLK7b!L=C8KWLFE%6Y(OBTH! zTjht{O*4m#k5IjuDLUysL};7j-eK|Zr0DDY19VdCrHobAub+|U^jdhz&BIV5aq=1@ z5Q4wE_72UGXWyB2VtiZ*`PsZ?Mo7%)$WUHMg?vA~^Ke@iZuCp};hu2>E|1R)+H@A2 zfch>~?@#d~K*2g@V7fUnA*=K|R}^@>hjZl^cd{&W>3-n;zrD82W@Z4ofx-jJgXJEP(?+;RG9$CU-^rf~DFDuP>~>xhvwIjS*a z^foyW7rYQx{sT|+ai{NWa5(R77{|afZ_(Wlp~IjGfL!y1CHB=E^~PEj9W?XdEb`}F z_SXvVFfsN~2)=Q;2mdkaiCBldmN^og0qm%)K5MRLY;TYaLNG=?L;ct5sRmYT2Ph*7 zHhUQTm4ue{LFr+kwW*qtpWrajY_+dCQ z8fyf79JL@Ag`X5tysHWy@qpt)jwU&qpE;aJNk zB?Dowvtje*?r(y8)TtsD1S2yXJ%W~_;51~T3sDcvd1#2tsN#*4NrQV2qHk$L->kNI z7JyJqfvQj#^fT+R;38`?w!=nn7$obK`+`(ByKs{+{QD4kB}z2acYO7`p}0qu%s%!U zaqzb6VTc-GIwFv;B6GLqLRZ56=nX3FdWo0}Gpb}x?4R{)bkv|$Q3bjkS!54vHmf1UywtpzP7x{39bR~ogTS4?h-{7z( zOTat@($XOY=6qW5xLFVty7xR;9&6+&&qY)0AY9)59^6LaKkqU`MPr*OGwrO9Nh02I zegR0`)WLs7;bj?BiioHPFjX@SEkey^9Hb>G8;;h(VMEDgjzQV3GSB>Si1@jaj?#ck zft}HrJ^mjH*x{$EA3quss*HTRT5{A61Fx^<;?*lys&I{@LvqsyvXRd?`El9kP)-JN z=qS$oK{e*9H~xtH@NHBEX+fkDzr+!ypjEy?35rq<-w^>4Y;?B{H=`W>kQtriixMB$ zR$(>7VYI^h=EUEs1$tE%mnVqTpvc`8#h1lvMDPH0^|2f($|gf%_TAw7*X39%$22~? z@%-s|P?k|00?Gr6eVJ8#wq|87knb*xc+@Y5zd~gp3Y2dOgPDpr2S4#(7sd$33}Jk# z&_(^7HRbcfoxg#yKN9TFVHgEiUhM^-A9SGx2xyY8Fl@q_1w(Fa#Wyt+;&88N7M`~s zg`%s_zN3H!R}`DYlv_-o@K_bGk_k3c+?ssLq9+K^S$TLV1V}bFL1>+j z6DgFF5Y~E#D}sD!fCM{Uy=k@q{{>)v15^#DRzXz=yY)d;mARxKB*HYL8KfHy zu|ZjdD;se&;%)N3?0SUWw7dVUt7t#a9U4^O+YbDU1*z9lQsFJ%+XtGXFs-nE!AHI_c;nt^+3V_0QFhYCmWTlB1IPmzuh9mZKhsHh#r)d|$(swjIK z$T%B`Mc??Kr_^*^rpHJSc%`~Z3bsSK*Rm$yHP$;W)c154O&Scda$M zj*Cwc6DHKDB32jd zaaCww2!n6Gk_O)i~+iXChy+tObR^sMl=r(*t{tq%yS++UcRgwSMW zJlP@PJ!Ck`S|N54!6==)APN({*Ccp@j~y+!G@EAlD_>Nud+8(pOeN+lXZKG7oDc7$ z<#i#;a5;?B#J|Yigd~E9I*Zp0meO@;M)lz`G6O7Cl&2##?jdn^S!9him6E$od{vZV z%pT9xEr@=Qezt-U52>-u4n7?m6pNum!?Ds2fNu~VT!`_VXa8*qy_Yg(jV74O{1CEv z5-qM_y&Ot39Tw%HvP+Eb8HNGDTI&L#=SN|{PVY~sCxad?DKUh!Z zis1Jf88^F+FJ;CjbS4N2>uR}(CvYeEW+&C=eA*<)^=}DMCnwoM-(qU}=!ZeLcuD3Y zNcX2mQgMqvtMi-&Qr72?E#-uJ&N=OJwJrn-p5IT;M)OgYhn`nWRCi5PSIq!7Isckb zUg8oz+Q^;ji@ozQjT#p_iG`}%j-#m4YX;<8=7l^+guTE$7uR@34mkrZp-TfDp}S~s zj3*BPt_&R>4})aOw{%E;sTeVyq_t<9V)Tp7o6f!zzMIBw6?rqr_o~mL?tlps$#bbb z95Inwf*=?E&p481TJO}(#Wh`hlC2<5HSi2{UmOlD(po|OjL81omgU_u4sMjTrT)U` zW^B5-h~$!j%*BlnFKA1;9Dya3n+U<)+HA;qxQ4X9o3YFE?8VOP1$geEae1zA;r4W% zq)UW@Tb*(+lq1W9q^}%~5G#jUV&%>mai}) zydmNWgO3txttpzq^IN^7idWNVD$RPu5tgQ$P^Jp=ZoTb)ek})9P#qjaaU?`?Qc$Br z*Bu^#dD|$ysM}epgt4gnnP#&|=Nm-=go@U?MMv|{HsbX9C2$`o!mDK=_|k{eV9IXm z$Q<+J{3SsDtEhVb3wn*1dA+GyRc?Hz4x%XC*ElY_eaX$W6u-F}5u!7j{^;-_*-4Qe ziP40u>3b9HdPh*YYK-<2?=I2aIM>E(Y0Y5foct26C^p2BN`U4EW4?F5716RcYyGT} z4)H5C%xbkp>{}D3Vc75{?m2yFDbqVlCYbRQjj1t@>)}ekKaRc2Ui*PbwtZN=UsU(X zbtKJYyxDAo*y`S9(-E3ZFz0h!mlvmQR*pti@({`@+QKRvJ+z$h1aoaq@SBCE6V_McDW$A8t<^C)Svc<4aukot+79{vovjmt;YG?e4<)OcebJq)x(? zPe4!)GApapG^^=^LrOVyL&$*2#Ch;GP}20QqQ)%6-7`IJG1u3TQWp#9ho=lbPhTtw zx)OEN%n>*$@E^Cx+Ol@7;F0&^l*bJ`g`R+yBfp=a?QzK*fTe>wE%+_h1ceU{rAF?p z#HUzg*KbFziEge@{Ic&e^W~{KHeNUn(B>-HbCChg)6@duNd#Xxi#%B21@tNI*b2(N z9DeY({o9RSy|cfj;A{}&44uPMq`PKw#F*~!<=+keN$%lMqCj(b{m6M|TYF&t_xuFc z?F%{hQNawVWX0>Qp!C~yF8$UtAuYb9u#fd8snOk;&JUrtw)~$fT+5Q1>>-<;S6LGH z23MveL76G;xdLQPUQ2hJ1Y+zz-wLp5Gv)HJnGx<&_}Srfhv+Ck4+vKn*hJE*{JOrY=7d%N)nr_UTbEw zgnaq6r3jPxEOV9L>udt*&TC1?W6czS3#8!BP0Hma)hFJ+%D*#6Y!s6jg0ts|i^_T} znB{AplGvIK_*lmT{>pehAA`-AynsdWrpPRcgF*OS0*c>ZU|EkP?r&MXn3}L?} zW6QkS?NZQ!$m}T2Hsn+3Vn=X)yldtAD{)Ji!V0zWvPXyWdR6(o8EUk4t{}uZ_}*@C zBZI9CR4JMNTlI%>Ubw)d#r@j^26r}{-*?t=MxG;7hbxIPN05aqSJ$FW%9M1Ldna3U z^I8BWPm+wUAeS1ZZj@;r3bgs z50_~1Vy98K>rjzt77|_ya+Sue-)!fQ@t%DhMc`Nc$Cw4`Nftoh7)C;@%9pQA_*5@; zQn}0ZAonm8b%e!4v7ChG%3i*2nYei+{k-DI>xM*E^h4ap-#>Bdn>^-5;T>Nf40neF z@_v2vSoBKdXx^4j14#*9*mGf+0@jfj#Crr;jr#Pm*CfrUsCTG|(Pye(XoIMCF;yrh zQ#q7Hvy2mXzp8;YzI?)Zm4gG9Rvi$8yh=F88Gg2`{7rgq4%#X3Jc6LG0I$ELH@FLo zM+*;=P|Uz`bQ~8>8vR{;tGlWEB}$_BxjQl;Ks*QLrMZ1C8f>;uZ5OY|{!08%Y-*XU0fuwT=pt z5b0%+sz;{C6fJ8eGmU@aeA~v3gY6uw*&PT`d5pX{Ps0Fo>N(;_{EI{Z{<1Mf$% z7p@3|hv0lAOqMBiJHb2)--wOM0qR8a;^*D}9e!E{d=Xn{!j%+JGd@t6r`)Ea0`XO- zmj}!*!fjwD{eyC&2&jTZ84<0%lb~o6t@jB%9$T55=;y2%pO%yqs_z^|!>VY5>-rcB zPDd~`x!fd-&jXWI8AQwLObkd%E$3*)v3_ee)3UUfDQEX=U`k(A%ocmfOCVmd~} zzU}Mjml1{r&2Zp})vE+0z_;$orcb$whOvhRD5!_g62-?o0%zBLFx!~C6hM1ql(5+V z%ySi-@k1OqK|;L5HekFbgT+)-3Jrk0GJ(0if>1aJuFrx^XFBoG*H&d==0^R}T7BWK z+C-j>ipUAQlpx=ELeW04pCfI>Wg|P=mPt^lK)~S%ab}~`Qe6stCr1~qGUm|x=a0uT zW;H?w(w}YP-L5rtQ?{%mY|l7_JY$#Fw|EJheK@=FX*N1-^6Mt1OnD>x#P0|MO6)o} zt814?yB!sU*X9xpZiin$om36izGRGemk4${X}(>X*RYMj70y*654@Q#RrIOQ*ZB0T z*?qA#!l%kk(#0fE%shNXpwMW0-Q?%mayJVNNsy%LD~k1%Q3Du5pLipWA00{F9j4Ga zp{cFm`r7h{Z%cFcxn5xr2woOS`|s{1fP}1NeTaCnrE2GnZe8EJjCk9%FL^2g0>S9Y zflr#|ogDW7;tQE?`!J+DLnt=3F_ruV$a*{@gg3qsMEVUeOTCUU+}NQQ^&1iFd7bcf zWA_=R|CoZ*o8*j*Jys?E3H_co>8%_4&okc2V)cj{jS>;;rOP)vxjSXKWHbNe4b5Qx zbAuY(I1)Q;?|a+h{8~a7_phH&Lxz;MOrnXV!l=Mp_y_Nr&to3Y{73xnsEBIaP4LOn z7SWNdj5=wtWAjMyuCG#;Ev9W>fD=#Zrx$&dK1*H%Ew_B#HUBAVXKvlQ^$y->;nOEf zyZRs^@XBqj$pbKeIl~viWbh-yolp*&z*jD2nd`Gm7}`T{e)h%(u*ux$jlN-n{ZT0j zhPD8#i9ZXhx)JLD2afD%g5ZagI^N041-Tpq+R>N6&z^;#EGDmf>fNWlN0Rx$u?3lG zGXr>|y-q*Sb-n#2PG`NvGAT9ob?Ns3t^QWak#&a}OZPForP=tridJ)yV)4w>BSRbQ ztxQ+%?wB-VAyYVSqzqvS*(}(ZkasjxBtbSudBqj2KjaXWq3H}L}ZkwQj5axJ2Xhdx625TdE5CDqc_0no4-%!>{pViinN2bS~` z>h}W|V1rd)@hNR|{0#h(eIao?xOg*-SbtSzbA!DSDitV3H;ffwD~S2^$t} zC`lPrC9IERlp%7>N#^^goHHa_HKh8Yd^(_v5e}Mr-51W-%*Y|b z*N${SC7=06N|Yg_@1q;)q}smG*F0dlDTk;$$yK5&8YPTW+)h>ADHIzYrm3JJF|K{) zSrUhgcrw-f)4DTA8N}Vj_!AaVNCg|L%fF5$c3l{u7mc6H$@-SRX9NFMvT6Ymj zzET+RR8qoaOT9wSTyaN|;+ds_%v}{VhcXg=D@PE=(=!z9@J0%u3dvQ6!zVGt`%sZo zkl*kyY&PbZI#9LNNZC^?0^aBlPazvsklElUtY4vEA>)%kRNif*IzXCCJ?o%--06u_ z$Wct~Jmq+w>YrDsRZLONN5O|qv?$W3pJNln+Z9`F6O>26&VH2QgvjhLnQ-L{+dVng z9D!iEcyd0~f}H50F4>O@wM}Cx@f&y^{16Fe+5?w~ReIGFZ}qXb;QM=8z6n^P{BV}M z$Y7gN?c}pA?Wj_C6uQB0@(dI^@W47WhUuIcCZ-%h4aQvzgd!N?ieY1sbX{$?BXLLA zbFh}}tS3OH(QPxL{iaO*w(^4qiePvo4_nUjh7q>$sh+kp_Hn98W4vUms>on)n&UKS zA?}=a(rQ60Ko9S7NMo~UD$0=%Y#jyOkguNp;(0!Q%fBAZdhy5E7%4j;y3jYv+ zf7~_=o#Ki3j(^{z+7b(V`=H2vHR5~RQ#+)I{T`1dYR05MG`L>VoJuKWRg=I!3iCXZ zNjw4g9yYx4@?kbvX^LI%m6l9_whQFrU6=gtsh4#hXT1gqU#q;t!_x}kOK~0|4tGvf z5>3abre^0uKPd{HE$$lGU__Bx$1Q>g!wW*ej!M|(=p&TAPA0SqiiK3UtT^L5WZ z#bc91|H(FQBXwqMw)nA#Foh8qF=CCE;8>S9Hf1`VXy1p?zgA^Hc`}M57iI=(XvP)A zcEO!7u(OQ{if=GUA40bp_@D3h$A>?4kpYutM!iYP^1@i{RX3yrvcO-=$hfHZNGN;8 z01a{qo^Y&$4i6Z+O_?k%OB65a#vn^{i|HRCc>0XqY=b!I`h&^Zd?*bh^h&AwxGP~q z%fvNeQ!9MoecNJXZQsBpZ#c?iaZJ-9W&C&*%!1+D{dxYO?@vnk-osk{xpXUN_R!F5 zf2trvgzX?!Uksae|0vB?n5mNG_&6~wqz|TEsmi_vG)S%|X2Yth0X62Owec@YhGA&a zeZ%hU7|JUEC#oXqy5JdB@X*kj|2s^TtLLO5U}wiCF3OTpUVNs4O%K;Kb|gjkgTVwi z^{pBvY-%6^7!d9ve$v3xum7>@T&3^FlCv%CnhVbRSSec4xg^nOkFpv1*MTZ?Hz7PN^d}mY z+(d5taWD0^u`ZfzA0m?;bqoAn*f7%e6m1jK2+~fdVcJG38Ku2tLpkxc_yEE{0@zHH z)`aQb3~wUg2rv_Zfx<;%7RJpt4pR6dXr|63ITn(T4WY^V#)K9KGFm^ML~HfE!#tD) z(xiay;6g$0ZtD9;>@lEtCX^Yv%S*n?$FloEXqR7cSHNIb(0*6QcUL%KS0sH`v}9MT zWmkM;S7K>b@?cl$ZdV$*2PfZ?VcC-v+LKeJgDcMtP*;53q{9q~iY!S#EHK!6e-Kf0cTzMH>DqT#n&9lX#SaOzMa&S|2e(M=wc^~fJ`R^4C2NsudAq?lS$S(WS7NNaB185Norr!s9D=W+( zM5GmOc(+jaK!S5%oX1Sx&v-&hDP) z6GHAXTj$50Te8!pd<@XSG zPs(NYl#%ba%in7?PbdwKpDpi(ZN08_AHrnFaAN#y!$fgigod&#JF$-1uqD2M7QQKH zxfUO}=6VZ-I9~JA?mn+|Mk^u&D7-$h+`J%o;{rq|Y}qiVmg@hh`2o9tS^O^Eg;K z?Am?!VHJ7c>V9a95Bq;qlf_^FARlZGF2%ye!6zUhAR_s<2#LwasifD?|EEztzOw$Sy}#z1#)q9adG!@_Vjap?dSQ%+xve;0locK ze*dk13LXD{3Z4Hc(((UaXzcs&t6fYa3g8+ux4Cod5Uv ze>?F1*Ma{6yI3&l|4(3dIQBob6l3*;qyKMU_dm82HWN82jV03`Mg9+9mqxXzY_9Ns z1G`#h)GFoUvTB)|$>4l=EXMs8*d5%XPHj5+m*ZY(Q9XP6a=FT8GEYOC z?<}v?<#cPhvvqkxJop!_=09L}T0Z=lISQ5MKETTTg&1gQNcj$;poExtJUb_Pf;^P ztTK$Z?R)t!3={hT#G8`m2Uvqy~B!B}SjTzqs8^S^)(GZ>%4BZ$3Uk31!S6hesv%($ScGk(tp1Y%R4 zAw&*0ETaVp!Wn9rlfyr~f9Y*1P|1FBO z=6)wm*!|xGnF86jmul$#u%F3l1>eNwTk}$pBX_!l5kUxn*us#4$CIkoi^tQtQJ!CC zP0Q}T&f5-aeqD6^y!dt5hxz>X)ewcp@9$%*wOtoND6L1?ydWu^GAJo$Kh~r}?Vr1i zx0io@Zbv>x-|uDgzQ+PKv2-J!g}R13T#Y{e`}=m;DFBJe0QtTgK5kfhIf(noIU#xBiV}7@Uh!evxysyI8)C;f; z$7I1Fvvds9-xSMQ0kEd42$87*{I_Fr>)my9XuecyMcHNGyVbf#W%WmOUSxldGy44r{)tjCA&w~CGp>;OFiJ*{ z7!mKbF!uC#Y*gy;d*W^*BkfI8k|gLF8Kqvt;LoZo`#6M*jVoee%^Fh_OJ+qD6|o49 zk3TM=pq#K`HYJq_o$Q9x{G43o=jAEtzSn7Wadvlb{|S?|>vYaCnKOfN)tok+^gi4Y zULPejvnMy1?O`;}-#MjN;@@P=#@X{Fsc4v=IxXDv?Mz^gZ9ZDPOtx8M z8o^Op06Bjqg*QPM#&i3La-W`^hC@q7ku-v&_(+y3doDR!AiOB9^v-Wvdud;xNRa+m z#X(gUr^Wl7uzoI$wHQg((rqbx(NeQfcp>*%fJF+gLMH>ew}7X%Ov#N|w^UXCx2V3q zR(!?t%8A9A?8|>AP=&$A5xgZdtdo7m^z!H~hG}@s7PVWO?Irba>Jeh8S z(gXh9E1BB84e5L1RpYHudU=s;xI7I9LQx33uu-G#>mLn+w=ULT@s(vagSrMe*H_lb zdQ19C^~f|XyYJ4%>zi~KlyEfA-r-cK7y7L+*N(>Bfpu-Jqo}D;-0hV1>FPN2Wm}6{ zFc24Mx+eBBuBF?}N@l%d^V&D{*$-|Vib<0N^0&?L-MMeFer;TT;_LXbU*%r9zOnqn zppz3=bAs#?+o`x~+a$Yuv+lBm79#3CF0S!$`e|`rBHtr}sy#V#+4!DEhslQE0VUhd&I_56iNXq0*B}z!Hc<8?QC0@CvT7-eJVJRmA59yVM7*xc@F`z@cK?W zS$%mU+*M^$cS7wNLi!W{WVhPHq5HT4Q>N<`ZbKx=xrX@V`AxVr1ED2V2<-X$Nw&@U zbE!#-4YIaT7MVJ9NGRPNU7R5hOQau1hnEd34~JGX_IKdY1(OZ|1}E`q@z{8SNvEu! zY_nz{3qr_Kx`5uuJXidS7z7FR6ATzH0LB43&~%v{Vaen1@px-5kRm_*fcM7vX_pyO z?R^at=|-sK2>>Gz^W0iZcCW8MY1w}54Ze*rh8Z9THQkDY$ZHVv=-A$pZ~;i$e6H%| zoP>HZ_QU)KGD9tdm_&U3a#tpasLyqA9|0-%%?*u~Jfn;HHOz0d=@)u_7QjfjU~BNa ze7I`fxp8l;diw5dxQ4~jIH2K4Uq9;Grr6^Q9R^EVU)Wmrg@mrv1p7g4x3IhP(_Nv_ zWimTo^q+WQ#Jit8WEA%p?z0Emva670#n&Y`npgeA6uajKZ8MjcR;M9mHNVlE&L&pk6!jZzOD_%ZTs-&DzW$X;mg0v;QY6j7VZ#rD-dib z@cVj;88!mMj{*_G{kB?c>7gL5D-es7>-_SIG$Ak_9KaqdX+1p}TfpQc*S+0WFd>yWZyx8nP13n-=3P(eGFC8OK?mk<^5pPzb2*)4( z2SXwCjmDAs0gCq#o|KVqL?YoUz^8RU!OX~jw#dMh$Pf3C2+F7sk*F}Es0hC(bVyWK z*WfEkl&GIRh+WyVdk#Z9fm&D_V$ zQpSG~iC-{^|56q;;T6-^7B2>I>)j1mqDWhR`oC7i7!T-+yIQ6^rC zB;Fb&-uWfoM#Ya8#&4`7a_zLCSAl`6@eG9s5E+zFE!q z@Q{H}N%D5e2pg9JH%mmeX9Txr#;s<$i)MyXWr^HsCbLQ0kZN*niv=EM=B#GrJ)|Jn zvp$u}W{PT-WU0G7WL30hR~aW4h-TNV$`t!&FAQnR)MZs?ee7uei2aaV|L~DY;A2y? zT8sb3F8`dd7AM7OYelaDq=~MIE!IAGv;t|giVfFFY@Fhr zZu{ChmspFH_;N_wiIrLe04Y%=wA&?!$29p9ZZs9D)GDAfDnQo1qV(U*@}#aL=t)`f zNvdZBkYu(v;t7zqt~_V0Jnyj_^`zpHSVfUZMM*$KS$0K5M@7|IMa^SH-IK}&vC1Zs z%9eo2w(QD|j>_haGB4-yC)=edVpTFuap%Ioh=8)_jw-6XN-r^>Sx3o`Sha*`85N>x z+@y4>qk3bv${xEqaiU~FtcEi>!OyRHd;+*OQGHe+vGrKI-2vQDt+{nhJ_x8f?x;EM zs2#qkv3OE@V^Rxxm-I8HW_6+#7AuXO00N$tgMZbL8P~03mt&dM-!|6a;nY77Pa^(U zOa80=Dzx5=qZYrjo@EkA^RAArvtfr3-O&G}j@6}sU9FzWv~g>lp z5xyRKoLw*eu0c|~RQhR?Ol%{sX%qNelXpdvPOOBwX@lmkI;~&DD&oytrp<<(^~RM| zX5uY7{rJP0Ol^rgV9o3wLwK$zNoSluapPF4dbz?i*PYXIHJ5^6RdtD0pIlJI$ zUBjoS(bz7*%C1Ql)bwc=Cr|;!ZSl*arJ9V^ifoOq^jx{o9L(6$bN=9z|Aqh*p&oZY8ykw4?|kGnN(cvL@2<%z4&ua;3TGvNnD!Q#_)%%e#}S^DF88!VQZW- zqSQX(8dt1C-QP`O9i`}lZnFuj)*tmXOZkWKdS>+rBY^rXwzugn$_}rvJsn>enW<5O zbD{vuT0RvdU>c+oY!+xSV$Vx%y<#wC={pv6mX1Xoq0%yj)hdRpGEMny!m8!;G!vY- z2rLD^#?E+#O$}j~TVTe| z>a6xI3ES0>qanoHLD1_vG1@W{;VXo135e9(M*`{C8wVDWTzRPk%t{A5O?RWqUCB^bj5n`J zq-n0`?stzLtUm9rt!}R8UXL~JZ!%wJ3S58nah+9Sy(d0Lg=^!}_}Z{}bzgPMnB+$1 z`@u={^vBUZ8{y>}^M8^T-8OxrH&-{4*QYlfk2k-X*Gx~h?zoK&nQv85Z5>ySoKA05 z9B*B|AN|h#HBaU1kLsiPTJuZP`ViBz}#nkPSUZ)*mA#Yh+eCTs&$w{a4ZFfX>( zVc&?{lSnkbH8_5w&`i4e4dOz97^HTXEOuBv?6BqSaP;hOZSC-&cX(-cUr6l=SnLXY z*cHj!73pinf+H3`&JhFuV^!faf;n(4Lb%wrtSw~rC{Ut;@H~T!F4P@*RaBZzuvFU3D9uQ~br`zU`#ypi_QYU#95 z_Z04R+J>H~!au5U7w@|`#|?DgkcmyL{9I6(&FwPKLOOG3*puxCfuUsY7PS1F#OrKz4l zo<85Cd3k=;bK05mol6Lqbr4-zEgdIvQ`-2RhRTA;^7_i_n*H)C=d(28%j?jD;heT0 zHo|aC2Wi#&S1fh6++IKhsT2vzIVnpi_~jL~^lj?ncMjR_4UAX2RRH#F7m2>$hZHbD z6ewa8JnXx)>i0uG|3@>4XHDqOiLI;btsfT8Qx!bUpC^jD22Eh-xw2|yHQF!#QvT_i zDBh|bQDYNbelBME^(V*QpP0Rubkg^&jDgY8;-0k}MIsaNigWZruQ&u9nNc9_6k9IE zM;5EVP{GGX?U>re#Z(&L=G|P08R&)N9DDUN^)x8Q4?v>j&Y1Wk@uhe>x@0^h5fE{C z8JKwTq4q(V>i*lsLrdu5r`m94)Uq|T|8A8vI|78Jcnl>6GWX4m`vNFX%M?gJny=sX zbM(Za(OK>N1@!lK-zk9gfFhCz6cFWL8l7wb%dD`iOaZk({ro@cd)?X92Q;1lCpP43iex7OzST=gBz$- zkydoET3U3_5K>-T42TioxKO-^>Sf`!&|aM!fi#3qp2+w~4P=)W_j$>Fm&-|cSwkqF zB9%i?z2ZrW%Vg)}-W#m&U3X=A3{nPoE#xLa;Ic5!;8$(!AR8Mm6XZPBgP$=;{Y4WJ z7WR_q4o;%MpA_gyk4dbl#SJ5w6$h%_M0M0L;wcrO8#To*hxlI-Mn1(JCQX}93M0>N ztk;qwP!P~=@;sXnze0MI)3GSXR*k{5U@zuL-HnL(S&6`^6OZx(m2GN*c-Ik0q@a`{ zDwBB}c+x8^K)9ioI=#ZVWkgFVYH6YQxJkf`^Nhf7xQ<}+Rh21MxHTV_)Hu~;T70&M=iFabJx z4BkjR86b8j^2#bXgyy+%+cu9T9U$S9f<(I1qq}y4H`T8`vs6cULI{vxxvPNEmpxLHa=PZIHS)3Smjb0Plm) z)AvOkAOodPVKH=+^ug0dEv92#8rk1KU=y#W7sO?$`kUbUAL)D(ej?uhunU&p@$$$; zF`q?42g#Q;#@CPBb>k)7zU$TeA4QW*1I&x5CM5e15GJ^cewe$}ECT%a<@zTC7Y+xL z%FrA~kmS{-VGPU3S^)R6q}d}$c|tyfkbas8^u#I?vi3?EN~F8*8IbJu`E@xe{dY6K zko~UMzSkUpA<|c~htK1vW>AX0ZG}UHW`lq3TB`nDrlxRoX5oLt03BB8GYws1!NhpY|E0lK8!*8Nb<0#y%mI7 z=HeN+c9mP$<|fkCicr8ew!9D6+zvx2CqjudaIOy3@%XuGO`=5Pv<%Z|%VRP9ghi!>is zJ07wJRpu{WGI}8gi~m?=F0qp@nX!A!MIr6#_Ck$DgHuL)iJ}_fEH}(tv%&n$?Hcax z%9z;i#<|NyXLwBJnV-YWg%{g3eJ5<85w8sdh*UHKT4r;&{T+nX+h2aTOJNd&A8JR5 zehwf{Mf`M)#+@yH86>n&FtgAv&V4}q`pLp4pgfzDWgm#ld!g_dhLf^_m`-x~LJ_Ni zld67)PI}8i@$+yebvrTL?4^Yg;bA9DpN@Z#v8foqTor}qVtNgBw*^WH&N_plv+Bf) z<#hZNI>lo871%$@4Vw-0$~*LH9_K5JFe*Pat?4(U`+T&-b1}gYG-zyDtZtI8G}-51 zZ0T97d7EZycG!VlK3yQI4Z`4h`eVXyKy|b>Si$wxYmt=!p%$)4eOFuNPWXt}QiE0S znXO>w>Vp1VLq47{Uf6WYdMWu8knc#PEFA17TF2kA#pVU!TS%>epV4)OG6U&n(3?lY!wZ- zAh09}C4nAaW*=}b1q^?N^6*G7L=o@;Jrf|_ur}))X18Y1dE*qj7NDh~{@%G{xdFRl zz6&8^FqYmP18YRWzes(}Oj;$>0~ zUZz>XSH!#--K$(M;XXj-oq@p0SOk*@uZ)EWVX)xN+WPpHA2r{jjzN-#sS1!1A>t1%Nbt9#>Hj2oPkN=tL#jd3jg) zZSb1IFeK6||@Y7c)LhZGLv+uR0y%nOEmseTjb zg0&;#mtCD9F9Qnn9sDCLhS{3(0Q z+nut!fj-=YKD@m?{M$YPNIxNIKM|7*^0C|-8%~~7g5_GgrBg;_#Rik_iwXdah0Y_@hIzuLaB zfO~I%=XT&ZWRRD1kdJBbg}@-c{Gfo|prGxbkoTZ)*q~q_%EMWfjERk{OMv}1Q>sXD z1rbINU)Q?+cn=$f4I8B@1Z~ShuZL=l`?W|Flup`o%uvRV5i8OW zYo?J`0wXr^L(mR|)o}%LYGKJR=3g=+PDLZmO(QNtBUXANVnf5?-Xr1_)l#XMu1uqE z1V+8&m0UMQ{2qr`e=9!6R>D*r^)DI?Xc~PNH{>&v={wc-R^XE#+LbPlbS#)@EM!XY zy%`7VnNkoF1HzUrG;Ay?bu3y>AxypB9ikBNTgmaP_;%8Mu5D*QPfFO;7s3LMTq z%SVw;^fIcZ$6*b0#v#XmP(A??O7f>|wBWL|cjC0TD3Khki3Wkm##H$d^}g)DiPG4K zBwF2@Y3#JCAU z*AcQ!MRwFgDgs~uip9Jm!yr`uC^9umI$fkbl|m^yLW+YP)rfX6UWqMB6yqos!1i*-%m0?A9kH;QwM4x(p{+X&`x~FJ=t9T(Gd6`qN z%hd7i8=H@t|<7k04A?fxST%IrlG&EYYac@E}|p*lIW!URYo&anZ(3c zhZsO%NrbI0*VJG1ML>UErAa4DWSVO_hFc?=qB@TlK;nTlch3f_o6>GDo0rDWQ*hPQ z8_*HKkY>POX538vvijn)JW;$Bb*l^_i#}RPVIDrbppG#l^IliZj$3|TPT@UX!8U(v zbTB@z#7Lct8it03k3M{VLH5T2BWN*&a5Tz)(M*5d$Zpa&e)fL=Z9tO0S~ZDVg&18W zRw?CGe)QGd1J;rd)`uz9XEo7d#YlHd*6dqWENV$;)mHeFR{G4yYPD9C%sHui$Za*( z>+IJ5X-04jS6&=fxD3d1HAYd$0UNM^8Nkchon1LJ+f`kP|fK{P&9aw@DSK=#5kHlD5ya9)m*po$Bh?RjG z7+F}<*dVIUjy=DE6^VmQmX>8j9>}zmb%BcUS)b)u8L$B!z}Z!NSuT>aWVn1PhFfu}{qqvhD7EgPB*37bV0u*Jlkomd;l0Z6P@ zlU3QTRa;9G+n6QW`dixji-{^M*SeKNQRv!b%7Z;UO~kl8ni*6>{a2_ zTXzLn@Z6{p%s?0b-|!XR@g?8#HQ)0^-}F`A^=04ob>H`e-|}sNiolc>h~M~a0U@af z`@P@(_22&m-~bk2_x0YMIzgJ~)MPclw2fXvbl$g>#T8N5oDdFUu;bVMZ3hv@Hw&6AgBQbs;4ld)wy~gBC<2!Dn zDfZMi&Jzxn+t}sTNz{QxUPLn{WWi!%J!YgFKEgJt;5ueR9dK9~801Iv;2F4BMU>-7 zz9K_5R7A#;3dZ6&K13{*f#qdHEdJp|d|@u$T`xXe$+hIZ;^S;RUXzu9MzrNwHfD*1 zWkV!pRJI~jhErC)lLi*zhYe*#6oSpY=2)iPM*QPjj$U2{UV;5(6%OWjJ>J1B=11Jz zQs!pdWoJMRXFN9Ia=w;x{{CCo6$O*E<3`NpiQQ&Fv}G4);zm?w-NjsS4p`K+=RCsX zDcs@X6@n3##C9&kfd*nn#A0`bU4`D*;BDv|!Dpw1-ER(PMic_)1?52;=z?}clb+{7 zuH=vo3u(5K=*416+-JfK#FnN+iauVChFNl^X~P<64)CK9g1G4uEc+y+itEzr4DL({$i>&XRH3B=mly^L|o9l#GDRmnVxF0jt-ly6SRI< zm!3qf_G(Lf;;2sLnU?F&GV6%m-4E8pwZ`j7d||(SX21^YI6Z2SE$oL~W=S0Ao;~SE zTUw@`qaJMjH?nJRw#3VRSY)=uYIXs}t|Dm8Qo5#-(N1hg9O%uZWl8L7&i?DT z{_M1f?AIOUht=gsY-zp5>`L_Db>3yM?&aQgB|(bo85?B9x!a$R&PN}X`X(>7ryO; zj_-x`w@s$01}v48x*MCONHHu7H$qFa6@G85l_U8W^F2RZ6Q_hD0+==8J2wk zkQmSa1X%twaI&7~QJgas3BDLM0GDnk*60o|M5b0*j#k8G?(r%5@f8hn=ZrOlNRZKh z0KZ`n!SETy*)jwmxRUT0zllyNKVG-4Wh}>WZEnQ0*6z+8YZUkG(4L7E-;2JWjHg+R z%s39dur~GtA(GfO82}7_8PVwd=8R56#7%H!j@aQgMAgo0z+LdM74!mna3SZ9w+RjP z$P9>h&5!UFSSJrLDGA5O0hgi92KMqr#NtlJ@#NL?L+o|kZfxE@b-~tNrj-dpceR7? zmR3t2p(_tJAvzDK;3pn-LllKf+jd5*7+?=X)fRWKEp?DicE~35W>@tg-&5`3mub(C z82%s-U-1)cZ(t37?^i_VLrh*BC-LnL^mMQ9R3|b9(X#}p^;SDJ(0CPEzv&7-WozVQ zXKroBZtyW5iKp?1Ny&^2MF`7On$5iT5h-Dn?RR3_X&C06Sx5W296TOVo)c>p;u#pZ*G_`_;rs7XAg;j*wZc141wXZVbL?ggS4O# zkrEb#h~;u(r16JMdC_(G`Br+WxUlAI5=&=b4t`-77<*Yh&wwunBDt zBsc>{R~!P%y09VkE!?eQ;kQf}>9uj7?3W6n%$`!?>}x_1*^{4_QR z$ghVJ54rj{^5hb8bS^7H#ta)cc!U>Sz**J^I*?C~9r@ z-*ab$_9K!#?zp5$Ew=PxjZsQDrGq!l$0U{`CAsB~pb7CMm|ud%C7CB?d8S8B_C*_v zRJ!>loV|I_)NeT2HNy)msIVuWefs$)pn(cHD4~V^2?L^uD!M46jXL@$q>)NGDW#QK zdMT!vYPu<>oqGBysG*8#D5<5IdTO97yfA}ZYRcwUgK^3_E3H3S$ybgj$*`&pXx>*Q zu)zvDta!do#@`Dvum~KKwL1H3t+z^r6`s8s+ZwUiYP&7BTwP0<4y$72DhbU(doH?C zO50MdCW-qkW!=g)>H7O`m2)yyA^uh@SbJ||^(wqD!#^S%nGP)I z8=JWRTYT|u>$22tNh&-nS;HZVJTiD6=jHKL8Hpe98eYci%8-94bgrhWgNqfiY zH{>n@4!7bwB7QmM#8z$+<0LuWZ{(o^Jh|DMmy|i`sc&hz;AbzGw&=0{OS)B^vmS)% zx$Dm1?IPJO(&w@ZpDyiq_b$@z$txe;@gV&k{!;M6OYdy)R6W1>^4V*jTJs-W|55bQ ziyvq8i+BIg_UWrH*ZCcNpXR<-k3YYg<)8Gv$tWa{0{ZLw|G&4|w-NlMBz}CO9|CJ+ zKh9O91O|AZ0T2*@6R_$``s1HR0I0zYrbvK6AmB#Am%tH9Xn`GTU;8hsHp%Io*)6gbfXDoxk3f} zvXxs*!2wF3LK0v=2DiMY?y$JaJ95OATLk9M{0O>Y5>!q^B-jy8Vn~mWG6;yophFYz zf*_bcnL)S?8sEso2wVW18^yp4g5btq20;c2&;Sm?`AZgH&>t_D01EIaQ`CJ+m%I#u zKPeYbVal(dJ~imT?37TGEVTY3(wrhXc@P8}P@n`dtRo7P+L4BCz1#GqO}&u0Sj)hn$Rj_1}!)ea_(hQ1dw#7RTC&&lN(o~A(V?{ ztZQQ>x{*cN@C48dLJm}LfdeRDi;OiaVmYE%k!rND3J@h&b6|o4M8E_oPyqIluLJmw3)*{%ou!W0k!BX1>-!`|q1#p6Y z`yGVovbe_88*-H^;-SdZdC6p>E=|ByXOnJZr(|Wy?0`c@IVC$h(LH9Dn$iMbR#L<2oE61Ds*zhq#Z4E1V9i{ zH=dUxDqy5i!8%^tsQ>~+mdlY5(%Bp2=>=%jWC{Oz=F>-``HLN_qP3E?-uN8M4m-RZE1~=Y~NP~xV3?{!wha=ALO;NZZNa$ zi|PmGn&S$m?`x|}<}G(R2N6cdnB&63HMjZAHn&NfJyOUNt}uxPm_VLOssIHzwW}E* zryiBc)D)s%qT(cH0`Q#C2#hlYb(FeFvuM()pTGndxb%E6+}Rl1fY`8QFb;^#Wtg|% z205_)0SoNOgR?Lvi=lpj3^{{?y6@Y!xT`H^8NPRc+M_NEbn zC(igg*M0Xic7j0ce;oYUvu2KkW1x87KD)H`9JeS!ZE@_PItM`#_S@TD+tLdh-ZEgp zS;mcEwWR&Es&+ePcSv{N@&MorUvvxp!JHR>Mh3ut_^t+z`yeEo(+er>4051-+*V%H zxEs;iE&T2rj9a$?cYJCeyeb^%KHmR$zRCqIgWh}g)(E-yWoF*RH68Hg{;x^SxlaQ@ zkO3qB2BZL2bp#Kr7Zg>M0vrH$#SlllKm=HlC{Z5;R1zaC5h=w|1ew4RL6!=*5Dfmw zz*t#ErujqU`GfW4i{vriuW=cwB?NZdo_A!~{r#5;AfB@67N?ooXHA&l`C6?#m?*TJ zrrm(GAsBDHz-Kt2rXgWM?8<&^Ug!Bk4<gl2`u3Zio8$wv2kX@T;O`$!#;R@QH81@&HaT_OT^hDp5`EXt(iUCmw`bVq7_9{$h#rU_jQJu(2f% zq}Hw_q$l#*XaU~jDa6ZtqQ>oDX`u!6F=1Sy8ue`?Z0Y1qlE_bvncsb)Ti^*WawSR% zkV>B7AF-sHxnvKyhW_+fYcQ59X2wl^RttjUm?%WT)z&#S7~x@LtLY|ECZZD>qL2-y zY~f}&LglYXqY^&c5dzq2Z5!Z~nnPUNH{#o_VBr^%q+6h)6sjXyP8opRT6M6XASxSN z)}u>>nfH|%Ax@!g0_3(Grb}^I$H8C^D%)%^qU61n#8qXff!W0EASPlbWTIzlxnUSi zBER{=Z6?b??B;NKM^?rqDW>H9y-H7+=9{7Bnu){=oIoA^oq$xeW-Ok>EQ%dY)>06} zz^dR$f65=8IH+%FN1mWXYK@3*J;w|Drfaq5iY5!5h!QnEhv-40RJxro;t9hYr)miq z!)b?*CKz;xn(Ms)u(2q10;!ea4tIu`cOJxyqD7c~Bd~dz8w#6}o~M7l+pfsrlp?3( zG2E`eXJ<|#+)b$=-l>u@<&%ouu(iMoaNa_E;}$*#fU+QCK53p5sDJ7yi#`~O9vBqD zsFijiu(fBrVQPhn=7pBaFlnfAaVTZDksc)=iPGfhWJY$BT9o1dfR&V$p5!?Cn}SiE z^YtN_O=_}m8Z<^|Z^i1b#z4E#VZ3qK{9z%BVix{|L5D(QTe1+Vv*y?RMQS_dz_T@6 zXfUh78Jv*Wqi`DJG)m&X?Me)AS&+Kw+L0L4(4@#&OyvIw@#| zX8VjL+GHrGikPVKkj^xvS*6CIrUoL$Ma=Dtg_>f>qTSqK4&+JP@gi%~7tz8jr^@W> zh-}k3EprK#bKxx2uC3T4?M^N2K$UGlJ^pR`u&v!bjoY@>O3JO-9u(RFRNdaK;Mz^h zD(%?PEZ-6oY8s5m4zA;hj0Z(br>;!mD(>0Jj8(h~)IKifE{q4|i`f1U*;Xzwp=PzH zt(p8Jc<5anir+-N#l;@jXSFP5d?Q-CAzUEaL%?0fT7*KDi49DxY6wucu+edmX55l) z7@;Pt21wv)NTyL=?;c0i5-X?)B1RbO*T&m@t=d7*?q%4nW$12iH5l)D#qW}dwkpT@ zAWP8cE%GX_PciSr>ItgcFaGAQpNI0kc2`{%;BgzkmgYaH15j2uF(ko-hiNimDhd{KBpL&h6zQ z4G)10U0Ca@Da$y58xAAu4J(y>y&5>RovZm;sNI)tLPvITTfk1E4HII>g&TJAYZQhV z!a1Jn*4sgzMv)ksD4=03zAlqpZIiVuvE5ggsT-^v1R7Ugr|m2nuL@KmqNzFC{fQbK zw_6XhVB0MzxWVzhY3;zl-MI;C9h)1_BAgNqT%HiJlbSJMYKOVWqpW#cI0hpX+ZUV) zY_4LL9UC04MP$641#*INA8#*M%<$xX>I(}I{Wk7gWC#0=)}68+A?hCcvFLSl;hzcP zx4ppGB}**V>1OR4!xAR`X6ByxwVkUnpRzgOr&-(gZCToB-xagg{Bar+3Y%Ii+qgNN zL!j(vA!63HB~&&ZEhE_aeH#`!vu`2ZH(v8F_GYe@om&8-^QE1T<=$wap)=bur>U;$ zrPQ7Fa;mLgYNe}hNyl^yG^d4U*%4oDN%Lmz%0pk|IAaGOVjFhQ;b!)xJ=0&6HW(;t zq50-vH><^6dMqj*uM4ko>Bg`Tt#no7A9gsXTQ(WW;@=yN^ti3uXH6dQF+?#(9RAhX zY_ZnksQ{@V;u_OoN^^^*}!j3-hlEZXDS3;d+8*SpTHHQgYp|7eq)#|V^^=rxLGf# zA>n7LwGg(}NOxYx(Ob*1R=U20Ouy~nGObIKP%ERZTr^vyj^h++B85GsTn^%C5gYe% zqa0GG7A~>*sR~*QBsZ2_8Y0>2Dw{iBvB0@@NgcLT!zq&;BRFvzs{nE}QX`-WBQ>%b z^}S=2^_TdH^Qie}v#y#i>+vYs7Wtav!40Oh8RR=s^~B}&Sco?aYMay!;kW(d78)Zr zQufv|S*+PpGd{;BC*1uZVZHvaF3KuvWHw80cJg*M0)6)8%0*U&Bx%DOY|$=i?=(oV zwq@=lXa1<15<^_Lx~j0Pp^a4+`uqAW?z9$S*gG$Lp?z8m#z z)=nZGb;q$t2dN_N(5isxS^nK7ez$`U=Vy)gg$Hl5qIY;pHRa{yvK{Gn$9J;Ccvp&E ze{$M4x`m7DH)QiSzoA;TRW(~G_J9+3lk6>m2a$q5Z(Kx~ao#mfgK-v8c(T=!k*jM% zydhO481rqS8l(52Hg!TgHS?twvGSIeT{YK2xS1g$4yrL#Qy+y+9`2f%TEpG#lG+iX zbP#sdu5I_YjbayOtLg$Jl1uh@I|L70WO_sS8^Rr6D<@(1H={17LV#~oKOFg5w!q@& z{zC9;gV8R~Vz!#EdHl9H7`^%V)Nqnos^9aejr zcDlOKsCC4ucCc2N4*A3-X`6Con4WLC*H%`i>$+=4!yI8>$AbCZE38hJx{%wsM*wI^Tn8xVBpUE1+te zmHrpKJ$+e=9@#NOyD^-#-r%uWX}mi9+k+andn+#z+p0kGLV#;8CpkY-{b?j+r3L|~ zDL$C`GN&=64DMQtW?O@?Jrj#wxF%&vQ=WkRYu%^)k*J$6nljD<{Ycat&(DvucTeU} zTjyRzVqOHElnLv%KAXQj{ltFrWX`JAzRQk?SKhosEazoA%~pobY0>jv?PxetUNFlbD@zhBry6C3+$c7ir zODTr$(h@~9j>1z3HPr&F&_a&<%kV7sf*Ojq`#=m)#1Vzd&#}ieOp&Y$WfR4Q7Fdu$ zM(JW;Ax0kj5#@y$W?-R(*m9f!Mj3+ms5={p^oO$>USJ`H9BA}WNa{F}fdv&}gXgmFB74t$XX8*-@e1t>e>p@lJTD9ue7$^*?uAUi@0GaDIX z(n&gbuu`-){b9|Y8{TX(1{{NU0S7suT=L5p+$>a5A&X>DHWf+Di9?0p>y5-!S#8x- zs7yqz)LAnU)iNP%$g_pa?402S>t4u_%UrF5Qid09{J9-go&fn79=EwW;Fuuy+k6(UR2V(5R%+)Uy z{kJ?9kk1`O_b&34E?1(l!2xYxGPhv|RIdwMu$DErsM+p&0-BViK%%v^aRdh~Fj>8L zAUt6auWUJb5O|V@xJq#ff#(7ogyv*G1m>V{*3;Xgvd59_y+CaptYG*=F+MMuZ+~&g zpUT)rg2>H}iA|K><$!{}Bc`Z`Z6W@hKMvO|pXGpbLR%V0zy%~T1;K%jYMKXi$btzX zsDg&GK?-@7wbpb^K*17W=*CvUynwC)RB)$)NC+)4fsX_8rWSYh&}8W1_$(|?|{aDv}~w8Z-UPhz4I^e zq~}wiIvjft!+9 zmHHirW;~gz0YGa21)Sgp8R4s3>DrJN;8m{_Ijvs-OA(vMfCP+MQX>L#EN&)Qh-~weW>8%ue{ON51v-@N)0#SqkXaA%8UifWIq|0c)hd8ac3F z6TD#a$N&W;h(HNYu$>I=n8!Un$%Z-1GI)NN$e9iCPV$T0AeeZ`qkTvU65zogyp_fZ zFhBxG+mIFi^#l%K!2}Q>+7vW|$|p#GXi>m}iSR%L6F9&DK){07Hbe#{I5PrF;29g( zI0AjnbB^(|CP)ES8=Y-!5BJf^iS(qwEze5lkqS_4dgNKJNiL!c~Wd9&alckOb$ z$*lfqH9y46QZ}^&#EWSJjJd>fj>rip&>Dw#1O+5ukSI>@XOM`ZT-g5j)v?aGklSYD zCHFe~POcH?N;d_QD*DS)-R=M%80Sl#fB~Yb@K^WM)FW21L#X_a7YE@6DKG&96mWo~ zb7bipIYFNh-{%svH0zCbd=y?jR*fVnJh^!mtYEN-PnA~gonAU;?m< z|IQBryoV!RKmsJL{Xj4T(c}FhBmU;^1n;B%EMoic?f@h})FJ=`o-YPPO#%+!1k|kU zOdtcKOWtsB?i_*zbHD@)fC5DA0y1FE`U}TUAOa?!_8`s#oNZlD00K?`OZ;vFMQ{tb z&@D(XFH8^x#ZW#}up(HnA#%XX&@ARYEy57s03sj-cCPJa?ah9zwHA=XA|eN7?aEFd z`~vF+Od!nS5b5S91t`D@GbIH`AOe0O;kqyqC9x*H5HG@T3^5Tn%CHh~{$dh6@e_@R z6E|e?&MFg4kvKL{6fpu6S+Nz9N)^fC5>Ig!2O||>u_9bC7j>~EZZQ@~(XwbU7!_l) z^aFExaYc498I^G)j*%y1Q5d1oDr~VCAz~S=@fzWV8cpRFkt-U#F)OA~8yf-}$#ECO z5htGU8`ZHX!ciQ{@f}<795o^x*RdXvq8+sn9`(@^BiTX}bl_V|@+46*B~@}I zQBnu2P9$YwBP*gKJu(CvL{GdZ&}J@Yd`Gc-kWG)c2GP4hHSGc`f;GFh`V9aA-7Gd5*&Hfggq zZPPVzGdFefGQ)-LcET_ZbN(3eSY|*6zEUt*0x*@+Cy|pSL{SG+sV9IlIFC;tyTv%0 zvN=^^Ik~e2v{OPodH8;qCX_rKLz6Bv8Z(qZKlCFyR4!8#BtmpPM|8+a6hrS*R(66y`Ljhif-G;~2h0Ws zcv5M0(j{#`EOoRlZV^Y((L!fb7*A9^kJKN=GB!j(UUWc7c2Y>81S*X*O0y9bm2@7N zv`K04Npn<3$Fd=M@=A+TX<`FN$I?r`R29S2AIFqTPti<|GfKx&NO|&2Yk(w4GA`xx zMJqH$DGyJbv_?BiC+f5k#Ve4Rsq4wG=h?sKm*=T0t%FjQXm2j0MC3AA}aP`GxlNH>;TZr3`qd(OwG>FOs}S{3AK<- z5DfxKfCXL>CRa351(sG2wr3G`VPOf8_jN^$VDXky^%fZUR{nIgA{>xw zKdqr0@a6W-A$E858tMixpafcLuQDK)u&l&xZ08F11U}-~Hg*GNKm$-fbSNNZof36Z zS4USj0WRWPXLm_E)pl>!_;Q#2BDybQQ@{Ym%*1x?1)3Kk+V{!e7c~-~T`}T!&+Z{? zU;;|uJk-`lK=(^7AZBfV1hUsGy>~9@c2?ANe3KP$#q@l;F@4oHVyUWpEh6uPHv#?& zYf*rPCV+5Pul)4)zh+J2!t4%pw|-j>dS@U4D1bUF?!Q{#fFZ7dAw&bD*MT2cDvgzA z#n&Rp*MjX7gEhEs?Z-ylRU-z_H~p84A`r9`prImSiXXy%&CG^Ht-2Vui)B~EQgqgBe+y17>O%5iu1N%hqj5UlY`rek1>LaL%7R^(BD#^ z3JGwFSmmwDv9QI4X-+ zf{(Z&l9-Uqw{|lakiBkwCnCUxxBJ@F1};DX?hXh;_`mGT=YoKjDWZxUA_g+x%_g7) zD8K|V?gCgK!A7}J{*KUOfNfQIm4mXC@%WV~B9?Q)T33dNZ8?zr7K+OmCo0#NGc5&j zK#A_|o$VL;Qf=st8K2*me=m8A!SB~BF7Xmi#xm#vf<=hE`6t1dRPq>>_qd&d){pl# zoo`u?ovR|u`5~l_cVA6iGys?%0+~5_`tYuj^O=9`c_NfqB4(|jnuPaQpb1fcXpE%B ztWqSobfN#Wq5f6mp~pF*ablyj5?U>K(r_97^pDQ)O3mc0mnQ(F0XY92x2b<_;7n}- zM4F{B86sATY(t`rMdAf80B+w>6nMHPZ#F{1mx4WbiD~($Eib7h0@q+L0$Ps$4(`EV z@4tqyk@Gp%`mFryx(Yq*uV?j;pNt6yap1ywlo$C*sO!J_G6=TyvN1ceHG8u;d$TL7 zMO7vMS{HU<7Xbp`tr60w<(kOoS|U_{V|h)5ZQ!j800AaI1=I|&9pbe+wgfEs%Q{vA zv{<*v80~i0WPeTJ9$O1rK+tH`X5}=xHH=m!z;1hX0#Msl(RsB?uC*giy1|=qQf84! z8+QG9{-_zYL;je%!Ogq3F1+D86u~sTQN>}|8>ulmyGby<`MWJPb(Sd_eec`D+&kp@ z`@qxUzb`nh2fV%WTZthR!6p1G=X;{nyP_MMz#m+ecXh%&94jllk1t%nGaSS=T%w`$ z!&MwUla#(8$G%Ivz6!kCR=mc4ti>(7zSld(>1)Ox&BlS88F5_1bsWQaT)BK4$bx*y z0cpr-H^6K8$c^m8(feMRJjfLsuAyAYHGG{LH7E4b%CFqU2Xtf?e9O7K$EjQ+((_Em zyvE}*v7dazqdd*i$~s?QKRf)*$viyUe9nuU#O<8Y)?6cqQ_sJU&#{~nq4Qd#Q?&>F z{izbONp`c+ExpoTz&15~(>cAJ=xbs*oS?Sie1^EJ=&#x+VA4l zn;rQIo!Yg1+qu2l?ZVoxy;Yvw+sVD$%{?o@J=|Ai+|Rw;-TmEFG2PXDMA#kP?fu^I zeX`_z-b19`^ZnleKHyVk-}yZSvt8g3KH(KUlnB1y>%-p{KH?>Q;sO1|ciiEf2;wPz z<2k2un&bKW;J-sg$F=w%Y8Bm(liqTc-s!2n>T4b9qrNz%-s-u&>-!Pw zvtBTU-s{h?0M48210L+do-4*4?WwT<_SfwbUhUT&Kek@(p}he9A@1=W;OV~ZHOtFI zweQVc@Av-f3BTR{9`L2{?i1hG4gc^T-`*FW@u{NiC%+OSU-C0w@tNK7``z(7A1ybZ z^GBcDD_IF>}XP@@j(e~?3S(|^2M-{M8a;|MsnVrPn>u|8HLBF9RI6IOiZ!d%p&K-0n9wsU1d=uc5;TY~NZAr9 zA{a=qc43ST2n--NfukUc2?q{LU;&ZG2?P;l;5>{tvEs!bQKk%#QUMCalq*}lj5)JM zond_f6-rdA=+UH0n?8*?wP~(i!FJv`c4XOs3R57MTsA@p{uu@17PKun1qu@cZBsyj zLIQ#m4^t>m0m4KM&D5(~XY4qD?UV?vd;bnTymij6e+C_@I=%Y!?AyC9&HC$W*ksKH z!Qs5HS_%nXDD?e;0vDVWQ3TTUHh~6tF@%E&C-Bfh1Tlz5VTBedgpzhaC=l6X7k&t0 zh$0q5UT5Zk_FjrAuE=7GTE*wuYq5z`mH{@}I00|_O+cV;C-m143J3tE&&Pj`YIifEz?aoLmpm!XjfX{3@)+LW2|r3un(dd6A8 zLcW#2V?#f(*=DJmDvD~V4aIN(1k9-lYpftL>e+dZQi^M?y0U1gjP=phkZ*N%8iWZ7 zOvsRsM9Ru+v(7#Xt!A|D^D_N18e$?0&?mkidZpy-@CS(XPvGyY9Z5 z(X=E~n{B=J-V4>XV*PrmxSrY>gkY_*c>-|)L%=2qBzOpK!wx?TF_!Yui*Lmi->Yv= z-FozGumBIMP!1_X(3fP>iA=Hq2)x zigVFMlc_U(K`+g8(@s}7G>S)0O?8S%qxt@H)>?1PHBM32Ty@xDpLR9RU7wA1+G>A& z>)39;y_E-D$#<#RcHfP6)@;Mgci&N!op<1Z4<7N}ejkqbQGgT9c;k-CYIx$3_r3Vz zmS2wflaWu(`Ph|b4tnUKU$=SZrceF(=&G;Iy4Pn?e0uCfr`~$)w%`6y>9X%$G3~hj z4m|L>^GeZEbO5Vy`uvUg3xB)R7;$SP zEZ`v&zX-;|=wMkOk>M53IF%AMLk}6GL#BAWhr0jL{~y2m8zs8D+?k^Sn5)RxpW9EYk9_72BDX`EN1zLxu{2i517Cd zCNhl)&FDQ-A-`ni5uF*${%rDciskv9HNOc0Y-)3y=9?yolnG92ij$n|oSr#@P|b9T zaGmX}C-UAIPkGLdo*%h^2@;KY{>4Yl8p@AV&dy@>oYH3e$C2l#1TO=qEL*krohi0txV_ zZ61Wn1f0NQ5edH1aN?nyTm?@gun$cEW;FH zEEp~r1u-a9o0d8OH%WNK;Gyt;Ej&U2KZL_KD1m;G6YX6Nf48 z81LDVNOrWPn+54e(~r@Y?(~&1t!Y9}T4RUww5d}C>QIZ1)2D9rg;K5R>#^F^v|`^h*v6KfFuSPiXoqKv+=T0pn+@zy?`$MZ zl(x64BSkr06x+=c<_^D&Zp;Mnq>iNNwaL9ZVFuxZGw@=%?~M}|z5s@QbT^pc?QCr; zZT`dg+n~V@j_`yleBlglxWgX~@rX@|p3l$=l;3hZ@F1 ze!7vDeC6K(Im%JD@f@;z<{xtT%Z;XTn(O>BHorN}a=!DRFQ(@{w;9ldj&#@g8_z{Y z+|iQ`^_dX8>Aj12)UQsulT-b0Psh5~#l3VvZyj!3|GL>bGWD_7tL$fQ`z*DtcCuUD z?Q~bVRR10Kx3RtMd{2Act+jW))7|fXf8N{$kNB4mzVNsTeB#Z%c*al4@sIa<BRM9_g1yy_i(L`k=So^~%hS+Otpd{$b&uTgFgs_K`4YnNQ6EJf+1Kb7wCaecZ5i| z6dkyPp4Nm;m=sVLg_kykRH!&gc!ffjg<4n?R@jA&_Jv?5hGS@GWvGSzXNZP=riN6= zhHXe^Z|H<^D2H4|he&9Lclcv@7=nAqhb!iX8wiMj7-550frV&@`h|!OsECW`U5%K4 zj|hptC5Zz_iIqrNm)L)qsELWiiTCG;pU76B7=NQkicV#U>xYV|2ve(Aeyv!EDPRH? zV2ihii@B(ayU2^Z=!?GyjJaq6ud)#<&;SkK0LiF~%gBt)=#0+@jnOEL(NTc=#Ae9j^XHw3sa29NR8)+j_Ih5>ev9+SZ$5Ea{U! z35^`N6C+SzG8rcEK>;9OlQ(%CJL!}r*^@vil~O5`Bme>w@M1=}dmZ2v7jOYf$&}Uc zlw%2zQ8|@oxsp}sl|az}pQn}V!<8A30bU6LHA!k==^bRLm-%RxXz7<0`Hmw10&B^Z zG5MCk*8y{b0T)046X2MS83A~imwQQ>-`JObiJ9v-5)ts2k4XU+fB~P;mWMfy9uSuq zfB~uLm8%(6NJ&nuTeYr2c6&iRl$`shhglnyyJ5v5B0# zIGeS}oX@zK!XcA8$h4+SsC{Up82Vt z&AFKeYM=nRp6n^0$2SxiIur@2pp3zw-|3(aTAQ1xp(T2uhNqz%+M$Z^p~)GdBAS^b zYN97CfCDyw0xdeH;OL|5c&7>hrpgGU zHE;q%nv9!isE3-U9tw^JWdl_TsXQvFSDKMoYN>MjxWGwzL)|$AOk6&0ylsI z!CI^{Fa!R20|Ir6aCQSMkOC|q118Y^0WH9<{%QjOE3Bw`t#yiyd>SzDDy|CwuF#mS ze>$WjaiYv&yF-8w+}$Bqu;A|Q?ykY1ad+3?4#9%cIsJa$Ui+-I z&R*x@+?=OI&6+hQUEDO)&3}$(`~bX|rBQrv=-(ry*8!u}u=Iv-PS(|1Jmq6RIFGUF zEh2bIlxV#%IGV_E9UVAszbK}-(y_8?i^>}7^`F<;ja)V?JeiHO^^Ni`(e#dR928YR zn@CkAxKZt@1<%MwxoT1h?Pkqp`ta)ccV*g@4HW#1n`5O${EaMUFrFxJBGysq+VQpR zHOCCK&R#4oIxW=ojqf@lN&Nt1E_JtV^(EG@NWm=vOdTyF4mJ>t;z*{<=(E;jB6d;6 zwv&~Zl+37$cV#?zG_3qJX)hJ%Se1^%*wS+C#a`_S$T5syxQ?+%+ABIP3b>a*IB%Wm zck&(0X|3%ejf{rIb_J~!fv1do!dvN0(aYu`0FIGp% z`8oijgIGYN4o#=dCaVG}Bqm$;%s*DVL^d1~{q!R$ayaYpL9V4&fn%2+Q8bu z7}Tx8dJ2O+?xhf@tCK=0=B0qMYVU8*>BXO^RH+zcR%ud-z{((jD_QI9e(aqp8zDOz z_V?s4u8coe<8;OV;G? zbE<2osVOq;X*K=89CukY&Db}6^Ez!xI0LALq(AA-Fged0WzCqh&7iV$QHXY7kkVmI zPU5^J;n~d|$;=RKl98}Xl3gTGkj~BX%+Yj_(fLd;bR{yh&8eLv%%9C2Y)sSkHgS-~ zP{QP?_; zM{f}`dx2IoQkx|n^0+YkxF{jGNE1J6@<#SmZ|MSe*;#MSb<@l}dYP?yS$AmJC!5UW zZFvoMCBSYm_{}6VdZko!B?3(`YICLddL>RzAwh7p@bhX)wR~Fks&@Tq)|*_;+o~qk zT7jZmk=~ky(^^@!Y(>|a`s`XwwM-p^bY1nsdefxzPoH&_`1ST`>CVk{rR#O@g;by5 zhQjBKAyTQ4>f}ZkIl0_kGPS)6_1@<6!&a(3s=!n&Zf+d>niJ><)9lNWT=dg?*3&|z(_;J6(wI|dvvcLtY4zo4E&5qK>sh1HS+o6FOUzkY z%~{9PS=Z%R5Bhm8>v_M@`JnyzaLoB=&H4D$`Q+vKH2TFX>&3j%#iIR%3>N0Uj4ec% zzc9@I+t@nCAs7foSDygWdsH&-|DQkR@*ZL~2t*xf3r)^+l zY-DU=Z1PW;n3$TF{Qo zVduT$Grc2(-s!*B`)?3-cLnLBTL66!zT{dW4?+ulm;&Pfsr|?|&Bb`2Vbb z-SP4E@%i!Nhp(^ifBXRSiZ8T$pqHRG{`2ztFU#NGKPWgfJTf{aE+Hi~Ju@pOH?N?$ zq`bVMs=B7Gp{e<2YkOyR&%n^|$mrPU_{8|+^yJLk^!)Pl{OZi&8nmVtptbs+Yi4nE zerauXacyd8r+*a!t--a|nP2zoJ13jl`y1PP8{7Mv+k3xu_xBHvPtVRTE-x>CU;Vzm zh2my^{=v;2p!M+h_zYbyFE6jq_4cm?fxJQfr}g)Lx&eVe?WX_v=KtH>|IaV{_pkfk zFNdD|+t?!f|JB$c74Q@J4`XYb`!^htBOD5uLTlYl<~P^}7nq&io#8lY`5c9G3X^+M7ZqG?UDsk}wX$$XRvM;tBX#~>G4F>K3G$#{U? zRbLvKK4r-@i;>i0DK# ze@W9M6O1f>9){_SNs~(kFFz99J#<@BAO^~TYL{WN5)~9 z$h&+5B(4ii=;#Md`#I|Rvnte0eCT9W25_D~jA7uL$g%;-OfL$f2qxExMMvJxRkkDw zFdRKtq;Ji(5(W-}%9upz2Ip#0cfV@2w|T#AvEIeC%&uN{zrwEK_wc`rEsL6`!z}m9 zr=z@3*5~7*RQuq}kr?7QQ;X{aN|%#+C!*>A1AE`@T&<6#xrl*njy=K1tMz6fiO~^8EVn z`|n>E)I1m@nSUEwcjQz+3gKsjLER%&2>`uJFY^CwY+Wb&xdYR4;dlYP=y3&s|2DSz z@Y}C~5t88H#CiI1li0tr|I66wCwsmMg}^ig!(dbO5t+jWkiq<8Yz@%yU57K0P@zSS z;JjpSBdGk#*cxQ@ob^-{kijaqjNdLd@(A+lC0HIA;%dK+eveuxIwT_%p*bn#9#Ba3 z@Q<-o}=fPFWiekyl zM%3J-O-~GRPdr5H8giyr02u_StrNqw?}`}oio}v-Q6RI%>F8hd-^+@thL_xx@MP~x zt6|MSE}BZmnas?st>?3d{*-xbSh2pQMp|&y#z#4!ezr1JEz9& zx~~JgRz3sxSF&*N>*J!CpK&vVhPYDl5+Fn|-S`vyr#BPzN& ze+}FF=BFY^)eS^+eMYVptLZJ&ivLArA!Wg<(ysc}94i2{VpzU|Qe$H@zTq6fWcbNBsXjpH93T?n0f#|m7XAIijz z1lhaZE3>VDN_RbA$A0(J?eCj=l&#<8X`V!6j-eJC!x(`)P1JPP-e%UjX?d;R*|v}( zlL<@=BmnR@t$t{RJDob50dP1YepHq_26_r&h=gf=2udR11`NNkV9~$%nRUh*sO-Yy zr-30zL{2C~9fT2F-A*yC=i6KNkF>((`f;J17-;-rSjI{mv}q3!yAiAK9N;S9z zAUAKj5Us7u{|f@(B2Pm+bo$scrVM36P* zh9UT7g{Z8&P$(r^p6q`58=DtQ@UH15i*#F-!2ugD4NO^AEuebt+1KGQsF8dW=ElZ0 zG|@4Dz(^5(;8Te8St$P}0lK(-5BIIFIT7%kNQkZ9VoFR|SfF<)@o_*_^*XZDb7C?QA>p;VW+ZYfB-+0Q?@FmsJO+K+p&n-&@%SS@_%)ERJ!Wgw;>bkQdBi>yPpu#?}ku z0Xif0DpdJ(m-z2vH@E)-4VIyV?Z!5+v?GL|{3cjy0L_Rm2ao6(!Vm6yJN};-^jCiW%h*cuv&2L+2LF)q2$D$)l4}i8SP4>k41%W6 zsyxB!k3m=~f|&&7ba}vtZNN1b?81WwEIuHS9VLAmF!|tJcLkd*ja*j;d>3cl_XUL> z#;y?tC4k-CbjgWD8kEj%*$Cr{14c-vuq~PaLL%7%BX~rn%>u{v!d_Iq(yIg~X@;kG zgr_|QS=NPH%!KDWhUdMDDBy`G(u^qah$u^osA!F-vW)n;BG{th9HRjn?kE1f6d3T% zoE}DHpWEH21USuQ6n7O2I|Mr`ZQi63`jz0j?XhJ{OW4e@@HB$;{2vT>OplQT0s5JU zjg{!F$LMX32!}XCtGe(*kC^|1vGo|k03+062r{m-sR{-bsrV2-0vr5*i$BfxEF9A* z;P6#oO^;EY{-7jc0$>x6>K)x)Fj2m%#GU@cP(lP;yTLNRfY=D4Y1%Y-R|Gg=oE8Fg zIQ^o_X9O5jAh8_0iJV%ATu(9It`PbDld&bnnCOt{A9Prm9p7tq8d%*6O z+E>QBB#rOMn(4{fvPs`&lJ) zG?U`lmg)^Pw!WvhV5SA|rUhxGg?vv7OHYgVm$4P|loq#|#tf6{$(@=~E}?oN=sF09 z|Hs%$&m+tz;LRw~$|(7sk;9t~*-J`Y&2avbnw%V%6`s+gl?mmvTA{|4Rc6JiaMei$ z_(?2%RWP$Ha|mi|rDu(`WyP#!zTRf`5@s_NeSyq>X&B8~NzYz`v}JFA(x={MZ->js z4XP^*3N)@}AE)P>w&k=wW$!%Yc;Bf(sB;fTbMC+AKBnhJp5$Du=Gr%@jwZRB-l~oT zeLpJC1!m+Sw`adX|5tyO)-JJK zE9p!xakQ4VIW2L~F3ta5;*?Pu!CC6IR_Z&J=21}^a4HS)elCRqSOR=y5!SN75oIxJ zrT*<@31d>x&t)lVCGmXa8Do;kp5;01g+@;)nS2#qNvVcUzJWhvi;%}hQX`u6JV90D>>}X(KhcvLhG_Vsla_~2D>NIkBH9|vUzK%wL z^+utWM&6gY`-*x?%sK+EruOtiOGm^{d37l3bt;wOVm7s(91(GJ>SZ#U%dF~*W}1{D zYd;hJWaex>(uOl~Y}Tx7wr0xE(~8kMYjTG9Y0Te3D)DpM`lsYsjZH^O?&{Bz(`Hin zmH?d=M;*A$3`EcImWY=$UnWGq^;&2C)&zM`x0mXW%oeK-C|i~m{nC0*)Rsuxj;P+| z?AR6teOqU?2d}m{qO=#hw8KiYmt?k9=yU{(wi}>yw9AV$c(pd!bTmhH_;+*+ya;zi zwt+J{T_`%^bULTTg@?V`$51*aUfQN1UR}pHT|N9=kvd%u5nbEzLTi!j8C_PU6Jhi=8OF_$^rSP z3dQq*DU`v_=jCb&g9A2$Uv0~^ss`J~2ldX&3{Zz^nTAZf%gk(t@*{_=UQ2Bzh7!(( z95zawn1=)8hh23`-J^!TRSrYE&P#mGhmBB1{3l8R6-HESMnV-z!mCD5$48=Vi(^qo zpBP6I6^fH>NB1H|)4hu_Cq^evM{`jth$p~pOk)-sJtI0}sYGKH=M_cgV?4;?^$Hb@ z3ggVy<1L-#ZB^rpW8+-{QpqA#>_+*3<)Nyg?*{ z3o~R{4TR(7e(yc4oId@WRlT{@)Zm=I^p+j|s=Bw_#K3 zFh~?#D7#>(-^^HBP*P`r?;PjTw^0U?k?3GRNpV2DZSVb5SV~M#(l(F;42vwS%M%Ag zYMXahninFiMadr9+yi2FVI<`FQ%wrc3MK$1^#*8{m>yvj=umFmaF^?t!hG$3_CB@C)Gf`iZcV*D??pfBWPn4o1GifF3_!Uhjv>DSFqYF-#J<^C@j`z zqu1xV)|Zwy+%A^ax;6ziH~+qDmUM!*qPjP6Kvc^DQ;2{YiLGgRm#gT_T&TU3;?V#D z(4|2T5vq5N2X{#AvtkvH3AgQj4I8xA0kzBl=`fqWFhN9diyiD6uBi*vhH#5R zuuX&=)i2I^BO*?j7`Zbk?WQVP?lV+EB&`kPg`Jv5LE;N&F0v$O)a-f-Xsnrq0 z9X$scN*9kF`H*EpL+Qfz&<@q9SG!~0h~x0BjNqx`yc6i?(Ah}VlMaEyU%Dp|L?>xm z=}A*3Dksnnx^!qLO)Gm^e3=FfrDw~ap>!HFl#T?RL3gobux>Zyl>YQR3*$ZOU=4(Z z(jlPp-fmxLC>^xAQVj-WU!Bj8UCaqxEa+b>K~b%oi?!~Hjjf9<$i+6<<*v}>zW(K* z@8xmMJSAlvb0!T zlH6u&o2u8{tYyl!22(O+TxI6+r!dHfT1A{>uY5?+{ zoBQtT=he0;>|5(5!EBWqudlc3aBv@fGqe1@c?8|^D^q{0736Wa<@|cLT6im}3>5r* zdk?yU?!#FPyp!s2RR19;M}DXH`|fFLQa)E|`?xg!7#XXd_FEuUnL3{Bsod@{dHNw;`F>;mNkRBAFZTgzJr@}~JN$f_41CV* zc^)f&m@wSI@=qhYxxBp)G!yK zfl3~nhWCFkwvMLKvJLwvaMjCZh>T~7(m#eysg@{a3k4H>IsLE3)E1Cq?JG2S~8lkj4{C^xLl(F2!Z>PuFN|v5W0? z2cyZQb9A5Nr3o=*C6an)4|1ym@dYz*|F~UlcKtvS)^^o83({9J07Z%yZsPQO=J>oL zmZOR8@adVow+|%O@oiOxCNYR{^@!kcUkyGH4d3{<>+!G>gUSFCRx~Bd^1}|M!F@Vy zkTk=SAsjL_=Q%)u$P+#YC>!4kKrt<2;pq?2sgWXf82BJf`h_YO?ua5HhU<=l34?#S zPn<)RHq{in>RQw0qBF%9&I%jVI`NoThFK&CTXrKLm{Ln=#1M;3uM7sd7jJx~&!?#g zCQ_EJ7iwy65N$M!vk3!l^R<;kiUdQuMF)an`35NCb?$qk!9H%ICIM3K0@V9`7~1?I zdCl14DG4#wKd66}rfpX5@O-V$r>NHrA4}%6nUuN6C~DTwarkpNdQ)UN`Xxe@=5v7t z{zi4RbfA^>DCadA|r@h6N?db^w|$XlWALm&c~MrR38tL%9YB8_jzC09%gk zgVCM@hdIAVQpj6%J~|%nYDhMr+<--B-C&2^&s1|@e+N0$U63}<-Aul$%*{cZ)LOMo zd^Gtr|DJd97J>C7_fhA!RFz4QksS1x=0>eHDM8mowM-M{8yZA@8il)nW8r4Sv>@zF z*B(=XR`QIFO9>J=nu9Ka0pf?v?>)?NHcCyQI8%Hac7OF*V!BUJaIz_- zMG3hd9t3>;EGzd&&q~*}%gp2Hclo~jE*(3Yq|+E(4!4i@2W>21t|ORZkp+g0KxBUU zyT4g@pnZl15Q-tAvLE~PW{l7<#<6VaZe#Du>54N-g8DDSvFS%7fXvk4OtSDk=YdA3 zW|kG2hL~JM9c!;wE#hRCDnBg4v(H&60%4czOj>vH#OdyYIx#2xBi6U=-Tbi-DL<=V zk0Ri+Qh>VI_X!e4{F+3Lp%|d0=?uW1O3s57eT0dMEz5}HfM>Y$34=z1A7#n2Ra(gY zB2;|GK<1nWOWqdRed9PlgUJEQdK{pQ7l%VjWfX|fHx6&cH;=&38%K|giGnwyhWdQP zk@Fsq(3WXRTR0pHO7p`?G?WlS&*vD3$I>P)^DDHa3`A4FP{woYeWZan0TXvB+4Bla zIFj2YNYN6gJV+wQUU(F(*G^-_Kr}L0@8h-D0r1dl2{CA?Q(6)lrDI3noE6Z|2$%=Mm4jq;CB2~F(KuSf7wM5Q~aR8*!dr0>qJVB2rEusI+PA-Y$*q- z-j=yY#~-UJ1oNpEG&q!CmcOSgDpxDvYGx9cG?$Et$oiSJO)WWStdh%`3)%@9Tj}Go?Y-iRPbn$k!4Pyz0@>VD8@4af{i- zx=_h;3@$ zqtPG~Xv-X$unPH>72bZxwam-ukn%0(Pu6F?_0?(RWR9f!77H-~q7om-w}Scr3vuqX z*(~v<0$N3lWe`zV?2t>zD#3}Y``Y`cC6_YEE@~yOwS_z~*NQLES*n@s^JV(3Rc04y z8XekmbvdpzuGNX!>wL4VTdsA%U0ZQNE6YC-@9UDg&Mg93dxm{o^QOmat-p4RPKEre zO|-MKN9kBzwZHw@A$Y0vgLuOfpSx`_+xi(SZ zzy40$c0Z9C{eaupw#0t~|JAt)$fs!_5I#*bJLvFk=>8z6SUiow-qwl#!B zJD0q{Zw2q^EEN#cTdPDvzw2=zdCcuWWUd0;t#`i7;uDvhpZx`i(lEq_A%|THbAVxK z0^DF_%JQ%pYr%wU$>oX&cvQ)cB6N2!(5(|aQl-*@YF~t3jk|@g;~s)3MB)ZSUd@8uMeRp4hIBGIna01&qb}<+EUn%%0Lm?O2+!=7d(T&%AVu1Li^q} zOk%q?K?Q?*tdG~UnPp!r{I*XtlAky)J;V>*(HK)2hL(*Nmc+21w5ZQ}7TXY;&bXjo zIw*>&vtQ6zRH+YOvx=mr8H8$CEML~ABsRdnj2aFojR+8yk&x7H?3cY`&6FSfdPg8@ zDoH-pFCRFlv%#R1HTdErse31>sxzoZQ=|VnXxxOQhdZ=LDP>|h#D~jzEGLy(DJfz- zWF16l8YQ)$C1tZeGz=cHy(_dDD6yv*o_vyW3}SOqD0em;F5#7SaY?hY9sWKL?j9r! zqc)sVFzln-Vc0ob1sNYM+a2~-NB4Ri)`^!6P#?kYk}}~R>5>}>P8u<{8Nu`#sgD>5 zUl<8xABl`=kjwlTjVn8PEEB7n5Je&z%`BU!fNe<3jw|1gmNc4PG@8*gnmI6<^^dVN znqyi|Yr;-dK4M`ao88xp+!%}^KkBnzr@=GGe=}UbIp!A>4y!g+Od^ATA{XM#8k#g# z4lmpKE&Qo(EPR5^xbeN^t6Uu?Q@w5YHKTmE0$Y=M#l5yXsAz07Vm#QThD3F|V_>}Q zRcv`pzPm`i4xq3!Ha^3s;Cn8A`8+-_Q9VdAF+?&lY+5^#G+`CcJkg+_J1}9~I5N4f zFt$-W?J@!BZ<3$eFPxH?T!_leH&qB zTx%K}L!H`CpWNkC(tn*i)mCyNQ5x``+Or++6_`As89vpWJZmCf_72xGgeSc#kOlf9 z0}CsS!(PDjJ{c*Y?|N|dl>%>-j^LFSv6NFD5fo&Aw*!$VGVpSaL1-TSmF)IHOkZ1U|DKk)I2)K3`RQwhIU+ zrG?}OaYkJbqheTx$;7E(QU)_B%z5j~(G5<$Z&W-m1--WuXR-t0Zid2t^8fl6EWZtN zXoK?UdX6o*g&j}rSVGBqVLU}dEhG&d1!ndetUpc>0-+(X1Vt(QL4ahNnt&d+;HDa? zkLrbIxQLw^YaI+{8vLsWYyn~73bhJ)8m+azSigv>>;;!xwfbA9dc+8`;^ctTjGuQw zkTiP|sJ1{*#%$5)+v3;7A2KT96!8sUZ-77$mU zo=A{BLZ132lCM}0(x>n**fl-i7Lc6q|#O*%>4m3ciiPDQ&OR?JYe;*;yVqk+>|T62|JnUXSD!NBaz z)t)o0+-kf8(lusg?ZUT_bLROA1#LcE?Gi!RJRe|ww01?Nc7>g6r7N&%QoC?ny9N!T z2u%lc-n_!k{8 z3z}x&c%Lh{Eo!nR>GJ@KPA{$ekR7!_ZNqn>nXo!oe|aCOx(WaMB&7fTnp ziG3EKv&4HWLQ}TQbrk1zbgg-FeQ0&H5Gn`X!577oXZMKdt>n_?3xckW2gPCb;dkc@-*c zC7Bq+L!~V|=)CZiCp=Z5=GG_)`v5r*MK|Xt*=2NVTxjkvQHs*53zC@e z6ORa5Hsi94IV8(5w>ICi88Tm@G|pf@yifA~gsqNonxY9A2}C*W^zAAIX=02-0&U(@ zy!XsP8FpMs4y_N3-Rv!984l4H`0_INWa9mG(lQCyalT<^!*BW#+XkW5fx|`$B&6fJi9yJq>03e5$^{adCA`TGN)&3X z*SAXfX=CGkGO2#X{3Twp%o6j4*7Z}C@The%${7TG$VNWq+&as4w8}O_B{s3u3KQUO zfi)Zd6yk1d%g$<7pRzj}6IMSoIIlFZAcZfn0^@%XrxG00Fz%;rhoZp9&kR0j4>_k^ zvQyAF4&JiqM&EGH3HR^?ZZK%JUB}7Gg#B>=YN^00b;97L!3P$%u3sKVM;&mmlusgm(^*lIr+uf#@i!OmQUvUPh3OK-Q(enR@u%IShM|kC{)2#~#my`6;6n3I8 zM#uK1*4vrEJ&N_=hOyZq)2xn?g``$Lt|PYpQ!Siyn`%ds*0n*Ab6r?w#+$Lj;_MB*CM< zduss3U7+-1pxPsk#bXFkYpC#TSgHs6zKspx!+eSp2&Kh$fMvt^>ucIh4!J7}y$v(l zb{vHWI~yO5O{yXbgng@gHEs9)0wS$3SW5ow?Rw-pQ%Q6qk?j|6l3@#rJLVotyeu(!^&uGO6Z{r@FCg|so$olvk``Zm( zv7M?lhrd{-{c=-OD>he?)2{cLYZpmzm2UbXtR+bBv48L zE!Ws6YU1g`=dfU0S);V3-|GcUY@gIQcujVH99YEJYG)d-)N7F5r1^M-=@iz3 z2!|1(`RHgI7As`x@Hmr7g+hlbn{n66VfWsOYg?zj`F_<5v3p3%k~n>7TNc?G+FS}! zl`!%nw6?@j;7X?n}|TKjGxS>NbJ~G>0swcQ;26 z;KRBi%U|8xYU+D&xcb$Elyk$0yy|ne@dYva*7vh6Zgsd=%{u9CI!Pn&!OC_1?^0e> zv2^iTlWl-_>X>~r?|O{I^e>u?`w?&)!6V7+!p@*WLIyyNXwzllClY3FRxUm)9v|Ass zQRaWVMUMHr*@a+6_3Nav$G6A#qqassr1z1k_m0lU>v|OVU#_OUj0?fV$FH4mymnd^ zk@`zHL!Fh1(f*?-6wB)0x=ue|dErgy-7cB;pqX2G6TJVWJVnoNA72+l#~kzG0oNMi zp+Zwcg#9+x-}})?(P~A9=r1&nfSAeK;*zNS1*VBtl3w}S*`xqghnmXcFTxbWcW)EI z1jy*>LO%s9&mMC2v-By`Q0$LxDlrUwNch0`oEXgPo>;Acu z`j0a~b;E^|u6QCD;tv9e=Ia_i)w9A2Oa>M{RtSc!FJ}>gf0#H0Hb$&N=f0V?W;|Ph zOwcPMHG??s(8p)fV3Ju=X-im8tW$Y3#{dm;@w;&?WVDYlxZ(I#1lg$#l3 z75>CG(3fn;uyKo_;OORIy|W1?cIWNakyFc9z{R0*N*}kL;z&n)Dy9#8Kjnm2l{PI) z%{^Z}<=W7geTf>!{Qx`l%R3?KzLP$3f|uH*yD=B?N-qLeG37CZmQxzGX|(nlUjD8G@p^&1Hv7R8I6ooDN|@ zIk@6WGBzGf7L3#v_wa@CA**t;u5Gz8#_{x&_ukfMm9~Dp;W@_1IXYcuQXS9n8Y_UB zKNa|tjR-QrV@?sjoC)qTWHc`~=lmi$myNMT1xG?q>dtSn4Syl9IVa2O-xSRK?0)Sd7N-S8}CD z;3B0nQ@9?nG0nKf;2ST2U-Kd+yEYczqCRJ3&07tR(OJCaRr1f}#khw1hmMj@&F!wX zzu}^}SGPHo><$?(ykcFuDCAnYAe-a4cVdz2=hycQ!PQ&72Y7<~IRuCq?k7UX=2YB4BJ6;z-&K5$U`iS?7z5hv$>&V@u{Y_6k5CL zdZXpUasV#E?=JW+bl91^9dVsSCr^EJ`IhxjaE#Z3R_aIN9qoK&Cl8gzboka@^URk{ z)ua0oEfVI6aQ7P3ulU{HAqsbuXI@8I)Hc0MDaKW#;j1kH+FWT%oDH%(N5+BB{^(0! zR?U;G8yWxV(&2hTDYUV-=Y1w&JXcGb)`d-CM^=_OdT(F#rE8+kD5? zJ=saeUiEL$$(Jn%gd6-T{kIQ}uHn)B-3y@RD)^&rHXIwzKCU~r^wy!(lk=$Yn|15zra|#bhZwKU0}{c<0`;<+uo!Q#nxDKRC_YQ+wVfTfZoD%s z0Oy?fo5qaEL!|}@p8Cpk*pg=CkYaRTRnQShpLYaYNu%H-9|mkLw6=cS=-*)*+xgq z$D}jBc-~%y-NB^G$M%#$Bcg1e+>sIp(A5kY(L`kS15*j8Ny-?x`UOcaQ@*>=#o;q5 z`II~IZVKKM*}xH=KwkonXn@IE1m9eOIAVZcOo}N;#5$OgJYnHo0%cZuKH9P5c&i9P z8Zxnxkz{AS^n#JhM!r;M0Djhl%tQccs~owxvCJDKg+>|$*=UAH0D?e_6c3doyRmfI zuC$1;RGE?$gBX=zADSV6**c$Y%UHz8nBI4po(h`18Bw`WO5_={YZRP21~GXKaCZi{ z?@L0cwt`IWWCpUUJj8%7*)_7QOyzr_L2UC@EsV?r`U%pw4! zB1+oUA#T$ER82pGW7zj3g`y(?RJLIF0b~OpJW;?dw@Lu0Rf$aEo#Z2c$`A(sahFr7 zNcg1S(=Hwt(EzQk9}P{o7mt)7vluEfDwR4o<{XZ<8=KA$h8(*0BM+9QY8WZ6S5B_a z)U;2sC<=vHp-GM<& zk*!gx(hOowgQ4n{q&bfe-4~;&%4Y)tfUn}GJVQd3vP=h2Am#wcjR3S(1lny813Oxa z5*$h2Vhs=#kyz9~)xmcG0OEd#D7X*lbx@Zmh+0=ffH4HItb}C*d|nil__}*uRcO*` zObrYv^)r@y6>E?%v7n=WbuE7NF9C%dltv#=IHS@I1X!jWdajspDGk_AA?hCw64eyC zWfY-dmU;t^+{l7hRRXB$z)0#~2R^!;s6%*$0_UyLvkw+1d`DLl)Mw07_Lr7(}&?)&u=y694wo1w2ThU-eR%g^sV*os z#UfSc5RnED`zl7QJ|uJuAlLwxp9iK!G;HwUU@2Eht0=7rb%O_)MpsIj?-=7v}uS;qKv9<2Od&AJW zm;k{6RJzc=K(K8<#qqlV8i}cW^{GG&=~z}89%m8ifdHY?J}Q+EkZzxG)-bn30OE{w z={bN$0|w})1W&~T#;#~+pHJqpkrLej-^+nnnUm;jeV3BI64^FTR`sue`t_?g)X&3D zO9wa@+a*hfoNe^@tDWDQ^r!TCw^9q1I{N;6DFpZ zc|V^|1xQVu+RhBAPCwgvELMHMyI@AMYv8E<`+;dLfM7<C*(x3h-JebbNwd^L)XP-LeK_Zxuk&I zuMp*}Qx?MOi|vr04L7?@R{Px{#T}xWtoIkZf~=1`_ELs52XpfKay1~z%fo`|Lu;00 zw~M3@)(sbE>n-uYCC({g^!(bz*?q)m&E>P-z1`8Fr}zZ#6fEc()1g z-&X^^lh*Fy|2}DVkP*;iVlK~3`~5^_`y3Hu+g$q^0RKAl`)`1RTl{Zn8VATO+Qs!E zOsoV9xiwrMy!C8yx5rn2g;ild)z>Encu3?WoSGGqSCH=Kx=qb1ghB_zzomsiS1-Pf zCk^Zz@pVtH8=z9$3tn~j4t7-HDAZ6)wBWHO3ki;gE%zq&70lZfopiwE1c7+EV)kmIxAfLV_XD^X_?I*tqCw0drBfbfC zy+)?zATVs*!QO))s10ta*ppo8qhtsd-RPrw+?!h2)nV>~ zUlH0{(vf-}&prIQQIp&K`3x z05@YW7_RxOHP?LJ8NQ?_*nyA|z;1_#*m)paOsi!iUZL4RDcvD++Cklt%iZ6B>=Y16 z83fNBWM|XMOCIvHY=GJ+5Z>W6e~hbu|Dk}jG)u9o3&cfsD~Rm%SJAWpf)Yg}12kEq z0B%=B#oQs|x*7?SAOz{4AoU;wy#RC)OB-ewkye_h<8U$`aT%(kLH5@`;-MVX7qQ5k zVx8K1&5TT8+-I-36#Q8k5r>Q(21t-gQ;8#6$p!W z&5{m986FD6+-Xa8XjbQQCrBbVxoS_&(>;Qtvp+&~cGsef|${kL}BY?9%?Ez8D>H`&%=PX z5;uhCd`TK&r)P(LP}(R8CMRHAU0} zOG;*NwpqCxZSZCyn2W5&$8G3xB_Ej5TDWPm4rgD-(OHfg|yPn%ASX~5*m~{0Phn( zCEo#YgtC-vSW!8Z(QXJcKE+O`49$#HFqd|EoSo#bVzEQ((ckte{wTysK=Ko;}9E zOyW1&RPu8P@u1vE#he{j>S6kf0(VdIkXXeI!qK(Gt!%qTZK*qrpE(+3_yzQm*`8pY zhf}_GVBV4>3$RU96O`@|lpa18HR*s4Kfa=t7R>K|Ts9oWW+53KWRt-w zN#n3;%MJ4;*1Pbe@!|DZ0^)g5wP0ea2ig<3;N>QZzCO{;e6IHmk!%fU;XjPyg@O_D zExj89tea#yF&cF{^T^?79iZg2eoUl#%Vae@Di#dgp{qYQHrFllrdozyq1K*{q|tAq zP!7T~3XoXtMpQSW;cgLr**1vO`2NR$iiyv&YJO=07)mEJH$>WZY)7Kfz-hliq1R?~ z-t1-Ec5h8M!Q@Gil3qKxPjR)45Sy@EMf4^lDDsQseYH0D1#wyjgkJKHkuP3N36dg4 z;$#hqpAh-pimf8E9}K;=?Z@S%31_O;tRMVHg6?z0Eie{f_MlT9Rz%nHiBz5ls(H|m z@zEPx5en3%*?P=5YdDOVOQQNpYNfL;J1W_@eqO|)iZp)b%%aQSy5&}m6yG(wo#+?hq*BDg(`)laizKI9mV6g9a0ld)Bn>_s;csm?>1x0S}jv7 z5CLECg^flokg>%h$aP~W)t7x582^`ytwej>a^v<;e4!*DW6OHvFBx04MUfjg`O0aE zd#mHk$&ZX%{m(evQQW`x6*^(l>9nLcn|H@h$R!DmkDV{=Vb(J(Uk{qcM+$UX->tciO@HXV%h)RH9UJ#~1!QbpUwgQ+ zHT*zg9&UrhR>sP^(BZ^vL!^itW`kY}Qfo)$7*KzYu3;XFg-COgu@#u3&WNF*tnmT= zK3u;PmO`XP7q*H+ZwJVEK%<)!)u)p6n-!X-{I#9Mx-40ovSu%h<$-f6MRsIW6Q!E@ zXdhGMKotkwqlD3ZHs@SUA(md|u>mgY_ZYJ5Qx4T^95K>bLjvmt@k)@n0j-a@3ngP8 z#h^dzsa_p3e;PhswJEAOfqD38L=KbWa9DxiL!p{H$Dp>>ck0qlV^VB$+MhHOEKA4K zGzPgoX#yErD7Bk3io1&1n>17M4G1<( zjpC)@@u%jVvX?T@nN}e`U7LFNTm&@Z4E+gYpxk@}ns$AJpFHa^$(3vpwZA;L7>#DY3@Bb|+TmmrjbaA&-bhl?)Gwm&YSK^I@e0 zjI_YAsxTgtb3_W;I48MeUXi&?81?Xx>R9nS^vlOMAGXcGFHYN#ZT3Vk+JdOR27f>- zvBJ5Z0>QqR>1J_=MVwCz0Y9_p z^tzC0t&hL*Z29d0MMiJ35c-Dg#0maJamIA7->;aR4ghEc{pi zH|<4iCk2E<`5|vfO4lp_XYE>zCT9Y5YgQ*RvwGm+-p6#>H*IjjvElfR39k+|^7$xa z`@O%rW}b9fw;%SZ1!9b4UVqXRM@&;!0)5Kbk$iI{Nueke%Iju;8TCyjkx%29QGX7> z5&dWGCJhVs!(1Ag`|>h{2xm9w6OOJ{|k0gJ;eJ*L(+ z>8+%7R2c&Zw&qM5YK=quL9Yo;927L-;gx(Ja%|(kgb0_yXo;1dKqHei?FU50fM9fH zTwH>H5MqxrBQ?0tVgU_h832@1}72M@-fKs7;}8Bk!2 zsf@WSw6M0EqE>*bQK$+Reied4;MB?L5Qrq6(D{%yR;ID>q0OUB>*7TaUv49(gU^mR z4yd7~eDY!ZBl!*(o-uJ+Mac+sb;-$)p?dqU3_Jf#t64q5(^{5*PzCNKSbF)q4hjit zMP(RN;)+gr`NhCs%!{R#!G`C2j#t_Nk7O2RXd_sOvIAdgEMe33a1HQaA@lVS!c~1X zVPi5n_&VS6IjG+&PtXrP?d8e@CAR|AFuE%m)@8Ktr)4&cGVo2s|YuMLL*G1e?&rOkqj& zw4TVQH(c%F6-X^Ha7+?w!<7;-g?PIP*?N_KuN@)CwVFL9ZBJ^OA>hQLa@DH$Hjbj7Y+PrzrjI2A z&Nzr@Yh)T7>9II;BiL+L8gw8H+`MR9p%L#8bsUL3ypaJMxjivaZ2U$QJl#rK{Ska6 zbdb3-$hLC8!5QC~103Z5ma7E&#&ri&;y!gIur48B+arkM`0!#6JGGKfXp0b+gD5Yq z+_=};vWL;mL9%U6(py0?==^pV8+F{7w7r-#b(eH;q-g~kX}yvx zag)rRo%|@S{N@q+qb8V5^`Y9W8~7LescVek`Iy-KFH% zFXkS-=C7hE-=NxLqn5!bk{`VUlD6U)X$BwB+~<5_;PS(Slh)mi*0-GYp-aBg{(+kd z-Tfju+#R~Ws@GQ`RomfJ^dcMdDd+6PJ{vqE zd(1<2sU=(@uGydjj&Uh& zIoB9*tsZqQo>Chg*AgDXgr_D4A1qvXe-!Y_ZSgvD2o!=n1TlF9#0B zq6h`IB#oQo)B%=N4ly}geiN}ElEekjz3}3hxNg}%)Dr9pj9%xDX z9_}h~%RlADDX5lTG!srdRBC@AlF`QaT}yHBP+6b`$vgJa4@(KN%jwDlsqqs_M~&+C zC*e{Ul_NK`>uSX7fU8+nReT=hgBNO~;~G!YF&rRh)71ZaI&KpQr>_rQH{K8v9v0IeYlA^qsSeHNU;-<=3*5xEsykKBzr1Ld0WMZZn*^hg!9O z+GC>kJn>#Xk8(Ud`Va(dI1z312=(0p+!Bw*y1Uufn9<&m*(ENsYMUu^lIaHsTDZGG zcZCU?I|c^G^u4(02NO#QUNebAGt)X@7Ld6uuNco`OI=>e2p(D;cMAnxW#waws}U2M zFc7@Kv86f4%DT?V7R0O`V3YmW;K{LdFqcgN4|)YJdgQUq2&Jw0W82hYvkYGQ%476_ z$Fx34b^;g=rygVI1lTuE*fW3}-X9yao54>fJseMxpFV!LIKjN~*s(ar5&6XN;PE4w z5cn&Q6YPnMf&`evRC1kHE-?#a(XN23E8ZRikL4kY=i%JjAp;J?b8L_Dg9gzbJ5%XO z(w)dMc~DzHyPjwvYfD(mF1e&Wb`{c<6$QI}$dRFw0KaPonNZ-GnS#tH+$nTj5Wynce7^VVz48vdplMe6c;l?6ds}wDDyL2(V7^d?@e_t6j`>k!(&}9%qLM9r{u6OSX9gHJV8p zn}VS{MVJb~w!Fxs)-_29eiy$19kic;fFVf_(y#!cw5l?%OSo;bZdF3Pwb_)Dj7ujYp zyb?@Mmn@a%`HcMavr;`KT5ga-Huh&OyFRUR{XpR`IuK5vFkL%1{sfuY6l@oWJ#>)t zU@;^U3de;a`SMgB*;D*p;5?FmA10xARDgGDHi*DWaT8Z8K^)}PuAoNYeNg>40}r2D zATE#Z8F|VJn$8z$giM-^AP|KlsRTGOHLAZF+ff3fsu$AxS-9Hsc_swYqCKNOCG?s< z6lytOI!eHw<9s?f?`b+-J$V?-Cm4LiGA|QD5Xqv zUj%-6Ov-G0D+zFZPYQCAKfHe8{WIbBTWgdjDPM47uL`)cb+hA%nxqmT_$>sk=-T)W z5}w^tNZN~_2CsB{0vdwP>2G0zKdo>xMdy8YIF;aRV|13`z2cWXXIo3lfM zcpnd1_>R*Xe$47$lMLr-4vtUcJ@FH5~CBA0+k_B+DqK649m07=E84DG_d2-wY)~ZQ$r&`cb5tA*g@(!dOJx+;CzheZt=Gs5KtbM#2mxnH*}39PqfEqopsTep#UTWii+lsaKh@uU3TK zuc*CyrD^mPI{51Yzn4a2tCy0i)_y5hcJr%eFl(+?iH~2ciCwJ)Gk$wY#^&?t8%yuE z7*U3JqxF;U^_N%lugEq^ot zeYGccedK?A)_Q$;eGMHH-4+OkN+cZ4p51Yqv4zBu(;0!sq~8+$r;M#M;Rw#WzC`8+ zO@Cx;MQ{}iWe7hxzd+`GGn_5`{O@FJO_UlmdtajPmVBoC*gi^^9v z+vv7A{q{Lu`TSd-ALo~-{1prBA*jTnw;5ZJ#6o^(0#z%$KQp#g2h)X~T%ifp{L0wc z7%zFy?1wH?w>4E`Kl3h1sQ!EIT+5RmSLnhGyNjLAiN&IY8~48sycF`s5NSGG2Qs!= zqeYsJw`ZGgGqz6mR{CFx#faWzZ24n~y}LL&+?;8R5o^7=y!i3s8q*{I21DK?5P>Y* zBnXAI$0Qg-6v;FMM^zrk*fI(?4JC5yF%2WT&De?tG#}bm;bwOkTdePp%p*C6P|(oOFfcH%u&{7&aPaW( z2nYy>h=@o?NXW>@C@3hXsHkXYXz1wZ7#J9sn3z~tSlHOuI5;@CxVU(Dc=-7EAP@)) z1``kv5E2p+5fKp+6O)jTkdl&;k&%&;lS3d73JMBJN=hm!Dr#zK8X6i}T3R|fI(m9~ z1_lPe56Z;E#LUdh!otGJ%F4#Z#?H>p!NI}F$;rjV#m&vl!^6YN%ge{d$Is6%ARr(p zC@3T(BrGf}A|fIxDk>%>CN3^6At50tDJdl-B`qy2BO@a#D=Q}_CoeCrprD|rsHmi* zq^zv0qN1Xzs;Z`@rmn88p`oFvsi~!+3&w@W8;p zz|hdp$jHdb%G&V}kp1Nm82mIcIyNymEj=?QC+|%`QCUTGeSLFV`-i@sfsujX3EmS+3gb!h>8_azEWnH(#W`u2j2< zYqBXrX)+tg)7;#c`|-$bw#5gw8omTnw($NT@-k0k!=CPkrKB2HEN@|8m)LD(>3;aMW|IEy%*W5lMP=K{d$_}wm&xpYkfeP_K;fWNU)cF z<;}M}m7T$q`F*c$tF&vIvtUSM^>}rv_DX3-)ks+56(JCUT26Lxwzs(~cY#56rFygxx0gm^%C>syQn1!-1f8j~{q`d`M>! zR%VMp>5q{wOBs};@{KZ#DJf|xtSyQlH?n6$mnxFar7KsR;kYLwY6rP@Ddq~^mfBr9 zKWrsFfyXN|UVVe^tFx}odP?YyMqyr}8t=ES$tKaMuTw1;yJ;TX&u^ScYkj(&ALBGM zxtg9=n_cjVXuFs06<<8HQAR+O?r8QUz8!TAC&LD9PP8oJ`s)`ucI$a5Rz>Ui>5n(o z3$j8PH{QHXvfC(plV7w^R8qIGQG8X=#kg5gGcj!&B9hI3^GMaP2T!AAiH11o-Xc+4 zg){ca=%aT!h$V(BQP%mcU4Ee@N=?VL%vPh8Pqxa2jg%f#z?voNXuzedfNQ^g@A@9P zTD0jHJ_l;v*5p*sVZMK=`qZ&ya`1s;^WkXmP96O9reo_K>%eFA9m;{720UHnhaU*+ zi&+d1tw}1o4*X`f-}b8tm$gBXTZmf7>`C*hYfi!v`fA@@C;@gVo(9hflcc|0+yzwJ3_ zx3=x7EZVK&{t0`MsbTc|n3QW!q5tLCvbWUW@o=E-ock&hCdQNS(o$B>G3IjR#`k$* z0~~`cOr%1sT+eB|zU>Ci9gVl-V(hF&x1t}n!Mn0}YtE~ty?xvoTKhKFB}Z@Wq%P_9 z3CqTWn&m?MiBtWiuZ$eYCtvuenlZADEAUvW`PJ<7>s1lSu}-a*Kl#C>e^Dk$6N-=N zHJkLn?1zN{`|QY6dVo^Q(+hrMZPk`_N9wUpIJKs>1B$&UDAMV2Zd zeiylrYv9SG82hnLx0Wf+JY%J=-p7PmtWc6q$&2e~#y`_WqQ-BOliTNrf6@7x9ye7^ zOt8|)BRFR&iC_Bp5sRDt1@YAR`ZtV^PX?wYjZl7ihQ>xS}nlSdC}IaxmUf63eRvN|Kr8^#ko%IFf@ zb}JBGQ~2mT&84|)uA(QX3@0vOQFU`VTow`b5oXYS*XcC9=f$PSI-Ad`%!IDZgZ5@{m89+u0vA( za=uX=lsI=bOLOM>LMgM3!w3W!G}S`AF$_uPWV*{4O)V5{M8ffhYFatFP8Qyjh#wN2I85~+P@#c%Z$&TPM1wHNKtevPzrLLyofjt(F4k|0neV$z$Z1?4Wy{BVHQNv49%~ zMaEo-@eO%ZPSnROSso{ZQ%+kY>wSvCc>PX@emXwCc7=saZKY%O(8a#F-G|I)j%j{( zVzT+LcFf08VE$rtr-^Q#E#PF+_zWXO9bVPR0wZ!^g_B*q%fPTeiTuZ#G@wVr$HN2R;}d{DgkUfc0Rb@pLP8QEA`)U^phqJo zBcp&os3<9^si6%&^e7nc{80H7cNKvMB9P?D5Xl9c)#%2Lul zAuX*eEu$=RPfJVh-aUO?J%juDMh^^3 z3=PeUjLnTrEKE!+O-!v!0hn2v0Wh~Q2LL?N$I{l)($>n#&f40}#>U>(*1_KXp@V~? zqvIndCnslTXBQV2S65dzH#c`6QsXg@uL0y~+yrWP-=t^U#Ao>W{>;Jv;xB;Ei=d#O z;NakpkdUWOpN58phJ}TNhlfW*L_B-;?D_NOk&%&6QBl#+(J?VGv9YmnadGkS@d*hD zFJ8PzOiWBlN=i;nPDx2gO-)TpOMCh9WqNvgMn=Y~SFbWNGqbX?va_>ua&mHWb6>xH zotKxFpPye)Q1Ir>n?fK~qo}C3xVWUGq_niOtgNiOyu6~KqO!8Gs;a8Gy1J&Orna`W zuCA`WzP_QMp|P>Csi~>Cx%utecde~$?d=`!-*D24r?0oSzprng zzkd+Gz`)SJz{f!#qT>d`Lqh;YK7PEx@bD;rk&&^{(N6%z#>U6TCnqPTrlzK6W@hK+ z=I7_XEG#T6E-o!EuYCRbb#-;^+qdNevkZ2?ZG$4Fv@q6%_*j8X6`#Iwl4N7BH;+*N$q;%)p2S%xA!G#>36S z&&w;w$1f}(ASx&*CL}B=A|fR!dPf2Bw-lftE^$}#_o0yoGnwpxK-Ng3X zCH4S$J=WINHa0f4wzhV5Kx~h_gM-6E;7LRP2LSOs{|i{4rKRO9zy$9AE@*9Q1L&Z= zqXS@spOnzm)pbV-y}iACeSQ7?z*Arc1_uX+hK4?V{5U*3JTfveIyyQwHumY$C!qQ# zCMEy^`26|v4F^mEEHE=W3lPCA6MXryw6p}Uz_)MT01DXJ+5!@Key{)Ei~qNDo`1>! zH*fegs{O_Sz^Jw;83;?Nm@Z#w)*cAMVmI5sVI~_5kz$NI-O24qpioHCj;NxMNuo9E zbLepa#28F$$Cv|8|THgk*Rd%z^GIHr`Jmvhe2U~K#+ZvpEYf){ z)9kk$;m)j9VD&o-DE$hw^PGgm2H$gm2mx=U&DcZH5 zKP`O|yUpk;#7tQgPagaBGGo~2OEtsw)|%_o<~hC-G3S<(^DD$5r0+rBEiI+XZtbOES3080QAfrlmtZ7ghVui z!~kfCNa%=2=!r?`iOCp<$ryiugpBbg$Qeog4oJxvNg+2NqhKPZV1iIGQBW~aQZrN0 zFjLdA(9p5cF|aW(vNJMsFtc*9v2k&5@^EnjA`hVN2>!PzJO3-`;;v_?`RktHubPHC zy13IGdt#)B4=T0_zSzOOyR0FOXfNtT zrj|(OcM4oV8s0B3L)lz0#5>*0hwvQwvj&{GE~c|1!@Oz6rQYRx*lq?MyWr7Frwxo^ zgM)?ngC?jECSXFK6rc(a5YUj2Fp!b4P*8ACQE}1G@X^shz`h$36O4&TfQ?OrgF}pq zONxg_hL2AU0ztrF3NV=RH&B7WHy|MRyC5W_0zgCrfSQRt5%kMn+)B;AUgv<>27w;u5@@F!=dJ1q8$d1to-pe$E+Uz?>m2D-O&V5^@p} z@)D8&6r`jSZw82)=>cdOG!&GylvM7iY2Me=G1AdDyKiXuz{JML+}_msk%gU$)kAli zM;><0UiL2D4z5oe+h1;5 z-QCySbBF%!p8g&Hy}vNf+dI(PcZ0tEK>+>0*fBUXIP`Jorp*|=;f>oK186XS_5$cF zfX3oxzW7^R#qRFz{{H^mU~!ZD_itv4U+u*|=8?Zg6Ys;Ys5tTX)pI`F2*5S`>I+>l z5P&B1MwV{`V8O$VD$718|BaqI0hr%)W470IEmI2q0m?mv8hXWSsVGK6Z*1GqDDhOq zanBwg9nL@B?(J#!#`tshx@S-Ix;J$rOuLH=^(L5=qHHJocs@_C%r<%=Pq?FSI?mTV zi95a&^4Jk;C%(i1JxGQuH9sF`6y4%1E^o*`f z{?l{zKK@(@=IL;pD7de0a^;1O36^8X;m_2BL~#n^;;vH?UdMwu&SLo0BnjhQTnA8v zBod6IsK!W!G}0u4-lkwcS6^^Rr&&Bc` zbldQnth~)Z3|g37O$ZD#b)35RA9N>!Fb$InWdl`!goK5RjE#(pgMxyKf`SJC6&3$4 z0HLDZ01fSTfYH#v=;%LzfdK|^$BkH606h}m;1B}9!z04SCkBB4eT9UOkc^m^oRpM; zoSc$^@@DDvpWJr=n=W9*1uVDZ6%>_KRMmm?6)*zn=;`X|0~3(Gfzbm)V*?`-Lt|4T z6EkB|a{wl07I!c;v$%oz9V`tkob)Vxw5*;h*+Z+i4RevV^5jAtSs`9nal^6b*g7O(?w9xNMF=g zk3Ez5A`;o;vYB2^+Fe)T?Y=mb#W1N8@#EloUXy?3)^>b@$#UJ(1nGD20!C{-iI|wI zb57qk`U}kwkx5S<$IYo-?O$NH_$;Qah~%h!eE0TA6&zJxrdsQ}i-?_rO(0RU)j#U$ z^uX8>8ijws3$R>pYvVYcy6WP} z3vC_SuZenAg66pJL=)l{1+SZI9PDmV#bhq_c8IN}vl(eEhAOVihQCAbD9u9P9&@C-YnQgbg*Y|+PLv#{~XHHiHxU4640CJ{Q{12$!h0hUXwC?C=7C#XdKQ5VmJo^rs^Eq|f3oKtW8QEj+6`9{+yMiF z5CA475hfN978WrUHVHNW98w$rxMa9^4AaKEwP#zncT3dvFRPFTAG;sbC{Z0nwkT!`o}Q0w6V0dwXp+~X(uNaS2w_I za3e!|dwD;(lcE0-&-^pU8BnGFMf^#;zEiI6gzFpC8j!33y*efaP^tl$8W5-fb^70> zOW%sprKM%%W#yIS6;%}#)s>YsRaLcB)pga?bu~5hHMPJxrJ=5_5ojYD8k+8u>HkhL z{cCCZ+xo3IeJf4@`O!POz~p(OPXogzK(K#wlD{fmGIO{9S9U z)%G|9kNuW2TnqJAQof7^r`To^+42#rmhyWHqi+g6a;RLircRMGbGy4CE83@pp0bLo$fCuzsKuQKQWI#Oz)<<`X zqhDL2zge+=D&RkT`L7rApX(XeMg3(F^0}Ddtch|Z0S{*BEQNL#AKeV)t+h`L{4UGYGmHjMCV&7 zo$%0>LjrA0erblTxrl3vKh7L`Z_Iv*8kW5W({rtibYLCi{23cI-mh@sqkd=?qKe)@ zH*~E8C%#z#1p(F{(+?D)EG!umIaC2WJPHB=Dk35}A|eJ75+cmIy#^R;R9+A04yvpFzDa{gAP#L1muK-6hy?7#3WQCq|~HjGQr)JMDTuF1THJ>v8XCK(hQn3{V!;Z>qr<}m&Fi`Idj~; ziAxWKGJBmLAamz^2*tQSzx1m5IufFgh?7BpU8q^8{Cr55;AlfT5w6*L&`z^t)XTWv z$WV!OTdrESx$y(ii5)LC5cQeBn8RjNd-WMQ>uU@gsKOK$_SB`_xDGY^5z0`iWJ)Vu zSo~CFaDd67x3{Sz{4XVARr?m zq97rmAt9q9qhKJTV4|R60z06a1@Y~67_jpGZ!q%SmbTfivm4j}0}Eil{{i?ufL8mL z-Q!=c=wI*rS4tZ=wf{J{0Uyb4E|UMkUi^Rd*?ptq{yMz>=GlGg8o8~1p!jd~-Cte# zpNu2F#NFSI@0-#N_@lG|M{i2SVmr`_3j)13HH*c5n_Nq0hIVngu9-RDSNu6TFSk{Ck%) zv5MSGpD+wBBk+lN-so28TB8sMC6NW8{Jw)-N3eu_0EPTlMfqoUJz%Xz13dMZ*jPAt zIJh8Od;&ZWAwHN0L_h*2Bn1qkU(fi zA+$H3pe4Hj9T_DZ`7Iz+^Z+QS8K`I(Xy_Q}7?>HESy_I$IR0OC*Z;5F!TxjO)_+$+ z{qHDBz|92+k$|BKC{18yzT3Y1D$swsfVn$)Z;CP!>Nj`&)|ed7P-9UkM(PzT-MH(` zm^onJQKNw6$^~DJG%_BIY>~nGE;R}sm1tGE0xoSIh*^JlwlH2s8APYlv!dXZtCS^i z-)f=4Z5;uVL|A;T?ZrlDfnKU=Uf&`kV!lQz=V04W;nOPZUhmIN6B|<%_cE-Y+K-sV z>qwY=(2;IWO@tdy)jGmMpg^Ia3P6NpzW^p8|5tEVl>fp<2m$d=0JZy{!EMpsmHyxO zNK8gaLPkjnp(3ZGp#UtLw^h!>!p6?Q&C4esA}S^eI4b``*I)jxK>wz*^8Z%_Dg-66 ztKJrrB@Pnytk_kL%|;BwLS^*nF{5}Ngv12WcGAcSh(;3ty77_4?nrcWMkJR?%J=ci zaN1~h^>nKsZ2$-o56s2qSdNl;K&Ok4uESN5O0PWFHG^#A{Q5`=OlQRmo&!NBLo zFoHDf2DOL5;j?Nls>4f!fRM>jY+|9hpAtJ8?0z1mk`0B&JWR21rcl6#WBz@?q65nc zWeO_}dpp#@z{A3!z#(G7BjX{W5FnwEAYnj|v1m}R8BuXrQSms?@OjZeg6LoobOJF9 zA}I`FSxgdnOj0E*QWY#Rb!>7?Y=|~C2izQ=N1K^fBW%1kLZ0KvHQF?(Bl)=;|Cz2Cm^9KD5)zfr7I$> zBPydKE~_Icrz5SPBde$*udJh_s-vo|qpqo=t^IdzXa3uAx)En>ZExh8+W`-7_unWu zo}PDhe!tt7|G(!282|t23%D5oynY+&eqIg$G+E$U0AShyZUe-}#{>5OfExgS{r^8{ z{0A)mb#--s(;u+;1J+)^)O+XX1-!g~lLoNl0`nChr~qmT(4YbP;@`)l|M{N-o}9a1 z@|QX1xBl_&b|%n20+!#uy{*39e$ZQ$*PqO8UZ#9|JM-3@b9*~87-f#38n~S)mB47& zS95baGgmP~(S2d0SkF*r?w9fZ2T$=-iN!C=@5@&iPk74anmrFT=KA?clwgF>K(_{?s582cd+hG+V7p??F+ zIh>QPf{;Mc*=C0_Zvb;n)5N?OSl{zY5W&^tVg!9Y|5O+xTF*3`hWE`^W=w$+63FHqu7V_)dpY^yb_KC36; z^LEmt*yN|?C*0p?$V;*7VpvO;*7T$f79A>Fdu6jku#|z6(Yuxv;@CqO6F@|5lO4&+ z_$ADPR&h8dTE~vzF|MRn>}wbeZ{T(&k#1H#a=dqJL3Vx-qvPyUfu-aXf@aWKQO(2# ziAS}vCT&T=0B3P&8$v&Ek!c$JR%K7V?AFUJ+Rd%%mn@sa>BBnqEM}u=3fr}_k5T99 zW&$_28&=B3rxT}=ioZ8WWDu7%Y;`g1Xnpt7-f1~q71A~zoh#mHh1$d;kb^~Z*ln*F z$#YUh;@fgkM3tM}dXJ|&8`p{Ypk%L$*i;zY4GA-d>voTD*zct;DB160uHV}4XYXb{ z7~r0CI2hz#D>)bvKG{0>D2~W-I4li*csL?YS9&MTpDxGBv7W8G&~-ffnqpmcwwmto{cJ5OjP?B6>tx6C^*04&=Nl#U z-_JKIx>#(es|{d^hY$94!YcOumznXfIq|IR_`X zr;}E2FG4*s2d_Z>1Ec=lGrfTvP<_t_R`0#%CTO_?-SSF<9--sgunUh3^Sx72x zB*A^dp@N6mSW$1J=@dtv=^y4048D=&>l=yoKFo!n7s|^ij>e}QzNS|xRMhPoO=>#K zV~;9SwpJWVn?B6vA1qY$=o@==epn!mUZftT_$i0z=#9Kek!Et=r+mSqLiMO3?E=N| zBK@Nxy}=@#`o8fp@1tT9^kThk#fhr4qY@jHV*Sa!iMpnvQm3e5gEhs;rs<8c3@nrVIPDh4sEQ3!UZEsD>ycNjiccO` zp%psoRgbQEQK0;l@xfW2-cVIi{lHh&CujX87}Y7=%B!3&&jxH%t5?$|2UdBT&jy{M ztJBw%*92$IfLyBTS0@8&qCd_)24K`=A*y_nBt9PwSFOnb4}OysIvTNSQbX@8#$E?&6nq&-l*0V=?-q_G@p-GMAw#Bt8D7eoKG|i)s}e- zZW{d{nj~x!uMipzL?a-E{m>Oq6*C8INx~T`_T(H4lr?eqSOTyrYL&01Jw837XJEi0W tAh5|pD{Ah-5Ye~z-)N>+_$sCrmJknHHyenSxr?QxqxK^?TPrA`{|8%cETRAa literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png new file mode 100644 index 0000000000000000000000000000000000000000..85253594c846f221366a20897350a3d6305486b3 GIT binary patch literal 21478 zcmd?RbySq^_cjVhr$~25NOzY=ODQNIjex+1X6O`3H-tY8E8DisF`Mj0e@gSDC;U?VALlQ-Pqs&e-n6Uz5!uiJo3K( z!CZgG;*Wu07^J1D{L0_*U=1&i(dYK=c!tvtmht(;gAeqk_}!0-OIaV5JvP80SAF#= zrI0oAJ*T&!J@)VT)D!75=tSOrc>VfyPHb$frbdhZ@mo36eq;5VUf~Bw~N@j$+|clqa#b86$h0p&K(UoIk^@I&Qo@F z_B2_-_xB(BP-1)p2LAg5;}JP|>aUj=9KgeGr5Kv`BWqx$00WgJVX@wKWcvSP#|rjz zsxE4Bp3falb5*|A;+45FbANY(T_<*?nM}_ufBb)i~G*oShH4T zn9OW6TiNP!xG*DoZuOhj*lO)NE^*U%_=CvmxLC>9g;-tq;}>(I=S(5j=W zdlb`RJo_d7wX5Qf4!8O*K9E3$#_9aX-q=`)I(!=SCQ;wMdYr!hn?u%Q_wl!}@k#^Esq0dnOpD9Bj+x{ZUuFLF7yF$l zl9ta_+tHELBh#Ixt*$Y++N!F5crYHNc2Oq>%~AIrRs9Y@s?~8=R-h|QeskrTX1P2x zkZ^oZIf*MjWROJ?`;St-i^S4Ky(bFJ;#^Yp0dUoReuIxqNVdQafg}(}2l2Y} zeeb8h1{Uvk{Y%6g_A9gJ;(48&nnkpW{aOoTwu59z)TH5rpYEHY&hGQnX z(`>C}NCnuhR)uV?E<08l==vk)vah@4>~~hApRNy+>}24f*eWj`F@EN!nhw}p_4U$h zi}&gx(9gne{r5Gq2)jQwyVDm8O^$8ApZX2yeiRh z)Q_@t-$wW>rq0{8u0{H>r%~T`cw$_O@27pPaI&{yF(QUQ2fanO!Jl+nu&3o=v8H}{ zbMz~{#s7?=zjHf~*(>{e)foY_dwqKYGP+$<0Y2>@Q~DW*2zz>@rz$H8?0KHF%H4_? zPwp>&cOPH9Nk-l=(sh~XDJZkUiUC`2zTLff_4*AYU0-0Lv&%HT^T*CwXgpo73U!GL z(Bvo2Rd1}f_38l?&CMBVo$ecPXrCwOrc8wvrW*KBbEF(Yvn+B;Mrrjgv)YV)Rw6DQ z0{n4{o2f)o2&}6rD+tWb#7HKSptu_&qvUje{K(FvnJf&B_ohfq(#A~D#2cP5Q!PB2 zT(flge3XX`Q||bX>Q+`5>#YNrLiS1MqWJZSrTi{8Noz+dHtgB;ht$xr(pYc#`=>?M zYVoVJ9Wlorc9U*W2H&!VXjTY=Q_m<0FQfb9++0c4)z2xHO!hiDU{d$cahiH`I+|?R;p#0 znTfcCT3Htme6Xk4b!I@6Z&*YY;4w0Gr9D%fOZ5Kz!7(*S<$m6Vt0;#^W0DS1rt;m} zriU=~>nOE3W7Y92z zzH2Bs#ajjUi~c66KHMT`IZDNI9YbwJN-U53sdqOy4=co9&k+bfs+pyPSfSMBnCsrg zmOqB+1jcIy7-DdMG5MM0xByE{q*PbkN3GvbBXp3={D@+>?q`Y1(X6F%3Q=f-vdQg2 zV+1FO|34rzY_77$Fgj{ocXA#jz>ni=4faN2ZZ1dV%B=@}#FkXXYfVCt#=6bM4?po; z9WTG7C7wO=hUM$}k@HyHw_gPkxZ8;{BLBMf?OL=8T^C=?_jBAg6|aqn)+K(=E588s zlZ~uVg9@GoHiRUfajmJ91p{v50ck_Rgn*U8=T~rR<7!d9gH@=SAQQD#xBj&9WnTQ} zk8aLrL*M(bbXe4tU6sJ-?`IUcpV9mPPd75L#!NE5*1$#Ka&azj-|s~yj#mI{9 zOoi90z+!oDlq|(VN?}6m+xNSNt}-8d)`AdZASJbIPHqAEi(D!Hx97k?xA8jiyD|fI z?XrG-WRU?$=tEtI<8{0y@&zz``QLKg33P>^zk|_iYvJn)1WT8*)eta_46qJuS*h{z zUO6&$179GaefqWx)8$+L-aJogS z|28N?DtV^iDibjWe65OLQJs?sWL7Pc2SSd=Fegek?5YujQ0%V+r*Pn#-i*iFQ{AwB zo}N8rW#3i?jFa=-s_6;fLBknf_kw55A5!+j3sk*|{BPqJYiD5#VYNpjWK=D&J}LPW z$-*7Tct3>wze9}wn#ZlB_x}E!&@!W7nDuK;NY&o&&Zfx1Do0t3naJ2rctDtJ^QIG6 zV)ODw(0us@Adz<#9k_@;~fA80HuYaJ8E_KcathKtXWg1Tv`Rh48 zz1iSlKmOOgdmaWMA4!MAFY^k&nv-esQ_Xt2xtZvzK2Ha7f!A*dQ93^@nC`Hv=_V7l)xAj053EDyNc=CYn)no{#-F`|7I^vlF*y#L#;5$(pM2h z|8=bIhIg+47iCVFB72`(Iv#Ch7(S%b-Q5d#n0itKBq5#GHS1@_V_8#IyudI`;#bGx zocMA7b)x_Pjo4D+YyP$U(f8YCNuUASe{aBx_l|FUe0(GS&AWB;N;87f_iXUw?pKED%1WWC!2v%^$*}0}4*h+Q$-ch2)&BzpBvM-2khAv*ki1$Oa zU5jr0$ypru-$PH7jKt~>qA^PUYra?zXaOu?0w5+J%T`*|_5D@MebnXry&4$4oz-!v z>6=lnhs{yVf6p?P)va%AXkEsxE`coiy8S}dXtvS#$gRDFG_-3cqDas6tdX+J!TT!S znC&|W|d69q5a7;G}y1t4sE-86b3q~ zAd;4q}p5iqWMq&qogcE8`h~z@Z+?EGKn< zSq!epRaEdd4#rmGleofE!U0G3lfh_6flTK>&Z7^6o@}h!3aL-}r@`-qOiW#AnX%<8 zKz0Li;Qg5t?hOGI-aBk-cp2;)DC@1E(vcc!GkZq$KkW7ZrsypvrNNnihy8rB1g74R z*24}K`S;uhz^xKski*j%m(4kPLOyJmS_g1^zg8X3y+6LoCpHqR;d-6e2zvg&lX}U! z#JZ#iZ}#p1O?~idRaw&eBlZO%lGKL`kJ#*L0X^yjuIBZ5(=UpxJ2)Ep@T z9RC0w^aCHjr)vO?_&dVf!0Dbyv`(N&2IfrgetfH1W@`Xgq5quD(DOsE zR@nm>xq4u#8vt?cQOpJ}9%<7$L`KoSb+v27z5esZi7+|-MCnj4TihA@nrhh=Fi0BK zTFdfsAd|1%k>Cq6XOMfhOtXSAqtuAL?1xmnvMitozLxM$rQE~}n{`+%`WI$O)nuPi zFkL+RUl94DrUrl$Iqa$B&&vduZ&iUUT@b_gPT_J{&VRwvv(?ypK?7IJG>z<&UA#uj5e zt)IN+OSb+|(-iQlRy`-8$Cl`j**@p3ZfjQp-fYe#$;fau6QcN9Eo z1wziZH!KV-Vn`bcP{gg{m=A#JrPA%%yE4?bNq|X8(gaMYJacc5k&22fF zjo}B-Xy9$wq-*+tu zon<#Wx+<;r(+>E*ue4Uz=21l|=aq--U`?P(`|%wKwKbEz=Bdp6gxVDait3^N6nd4u z-OdS}9hp6sH3A{K0+oegawZ)m<0N=ywVNojtbPVOpz5RtteDzGOKo;D&{*G^5<^b> z+O^@E&loP#>qyDEarA9uZ-0eYun7CJIZkO-VE7^XitvrROPrwpK16? zEcJW8vraGYqh6mKIJ|bQcFkWfnFDY`htD*wYJSjVy`DnQXCL^x{O{iz_+Dq*#}@^L zCOeNksszxnJ<-legG*oI|5hTiC@3oUu1maDg0ry;{9lW92GmW_#qeox2QkyTwU`5I z3tZQS{8Z#)`hZcICL8QquJT)5VJO6#1H7#j30n5OZ_B~4K5K8a;XUV)@ABpF!T@SU z9cWC6L&jW{BR%_1g-%PyjG{zkB@x;HJ0ruWeVw(^H0%MqVOHH9X{}DqBLF0*GToyO zuw~d>mD`R^W#MVFK(5?^C=pHD%DyY?(S$G}=1)b*0B<(gujbrN-R=@&clc^;q0ism z@2_imI$o2|e&v>o*PI0c^`13?QQlbHlSvZ5dH(-vGD!pTg_vkg!Y$nDuAy;8aYga& z=G5BBv+HPp=%O1DGP52CueR2L>j0rVt#E1Hxs@d6veaPTZ;)z-J}takMD7;4pYBW% zWj3+&q$A$3n7*|?49YWDDV#6j4>%d)ws>=%j|d)F54l|15SlWpvktfL8sogEP`Vw< z6twu8*?eKXd)nH2TRk<`EpXXO*<_z@{LeT$2K%7GQQw1$QkL6Mi}#P!6YA#lXobf4yz8f~3i3GnwD1S{dGCKcQpk z2iNdgzl<9asa0#GJLJqkQ6#C?-Co2^*d5|-Dbvi&Now7{wEOmArN6?oyu5ta=O9z% z!%Wn3jIZm=I}ci%&0ApQ zxgEHE8pDgaqT)DcFRFT zyrb(@xkF#}x?Z2b1ix3nPjVqQ?`-3v-3;eR9v@x*t_|JpK$Wa5srDILg)}=;g}}`q z4ZU}_2tm=q+0vMNj{$-fz-NmIbYk>b#zsaRHQ>j|@(o&iabq)K$O$X@UOYqE$@XiE|aj^ z^R-}X@WGtEQZwXcM@sO;g-V&_>WdFn!+D}DV~ltm-ugOv$9V8rDmaf;}9=yfS5B3M`OxEME1pl-QgmJbe zL)D^_a#okSgD!_{@3w`)oNPyud`89`q}5yW`K0A1b!Lxua^08L{2;D|mu^a@$EftOo8vU70Eg~nu+sqJ^YM(}IovHf&=tTlQ5^5i_vVY);n0w~GOPxVyeCn_Q9$FS_mBxpxj z!HRqD?W$*t=k0p%=~PYdyUvj7GXk`Mtn8hY(NRa4@MTPxPT=7}tyP^kGmQwAy^TaxS5(PoXD-_B%C3lOmFL{eECg`6aUy*FNdnAbjwGc;Dgvjrg+Z~P|9 zL`-5rpe4`BZIvB$>=p#A9$$gXCT*eq z_>@TR;hkzu!J;KzW1_`&Uu#GDN8E1FKqnsV+21jO-#!QaBd;()g&c##Fo z$rF|$?oO39v`!x-?GhL(}zJn0y!eaW?l2)5Op0IRoabG-g4G z&ywPs-aZpWsXbJ-EWat;FKgfwimAQKEYf-WqL?{0Gdc8btHzyv%N)Y!T)Znub21KW zb?4fi>+cg9I+&aO?UK^1*q1Is=0fD3M6EtHy>YH?UX|!;FG=92D@*#bYJm5$+{0}Q zLX4B6!l$@u5APgDM!JV9*sz!|-&b1^`Y z3C$#t7v0SRC7}{V;4YMTW9l_IE?h*J??jhaInqglMVGJy#6oYbtev>hr^Itkr{!wL zB;_-YrRMw7IJHHWi1WwZeV+V4K(Q)nClv` zER`Y6R+GPjRKTqy%rvh_e87<{Do9LPqX`TfDv81|HLx8{@a#5k!ifJk&rzK(?HN{z zqg$C$Km~zhmUg zPlo;vFD~fL#=+O`G&#+TI_x)Ob=j?uDnxnn;)G*nT61gh+7yAFPT*8TWkpVGsSQ}Ai|bBRUPNi0 zyb<&u{I*Bitzo16b3`Ocq>EN?uMbIBJ8>s-NBMo$$1I-k$pT||TQ5>xT}p1PcQZ^0 zIi|lF>R{&8zf2MrkkCW41UcC2>_jr+gemURKyu-XQA12}$j`xgFPH@vdD?OYDfEb< z|IpTKxl^`86{tk((%}~878ZR=IW6#p^gBlzXUq8m*}QYB4Zweqy^_|nF*baeg`jB} zx3<*alvm)Bij=Ml@ihhdSF`X1sisA0djoAwt--Q1W}1MHfoy_G$30(2hBB=cUwN}g z*KWc)Ik(km2Y)b%soab(f^^bn#42LsRb`l{tFtyv&70UviOoUSj@W_we6-Y$`?wc( z>G@xCGGM&?n!cHS2EOts5s26c)GNU><<|b>$DTjDY zdL3$&o~~4cJN8#4)Y8n`I|(Tvj>4U!R3plj3aO~Br&0ZSXPBLw$wjvGa^GMz6f4PcVtHW~IOpI=Xml?{J#&#t0XCko2~DpS1O`LyQh9=fI$E*pU1*wq437wbWY#hH_2qy`^_ zGOL0)^g-Y^Wg({SXYGMY+G;0ai_?;e)(@nXF6u{^LFuDjY!UC$7}q|kLTxCEh~?Bo z5}x8bvgmzvb-1krlsXrYEH`~VWMVmOoKM7Khqu7RGFpn-h-CNfA-3339QuVvZltiM z$|I`N90P+YMZ5e~@b3>pt*$g|ST2PEV~ieYB?E?7LlfJ3>gfC`$9Pxb2$D`dd*9SD zB9`C^e(+RVUQhrZN>D(g5aSIutZ%55->pnx&f*xQID1leC(b`DhmiNn;z8+zGpTLr z*(UVGj2B?tCdnN-x@_*IH{I}X0D11R<&`5n*GtFH&+-9YM`PQ2RQ3#C%9^)v7Zk#! zo%D(*FOdfLqWG5IBEMCRp4RrF1GiqK8yGcUKIG2tr2cB+-T^CLjQC(LkDZF~u@kq1 zMzNpVqG^+jL-5hNLlA?gZPrWIS+#6R)EGK|vgeftHreb}#oLXm&x6^r3QnswLxZX&^~Y#Z zXn0{F5znI6$uGi>eWvw6puoOh46N6O^iI0^Z)sJ$Ui~@KjH<2u`YdUt^jKwvNSUI$ zcxc%{7&?f2{De#??mhgYEkR{vrL&hyaI_5bzJ6NBb5k^BT5DQ)kQpxrN&53ZbExgk zz>hCf3raAH=cZb8F!Q5FLWM!f$;P0WTl-M+4}WxgA#~eQL>QT#KEa`GI?+^sB!0=;`uNdHl!!T6 zzw)~KavhYDWFt}H%Wl#uz(paN^qh^lyLs+$si?^BT6jIl#USK_RP<5KkWlH+)d~bX zj}v028EED2Mu?h1UymmheLy%UV5x~RRlg$K-#hq1NxMG+)a|=T$qD0V5t~FLwYhnF zw0c@_=2>ytR&brZOT0LDVnCo&p#vKGRIJZa?Q-_9LYqZ;01a`J$FxcEv&7Sx_KG7; z7Wtc_!NWzQTTkRblo3z&$TPUqY zz9Af*dbYW^$aTt;P1EPcrO@N}IdvX8cwcN#z}#ULSI-0-vMWuHAd~!w=~c^Q5^xWf_N!Yhga7!`pCv7C#{4E=lM&gFbe>*rWB!KD zFN8xuuqXH9+SxV8Oxj-DNk=6<%q8YzmPHJrCPbCYTol38%c(4*XPKy7_^bx;Y}%D^ zzQV;JOd2=r_QiB+%`YKFv0D(Sm`kMG+41ok5jr|UOjE>2QB!9u){7X#_P|C&agm+O$mr0{ zOWLF4rVWiGf;HZy%-pyi%lSn%je{~!j5gbB@elp!D?pN_r8n2o-Oe9)8 zK1YG!{jtiJ+g;<7QIQaV+JK699WbJd@HTt0x5jV3nF|$IA}h? zY;5B-8Jt8di1TDO-{&io=Vwl?>Sip*2u;?zeX#|W^kkkR0$ML7cQ%w>4`=OBNZEtk z4|3Cs$wv~;?fcGkdbp=}^hp)YUPxg!w|hH;5%Pqk?NmPlcc+Mt4Hag2V0wNZ6Jeb3S0gV1uqw?4vS)aFKKI$D+U1zSP(iVy~I1PEeXxhp>Ou zA)CXzcpZ-u)eU4d-tx$f3k?}XZu=IIn*mKp-)=Ag`qNaW9>|Y|B@IUFFea=uh zdT@US7ZIT3?K#J!C)FIQ`OSJS-bQx3!V6HHl>HDH2|o@h&=~BZ41FvJ$-^X1y?9!h z(D@;!Yg$D(fDsGyY$6Ka!v7n|9ds!9A_Nfx0V!o?ktunN1y&VG-W;y}FK$qi7Dh3p(tbjuv^Pp-ej*hr zlFwq9C+Ye*Kj^UCcZA8Wt(RsFg1%@~-A(FkWFBE3o50~=4*hWM*Ne)ZXf$9Xd{6jv zQv;Xd@pHrH6g;XmHv>XWkpIwpOG^%g2cfqG6;?EIN8~&>ieCZ!p=x><_Km#Fo9%yA zfJ+y(dPpd0sk(LjAAlBgtyAS_ZM%79bGPhV+s+cGu=#<)1t_)~lp}GMfO66Ko(8)w zuIJl9yVkBw&dtruhXlQTYd*$xs>|cJ3@+9*<{sg<`wmKtTggi6*XMADyQ>kUeSqbu zABv~JbJnT{SmxBUr%@9#p;ax*|I9Z#FIa!8;y*t>zW}(bWq_=UY0&0<1HT& zf|V=nSz-Y&WHl3cHT}Yblez9aOS(T$_k<3>WQdT)5Q8q){8oS>&b&1cU?11=A|5A6 z4|HE#F{WMsG~6Inv|Bdf^p~OjQf=5RoU4$)_AT^(l9Ll(z2BTfX7mC)n)!kP>I5K! zIznA(S$Go0vdYeey!sVVbd(g_!Q@ z+(}n#_H0&zrTLp-MTh;(b0H;@k-*JjY*V^>j?MfMzF2R&R!>GJ`om`|^r#>2&>fw9 zbiQD<0u+f(5)u*@TP$~r02S0d?D}EhbV9Hl`Y2b#Hu}B*mJGS}URajd$+mSV47qSR z84N(L{!3(ELc$;dD^3;ptBR+#Mf-EGio(OpUBl6O)Ts`7bCJb=12e1O0WR^sq%z5f z_~lk8vc(gu#ocaX;m>e$(2vK`lw}z>wq4Au5V#1CT6-rBZM$0lrPUAyu-<}9Gy^(`O`_N6FatrNBEYSpistC zTj=Kvc_EX!zFSjo^Yx>N?8Py~m}-E+6YL$da=3ZaGlG@}*v3OpFbix@HgDIFEKUCu zU{R*Oa0X;jU+~p-{W&r1firG8hb-3FNCKeL&s7Z28ws@30gTc#E*bNx3D-S`>vkLd z01wy9abrSkdQht8IMEsw7i`+lYc9t)Q`33)cRcARl=^d6dVyh!b^!Iz{sI0ar_4UDUhMH%0#OCRvX@=Mx5s%P$$6FOgD5vdre$BqDagnD{fM1 zb2sXa{`@xIJq)$N_o@C%)#;r*PObK%bXIQtf_*`H_CJCa9oS(`Us61TgD?*9&g!c*`g)}!*3ai=r| z^wriO`(uH?i+xyTy5c?_WJ*nEQ>(8}ZF-ky(Io6*f648Qk5BVTmR>%+ECx?oc93%T zQ(3RpiF;DFXW=eUXUa1bmXj>vJkRgf1<)9w>8@Aj0~1%10L!;4NJ{A06Lb2*;Tu$* za1;WhU%?cGi$&Wt#k!fxRZ#L&p%R3OH?KFCP{9|R!-_baQSyT``YzfWuKqmN|J-oM zTUqsIeu@(!nf*%}^N`5+WYTBBV)uj^rLNYG3^jIuSjB zB-sl`M}uUYu3~wQvZQWAdG#)$LLmQ*5_^c78y)A-PTbXDf+(@qe!Fx3i^qay?5P zD8iFI3tJ~oY5X-BamodI`XISW14AEq3?!>|QP9rmPe+4MU8cmcV3ALslx zj<2Tf{%&adG0TyG(cF^_Q^%T36T;`A_z76SGYXg9+`NGkoHU9!d^nua{n)BE97>){ zG^9~D)x_(ddT`0cvnO1z8Q9(bpyl%cp5V~^Rh<@eWjI^JcJ)pHiv&x7kmQ6LrDmh5tX_o2OGUV7 zs3$XY(5p|xg~#2G_6S{+gedbRXYx{!MlD?S-i5U4)=;&K$!yb~5_V^5`eE@+3&86H zM@BlPa8ioiei_(WHnB~VSlt~XGAHu9QZ%gqR#s2+-lQ<@98c*g+!;wh`~LYBu!+1- z+CA*Fb{6QcSv8uW3tp(o(+L>@mdDlJ^zX2PpoYBZx>9SuULS1+Pqc^Z=KBFW+@Wji zpd=bN#3c`fM$|o2tX0T7O~Ch?>I*-cFq`oCZe-ZzxB{eESM4Ai= zzhzpgLr|y`h`l+%hNUu29A*xs!g>}F<@kou7~P7yQZd=K8O>n+Sj4KdHszMH?N0|; ztwup{zgE#+t^En{Zcb4aXejVZZ?-PHxBP1mOok-O_LCU)A$H+*5&sT`E5P?2mXy3b z<^DJxp04h^s8M6*rYDLM(nOR*6ql~GIU4mshjM*(o$(?nK6gMcnB4G%r@ZPkqlzG9 z5v3p{b5WG?EB%S6__sG#$8It!)-sqB1*r)zh+VAVD$nTO<|4nd6W` z#Jr%I3n1li4Y(rDg^anhhiB@$eLflrO)^4X)2>aQB^JTHV3lY~?c{ur2H8{T8DTqh z&ZnE19M(xI!vMFtHBE)uez_@nMqcBOB(65@iGPk?Mvlo{U4L}BONd{x$igceridgx z!T%aO;IwacPHgWVWv&f13`G0^uaVVKrYp@b79zsW9E(r#d+Jqx_Jt z#y->(@jj1Hy6MkX3CuWg?F2m6OQ91rmm#mN&lFB+NZ%K*sQ`nXk`^9!8{Q<|aa)lM{o$RUQD{@<5?)D2QZfc- zO#^hGNKHeTQP8_>bo9z|&+|{Fy{S(V|KQg6)W;P;)Q}e;TQ8Y+fFW!IM|Km7w=k1g zF6yoL%+)~J**T7iA~D?uKK>LT0{(#!0?RqMK4ClsT4*Y87p8FK{9u|}p^%?@icZ$% zitk&S?TLzfdvxFcP7r`#Mg~Q8o?mk8);vVZiv{aug5Jz4v%bUm9)FXnRv`BqWz*Ho?jND7O|G{a6h zLP1bG0$WK^AD%W)@QhnNt9&u`rv2%yYkki``J$!8=VD_ zbfTPHa&?<256mcWWg#jyD$S-kUd|{|?q=#WwC4i#U9ev_O@Z7ZJ#tzEvN`wO(kZZl zZoDX>aj_yCKah%I&=pKR zbj6J7{Ig9g8lO+ea6l;iZxXkX9J4+!kz zhFIvnR02`{))y*M%_udTDLeDSvdw3Nt)Jt<`(iTRv^g)A;%E!K0xkbtjE@p89nxMe z`l$fiz^sZXjgrkiqoRDj&lg1<^{^ie0JHjmhni+jpr-5?+}4kkhH*wV$G_0tT-LLg zKc01t59_h{5x^zPrmtFGyP4_wh|y0R(a03ts!0?m)Tb!AuZ}V3kj8 zKQ(8?#%L;e0x2)N>y zUi{#Jnw}t2*Ljp2rb-7A^}JjKdXk49$wMzCjAMG>Ej{PeRp z*;eP^h%To-MjunS;*+uj`&emH(v0tAsEIntySscV+I2_vCUKW-FMVH zF5C;tDPzvm+U)GB@KP3jrpPTvYro+YYU4*~(bnmzmlix-N26c8Z(xy!#uY>n^sy-i zt{Oh{kaF$%?32f)L5k-HE~+n|-8(Xn@`}o6yq1k3ocSa0|HsNDC+pfZ2RCrlg7o$RoCV#l z;2+&Cj{=e`9b5{Z<;ee#=nKZK!K<+W=L&|>3HPdItZ3QyiPx+wd- zXfT>^tT!q%`O}+KCk^W#p7kvI51fofn=LfoWV?5IE*eiOz=nFjVxxW@y2ss{!6PzP zfM5wuZHQkO&j#juCs6|qklLgdfQOKQWU`c?PjGY*9( zcqT%S`cH8UgzraJU$HhFwhR1Hav0cBeZdA|16>k#Qv&WiN-#FSh$14;6HXPNBIizg z{{C5_h?A&+dH=kCJ83~lQ9Kal=qIFyy!mQyQUT4y@5dCPGKpF_ zXOkbq7*Kl7>G8>1e>#`&2%j=vQFRk>S`|~=GK{D#Jjo!*AX7v`D2?TOhJMMBOELDROjfK z@+1Tn#YS6_TgWDSLMd%jBNP1%UwxDeYQ{{dsYtpzXnvzu$4o-b3p!C+u@ih05HC-? z&EQJ>(t||G@30S@Rscmh6a)<8jEQ@-iSY&k&JKzyFr4S^1s5GHJZ>$gp~s*CPV5yo z!Traup%yKnX@Zewp#<*nTWn!o%wuBMd;AWx2|k;1v0fR0(IK2d>C@OJdCm}(%-Wk> zX?#X$#ohzys83>{YaSS%yu-%)ezD|fC*^mkt=plC5tt_seKIlBbc;!{Y^rD+eB8NEZ>DIK1F5?Peodzy`d#c@&nE8`};XmIhh>5yszdTa)K?1_0&MH+b9X00}k(=EL^ zG_>|lQ;}Mk_opdFR$=oYY0=d05rt<(kBWC|DG#qGc(Avrx>?V#V>O+4DluXO6+600 z(+j_BmB?ilek_X59l?tIM6_ciY?tbN(iq!Ro5q4w`p||kZR~^2-?t6)y(mM{t@t#? zEtpP^?Vl&01lss_T?L+wfnnKMLwQ)K1|#N_SbjUD!pN+cU-z#mDcF-^h(znzkBS*y z%_?wVXpanFD@8D&MW91LTqqI5$X#7|ge4E2j`{Aw0bRp3rq3#=5c`*kDlX;wm!m0F z-b`Tv+EsEMT!0z;fABi=qs?}%-NLY*sa&a)gzV6n;Kdr(rhF7 z;FEifRj#$cE0t_48LIt;yjL=Gj5BMo5Pim-<*pV7yyMfP`9H;$s;bL+78dz@Ak{c6 z;B$QaEyd#>6bAsC(gbi2QYO6Yt_OgMwDF$RuwOb|Hn;`e(giBf)zF(Qmd?V7|193# z4&YEEZ3eI}K_cv6FF@RT|6cc*nKk%Fo(yRJo_@RMyr=<|Ep+s_6LMSAeKO8>0q6%i zS;`MqT5HX+2y$sJd-ayz?v*BY+#ang0n0wP+Ddl65j;Zn-fRn9G#1`Y4kt0e zFPuhG*nInOXxe734vrpIGOhsZmK$)Fosjz~;O_Qvr8e}Ok3rn=MO||_mtLMDFmcX7 zDE?D?20T$igF>?XL zn7+$S6-xl|Oy}~==1L&?_bY z?YDYerIE6cCBkzZ&EQsd&qBSXq-+D~+a9x+ftj$RxIa?8$V9WSAF<>$9%T>nWkBVX z{ycqdod=RZ08eOcKNb4o$)g{^_qsM~J0_h%#Wlbf61lQI-(4H0BoFl@2$j%!M=Bnw zoGpkRlqCB5%^;bQ3!?k7fC%HOFzOt>+d}ob)6d;_(J=O2PBi~TJ8MJeomI$r249nm zZ%b49ASuMxO9A4b942w~nzdG~v>)iO@%ysa9{owi2a$;ToO^ z*wJN5;Uu6VQt1s08timS=x$r^z%lpKNP8DRUHkriZQO3V#YpY}SWxbeejB7HEpSGg zzVodOUh*@Tt0BTAnrh6BD0Nbxbv13QrABmVK*D61)oj-8Uv(L9GmtfAl-Uo~;WA?r ze={5iD6s$8N!4KXL@2c63*@cAUEsf6;p2R@lXhl@Zg28je*T1ZUIn*AOyqfu^W?bL zF!N8@-AmfWjNEbnp{rzQ%m~`vtSiUGS=B9}rj+cSB90zJotbFGcv zxaSl`t;gMq#-TA!$&ql*G{f!56(@1eJ^xq!Cn@ZS=nq_aFYHf~?7ew&5|)hU2DI%) zi_8!$bbP@j0R@+xo+1)DneVqw$3K>@u~-2})(2f<4kTjaS+e|2x6{jz(pkxh*I%_P zpGqE0*hSWHEd`iz->PjyCAj!4oV_N9I5zr6Jcf>(a^L7iI$<8vdFh^j*wD_`Z z9q!EH=I_2&*3frN2sz2x0wD^5?WQL6aMzTVbD1oskU56L%;hve1)l~g4ZtIO1_M5N zZw8qpi(|w3>(tD9wz}O9f`Z9*GYTR+OzZUT1-2`a-SkDfQRj5Hr@Kk#!3Z0{GwIa3 z0TqjVIi&mMKvazbTY{xx;ERFXe9I=_ilyWH)(>RyW1IZK3Ak(XTj7ar3r-Vf*&V1) z@3CQIahepa)X>*o6*>7V9>;839KfrW7R>bscqLPs@-O8)rT69lewRKtQKvZQYBQ#j zE!+h@pBjmE;^Zf)LC+0J+MT>kp9boC~g5s2f6Cy- zcT-*}mXpe{&zA-CY;>e#GiqwDXrpcSBH5^{Mh#7NWd*^>gsC$cd^68pgh%mh2d9;b z{b|wu{4!M}@6oU)uo2P^kMUO1f~RG6+nPSAa8gfc6O%YR&rc$4{1e#H zk9rGlpxkaNp@nqocB2U3{xH(Qe>2K0TgWMDG;s3&=;lnrq3ZiME=%^MvWC>e5Sg*G z+*6h?nnjjW)P$RCp%KPXW~^nGu{4&M!O)0XN>Z3;3Q=k_sO&As4B5Al{W-es=X%~e zZ}01RuIJ@>anAKW=lp;F?fdGkaz1}tPP4S82jWJMm9b{uvRN3l_U zuk+bJzfySQ#&5;3bjD9T3k6~qeZO@`&Ou-fYA~NaPgP$zqYltpd_YE~G&@=Ir_@7l zb8%*VSuof^L|X8UJBZPAD4*LVKS>HFkSqOoTe@IK01C3x#kQ$czU(thV+Se<#kHeStKXWKrNn^my5QuAB z%|FhGW)XAWGJ#A(-A&^k2#(xn^S4XHCD;rL<_^-wWnpy2VLo^27W&8p*0c9V&ye*{ z1+K{xl+#j$M09v6Hop{31_Dzm{6gAAZCRSaR@wLX4%2n=Q1=%FJMBF(wX@WeID8f! zPmLJozzWYteXs^G%f%^>CqQnaU-CewbAhZbCO)!^)zp~t#)Cyyw5P2VxOx-tBywi})KA&xfeaYcJiY$b!UH%wEi5z?IU zP}Bfsdp;Yrkk2k%Kd6_qhLFCEXtDJ~yS`R;F=0EqG3E`q$)Zo`YGJCKAI)66>H|p; z2YSI-ypedbyfPO@M}-DIWz>A2%H9LpVF*fayMQ8NA?1M8UU26S{DXIw`?Uu~8kqq0 zB(Uri!#zcQpRt}>aF(G;2X%FI6-<0kYKf>lxg%pHnd7g=;o8l%2!UyQQ=cC=X1T_M zFvQglF|+ECV`#2TmL9*H|3}+*YQh#lg5I)&DhNf~9mSvD{qK$i?z(-pPp`7|TeemB zIg||jwmv~oHPkmrecVZeM~Y&}iAv`LXv*WRVUp`}6q}IbnTv%d>xR3D#Z8h2qwjZt z$5J=jM^v6T&li|Fx{hI4x%!Ru*={akVc)A%`E`jAMVj<<8g(N{++ZG+NgSCqCa7^u z2CHA^`$sZKZ&Yufh*b~g?;`D=OS-6Ff>RWP9-45j+7;Q&RZnl*sKVp4?jF)pf{b+gVajBwlfnz4z0la(QNYsJ z|D+()XymnR|6*+;;<|S!?fw%F%AodpJTIvmx_}Vjjrp{NDH9ZZ7J&Q;+uB2;cL+D+ zAF0i%8v#vio1Tv=#AO@4H^V&E<=vrW+|&hx=Tu6mc?xxrwX2v}~06p=`uLvg`@B`9~gqS z#dlXdU$h|zdweh7uCfli`E_}2&PIuWXHz^PGmK+C56ia}~~x)l>$__S!4qX_6`&0G=8y_@&b`4Xchk8g3E($lD0x1>(I z9X;2jf#QQRIcjUIrY^Y6UM^=Ig#ETJB?kY|z@_C|D=?IEu&i0%3Xa_!f5tT%!uSQ7^W zhL7FMAX($0;k#X3M0Eee(907Cge^deV*0O(WDF~kC~c)MKNCaR=q7#id4IqJ?2X?&}7@>FA;5=DLzX zh6D?mG3>S}Y+*2{fv6P3h2>VZH0SZ-G!V@l^cv9@4ODnlzi^mUz2<2<3 zR$54z6LcE%Y=h&$K8ACfKqw7M{ROcX`#U9iRqFqrF7`J;&BhX}b3+$&h&Og?VXFPO zeBWeWNMmN2C+UJV5cI?M79}i;W+x)a+j&~RPIBqkT$V;-eH!*&43oVbt3 z8THYz6_nMiKpM$iJ|h@F31kLI;7hFc5--8Y+iCb9Rls^{;$!5s%Lff4g8xZ$TSjI; zr-r~JS-Gdm-R7dkHf(E~*@C2u^;A}?M$MOp_K^gpeopiRHcD=7wUh{4`?e7-?3a{S z0oc#r^s!@VU0*)Hq9h00N~gQ)ZM|zNynI@ir}g5wz;O%! zQP_2;Jf!ErlMneilMlv2j;;PB)YvsD68|;AyXv!-fI3GMTXVDLJJecI(azI!qlN50 z-BFSw8Qkm(0<{3>CU|nW?YDTCsiD`Wqr7!^#LCTwx-NIycA~vrgdeX^YaOH=JiS;Q zAGr$x^34NxKGBNen z8?Mf;T^Yr|ZwFzEaRpr^=i(SAn}#bGUL}%W9#K9+-}k0K&kwwZLL@dpAp30y6}?Oz z>Z{1Z_)V2lYZ*8lLao1?!{wZ+N^f29>|+=4`GEVSJmCEsCQ}PIZL)XzeGAySqRR8V zK}~BkdLV-BviI(C*&qJh(dzsrYA$;ZT<+WNbvEP$ z9wKAmB5}uh?a7B}rK3Hk?@(1MRA-p=++NK++0TW+(@byMfskdngpY7Iru;V=Fhlml z)+996alA=D-ctR=CxL&KkZA7@3<|d#$1_@i8ov*e6n!vsU|Gba1o59TPuTbM&9S|M zx;J{}0xMLi6X}=#`}h*)1`UstT~8GG_lPTU=6@IK7>ua{m^1c31L-5%p2QHcfhT&_ h;rF$&p;zig)Vq;WP^jviY=F(lhqAPRKQecX{TFV`%TWLT literal 0 HcmV?d00001 From daa15f93eb7e129df4d311da5a9e930cae8863ec Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 6 Apr 2022 11:48:50 +0300 Subject: [PATCH 132/272] Update POST.md --- .../POST.md | 57 +++++++++---------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index 4a594669ec..396da20f86 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -6,7 +6,7 @@ In this article, we'll create a basic application to demonstrate how "Concurrenc For this article, we can create a simple BookStore application and perform CRUD operations. -> To keep the article simple and shor, we'll only add **Book** entity and ignore the **Author** part. +> To keep the article simple and short, we'll only add the **Book** entity and ignore the **Author** part. We can create a new startup template with EF Core as a database provider and MVC for the UI Framework. @@ -24,7 +24,7 @@ After running the above command, our project boilerplate will be downloaded. The Let's start with defining our entities. -### Creating Entitites +### Creating Entities Create a `Book.cs` (/Books/Book.cs) class in the `.Domain` layer: @@ -45,9 +45,9 @@ public class Book : AuditedAggregateRoot * [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes we don't need to manually implement the `IHasConcurrencyStamp` interface. -* And we've derieved the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class is already implement the `IHasConcurrencyStamp` interface. +* And we've derived the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement the `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class is already implemented the `IHasConcurrencyStamp` interface. -> You can read more details from the [Concurreny Check](https://docs.abp.io/en/abp/5.2/Concurrency-Check) documentation. +> You can read more details from the [Concurrency Check](https://docs.abp.io/en/abp/5.2/Concurrency-Check) documentation. Then, create a `BookType` (/Books/BookType.cs) enum in the `.Domain.Shared` layer: @@ -119,15 +119,15 @@ To do this, open your command line terminal in the directory of the `EntityFrame dotnet ef migrations add Added_Books ``` -After this command a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the lastly created migration. +After this command, a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the lastly created migration. ### Defining DTOs and Application Service Interfaces We can start to define the use cases of the application. -Create the DTO classes (under **Books** folder) in the `Application.Contracts` project: +Create the DTO classes (under the **Books** folder) in the `Application.Contracts` project: -* **BookDto.cs** +**BookDto.cs** ```csharp public class BookDto : AuditedEntityDto, IHasConcurrencyStamp @@ -144,11 +144,11 @@ public class BookDto : AuditedEntityDto, IHasConcurrencyStamp } ``` -* `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for **BookDto** class we need to implement the `IHasConcurrencyStamp`. +* `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for the **BookDto** class we need to implement the `IHasConcurrencyStamp`. * This is important, because we need to return books with their **ConcurrencyStamp** value. -* **CreateBookDto.cs** +**CreateBookDto.cs** ```csharp public class CreateBookDto @@ -169,7 +169,7 @@ public class CreateBookDto } ``` -* **UpdateBookDto.cs** +**UpdateBookDto.cs** ```csharp public class UpdateBookDto : IHasConcurrencyStamp @@ -192,13 +192,13 @@ public class UpdateBookDto : IHasConcurrencyStamp } ``` -* Here, we've also implemented the `IHasConcurrencyStamp` interface for the **UpdateBookDto** class. +* Here, we've implemented the `IHasConcurrencyStamp` interface for the **UpdateBookDto** class. * We will use this value while updating an existing book. ABP Framework will compare the current book's **ConcurrencyStamp** value with the provided one, if values are matched, this means everything is as it is supposed to be and will update the record. -* If values are mismatched, then it means record that we're trying to update is already updated by an other user and we need to get the latest changes to be able to make changes on it. +* If values are mismatched, then it means the record that we're trying to update is already updated by another user and we need to get the latest changes to be able to make changes on it. -* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it behalf of use and shows a user-friendly error message as in the image below. +* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it on behalf of use and shows a user-friendly error message as in the image below. ![](./optimistic-concurrency.png) @@ -243,13 +243,13 @@ public class BookAppService : } ``` -* He've used the `CrudAppService` base class. This class implements the all common CRUD operations and if we want to change a method, we can simply override the method and change it by our needs. +* We've used the `CrudAppService` base class. This class implements all common CRUD operations and if we want to change a method, we can simply override the method and change it to our needs. > Normally, you don't need to override the `UpdateAsync` method to do **Concurrency Check**. I wanted to override this method to show what we need to do for **Concurrency Check**. * We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating. We've used the `SetConcurrencyStampIfNotNull` extension method to set the **ConcurrencyStamp** value to our entity and update the record. -* In that point, if the given record already updated by any other user, **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown and thanks to **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overrided. +* At that point, if the given record is already updated by any other user, a **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown thanks to **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overridden. * And if the values are matched, the record will be updated successfully. @@ -268,7 +268,7 @@ public class BookStoreApplicationAutoMapperProfile : Profile ### User Interface -So far, we've applied the all neccessary steps for the **Concurrency Check** system, let's see it in the action. +So far, we've applied the all necessary steps for the **Concurrency Check** system, let's see it in the action. Create a razor page in the `.Web` layer named `Index` (**/Pages/Books/Index.cshtml**), open this file and replace the content with the following code block: @@ -305,7 +305,7 @@ Create a razor page in the `.Web` layer named `Index` (**/Pages/Books/Index.csht * We've defined a table and "New Book" button inside a card element here, we'll fill the table with our book records in the next step by using the **Datatables** library. -Create a `Index.js` (**/Pages/Books/Index.js**) file and add the following code block: +Create an `Index.js` (**/Pages/Books/Index.js**) file and add the following code block: ```js $(function () { @@ -398,7 +398,7 @@ $(function () { First, create **CreateModal** razor page and update the **CreateModal.cshtml** and **CreateModal.cshtml.cs** files as below: -* **CreateModal.cshtml** +**CreateModal.cshtml** ```html @page @@ -455,11 +455,11 @@ public class CreateModalModel : BookStorePageModel } ``` -* In this file, we simply define **CreateBookDto** as bind property and we'll use this classes' properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of this form elements one by one, it will generate behalf of us. +* In this file, we simply define **CreateBookDto** as a bind property and we'll use this classes' properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of these form elements one by one, it will generate behalf of us. We can create **EditModal** razor page and update the **EditModal.cshtml** and **EditModal.cshtml.cs** files as below: -* **EditModal.cshtml** +**EditModal.cshtml** ```html @page @@ -485,13 +485,13 @@ We can create **EditModal** razor page and update the **EditModal.cshtml** and * ``` -* Here, we didn't use the `abp-dynamic-form` tag-helper and add all neccessary form elements to our form one by one. +* Here, we didn't use the `abp-dynamic-form` tag-helper and added all necessary form elements to our form one by one. -* As you may notice, we've set input type as **hidden** for the **ConcurrencyStamp** input, because end-user should not see this value. +* As you may notice, we've set the input type as **hidden** for the **ConcurrencyStamp** input, because the end-user should not see this value. -> Instead of doing it like that, we could create a view model class and use the `[HiddenInput]` data attribute for the **ConcurrencyStamp** property and use the `abp-dynamic-form` tag-helper. But to simplify the article I didn't want to do that, if you want you can create a view model and define the neccessary data attributes for properties. +> Instead of doing it like that, we could create a view model class and use the `[HiddenInput]` data attribute for the **ConcurrencyStamp** property and use the `abp-dynamic-form` tag-helper. But to simplify the article I didn't want to do that, if you want you can create a view model and define the necessary data attributes for properties. -* **EditModal.cshtml.cs** +**EditModal.cshtml.cs** ```csharp public class EditModalModel : BookStorePageModel @@ -524,7 +524,7 @@ public class EditModalModel : BookStorePageModel } ``` -Lastly, we can define the neccessary mapping configurations and run the application to see results. +Lastly, we can define the necessary mapping configurations and run the application to see the result. Open the `BookStoreWebAutoMapperProfile.cs` and update the content as below: @@ -538,7 +538,7 @@ public class BookStoreWebAutoMapperProfile : Profile } ``` -Then we can run the application, navigates to **/Books** endpoint and see the result. +Then we can run the application, navigates to the **/Books** endpoint and see the result. ![](concurrency-mismatch.gif) @@ -546,7 +546,4 @@ Then we can run the application, navigates to **/Books** endpoint and see the re * After the first user updated the record, the second user tries to update the same record without getting the last state of the record. And therefore `AbpDbConcurrencyException` is thrown because **ConcurrencyStamp** values are different from each other. -* The second user should close and re-open the model to get the last state of the record and then he/she can make changes to the current record. - - -Thanks for reading the article. \ No newline at end of file +* The second user should close and re-open the model to get the last state of the record and then he/she can make changes to the current record. \ No newline at end of file From 6f3ea6dd19a495b86520b74bdb6383032a91a998 Mon Sep 17 00:00:00 2001 From: Hamza Albreem <94292623+braim23@users.noreply.github.com> Date: Wed, 6 Apr 2022 12:46:26 +0300 Subject: [PATCH 133/272] Quick Grammar Fixes --- .../POST.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index 396da20f86..0cd9687374 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -18,7 +18,7 @@ We can create a new startup template by using the [ABP CLI](https://docs.abp.io/ abp new Acme.BookStore -t app -csf ``` -After running the above command, our project boilerplate will be downloaded. Then we can open the solution and start to the development. +After running the above command, our project boilerplate will be downloaded. Then we can open the solution and start the development. ## Starting the Development @@ -43,9 +43,9 @@ public class Book : AuditedAggregateRoot * To enable **Concurrency Check** for our entities, our entities should implement the `IHasConcurrencyStamp` interface, directly or indirectly. -* [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes we don't need to manually implement the `IHasConcurrencyStamp` interface. +* [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes then we won't need to manually implement the `IHasConcurrencyStamp` interface. -* And we've derived the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement the `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class is already implemented the `IHasConcurrencyStamp` interface. +* And we've derived the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement the `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class already implemented the `IHasConcurrencyStamp` interface. > You can read more details from the [Concurrency Check](https://docs.abp.io/en/abp/5.2/Concurrency-Check) documentation. @@ -119,7 +119,7 @@ To do this, open your command line terminal in the directory of the `EntityFrame dotnet ef migrations add Added_Books ``` -After this command, a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the lastly created migration. +After this command, a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the last created migration. ### Defining DTOs and Application Service Interfaces @@ -144,7 +144,7 @@ public class BookDto : AuditedEntityDto, IHasConcurrencyStamp } ``` -* `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for the **BookDto** class we need to implement the `IHasConcurrencyStamp`. +* The `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for the **BookDto** class we need to implement the `IHasConcurrencyStamp`. * This is important, because we need to return books with their **ConcurrencyStamp** value. @@ -198,7 +198,7 @@ public class UpdateBookDto : IHasConcurrencyStamp * If values are mismatched, then it means the record that we're trying to update is already updated by another user and we need to get the latest changes to be able to make changes on it. -* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it on behalf of use and shows a user-friendly error message as in the image below. +* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it on behalf of us and show a user-friendly error message as in the image below. ![](./optimistic-concurrency.png) @@ -210,7 +210,7 @@ public interface IBookAppService : { } ``` -* We've implemented the `ICrudAppService` here, because we just need to perform CRUD operations and this interface help us to define common CRUD operation methods. +* We've implemented the `ICrudAppService` here, because we just need to perform CRUD operations and this interface helps us define common CRUD operation methods. ### Application Service Implementations @@ -249,7 +249,7 @@ public class BookAppService : * We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating. We've used the `SetConcurrencyStampIfNotNull` extension method to set the **ConcurrencyStamp** value to our entity and update the record. -* At that point, if the given record is already updated by any other user, a **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown thanks to **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overridden. +* At that point, if the given record is already updated by any other user, a **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown thanks to the **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overridden. * And if the values are matched, the record will be updated successfully. @@ -268,7 +268,7 @@ public class BookStoreApplicationAutoMapperProfile : Profile ### User Interface -So far, we've applied the all necessary steps for the **Concurrency Check** system, let's see it in the action. +So far, we've applied the all necessary steps for the **Concurrency Check** system, let's see it in action. Create a razor page in the `.Web` layer named `Index` (**/Pages/Books/Index.cshtml**), open this file and replace the content with the following code block: @@ -396,7 +396,7 @@ $(function () { * Also defined **create** and **update** modals by using [ABP Modal Manager](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Modals#modalmanager-reference), but we didn't create them yet, so let's create the modals. -First, create **CreateModal** razor page and update the **CreateModal.cshtml** and **CreateModal.cshtml.cs** files as below: +First, create a **CreateModal** razor page and update the **CreateModal.cshtml** and **CreateModal.cshtml.cs** files as below: **CreateModal.cshtml** @@ -419,7 +419,7 @@ First, create **CreateModal** razor page and update the **CreateModal.cshtml** a ``` -* We've used `abp-dynamic-form` tag-helper and pass it a `Book` model, this tag helper will simply create form contents (inputs, select boxes etc.) behalf of us. +* We've used `abp-dynamic-form` tag-helper and passed it a `Book` model, this tag helper will simply create form contents (inputs, select boxes etc.) on behalf of us. * **CreateModal.cshtml.cs** @@ -455,9 +455,9 @@ public class CreateModalModel : BookStorePageModel } ``` -* In this file, we simply define **CreateBookDto** as a bind property and we'll use this classes' properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of these form elements one by one, it will generate behalf of us. +* In this file, we simply define **CreateBookDto** as a bind property and we'll use this class's properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of these form elements one by one, it will generate on behalf of us. -We can create **EditModal** razor page and update the **EditModal.cshtml** and **EditModal.cshtml.cs** files as below: +We can create an **EditModal** razor page and update the **EditModal.cshtml** and **EditModal.cshtml.cs** files as below: **EditModal.cshtml** @@ -485,9 +485,9 @@ We can create **EditModal** razor page and update the **EditModal.cshtml** and * ``` -* Here, we didn't use the `abp-dynamic-form` tag-helper and added all necessary form elements to our form one by one. +* Here, we didn't use the `abp-dynamic-form` tag-helper and added all the necessary form elements to our form one by one. -* As you may notice, we've set the input type as **hidden** for the **ConcurrencyStamp** input, because the end-user should not see this value. +* As you may have noticed, we've set the input type as **hidden** for the **ConcurrencyStamp** input, because the end-user should not see this value. > Instead of doing it like that, we could create a view model class and use the `[HiddenInput]` data attribute for the **ConcurrencyStamp** property and use the `abp-dynamic-form` tag-helper. But to simplify the article I didn't want to do that, if you want you can create a view model and define the necessary data attributes for properties. @@ -526,7 +526,7 @@ public class EditModalModel : BookStorePageModel Lastly, we can define the necessary mapping configurations and run the application to see the result. -Open the `BookStoreWebAutoMapperProfile.cs` and update the content as below: +Open the `BookStoreWebAutoMapperProfile.cs` class and update the content as below: ```csharp public class BookStoreWebAutoMapperProfile : Profile @@ -538,7 +538,7 @@ public class BookStoreWebAutoMapperProfile : Profile } ``` -Then we can run the application, navigates to the **/Books** endpoint and see the result. +Then we can run the application, navigate to the **/Books** endpoint and see the result. ![](concurrency-mismatch.gif) @@ -546,4 +546,4 @@ Then we can run the application, navigates to the **/Books** endpoint and see th * After the first user updated the record, the second user tries to update the same record without getting the last state of the record. And therefore `AbpDbConcurrencyException` is thrown because **ConcurrencyStamp** values are different from each other. -* The second user should close and re-open the model to get the last state of the record and then he/she can make changes to the current record. \ No newline at end of file +* The second user should close and re-open the model to get the last state of the record and then they can make changes to the current record. From 1b87d7e7e210f70b00f01c5f5b14457f8a519503 Mon Sep 17 00:00:00 2001 From: Eric Johnson Date: Wed, 6 Apr 2022 15:05:36 -0500 Subject: [PATCH 134/272] Fixed project file encoding to retain existing encoding. --- .../SolutionFileModifier.cs | 29 +++++-- .../VoloNugetPackagesVersionUpdater.cs | 83 +++++++++++++------ 2 files changed, 80 insertions(+), 32 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs index 08d8fa182d..b78ec017c2 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs @@ -12,11 +12,24 @@ public class SolutionFileModifier : ITransientDependency { public async Task RemoveProjectFromSolutionFileAsync(string solutionFile, string projectName) { - var solutionFileContent = File.ReadAllText(solutionFile); - solutionFileContent.NormalizeLineEndings(); - var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None); - File.WriteAllText(solutionFile, - RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine)); + using (var fs = File.Open(solutionFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var solutionFileContent = await sr.ReadToEndAsync(); + solutionFileContent.NormalizeLineEndings(); + + var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None); + var updatedContent = RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine); + + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); + + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + sw.Write(updatedContent); + sw.Flush(); + } + } } public async Task AddModuleToSolutionFileAsync(ModuleWithMastersInfo module, string solutionFile) @@ -64,7 +77,7 @@ public class SolutionFileModifier : ITransientDependency lines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"), newPreSolutionLine); - File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines)); + File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), Encoding.UTF8); } private List RemoveProject(List solutionFileLines, string projectName) @@ -174,7 +187,7 @@ public class SolutionFileModifier : ITransientDependency lines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"), newPreSolutionLine); } - File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines)); + File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), Encoding.UTF8); if (module.MasterModuleInfos != null) { @@ -219,7 +232,7 @@ public class SolutionFileModifier : ITransientDependency .Split(" ").Last(); } - File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines)); + File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), Encoding.UTF8); return folderId; } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs index 900930d472..4e94c983a9 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs @@ -9,6 +9,7 @@ using Volo.Abp.Cli.NuGet; using Volo.Abp.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using System.Text; namespace Volo.Abp.Cli.ProjectModification; @@ -41,17 +42,28 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency async Task UpdateAsync(string filePath) { - var fileContent = File.ReadAllText(filePath); - var updatedContent = await UpdateVoloPackagesAsync(fileContent, - includePreviews, - includeReleaseCandidates, - switchToStable, - latestVersionFromNuget, - latestReleaseCandidateVersionFromNuget, - latestVersionFromMyGet, - version); - - File.WriteAllText(filePath, updatedContent); + using (var fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var fileContent = await sr.ReadToEndAsync(); + + var updatedContent = await UpdateVoloPackagesAsync(fileContent, + includePreviews, + includeReleaseCandidates, + switchToStable, + latestVersionFromNuget, + latestReleaseCandidateVersionFromNuget, + latestVersionFromMyGet, + version); + + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + sw.Write(updatedContent); + sw.Flush(); + } + } } Task.WaitAll(projectPaths.Select(UpdateAsync).ToArray()); @@ -70,27 +82,50 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency var latestReleaseCandidateVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true); var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core"); - var fileContent = File.ReadAllText(projectPath); + using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var fileContent = await sr.ReadToEndAsync(); + + var updatedContent = await UpdateVoloPackagesAsync(fileContent, + includeNightlyPreviews, + includeReleaseCandidates, + switchToStable, + latestVersionFromNuget, + latestReleaseCandidateVersionFromNuget, + latestVersionFromMyGet, + version); - var updatedContent = await UpdateVoloPackagesAsync(fileContent, - includeNightlyPreviews, - includeReleaseCandidates, - switchToStable, - latestVersionFromNuget, - latestReleaseCandidateVersionFromNuget, - latestVersionFromMyGet, - version); + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); - File.WriteAllText(projectPath, updatedContent); + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + sw.Write(updatedContent); + sw.Flush(); + } + } } } protected virtual async Task UpdateInternalAsync(string projectPath, bool includeNightlyPreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false) { - var fileContent = File.ReadAllText(projectPath); - var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable); + using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var fileContent = await sr.ReadToEndAsync(); + + var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable); + + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); - File.WriteAllText(projectPath, updatedContent); + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + sw.Write(updatedContent); + sw.Flush(); + } + } } protected virtual async Task SpecifiedVersionExists(string version, string packageId) From 05ffa67d047197b6799c3dfe98022ae891da379b Mon Sep 17 00:00:00 2001 From: rqx110 Date: Thu, 7 Apr 2022 08:41:28 +0800 Subject: [PATCH 135/272] move RightAligned parameter to BarDropdown --- .../Themes/Basic/LanguageSwitch.razor | 4 ++-- .../Themes/Basic/LanguageSwitch.razor | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor index 75b64e05b7..afa3521d01 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor @@ -7,11 +7,11 @@ @inject IAbpRequestLocalizationOptionsProvider RequestLocalizationOptionsProvider @if (_otherLanguages != null && _otherLanguages.Any()) { - + @_currentLanguage.DisplayName - + @foreach (var language in _otherLanguages) { @language.DisplayName diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor index 6f89696075..4b41add531 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor @@ -5,11 +5,11 @@ @inject IJSRuntime JsRuntime @if (_otherLanguages != null && _otherLanguages.Any()) { - + @_currentLanguage.DisplayName - + @foreach (var language in _otherLanguages) { @language.DisplayName From 3610732a919f07778d6b0e65d810c1ff6c46db38 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 7 Apr 2022 21:00:47 +0800 Subject: [PATCH 136/272] Enhance ABP CLI --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 14 ++++++-------- .../Cli/Commands/ProjectCreationCommandBase.cs | 15 ++++++++++++--- .../Cli/ProjectModification/NpmPackagesUpdater.cs | 13 ++++++------- .../ProjectModification/ProjectNpmPackageAdder.cs | 12 ++++++------ 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index c244abd719..420e64eb18 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands.Services; +using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.ProjectModification; using Volo.Abp.Cli.Utils; @@ -21,22 +22,19 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien { public const string Name = "new"; - public ILogger Logger { get; set; } - protected TemplateProjectBuilder TemplateProjectBuilder { get; } public ITemplateInfoProvider TemplateInfoProvider { get; } - + public NewCommand(TemplateProjectBuilder templateProjectBuilder , ITemplateInfoProvider templateInfoProvider, ConnectionStringProvider connectionStringProvider, SolutionPackageVersionFinder solutionPackageVersionFinder, - ICmdHelper cmdHelper) - : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper) + ICmdHelper cmdHelper, + IInstallLibsService installLibsService) + : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, installLibsService) { TemplateProjectBuilder = templateProjectBuilder; TemplateInfoProvider = templateInfoProvider; - - Logger = NullLogger.Instance; } public async Task ExecuteAsync(CommandLineArgs commandLineArgs) @@ -79,7 +77,7 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien Logger.LogInformation($"'{projectName}' has been successfully created to '{projectArgs.OutputFolder}'"); RunGraphBuildForMicroserviceServiceTemplate(projectArgs); - RunInstallLibsForWebTemplate(projectArgs); + await RunInstallLibsForWebTemplateAsync(projectArgs); OpenRelatedWebPage(projectArgs, template, isTiered, commandLineArgs); } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index 860147c584..368f022bda 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Linq; +using System.Threading.Tasks; using ICSharpCode.SharpZipLib.Core; using ICSharpCode.SharpZipLib.Zip; using Microsoft.Extensions.Logging; @@ -8,6 +9,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.Cli.ProjectModification; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands.Services; +using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.ProjectBuilding.Building; using Volo.Abp.Cli.ProjectBuilding.Templates.App; @@ -22,13 +24,19 @@ public abstract class ProjectCreationCommandBase public ConnectionStringProvider ConnectionStringProvider { get; } public SolutionPackageVersionFinder SolutionPackageVersionFinder { get; } public ICmdHelper CmdHelper { get; } + public IInstallLibsService InstallLibsService { get; } public ILogger Logger { get; set; } - public ProjectCreationCommandBase(ConnectionStringProvider connectionStringProvider, SolutionPackageVersionFinder solutionPackageVersionFinder, ICmdHelper cmdHelper) + public ProjectCreationCommandBase( + ConnectionStringProvider connectionStringProvider, + SolutionPackageVersionFinder solutionPackageVersionFinder, + ICmdHelper cmdHelper, + IInstallLibsService installLibsService) { ConnectionStringProvider = connectionStringProvider; SolutionPackageVersionFinder = solutionPackageVersionFinder; CmdHelper = cmdHelper; + InstallLibsService = installLibsService; Logger = NullLogger.Instance; } @@ -313,14 +321,15 @@ public abstract class ProjectCreationCommandBase } } - protected virtual void RunInstallLibsForWebTemplate(ProjectBuildArgs projectArgs) + protected async Task RunInstallLibsForWebTemplateAsync(ProjectBuildArgs projectArgs) { if (AppTemplateBase.IsAppTemplate(projectArgs.TemplateName) || ModuleTemplateBase.IsModuleTemplate(projectArgs.TemplateName) || AppNoLayersTemplateBase.IsAppNoLayersTemplate(projectArgs.TemplateName) || MicroserviceServiceTemplateBase.IsMicroserviceTemplate(projectArgs.TemplateName)) { - CmdHelper.RunCmd("abp install-libs", projectArgs.OutputFolder); + Logger.LogInformation("Installing client-side packages..."); + await InstallLibsService.InstallLibsAsync(projectArgs.OutputFolder); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs index 2ade6dbd77..64517b1900 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs @@ -14,6 +14,7 @@ using NuGet.Versioning; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Http; +using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; using Volo.Abp.IO; @@ -25,7 +26,7 @@ public class NpmPackagesUpdater : ITransientDependency { public ILogger Logger { get; set; } protected ICancellationTokenProvider CancellationTokenProvider { get; } - public InstallLibsCommand InstallLibsCommand { get; } + public IInstallLibsService InstallLibsService { get; } public ICmdHelper CmdHelper { get; } private readonly PackageJsonFileFinder _packageJsonFileFinder; @@ -38,13 +39,13 @@ public class NpmPackagesUpdater : ITransientDependency NpmGlobalPackagesChecker npmGlobalPackagesChecker, ICancellationTokenProvider cancellationTokenProvider, CliHttpClientFactory cliHttpClientFactory, - InstallLibsCommand ınstallLibsCommand, + IInstallLibsService installLibsService, ICmdHelper cmdHelper) { _packageJsonFileFinder = packageJsonFileFinder; _npmGlobalPackagesChecker = npmGlobalPackagesChecker; CancellationTokenProvider = cancellationTokenProvider; - InstallLibsCommand = ınstallLibsCommand; + InstallLibsService = installLibsService; CmdHelper = cmdHelper; _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; @@ -306,10 +307,8 @@ public class NpmPackagesUpdater : ITransientDependency protected virtual async Task RunInstallLibsAsync(string fileDirectory) { - var args = new CommandLineArgs("install-libs"); - args.Options.Add(InstallLibsCommand.Options.WorkingDirectory.Short, fileDirectory); - - await InstallLibsCommand.ExecuteAsync(args); + Logger.LogInformation("Installing client-side packages..."); + await InstallLibsService.InstallLibsAsync(fileDirectory); } protected virtual void RunYarn(string fileDirectory) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs index 828b143192..36f33e1f6e 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs @@ -12,6 +12,7 @@ using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.Http; +using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; @@ -26,7 +27,7 @@ public class ProjectNpmPackageAdder : ITransientDependency public SourceCodeDownloadService SourceCodeDownloadService { get; } public AngularSourceCodeAdder AngularSourceCodeAdder { get; } public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } - public InstallLibsCommand InstallLibsCommand { get; } + public IInstallLibsService InstallLibsService { get; } public ICmdHelper CmdHelper { get; } private readonly CliHttpClientFactory _cliHttpClientFactory; public ILogger Logger { get; set; } @@ -36,14 +37,14 @@ public class ProjectNpmPackageAdder : ITransientDependency SourceCodeDownloadService sourceCodeDownloadService, AngularSourceCodeAdder angularSourceCodeAdder, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, - InstallLibsCommand ınstallLibsCommand, + IInstallLibsService installLibsService, ICmdHelper cmdHelper) { JsonSerializer = jsonSerializer; SourceCodeDownloadService = sourceCodeDownloadService; AngularSourceCodeAdder = angularSourceCodeAdder; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; - InstallLibsCommand = ınstallLibsCommand; + InstallLibsService = installLibsService; CmdHelper = cmdHelper; _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; @@ -142,9 +143,8 @@ public class ProjectNpmPackageAdder : ITransientDependency return; } - await InstallLibsCommand.ExecuteAsync( - new CommandLineArgs("install-libs") - ); + Logger.LogInformation("Installing client-side packages..."); + await InstallLibsService.InstallLibsAsync(directory); } } From 0bde8008d989857205c477f56fd679e897923289 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Fri, 8 Apr 2022 10:20:21 +0300 Subject: [PATCH 137/272] Add new localizations to base resource --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index f772006632..53d37df13d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -119,6 +119,8 @@ "Events": "Events", "Volo.AbpIo.Domain:080000": "There is already a purchase item named \"{Name}\"", "MasteringAbpFrameworkBook": "Book: Mastering ABP Framework", - "ABPIO-CommonPreferenceDefinition": "Get latest news about ABP Platform like new posts, events and more." + "ABPIO-CommonPreferenceDefinition": "Get latest news about ABP Platform like new posts, events and more.", + "BuiltOn": "Built-on", + "AbpFramework": "ABP Framework" } } From 4a1d542988452089c59b84192fc327435a7c5880 Mon Sep 17 00:00:00 2001 From: braim23 <94292623+braim23@users.noreply.github.com> Date: Fri, 8 Apr 2022 10:44:16 +0300 Subject: [PATCH 138/272] Added a small "the" before "latest news" --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 53d37df13d..5d6e081085 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -119,7 +119,7 @@ "Events": "Events", "Volo.AbpIo.Domain:080000": "There is already a purchase item named \"{Name}\"", "MasteringAbpFrameworkBook": "Book: Mastering ABP Framework", - "ABPIO-CommonPreferenceDefinition": "Get latest news about ABP Platform like new posts, events and more.", + "ABPIO-CommonPreferenceDefinition": "Get the latest news about ABP Platform like new posts, events and more.", "BuiltOn": "Built-on", "AbpFramework": "ABP Framework" } From c77ff1d0bfb2d6ebad00d496be1f504401ae1ce0 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 8 Apr 2022 17:07:49 +0800 Subject: [PATCH 139/272] Update generate-proxy UsageInfo --- .../Volo/Abp/Cli/Commands/ProxyCommandBase.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs index 2ce5ba8209..22311bb986 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs @@ -83,15 +83,18 @@ public abstract class ProxyCommandBase : IConsoleCommand, ITransientDependenc sb.AppendLine("Options:"); sb.AppendLine(""); sb.AppendLine("-m|--module (default: 'app') The name of the backend module you wish to generate proxies for."); - sb.AppendLine("-t|--type The name of generate type (csharp, js, ng)."); sb.AppendLine("-wd|--working-directory Execution directory."); sb.AppendLine("-u|--url API definition URL from."); - sb.AppendLine("-a|--api-name (default: 'default') The name of the API endpoint defined in the /src/environments/environment.ts."); - sb.AppendLine("-s|--source (default: 'defaultProject') Angular project name to resolve the root namespace & API definition URL from."); - sb.AppendLine("-o|--output JavaScript file path or folder to place generated code in."); - sb.AppendLine("-p|--prompt Asks the options from the command line prompt (for the missing options)"); - sb.AppendLine("--target (default: 'defaultProject') Angular project name to place generated code in."); - sb.AppendLine("--folder (default: 'ClientProxies') Folder name to place generated CSharp code in."); + sb.AppendLine("-t|--type The name of generate type (csharp, js, ng)."); + sb.AppendLine(" csharp"); + sb.AppendLine(" --folder (default: 'ClientProxies') Folder name to place generated CSharp code in."); + sb.AppendLine(" js"); + sb.AppendLine(" -o|--output JavaScript file path or folder to place generated code in."); + sb.AppendLine(" ng"); + sb.AppendLine(" -a|--api-name (default: 'default') The name of the API endpoint defined in the /src/environments/environment.ts."); + sb.AppendLine(" -s|--source (default: 'defaultProject') Angular project name to resolve the root namespace & API definition URL from."); + sb.AppendLine(" -p|--prompt Asks the options from the command line prompt (for the missing options)"); + sb.AppendLine(" --target (default: 'defaultProject') Angular project name to place generated code in."); sb.AppendLine(""); sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI"); From c4d5d5305706c6c2534cc671f35835d172b4ac5e Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 8 Apr 2022 22:51:41 +0800 Subject: [PATCH 140/272] Set `ContentLength` of `HttpContext.Response` --- .../ContentFormatters/RemoteStreamContentOutputFormatter.cs | 3 ++- .../RemoteStreamContentTestController_Tests.cs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs index f62b16b19b..5c5e7ed6c0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs @@ -18,13 +18,14 @@ public class RemoteStreamContentOutputFormatter : OutputFormatter return typeof(IRemoteStreamContent).IsAssignableFrom(type); } - public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context) + public async override Task WriteResponseBodyAsync(OutputFormatterWriteContext context) { var remoteStream = (IRemoteStreamContent)context.Object; if (remoteStream != null) { context.HttpContext.Response.ContentType = remoteStream.ContentType; + context.HttpContext.Response.ContentLength = remoteStream.ContentLength; if (!remoteStream.FileName.IsNullOrWhiteSpace()) { diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs index a56c8ef8ad..1a60ab9d6b 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs @@ -16,6 +16,7 @@ public class RemoteStreamContentTestController_Tests : AspNetCoreMvcTestBase var result = await GetResponseAsync("/api/remote-stream-content-test/download"); result.Content.Headers.ContentType?.ToString().ShouldBe("application/rtf"); result.Content.Headers.ContentDisposition?.FileName.ShouldBe("download.rtf"); + result.Content.Headers.ContentLength.ShouldBe("DownloadAsync".Length); (await result.Content.ReadAsStringAsync()).ShouldBe("DownloadAsync"); } From b3bd998465f3c591364397cf45c0309962ac3562 Mon Sep 17 00:00:00 2001 From: albert <9526587+ebicoglu@users.noreply.github.com> Date: Fri, 8 Apr 2022 18:17:41 +0300 Subject: [PATCH 141/272] Update POST.md --- .../POST.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index 0cd9687374..103329d1f3 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -1,10 +1,10 @@ -# Concurrency Check in ABP Based Applications +# Concurrency Check in ABP Projects -In this article, we'll create a basic application to demonstrate how "Concurrency Check/Control" can be done in an ABP based application. +In this article, we'll create a basic application to demonstrate how "Concurrency Check/Control" can be implemented in an ABP project. ## Creating the Solution -For this article, we can create a simple BookStore application and perform CRUD operations. +For this article, we will create a simple BookStore application and add CRUD functionality to the pages. Hence we deal with the concurrency situation. > To keep the article simple and short, we'll only add the **Book** entity and ignore the **Author** part. @@ -41,7 +41,7 @@ public class Book : AuditedAggregateRoot } ``` -* To enable **Concurrency Check** for our entities, our entities should implement the `IHasConcurrencyStamp` interface, directly or indirectly. +* To enable **Concurrency Check** for our entities, our entities should be implemented the `IHasConcurrencyStamp` interface, directly or indirectly. * [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes then we won't need to manually implement the `IHasConcurrencyStamp` interface. From 6bb69d99fb12510f96715f78649da102e322c041 Mon Sep 17 00:00:00 2001 From: albert <9526587+ebicoglu@users.noreply.github.com> Date: Fri, 8 Apr 2022 18:23:00 +0300 Subject: [PATCH 142/272] Update POST.md --- .../POST.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index 103329d1f3..cabe9cf872 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -1,4 +1,4 @@ -# Concurrency Check in ABP Projects +# Handle Concurrency with EF Core in an ABP Framework Project with ASP.NET Core MVC In this article, we'll create a basic application to demonstrate how "Concurrency Check/Control" can be implemented in an ABP project. From ef5906397c39c4384bddf0f40bc5992ba238ed6f Mon Sep 17 00:00:00 2001 From: Roc Date: Mon, 11 Apr 2022 12:11:14 +0800 Subject: [PATCH 143/272] Update CommandLineArgumentParser.cs --- .../Volo/Abp/Cli/Args/CommandLineArgumentParser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs index ea8541cbb9..1b060a8dbc 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs @@ -98,7 +98,7 @@ public class CommandLineArgumentParser : ICommandLineArgumentParser, ITransientD { if (argument.Length <= 1) { - throw new ArgumentException("Should specify an option name after '--' prefix!"); + throw new ArgumentException("Should specify an option name after '-' prefix!"); } return argument.RemovePreFix("-"); From 02404b1ece873d3ccdd4375c13b18363b99907de Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 11 Apr 2022 13:38:57 +0300 Subject: [PATCH 144/272] Update POST.md --- .../POST.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index cabe9cf872..b16d6bd9f1 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -6,8 +6,6 @@ In this article, we'll create a basic application to demonstrate how "Concurrenc For this article, we will create a simple BookStore application and add CRUD functionality to the pages. Hence we deal with the concurrency situation. -> To keep the article simple and short, we'll only add the **Book** entity and ignore the **Author** part. - We can create a new startup template with EF Core as a database provider and MVC for the UI Framework. > If you already have a project, you don't need to create a new startup template, you can directly implement the following steps to your project. So you can skip this section. @@ -15,7 +13,7 @@ We can create a new startup template with EF Core as a database provider and MVC We can create a new startup template by using the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI). ```bash -abp new Acme.BookStore -t app -csf +abp new Acme.BookStore ``` After running the above command, our project boilerplate will be downloaded. Then we can open the solution and start the development. @@ -235,7 +233,8 @@ public class BookAppService : book.Type = input.Type; book.PublishDate = input.PublishDate; - book.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); + //set Concurrency Stamp value to the entity + book.ConcurrencyStamp = input.ConcurrencyStamp; var updatedBook = await Repository.UpdateAsync(book); return ObjectMapper.Map(updatedBook); @@ -245,9 +244,9 @@ public class BookAppService : * We've used the `CrudAppService` base class. This class implements all common CRUD operations and if we want to change a method, we can simply override the method and change it to our needs. -> Normally, you don't need to override the `UpdateAsync` method to do **Concurrency Check**. I wanted to override this method to show what we need to do for **Concurrency Check**. +> Normally, you don't need to override the `UpdateAsync` method to do **Concurrency Check**. Because the `UpdateAsync` method of the `CrudAppService` class by default map input values to the entity. But I wanted to override this method to show what we need to do for **Concurrency Check**. -* We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating. We've used the `SetConcurrencyStampIfNotNull` extension method to set the **ConcurrencyStamp** value to our entity and update the record. +* We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating. * At that point, if the given record is already updated by any other user, a **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown thanks to the **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overridden. From 6d3b06ba27ccf0197cc2c04944df15f19ab81ab4 Mon Sep 17 00:00:00 2001 From: braim23 <94292623+braim23@users.noreply.github.com> Date: Mon, 11 Apr 2022 15:29:15 +0300 Subject: [PATCH 145/272] related with the "Fix test result" issue --- .../src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml index 66d2bf89c9..8329c993cd 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml @@ -79,7 +79,7 @@ @L["WiewsWithCount", @Model.Post.ReadCount] | - @L["CommentWithCount", @Model.CommentCount] + @L["CommentWithCount", @Model.CommentCount] @if (await Authorization.IsGrantedAsync(BloggingPermissions.Posts.Update)) @@ -162,7 +162,7 @@ -

    +
    @foreach (var commentWithRepliesDto in Model.CommentsWithReplies) {
    From c38ce7ed62aca66e5a8041d1631b8d8c69bfb160 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Mon, 11 Apr 2022 15:31:32 +0300 Subject: [PATCH 146/272] Enhancements --- .../SolutionFileModifier.cs | 36 +++---- .../VoloNugetPackagesVersionUpdater.cs | 93 ++++++++++--------- 2 files changed, 70 insertions(+), 59 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs index b78ec017c2..45e0684b4a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs @@ -10,24 +10,28 @@ namespace Volo.Abp.Cli.ProjectModification; public class SolutionFileModifier : ITransientDependency { + public static Encoding DefaultEncoding = Encoding.UTF8; + public async Task RemoveProjectFromSolutionFileAsync(string solutionFile, string projectName) { - using (var fs = File.Open(solutionFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) - using (var sr = new StreamReader(fs, Encoding.Default, true)) + using (var fileStream = File.Open(solutionFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) { - var solutionFileContent = await sr.ReadToEndAsync(); - solutionFileContent.NormalizeLineEndings(); + using (var sr = new StreamReader(fileStream, Encoding.Default, true)) + { + var solutionFileContent = await sr.ReadToEndAsync(); + solutionFileContent.NormalizeLineEndings(); - var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None); - var updatedContent = RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine); + var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None); + var updatedContent = RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine); - fs.Seek(0, SeekOrigin.Begin); - fs.SetLength(0); + fileStream.Seek(0, SeekOrigin.Begin); + fileStream.SetLength(0); - using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) - { - sw.Write(updatedContent); - sw.Flush(); + using (var sw = new StreamWriter(fileStream, DefaultEncoding)) + { + await sw.WriteAsync(updatedContent); + await sw.FlushAsync(); + } } } } @@ -46,8 +50,8 @@ public class SolutionFileModifier : ITransientDependency { var srcFolderId = await AddNewFolderAndGetIdOrGetExistingIdAsync(solutionFile, "src"); - var file = File.ReadAllText(solutionFile); - var lines = file.Split(Environment.NewLine).ToList(); + var solutionFileContent = File.ReadAllText(solutionFile); + var lines = solutionFileContent.Split(Environment.NewLine).ToList(); if (lines.Any(l => l.Contains($"\"{package.Name}\""))) { @@ -77,7 +81,7 @@ public class SolutionFileModifier : ITransientDependency lines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"), newPreSolutionLine); - File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), Encoding.UTF8); + File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), DefaultEncoding); } private List RemoveProject(List solutionFileLines, string projectName) @@ -150,7 +154,7 @@ public class SolutionFileModifier : ITransientDependency Path.Combine(Path.GetDirectoryName(solutionFile), "modules", module.Name, "test"), "*.csproj", SearchOption.AllDirectories).ToList(); - } + } foreach (var projectPath in projectsUnderModule) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs index 4e94c983a9..98ad57f4b4 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs @@ -18,6 +18,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency private readonly NuGetService _nuGetService; private readonly MyGetPackageListFinder _myGetPackageListFinder; public ILogger Logger { get; set; } + public static Encoding DefaultEncoding = Encoding.UTF8; public VoloNugetPackagesVersionUpdater(NuGetService nuGetService, MyGetPackageListFinder myGetPackageListFinder) { @@ -43,25 +44,27 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency async Task UpdateAsync(string filePath) { using (var fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) - using (var sr = new StreamReader(fs, Encoding.Default, true)) { - var fileContent = await sr.ReadToEndAsync(); - - var updatedContent = await UpdateVoloPackagesAsync(fileContent, - includePreviews, - includeReleaseCandidates, - switchToStable, - latestVersionFromNuget, - latestReleaseCandidateVersionFromNuget, - latestVersionFromMyGet, - version); - - fs.Seek(0, SeekOrigin.Begin); - fs.SetLength(0); - using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + using (var sr = new StreamReader(fs, Encoding.Default, true)) { - sw.Write(updatedContent); - sw.Flush(); + var fileContent = await sr.ReadToEndAsync(); + + var updatedContent = await UpdateVoloPackagesAsync(fileContent, + includePreviews, + includeReleaseCandidates, + switchToStable, + latestVersionFromNuget, + latestReleaseCandidateVersionFromNuget, + latestVersionFromMyGet, + version); + + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); + using (var sw = new StreamWriter(fs, DefaultEncoding)) + { + await sw.WriteAsync(updatedContent); + await sw.FlushAsync(); + } } } } @@ -83,26 +86,28 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core"); using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) - using (var sr = new StreamReader(fs, Encoding.Default, true)) { - var fileContent = await sr.ReadToEndAsync(); + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var fileContent = await sr.ReadToEndAsync(); - var updatedContent = await UpdateVoloPackagesAsync(fileContent, - includeNightlyPreviews, - includeReleaseCandidates, - switchToStable, - latestVersionFromNuget, - latestReleaseCandidateVersionFromNuget, - latestVersionFromMyGet, - version); + var updatedContent = await UpdateVoloPackagesAsync(fileContent, + includeNightlyPreviews, + includeReleaseCandidates, + switchToStable, + latestVersionFromNuget, + latestReleaseCandidateVersionFromNuget, + latestVersionFromMyGet, + version); - fs.Seek(0, SeekOrigin.Begin); - fs.SetLength(0); + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); - using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) - { - sw.Write(updatedContent); - sw.Flush(); + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + await sw.WriteAsync(updatedContent); + await sw.FlushAsync(); + } } } } @@ -111,19 +116,21 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency protected virtual async Task UpdateInternalAsync(string projectPath, bool includeNightlyPreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false) { using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) - using (var sr = new StreamReader(fs, Encoding.Default, true)) { - var fileContent = await sr.ReadToEndAsync(); + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var fileContent = await sr.ReadToEndAsync(); - var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable); + var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable); - fs.Seek(0, SeekOrigin.Begin); - fs.SetLength(0); + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); - using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) - { - sw.Write(updatedContent); - sw.Flush(); + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + await sw.WriteAsync(updatedContent); + await sw.FlushAsync(); + } } } } @@ -245,7 +252,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency } catch (Exception ex) { - Logger.LogError("Cannot update Volo.* packages! An error occured while updating the package \"{0}\". Error: {1}", packageId, ex.Message); + Logger.LogError("Cannot update Volo.* packages! An error occurred while updating the package \"{0}\". Error: {1}", packageId, ex.Message); Logger.LogException(ex); } From 8eaaf6b0455504ff5daef4ca6b671a425e898780 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 12 Apr 2022 10:57:57 +0300 Subject: [PATCH 147/272] Cli: Allow to generate code with Suite resolves https://github.com/volosoft/volo/issues/9596 --- .../Volo/Abp/Cli/Commands/SuiteCommand.cs | 198 +++++++++++++++++- .../Volo/Abp/Cli/Utils/CmdHelper.cs | 16 ++ .../Volo/Abp/Cli/Utils/ICmdHelper.cs | 6 +- 3 files changed, 212 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs index 0e797e682f..ad791d05b9 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs @@ -1,33 +1,51 @@ using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.NetworkInformation; using System.Text; +using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Newtonsoft.Json.Linq; using NuGet.Versioning; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands.Services; +using Volo.Abp.Cli.Http; using Volo.Abp.Cli.NuGet; using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; +using Volo.Abp.Http; +using Volo.Abp.Json; +using Volo.Abp.Threading; namespace Volo.Abp.Cli.Commands; public class SuiteCommand : IConsoleCommand, ITransientDependency { public const string Name = "suite"; - + public ICmdHelper CmdHelper { get; } private readonly AbpNuGetIndexUrlService _nuGetIndexUrlService; private readonly NuGetService _nuGetService; + private readonly CliHttpClientFactory _cliHttpClientFactory; private const string SuitePackageName = "Volo.Abp.Suite"; public ILogger Logger { get; set; } - public SuiteCommand(AbpNuGetIndexUrlService nuGetIndexUrlService, NuGetService nuGetService, ICmdHelper cmdHelper) + public SuiteCommand( + AbpNuGetIndexUrlService nuGetIndexUrlService, + NuGetService nuGetService, + ICmdHelper cmdHelper, + CliHttpClientFactory cliHttpClientFactory) { CmdHelper = cmdHelper; _nuGetIndexUrlService = nuGetIndexUrlService; _nuGetService = nuGetService; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -48,6 +66,13 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency RunSuite(); break; + case "generate": + await InstallSuiteIfNotInstalledAsync(); + var suiteProcess = RunSuiteTemporary(); + await GenerateCrudOnSuiteAsync(commandLineArgs); + suiteProcess?.Kill(); + break; + case "install": await InstallSuiteAsync(version, preview); break; @@ -63,6 +88,115 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency } } + private async Task GenerateCrudOnSuiteAsync(CommandLineArgs args) + { + var entityFile = args.Options.GetOrNull(Options.Crud.Entity.Short, Options.Crud.Entity.Long); + var solutionFile = args.Options.GetOrNull(Options.Crud.Solution.Short, Options.Crud.Solution.Long); + + if (entityFile.IsNullOrEmpty() || !entityFile.EndsWith(".json") || !File.Exists(entityFile) || + solutionFile.IsNullOrEmpty() || !solutionFile.EndsWith(".sln")) + { + throw new UserFriendlyException("Invalid Arguments!"); + } + + Logger.LogInformation("Generating CRUD Page..."); + + var client = _cliHttpClientFactory.CreateClient(false); + var solutionId = await GetSolutionIdAsync(client, solutionFile); + + if (!solutionId.HasValue) + { + return; + } + + var entityContent = new StringContent( + File.ReadAllText(entityFile), + Encoding.UTF8, + MimeTypes.Application.Json + ); + + var responseMessage = await client.PostAsync( + $"http://localhost:3000/api/abpSuite/crudPageGenerator/{solutionId.ToString()}/save-and-generate-entity", + entityContent + ); + + var response = await responseMessage.Content.ReadAsStringAsync(); + + if (!response.IsNullOrWhiteSpace()) + { + Logger.LogError(response); + } + else + { + Logger.LogInformation("CRUD page generated."); + } + } + + private async Task GetSolutionIdAsync(HttpClient client, string solutionPath) + { + var timeIntervals = new List(); + for (var i = 0; i < 10; i++) + { + timeIntervals.Add(TimeSpan.FromSeconds(5)); + } + + var responseMessage = await client.GetHttpResponseMessageWithRetryAsync( + "http://localhost:3000/api/abpSuite/solutions", + _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10)), + Logger, + timeIntervals.ToArray()); + + var response = await responseMessage.Content.ReadAsStringAsync(); + JArray solutions; + + try + { + solutions = (JArray)(JObject.Parse(response)["solutions"]); + } + catch (Exception) + { + Logger.LogError(response); + return await AddSolutionToSuiteAsync(client, solutionPath); + } + + foreach (JObject solution in solutions) + { + if (solution["path"].ToString() == solutionPath) + { + return Guid.Parse(solution["id"].ToString()); + } + } + + return await AddSolutionToSuiteAsync(client, solutionPath); + } + + private async Task AddSolutionToSuiteAsync(HttpClient client, string solutionPath) + { + var entityContent = new StringContent( + "{\"Path\": \"" + solutionPath.Replace("\\", "\\\\") + "\"}", + Encoding.UTF8, + MimeTypes.Application.Json + ); + + var responseMessage = await client.PostAsync( + "http://localhost:3000/api/abpSuite/addSolution", + entityContent, + _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10)) + ); + + var response = await responseMessage.Content.ReadAsStringAsync(); + + try + { + return Guid.Parse(JObject.Parse(response)["id"].ToString()); + } + catch (Exception) + { + Logger.LogError(response); + return null; + } + } + private async Task InstallSuiteIfNotInstalledAsync() { var currentSuiteVersionAsString = GetCurrentSuiteVersion(); @@ -132,7 +266,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency } CmdHelper.RunCmd( - $"dotnet tool install {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g", out int exitCode + $"dotnet tool install {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g", + out int exitCode ); if (exitCode == 0) @@ -155,7 +290,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency private void ShowSuiteManualInstallCommand() { Logger.LogInformation("You can also run the following command to install ABP Suite."); - Logger.LogInformation("dotnet tool install -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json"); + Logger.LogInformation( + "dotnet tool install -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json"); } private async Task UpdateSuiteAsync(string version = null, bool preview = false) @@ -202,7 +338,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency } CmdHelper.RunCmd( - $"dotnet tool update {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g", out int exitCode + $"dotnet tool update {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g", + out int exitCode ); if (exitCode != 0) @@ -231,7 +368,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency private void ShowSuiteManualUpdateCommand() { Logger.LogError("You can also run the following command to update ABP Suite."); - Logger.LogError("dotnet tool update -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json"); + Logger.LogError( + "dotnet tool update -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json"); } private void RemoveSuite() @@ -258,6 +396,37 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency CmdHelper.RunCmd("abp-suite"); } + private Process RunSuiteTemporary() + { + try + { + if (!GlobalToolHelper.IsGlobalToolInstalled("abp-suite")) + { + Logger.LogWarning( + "ABP Suite is not installed! To install it you can run the command: \"abp suite install\""); + return null; + } + } + catch (Exception ex) + { + Logger.LogWarning("Couldn't check ABP Suite installed status: " + ex.Message); + } + + if (IsSuiteAlreadyRunning()) + { + return null; + } + + return CmdHelper.RunCmdAndGetProcess("abp-suite --no-browser"); + } + + bool IsSuiteAlreadyRunning() + { + var ipGP = IPGlobalProperties.GetIPGlobalProperties(); + var endpoints = ipGP.GetActiveTcpListeners(); + return endpoints.Any(e => e.Port == 3000); + } + public string GetUsageInfo() { var sb = new StringBuilder(); @@ -306,5 +475,20 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency public const string Long = "version"; public const string Short = "v"; } + + public static class Crud + { + public static class Solution + { + public const string Long = "solution"; + public const string Short = "s"; + } + + public static class Entity + { + public const string Long = "entity"; + public const string Short = "e"; + } + } } -} +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs index 483d047e86..741390dc73 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs @@ -58,6 +58,22 @@ public class CmdHelper : ICmdHelper, ITransientDependency } } + public Process RunCmdAndGetProcess(string command, string workingDirectory = null) + { + var procStartInfo = new ProcessStartInfo( + GetFileName(), + GetArguments(command) + ); + + if (!string.IsNullOrEmpty(workingDirectory)) + { + procStartInfo.WorkingDirectory = workingDirectory; + procStartInfo.CreateNoWindow = false; + } + + return Process.Start(procStartInfo); + } + public string RunCmdAndGetOutput(string command, string workingDirectory = null) { return RunCmdAndGetOutput(command, out int _, workingDirectory); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs index 984b705d33..648215d24f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs @@ -1,4 +1,6 @@ -namespace Volo.Abp.Cli.Utils; +using System.Diagnostics; + +namespace Volo.Abp.Cli.Utils; public interface ICmdHelper { @@ -12,6 +14,8 @@ public interface ICmdHelper void RunCmd(string command, string workingDirectory = null); + Process RunCmdAndGetProcess(string command, string workingDirectory = null); + void RunCmd(string command, out int exitCode, string workingDirectory = null); string RunCmdAndGetOutput(string command, string workingDirectory = null); From 4135675eaa351b0a675a72b9db69df1f28940cc6 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 12 Apr 2022 10:59:44 +0300 Subject: [PATCH 148/272] Update SuiteCommand.cs --- .../src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs index ad791d05b9..b8aa608361 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs @@ -420,7 +420,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency return CmdHelper.RunCmdAndGetProcess("abp-suite --no-browser"); } - bool IsSuiteAlreadyRunning() + private bool IsSuiteAlreadyRunning() { var ipGP = IPGlobalProperties.GetIPGlobalProperties(); var endpoints = ipGP.GetActiveTcpListeners(); From 46d5f9ebd815e0f1ab5d8365d168398f2553db94 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Tue, 12 Apr 2022 16:35:12 +0300 Subject: [PATCH 149/272] blogging: Revert 6d3b06ba27 --- .../src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml index 8329c993cd..66d2bf89c9 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml @@ -79,7 +79,7 @@ @L["WiewsWithCount", @Model.Post.ReadCount] | - @L["CommentWithCount", @Model.CommentCount] + @L["CommentWithCount", @Model.CommentCount] @if (await Authorization.IsGrantedAsync(BloggingPermissions.Posts.Update)) @@ -162,7 +162,7 @@ -
    +
    @foreach (var commentWithRepliesDto in Model.CommentsWithReplies) {
    From e66e5a824702779521ff4ebb97825a23cc48476a Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Tue, 12 Apr 2022 18:08:45 +0300 Subject: [PATCH 150/272] Update Page-Toolbar-Extensions.md --- docs/en/UI/Angular/Page-Toolbar-Extensions.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/en/UI/Angular/Page-Toolbar-Extensions.md b/docs/en/UI/Angular/Page-Toolbar-Extensions.md index 7e63950224..1edc9594fb 100644 --- a/docs/en/UI/Angular/Page-Toolbar-Extensions.md +++ b/docs/en/UI/Angular/Page-Toolbar-Extensions.md @@ -21,9 +21,9 @@ The following code prepares a constant named `identityToolbarActionContributors` import { eIdentityComponents, - IdentityToolbarActionContributors, - IdentityUserDto, + IdentityToolbarActionContributors } from '@abp/ng.identity'; +import { IdentityUserDto } from '@abp/ng.identity/proxy'; import { ToolbarAction, ToolbarActionList } from '@abp/ng.theme.shared/extensions'; const logUserNames = new ToolbarAction({ @@ -93,7 +93,7 @@ We need to have a component before we can pass it to the toolbar action contribu ```js // src/app/click-me-button.component.ts -import { IdentityUserDto } from '@abp/ng.identity'; +import { IdentityUserDto } from '@abp/ng.identity/proxy'; import { ActionData, EXTENSIONS_ACTION_DATA } from '@abp/ng.theme.shared/extensions'; import { Component, Inject } from '@angular/core'; @@ -127,9 +127,9 @@ The following code prepares a constant named `identityToolbarActionContributors` import { eIdentityComponents, - IdentityToolbarActionContributors, - IdentityUserDto, + IdentityToolbarActionContributors } from '@abp/ng.identity'; +import { IdentityUserDto } from '@abp/ng.identity/proxy'; import { ToolbarActionList, ToolbarComponent } from '@abp/ng.theme.shared/extensions'; import { ClickMeButtonComponent } from './click-me-button.component'; @@ -362,7 +362,7 @@ export function reorderUserContributors( ) { // drop "New User" button const newUserActionNode = actionList.dropByValue( - 'AbpIdentity::NewUser', + 'AbpIdentity::NewUser', (action, text) => action['text'] === text, ); From e3c4c5ebe2cd87cbca5c8f6b7d2eef3d8ad9a5b9 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Wed, 13 Apr 2022 02:24:59 +0300 Subject: [PATCH 151/272] Close Suite after code generation #12231 --- .../Volo/Abp/Cli/Commands/SuiteCommand.cs | 52 ++++++++++++++----- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs index b8aa608361..aabd5c6dfd 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs @@ -36,6 +36,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency private const string SuitePackageName = "Volo.Abp.Suite"; public ILogger Logger { get; set; } + private const string AbpSuiteHost = "http://localhost:3000"; + public SuiteCommand( AbpNuGetIndexUrlService nuGetIndexUrlService, NuGetService nuGetService, @@ -68,9 +70,14 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency case "generate": await InstallSuiteIfNotInstalledAsync(); - var suiteProcess = RunSuiteTemporary(); - await GenerateCrudOnSuiteAsync(commandLineArgs); - suiteProcess?.Kill(); + var suiteProcess = StartSuite(); + System.Threading.Thread.Sleep(500); //wait for initialization of the app + await GenerateCrudPageAsync(commandLineArgs); + if (suiteProcess != null) + { + KillSuite(); + } + break; case "install": @@ -88,7 +95,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency } } - private async Task GenerateCrudOnSuiteAsync(CommandLineArgs args) + private async Task GenerateCrudPageAsync(CommandLineArgs args) { var entityFile = args.Options.GetOrNull(Options.Crud.Entity.Short, Options.Crud.Entity.Long); var solutionFile = args.Options.GetOrNull(Options.Crud.Solution.Short, Options.Crud.Solution.Long); @@ -98,7 +105,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency { throw new UserFriendlyException("Invalid Arguments!"); } - + Logger.LogInformation("Generating CRUD Page..."); var client = _cliHttpClientFactory.CreateClient(false); @@ -108,7 +115,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency { return; } - + var entityContent = new StringContent( File.ReadAllText(entityFile), Encoding.UTF8, @@ -116,7 +123,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency ); var responseMessage = await client.PostAsync( - $"http://localhost:3000/api/abpSuite/crudPageGenerator/{solutionId.ToString()}/save-and-generate-entity", + $"{AbpSuiteHost}/api/abpSuite/crudPageGenerator/{solutionId.ToString()}/save-and-generate-entity", entityContent ); @@ -128,7 +135,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency } else { - Logger.LogInformation("CRUD page generated."); + Logger.LogInformation("CRUD page generation successfully completed."); } } @@ -148,7 +155,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency var response = await responseMessage.Content.ReadAsStringAsync(); JArray solutions; - + try { solutions = (JArray)(JObject.Parse(response)["solutions"]); @@ -185,7 +192,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency ); var response = await responseMessage.Content.ReadAsStringAsync(); - + try { return Guid.Parse(JObject.Parse(response)["id"].ToString()); @@ -396,14 +403,13 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency CmdHelper.RunCmd("abp-suite"); } - private Process RunSuiteTemporary() + private Process StartSuite() { try { if (!GlobalToolHelper.IsGlobalToolInstalled("abp-suite")) { - Logger.LogWarning( - "ABP Suite is not installed! To install it you can run the command: \"abp suite install\""); + Logger.LogWarning("ABP Suite is not installed! To install it you can run the command: \"abp suite install\""); return null; } } @@ -427,6 +433,26 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency return endpoints.Any(e => e.Port == 3000); } + private void KillSuite() + { + try + { + var suiteProcesses = (from p in Process.GetProcesses() + where p.ProcessName.ToLower().Contains("abp-suite") + select p); + + foreach (var suiteProcess in suiteProcesses) + { + suiteProcess.Kill(); + Logger.LogInformation("Suite closed."); + } + } + catch (Exception ex) + { + Logger.LogInformation("Cannot close Suite." + ex.Message); + } + } + public string GetUsageInfo() { var sb = new StringBuilder(); From 67247e05e0e83f81b5bc2c2b49a6ead6523ad460 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 13 Apr 2022 09:25:27 +0800 Subject: [PATCH 152/272] Make methods of AuditPropertySetter virtual --- .../Volo/Abp/Auditing/AuditPropertySetter.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs index 91b5019199..d85bad82eb 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs @@ -21,25 +21,25 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency Clock = clock; } - public void SetCreationProperties(object targetObject) + public virtual void SetCreationProperties(object targetObject) { SetCreationTime(targetObject); SetCreatorId(targetObject); } - public void SetModificationProperties(object targetObject) + public virtual void SetModificationProperties(object targetObject) { SetLastModificationTime(targetObject); SetLastModifierId(targetObject); } - public void SetDeletionProperties(object targetObject) + public virtual void SetDeletionProperties(object targetObject) { SetDeletionTime(targetObject); SetDeleterId(targetObject); } - private void SetCreationTime(object targetObject) + protected virtual void SetCreationTime(object targetObject) { if (!(targetObject is IHasCreationTime objectWithCreationTime)) { @@ -52,7 +52,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency } } - private void SetCreatorId(object targetObject) + protected virtual void SetCreatorId(object targetObject) { if (!CurrentUser.Id.HasValue) { @@ -95,7 +95,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency } } - private void SetLastModificationTime(object targetObject) + protected virtual void SetLastModificationTime(object targetObject) { if (targetObject is IHasModificationTime objectWithModificationTime) { @@ -103,7 +103,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency } } - private void SetLastModifierId(object targetObject) + protected virtual void SetLastModifierId(object targetObject) { if (!(targetObject is IModificationAuditedObject modificationAuditedObject)) { @@ -137,7 +137,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency modificationAuditedObject.LastModifierId = CurrentUser.Id; } - private void SetDeletionTime(object targetObject) + protected virtual void SetDeletionTime(object targetObject) { if (targetObject is IHasDeletionTime objectWithDeletionTime) { @@ -148,7 +148,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency } } - private void SetDeleterId(object targetObject) + protected virtual void SetDeleterId(object targetObject) { if (!(targetObject is IDeletionAuditedObject deletionAuditedObject)) { From 187732612a61687ae32f8a16063c240d47243936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 14 Apr 2022 11:36:04 +0300 Subject: [PATCH 153/272] Update POST.md --- .../2022-04-14-Dependency-Injection/POST.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md b/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md index edd74c1591..092fb72dbc 100644 --- a/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md +++ b/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md @@ -18,15 +18,15 @@ public class ElasticsearchExternalLogger : IExternalLogger { public async Task LogAsync(string logText) { - //TODO... + // TODO... } } public class AzureExternalLogger : IExternalLogger { - public Task LogAsync(string logText) + public async Task LogAsync(string logText) { - throw new System.NotImplementedException(); + // TODO... } } ```` From ea7478e82572f0ab2bcaedda40da1fcd2349c2a0 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Thu, 14 Apr 2022 16:22:03 +0300 Subject: [PATCH 154/272] Move Blazor PWA implementation logic to ConfigureWithBlazorUi method --- .../Templates/App/AppTemplateBase.cs | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs index e232629e5a..3dd6ece476 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs @@ -209,15 +209,6 @@ public abstract class AppTemplateBase : TemplateInfo { RemoveCmsKitDependenciesFromPackageJsonFiles(steps); } - - if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.ProgressiveWebApp.Short)) - { - context.Symbols.Add("PWA"); - } - else - { - RemovePwaFiles(steps); - } } protected static void RemoveCmsKitDependenciesFromPackageJsonFiles(List steps) @@ -247,15 +238,6 @@ public abstract class AppTemplateBase : TemplateInfo } } - protected static void RemovePwaFiles(List steps) - { - steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js")); - steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js")); - steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json")); - steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png")); - steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png")); - } - protected bool IsCmsKitSupportedForTargetVersion(ProjectBuildContext context) { if (string.IsNullOrWhiteSpace(context.BuildArgs.Version)) @@ -307,6 +289,19 @@ public abstract class AppTemplateBase : TemplateInfo steps.Add(new TemplateProjectRenameStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds", "MyCompanyName.MyProjectName.HttpApi.Host")); steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44305")); } + + if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.ProgressiveWebApp.Short)) + { + context.Symbols.Add("PWA"); + } + else + { + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png")); + } } protected void ConfigureWithBlazorServerUi(ProjectBuildContext context, List steps) @@ -383,6 +378,11 @@ public abstract class AppTemplateBase : TemplateInfo steps.Add(new TemplateProjectRenameStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds", "MyCompanyName.MyProjectName.HttpApi.Host")); steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44305")); } + + if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.ProgressiveWebApp.Short)) + { + context.Symbols.Add("PWA"); + } } protected void RemoveUnnecessaryPorts(ProjectBuildContext context, List steps) From f56d83ef39d270b3882d91d01a0553f244c346aa Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Thu, 14 Apr 2022 16:22:19 +0300 Subject: [PATCH 155/272] Add Angualr pwa support to CLI --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 16 +++++++- .../AngularPwaSupportAdder.cs | 40 +++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 420e64eb18..4cb0ef4635 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -12,6 +12,7 @@ using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.ProjectBuilding; +using Volo.Abp.Cli.ProjectBuilding.Building; using Volo.Abp.Cli.ProjectModification; using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; @@ -24,17 +25,20 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien protected TemplateProjectBuilder TemplateProjectBuilder { get; } public ITemplateInfoProvider TemplateInfoProvider { get; } - + protected AngularPwaSupportAdder AngularPwaSupportAdder { get; } + public NewCommand(TemplateProjectBuilder templateProjectBuilder , ITemplateInfoProvider templateInfoProvider, ConnectionStringProvider connectionStringProvider, SolutionPackageVersionFinder solutionPackageVersionFinder, ICmdHelper cmdHelper, - IInstallLibsService installLibsService) + IInstallLibsService installLibsService, + AngularPwaSupportAdder angularPwaSupportAdder) : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, installLibsService) { TemplateProjectBuilder = templateProjectBuilder; TemplateInfoProvider = templateInfoProvider; + AngularPwaSupportAdder = angularPwaSupportAdder; } public async Task ExecuteAsync(CommandLineArgs commandLineArgs) @@ -79,6 +83,14 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien RunGraphBuildForMicroserviceServiceTemplate(projectArgs); await RunInstallLibsForWebTemplateAsync(projectArgs); OpenRelatedWebPage(projectArgs, template, isTiered, commandLineArgs); + + var pwa = commandLineArgs.Options.ContainsKey(Options.ProgressiveWebApp.Short); + var angular = projectArgs.UiFramework == UiFramework.Angular; + if (angular && pwa) + { + Logger.LogInformation("Adding PWA Support to Angular app."); + AngularPwaSupportAdder.AddPwaSupport(projectArgs.OutputFolder); + } } public string GetUsageInfo() diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs new file mode 100644 index 0000000000..4781252705 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs @@ -0,0 +1,40 @@ +using System; +using System.IO; +using System.Linq; +using Volo.Abp.Cli.Utils; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Cli.ProjectModification; + +public class AngularPwaSupportAdder : ITransientDependency +{ + protected ICmdHelper CmdHelper { get; } + protected PackageJsonFileFinder PackageJsonFileFinder { get; } + + public AngularPwaSupportAdder( + ICmdHelper cmdHelper, + PackageJsonFileFinder packageJsonFileFinder) + { + CmdHelper = cmdHelper; + PackageJsonFileFinder = packageJsonFileFinder; + } + + public virtual void AddPwaSupport(string rootDirectory) + { + var fileList = PackageJsonFileFinder.Find(rootDirectory).Where(x => x.Contains("angular")).ToList(); + + if (!fileList.Any()) + { + return; + } + + fileList.ForEach(AddPwaSupportToProject); + } + + protected virtual void AddPwaSupportToProject(string filePath) + { + var directory = Path.GetDirectoryName(filePath).EnsureEndsWith(Path.DirectorySeparatorChar); + + CmdHelper.RunCmd($"cd {directory} && ng add @angular/pwa --skip-confirmation"); + } +} From 65203e7c9beb80c3b4bd9f7556fbb1517b79de13 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Thu, 14 Apr 2022 16:35:09 +0300 Subject: [PATCH 156/272] Move Angular PWA logic to ProjectCreationCommandBase --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 14 +++---------- .../Commands/ProjectCreationCommandBase.cs | 20 +++++++++++++++++-- .../Cli/ProjectBuilding/ProjectBuildArgs.cs | 6 +++++- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 4cb0ef4635..526ae77363 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -25,7 +25,6 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien protected TemplateProjectBuilder TemplateProjectBuilder { get; } public ITemplateInfoProvider TemplateInfoProvider { get; } - protected AngularPwaSupportAdder AngularPwaSupportAdder { get; } public NewCommand(TemplateProjectBuilder templateProjectBuilder , ITemplateInfoProvider templateInfoProvider, @@ -34,11 +33,10 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien ICmdHelper cmdHelper, IInstallLibsService installLibsService, AngularPwaSupportAdder angularPwaSupportAdder) - : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, installLibsService) + : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, installLibsService, angularPwaSupportAdder) { TemplateProjectBuilder = templateProjectBuilder; TemplateInfoProvider = templateInfoProvider; - AngularPwaSupportAdder = angularPwaSupportAdder; } public async Task ExecuteAsync(CommandLineArgs commandLineArgs) @@ -82,15 +80,9 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien RunGraphBuildForMicroserviceServiceTemplate(projectArgs); await RunInstallLibsForWebTemplateAsync(projectArgs); - OpenRelatedWebPage(projectArgs, template, isTiered, commandLineArgs); + ConfigurePwaSupportForAngular(projectArgs); - var pwa = commandLineArgs.Options.ContainsKey(Options.ProgressiveWebApp.Short); - var angular = projectArgs.UiFramework == UiFramework.Angular; - if (angular && pwa) - { - Logger.LogInformation("Adding PWA Support to Angular app."); - AngularPwaSupportAdder.AddPwaSupport(projectArgs.OutputFolder); - } + OpenRelatedWebPage(projectArgs, template, isTiered, commandLineArgs); } public string GetUsageInfo() diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index 368f022bda..6e280d7dc3 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -25,18 +25,21 @@ public abstract class ProjectCreationCommandBase public SolutionPackageVersionFinder SolutionPackageVersionFinder { get; } public ICmdHelper CmdHelper { get; } public IInstallLibsService InstallLibsService { get; } + public AngularPwaSupportAdder AngularPwaSupportAdder { get; } public ILogger Logger { get; set; } public ProjectCreationCommandBase( ConnectionStringProvider connectionStringProvider, SolutionPackageVersionFinder solutionPackageVersionFinder, ICmdHelper cmdHelper, - IInstallLibsService installLibsService) + IInstallLibsService installLibsService, + AngularPwaSupportAdder angularPwaSupportAdder) { ConnectionStringProvider = connectionStringProvider; SolutionPackageVersionFinder = solutionPackageVersionFinder; CmdHelper = cmdHelper; InstallLibsService = installLibsService; + AngularPwaSupportAdder = angularPwaSupportAdder; Logger = NullLogger.Instance; } @@ -176,7 +179,8 @@ public abstract class ProjectCreationCommandBase gitHubVoloLocalRepositoryPath, templateSource, commandLineArgs.Options, - connectionString + connectionString, + pwa ); } @@ -333,6 +337,18 @@ public abstract class ProjectCreationCommandBase } } + protected void ConfigurePwaSupportForAngular(ProjectBuildArgs projectArgs) + { + var isAngular = projectArgs.UiFramework == UiFramework.Angular; + var isPwa = projectArgs.Pwa; + + if (isAngular && isPwa) + { + Logger.LogInformation("Adding PWA Support to Angular app."); + AngularPwaSupportAdder.AddPwaSupport(projectArgs.OutputFolder); + } + } + protected virtual DatabaseManagementSystem GetDatabaseManagementSystem(CommandLineArgs commandLineArgs) { var optionValue = commandLineArgs.Options.GetOrNull(Options.DatabaseManagementSystem.Short, Options.DatabaseManagementSystem.Long); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs index 6d9b754cba..3c057454f6 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs @@ -40,6 +40,8 @@ public class ProjectBuildArgs [NotNull] public string OutputFolder { get; set; } + public bool Pwa { get; set; } + [NotNull] public Dictionary ExtraProperties { get; set; } @@ -57,7 +59,8 @@ public class ProjectBuildArgs [CanBeNull] string voloGitHubLocalRepositoryPath = null, [CanBeNull] string templateSource = null, Dictionary extraProperties = null, - [CanBeNull] string connectionString = null) + [CanBeNull] string connectionString = null, + bool pwa = false) { SolutionName = Check.NotNull(solutionName, nameof(solutionName)); TemplateName = templateName; @@ -73,5 +76,6 @@ public class ProjectBuildArgs TemplateSource = templateSource; ExtraProperties = extraProperties ?? new Dictionary(); ConnectionString = connectionString; + Pwa = pwa; } } From 47e1284aeb516a96d9e83e14f8d771b75b67f276 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 18 Apr 2022 09:33:27 +0800 Subject: [PATCH 157/272] No layers template missing console logs for non development environments --- .../Program.cs | 5 +---- .../MyCompanyName.MyProjectName.Blazor.Server/Program.cs | 5 +---- .../MyCompanyName.MyProjectName.Host.Mongo/Program.cs | 5 +---- .../aspnet-core/MyCompanyName.MyProjectName.Host/Program.cs | 5 +---- .../MyCompanyName.MyProjectName.Mvc.Mongo/Program.cs | 5 +---- .../aspnet-core/MyCompanyName.MyProjectName.Mvc/Program.cs | 5 +---- 6 files changed, 6 insertions(+), 24 deletions(-) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Program.cs index 051587bb5c..07e558fb39 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Program.cs @@ -18,12 +18,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Program.cs index 0226e0a554..4553f8cfd1 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Program.cs @@ -24,12 +24,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Program.cs index a9366b95fe..6eb33e471a 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Program.cs @@ -17,12 +17,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Program.cs index c4c428b90d..199b799da8 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Program.cs @@ -23,12 +23,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Program.cs index e3b1aeed74..9d076b5f23 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Program.cs @@ -18,12 +18,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Program.cs index 358f8dda73..57e81aa17c 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Program.cs @@ -24,12 +24,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); From 00e18120b0566c741011b7e572d62b866c508102 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 18 Apr 2022 11:19:32 +0800 Subject: [PATCH 158/272] Add IsEnabledAsync to IExternalLoginProvider --- .../Volo/Abp/Identity/ExternalLoginProviderBase.cs | 2 ++ .../Volo/Abp/Identity/IExternalLoginProvider.cs | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs index d129ba917e..cfefad2a95 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs @@ -32,6 +32,8 @@ public abstract class ExternalLoginProviderBase : IExternalLoginProvider } public abstract Task TryAuthenticateAsync(string userName, string plainPassword); + + public abstract Task IsEnabledAsync(); public virtual async Task CreateUserAsync(string userName, string providerName) { diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs index 56d6c643fb..52d3895d13 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs @@ -28,4 +28,10 @@ public interface IExternalLoginProvider /// The name of this provider /// The user that can be updated Task UpdateUserAsync(IdentityUser user, string providerName); + + /// + /// Return a value indicating whether this source is enabled. + /// + /// + Task IsEnabledAsync(); } From a16c1e3de5713f1cf9cc729c1d9e18bfe01a6bed Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 18 Apr 2022 12:06:07 +0800 Subject: [PATCH 159/272] Update FakeExternalLoginProvider --- .../Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs index 6583156c82..fbfc0e2ef6 100644 --- a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs +++ b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs @@ -35,6 +35,11 @@ public class FakeExternalLoginProvider : ExternalLoginProviderBase, ITransientDe ); } + public override Task IsEnabledAsync() + { + return Task.FromResult(true); + } + protected override Task GetUserInfoAsync(string userName) { if (userName != "ext_user") From 0891d82d48a57df22e5b70ad2d54236815c76cba Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 18 Apr 2022 14:47:05 +0800 Subject: [PATCH 160/272] Add `AbpDesignTimeDbContextBase`. --- .../Design/AbpDesignTimeDbContextBase.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs new file mode 100644 index 0000000000..c8fce37399 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; +using Volo.Abp.Threading; + +namespace Volo.Abp.EntityFrameworkCore.Design; + +public abstract class AbpDesignTimeDbContextBase : IDesignTimeDbContextFactory + where TModule : AbpModule + where TContext : DbContext +{ + public virtual TContext CreateDbContext(string[] args) + { + return AsyncHelper.RunSync(() => CreateDbContextAsync(args)); + } + + protected virtual async Task CreateDbContextAsync(string[] args) + { + var application = await AbpApplicationFactory.CreateAsync(); + application.Services.ReplaceConfiguration(BuildConfiguration()); + await application.InitializeAsync(); + return application.ServiceProvider.GetRequiredService(); + } + + protected abstract IConfigurationRoot BuildConfiguration(); +} From e0bf7d8f16f7bcd4176b144d09409019104b78ee Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 18 Apr 2022 17:01:28 +0800 Subject: [PATCH 161/272] Update AbpDesignTimeDbContextBase.cs --- .../Design/AbpDesignTimeDbContextBase.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs index c8fce37399..c3746f620d 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs @@ -19,11 +19,21 @@ public abstract class AbpDesignTimeDbContextBase : IDesignTim protected virtual async Task CreateDbContextAsync(string[] args) { - var application = await AbpApplicationFactory.CreateAsync(); - application.Services.ReplaceConfiguration(BuildConfiguration()); + var application = await AbpApplicationFactory.CreateAsync(options => + { + options.Services.ReplaceConfiguration(BuildConfiguration()); + ConfigureServices(options.Services); + }); + await application.InitializeAsync(); + return application.ServiceProvider.GetRequiredService(); } + protected virtual void ConfigureServices(IServiceCollection services) + { + + } + protected abstract IConfigurationRoot BuildConfiguration(); } From 4f21f6dc3ed5d2f6cb181ac9f87e799cb451c460 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 18 Apr 2022 18:31:26 +0300 Subject: [PATCH 162/272] CmsKit - Prevent data seeding if global feature disabled --- .../Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs index b212e5e21a..e99ab47964 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; +using Volo.Abp.GlobalFeatures; namespace Volo.CmsKit.Blogs; @@ -19,6 +20,11 @@ public class BlogFeatureDataSeedContributor : IDataSeedContributor, ITransientDe public async Task SeedAsync(DataSeedContext context) { + if (!GlobalFeatureManager.Instance.IsEnabled()) + { + return; + } + var blogs = await _blogRepository.GetListAsync(); foreach (var blog in blogs) From f1566fa44a932788a63431930e5aed69580ca2d5 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 18 Apr 2022 18:32:29 +0300 Subject: [PATCH 163/272] Add missing BlogFeature property to ICmsKitDbContext --- .../Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs index a405612f39..fca31f2d73 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs @@ -26,6 +26,7 @@ public interface ICmsKitDbContext : IEfCoreDbContext DbSet Pages { get; } DbSet Blogs { get; } DbSet BlogPosts { get; } + DbSet BlogFeatures { get; } DbSet MediaDescriptors { get; } DbSet MenuItems { get; } DbSet GlobalResources { get; } From a3413dbb445ad5f74bbd912aefb284f4cb64cc88 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 19 Apr 2022 09:54:11 +0800 Subject: [PATCH 164/272] Disable the abp module for dynamic JavaScript client proxies Resolve #12297 --- framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs index 76724ce0a5..bc5641a651 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs @@ -17,5 +17,10 @@ public class AbpHttpModule : AbpModule { options.Generators[JQueryProxyScriptGenerator.Name] = typeof(JQueryProxyScriptGenerator); }); + + Configure(options => + { + options.DisableModule("abp"); + }); } } From 65e26c0f0e7225ed5462ea437d190692a0b4a9c2 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 19 Apr 2022 10:03:21 +0800 Subject: [PATCH 165/272] Move to `AbpAspNetCoreMvcModule` --- .../Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs | 6 ++++++ framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs | 5 ----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index c205e15321..22b919c91c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -36,6 +36,7 @@ using Volo.Abp.Http; using Volo.Abp.DynamicProxy; using Volo.Abp.GlobalFeatures; using Volo.Abp.Http.Modeling; +using Volo.Abp.Http.ProxyScripting.Generators.JQuery; using Volo.Abp.Json; using Volo.Abp.Localization; using Volo.Abp.Modularity; @@ -185,6 +186,11 @@ public class AbpAspNetCoreMvcModule : AbpModule endpointContext.Endpoints.MapRazorPages(); }); }); + + Configure(options => + { + options.DisableModule("abp"); + }); } public override void PostConfigureServices(ServiceConfigurationContext context) diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs index bc5641a651..76724ce0a5 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/AbpHttpModule.cs @@ -17,10 +17,5 @@ public class AbpHttpModule : AbpModule { options.Generators[JQueryProxyScriptGenerator.Name] = typeof(JQueryProxyScriptGenerator); }); - - Configure(options => - { - options.DisableModule("abp"); - }); } } From 52cc582b8dad078b3b74d4e2c849ab8b218a99d3 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 19 Apr 2022 10:24:15 +0800 Subject: [PATCH 166/272] Update package.json --- npm/packs/cms-kit.admin/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/packs/cms-kit.admin/package.json b/npm/packs/cms-kit.admin/package.json index 3877658bd3..17d676756d 100644 --- a/npm/packs/cms-kit.admin/package.json +++ b/npm/packs/cms-kit.admin/package.json @@ -8,7 +8,7 @@ "@abp/jstree": "~5.2.1", "@abp/slugify": "~5.2.1", "@abp/tui-editor": "~5.2.1", - "@abp/uppy": "~5.2.1" + "@abp/uppy": "~5.2.1", "@abp/codemirror": "~5.2.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" From fd46f43417488556509f5286da138f5cb0c8a6fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Apr 2022 02:38:55 +0000 Subject: [PATCH 167/272] Bump prismjs from 1.19.0 to 1.28.0 in /modules/docs/app/VoloDocs.Web Bumps [prismjs](https://github.com/PrismJS/prism) from 1.19.0 to 1.28.0. - [Release notes](https://github.com/PrismJS/prism/releases) - [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md) - [Commits](https://github.com/PrismJS/prism/compare/v1.19.0...v1.28.0) --- updated-dependencies: - dependency-name: prismjs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- .../docs/app/VoloDocs.Web/package-lock.json | 1433 +++++++---------- modules/docs/app/VoloDocs.Web/yarn.lock | 6 +- 2 files changed, 557 insertions(+), 882 deletions(-) diff --git a/modules/docs/app/VoloDocs.Web/package-lock.json b/modules/docs/app/VoloDocs.Web/package-lock.json index e764349469..9ae1d55d3d 100644 --- a/modules/docs/app/VoloDocs.Web/package-lock.json +++ b/modules/docs/app/VoloDocs.Web/package-lock.json @@ -5,251 +5,269 @@ "requires": true, "dependencies": { "@abp/anchor-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/anchor-js/-/anchor-js-1.1.1.tgz", - "integrity": "sha512-hHyYYJ09hhT5xeQJUsBN43yT+y49FKcigq4Wrx8448TrW7r2NJD5i3Xy3BGEstNSlfcQPTsmciQnbkcU2rX1HQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/anchor-js/-/anchor-js-5.2.1.tgz", + "integrity": "sha512-61+rrfSQyZacqUJ5qQxkoWYffWcd7AArkj8DmEHmFY4e28hH3P9eXMcuGBoJ85pXleAPEmVYswc/xZiTMNHkvg==", "requires": { - "@abp/core": "^1.1.1", - "anchor-js": "^4.2.2" + "@abp/core": "~5.2.1", + "anchor-js": "^4.3.1" } }, "@abp/aspnetcore.mvc.ui": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz", - "integrity": "sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz", + "integrity": "sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg==", "requires": { "ansi-colors": "^4.1.1", "extend-object": "^1.0.0", + "glob": "^7.1.6", "gulp": "^4.0.2", "merge-stream": "^2.0.0", - "path": "^0.12.7", - "rimraf": "^3.0.0" + "micromatch": "^4.0.2" } }, "@abp/aspnetcore.mvc.ui.theme.basic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz", - "integrity": "sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz", + "integrity": "sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA==", "requires": { - "@abp/aspnetcore.mvc.ui.theme.shared": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "~5.2.1" } }, "@abp/aspnetcore.mvc.ui.theme.shared": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz", - "integrity": "sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ==", - "requires": { - "@abp/aspnetcore.mvc.ui": "^1.1.1", - "@abp/bootstrap": "^1.1.1", - "@abp/bootstrap-datepicker": "^1.1.1", - "@abp/datatables.net-bs4": "^1.1.1", - "@abp/font-awesome": "^1.1.1", - "@abp/jquery-form": "^1.1.1", - "@abp/jquery-validation-unobtrusive": "^1.1.1", - "@abp/lodash": "^1.1.1", - "@abp/luxon": "^1.1.1", - "@abp/malihu-custom-scrollbar-plugin": "^1.1.1", - "@abp/select2": "^1.1.1", - "@abp/sweetalert": "^1.1.1", - "@abp/timeago": "^1.1.1", - "@abp/toastr": "^1.1.1" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz", + "integrity": "sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ==", + "requires": { + "@abp/aspnetcore.mvc.ui": "~5.2.1", + "@abp/bootstrap": "~5.2.1", + "@abp/bootstrap-datepicker": "~5.2.1", + "@abp/datatables.net-bs5": "~5.2.1", + "@abp/font-awesome": "~5.2.1", + "@abp/jquery-form": "~5.2.1", + "@abp/jquery-validation-unobtrusive": "~5.2.1", + "@abp/lodash": "~5.2.1", + "@abp/luxon": "~5.2.1", + "@abp/malihu-custom-scrollbar-plugin": "~5.2.1", + "@abp/select2": "~5.2.1", + "@abp/sweetalert2": "~5.2.1", + "@abp/timeago": "~5.2.1", + "@abp/toastr": "~5.2.1" } }, "@abp/bootstrap": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/bootstrap/-/bootstrap-1.1.1.tgz", - "integrity": "sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/bootstrap/-/bootstrap-5.2.1.tgz", + "integrity": "sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A==", "requires": { - "@abp/core": "^1.1.1", - "bootstrap": "^4.3.1" + "@abp/core": "~5.2.1", + "bootstrap": "^5.1.3" } }, "@abp/bootstrap-datepicker": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz", - "integrity": "sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz", + "integrity": "sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww==", "requires": { "bootstrap-datepicker": "^1.9.0" } }, "@abp/clipboard": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/clipboard/-/clipboard-1.1.1.tgz", - "integrity": "sha512-O6b7VCAh2mxjkPhgUZYQBhXf0u+dWRECBOYN4KxYiKfk+2xL8X+34Ls7hVLbyuD+4xCcNirMZIG5CnS8auHC/A==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/clipboard/-/clipboard-5.2.1.tgz", + "integrity": "sha512-aouNTDz8t+8M4O2a+UsEdtABRsyhvzGpXqCG2+LYE1vA3I+CKhglkvEFp+GyIgWsipEHY1U1w6V3qZtcRINn+A==", "requires": { - "@abp/core": "^1.1.1", - "clipboard": "^2.0.4" + "@abp/core": "~5.2.1", + "clipboard": "^2.0.8" } }, "@abp/core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/core/-/core-1.1.1.tgz", - "integrity": "sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/core/-/core-5.2.1.tgz", + "integrity": "sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ==", + "requires": { + "@abp/utils": "~5.2.1" + } }, "@abp/datatables.net": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/datatables.net/-/datatables.net-1.1.1.tgz", - "integrity": "sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/datatables.net/-/datatables.net-5.2.1.tgz", + "integrity": "sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w==", "requires": { - "@abp/core": "^1.1.1", - "datatables.net": "^1.10.20" + "@abp/jquery": "~5.2.1", + "datatables.net": "^1.11.4" } }, - "@abp/datatables.net-bs4": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz", - "integrity": "sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw==", + "@abp/datatables.net-bs5": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz", + "integrity": "sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA==", "requires": { - "@abp/datatables.net": "^1.1.1", - "datatables.net-bs4": "^1.10.20" + "@abp/datatables.net": "~5.2.1", + "datatables.net-bs5": "^1.11.4" } }, "@abp/docs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/docs/-/docs-1.1.1.tgz", - "integrity": "sha512-z2Dk7EOhBdFo6BYbgccD91PIg37L2ehkgRT4RWf61dRyjPAQgPwwwyVSqApFmKveWPCzreHoTPKbnrU7EzAssw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/docs/-/docs-5.2.1.tgz", + "integrity": "sha512-WZCCY73vyIpRu7hypPiP9CRr4Bvzkv3up0WeGQ4rK9LiZWNSxG9PXv4lYeD4cuHg0zgxH9d/6toYToaIJNqDCQ==", "requires": { - "@abp/anchor-js": "^1.1.1", - "@abp/clipboard": "^1.1.1", - "@abp/malihu-custom-scrollbar-plugin": "^1.1.1", - "@abp/popper.js": "^1.1.1", - "@abp/prismjs": "^1.1.1" + "@abp/anchor-js": "~5.2.1", + "@abp/clipboard": "~5.2.1", + "@abp/malihu-custom-scrollbar-plugin": "~5.2.1", + "@abp/popper.js": "~5.2.1", + "@abp/prismjs": "~5.2.1" } }, "@abp/font-awesome": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/font-awesome/-/font-awesome-1.1.1.tgz", - "integrity": "sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/font-awesome/-/font-awesome-5.2.1.tgz", + "integrity": "sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ==", "requires": { - "@abp/core": "^1.1.1", - "@fortawesome/fontawesome-free": "^5.11.2" + "@abp/core": "~5.2.1", + "@fortawesome/fontawesome-free": "^5.15.4" } }, "@abp/jquery": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/jquery/-/jquery-1.1.1.tgz", - "integrity": "sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/jquery/-/jquery-5.2.1.tgz", + "integrity": "sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg==", "requires": { - "@abp/core": "^1.1.1", - "jquery": "^3.4.1" + "@abp/core": "~5.2.1", + "jquery": "~3.6.0" } }, "@abp/jquery-form": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/jquery-form/-/jquery-form-1.1.1.tgz", - "integrity": "sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/jquery-form/-/jquery-form-5.2.1.tgz", + "integrity": "sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ==", "requires": { - "@abp/jquery": "^1.1.1", - "jquery-form": "^4.2.2" + "@abp/jquery": "~5.2.1", + "jquery-form": "^4.3.0" } }, "@abp/jquery-validation": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz", - "integrity": "sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz", + "integrity": "sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw==", "requires": { - "@abp/jquery": "^1.1.1", - "jquery-validation": "^1.19.1" + "@abp/jquery": "~5.2.1", + "jquery-validation": "^1.19.3" } }, "@abp/jquery-validation-unobtrusive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz", - "integrity": "sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz", + "integrity": "sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg==", "requires": { - "@abp/jquery-validation": "^1.1.1", - "jquery-validation-unobtrusive": "^3.2.11" + "@abp/jquery-validation": "~5.2.1", + "jquery-validation-unobtrusive": "^3.2.12" } }, "@abp/lodash": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/lodash/-/lodash-1.1.1.tgz", - "integrity": "sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/lodash/-/lodash-5.2.1.tgz", + "integrity": "sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA==", "requires": { - "@abp/core": "^1.1.1", - "lodash": "^4.17.15" + "@abp/core": "~5.2.1", + "lodash": "^4.17.21" } }, "@abp/luxon": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/luxon/-/luxon-1.1.1.tgz", - "integrity": "sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/luxon/-/luxon-5.2.1.tgz", + "integrity": "sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A==", "requires": { - "luxon": "^1.21.3" + "@abp/core": "~5.2.1", + "luxon": "^2.3.0" } }, "@abp/malihu-custom-scrollbar-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz", - "integrity": "sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz", + "integrity": "sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ==", "requires": { - "@abp/core": "^1.1.1", + "@abp/core": "~5.2.1", "malihu-custom-scrollbar-plugin": "^3.1.5" } }, "@abp/popper.js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/popper.js/-/popper.js-1.1.1.tgz", - "integrity": "sha512-heR73cqmMsVPNgsPxBYbkvc842R3hEEuDAj4oaXZwVTeWXayU6TdDcGdIrfwMZwW2eWivYNnO0bMOVmuhZKTTQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/popper.js/-/popper.js-5.2.1.tgz", + "integrity": "sha512-poQhd5EYjU2/udJWlDEd5mIPWmw6AzNOzAd5V4OUHMai+BHeuhIXQ6mopvxf9lpzytGoFe2ZIiQ547Wfq4Fl/Q==", "requires": { - "@abp/core": "^1.1.1", - "popper.js": "^1.16.0" + "@abp/core": "~5.2.1", + "@popperjs/core": "^2.11.2" } }, "@abp/prismjs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/prismjs/-/prismjs-1.1.1.tgz", - "integrity": "sha512-kZh2imqVTMDWmE2v+S4wMsigu/hSyVaz3VvZzGctFNctzC17LeD6z6ymfrtQ5BPJbCxGSpHwOt4/Y8bycPTEuQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/prismjs/-/prismjs-5.2.1.tgz", + "integrity": "sha512-YNgcM7Kvmu3hGXJh4B8gl7rLzC28VuZYYP7AVptVSbTz/n6usCo21evG/st8L3vXixuQkvnNpBFgacJnHdSJZQ==", "requires": { - "@abp/core": "^1.1.1", - "prismjs": "^1.17.1" + "@abp/clipboard": "~5.2.1", + "@abp/core": "~5.2.1", + "prismjs": "^1.26.0" } }, "@abp/select2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/select2/-/select2-1.1.1.tgz", - "integrity": "sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/select2/-/select2-5.2.1.tgz", + "integrity": "sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ==", "requires": { - "@abp/core": "^1.1.1", - "select2": "^4.0.12" + "@abp/core": "~5.2.1", + "select2": "^4.0.13" } }, - "@abp/sweetalert": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/sweetalert/-/sweetalert-1.1.1.tgz", - "integrity": "sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA==", + "@abp/sweetalert2": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz", + "integrity": "sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg==", "requires": { - "@abp/core": "^1.1.1", - "sweetalert": "^2.1.2" + "@abp/core": "~5.2.1", + "sweetalert2": "^11.3.6" } }, "@abp/timeago": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/timeago/-/timeago-1.1.1.tgz", - "integrity": "sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/timeago/-/timeago-5.2.1.tgz", + "integrity": "sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA==", "requires": { - "@abp/jquery": "^1.1.1", + "@abp/jquery": "~5.2.1", "timeago": "^1.6.7" } }, "@abp/toastr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@abp/toastr/-/toastr-1.1.1.tgz", - "integrity": "sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/toastr/-/toastr-5.2.1.tgz", + "integrity": "sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA==", "requires": { - "@abp/jquery": "^1.1.1", + "@abp/jquery": "~5.2.1", "toastr": "^2.1.4" } }, + "@abp/utils": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@abp/utils/-/utils-5.2.1.tgz", + "integrity": "sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ==", + "requires": { + "just-compare": "^1.3.0" + } + }, "@fortawesome/fontawesome-free": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.0.tgz", - "integrity": "sha512-xKOeQEl5O47GPZYIMToj6uuA2syyFlq9EMSl2ui0uytjY9xbe8XS0pexNWmxrdcCyNGyDmLyYw5FtKsalBUeOg==" + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", + "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==" + }, + "@popperjs/core": { + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", + "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==" }, "anchor-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/anchor-js/-/anchor-js-4.2.2.tgz", - "integrity": "sha512-Rg1tGaG4K3avYqDh7rOYCE/odWxpUiHStnlKL/bGOt9cl6NjR06zhPGVQcCAjE5PT48oQeHVgqNmLzxh0Kuk4A==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/anchor-js/-/anchor-js-4.3.1.tgz", + "integrity": "sha512-TziERoibspey7KSm95oIdzTxiogXonJl7inQI07Y3cI25DKQaLkUftB7RhCuSb1GcwunHL6/PcIKM4dDUb9xYQ==" }, "ansi-colors": { "version": "4.1.1", @@ -281,6 +299,36 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "append-buffer": { @@ -441,9 +489,9 @@ } }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base": { "version": "0.11.2", @@ -510,9 +558,9 @@ } }, "bootstrap": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz", - "integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==" + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==" }, "bootstrap-datepicker": { "version": "1.9.0", @@ -564,9 +612,9 @@ "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "cache-base": { "version": "1.0.1", @@ -584,6 +632,15 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", @@ -606,13 +663,6 @@ "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", "upath": "^1.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - } } }, "class-utils": { @@ -637,9 +687,9 @@ } }, "clipboard": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", - "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.10.tgz", + "integrity": "sha512-cz3m2YVwFz95qSEbCDi2fzLN/epEN9zXBvfgAoGkvGOJZATMl9gtTDVOtBYkx2ODUJl2kvmud7n32sV2BpYR4g==", "requires": { "good-listener": "^1.2.2", "select": "^1.1.2", @@ -732,9 +782,9 @@ } }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "requires": { "safe-buffer": "~5.1.1" } @@ -745,18 +795,25 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", "requires": { - "each-props": "^1.3.0", - "is-plain-object": "^2.0.1" + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + } } }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "d": { "version": "1.0.1", @@ -768,19 +825,19 @@ } }, "datatables.net": { - "version": "1.10.20", - "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.20.tgz", - "integrity": "sha512-4E4S7tTU607N3h0fZPkGmAtr9mwy462u+VJ6gxYZ8MxcRIjZqHy3Dv1GNry7i3zQCktTdWbULVKBbkAJkuHEnQ==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.11.5.tgz", + "integrity": "sha512-nlFst2xfwSWaQgaOg5sXVG3cxYC0tH8E8d65289w9ROgF2TmLULOOpcdMpyxxUim/qEwVSEem42RjkTWEpr3eA==", "requires": { "jquery": ">=1.7" } }, - "datatables.net-bs4": { - "version": "1.10.20", - "resolved": "https://registry.npmjs.org/datatables.net-bs4/-/datatables.net-bs4-1.10.20.tgz", - "integrity": "sha512-kQmMUMsHMOlAW96ztdoFqjSbLnlGZQ63iIM82kHbmldsfYdzuyhbb4hTx6YNBi481WCO3iPSvI6YodNec46ZAw==", + "datatables.net-bs5": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/datatables.net-bs5/-/datatables.net-bs5-1.11.5.tgz", + "integrity": "sha512-1zyh972GtuK1uAb9h8nP3jJ7f/3UgCDq69LAaZS2bVd4mEHECJ6vrZLacxrkOHOs/q/H3v5sEMeZ46vXz8ox4w==", "requires": { - "datatables.net": "1.10.20", + "datatables.net": ">=1.11.3", "jquery": ">=1.7" } }, @@ -823,11 +880,12 @@ "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "define-property": { @@ -914,13 +972,13 @@ } }, "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "version": "0.10.60", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.60.tgz", + "integrity": "sha512-jpKNXIt60htYG59/9FGf2PYT3pwMpnEbNKysU+k/4FGwyGtMotOvcZOuW+EmXXYASRqYSXQfGL5cVIthOTgbkg==", "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" } }, "es6-iterator": { @@ -933,11 +991,6 @@ "es6-symbol": "^3.1.1" } }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - }, "es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -999,17 +1052,17 @@ } }, "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "requires": { - "type": "^2.0.0" + "type": "^2.5.0" }, "dependencies": { "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" } } }, @@ -1112,6 +1165,11 @@ "time-stamp": "^1.0.0" } }, + "fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=" + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -1157,6 +1215,28 @@ "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } } }, "fined": { @@ -1221,487 +1301,13 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "optional": true, "requires": { "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.3", - "bundled": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.3", - "bundled": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "optional": true - } + "nan": "^2.12.1" } }, "function-bind": { @@ -1714,15 +1320,25 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1769,15 +1385,16 @@ } }, "glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", "requires": { "anymatch": "^2.0.0", "async-done": "^1.2.0", "chokidar": "^2.0.0", "is-negated-glob": "^1.0.0", "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", "object.defaults": "^1.1.0" } }, @@ -1820,9 +1437,9 @@ } }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "gulp": { "version": "4.0.2", @@ -1844,9 +1461,9 @@ } }, "gulp-cli": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", - "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", "requires": { "ansi-colors": "^1.0.1", "archy": "^1.0.0", @@ -1856,7 +1473,7 @@ "copy-props": "^2.0.1", "fancy-log": "^1.3.2", "gulplog": "^1.0.0", - "interpret": "^1.1.0", + "interpret": "^1.4.0", "isobject": "^3.0.1", "liftoff": "^3.1.0", "matchdep": "^2.0.0", @@ -1864,7 +1481,7 @@ "pretty-hrtime": "^1.0.0", "replace-homedir": "^1.0.0", "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.0.1", + "v8flags": "^3.2.0", "yargs": "^7.1.0" } } @@ -1878,10 +1495,26 @@ "glogg": "^1.0.0" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-value": { "version": "1.0.0", @@ -1921,9 +1554,9 @@ } }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "inflight": { "version": "1.0.6", @@ -1940,14 +1573,14 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, "invert-kv": { "version": "1.0.0", @@ -1999,6 +1632,14 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -2053,9 +1694,9 @@ } }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } @@ -2138,14 +1779,14 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" }, "jquery-form": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/jquery-form/-/jquery-form-4.2.2.tgz", - "integrity": "sha512-HJTef7DRBSg8ge/RNUw8rUTTtB3l8ozO0OhD16AzDl+eIXp4skgCqRTd9fYPsOzL+pN6+1B9wvbTLGjgikz8Tg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/jquery-form/-/jquery-form-4.3.0.tgz", + "integrity": "sha512-q3uaVCEWdLOYUCI6dpNdwf/7cJFOsUgdpq6r0taxtGQ5NJSkOzofyWm4jpOuJ5YxdmL1FI5QR+q+HB63HHLGnQ==", "requires": { "jquery": ">=1.7.2" } @@ -2156,16 +1797,16 @@ "integrity": "sha1-BvAzXxbjU6aV5yBr9QUDy1I6buU=" }, "jquery-validation": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/jquery-validation/-/jquery-validation-1.19.1.tgz", - "integrity": "sha512-QNnrZBqSltWUEJx+shOY5WtfrIb0gWmDjFfQP8rZKqMMSfpRSwEkSqhfHPvDfkObD8Hnv5KHSYI8yg73sVFdqA==" + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/jquery-validation/-/jquery-validation-1.19.3.tgz", + "integrity": "sha512-iXxCS5W7STthSTMFX/NDZfWHBLbJ1behVK3eAgHXAV8/0vRa9M4tiqHvJMr39VGWHMGdlkhrtrkBuaL2UlE8yw==" }, "jquery-validation-unobtrusive": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.11.tgz", - "integrity": "sha512-3FQPllaWdD+Aq55zJLGSW39+eXPDz1HhwAvrSwYi8zHQ8DVcu5IJ1HVeTiCl0BnCnrIBvfFU3zEB/DrGdcoRIQ==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.12.tgz", + "integrity": "sha512-kPixGhVcuat7vZXngGFfSIksy4VlzZcHyRgnBIZdsfVneCU+D5sITC8T8dD/9c9K/Q+qkMlgp7ufJHz93nKSuQ==", "requires": { - "jquery": ">=1.8", + "jquery": "^3.5.1", "jquery-validation": ">=1.16" } }, @@ -2174,10 +1815,15 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, + "just-compare": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/just-compare/-/just-compare-1.5.1.tgz", + "integrity": "sha512-xDEEFHNIyJNmN4uo/2RVeUcay9THtN/5ka/iw98Y/gsa8w9KXZQuyaf5eFUY6VlntA2+G+bdPmdhqqTs7T+BRw==" + }, "just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==" }, "kind-of": { "version": "6.0.3", @@ -2194,9 +1840,9 @@ } }, "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "requires": { "readable-stream": "^2.0.5" } @@ -2245,14 +1891,14 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "luxon": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.22.2.tgz", - "integrity": "sha512-vq6eSaOOw1fKob+JXwfu0e3/UFUT4G4HTFRJab7dch8J1OdOGW/vXqCiJsY7rm2In+5gKNYx0EtnYT0Tc5V4Qw==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.3.2.tgz", + "integrity": "sha512-MlAQQVMFhGk4WUA6gpfsy0QycnKP0+NlCBJRVRNPxxSIbjrCbQ65nrpJD3FVyJNZLuJ0uoqL57ye6BmDYgHaSw==" }, "make-iterator": { "version": "1.0.1", @@ -2312,6 +1958,26 @@ "requires": { "is-extglob": "^2.1.0" } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } } } }, @@ -2321,29 +1987,49 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -2378,9 +2064,9 @@ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" }, "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "optional": true }, "nanomatch": { @@ -2402,9 +2088,9 @@ } }, "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "normalize-package-data": { "version": "2.5.0", @@ -2418,12 +2104,9 @@ } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "now-and-later": { "version": "2.0.1", @@ -2480,14 +2163,14 @@ } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, "object.defaults": { @@ -2584,15 +2267,6 @@ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, - "path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", - "requires": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -2612,9 +2286,9 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-root": { "version": "0.1.1", @@ -2639,6 +2313,11 @@ "pinkie-promise": "^2.0.0" } }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -2657,11 +2336,6 @@ "pinkie": "^2.0.0" } }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -2673,28 +2347,15 @@ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" }, "prismjs": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.19.0.tgz", - "integrity": "sha512-IVFtbW9mCWm9eOIaEkNyo2Vl4NnEifis2GQ7/MLRG5TQe6t+4Sj9J5QWI9i3v+SS43uZBlCAOn+zYTVYQcPXJw==", - "requires": { - "clipboard": "^2.0.0" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", + "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==" }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "promise-polyfill": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", - "integrity": "sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=" - }, "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", @@ -2755,6 +2416,28 @@ "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } } }, "rechoir": { @@ -2799,9 +2482,9 @@ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" }, "repeat-string": { "version": "1.6.1", @@ -2809,9 +2492,9 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" }, "replace-homedir": { "version": "1.0.0", @@ -2834,11 +2517,13 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "requires": { - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-dir": { @@ -2868,14 +2553,6 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3053,9 +2730,9 @@ } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" }, "sparkles": { "version": "1.0.1", @@ -3063,32 +2740,32 @@ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" }, "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" }, "split-string": { "version": "3.1.0", @@ -3166,6 +2843,11 @@ "is-utf8": "^0.2.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "sver-compat": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", @@ -3175,14 +2857,10 @@ "es6-symbol": "^3.1.1" } }, - "sweetalert": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/sweetalert/-/sweetalert-2.1.2.tgz", - "integrity": "sha512-iWx7X4anRBNDa/a+AdTmvAzQtkN1+s4j/JJRWlHpYE8Qimkohs8/XnFcWeYHH2lMA8LRCa5tj2d244If3S/hzA==", - "requires": { - "es6-object-assign": "^1.1.0", - "promise-polyfill": "^6.0.2" - } + "sweetalert2": { + "version": "11.4.8", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.4.8.tgz", + "integrity": "sha512-BDS/+E8RwaekGSxCPUbPnsRAyQ439gtXkTF/s98vY2l9DaVEOMjGj1FaQSorfGREKsbbxGSP7UXboibL5vgTMA==" }, "through2": { "version": "2.0.5", @@ -3299,15 +2977,16 @@ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" }, "undertaker": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz", - "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", "requires": { "arr-flatten": "^1.0.1", "arr-map": "^2.0.0", "bach": "^1.0.0", "collection-map": "^1.0.0", "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", "last-run": "^1.1.0", "object.defaults": "^1.0.0", "object.reduce": "^1.0.0", @@ -3390,30 +3069,15 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "v8flags": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", - "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "requires": { "homedir-polyfill": "^1.0.1" } @@ -3433,9 +3097,9 @@ "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" }, "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "requires": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", @@ -3481,6 +3145,16 @@ "now-and-later": "^2.0.0", "remove-bom-buffer": "^3.0.0", "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "which": { @@ -3516,14 +3190,14 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", "requires": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -3537,15 +3211,16 @@ "string-width": "^1.0.2", "which-module": "^1.0.0", "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "yargs-parser": "^5.0.1" } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "requires": { - "camelcase": "^3.0.0" + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } } } diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock index 802094ec7c..8e5f9ddd6d 100644 --- a/modules/docs/app/VoloDocs.Web/yarn.lock +++ b/modules/docs/app/VoloDocs.Web/yarn.lock @@ -2009,9 +2009,9 @@ pretty-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" prismjs@^1.26.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" - integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== + version "1.28.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.28.0.tgz#0d8f561fa0f7cf6ebca901747828b149147044b6" + integrity sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw== process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.0" From ea0f3c2c18971ef6769016140ecb985a6d7da832 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Tue, 19 Apr 2022 09:15:20 +0300 Subject: [PATCH 168/272] Update BlogFeatureDataSeedContributor.cs --- .../Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs index e99ab47964..5306d302dd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs @@ -2,6 +2,7 @@ using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit.Blogs; @@ -20,7 +21,7 @@ public class BlogFeatureDataSeedContributor : IDataSeedContributor, ITransientDe public async Task SeedAsync(DataSeedContext context) { - if (!GlobalFeatureManager.Instance.IsEnabled()) + if (!GlobalFeatureManager.Instance.IsEnabled()) { return; } From 2fe31f2083569a19a7aacb7a06876cf440786e84 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Apr 2022 10:10:36 +0300 Subject: [PATCH 169/272] AngularPwaSupportAdder. improvements --- .../Cli/ProjectModification/AngularPwaSupportAdder.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs index 4781252705..f774844884 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs @@ -21,12 +21,7 @@ public class AngularPwaSupportAdder : ITransientDependency public virtual void AddPwaSupport(string rootDirectory) { - var fileList = PackageJsonFileFinder.Find(rootDirectory).Where(x => x.Contains("angular")).ToList(); - - if (!fileList.Any()) - { - return; - } + var fileList = PackageJsonFileFinder.Find(rootDirectory).Where(x => x.Contains("angular" + Path.DirectorySeparatorChar)).ToList(); fileList.ForEach(AddPwaSupportToProject); } @@ -35,6 +30,6 @@ public class AngularPwaSupportAdder : ITransientDependency { var directory = Path.GetDirectoryName(filePath).EnsureEndsWith(Path.DirectorySeparatorChar); - CmdHelper.RunCmd($"cd {directory} && ng add @angular/pwa --skip-confirmation"); + CmdHelper.RunCmd("ng add @angular/pwa --skip-confirmation", workingDirectory: directory); } } From 061d152bcf855e32f0940e22c993689b6ca9f27f Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 19 Apr 2022 11:05:01 +0300 Subject: [PATCH 170/272] Update en.json --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 0b9d6d96b2..35b755e8c3 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -214,7 +214,11 @@ "SeeDocs": "See Docs", "None": "None", "Application": "Application", + "ApplicationExplanation": "Creates a fully layered solution based on Domain Driven Design practices. Recommended for long-term projects that need a maintainable and extensible codebase.", + "ApplicationNoLayer": "Application (single layer)", + "ApplicationNoLayerExplanation": "Creates a single-layer web application. Recommended for building an application with a simpler and easy to understand architecture.", "Module": "Module", + "ModuleExplanation": "Creates a reusable, fully layered application module solution. You can use this option to create modules for your modular application.", "PackageName": "Package Name", "LicenseURL": "License URL", "License": "License", From 9f4dacc984657c4ff77cc49a55f2dbfdb7bf9412 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 19 Apr 2022 11:13:36 +0300 Subject: [PATCH 171/272] Update tr.json --- .../AbpIoLocalization/Www/Localization/Resources/tr.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json index f9c6d54204..ad8393fab3 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json @@ -214,7 +214,11 @@ "SeeDocs": "Dökümanı Görüntüle", "None": "Hiç", "Application": "Uygulama", + "ApplicationExplanation": "Domain Driven Design pratikleri üzerine oluşturulmuş çok katmanlı bir çözüm oluşturur. Bakıma ve geliştirmeye açık kod tabanına ihtiyaç duyan uzun süreli projeler için önerilir.", + "ApplicationNoLayer": "Uygulama (tek katmanlı)", + "ApplicationNoLayerExplanation": "Tek katmanlı Web uygulaması oluşturur. Daha basit ve anlaması kolay mimari ile uygulama geliştirmek için önerilir.", "Module": "Modül", + "ModuleExplanation": "Tamamen katmanlanmış, tekrar kullanılabilir bir uygulama modülü oluşturur. Uygulamanıza modül yaratmak için bu seçeneği kullanabilirsiniz.", "PackageName": "Paket adı", "LicenseURL": "Lisans Linki", "License": "Lisans", From d30082bc9616c2f61aa7319aa9646a86401b79ad Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Apr 2022 12:52:40 +0300 Subject: [PATCH 172/272] Determine angular project with `angular.json` --- .../Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs index f774844884..9ff8169e71 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs @@ -21,7 +21,7 @@ public class AngularPwaSupportAdder : ITransientDependency public virtual void AddPwaSupport(string rootDirectory) { - var fileList = PackageJsonFileFinder.Find(rootDirectory).Where(x => x.Contains("angular" + Path.DirectorySeparatorChar)).ToList(); + var fileList = PackageJsonFileFinder.Find(rootDirectory).Where(x => x.Contains("angular.json")).ToList(); fileList.ForEach(AddPwaSupportToProject); } From e6e5cb05a8aeb6222933f0977ef25e4cf8070399 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Apr 2022 14:51:12 +0300 Subject: [PATCH 173/272] Fix angular path finding --- .../Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs index 9ff8169e71..891ac28ecb 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs @@ -21,7 +21,7 @@ public class AngularPwaSupportAdder : ITransientDependency public virtual void AddPwaSupport(string rootDirectory) { - var fileList = PackageJsonFileFinder.Find(rootDirectory).Where(x => x.Contains("angular.json")).ToList(); + var fileList = PackageJsonFileFinder.Find(rootDirectory).Where(x => File.Exists(x.RemovePostFix("package.json") + "angular.json")).ToList(); fileList.ForEach(AddPwaSupportToProject); } From d871f35b3440d214a856afc0ccca11fac467a5c1 Mon Sep 17 00:00:00 2001 From: albert <9526587+ebicoglu@users.noreply.github.com> Date: Wed, 20 Apr 2022 04:21:17 +0300 Subject: [PATCH 174/272] Add comparision table --- .../_results/with-without-abp-comparison.png | Bin 0 -> 62756 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/AbpPerfTest/_results/with-without-abp-comparison.png diff --git a/test/AbpPerfTest/_results/with-without-abp-comparison.png b/test/AbpPerfTest/_results/with-without-abp-comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..997e1bda13919de5a4a4c13b52c25a3218335b4e GIT binary patch literal 62756 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

    E3EJ+Cx)iXLumd$sN7rR> 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
    cY%&+B><=(Jnh7MAgltRXWJUPk zg#_5)4EF}1FxL=NrKBN_L0e%md-W`WLr^(Zgje5LpV{>lQ7(%5#+N&vqxP&psi2{k zEPM9ME+{qNA59^=$F+_P^S1CkF_cgCVEDlp=6<_NwEgh151wymY}h6EJ_t0F|I|R; zFsrUcX|AFWT~lt|uyc$bQgK=&G+7=Z@mS{G@5eeeR6b1$^YMpN5^2#FqF{4xo%;GV zMxZ-ONLCEiN{Z}b(o9~fum>DPDi^0u?8pPV@I{|u*@L~FAx-Nr1GpkNc|uz@?Y&1` zz7%C_H~G`3v5)CmSduE7=foMdyC?y`I>NHFUpEsS>brl)GRO4{TIR3jLl(vPv}iCd zXNdjRH4sXUZYcNPwQ^tHRHzu38I$;8FI@GB1qvR_J|2yjy}|-1L-{SwDV`+%xz*F~ zAp&e$Sh!0^6oc~S+4f&>(=hM4>Qdgd1UX%#5m;YuP0my$MgojrMszoL>wC* zv1=~)+$b23AXuev^h}w;F09M*Xbn-w&xD9aD6(T_P`zL)xvD)RA4fiK=M}^f4qsatT~sjNpUvEWe{3FYeb7J zs<4bpl%n8FHPTOrUw!m@w?BB?J2YaYXN>uD{{$CTRlBqN?$@2&>Z-iOB+3$+ViCF* zYEPJL#9t@YR;gd@`9QG>`qW*jvc0$h_!v+_m&VE40*bRDQ096SU0SZ0g(|7%y${XKW9lfypYM7>3zd-A1=hPBg-L68To<82rdUNfKaRAP% zd#O{rExT8$sP&wF?p4=b`9cbkLxdK^K0XQfpklXyDw$)63?5-0$#A{{=2lp*_?B0c z?6r)55}%+ggD_LGBGa8nu(^4vFyO8gr*17&)51o#(;RcZYq;S&%WRzIjK^u2SR?6* zz(O={O4s5nhL?~|c%hm7tE;u_pQ9m`>W!Ld31A?E{=<2_Jk>2K*ULb(o+Mb0t%gS$ zq*)MJ8h@}ftJ@MPcLn-ZIv~yWYfNYG|hVS*n!Z&=zMJu{9sm1;+m2xA#`8g|$qZ?hqauwU%ne-SLNbyci z1y(qo#P)WT7T$aKO`gw<(|kT%E=TU9wpG+G@)w+jfZL93{@HTEO&OALT&7nqp_!`B zE|j(H%1J_KIc>~^-$ki=hCqKl%$bhS?${icV+x3S19^T-=1yXZKhH!~dgKiI*skom zXG})#^LghKPGVnDrp)P68CE@ira``9|5*m#5Om8^kJ0KLq%QcCav*Htef2j>QoZt2 zk9o)iho1(U)x|xupATf5Fl+I46Q@7B_-_Z6{vFl*_XBeOk7 Date: Wed, 20 Apr 2022 13:25:47 +0300 Subject: [PATCH 175/272] add scroll-index feature to blogging document --- docs/en/Modules/Cms-Kit/Blogging.md | 7 ++++++- .../images/cmskit-module-features-dialog-2.png | Bin 0 -> 10405 bytes .../cmskit-module-features-scroll-index.png | Bin 0 -> 108721 bytes 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 docs/en/images/cmskit-module-features-dialog-2.png create mode 100644 docs/en/images/cmskit-module-features-scroll-index.png diff --git a/docs/en/Modules/Cms-Kit/Blogging.md b/docs/en/Modules/Cms-Kit/Blogging.md index 43ab85e129..12039b1669 100644 --- a/docs/en/Modules/Cms-Kit/Blogging.md +++ b/docs/en/Modules/Cms-Kit/Blogging.md @@ -33,7 +33,12 @@ Blog feature uses some of the other CMS Kit features. You can enable or disable You can select/deselect the desired features for blog posts. -![features-dialog](../../images/cmskit-module-features-dialog.png) +![features-dialog](../../images/cmskit-module-features-dialog-2.png) + +##### Quick Navigation Bar In Blog Post +If you enable "Quick navigation bar in blog posts", it will enabled scroll index as seen below. + +![scroll-index](../../images/cmskit-module-features-scroll-index.png) ### Blog Post Management diff --git a/docs/en/images/cmskit-module-features-dialog-2.png b/docs/en/images/cmskit-module-features-dialog-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b6dd409e0a59c728f50fb4d257f5ed06a129498b GIT binary patch literal 10405 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 literal 0 HcmV?d00001 diff --git a/docs/en/images/cmskit-module-features-scroll-index.png b/docs/en/images/cmskit-module-features-scroll-index.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc3dedcc5a6474e5187ca176368bd41a5663b27 GIT binary patch literal 108721 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 aUs%qZQg}p9bXZ_Q=!%)`Z Date: Wed, 20 Apr 2022 14:11:03 +0300 Subject: [PATCH 176/272] jasmine-core bump to 4.0 --- templates/app-nolayers/angular/package.json | 2 +- templates/app/angular/package.json | 2 +- templates/module/angular/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/app-nolayers/angular/package.json b/templates/app-nolayers/angular/package.json index 5e66eb239a..6fdafdd93a 100644 --- a/templates/app-nolayers/angular/package.json +++ b/templates/app-nolayers/angular/package.json @@ -49,7 +49,7 @@ "@typescript-eslint/eslint-plugin": "5.3.0", "@typescript-eslint/parser": "5.3.0", "eslint": "^8.2.0", - "jasmine-core": "~3.7.0", + "jasmine-core": "~4.0.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.1.0", diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 5e66eb239a..6fdafdd93a 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -49,7 +49,7 @@ "@typescript-eslint/eslint-plugin": "5.3.0", "@typescript-eslint/parser": "5.3.0", "eslint": "^8.2.0", - "jasmine-core": "~3.7.0", + "jasmine-core": "~4.0.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.1.0", diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 3f2ae010fe..c7a0344227 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -52,7 +52,7 @@ "@typescript-eslint/eslint-plugin": "5.3.0", "@typescript-eslint/parser": "5.3.0", "eslint": "^8.2.0", - "jasmine-core": "~3.7.0", + "jasmine-core": "~4.0.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.1.0", From 88d86f87172ea7243df4f0151238198ce9d17382 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Wed, 20 Apr 2022 14:23:28 +0300 Subject: [PATCH 177/272] Update @angular/core @angular/cli @angular-eslint/schematics to 13.3 --- templates/app/angular/package.json | 38 +++++++++++++-------------- templates/module/angular/package.json | 38 +++++++++++++-------------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 6fdafdd93a..cdddc9c658 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -20,30 +20,30 @@ "@abp/ng.tenant-management": "~5.2.1", "@abp/ng.theme.basic": "~5.2.1", "@abp/ng.theme.shared": "~5.2.1", - "@angular/animations": "~13.1.1", - "@angular/common": "~13.1.1", - "@angular/compiler": "~13.1.1", - "@angular/core": "~13.1.1", - "@angular/forms": "~13.1.1", - "@angular/localize": "~13.1.1", - "@angular/platform-browser": "~13.1.1", - "@angular/platform-browser-dynamic": "~13.1.1", - "@angular/router": "~13.1.1", + "@angular/animations": "~13.3.3", + "@angular/common": "~13.3.3", + "@angular/compiler": "~13.3.3", + "@angular/core": "~13.3.3", + "@angular/forms": "~13.3.3", + "@angular/localize": "~13.3.3", + "@angular/platform-browser": "~13.3.3", + "@angular/platform-browser-dynamic": "~13.3.3", + "@angular/router": "~13.3.3", "rxjs": "~6.6.0", "tslib": "^2.1.0", "zone.js": "~0.11.4" }, "devDependencies": { "@abp/ng.schematics": "~5.2.1", - "@angular-devkit/build-angular": "~13.1.2", - "@angular-eslint/builder": "~13.0.1", - "@angular-eslint/eslint-plugin": "~13.0.1", - "@angular-eslint/eslint-plugin-template": "~13.0.1", - "@angular-eslint/schematics": "~13.0.1", - "@angular-eslint/template-parser": "~13.0.1", - "@angular/cli": "~13.1.2", - "@angular/compiler-cli": "~13.1.1", - "@angular/language-service": "~13.1.1", + "@angular-devkit/build-angular": "~13.3.3", + "@angular-eslint/builder": "~13.2.1", + "@angular-eslint/eslint-plugin": "~13.2.1", + "@angular-eslint/eslint-plugin-template": "~13.2.1", + "@angular-eslint/schematics": "~13.2.1", + "@angular-eslint/template-parser": "~13.2.1", + "@angular/cli": "~13.3.3", + "@angular/compiler-cli": "~13.3.3", + "@angular/language-service": "~13.3.3", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "@typescript-eslint/eslint-plugin": "5.3.0", @@ -58,4 +58,4 @@ "ng-packagr": "^13.1.2", "typescript": "~4.5.4" } -} +} \ No newline at end of file diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index c7a0344227..05f715c7c2 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -23,30 +23,30 @@ "@abp/ng.tenant-management": "~5.2.1", "@abp/ng.theme.basic": "~5.2.1", "@abp/ng.theme.shared": "~5.2.1", - "@angular/animations": "~13.1.1", - "@angular/common": "~13.1.1", - "@angular/compiler": "~13.1.1", - "@angular/core": "~13.1.1", - "@angular/forms": "~13.1.1", - "@angular/localize": "~13.1.1", - "@angular/platform-browser": "~13.1.1", - "@angular/platform-browser-dynamic": "~13.1.1", - "@angular/router": "~13.1.1", + "@angular/animations": "~13.3.3", + "@angular/common": "~13.3.3", + "@angular/compiler": "~13.3.3", + "@angular/core": "~13.3.3", + "@angular/forms": "~13.3.3", + "@angular/localize": "~13.3.3", + "@angular/platform-browser": "~13.3.3", + "@angular/platform-browser-dynamic": "~13.3.3", + "@angular/router": "~13.3.3", "rxjs": "~6.6.0", "tslib": "^2.1.0", "zone.js": "~0.11.4" }, "devDependencies": { "@abp/ng.schematics": "~5.2.1", - "@angular-devkit/build-angular": "~13.1.2", - "@angular-eslint/builder": "~13.0.1", - "@angular-eslint/eslint-plugin": "~13.0.1", - "@angular-eslint/eslint-plugin-template": "~13.0.1", - "@angular-eslint/schematics": "~13.0.1", - "@angular-eslint/template-parser": "~13.0.1", - "@angular/cli": "~13.1.2", - "@angular/compiler-cli": "~13.1.1", - "@angular/language-service": "~13.1.1", + "@angular-devkit/build-angular": "~13.3.3", + "@angular-eslint/builder": "~13.2.1", + "@angular-eslint/eslint-plugin": "~13.2.1", + "@angular-eslint/eslint-plugin-template": "~13.2.1", + "@angular-eslint/schematics": "~13.2.1", + "@angular-eslint/template-parser": "~13.2.1", + "@angular/cli": "~13.3.3", + "@angular/compiler-cli": "~13.3.3", + "@angular/language-service": "~13.3.3", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "@typescript-eslint/eslint-plugin": "5.3.0", @@ -62,4 +62,4 @@ "symlink-manager": "^1.5.0", "typescript": "~4.5.4" } -} +} \ No newline at end of file From c2c1cc52205474e6bc9a882fc475561ddeff2be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=BCseyin=20Tosun?= Date: Thu, 21 Apr 2022 10:58:41 +0300 Subject: [PATCH 178/272] Grammatical Correction Given tenant does not exist --- .../Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json index 25516ba765..f3259dbb54 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json @@ -1,7 +1,7 @@ { "culture": "en", "texts": { - "GivenTenantIsNotExist": "Given tenant is not exist: {0}", + "GivenTenantIsNotExist": "Given tenant does not exist: {0}", "GivenTenantIsNotAvailable": "Given tenant is not available: {0}", "Tenant": "Tenant", "Switch": "switch", From ac7b6d3dc975674f82eceb90cdf071240f526982 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Sun, 24 Apr 2022 17:22:35 +0800 Subject: [PATCH 179/272] Create docs/zh-Hans/Testing.md --- docs/zh-Hans/Testing.md | 768 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 768 insertions(+) create mode 100644 docs/zh-Hans/Testing.md diff --git a/docs/zh-Hans/Testing.md b/docs/zh-Hans/Testing.md new file mode 100644 index 0000000000..5bb72803c8 --- /dev/null +++ b/docs/zh-Hans/Testing.md @@ -0,0 +1,768 @@ +# 自动化测试 + +## 介绍 + +ABP框架的设计考虑了可测试性. 有一些不同级别的自动化测试: + +* **单元测试**: 通常只测试一个类(或者一起测试几个类). 这些测试会很快. 然而, 你通常需要处理对服务依赖项的模拟. +* **集成测试**: 你通常会测试一个服务, 但这一次你不会模拟基本的基础设施和服务, 以查看它们是否正确地协同工作. +* **用户界面测试**: 测试应用程序的UI, 就像用户与应用程序交互一样. + +### 单元测试 vs 集成测试 + +与单元测试相比, 集成测试有一些显著的**优势**: + +* **编写更加简单** 因为你不需要模拟和处理依赖关系. +* 你的测试代码运行于所有真正的服务和基础设施(包括数据库映射和查询), 因此它更接近于**真正的应用程序测试**. + +同时它们有一些缺点: + +* 与单元测试相比, 它们**更慢**, 因为所有的基础设施都准备好了测试用例. +* 服务中的一个bug可能会导致多个测试用例失败, 因此在某些情况下, 可能会**更难找到真正的问题**. + +我们建议混合使用: 在必要的地方编写单元测试或集成测试, 并且有效的编写和维护它. + +## 应用程序启动模板 + +测试基础设施提供[应用程序启动模板](Startup-Templates/Application.md) , 并已经正确安装和配置. + +### 测试项目 + +请参见Visual Studio中的以下解决方案: + +![solution-test-projects](images/solution-test-projects.png) + +按层级系统分为多个测试项目: + +* `Domain.Tests` 用于测试领域层对象 (例如[领域服务](Domain-Services.md) 和 [实体](Entities.md)). +* `Application.Tests` 用于测试应用层对象 (例如[应用服务](Application-Services.md)). +* `EntityFrameworkCore.Tests` 用于测试你的自定义仓储实现或EF Core映射(如果你使用其他[数据访问](Data-Access.md))的话, 该项目将有所不同). +* `Web.Tests` 用于测试UI层(如页面、控制器和视图组件). 该项目仅适用于MVC / Razor页面应用程序. +* `TestBase` 包含一些由其他项目共享/使用的类. + +> `HttpApi.Client.ConsoleTestApp` 不是自动化测试的应用程序. 它是一个示例的控制台应用程序, 展示了如何从.NET控制台应用程序中调用HTTP API. + +以下的部分将介绍这些项目中包含的基类和其他基础设施. + +### 测试基础设施 + +解决方案中已经安装了以下库: + +* [xUnit](https://xunit.net/) 作为测试框架. +* [NSubstitute](https://nsubstitute.github.io/) 用于模拟. +* [Shouldly](https://github.com/shouldly/shouldly) 用于断言. + +虽然你可以用自己喜欢的工具替换它们, 但本文档和示例将基于这些工具. + +## 测试资源管理器 + +你可以在Visual Studio中使用测试资源管理器查看和运行测试. 其他IDE, 请参阅它们自己的文档. + +### 打开测试资源管理器 + +打开*测试*菜单下的*测试资源管理器*(如果尚未打开): + +![vs-test-explorer](images/vs-test-explorer.png) + +### 运行测试 + +然后, 你可以单击在视图中运行所有测试或运行按钮来运行测试. 初始启动模板为你提供了一些测试用例: + +![vs-startup-template-tests](images/vs-startup-template-tests.png) + +### 并行运行测试 + +支持并行运行测试. **强烈建议**并行运行所有测试, 这比逐个运行测试要快得多. + +要启用它, 请单击设置(齿轮)按钮附近的插入符号图标, 然后选择*并行运行测试*. + +![vs-run-tests-in-parallel](images/vs-run-tests-in-parallel.png) + +## 单元测试 + +对于单元测试, 不需要太多的配置. 通常会实例化你的类, 并对要测试的对象提供一些预先配置的模拟对象. + +### 没有依赖项的类 + +要测试的类没有依赖项是最简单的情况, 你可以直接实例化类, 调用其方法并做出断言. + +#### 示例: 测试实体 + +假设你有一个 `Issue` [实体](Entities.md), 如下所示: + +````csharp +using System; +using Volo.Abp.Domain.Entities; + +namespace MyProject.Issues +{ + public class Issue : AggregateRoot + { + public string Title { get; set; } + public string Description { get; set; } + public bool IsLocked { get; set; } + public bool IsClosed { get; private set; } + public DateTime? CloseDate { get; private set; } + + public void Close() + { + IsClosed = true; + CloseDate = DateTime.UtcNow; + } + + public void Open() + { + if (!IsClosed) + { + return; + } + + if (IsLocked) + { + throw new IssueStateException("You can not open a locked issue!"); + } + + IsClosed = true; + CloseDate = null; + } + } +} + +```` + +请注意, `IsClosed`和`CloseDate`属性具有私有setter, 可以使用`Open()`和`Close()`方法强制执行某些业务逻辑: + +* 无论何时关闭issue, `CloseDate`都应设置为[当前时间](Timing.md). +* 如果issue被锁定, 则无法重新打开. 如果它被重新打开, `CloseDate`应该设置为`null`. + +由于`Issue`实体是领域层的一部分, 所以我们应该在`Domain.Tests`项目中测试它. 在`Domain.Tests`项目中创建一个`Issue_Tests`类: + +````csharp +using Shouldly; +using Xunit; + +namespace MyProject.Issues +{ + public class Issue_Tests + { + [Fact] + public void Should_Set_The_CloseDate_Whenever_Close_An_Issue() + { + // Arrange + + var issue = new Issue(); + issue.CloseDate.ShouldBeNull(); // null at the beginning + + // Act + + issue.Close(); + + // Assert + + issue.IsClosed.ShouldBeTrue(); + issue.CloseDate.ShouldNotBeNull(); + } + } +} +```` + +这个测试遵循AAA(Arrange-Act-Assert)模式: + +* **Arrange** 部分创建一个`Issue`实体, 并确保`CloseDate`在初始值为`null`. +* **Act** 部分执行我们想要测试的方法. +* **Assert** 部分检查`Issue`属性是否与我们预期的相同. + +`[Fact]`属性由[xUnit](https://xunit.net/)并将方法标记为测试方法. `Should...`扩展方法由[Shouldly](https://github.com/shouldly/shouldly)提供. 你可以直接使用xUnit中的`Assert`类, 使用Shouldly让它更舒适、更直观. + +当你执行测试时, 你将看到它成功通过: + +![issue-first-test](images/issue-first-test.png) + +让我们再添加两种测试方法: + +````csharp +[Fact] +public void Should_Allow_To_ReOpen_An_Issue() +{ + // Arrange + + var issue = new Issue(); + issue.Close(); + + // Act + + issue.Open(); + + // Assert + + issue.IsClosed.ShouldBeFalse(); + issue.CloseDate.ShouldBeNull(); +} + +[Fact] +public void Should_Not_Allow_To_ReOpen_A_Locked_Issue() +{ + // Arrange + + var issue = new Issue(); + issue.Close(); + issue.IsLocked = true; + + // Act & Assert + + Assert.Throws(() => + { + issue.Open(); + }); +} +```` + +`Assert.Throws` 检查执行的代码是否匹配引发的异常. + +> 有关这些库的更多信息, 请参阅xUnit & Shoudly的文档. + +### 具有依赖项的类 + +如果你的服务中有依赖项, 并且你想对该服务进行单元测试, 那么你需要模拟这些依赖项. + +#### 示例: 测试领域服务 + +假设你有一个`IssueManager` [领域服务](Domain-Services.md), 定义如下: + +````csharp +using System; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Domain.Services; + +namespace MyProject.Issues +{ + public class IssueManager : DomainService + { + public const int MaxAllowedOpenIssueCountForAUser = 3; + + private readonly IIssueRepository _issueRepository; + + public IssueManager(IIssueRepository issueRepository) + { + _issueRepository = issueRepository; + } + + public async Task AssignToUserAsync(Issue issue, Guid userId) + { + var issueCount = await _issueRepository.GetIssueCountOfUserAsync(userId); + + if (issueCount >= MaxAllowedOpenIssueCountForAUser) + { + throw new BusinessException( + code: "IM:00392", + message: $"You can not assign more" + + $"than {MaxAllowedOpenIssueCountForAUser} issues to a user!" + ); + } + + issue.AssignedUserId = userId; + } + } +} +```` + +`IssueManager`依赖于`IssueRepository`服务, 在本例中将模拟该服务. + +**业务逻辑**: 示例`AssignToUserAsync`不允许向用户分配超过3个issue (`MaxAllowedOpenIssueCountForAUser`常量). 在这种情况下, 如果要分配issue, 首先需要取消现有issue的分配. + +下面的测试用例给出一个有效的赋值: + +````csharp +using System; +using System.Threading.Tasks; +using NSubstitute; +using Shouldly; +using Volo.Abp; +using Xunit; + +namespace MyProject.Issues +{ + public class IssueManager_Tests + { + [Fact] + public async Task Should_Assign_An_Issue_To_A_User() + { + // Arrange + + var userId = Guid.NewGuid(); + + var fakeRepo = Substitute.For(); + fakeRepo.GetIssueCountOfUserAsync(userId).Returns(1); + + var issueManager = new IssueManager(fakeRepo); + + var issue = new Issue(); + + // Act + + await issueManager.AssignToUserAsync(issue, userId); + + //Assert + + issue.AssignedUserId.ShouldBe(userId); + await fakeRepo.Received(1).GetIssueCountOfUserAsync(userId); + } + } +} +```` + +* `Substitute.For` 创建一个模拟(假)对象, 该对象被传递到`IssueManager`构造函数中. +* `fakeRepo.GetIssueCountOfUserAsync(userId).Returns(1)` 确保仓储中的`GetIssueContofuseRasync`方法返回`1`. +* `issueManager.AssignToUserAsync` 不会引发任何异常, 因为仓储统计当前分配的issue数量并且返回`1`. +* `issue.AssignedUserId.ShouldBe(userId);` 行检查`AssignedUserId`的值是否正确. +* `await fakeRepo.Received(1).GetIssueCountOfUserAsync(userId);` 检查 `IssueManager` 实际只调用了 `GetIssueCountOfUserAsync` 方法一次. + +让我们添加第二个测试, 看看它是否能阻止将issue分配给超过分配数量的用户: + +````csharp +[Fact] +public async Task Should_Not_Allow_To_Assign_Issues_Over_The_Limit() +{ + // Arrange + + var userId = Guid.NewGuid(); + + var fakeRepo = Substitute.For(); + fakeRepo + .GetIssueCountOfUserAsync(userId) + .Returns(IssueManager.MaxAllowedOpenIssueCountForAUser); + + var issueManager = new IssueManager(fakeRepo); + + // Act & Assert + + var issue = new Issue(); + + await Assert.ThrowsAsync(async () => + { + await issueManager.AssignToUserAsync(issue, userId); + }); + + issue.AssignedUserId.ShouldBeNull(); + await fakeRepo.Received(1).GetIssueCountOfUserAsync(userId); +} +```` + +> 有关模拟的更多信息, 请参阅[NSubstitute](https://nsubstitute.github.io/)文档. + +模拟单个依赖项相对容易. 但是, 当依赖关系增长时, 设置测试对象和模拟所有依赖关系变得越来越困难. 请参阅不需要模拟依赖项的*Integration Tests*部分. + +### 提示: 共享测试类构造函数 + +[xUnit](https://xunit.net/) 为每个测试方法创建一个**新测试类实例**(本例中为`IssueManager_Tests`). 因此, 你可以将一些*Arrange*代码移动到构造函数中, 以减少代码重复. 构造函数将针对每个测试用例执行, 并且不会相互影响, 即使它们是并行工作. + +**示例: 重构`IssueManager_Tests`以减少代码重复** + +````csharp +using System; +using System.Threading.Tasks; +using NSubstitute; +using Shouldly; +using Volo.Abp; +using Xunit; + +namespace MyProject.Issues +{ + public class IssueManager_Tests + { + private readonly Guid _userId; + private readonly IIssueRepository _fakeRepo; + private readonly IssueManager _issueManager; + private readonly Issue _issue; + + public IssueManager_Tests() + { + _userId = Guid.NewGuid(); + _fakeRepo = Substitute.For(); + _issueManager = new IssueManager(_fakeRepo); + _issue = new Issue(); + } + + [Fact] + public async Task Should_Assign_An_Issue_To_A_User() + { + // Arrange + _fakeRepo.GetIssueCountOfUserAsync(_userId).Returns(1); + + // Act + await _issueManager.AssignToUserAsync(_issue, _userId); + + //Assert + _issue.AssignedUserId.ShouldBe(_userId); + await _fakeRepo.Received(1).GetIssueCountOfUserAsync(_userId); + } + + [Fact] + public async Task Should_Not_Allow_To_Assign_Issues_Over_The_Limit() + { + // Arrange + _fakeRepo + .GetIssueCountOfUserAsync(_userId) + .Returns(IssueManager.MaxAllowedOpenIssueCountForAUser); + + // Act & Assert + await Assert.ThrowsAsync(async () => + { + await _issueManager.AssignToUserAsync(_issue, _userId); + }); + + _issue.AssignedUserId.ShouldBeNull(); + await _fakeRepo.Received(1).GetIssueCountOfUserAsync(_userId); + } + } +} +```` + +> 保持测试代码整洁, 以创建可维护的测试组件. + +## 集成测试 + +> 你还可以按照[Web应用程序开发教程](Tutorials/Part-1.md)学习开发全栈应用程序, 包括集成测试. + +### 集成测试基础 + +ABP为编写集成测试提供了完整的基础设施. 所有ABP基础设施和服务都将在你的测试中执行. 应用程序启动模板附带了为你预先配置的必要基础设施; + +#### 数据库 + +启动模板使用EF Core配置**内存中的SQLite**数据库(对于MongoDB, 它使用[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)). 因此, 所有配置和查询都是针对真实数据库执行的, 你甚至可以测试数据库事务. + +使用内存中的SQLite数据库有两个主要优点: + +* 它比外部DBMS更快. +* 它会为每个测试用例创建一个**新的数据库**, 这样测试就不会相互影响. + +> **提示**: 不要将EF Core的内存数据库用于高级集成测试. 它不是一个真正的DBMS, 在细节上有很多不同. 例如, 它不支持事务和回滚场景, 因此无法真正测试失败的场景. 另一方面, 内存中的SQLite是一个真正的DBMS, 支持SQL数据库的基本功能. + +### 种子数据 + +针对空数据库编写测试是不现实的. 在大多数情况下, 需要在数据库中保存一些初始数据. 例如, 如果你编写了一个查询、更新和删除产品的测试类, 那么在执行测试用例之前, 在数据库中有一些产品数据会很有帮助. + +ABP的[种子数据](Data-Seeding.md)系统是一种强大的初始化数据的方法. 应用程序启动模板在`.TestBase`项目中有一个*YourProject*TestDataSeedContributor类. 你可以在其中添加, 以获得可用于每个测试方法的初始数据. + +**示例: 创建一些Issue作为种子数据** + +````csharp +using System.Threading.Tasks; +using MyProject.Issues; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace MyProject +{ + public class MyProjectTestDataSeedContributor + : IDataSeedContributor, ITransientDependency + { + private readonly IIssueRepository _issueRepository; + + public MyProjectTestDataSeedContributor(IIssueRepository issueRepository) + { + _issueRepository = issueRepository; + } + + public async Task SeedAsync(DataSeedContext context) + { + await _issueRepository.InsertAsync( + new Issue + { + Title = "Test issue one", + Description = "Test issue one description", + AssignedUserId = TestData.User1Id + }); + + await _issueRepository.InsertAsync( + new Issue + { + Title = "Test issue two", + Description = "Test issue two description", + AssignedUserId = TestData.User1Id + }); + + await _issueRepository.InsertAsync( + new Issue + { + Title = "Test issue three", + Description = "Test issue three description", + AssignedUserId = TestData.User1Id + }); + + await _issueRepository.InsertAsync( + new Issue + { + Title = "Test issue four", + Description = "Test issue four description", + AssignedUserId = TestData.User2Id + }); + } + } +} +```` + +还创建了一个静态类来存储用户的 `Id`: + +````csharp +using System; + +namespace MyProject +{ + public static class TestData + { + public static Guid User1Id = Guid.Parse("41951813-5CF9-4204-8B18-CD765DBCBC9B"); + public static Guid User2Id = Guid.Parse("2DAB4460-C21B-4925-BF41-A52750A9B999"); + } +} +```` + +通过这种方式, 我们可以使用这些已知Issue和用户的`Id`来运行测试. + +### 示例: 测试领域服务 + +`AbpIntegratedTest`类 (定义在[Volo.Abp.TestBase](https://www.nuget.org/packages/Volo.Abp.TestBase)) 用于编写集成到ABP框架的测试. `T`是用于设置和初始化应用程序的根模块的类型. + +应用程序启动模板在每个测试项目中都有基类, 因此你可以从这些基类派生, 以使其更简单. + +`IssueManager`测试将被重写成集成测试 + +````csharp +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp; +using Xunit; + +namespace MyProject.Issues +{ + public class IssueManager_Integration_Tests : MyProjectDomainTestBase + { + private readonly IssueManager _issueManager; + private readonly Issue _issue; + + public IssueManager_Integration_Tests() + { + _issueManager = GetRequiredService(); + _issue = new Issue + { + Title = "Test title", + Description = "Test description" + }; + } + + [Fact] + public async Task Should_Not_Allow_To_Assign_Issues_Over_The_Limit() + { + // Act & Assert + await Assert.ThrowsAsync(async () => + { + await _issueManager.AssignToUserAsync(_issue, TestData.User1Id); + }); + + _issue.AssignedUserId.ShouldBeNull(); + } + + [Fact] + public async Task Should_Assign_An_Issue_To_A_User() + { + // Act + await _issueManager.AssignToUserAsync(_issue, TestData.User2Id); + + //Assert + _issue.AssignedUserId.ShouldBe(TestData.User2Id); + } + } +} +```` + +* 第一个测试方法将issue分配给User1, 其中User1已经分配了种子数据代码中的3个issue. 因此, 它抛出了一个`BusinessException`. +* 第二种测试方法将issue分配给User2, User2只分配了一个issue. 因此, 该方法成功了. + +这个类通常位于`.Domain.Tests`项目中, 因为它测试位于`.Domain`项目中的类. 它派生自`MyProjectDomainTestBase`, 并已经为正确运行测试进行了配置. + +编写这样一个集成测试类非常简单. 另一个好处是, 在以后向`IssueManager`类添加另一个依赖项时, 不需要更改测试类. + +### 示例: 测试应用服务 + +测试[应用服务](Application-Services.md)并没有太大的不同. 假设你已经创建了一个`IssueAppService`, 定义如下: + +````csharp +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace MyProject.Issues +{ + public class IssueAppService : ApplicationService, IIssueAppService + { + private readonly IIssueRepository _issueRepository; + + public IssueAppService(IIssueRepository issueRepository) + { + _issueRepository = issueRepository; + } + + public async Task> GetListAsync() + { + var issues = await _issueRepository.GetListAsync(); + + return ObjectMapper.Map, List>(issues); + } + } +} +```` + +*(假设你还定义了`IIssueAppService`和`IssueDto`, 并在`Issue`和`IssueDto`之间创建了[对象映射](Object-To-Object-Mapping.md))* + +现在, 你可以在`.Application.Tests`项目中编写一个测试类: + +````csharp +using System.Threading.Tasks; +using Shouldly; +using Xunit; + +namespace MyProject.Issues +{ + public class IssueAppService_Tests : MyProjectApplicationTestBase + { + private readonly IIssueAppService _issueAppService; + + public IssueAppService_Tests() + { + _issueAppService = GetRequiredService(); + } + + [Fact] + public async Task Should_Get_All_Issues() + { + //Act + var issueDtos = await _issueAppService.GetListAsync(); + + //Assert + issueDtos.Count.ShouldBeGreaterThan(0); + } + } +} +```` + +就这么简单. 此测试方法测试的所有内容, 包括应用服务、EF Core映射、对象到对象映射和仓储实现. 通过这种方式, 你可以完全测试解决方案的应用层和领域层. + +### 处理集成测试中的工作单元 + +ABP的[工作单元](Unit-Of-Work.md)系统控制应用程序中的数据库连接和事务管理. 它可以在你编写应用程序代码时无缝工作, 因此你可能没有意识到它. + +在ABP框架中, 所有数据库操作都必须在一个工作单元作用域内执行. 当你测试[应用服务](Application-Services.md)方法时, 工作单元的作用域将是应用服务方法的作用域. 如果你正在测试[仓储](Repositories.md)方法, 那么工作单元作用域将是你的仓储方法的作用域. + +在某些情况下, 你可能需要手动控制工作单元作用域. 可以考虑下面的测试方法: + +````csharp +public class IssueRepository_Tests : MyProjectDomainTestBase +{ + private readonly IRepository _issueRepository; + + public IssueRepository_Tests() + { + _issueRepository = GetRequiredService>(); + } + + public async Task Should_Query_By_Title() + { + IQueryable queryable = await _issueRepository.GetQueryableAsync(); + var issue = queryable.FirstOrDefaultAsync(i => i.Title == "My issue title"); + issue.ShouldNotBeNull(); + } +} +```` + +我们正在使用`_issueRepository.GetQueryableAsync`获取`IQueryable` 对象. 然后, 我们使用`FirstOrDefaultAsync`方法按标题查询issue. 此时执行数据库查询, 你将会得到一个异常, 表明没有起作用的工作单元. + +要使该测试正常工作, 你应该手动启动工作单元作用域, 如下所示: + +````csharp +public class IssueRepository_Tests : MyProjectDomainTestBase +{ + private readonly IRepository _issueRepository; + private readonly IUnitOfWorkManager _unitOfWorkManager; + + public IssueRepository_Tests() + { + _issueRepository = GetRequiredService>(); + _unitOfWorkManager = GetRequiredService(); + } + + public async Task Should_Query_By_Title() + { + using (var uow = _unitOfWorkManager.Begin()) + { + IQueryable queryable = await _issueRepository.GetQueryableAsync(); + var issue = queryable.FirstOrDefaultAsync(i => i.Title == "My issue title"); + issue.ShouldNotBeNull(); + await uow.CompleteAsync(); + } + } +} +```` + +我们已经使用了`IUnitOfWorkManager`服务来创建一个工作单元作用域, 然后在该作用域内调用了`FirstOrDefaultAsync`方法, 所以不再有问题了. + +> 请注意, 我们测试了`FirstOrDefaultAsync`来演示工作单元的问题. 作为一个好的标准, 编写自己的代码. + +### 使用DbContext + +在某些情况下, 你可能希望使用Entity Framework的`DbContext`对象来执行测试方法中的数据库操作. 在这种情况下, 可以使用`IDbContextProvider`服务在工作单元内获取`DbContext`实例. + +下面的示例展示了如何在测试方法中创建`DbContext`对象: + +````csharp +public class MyDbContext_Tests : MyProjectDomainTestBase +{ + private readonly IDbContextProvider _dbContextProvider; + private readonly IUnitOfWorkManager _unitOfWorkManager; + + public IssueRepository_Tests() + { + _dbContextProvider = GetRequiredService>(); + _unitOfWorkManager = GetRequiredService(); + } + + public async Task Should_Query_By_Title() + { + using (var uow = _unitOfWorkManager.Begin()) + { + var dbContext = await _dbContextProvider.GetDbContextAsync(); + var issue = await dbContext.Issues.FirstOrDefaultAsync(i => i.Title == "My issue title"); + issue.ShouldNotBeNull(); + await uow.CompleteAsync(); + } + } +} +```` + +就像我们在*集成测试中处理工作单元*一节中所做的那样, 我们应该在起作用的工作单元内执行`DbContext`操作. + +对于[MongoDB](MongoDB.md), 你可以使用`IMongoDbContextProvider`服务获取`DbContext`对象, 并在测试方法中直接使用MongoDB APIs. + +## 用户界面测试 + +一般来说, 有两种类型的UI测试: + +### 非可视化测试 + +此类测试完全取决于UI框架的选择: + +* 对于MVC / Razor页面UI, 通常向服务器发出请求, 获取HTML, 并测试返回的结果中是否存在一些预期的DOM元素. +* Angular有自己的基础设施和实践来测试组件、视图和服务. + +请参阅以下文档以了解非可视化UI测试: + +* [Testing in ASP.NET Core MVC / Razor Pages](UI/AspNetCore/Testing.md) +* [Testing in Angular](UI/Angular/Testing.md) +* [Testing in Blazor](UI/Blazor/Testing.md) + +### 可视化测试 + +与真实用户一样, 可视化测试用于与应用程序UI交互. 它全面测试应用程序, 包括页面和组件的外观. + +可视化UI测试超出了ABP框架的范围. 行业中有很多工具(比如[Selenium](https://www.selenium.dev/))可以用来测试应用程序的UI. From bc6f1b6780b9c684428d30bd5e4078774487d9e9 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 25 Apr 2022 09:34:02 +0800 Subject: [PATCH 180/272] Update docs-nav.json --- docs/zh-Hans/docs-nav.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json index db0fc10aed..6586fa978f 100644 --- a/docs/zh-Hans/docs-nav.json +++ b/docs/zh-Hans/docs-nav.json @@ -682,6 +682,10 @@ } ] }, + { + "text": "测试", + "path": "Testing.md" + }, { "text": "示例", "items": [ From 440ba40f14de84f0bebe0e2111de07a05fd777d4 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 25 Apr 2022 11:24:09 +0800 Subject: [PATCH 181/272] Create UI/Angular/Testing.md --- docs/zh-Hans/UI/Angular/Testing.md | 380 +++++++++++++++++++++++++++++ 1 file changed, 380 insertions(+) create mode 100644 docs/zh-Hans/UI/Angular/Testing.md diff --git a/docs/zh-Hans/UI/Angular/Testing.md b/docs/zh-Hans/UI/Angular/Testing.md new file mode 100644 index 0000000000..c176d82247 --- /dev/null +++ b/docs/zh-Hans/UI/Angular/Testing.md @@ -0,0 +1,380 @@ +# Angular UI 单元测试 + +ABP Angular UI的测试与其他Angular应用程序一样. 所以, [这里的指南](https://angular.io/guide/testing)也适用于ABP. 也就是说, 我们想指出一些**特定于ABP Angular应用程序的单元测试内容**. + +## 设置 + +在Angular中, 单元测试默认使用[Karma](https://karma-runner.github.io/)和[Jasmine](https://jasmine.github.io). 虽然我们更喜欢Jest, 但我们选择不偏离这些默认设置, 因此**你下载的应用程序模板将预先配置Karma和Jasmine**. 你可以在根目录中的 _karma.conf.js_ 文件中找到Karma配置. 你什么都不用做. 添加一个spec文件并运行`npm test`即可. + +## 基础 + +简化版的spec文件如下所示: + +```js +import { CoreTestingModule } from "@abp/ng.core/testing"; +import { ThemeBasicTestingModule } from "@abp/ng.theme.basic/testing"; +import { ThemeSharedTestingModule } from "@abp/ng.theme.shared/testing"; +import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; +import { NgxValidateCoreModule } from "@ngx-validate/core"; +import { MyComponent } from "./my.component"; + +describe("MyComponent", () => { + let fixture: ComponentFixture; + + beforeEach( + waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [MyComponent], + imports: [ + CoreTestingModule.withConfig(), + ThemeSharedTestingModule.withConfig(), + ThemeBasicTestingModule.withConfig(), + NgxValidateCoreModule, + ], + providers: [ + /* mock providers here */ + ], + }).compileComponents(); + }) + ); + + beforeEach(() => { + fixture = TestBed.createComponent(MyComponent); + fixture.detectChanges(); + }); + + it("should be initiated", () => { + expect(fixture.componentInstance).toBeTruthy(); + }); +}); +``` + +如果你看一下导入内容, 你会注意到我们已经准备了一些测试模块来取代内置的ABP模块. 这对于模拟某些特性是必要的, 否则这些特性会破坏你的测试. 请记住**使用测试模块**并**调用其`withConfig`静态方法**. + +## 提示 + +### Angular测试库 + +虽然你可以使用Angular TestBed测试代码, 但你可以找到一个好的替代品[Angular测试库](https://testing-library.com/docs/angular-testing-library/intro). + +上面的简单示例可以用Angular测试库编写, 如下所示: + +```js +import { CoreTestingModule } from "@abp/ng.core/testing"; +import { ThemeBasicTestingModule } from "@abp/ng.theme.basic/testing"; +import { ThemeSharedTestingModule } from "@abp/ng.theme.shared/testing"; +import { ComponentFixture } from "@angular/core/testing"; +import { NgxValidateCoreModule } from "@ngx-validate/core"; +import { render } from "@testing-library/angular"; +import { MyComponent } from "./my.component"; + +describe("MyComponent", () => { + let fixture: ComponentFixture; + + beforeEach(async () => { + const result = await render(MyComponent, { + imports: [ + CoreTestingModule.withConfig(), + ThemeSharedTestingModule.withConfig(), + ThemeBasicTestingModule.withConfig(), + NgxValidateCoreModule, + ], + providers: [ + /* mock providers here */ + ], + }); + + fixture = result.fixture; + }); + + it("should be initiated", () => { + expect(fixture.componentInstance).toBeTruthy(); + }); +}); +``` + +正如你所见, 二者非常相似. 当我们使用查询和触发事件时, 真正的区别就显现出来了. + +```js +// other imports +import { getByLabelText, screen } from "@testing-library/angular"; +import userEvent from "@testing-library/user-event"; + +describe("MyComponent", () => { + beforeEach(/* removed for sake of brevity */); + + it("should display advanced filters", () => { + const filters = screen.getByTestId("author-filters"); + const nameInput = getByLabelText(filters, /name/i) as HTMLInputElement; + expect(nameInput.offsetWidth).toBe(0); + + const advancedFiltersBtn = screen.getByRole("link", { name: /advanced/i }); + userEvent.click(advancedFiltersBtn); + + expect(nameInput.offsetWidth).toBeGreaterThan(0); + + userEvent.type(nameInput, "fooo{backspace}"); + expect(nameInput.value).toBe("foo"); + }); +}); +``` + +**Angular测试库中的查询遵循可维护测试**, 用户事件库提供了与DOM的**类人交互**, 并且该库通常有**清晰的API**简化组件测试. 下面提供一些有用的链接: + +- [查询](https://testing-library.com/docs/dom-testing-library/api-queries) +- [用户事件](https://testing-library.com/docs/ecosystem-user-event) +- [范例](https://github.com/testing-library/angular-testing-library/tree/main/apps/example-app/src/app/examples) + +### 在每个Spec之后清除DOM + +需要记住的一点是, Karma在真实的浏览器实例中运行测试. 这意味着, 你将能够看到测试代码的结果, 但也会遇到与文档正文连接的组件的问题, 这些组件可能无法在每次测试后都清除, 即使你配置了Karma也一样无法清除. + +我们准备了一个简单的函数, 可以在每次测试后清除所有剩余的DOM元素. + +```js +// other imports +import { clearPage } from "@abp/ng.core/testing"; + +describe("MyComponent", () => { + let fixture: ComponentFixture; + + afterEach(() => clearPage(fixture)); + + beforeEach(async () => { + const result = await render(MyComponent, { + /* removed for sake of brevity */ + }); + fixture = result.fixture; + }); + + // specs here +}); +``` + +请确保你使用它, 否则Karma将无法删除对话框, 并且你将有多个模态对话框、确认框等的副本. + +### 等待 + +一些组件, 特别是在检测周期之外工作的模态对话框. 换句话说, 你无法在打开这些组件后立即访问这些组件插入的DOM元素. 同样, 插入的元素在关闭时也不会立即销毁. + +为此, 我们准备了一个`wait`函数. + +```js +// other imports +import { wait } from "@abp/ng.core/testing"; + +describe("MyComponent", () => { + beforeEach(/* removed for sake of brevity */); + + it("should open a modal", async () => { + const openModalBtn = screen.getByRole("button", { name: "Open Modal" }); + userEvent.click(openModalBtn); + + await wait(fixture); + + const modal = screen.getByRole("dialog"); + + expect(modal).toBeTruthy(); + + /* wait again after closing the modal */ + }); +}); +``` + +`wait`函数接受第二个参数, 即超时(默认值为`0`). 但是尽量不要使用它. 使用大于`0`的超时通常表明某些不正确事情发生了. + +## 测试示例 + +下面是一个测试示例. 它并没有涵盖所有内容, 但却能够对测试有一个更好的了解. + +```js +import { clearPage, CoreTestingModule, wait } from "@abp/ng.core/testing"; +import { ThemeBasicTestingModule } from "@abp/ng.theme.basic/testing"; +import { ThemeSharedTestingModule } from "@abp/ng.theme.shared/testing"; +import { ComponentFixture } from "@angular/core/testing"; +import { + NgbCollapseModule, + NgbDatepickerModule, + NgbDropdownModule, +} from "@ng-bootstrap/ng-bootstrap"; +import { NgxValidateCoreModule } from "@ngx-validate/core"; +import { CountryService } from "@proxy/countries"; +import { + findByText, + getByLabelText, + getByRole, + getByText, + queryByRole, + render, + screen, +} from "@testing-library/angular"; +import userEvent from "@testing-library/user-event"; +import { BehaviorSubject, of } from "rxjs"; +import { CountryComponent } from "./country.component"; + +const list$ = new BehaviorSubject({ + items: [{ id: "ID_US", name: "United States of America" }], + totalCount: 1, +}); + +describe("Country", () => { + let fixture: ComponentFixture; + + afterEach(() => clearPage(fixture)); + + beforeEach(async () => { + const result = await render(CountryComponent, { + imports: [ + CoreTestingModule.withConfig(), + ThemeSharedTestingModule.withConfig(), + ThemeBasicTestingModule.withConfig(), + NgxValidateCoreModule, + NgbCollapseModule, + NgbDatepickerModule, + NgbDropdownModule, + ], + providers: [ + { + provide: CountryService, + useValue: { + getList: () => list$, + }, + }, + ], + }); + + fixture = result.fixture; + }); + + it("should display advanced filters", () => { + const filters = screen.getByTestId("country-filters"); + const nameInput = getByLabelText(filters, /name/i) as HTMLInputElement; + expect(nameInput.offsetWidth).toBe(0); + + const advancedFiltersBtn = screen.getByRole("link", { name: /advanced/i }); + userEvent.click(advancedFiltersBtn); + + expect(nameInput.offsetWidth).toBeGreaterThan(0); + + userEvent.type(nameInput, "fooo{backspace}"); + expect(nameInput.value).toBe("foo"); + + userEvent.click(advancedFiltersBtn); + expect(nameInput.offsetWidth).toBe(0); + }); + + it("should have a heading", () => { + const heading = screen.getByRole("heading", { name: "Countries" }); + expect(heading).toBeTruthy(); + }); + + it("should render list in table", async () => { + const table = await screen.findByTestId("country-table"); + + const name = getByText(table, "United States of America"); + expect(name).toBeTruthy(); + }); + + it("should display edit modal", async () => { + const actionsBtn = screen.queryByRole("button", { name: /actions/i }); + userEvent.click(actionsBtn); + + const editBtn = screen.getByRole("button", { name: /edit/i }); + userEvent.click(editBtn); + + await wait(fixture); + + const modal = screen.getByRole("dialog"); + const modalHeading = queryByRole(modal, "heading", { name: /edit/i }); + expect(modalHeading).toBeTruthy(); + + const closeBtn = getByText(modal, "×"); + userEvent.click(closeBtn); + + await wait(fixture); + + expect(screen.queryByRole("dialog")).toBeFalsy(); + }); + + it("should display create modal", async () => { + const newBtn = screen.getByRole("button", { name: /new/i }); + userEvent.click(newBtn); + + await wait(fixture); + + const modal = screen.getByRole("dialog"); + const modalHeading = queryByRole(modal, "heading", { name: /new/i }); + + expect(modalHeading).toBeTruthy(); + }); + + it("should validate required name field", async () => { + const newBtn = screen.getByRole("button", { name: /new/i }); + userEvent.click(newBtn); + + await wait(fixture); + + const modal = screen.getByRole("dialog"); + const nameInput = getByRole(modal, "textbox", { + name: /^name/i, + }) as HTMLInputElement; + + userEvent.type(nameInput, "x"); + userEvent.type(nameInput, "{backspace}"); + + const nameError = await findByText(modal, /required/i); + expect(nameError).toBeTruthy(); + }); + + it("should delete a country", () => { + const getSpy = spyOn(fixture.componentInstance.list, "get"); + const deleteSpy = jasmine.createSpy().and.returnValue(of(null)); + fixture.componentInstance.service.delete = deleteSpy; + + const actionsBtn = screen.queryByRole("button", { name: /actions/i }); + userEvent.click(actionsBtn); + + const deleteBtn = screen.getByRole("button", { name: /delete/i }); + userEvent.click(deleteBtn); + + const confirmText = screen.getByText("AreYouSure"); + expect(confirmText).toBeTruthy(); + + const confirmBtn = screen.getByRole("button", { name: "Yes" }); + userEvent.click(confirmBtn); + + expect(deleteSpy).toHaveBeenCalledWith(list$.value.items[0].id); + expect(getSpy).toHaveBeenCalledTimes(1); + }); +}); +``` + +## CI配置 + +你的CI环境需要不同的配置. 要为单元测试设置新的配置, 请在测试项目中找到 _angular.json_ 文件, 或者如下所示添加一个: + +```json +// angular.json + +"test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { /* several options here */ }, + "configurations": { + "production": { + "karmaConfig": "karma.conf.prod.js" + } + } +} +``` + +现在你可以复制 _karma.conf.js_ 作为 _karma.conf.prod.js_ 并在其中使用你喜欢的任何配置. 请查看[Karma配置文档](http://karma-runner.github.io/5.2/config/configuration-file.html)配置选项. + +最后, 不要忘记使用以下命令运行CI测试: + +```sh +npm test -- --prod +``` + +## 另请参阅 + +- [ABP Community Video - Unit Testing with the Angular UI](https://community.abp.io/articles/unit-testing-with-the-angular-ui-p4l550q3) From 40a2ba7a45f96143e1fb27796c191a5e933078a9 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 25 Apr 2022 11:25:26 +0800 Subject: [PATCH 182/272] Create UI/AspNetCore/Testing.md --- docs/zh-Hans/UI/AspNetCore/Testing.md | 220 ++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 docs/zh-Hans/UI/AspNetCore/Testing.md diff --git a/docs/zh-Hans/UI/AspNetCore/Testing.md b/docs/zh-Hans/UI/AspNetCore/Testing.md new file mode 100644 index 0000000000..e5b09353fb --- /dev/null +++ b/docs/zh-Hans/UI/AspNetCore/Testing.md @@ -0,0 +1,220 @@ +# ASP.NET Core MVC / Razor Pages: 测试 + +> 你可以参考[ASP.NET Core集成测试文档](https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests)了解ASP.NET Core集成测试的详细内容. 本文档解释了ABP框架提供的附加测试基础设施. + +## 应用程序启动模板 + +应用程序启动模板的`.Web`项目其中包含应用程序的UI视图/页面/组件, 并提供`.Web.Tests`项目来测试这些内容. + +![aspnetcore-web-tests-in-solution](../../images/aspnetcore-web-tests-in-solution.png) + +## 测试Razor页面 + +假设你已经创建了一个名为`Issues.cshtml`的Razor页面, 包含以下内容; + +**Issues.cshtml.cs** + +````csharp +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.RazorPages; +using MyProject.Issues; + +namespace MyProject.Web.Pages +{ + public class IssuesModel : PageModel + { + public List Issues { get; set; } + + private readonly IIssueAppService _issueAppService; + + public IssuesModel(IIssueAppService issueAppService) + { + _issueAppService = issueAppService; + } + + public async Task OnGetAsync() + { + Issues = await _issueAppService.GetListAsync(); + } + } +} +```` + +**Issues.cshtml** + +````html +@page +@model MyProject.Web.Pages.IssuesModel +

    Issue List

    + + + + + + + + + @foreach (var issue in Model.Issues) + { + + + + + } + +
    IssueClosed?
    @issue.Title + @if (issue.IsClosed) + { + Closed + } + else + { + Open + } +
    +```` + +本页仅创建一个包含issue的表格: + +![issue-list](../../images/issue-list.png) + +你可以在`.Web.Tests`项目中编写一个测试类如下所示: + +````csharp +using System.Threading.Tasks; +using HtmlAgilityPack; +using Shouldly; +using Xunit; + +namespace MyProject.Pages +{ + public class Issues_Tests : MyProjectWebTestBase + { + [Fact] + public async Task Should_Get_Table_Of_Issues() + { + // Act + + var response = await GetResponseAsStringAsync("/Issues"); + + //Assert + + var htmlDocument = new HtmlDocument(); + htmlDocument.LoadHtml(response); + + var tableElement = htmlDocument.GetElementbyId("IssueTable"); + tableElement.ShouldNotBeNull(); + + var trNodes = tableElement.SelectNodes("//tbody/tr"); + trNodes.Count.ShouldBeGreaterThan(0); + } + } +} +```` + +`GetResponseAsStringAsync`是一个快捷方法, 它来自执行HTTP GET请求的基类, 检查生成的HTTP状态是否为`200`, 并将响应作为`string`返回. + +> 你可以使用`Client`对象(类型为`HttpClient`)对服务器执行任何类型的请求, 并读取响应.`GetResponseAsStringAsync`只是一种快捷方法. + +本例使用[HtmlAgilityPack](https://html-agility-pack.net/)库来解析传入的HTML并测试它是否包含issue表格. + +> 本例假设的数据库中存在一些初始issue. 请参阅[测试文档](../../Testing.md)的*种子数据*部分, 了解如何设置种子数据, 以便可以假定数据库中有一些可用的初始数据. + +## 控制器测试 + +测试控制器也不例外. 只需使用正确的URL向服务器执行请求, 获取响应并做出断言. + +### 查看结果 + +如果控制器返回一个视图, 你可以使用类似的代码来测试返回的HTML. 参见上面的Razor页面示例. + +### 对象结果 + +如果控制器返回对象结果, 则可以使用`GetResponseAsObjectAsync`方法. + +假设你有一个如下定义的控制器: + +````csharp +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using MyProject.Issues; +using Volo.Abp.AspNetCore.Mvc; + +namespace MyProject.Web.Controllers +{ + [Route("api/issues")] + public class IssueController : AbpController + { + private readonly IIssueAppService _issueAppService; + + public IssueController(IIssueAppService issueAppService) + { + _issueAppService = issueAppService; + } + + [HttpGet] + public async Task> GetAsync() + { + return await _issueAppService.GetListAsync(); + } + } +} +```` + +你可以编写测试代码来调用API并获得结果: + +````csharp +using System.Collections.Generic; +using System.Threading.Tasks; +using MyProject.Issues; +using Shouldly; +using Xunit; + +namespace MyProject.Pages +{ + public class Issues_Tests : MyProjectWebTestBase + { + [Fact] + public async Task Should_Get_Issues_From_Api() + { + var issues = await GetResponseAsObjectAsync>("/api/issues"); + + issues.ShouldNotBeNull(); + issues.Count.ShouldBeGreaterThan(0); + } + } +} +```` + +## 测试JavaScript代码 + +ABP框架不提供任何基础设施来测试JavaScript代码. 你可以使用任何测试框架和工具来测试JavaScript代码. + +## 测试基础设施 + +[Volo.Abp.AspNetCore.TestBase](https://www.nuget.org/packages/Volo.Abp.AspNetCore.TestBase) 提供了集成到ABP框架和ASP.NET Core的测试基础设施. + +> Volo.Abp.AspNetCore.TestBase 已经安装在 `.Web.Tests` 项目中. + +此包提供的`AbpAspNetCoreIntegratedTestBase`作为派生测试类的基类. 上面使用的`MyProjectWebTestBase`继承自`AbpAspNetCoreIntegratedTestBase`, 因此我们间接继承了`AbpAspNetCoreIntegratedTestBase`. + +### 基本属性 + +`AbpAspNetCoreIntegratedTestBase` 提供了测试中使用的以下基本属性: + +* `Server`: 在测试中托管web应用程序的`TestServer`实例. +* `Client`: 为执行对测试服务器的请求配置`HttpClient`实例. +* `ServiceProvider`: 可以在你需要时处理服务提供服务. + +### 基本方法 + +`AbpAspNetCoreIntegratedTestBase` 提供了以下方法, 如果需要自定义测试服务器, 可以重写这些方法: + +* `ConfigureServices` 仅为派生测试类注册/替换服务时可以重写使用. +* `CreateHostBuilder` 可用于自定义生成 `IHostBuilder`. + +另请参阅 + +* [总览/服务器端测试](../../Testing.md) From 82d8320c9010eeb90494a93562262254d4d3f367 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 25 Apr 2022 11:26:22 +0800 Subject: [PATCH 183/272] Update docs-nav.json --- docs/zh-Hans/docs-nav.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json index 6586fa978f..fa38a203d0 100644 --- a/docs/zh-Hans/docs-nav.json +++ b/docs/zh-Hans/docs-nav.json @@ -515,6 +515,10 @@ "text": "自定义/扩展UI", "path": "UI/AspNetCore/Customization-User-Interface.md" }, + { + "text": "测试", + "path": "UI/AspNetCore/Testing.md" + }, { "text": "主题化", "path": "UI/AspNetCore/Theming.md" @@ -536,6 +540,10 @@ "text": "服务代理", "path": "UI/Angular/Service-Proxies.md" }, + { + "text": "单元测试", + "path": "UI/Angular/Testing.md" + }, { "text": "HTTP请求", "path": "UI/Angular/HTTP-Requests.md" From 6efc1b56dd90a4e551d945ad8bbb5880c97a6d50 Mon Sep 17 00:00:00 2001 From: braim23 <94292623+braim23@users.noreply.github.com> Date: Mon, 25 Apr 2022 12:22:50 +0300 Subject: [PATCH 184/272] Update en.json --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 18c5524d1f..ec9be431ba 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -382,6 +382,7 @@ "SuccessfullyAdded": "Successfully added", "PurchaseState": "Purchase State", "ShowBetweenDayCount": "Show Between Days", - "PurchaseOrder": "Purchase Order" + "PurchaseOrder": "Purchase Order", + "ShowCreateInvoiceOfOrganization": "Create Invoice" } } \ No newline at end of file From e48efa412eab56ec1a1570767eb4d3ad4ef87083 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 25 Apr 2022 15:07:34 +0300 Subject: [PATCH 185/272] Add Volo.Abp.Gdpr.Abstractions.csproj --- framework/Volo.Abp.sln | 7 ++++ .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 ++++++++++++++ .../Volo.Abp.Gdpr.Abstractions.csproj | 15 +++++++ .../Abp/Gdpr/AbpGdprAbstractionsModule.cs | 9 ++++ .../Volo/Abp/Gdpr/GdprDataInfo.cs | 10 +++++ .../Gdpr/GdprUserDataDeleteRequestedEto.cs | 9 ++++ .../Volo/Abp/Gdpr/GdprUserDataPreparedEto.cs | 13 ++++++ .../Volo/Abp/Gdpr/GdprUserDataProviderBase.cs | 8 ++++ .../Abp/Gdpr/GdprUserDataProviderContext.cs | 8 ++++ .../Gdpr/GdprUserDataRequestEventHandler.cs | 41 +++++++++++++++++++ .../Volo/Abp/Gdpr/GdprUserDataRequestedEto.cs | 11 +++++ .../Volo/Abp/Gdpr/IGdprUserDataProvider.cs | 8 ++++ 13 files changed, 172 insertions(+) create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/Volo.Abp.Gdpr.Abstractions.csproj create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/AbpGdprAbstractionsModule.cs create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprDataInfo.cs create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataDeleteRequestedEto.cs create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataPreparedEto.cs create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataProviderBase.cs create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataProviderContext.cs create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataRequestEventHandler.cs create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataRequestedEto.cs create mode 100644 framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/IGdprUserDataProvider.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index f3e495c814..94a2e79415 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -403,6 +403,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.DistributedLocking EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BackgroundWorkers.Hangfire", "src\Volo.Abp.BackgroundWorkers.Hangfire\Volo.Abp.BackgroundWorkers.Hangfire.csproj", "{E5FCE710-C5A3-4F94-B9C9-BD1E99252BFB}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Gdpr.Abstractions", "src\Volo.Abp.Gdpr.Abstractions\Volo.Abp.Gdpr.Abstractions.csproj", "{3683340D-92F5-4B14-B77B-34A163333309}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1201,6 +1203,10 @@ Global {E5FCE710-C5A3-4F94-B9C9-BD1E99252BFB}.Debug|Any CPU.Build.0 = Debug|Any CPU {E5FCE710-C5A3-4F94-B9C9-BD1E99252BFB}.Release|Any CPU.ActiveCfg = Release|Any CPU {E5FCE710-C5A3-4F94-B9C9-BD1E99252BFB}.Release|Any CPU.Build.0 = Release|Any CPU + {3683340D-92F5-4B14-B77B-34A163333309}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3683340D-92F5-4B14-B77B-34A163333309}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3683340D-92F5-4B14-B77B-34A163333309}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3683340D-92F5-4B14-B77B-34A163333309}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1404,6 +1410,7 @@ Global {CA805B77-D50C-431F-B3CB-1111C9C6E807} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {C4F54FB5-C828-414D-BA03-E8E7A10C784D} = {447C8A77-E5F0-4538-8687-7383196D04EA} {E5FCE710-C5A3-4F94-B9C9-BD1E99252BFB} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {3683340D-92F5-4B14-B77B-34A163333309} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.Gdpr.Abstractions/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.Gdpr.Abstractions/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo.Abp.Gdpr.Abstractions.csproj b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo.Abp.Gdpr.Abstractions.csproj new file mode 100644 index 0000000000..3a5f8369b0 --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo.Abp.Gdpr.Abstractions.csproj @@ -0,0 +1,15 @@ + + + + + + + netstandard2.0 + + + + + + + + diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/AbpGdprAbstractionsModule.cs b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/AbpGdprAbstractionsModule.cs new file mode 100644 index 0000000000..9d1e95eae9 --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/AbpGdprAbstractionsModule.cs @@ -0,0 +1,9 @@ +using Volo.Abp.EventBus; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Gdpr; + +[DependsOn(typeof(AbpEventBusModule))] +public class AbpGdprAbstractionsModule : AbpModule +{ +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprDataInfo.cs b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprDataInfo.cs new file mode 100644 index 0000000000..550f556a1c --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprDataInfo.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Abp.Gdpr; + +[Serializable] +public class GdprDataInfo : Dictionary +{ + +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataDeleteRequestedEto.cs b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataDeleteRequestedEto.cs new file mode 100644 index 0000000000..c5975e1496 --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataDeleteRequestedEto.cs @@ -0,0 +1,9 @@ +using System; + +namespace Volo.Abp.Gdpr; + +[Serializable] +public class GdprUserDataDeleteRequestedEto +{ + public Guid UserId { get; set; } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataPreparedEto.cs b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataPreparedEto.cs new file mode 100644 index 0000000000..3a2c440f97 --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataPreparedEto.cs @@ -0,0 +1,13 @@ +using System; + +namespace Volo.Abp.Gdpr; + +[Serializable] +public class GdprUserDataPreparedEto +{ + public Guid RequestId { get; set; } + + public string Provider { get; set; } + + public GdprDataInfo Data { get; set; } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataProviderBase.cs b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataProviderBase.cs new file mode 100644 index 0000000000..696cf16e74 --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataProviderBase.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.Gdpr; + +public abstract class GdprUserDataProviderBase : IGdprUserDataProvider +{ + public abstract Task GetAsync(GdprUserDataProviderContext context); +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataProviderContext.cs b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataProviderContext.cs new file mode 100644 index 0000000000..1ccd035b7e --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataProviderContext.cs @@ -0,0 +1,8 @@ +using System; + +namespace Volo.Abp.Gdpr; + +public class GdprUserDataProviderContext +{ + public Guid UserId { get; set; } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataRequestEventHandler.cs b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataRequestEventHandler.cs new file mode 100644 index 0000000000..d9453c7ef5 --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataRequestEventHandler.cs @@ -0,0 +1,41 @@ +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.DependencyInjection; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.Gdpr; + +public class GdprUserDataRequestEventHandler + : IDistributedEventHandler, ITransientDependency +{ + protected IServiceScopeFactory ServiceScopeFactory { get; } + protected IDistributedEventBus EventBus { get; } + + public GdprUserDataRequestEventHandler(IServiceScopeFactory serviceScopeFactory, IDistributedEventBus eventBus) + { + ServiceScopeFactory = serviceScopeFactory; + EventBus = eventBus; + } + + public async Task HandleEventAsync(GdprUserDataRequestedEto eventData) + { + using (var scope = ServiceScopeFactory.CreateScope()) + { + var gdprDataProviders = scope.ServiceProvider.GetServices().ToList(); + + foreach (var gdprDataProvider in gdprDataProviders) + { + var gdprDataInfo = await gdprDataProvider.GetAsync(new GdprUserDataProviderContext { UserId = eventData.UserId}); + + await EventBus.PublishAsync( + new GdprUserDataPreparedEto + { + RequestId = eventData.RequestId, + Data = gdprDataInfo, + Provider = gdprDataProvider.GetType().FullName + }); + } + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataRequestedEto.cs b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataRequestedEto.cs new file mode 100644 index 0000000000..b341ab2659 --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/GdprUserDataRequestedEto.cs @@ -0,0 +1,11 @@ +using System; + +namespace Volo.Abp.Gdpr; + +[Serializable] +public class GdprUserDataRequestedEto +{ + public Guid UserId { get; set; } + + public Guid RequestId { get; set; } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/IGdprUserDataProvider.cs b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/IGdprUserDataProvider.cs new file mode 100644 index 0000000000..e04fc950d9 --- /dev/null +++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo/Abp/Gdpr/IGdprUserDataProvider.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.Gdpr; + +public interface IGdprUserDataProvider +{ + Task GetAsync(GdprUserDataProviderContext context); +} \ No newline at end of file From f15ed95068d2e15fa63c50d9d3c336fdd276bca2 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Tue, 26 Apr 2022 02:28:34 +0300 Subject: [PATCH 186/272] closes #12355 --- .../docs/src/Volo.Docs.Web/DocsWebModule.cs | 7 ++ .../Pages/Documents/Project/Index.cshtml | 110 +++++++++--------- .../Pages/Documents/Project/Index.cshtml.cs | 30 +++-- .../Shared/Components/Head/Default.cshtml | 4 + .../Components/Head/HeadViewComponent.cs | 15 +++ 5 files changed, 102 insertions(+), 64 deletions(-) create mode 100644 modules/docs/src/Volo.Docs.Web/Pages/Shared/Components/Head/Default.cshtml create mode 100644 modules/docs/src/Volo.Docs.Web/Pages/Shared/Components/Head/HeadViewComponent.cs diff --git a/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs b/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs index 77f5bec551..42c1717690 100644 --- a/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs +++ b/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; using Volo.Abp.AspNetCore.Mvc.UI.Packages; using Volo.Abp.AspNetCore.Mvc.UI.Packages.Prismjs; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; @@ -16,6 +17,7 @@ using Volo.Docs.Bundling; using Volo.Docs.HtmlConverting; using Volo.Docs.Localization; using Volo.Docs.Markdown; +using Volo.Docs.Pages.Shared.Components.Head; namespace Volo.Docs { @@ -91,6 +93,11 @@ namespace Volo.Docs { options.DisableModule(DocsRemoteServiceConsts.ModuleName); }); + + Configure(options => + { + options.Add(LayoutHooks.Head.Last, typeof(HeadViewComponent)); + }); } } } diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml index c0ea0c4d7c..5ca2b7fbd9 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml @@ -11,38 +11,42 @@ @using Volo.Docs.Localization @using Volo.Docs.Pages.Documents.Project @using Volo.Docs.Pages.Documents.Shared.ErrorComponent +@using Volo.Docs.Pages.Shared.Components.Head @inject IThemeManager ThemeManager @inject IPageLayout PageLayout @inject IHtmlLocalizer L + @model IndexModel @{ ViewBag.FluidLayout = true; Layout = ThemeManager.CurrentTheme.GetEmptyLayout(); PageLayout.Content.Title = Model.DocumentName?.Replace("-", " "); ViewBag.Description = Model.GetDescription(); + ViewBag.CanonicalUrl = Model.IsLatestVersion ? null : Model.GetFullUrlOfTheLatestDocument(); //issue #12355 } + @section styles { - - - - - - - + + + + + + + } @section scripts { - - - - - - - - - - - - + + + + + + + + + + + + } @if (Model.LoadSuccess) { @@ -93,8 +97,8 @@
    @@ -112,11 +116,11 @@ - +
    @@ -131,11 +135,11 @@
    @* - - *@ + + *@
    @@ -149,11 +153,11 @@
    + id="filter" + type="search" + data-search-url="@Model." + placeholder="@L["FilterTopics"].Value" + aria-label="Filter">
    @@ -168,13 +172,13 @@ else { + version="@(Model.LatestVersionInfo == null || Model.LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Model.Version)" + project-name="@Model.ProjectName" + project-format="@Model.Project.Format" + selected-document-name="@Model.DocumentNameWithExtension" + language="@Model.LanguageCode" + id="sidebar-scroll" + class="nav nav-list"> }
    @@ -194,11 +198,11 @@ + id="fullsearch" + type="search" + data-fullsearch-url="/search/@Model.LanguageCode/@Model.ProjectName/@Model.Version/" + placeholder="@L["FullSearch"].Value" + aria-label="Filter">

    } @@ -210,15 +214,15 @@ @(L["Contributors"].Value) - @foreach (var contributor in Model.Document.Contributors.OrderByDescending(c=> c.CommitCount).ToList()) + @foreach (var contributor in Model.Document.Contributors.OrderByDescending(c => c.CommitCount).ToList()) { Avatar + class="rounded-circle" + alt="Avatar" + height="21" + width="21" + title="@contributor.Username" /> } } @@ -261,8 +265,8 @@
    @(parameter.DisplayName) ' + cm.phrase("(Use line:column or scroll% syntax)") + ''; + } + + function interpretLine(cm, string) { + var num = Number(string) + if (/^[-+]/.test(string)) return cm.getCursor().line + num + else return num - 1 + } + + CodeMirror.commands.jumpToLine = function(cm) { + var cur = cm.getCursor(); + dialog(cm, getJumpDialog(cm), cm.phrase("Jump to line:"), (cur.line + 1) + ":" + cur.ch, function(posStr) { + if (!posStr) return; + + var match; + if (match = /^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(posStr)) { + cm.setCursor(interpretLine(cm, match[1]), Number(match[2])) + } else if (match = /^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(posStr)) { + var line = Math.round(cm.lineCount() * Number(match[1]) / 100); + if (/^[-+]/.test(match[1])) line = cur.line + line + 1; + cm.setCursor(line - 1, cur.ch); + } else if (match = /^\s*\:?\s*([\+\-]?\d+)\s*/.exec(posStr)) { + cm.setCursor(interpretLine(cm, match[1]), cur.ch); + } + }); + }; + + CodeMirror.keyMap["default"]["Alt-G"] = "jumpToLine"; +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/match-highlighter.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/match-highlighter.js new file mode 100644 index 0000000000..9b181ebc01 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/match-highlighter.js @@ -0,0 +1,167 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Highlighting text that matches the selection +// +// Defines an option highlightSelectionMatches, which, when enabled, +// will style strings that match the selection throughout the +// document. +// +// The option can be set to true to simply enable it, or to a +// {minChars, style, wordsOnly, showToken, delay} object to explicitly +// configure it. minChars is the minimum amount of characters that should be +// selected for the behavior to occur, and style is the token style to +// apply to the matches. This will be prefixed by "cm-" to create an +// actual CSS class name. If wordsOnly is enabled, the matches will be +// highlighted only if the selected text is a word. showToken, when enabled, +// will cause the current token to be highlighted when nothing is selected. +// delay is used to specify how much time to wait, in milliseconds, before +// highlighting the matches. If annotateScrollbar is enabled, the occurrences +// will be highlighted on the scrollbar via the matchesonscrollbar addon. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("./matchesonscrollbar")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "./matchesonscrollbar"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var defaults = { + style: "matchhighlight", + minChars: 2, + delay: 100, + wordsOnly: false, + annotateScrollbar: false, + showToken: false, + trim: true + } + + function State(options) { + this.options = {} + for (var name in defaults) + this.options[name] = (options && options.hasOwnProperty(name) ? options : defaults)[name] + this.overlay = this.timeout = null; + this.matchesonscroll = null; + this.active = false; + } + + CodeMirror.defineOption("highlightSelectionMatches", false, function(cm, val, old) { + if (old && old != CodeMirror.Init) { + removeOverlay(cm); + clearTimeout(cm.state.matchHighlighter.timeout); + cm.state.matchHighlighter = null; + cm.off("cursorActivity", cursorActivity); + cm.off("focus", onFocus) + } + if (val) { + var state = cm.state.matchHighlighter = new State(val); + if (cm.hasFocus()) { + state.active = true + highlightMatches(cm) + } else { + cm.on("focus", onFocus) + } + cm.on("cursorActivity", cursorActivity); + } + }); + + function cursorActivity(cm) { + var state = cm.state.matchHighlighter; + if (state.active || cm.hasFocus()) scheduleHighlight(cm, state) + } + + function onFocus(cm) { + var state = cm.state.matchHighlighter + if (!state.active) { + state.active = true + scheduleHighlight(cm, state) + } + } + + function scheduleHighlight(cm, state) { + clearTimeout(state.timeout); + state.timeout = setTimeout(function() {highlightMatches(cm);}, state.options.delay); + } + + function addOverlay(cm, query, hasBoundary, style) { + var state = cm.state.matchHighlighter; + cm.addOverlay(state.overlay = makeOverlay(query, hasBoundary, style)); + if (state.options.annotateScrollbar && cm.showMatchesOnScrollbar) { + var searchFor = hasBoundary ? new RegExp((/\w/.test(query.charAt(0)) ? "\\b" : "") + + query.replace(/[\\\[.+*?(){|^$]/g, "\\$&") + + (/\w/.test(query.charAt(query.length - 1)) ? "\\b" : "")) : query; + state.matchesonscroll = cm.showMatchesOnScrollbar(searchFor, false, + {className: "CodeMirror-selection-highlight-scrollbar"}); + } + } + + function removeOverlay(cm) { + var state = cm.state.matchHighlighter; + if (state.overlay) { + cm.removeOverlay(state.overlay); + state.overlay = null; + if (state.matchesonscroll) { + state.matchesonscroll.clear(); + state.matchesonscroll = null; + } + } + } + + function highlightMatches(cm) { + cm.operation(function() { + var state = cm.state.matchHighlighter; + removeOverlay(cm); + if (!cm.somethingSelected() && state.options.showToken) { + var re = state.options.showToken === true ? /[\w$]/ : state.options.showToken; + var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start; + while (start && re.test(line.charAt(start - 1))) --start; + while (end < line.length && re.test(line.charAt(end))) ++end; + if (start < end) + addOverlay(cm, line.slice(start, end), re, state.options.style); + return; + } + var from = cm.getCursor("from"), to = cm.getCursor("to"); + if (from.line != to.line) return; + if (state.options.wordsOnly && !isWord(cm, from, to)) return; + var selection = cm.getRange(from, to) + if (state.options.trim) selection = selection.replace(/^\s+|\s+$/g, "") + if (selection.length >= state.options.minChars) + addOverlay(cm, selection, false, state.options.style); + }); + } + + function isWord(cm, from, to) { + var str = cm.getRange(from, to); + if (str.match(/^\w+$/) !== null) { + if (from.ch > 0) { + var pos = {line: from.line, ch: from.ch - 1}; + var chr = cm.getRange(pos, from); + if (chr.match(/\W/) === null) return false; + } + if (to.ch < cm.getLine(from.line).length) { + var pos = {line: to.line, ch: to.ch + 1}; + var chr = cm.getRange(to, pos); + if (chr.match(/\W/) === null) return false; + } + return true; + } else return false; + } + + function boundariesAround(stream, re) { + return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) && + (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos))); + } + + function makeOverlay(query, hasBoundary, style) { + return {token: function(stream) { + if (stream.match(query) && + (!hasBoundary || boundariesAround(stream, hasBoundary))) + return style; + stream.next(); + stream.skipTo(query.charAt(0)) || stream.skipToEnd(); + }}; + } +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/matchesonscrollbar.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/matchesonscrollbar.css new file mode 100644 index 0000000000..77932cc908 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/matchesonscrollbar.css @@ -0,0 +1,8 @@ +.CodeMirror-search-match { + background: gold; + border-top: 1px solid orange; + border-bottom: 1px solid orange; + -moz-box-sizing: border-box; + box-sizing: border-box; + opacity: .5; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/matchesonscrollbar.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/matchesonscrollbar.js new file mode 100644 index 0000000000..8a4a827584 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/matchesonscrollbar.js @@ -0,0 +1,97 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("./searchcursor"), require("../scroll/annotatescrollbar")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "./searchcursor", "../scroll/annotatescrollbar"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineExtension("showMatchesOnScrollbar", function(query, caseFold, options) { + if (typeof options == "string") options = {className: options}; + if (!options) options = {}; + return new SearchAnnotation(this, query, caseFold, options); + }); + + function SearchAnnotation(cm, query, caseFold, options) { + this.cm = cm; + this.options = options; + var annotateOptions = {listenForChanges: false}; + for (var prop in options) annotateOptions[prop] = options[prop]; + if (!annotateOptions.className) annotateOptions.className = "CodeMirror-search-match"; + this.annotation = cm.annotateScrollbar(annotateOptions); + this.query = query; + this.caseFold = caseFold; + this.gap = {from: cm.firstLine(), to: cm.lastLine() + 1}; + this.matches = []; + this.update = null; + + this.findMatches(); + this.annotation.update(this.matches); + + var self = this; + cm.on("change", this.changeHandler = function(_cm, change) { self.onChange(change); }); + } + + var MAX_MATCHES = 1000; + + SearchAnnotation.prototype.findMatches = function() { + if (!this.gap) return; + for (var i = 0; i < this.matches.length; i++) { + var match = this.matches[i]; + if (match.from.line >= this.gap.to) break; + if (match.to.line >= this.gap.from) this.matches.splice(i--, 1); + } + var cursor = this.cm.getSearchCursor(this.query, CodeMirror.Pos(this.gap.from, 0), {caseFold: this.caseFold, multiline: this.options.multiline}); + var maxMatches = this.options && this.options.maxMatches || MAX_MATCHES; + while (cursor.findNext()) { + var match = {from: cursor.from(), to: cursor.to()}; + if (match.from.line >= this.gap.to) break; + this.matches.splice(i++, 0, match); + if (this.matches.length > maxMatches) break; + } + this.gap = null; + }; + + function offsetLine(line, changeStart, sizeChange) { + if (line <= changeStart) return line; + return Math.max(changeStart, line + sizeChange); + } + + SearchAnnotation.prototype.onChange = function(change) { + var startLine = change.from.line; + var endLine = CodeMirror.changeEnd(change).line; + var sizeChange = endLine - change.to.line; + if (this.gap) { + this.gap.from = Math.min(offsetLine(this.gap.from, startLine, sizeChange), change.from.line); + this.gap.to = Math.max(offsetLine(this.gap.to, startLine, sizeChange), change.from.line); + } else { + this.gap = {from: change.from.line, to: endLine + 1}; + } + + if (sizeChange) for (var i = 0; i < this.matches.length; i++) { + var match = this.matches[i]; + var newFrom = offsetLine(match.from.line, startLine, sizeChange); + if (newFrom != match.from.line) match.from = CodeMirror.Pos(newFrom, match.from.ch); + var newTo = offsetLine(match.to.line, startLine, sizeChange); + if (newTo != match.to.line) match.to = CodeMirror.Pos(newTo, match.to.ch); + } + clearTimeout(this.update); + var self = this; + this.update = setTimeout(function() { self.updateAfterChange(); }, 250); + }; + + SearchAnnotation.prototype.updateAfterChange = function() { + this.findMatches(); + this.annotation.update(this.matches); + }; + + SearchAnnotation.prototype.clear = function() { + this.cm.off("change", this.changeHandler); + this.annotation.clear(); + }; +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/search.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/search.js new file mode 100644 index 0000000000..24a0855e9e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/search.js @@ -0,0 +1,292 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Define search commands. Depends on dialog.js or another +// implementation of the openDialog method. + +// Replace works a little oddly -- it will do the replace on the next +// Ctrl-G (or whatever is bound to findNext) press. You prevent a +// replace by making sure the match is no longer selected when hitting +// Ctrl-G. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("./searchcursor"), require("../dialog/dialog")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "./searchcursor", "../dialog/dialog"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + // default search panel location + CodeMirror.defineOption("search", {bottom: false}); + + function searchOverlay(query, caseInsensitive) { + if (typeof query == "string") + query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g"); + else if (!query.global) + query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); + + return {token: function(stream) { + query.lastIndex = stream.pos; + var match = query.exec(stream.string); + if (match && match.index == stream.pos) { + stream.pos += match[0].length || 1; + return "searching"; + } else if (match) { + stream.pos = match.index; + } else { + stream.skipToEnd(); + } + }}; + } + + function SearchState() { + this.posFrom = this.posTo = this.lastQuery = this.query = null; + this.overlay = null; + } + + function getSearchState(cm) { + return cm.state.search || (cm.state.search = new SearchState()); + } + + function queryCaseInsensitive(query) { + return typeof query == "string" && query == query.toLowerCase(); + } + + function getSearchCursor(cm, query, pos) { + // Heuristic: if the query string is all lowercase, do a case insensitive search. + return cm.getSearchCursor(query, pos, {caseFold: queryCaseInsensitive(query), multiline: true}); + } + + function persistentDialog(cm, text, deflt, onEnter, onKeyDown) { + cm.openDialog(text, onEnter, { + value: deflt, + selectValueOnOpen: true, + closeOnEnter: false, + onClose: function() { clearSearch(cm); }, + onKeyDown: onKeyDown, + bottom: cm.options.search.bottom + }); + } + + function dialog(cm, text, shortText, deflt, f) { + if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true, bottom: cm.options.search.bottom}); + else f(prompt(shortText, deflt)); + } + + function confirmDialog(cm, text, shortText, fs) { + if (cm.openConfirm) cm.openConfirm(text, fs); + else if (confirm(shortText)) fs[0](); + } + + function parseString(string) { + return string.replace(/\\([nrt\\])/g, function(match, ch) { + if (ch == "n") return "\n" + if (ch == "r") return "\r" + if (ch == "t") return "\t" + if (ch == "\\") return "\\" + return match + }) + } + + function parseQuery(query) { + var isRE = query.match(/^\/(.*)\/([a-z]*)$/); + if (isRE) { + try { query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); } + catch(e) {} // Not a regular expression after all, do a string search + } else { + query = parseString(query) + } + if (typeof query == "string" ? query == "" : query.test("")) + query = /x^/; + return query; + } + + function startSearch(cm, state, query) { + state.queryText = query; + state.query = parseQuery(query); + cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); + state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); + cm.addOverlay(state.overlay); + if (cm.showMatchesOnScrollbar) { + if (state.annotate) { state.annotate.clear(); state.annotate = null; } + state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); + } + } + + function doSearch(cm, rev, persistent, immediate) { + var state = getSearchState(cm); + if (state.query) return findNext(cm, rev); + var q = cm.getSelection() || state.lastQuery; + if (q instanceof RegExp && q.source == "x^") q = null + if (persistent && cm.openDialog) { + var hiding = null + var searchNext = function(query, event) { + CodeMirror.e_stop(event); + if (!query) return; + if (query != state.queryText) { + startSearch(cm, state, query); + state.posFrom = state.posTo = cm.getCursor(); + } + if (hiding) hiding.style.opacity = 1 + findNext(cm, event.shiftKey, function(_, to) { + var dialog + if (to.line < 3 && document.querySelector && + (dialog = cm.display.wrapper.querySelector(".CodeMirror-dialog")) && + dialog.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, "window").top) + (hiding = dialog).style.opacity = .4 + }) + }; + persistentDialog(cm, getQueryDialog(cm), q, searchNext, function(event, query) { + var keyName = CodeMirror.keyName(event) + var extra = cm.getOption('extraKeys'), cmd = (extra && extra[keyName]) || CodeMirror.keyMap[cm.getOption("keyMap")][keyName] + if (cmd == "findNext" || cmd == "findPrev" || + cmd == "findPersistentNext" || cmd == "findPersistentPrev") { + CodeMirror.e_stop(event); + startSearch(cm, getSearchState(cm), query); + cm.execCommand(cmd); + } else if (cmd == "find" || cmd == "findPersistent") { + CodeMirror.e_stop(event); + searchNext(query, event); + } + }); + if (immediate && q) { + startSearch(cm, state, q); + findNext(cm, rev); + } + } else { + dialog(cm, getQueryDialog(cm), "Search for:", q, function(query) { + if (query && !state.query) cm.operation(function() { + startSearch(cm, state, query); + state.posFrom = state.posTo = cm.getCursor(); + findNext(cm, rev); + }); + }); + } + } + + function findNext(cm, rev, callback) {cm.operation(function() { + var state = getSearchState(cm); + var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); + if (!cursor.find(rev)) { + cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); + if (!cursor.find(rev)) return; + } + cm.setSelection(cursor.from(), cursor.to()); + cm.scrollIntoView({from: cursor.from(), to: cursor.to()}, 20); + state.posFrom = cursor.from(); state.posTo = cursor.to(); + if (callback) callback(cursor.from(), cursor.to()) + });} + + function clearSearch(cm) {cm.operation(function() { + var state = getSearchState(cm); + state.lastQuery = state.query; + if (!state.query) return; + state.query = state.queryText = null; + cm.removeOverlay(state.overlay); + if (state.annotate) { state.annotate.clear(); state.annotate = null; } + });} + + function el(tag, attrs) { + var element = tag ? document.createElement(tag) : document.createDocumentFragment(); + for (var key in attrs) { + element[key] = attrs[key]; + } + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i] + element.appendChild(typeof child == "string" ? document.createTextNode(child) : child); + } + return element; + } + + function getQueryDialog(cm) { + return el("", null, + el("span", {className: "CodeMirror-search-label"}, cm.phrase("Search:")), " ", + el("input", {type: "text", "style": "width: 10em", className: "CodeMirror-search-field"}), " ", + el("span", {style: "color: #888", className: "CodeMirror-search-hint"}, + cm.phrase("(Use /re/ syntax for regexp search)"))); + } + function getReplaceQueryDialog(cm) { + return el("", null, " ", + el("input", {type: "text", "style": "width: 10em", className: "CodeMirror-search-field"}), " ", + el("span", {style: "color: #888", className: "CodeMirror-search-hint"}, + cm.phrase("(Use /re/ syntax for regexp search)"))); + } + function getReplacementQueryDialog(cm) { + return el("", null, + el("span", {className: "CodeMirror-search-label"}, cm.phrase("With:")), " ", + el("input", {type: "text", "style": "width: 10em", className: "CodeMirror-search-field"})); + } + function getDoReplaceConfirm(cm) { + return el("", null, + el("span", {className: "CodeMirror-search-label"}, cm.phrase("Replace?")), " ", + el("button", {}, cm.phrase("Yes")), " ", + el("button", {}, cm.phrase("No")), " ", + el("button", {}, cm.phrase("All")), " ", + el("button", {}, cm.phrase("Stop"))); + } + + function replaceAll(cm, query, text) { + cm.operation(function() { + for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { + if (typeof query != "string") { + var match = cm.getRange(cursor.from(), cursor.to()).match(query); + cursor.replace(text.replace(/\$(\d)/g, function(_, i) {return match[i];})); + } else cursor.replace(text); + } + }); + } + + function replace(cm, all) { + if (cm.getOption("readOnly")) return; + var query = cm.getSelection() || getSearchState(cm).lastQuery; + var dialogText = all ? cm.phrase("Replace all:") : cm.phrase("Replace:") + var fragment = el("", null, + el("span", {className: "CodeMirror-search-label"}, dialogText), + getReplaceQueryDialog(cm)) + dialog(cm, fragment, dialogText, query, function(query) { + if (!query) return; + query = parseQuery(query); + dialog(cm, getReplacementQueryDialog(cm), cm.phrase("Replace with:"), "", function(text) { + text = parseString(text) + if (all) { + replaceAll(cm, query, text) + } else { + clearSearch(cm); + var cursor = getSearchCursor(cm, query, cm.getCursor("from")); + var advance = function() { + var start = cursor.from(), match; + if (!(match = cursor.findNext())) { + cursor = getSearchCursor(cm, query); + if (!(match = cursor.findNext()) || + (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return; + } + cm.setSelection(cursor.from(), cursor.to()); + cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); + confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase("Replace?"), + [function() {doReplace(match);}, advance, + function() {replaceAll(cm, query, text)}]); + }; + var doReplace = function(match) { + cursor.replace(typeof query == "string" ? text : + text.replace(/\$(\d)/g, function(_, i) {return match[i];})); + advance(); + }; + advance(); + } + }); + }); + } + + CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);}; + CodeMirror.commands.findPersistent = function(cm) {clearSearch(cm); doSearch(cm, false, true);}; + CodeMirror.commands.findPersistentNext = function(cm) {doSearch(cm, false, true, true);}; + CodeMirror.commands.findPersistentPrev = function(cm) {doSearch(cm, true, true, true);}; + CodeMirror.commands.findNext = doSearch; + CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);}; + CodeMirror.commands.clearSearch = clearSearch; + CodeMirror.commands.replace = replace; + CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);}; +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/searchcursor.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/searchcursor.js new file mode 100644 index 0000000000..230017b781 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/search/searchcursor.js @@ -0,0 +1,305 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")) + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod) + else // Plain browser env + mod(CodeMirror) +})(function(CodeMirror) { + "use strict" + var Pos = CodeMirror.Pos + + function regexpFlags(regexp) { + var flags = regexp.flags + return flags != null ? flags : (regexp.ignoreCase ? "i" : "") + + (regexp.global ? "g" : "") + + (regexp.multiline ? "m" : "") + } + + function ensureFlags(regexp, flags) { + var current = regexpFlags(regexp), target = current + for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1) + target += flags.charAt(i) + return current == target ? regexp : new RegExp(regexp.source, target) + } + + function maybeMultiline(regexp) { + return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source) + } + + function searchRegexpForward(doc, regexp, start) { + regexp = ensureFlags(regexp, "g") + for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) { + regexp.lastIndex = ch + var string = doc.getLine(line), match = regexp.exec(string) + if (match) + return {from: Pos(line, match.index), + to: Pos(line, match.index + match[0].length), + match: match} + } + } + + function searchRegexpForwardMultiline(doc, regexp, start) { + if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start) + + regexp = ensureFlags(regexp, "gm") + var string, chunk = 1 + for (var line = start.line, last = doc.lastLine(); line <= last;) { + // This grows the search buffer in exponentially-sized chunks + // between matches, so that nearby matches are fast and don't + // require concatenating the whole document (in case we're + // searching for something that has tons of matches), but at the + // same time, the amount of retries is limited. + for (var i = 0; i < chunk; i++) { + if (line > last) break + var curLine = doc.getLine(line++) + string = string == null ? curLine : string + "\n" + curLine + } + chunk = chunk * 2 + regexp.lastIndex = start.ch + var match = regexp.exec(string) + if (match) { + var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n") + var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length + return {from: Pos(startLine, startCh), + to: Pos(startLine + inside.length - 1, + inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), + match: match} + } + } + } + + function lastMatchIn(string, regexp, endMargin) { + var match, from = 0 + while (from <= string.length) { + regexp.lastIndex = from + var newMatch = regexp.exec(string) + if (!newMatch) break + var end = newMatch.index + newMatch[0].length + if (end > string.length - endMargin) break + if (!match || end > match.index + match[0].length) + match = newMatch + from = newMatch.index + 1 + } + return match + } + + function searchRegexpBackward(doc, regexp, start) { + regexp = ensureFlags(regexp, "g") + for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) { + var string = doc.getLine(line) + var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch) + if (match) + return {from: Pos(line, match.index), + to: Pos(line, match.index + match[0].length), + match: match} + } + } + + function searchRegexpBackwardMultiline(doc, regexp, start) { + if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start) + regexp = ensureFlags(regexp, "gm") + var string, chunkSize = 1, endMargin = doc.getLine(start.line).length - start.ch + for (var line = start.line, first = doc.firstLine(); line >= first;) { + for (var i = 0; i < chunkSize && line >= first; i++) { + var curLine = doc.getLine(line--) + string = string == null ? curLine : curLine + "\n" + string + } + chunkSize *= 2 + + var match = lastMatchIn(string, regexp, endMargin) + if (match) { + var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n") + var startLine = line + before.length, startCh = before[before.length - 1].length + return {from: Pos(startLine, startCh), + to: Pos(startLine + inside.length - 1, + inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), + match: match} + } + } + } + + var doFold, noFold + if (String.prototype.normalize) { + doFold = function(str) { return str.normalize("NFD").toLowerCase() } + noFold = function(str) { return str.normalize("NFD") } + } else { + doFold = function(str) { return str.toLowerCase() } + noFold = function(str) { return str } + } + + // Maps a position in a case-folded line back to a position in the original line + // (compensating for codepoints increasing in number during folding) + function adjustPos(orig, folded, pos, foldFunc) { + if (orig.length == folded.length) return pos + for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) { + if (min == max) return min + var mid = (min + max) >> 1 + var len = foldFunc(orig.slice(0, mid)).length + if (len == pos) return mid + else if (len > pos) max = mid + else min = mid + 1 + } + } + + function searchStringForward(doc, query, start, caseFold) { + // Empty string would match anything and never progress, so we + // define it to match nothing instead. + if (!query.length) return null + var fold = caseFold ? doFold : noFold + var lines = fold(query).split(/\r|\n\r?/) + + search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) { + var orig = doc.getLine(line).slice(ch), string = fold(orig) + if (lines.length == 1) { + var found = string.indexOf(lines[0]) + if (found == -1) continue search + var start = adjustPos(orig, string, found, fold) + ch + return {from: Pos(line, adjustPos(orig, string, found, fold) + ch), + to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)} + } else { + var cutFrom = string.length - lines[0].length + if (string.slice(cutFrom) != lines[0]) continue search + for (var i = 1; i < lines.length - 1; i++) + if (fold(doc.getLine(line + i)) != lines[i]) continue search + var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1] + if (endString.slice(0, lastLine.length) != lastLine) continue search + return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch), + to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))} + } + } + } + + function searchStringBackward(doc, query, start, caseFold) { + if (!query.length) return null + var fold = caseFold ? doFold : noFold + var lines = fold(query).split(/\r|\n\r?/) + + search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) { + var orig = doc.getLine(line) + if (ch > -1) orig = orig.slice(0, ch) + var string = fold(orig) + if (lines.length == 1) { + var found = string.lastIndexOf(lines[0]) + if (found == -1) continue search + return {from: Pos(line, adjustPos(orig, string, found, fold)), + to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))} + } else { + var lastLine = lines[lines.length - 1] + if (string.slice(0, lastLine.length) != lastLine) continue search + for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++) + if (fold(doc.getLine(start + i)) != lines[i]) continue search + var top = doc.getLine(line + 1 - lines.length), topString = fold(top) + if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search + return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)), + to: Pos(line, adjustPos(orig, string, lastLine.length, fold))} + } + } + } + + function SearchCursor(doc, query, pos, options) { + this.atOccurrence = false + this.afterEmptyMatch = false + this.doc = doc + pos = pos ? doc.clipPos(pos) : Pos(0, 0) + this.pos = {from: pos, to: pos} + + var caseFold + if (typeof options == "object") { + caseFold = options.caseFold + } else { // Backwards compat for when caseFold was the 4th argument + caseFold = options + options = null + } + + if (typeof query == "string") { + if (caseFold == null) caseFold = false + this.matches = function(reverse, pos) { + return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold) + } + } else { + query = ensureFlags(query, "gm") + if (!options || options.multiline !== false) + this.matches = function(reverse, pos) { + return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos) + } + else + this.matches = function(reverse, pos) { + return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos) + } + } + } + + SearchCursor.prototype = { + findNext: function() {return this.find(false)}, + findPrevious: function() {return this.find(true)}, + + find: function(reverse) { + var head = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); + if (this.afterEmptyMatch && this.atOccurrence) { + // do not return the same 0 width match twice + head = Pos(head.line, head.ch) + if (reverse) { + head.ch--; + if (head.ch < 0) { + head.line--; + head.ch = (this.doc.getLine(head.line) || "").length; + } + } else { + head.ch++; + if (head.ch > (this.doc.getLine(head.line) || "").length) { + head.ch = 0; + head.line++; + } + } + if (CodeMirror.cmpPos(head, this.doc.clipPos(head)) != 0) { + return this.atOccurrence = false + } + } + var result = this.matches(reverse, head) + this.afterEmptyMatch = result && CodeMirror.cmpPos(result.from, result.to) == 0 + + if (result) { + this.pos = result + this.atOccurrence = true + return this.pos.match || true + } else { + var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0) + this.pos = {from: end, to: end} + return this.atOccurrence = false + } + }, + + from: function() {if (this.atOccurrence) return this.pos.from}, + to: function() {if (this.atOccurrence) return this.pos.to}, + + replace: function(newText, origin) { + if (!this.atOccurrence) return + var lines = CodeMirror.splitLines(newText) + this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin) + this.pos.to = Pos(this.pos.from.line + lines.length - 1, + lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)) + } + } + + CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) { + return new SearchCursor(this.doc, query, pos, caseFold) + }) + CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) { + return new SearchCursor(this, query, pos, caseFold) + }) + + CodeMirror.defineExtension("selectMatches", function(query, caseFold) { + var ranges = [] + var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold) + while (cur.findNext()) { + if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break + ranges.push({anchor: cur.from(), head: cur.to()}) + } + if (ranges.length) + this.setSelections(ranges, 0) + }) +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/selection/active-line.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/selection/active-line.js new file mode 100644 index 0000000000..c7b14ce07f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/selection/active-line.js @@ -0,0 +1,72 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + var WRAP_CLASS = "CodeMirror-activeline"; + var BACK_CLASS = "CodeMirror-activeline-background"; + var GUTT_CLASS = "CodeMirror-activeline-gutter"; + + CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { + var prev = old == CodeMirror.Init ? false : old; + if (val == prev) return + if (prev) { + cm.off("beforeSelectionChange", selectionChange); + clearActiveLines(cm); + delete cm.state.activeLines; + } + if (val) { + cm.state.activeLines = []; + updateActiveLines(cm, cm.listSelections()); + cm.on("beforeSelectionChange", selectionChange); + } + }); + + function clearActiveLines(cm) { + for (var i = 0; i < cm.state.activeLines.length; i++) { + cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); + cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); + cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS); + } + } + + function sameArray(a, b) { + if (a.length != b.length) return false; + for (var i = 0; i < a.length; i++) + if (a[i] != b[i]) return false; + return true; + } + + function updateActiveLines(cm, ranges) { + var active = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + var option = cm.getOption("styleActiveLine"); + if (typeof option == "object" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty()) + continue + var line = cm.getLineHandleVisualStart(range.head.line); + if (active[active.length - 1] != line) active.push(line); + } + if (sameArray(cm.state.activeLines, active)) return; + cm.operation(function() { + clearActiveLines(cm); + for (var i = 0; i < active.length; i++) { + cm.addLineClass(active[i], "wrap", WRAP_CLASS); + cm.addLineClass(active[i], "background", BACK_CLASS); + cm.addLineClass(active[i], "gutter", GUTT_CLASS); + } + cm.state.activeLines = active; + }); + } + + function selectionChange(cm, sel) { + updateActiveLines(cm, sel.ranges); + } +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/selection/mark-selection.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/selection/mark-selection.js new file mode 100644 index 0000000000..adfaa62d1a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/selection/mark-selection.js @@ -0,0 +1,119 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Because sometimes you need to mark the selected *text*. +// +// Adds an option 'styleSelectedText' which, when enabled, gives +// selected text the CSS class given as option value, or +// "CodeMirror-selectedtext" when the value is not a string. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineOption("styleSelectedText", false, function(cm, val, old) { + var prev = old && old != CodeMirror.Init; + if (val && !prev) { + cm.state.markedSelection = []; + cm.state.markedSelectionStyle = typeof val == "string" ? val : "CodeMirror-selectedtext"; + reset(cm); + cm.on("cursorActivity", onCursorActivity); + cm.on("change", onChange); + } else if (!val && prev) { + cm.off("cursorActivity", onCursorActivity); + cm.off("change", onChange); + clear(cm); + cm.state.markedSelection = cm.state.markedSelectionStyle = null; + } + }); + + function onCursorActivity(cm) { + if (cm.state.markedSelection) + cm.operation(function() { update(cm); }); + } + + function onChange(cm) { + if (cm.state.markedSelection && cm.state.markedSelection.length) + cm.operation(function() { clear(cm); }); + } + + var CHUNK_SIZE = 8; + var Pos = CodeMirror.Pos; + var cmp = CodeMirror.cmpPos; + + function coverRange(cm, from, to, addAt) { + if (cmp(from, to) == 0) return; + var array = cm.state.markedSelection; + var cls = cm.state.markedSelectionStyle; + for (var line = from.line;;) { + var start = line == from.line ? from : Pos(line, 0); + var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line; + var end = atEnd ? to : Pos(endLine, 0); + var mark = cm.markText(start, end, {className: cls}); + if (addAt == null) array.push(mark); + else array.splice(addAt++, 0, mark); + if (atEnd) break; + line = endLine; + } + } + + function clear(cm) { + var array = cm.state.markedSelection; + for (var i = 0; i < array.length; ++i) array[i].clear(); + array.length = 0; + } + + function reset(cm) { + clear(cm); + var ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) + coverRange(cm, ranges[i].from(), ranges[i].to()); + } + + function update(cm) { + if (!cm.somethingSelected()) return clear(cm); + if (cm.listSelections().length > 1) return reset(cm); + + var from = cm.getCursor("start"), to = cm.getCursor("end"); + + var array = cm.state.markedSelection; + if (!array.length) return coverRange(cm, from, to); + + var coverStart = array[0].find(), coverEnd = array[array.length - 1].find(); + if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE || + cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0) + return reset(cm); + + while (cmp(from, coverStart.from) > 0) { + array.shift().clear(); + coverStart = array[0].find(); + } + if (cmp(from, coverStart.from) < 0) { + if (coverStart.to.line - from.line < CHUNK_SIZE) { + array.shift().clear(); + coverRange(cm, from, coverStart.to, 0); + } else { + coverRange(cm, from, coverStart.from, 0); + } + } + + while (cmp(to, coverEnd.to) < 0) { + array.pop().clear(); + coverEnd = array[array.length - 1].find(); + } + if (cmp(to, coverEnd.to) > 0) { + if (to.line - coverEnd.from.line < CHUNK_SIZE) { + array.pop().clear(); + coverRange(cm, coverEnd.from, to); + } else { + coverRange(cm, coverEnd.to, to); + } + } + } +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/selection/selection-pointer.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/selection/selection-pointer.js new file mode 100644 index 0000000000..f0bd61a33e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/selection/selection-pointer.js @@ -0,0 +1,98 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineOption("selectionPointer", false, function(cm, val) { + var data = cm.state.selectionPointer; + if (data) { + CodeMirror.off(cm.getWrapperElement(), "mousemove", data.mousemove); + CodeMirror.off(cm.getWrapperElement(), "mouseout", data.mouseout); + CodeMirror.off(window, "scroll", data.windowScroll); + cm.off("cursorActivity", reset); + cm.off("scroll", reset); + cm.state.selectionPointer = null; + cm.display.lineDiv.style.cursor = ""; + } + if (val) { + data = cm.state.selectionPointer = { + value: typeof val == "string" ? val : "default", + mousemove: function(event) { mousemove(cm, event); }, + mouseout: function(event) { mouseout(cm, event); }, + windowScroll: function() { reset(cm); }, + rects: null, + mouseX: null, mouseY: null, + willUpdate: false + }; + CodeMirror.on(cm.getWrapperElement(), "mousemove", data.mousemove); + CodeMirror.on(cm.getWrapperElement(), "mouseout", data.mouseout); + CodeMirror.on(window, "scroll", data.windowScroll); + cm.on("cursorActivity", reset); + cm.on("scroll", reset); + } + }); + + function mousemove(cm, event) { + var data = cm.state.selectionPointer; + if (event.buttons == null ? event.which : event.buttons) { + data.mouseX = data.mouseY = null; + } else { + data.mouseX = event.clientX; + data.mouseY = event.clientY; + } + scheduleUpdate(cm); + } + + function mouseout(cm, event) { + if (!cm.getWrapperElement().contains(event.relatedTarget)) { + var data = cm.state.selectionPointer; + data.mouseX = data.mouseY = null; + scheduleUpdate(cm); + } + } + + function reset(cm) { + cm.state.selectionPointer.rects = null; + scheduleUpdate(cm); + } + + function scheduleUpdate(cm) { + if (!cm.state.selectionPointer.willUpdate) { + cm.state.selectionPointer.willUpdate = true; + setTimeout(function() { + update(cm); + cm.state.selectionPointer.willUpdate = false; + }, 50); + } + } + + function update(cm) { + var data = cm.state.selectionPointer; + if (!data) return; + if (data.rects == null && data.mouseX != null) { + data.rects = []; + if (cm.somethingSelected()) { + for (var sel = cm.display.selectionDiv.firstChild; sel; sel = sel.nextSibling) + data.rects.push(sel.getBoundingClientRect()); + } + } + var inside = false; + if (data.mouseX != null) for (var i = 0; i < data.rects.length; i++) { + var rect = data.rects[i]; + if (rect.left <= data.mouseX && rect.right >= data.mouseX && + rect.top <= data.mouseY && rect.bottom >= data.mouseY) + inside = true; + } + var cursor = inside ? data.value : ""; + if (cm.display.lineDiv.style.cursor != cursor) + cm.display.lineDiv.style.cursor = cursor; + } +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/tern/tern.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/tern/tern.css new file mode 100644 index 0000000000..c4b8a2f77e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/tern/tern.css @@ -0,0 +1,87 @@ +.CodeMirror-Tern-completion { + padding-left: 22px; + position: relative; + line-height: 1.5; +} +.CodeMirror-Tern-completion:before { + position: absolute; + left: 2px; + bottom: 2px; + border-radius: 50%; + font-size: 12px; + font-weight: bold; + height: 15px; + width: 15px; + line-height: 16px; + text-align: center; + color: white; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.CodeMirror-Tern-completion-unknown:before { + content: "?"; + background: #4bb; +} +.CodeMirror-Tern-completion-object:before { + content: "O"; + background: #77c; +} +.CodeMirror-Tern-completion-fn:before { + content: "F"; + background: #7c7; +} +.CodeMirror-Tern-completion-array:before { + content: "A"; + background: #c66; +} +.CodeMirror-Tern-completion-number:before { + content: "1"; + background: #999; +} +.CodeMirror-Tern-completion-string:before { + content: "S"; + background: #999; +} +.CodeMirror-Tern-completion-bool:before { + content: "B"; + background: #999; +} + +.CodeMirror-Tern-completion-guess { + color: #999; +} + +.CodeMirror-Tern-tooltip { + border: 1px solid silver; + border-radius: 3px; + color: #444; + padding: 2px 5px; + font-size: 90%; + font-family: monospace; + background-color: white; + white-space: pre-wrap; + + max-width: 40em; + position: absolute; + z-index: 10; + -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + box-shadow: 2px 3px 5px rgba(0,0,0,.2); + + transition: opacity 1s; + -moz-transition: opacity 1s; + -webkit-transition: opacity 1s; + -o-transition: opacity 1s; + -ms-transition: opacity 1s; +} + +.CodeMirror-Tern-hint-doc { + max-width: 25em; + margin-top: -3px; +} + +.CodeMirror-Tern-fname { color: black; } +.CodeMirror-Tern-farg { color: #70a; } +.CodeMirror-Tern-farg-current { text-decoration: underline; } +.CodeMirror-Tern-type { color: #07c; } +.CodeMirror-Tern-fhint-guess { opacity: .7; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/tern/tern.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/tern/tern.js new file mode 100644 index 0000000000..a88371747c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/tern/tern.js @@ -0,0 +1,750 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Glue code between CodeMirror and Tern. +// +// Create a CodeMirror.TernServer to wrap an actual Tern server, +// register open documents (CodeMirror.Doc instances) with it, and +// call its methods to activate the assisting functions that Tern +// provides. +// +// Options supported (all optional): +// * defs: An array of JSON definition data structures. +// * plugins: An object mapping plugin names to configuration +// options. +// * getFile: A function(name, c) that can be used to access files in +// the project that haven't been loaded yet. Simply do c(null) to +// indicate that a file is not available. +// * fileFilter: A function(value, docName, doc) that will be applied +// to documents before passing them on to Tern. +// * switchToDoc: A function(name, doc) that should, when providing a +// multi-file view, switch the view or focus to the named file. +// * showError: A function(editor, message) that can be used to +// override the way errors are displayed. +// * completionTip: Customize the content in tooltips for completions. +// Is passed a single argument—the completion's data as returned by +// Tern—and may return a string, DOM node, or null to indicate that +// no tip should be shown. By default the docstring is shown. +// * typeTip: Like completionTip, but for the tooltips shown for type +// queries. +// * responseFilter: A function(doc, query, request, error, data) that +// will be applied to the Tern responses before treating them +// +// +// It is possible to run the Tern server in a web worker by specifying +// these additional options: +// * useWorker: Set to true to enable web worker mode. You'll probably +// want to feature detect the actual value you use here, for example +// !!window.Worker. +// * workerScript: The main script of the worker. Point this to +// wherever you are hosting worker.js from this directory. +// * workerDeps: An array of paths pointing (relative to workerScript) +// to the Acorn and Tern libraries and any Tern plugins you want to +// load. Or, if you minified those into a single script and included +// them in the workerScript, simply leave this undefined. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + // declare global: tern + + CodeMirror.TernServer = function(options) { + var self = this; + this.options = options || {}; + var plugins = this.options.plugins || (this.options.plugins = {}); + if (!plugins.doc_comment) plugins.doc_comment = true; + this.docs = Object.create(null); + if (this.options.useWorker) { + this.server = new WorkerServer(this); + } else { + this.server = new tern.Server({ + getFile: function(name, c) { return getFile(self, name, c); }, + async: true, + defs: this.options.defs || [], + plugins: plugins + }); + } + this.trackChange = function(doc, change) { trackChange(self, doc, change); }; + + this.cachedArgHints = null; + this.activeArgHints = null; + this.jumpStack = []; + + this.getHint = function(cm, c) { return hint(self, cm, c); }; + this.getHint.async = true; + }; + + CodeMirror.TernServer.prototype = { + addDoc: function(name, doc) { + var data = {doc: doc, name: name, changed: null}; + this.server.addFile(name, docValue(this, data)); + CodeMirror.on(doc, "change", this.trackChange); + return this.docs[name] = data; + }, + + delDoc: function(id) { + var found = resolveDoc(this, id); + if (!found) return; + CodeMirror.off(found.doc, "change", this.trackChange); + delete this.docs[found.name]; + this.server.delFile(found.name); + }, + + hideDoc: function(id) { + closeArgHints(this); + var found = resolveDoc(this, id); + if (found && found.changed) sendDoc(this, found); + }, + + complete: function(cm) { + cm.showHint({hint: this.getHint}); + }, + + showType: function(cm, pos, c) { showContextInfo(this, cm, pos, "type", c); }, + + showDocs: function(cm, pos, c) { showContextInfo(this, cm, pos, "documentation", c); }, + + updateArgHints: function(cm) { updateArgHints(this, cm); }, + + jumpToDef: function(cm) { jumpToDef(this, cm); }, + + jumpBack: function(cm) { jumpBack(this, cm); }, + + rename: function(cm) { rename(this, cm); }, + + selectName: function(cm) { selectName(this, cm); }, + + request: function (cm, query, c, pos) { + var self = this; + var doc = findDoc(this, cm.getDoc()); + var request = buildRequest(this, doc, query, pos); + var extraOptions = request.query && this.options.queryOptions && this.options.queryOptions[request.query.type] + if (extraOptions) for (var prop in extraOptions) request.query[prop] = extraOptions[prop]; + + this.server.request(request, function (error, data) { + if (!error && self.options.responseFilter) + data = self.options.responseFilter(doc, query, request, error, data); + c(error, data); + }); + }, + + destroy: function () { + closeArgHints(this) + if (this.worker) { + this.worker.terminate(); + this.worker = null; + } + } + }; + + var Pos = CodeMirror.Pos; + var cls = "CodeMirror-Tern-"; + var bigDoc = 250; + + function getFile(ts, name, c) { + var buf = ts.docs[name]; + if (buf) + c(docValue(ts, buf)); + else if (ts.options.getFile) + ts.options.getFile(name, c); + else + c(null); + } + + function findDoc(ts, doc, name) { + for (var n in ts.docs) { + var cur = ts.docs[n]; + if (cur.doc == doc) return cur; + } + if (!name) for (var i = 0;; ++i) { + n = "[doc" + (i || "") + "]"; + if (!ts.docs[n]) { name = n; break; } + } + return ts.addDoc(name, doc); + } + + function resolveDoc(ts, id) { + if (typeof id == "string") return ts.docs[id]; + if (id instanceof CodeMirror) id = id.getDoc(); + if (id instanceof CodeMirror.Doc) return findDoc(ts, id); + } + + function trackChange(ts, doc, change) { + var data = findDoc(ts, doc); + + var argHints = ts.cachedArgHints; + if (argHints && argHints.doc == doc && cmpPos(argHints.start, change.to) >= 0) + ts.cachedArgHints = null; + + var changed = data.changed; + if (changed == null) + data.changed = changed = {from: change.from.line, to: change.from.line}; + var end = change.from.line + (change.text.length - 1); + if (change.from.line < changed.to) changed.to = changed.to - (change.to.line - end); + if (end >= changed.to) changed.to = end + 1; + if (changed.from > change.from.line) changed.from = change.from.line; + + if (doc.lineCount() > bigDoc && change.to - changed.from > 100) setTimeout(function() { + if (data.changed && data.changed.to - data.changed.from > 100) sendDoc(ts, data); + }, 200); + } + + function sendDoc(ts, doc) { + ts.server.request({files: [{type: "full", name: doc.name, text: docValue(ts, doc)}]}, function(error) { + if (error) window.console.error(error); + else doc.changed = null; + }); + } + + // Completion + + function hint(ts, cm, c) { + ts.request(cm, {type: "completions", types: true, docs: true, urls: true}, function(error, data) { + if (error) return showError(ts, cm, error); + var completions = [], after = ""; + var from = data.start, to = data.end; + if (cm.getRange(Pos(from.line, from.ch - 2), from) == "[\"" && + cm.getRange(to, Pos(to.line, to.ch + 2)) != "\"]") + after = "\"]"; + + for (var i = 0; i < data.completions.length; ++i) { + var completion = data.completions[i], className = typeToIcon(completion.type); + if (data.guess) className += " " + cls + "guess"; + completions.push({text: completion.name + after, + displayText: completion.displayName || completion.name, + className: className, + data: completion}); + } + + var obj = {from: from, to: to, list: completions}; + var tooltip = null; + CodeMirror.on(obj, "close", function() { remove(tooltip); }); + CodeMirror.on(obj, "update", function() { remove(tooltip); }); + CodeMirror.on(obj, "select", function(cur, node) { + remove(tooltip); + var content = ts.options.completionTip ? ts.options.completionTip(cur.data) : cur.data.doc; + if (content) { + tooltip = makeTooltip(node.parentNode.getBoundingClientRect().right + window.pageXOffset, + node.getBoundingClientRect().top + window.pageYOffset, content, cm, cls + "hint-doc"); + } + }); + c(obj); + }); + } + + function typeToIcon(type) { + var suffix; + if (type == "?") suffix = "unknown"; + else if (type == "number" || type == "string" || type == "bool") suffix = type; + else if (/^fn\(/.test(type)) suffix = "fn"; + else if (/^\[/.test(type)) suffix = "array"; + else suffix = "object"; + return cls + "completion " + cls + "completion-" + suffix; + } + + // Type queries + + function showContextInfo(ts, cm, pos, queryName, c) { + ts.request(cm, queryName, function(error, data) { + if (error) return showError(ts, cm, error); + if (ts.options.typeTip) { + var tip = ts.options.typeTip(data); + } else { + var tip = elt("span", null, elt("strong", null, data.type || "not found")); + if (data.doc) + tip.appendChild(document.createTextNode(" — " + data.doc)); + if (data.url) { + tip.appendChild(document.createTextNode(" ")); + var child = tip.appendChild(elt("a", null, "[docs]")); + child.href = data.url; + child.target = "_blank"; + } + } + tempTooltip(cm, tip, ts); + if (c) c(); + }, pos); + } + + // Maintaining argument hints + + function updateArgHints(ts, cm) { + closeArgHints(ts); + + if (cm.somethingSelected()) return; + var state = cm.getTokenAt(cm.getCursor()).state; + var inner = CodeMirror.innerMode(cm.getMode(), state); + if (inner.mode.name != "javascript") return; + var lex = inner.state.lexical; + if (lex.info != "call") return; + + var ch, argPos = lex.pos || 0, tabSize = cm.getOption("tabSize"); + for (var line = cm.getCursor().line, e = Math.max(0, line - 9), found = false; line >= e; --line) { + var str = cm.getLine(line), extra = 0; + for (var pos = 0;;) { + var tab = str.indexOf("\t", pos); + if (tab == -1) break; + extra += tabSize - (tab + extra) % tabSize - 1; + pos = tab + 1; + } + ch = lex.column - extra; + if (str.charAt(ch) == "(") {found = true; break;} + } + if (!found) return; + + var start = Pos(line, ch); + var cache = ts.cachedArgHints; + if (cache && cache.doc == cm.getDoc() && cmpPos(start, cache.start) == 0) + return showArgHints(ts, cm, argPos); + + ts.request(cm, {type: "type", preferFunction: true, end: start}, function(error, data) { + if (error || !data.type || !(/^fn\(/).test(data.type)) return; + ts.cachedArgHints = { + start: start, + type: parseFnType(data.type), + name: data.exprName || data.name || "fn", + guess: data.guess, + doc: cm.getDoc() + }; + showArgHints(ts, cm, argPos); + }); + } + + function showArgHints(ts, cm, pos) { + closeArgHints(ts); + + var cache = ts.cachedArgHints, tp = cache.type; + var tip = elt("span", cache.guess ? cls + "fhint-guess" : null, + elt("span", cls + "fname", cache.name), "("); + for (var i = 0; i < tp.args.length; ++i) { + if (i) tip.appendChild(document.createTextNode(", ")); + var arg = tp.args[i]; + tip.appendChild(elt("span", cls + "farg" + (i == pos ? " " + cls + "farg-current" : ""), arg.name || "?")); + if (arg.type != "?") { + tip.appendChild(document.createTextNode(":\u00a0")); + tip.appendChild(elt("span", cls + "type", arg.type)); + } + } + tip.appendChild(document.createTextNode(tp.rettype ? ") ->\u00a0" : ")")); + if (tp.rettype) tip.appendChild(elt("span", cls + "type", tp.rettype)); + var place = cm.cursorCoords(null, "page"); + var tooltip = ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip, cm) + setTimeout(function() { + tooltip.clear = onEditorActivity(cm, function() { + if (ts.activeArgHints == tooltip) closeArgHints(ts) }) + }, 20) + } + + function parseFnType(text) { + var args = [], pos = 3; + + function skipMatching(upto) { + var depth = 0, start = pos; + for (;;) { + var next = text.charAt(pos); + if (upto.test(next) && !depth) return text.slice(start, pos); + if (/[{\[\(]/.test(next)) ++depth; + else if (/[}\]\)]/.test(next)) --depth; + ++pos; + } + } + + // Parse arguments + if (text.charAt(pos) != ")") for (;;) { + var name = text.slice(pos).match(/^([^, \(\[\{]+): /); + if (name) { + pos += name[0].length; + name = name[1]; + } + args.push({name: name, type: skipMatching(/[\),]/)}); + if (text.charAt(pos) == ")") break; + pos += 2; + } + + var rettype = text.slice(pos).match(/^\) -> (.*)$/); + + return {args: args, rettype: rettype && rettype[1]}; + } + + // Moving to the definition of something + + function jumpToDef(ts, cm) { + function inner(varName) { + var req = {type: "definition", variable: varName || null}; + var doc = findDoc(ts, cm.getDoc()); + ts.server.request(buildRequest(ts, doc, req), function(error, data) { + if (error) return showError(ts, cm, error); + if (!data.file && data.url) { window.open(data.url); return; } + + if (data.file) { + var localDoc = ts.docs[data.file], found; + if (localDoc && (found = findContext(localDoc.doc, data))) { + ts.jumpStack.push({file: doc.name, + start: cm.getCursor("from"), + end: cm.getCursor("to")}); + moveTo(ts, doc, localDoc, found.start, found.end); + return; + } + } + showError(ts, cm, "Could not find a definition."); + }); + } + + if (!atInterestingExpression(cm)) + dialog(cm, "Jump to variable", function(name) { if (name) inner(name); }); + else + inner(); + } + + function jumpBack(ts, cm) { + var pos = ts.jumpStack.pop(), doc = pos && ts.docs[pos.file]; + if (!doc) return; + moveTo(ts, findDoc(ts, cm.getDoc()), doc, pos.start, pos.end); + } + + function moveTo(ts, curDoc, doc, start, end) { + doc.doc.setSelection(start, end); + if (curDoc != doc && ts.options.switchToDoc) { + closeArgHints(ts); + ts.options.switchToDoc(doc.name, doc.doc); + } + } + + // The {line,ch} representation of positions makes this rather awkward. + function findContext(doc, data) { + var before = data.context.slice(0, data.contextOffset).split("\n"); + var startLine = data.start.line - (before.length - 1); + var start = Pos(startLine, (before.length == 1 ? data.start.ch : doc.getLine(startLine).length) - before[0].length); + + var text = doc.getLine(startLine).slice(start.ch); + for (var cur = startLine + 1; cur < doc.lineCount() && text.length < data.context.length; ++cur) + text += "\n" + doc.getLine(cur); + if (text.slice(0, data.context.length) == data.context) return data; + + var cursor = doc.getSearchCursor(data.context, 0, false); + var nearest, nearestDist = Infinity; + while (cursor.findNext()) { + var from = cursor.from(), dist = Math.abs(from.line - start.line) * 10000; + if (!dist) dist = Math.abs(from.ch - start.ch); + if (dist < nearestDist) { nearest = from; nearestDist = dist; } + } + if (!nearest) return null; + + if (before.length == 1) + nearest.ch += before[0].length; + else + nearest = Pos(nearest.line + (before.length - 1), before[before.length - 1].length); + if (data.start.line == data.end.line) + var end = Pos(nearest.line, nearest.ch + (data.end.ch - data.start.ch)); + else + var end = Pos(nearest.line + (data.end.line - data.start.line), data.end.ch); + return {start: nearest, end: end}; + } + + function atInterestingExpression(cm) { + var pos = cm.getCursor("end"), tok = cm.getTokenAt(pos); + if (tok.start < pos.ch && tok.type == "comment") return false; + return /[\w)\]]/.test(cm.getLine(pos.line).slice(Math.max(pos.ch - 1, 0), pos.ch + 1)); + } + + // Variable renaming + + function rename(ts, cm) { + var token = cm.getTokenAt(cm.getCursor()); + if (!/\w/.test(token.string)) return showError(ts, cm, "Not at a variable"); + dialog(cm, "New name for " + token.string, function(newName) { + ts.request(cm, {type: "rename", newName: newName, fullDocs: true}, function(error, data) { + if (error) return showError(ts, cm, error); + applyChanges(ts, data.changes); + }); + }); + } + + function selectName(ts, cm) { + var name = findDoc(ts, cm.doc).name; + ts.request(cm, {type: "refs"}, function(error, data) { + if (error) return showError(ts, cm, error); + var ranges = [], cur = 0; + var curPos = cm.getCursor(); + for (var i = 0; i < data.refs.length; i++) { + var ref = data.refs[i]; + if (ref.file == name) { + ranges.push({anchor: ref.start, head: ref.end}); + if (cmpPos(curPos, ref.start) >= 0 && cmpPos(curPos, ref.end) <= 0) + cur = ranges.length - 1; + } + } + cm.setSelections(ranges, cur); + }); + } + + var nextChangeOrig = 0; + function applyChanges(ts, changes) { + var perFile = Object.create(null); + for (var i = 0; i < changes.length; ++i) { + var ch = changes[i]; + (perFile[ch.file] || (perFile[ch.file] = [])).push(ch); + } + for (var file in perFile) { + var known = ts.docs[file], chs = perFile[file];; + if (!known) continue; + chs.sort(function(a, b) { return cmpPos(b.start, a.start); }); + var origin = "*rename" + (++nextChangeOrig); + for (var i = 0; i < chs.length; ++i) { + var ch = chs[i]; + known.doc.replaceRange(ch.text, ch.start, ch.end, origin); + } + } + } + + // Generic request-building helper + + function buildRequest(ts, doc, query, pos) { + var files = [], offsetLines = 0, allowFragments = !query.fullDocs; + if (!allowFragments) delete query.fullDocs; + if (typeof query == "string") query = {type: query}; + query.lineCharPositions = true; + if (query.end == null) { + query.end = pos || doc.doc.getCursor("end"); + if (doc.doc.somethingSelected()) + query.start = doc.doc.getCursor("start"); + } + var startPos = query.start || query.end; + + if (doc.changed) { + if (doc.doc.lineCount() > bigDoc && allowFragments !== false && + doc.changed.to - doc.changed.from < 100 && + doc.changed.from <= startPos.line && doc.changed.to > query.end.line) { + files.push(getFragmentAround(doc, startPos, query.end)); + query.file = "#0"; + var offsetLines = files[0].offsetLines; + if (query.start != null) query.start = Pos(query.start.line - -offsetLines, query.start.ch); + query.end = Pos(query.end.line - offsetLines, query.end.ch); + } else { + files.push({type: "full", + name: doc.name, + text: docValue(ts, doc)}); + query.file = doc.name; + doc.changed = null; + } + } else { + query.file = doc.name; + } + for (var name in ts.docs) { + var cur = ts.docs[name]; + if (cur.changed && cur != doc) { + files.push({type: "full", name: cur.name, text: docValue(ts, cur)}); + cur.changed = null; + } + } + + return {query: query, files: files}; + } + + function getFragmentAround(data, start, end) { + var doc = data.doc; + var minIndent = null, minLine = null, endLine, tabSize = 4; + for (var p = start.line - 1, min = Math.max(0, p - 50); p >= min; --p) { + var line = doc.getLine(p), fn = line.search(/\bfunction\b/); + if (fn < 0) continue; + var indent = CodeMirror.countColumn(line, null, tabSize); + if (minIndent != null && minIndent <= indent) continue; + minIndent = indent; + minLine = p; + } + if (minLine == null) minLine = min; + var max = Math.min(doc.lastLine(), end.line + 20); + if (minIndent == null || minIndent == CodeMirror.countColumn(doc.getLine(start.line), null, tabSize)) + endLine = max; + else for (endLine = end.line + 1; endLine < max; ++endLine) { + var indent = CodeMirror.countColumn(doc.getLine(endLine), null, tabSize); + if (indent <= minIndent) break; + } + var from = Pos(minLine, 0); + + return {type: "part", + name: data.name, + offsetLines: from.line, + text: doc.getRange(from, Pos(endLine, end.line == endLine ? null : 0))}; + } + + // Generic utilities + + var cmpPos = CodeMirror.cmpPos; + + function elt(tagname, cls /*, ... elts*/) { + var e = document.createElement(tagname); + if (cls) e.className = cls; + for (var i = 2; i < arguments.length; ++i) { + var elt = arguments[i]; + if (typeof elt == "string") elt = document.createTextNode(elt); + e.appendChild(elt); + } + return e; + } + + function dialog(cm, text, f) { + if (cm.openDialog) + cm.openDialog(text + ": ", f); + else + f(prompt(text, "")); + } + + // Tooltips + + function tempTooltip(cm, content, ts) { + if (cm.state.ternTooltip) remove(cm.state.ternTooltip); + var where = cm.cursorCoords(); + var tip = cm.state.ternTooltip = makeTooltip(where.right + 1, where.bottom, content, cm); + function maybeClear() { + old = true; + if (!mouseOnTip) clear(); + } + function clear() { + cm.state.ternTooltip = null; + if (tip.parentNode) fadeOut(tip) + clearActivity() + } + var mouseOnTip = false, old = false; + CodeMirror.on(tip, "mousemove", function() { mouseOnTip = true; }); + CodeMirror.on(tip, "mouseout", function(e) { + var related = e.relatedTarget || e.toElement + if (!related || !CodeMirror.contains(tip, related)) { + if (old) clear(); + else mouseOnTip = false; + } + }); + setTimeout(maybeClear, ts.options.hintDelay ? ts.options.hintDelay : 1700); + var clearActivity = onEditorActivity(cm, clear) + } + + function onEditorActivity(cm, f) { + cm.on("cursorActivity", f) + cm.on("blur", f) + cm.on("scroll", f) + cm.on("setDoc", f) + return function() { + cm.off("cursorActivity", f) + cm.off("blur", f) + cm.off("scroll", f) + cm.off("setDoc", f) + } + } + + function makeTooltip(x, y, content, cm, className) { + var node = elt("div", cls + "tooltip" + " " + (className || ""), content); + node.style.left = x + "px"; + node.style.top = y + "px"; + var container = ((cm.options || {}).hintOptions || {}).container || document.body; + container.appendChild(node); + + var pos = cm.cursorCoords(); + var winW = window.innerWidth; + var winH = window.innerHeight; + var box = node.getBoundingClientRect(); + var hints = document.querySelector(".CodeMirror-hints"); + var overlapY = box.bottom - winH; + var overlapX = box.right - winW; + + if (hints && overlapX > 0) { + node.style.left = 0; + var box = node.getBoundingClientRect(); + node.style.left = (x = x - hints.offsetWidth - box.width) + "px"; + overlapX = box.right - winW; + } + if (overlapY > 0) { + var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top); + if (curTop - height > 0) { // Fits above cursor + node.style.top = (pos.top - height) + "px"; + } else if (height > winH) { + node.style.height = (winH - 5) + "px"; + node.style.top = (pos.bottom - box.top) + "px"; + } + } + if (overlapX > 0) { + if (box.right - box.left > winW) { + node.style.width = (winW - 5) + "px"; + overlapX -= (box.right - box.left) - winW; + } + node.style.left = (x - overlapX) + "px"; + } + + return node; + } + + function remove(node) { + var p = node && node.parentNode; + if (p) p.removeChild(node); + } + + function fadeOut(tooltip) { + tooltip.style.opacity = "0"; + setTimeout(function() { remove(tooltip); }, 1100); + } + + function showError(ts, cm, msg) { + if (ts.options.showError) + ts.options.showError(cm, msg); + else + tempTooltip(cm, String(msg), ts); + } + + function closeArgHints(ts) { + if (ts.activeArgHints) { + if (ts.activeArgHints.clear) ts.activeArgHints.clear() + remove(ts.activeArgHints) + ts.activeArgHints = null + } + } + + function docValue(ts, doc) { + var val = doc.doc.getValue(); + if (ts.options.fileFilter) val = ts.options.fileFilter(val, doc.name, doc.doc); + return val; + } + + // Worker wrapper + + function WorkerServer(ts) { + var worker = ts.worker = new Worker(ts.options.workerScript); + worker.postMessage({type: "init", + defs: ts.options.defs, + plugins: ts.options.plugins, + scripts: ts.options.workerDeps}); + var msgId = 0, pending = {}; + + function send(data, c) { + if (c) { + data.id = ++msgId; + pending[msgId] = c; + } + worker.postMessage(data); + } + worker.onmessage = function(e) { + var data = e.data; + if (data.type == "getFile") { + getFile(ts, data.name, function(err, text) { + send({type: "getFile", err: String(err), text: text, id: data.id}); + }); + } else if (data.type == "debug") { + window.console.log(data.message); + } else if (data.id && pending[data.id]) { + pending[data.id](data.err, data.body); + delete pending[data.id]; + } + }; + worker.onerror = function(e) { + for (var id in pending) pending[id](e); + pending = {}; + }; + + this.addFile = function(name, text) { send({type: "add", name: name, text: text}); }; + this.delFile = function(name) { send({type: "del", name: name}); }; + this.request = function(body, c) { send({type: "req", body: body}, c); }; + } +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/tern/worker.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/tern/worker.js new file mode 100644 index 0000000000..e134ad47d6 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/tern/worker.js @@ -0,0 +1,44 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// declare global: tern, server + +var server; + +this.onmessage = function(e) { + var data = e.data; + switch (data.type) { + case "init": return startServer(data.defs, data.plugins, data.scripts); + case "add": return server.addFile(data.name, data.text); + case "del": return server.delFile(data.name); + case "req": return server.request(data.body, function(err, reqData) { + postMessage({id: data.id, body: reqData, err: err && String(err)}); + }); + case "getFile": + var c = pending[data.id]; + delete pending[data.id]; + return c(data.err, data.text); + default: throw new Error("Unknown message type: " + data.type); + } +}; + +var nextId = 0, pending = {}; +function getFile(file, c) { + postMessage({type: "getFile", name: file, id: ++nextId}); + pending[nextId] = c; +} + +function startServer(defs, plugins, scripts) { + if (scripts) importScripts.apply(null, scripts); + + server = new tern.Server({ + getFile: getFile, + async: true, + defs: defs, + plugins: plugins + }); +} + +this.console = { + log: function(v) { postMessage({type: "debug", message: v}); } +}; diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/wrap/hardwrap.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/wrap/hardwrap.js new file mode 100644 index 0000000000..516368c80d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/addon/wrap/hardwrap.js @@ -0,0 +1,160 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var Pos = CodeMirror.Pos; + + function findParagraph(cm, pos, options) { + var startRE = options.paragraphStart || cm.getHelper(pos, "paragraphStart"); + for (var start = pos.line, first = cm.firstLine(); start > first; --start) { + var line = cm.getLine(start); + if (startRE && startRE.test(line)) break; + if (!/\S/.test(line)) { ++start; break; } + } + var endRE = options.paragraphEnd || cm.getHelper(pos, "paragraphEnd"); + for (var end = pos.line + 1, last = cm.lastLine(); end <= last; ++end) { + var line = cm.getLine(end); + if (endRE && endRE.test(line)) { ++end; break; } + if (!/\S/.test(line)) break; + } + return {from: start, to: end}; + } + + function findBreakPoint(text, column, wrapOn, killTrailingSpace, forceBreak) { + var at = column + while (at < text.length && text.charAt(at) == " ") at++ + for (; at > 0; --at) + if (wrapOn.test(text.slice(at - 1, at + 1))) break; + + if (!forceBreak && at <= text.match(/^[ \t]*/)[0].length) { + // didn't find a break point before column, in non-forceBreak mode try to + // find one after 'column'. + for (at = column + 1; at < text.length - 1; ++at) { + if (wrapOn.test(text.slice(at - 1, at + 1))) break; + } + } + + for (var first = true;; first = false) { + var endOfText = at; + if (killTrailingSpace) + while (text.charAt(endOfText - 1) == " ") --endOfText; + if (endOfText == 0 && first) at = column; + else return {from: endOfText, to: at}; + } + } + + function wrapRange(cm, from, to, options) { + from = cm.clipPos(from); to = cm.clipPos(to); + var column = options.column || 80; + var wrapOn = options.wrapOn || /\s\S|-[^\.\d]/; + var forceBreak = options.forceBreak !== false; + var killTrailing = options.killTrailingSpace !== false; + var changes = [], curLine = "", curNo = from.line; + var lines = cm.getRange(from, to, false); + if (!lines.length) return null; + var leadingSpace = lines[0].match(/^[ \t]*/)[0]; + if (leadingSpace.length >= column) column = leadingSpace.length + 1 + + for (var i = 0; i < lines.length; ++i) { + var text = lines[i], oldLen = curLine.length, spaceInserted = 0; + if (curLine && text && !wrapOn.test(curLine.charAt(curLine.length - 1) + text.charAt(0))) { + curLine += " "; + spaceInserted = 1; + } + var spaceTrimmed = ""; + if (i) { + spaceTrimmed = text.match(/^\s*/)[0]; + text = text.slice(spaceTrimmed.length); + } + curLine += text; + if (i) { + var firstBreak = curLine.length > column && leadingSpace == spaceTrimmed && + findBreakPoint(curLine, column, wrapOn, killTrailing, forceBreak); + // If this isn't broken, or is broken at a different point, remove old break + if (!firstBreak || firstBreak.from != oldLen || firstBreak.to != oldLen + spaceInserted) { + changes.push({text: [spaceInserted ? " " : ""], + from: Pos(curNo, oldLen), + to: Pos(curNo + 1, spaceTrimmed.length)}); + } else { + curLine = leadingSpace + text; + ++curNo; + } + } + while (curLine.length > column) { + var bp = findBreakPoint(curLine, column, wrapOn, killTrailing, forceBreak); + if (bp.from != bp.to || + forceBreak && leadingSpace !== curLine.slice(0, bp.to)) { + changes.push({text: ["", leadingSpace], + from: Pos(curNo, bp.from), + to: Pos(curNo, bp.to)}); + curLine = leadingSpace + curLine.slice(bp.to); + ++curNo; + } else { + break; + } + } + } + if (changes.length) cm.operation(function() { + for (var i = 0; i < changes.length; ++i) { + var change = changes[i]; + if (change.text || CodeMirror.cmpPos(change.from, change.to)) + cm.replaceRange(change.text, change.from, change.to); + } + }); + return changes.length ? {from: changes[0].from, to: CodeMirror.changeEnd(changes[changes.length - 1])} : null; + } + + CodeMirror.defineExtension("wrapParagraph", function(pos, options) { + options = options || {}; + if (!pos) pos = this.getCursor(); + var para = findParagraph(this, pos, options); + return wrapRange(this, Pos(para.from, 0), Pos(para.to - 1), options); + }); + + CodeMirror.commands.wrapLines = function(cm) { + cm.operation(function() { + var ranges = cm.listSelections(), at = cm.lastLine() + 1; + for (var i = ranges.length - 1; i >= 0; i--) { + var range = ranges[i], span; + if (range.empty()) { + var para = findParagraph(cm, range.head, {}); + span = {from: Pos(para.from, 0), to: Pos(para.to - 1)}; + } else { + span = {from: range.from(), to: range.to()}; + } + if (span.to.line >= at) continue; + at = span.from.line; + wrapRange(cm, span.from, span.to, {}); + } + }); + }; + + CodeMirror.defineExtension("wrapRange", function(from, to, options) { + return wrapRange(this, from, to, options || {}); + }); + + CodeMirror.defineExtension("wrapParagraphsInRange", function(from, to, options) { + options = options || {}; + var cm = this, paras = []; + for (var line = from.line; line <= to.line;) { + var para = findParagraph(cm, Pos(line, 0), options); + paras.push(para); + line = para.to; + } + var madeChange = false; + if (paras.length) cm.operation(function() { + for (var i = paras.length - 1; i >= 0; --i) + madeChange = madeChange || wrapRange(cm, Pos(paras[i].from, 0), Pos(paras[i].to - 1), options); + }); + return madeChange; + }); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/codemirror.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/codemirror.css new file mode 100644 index 0000000000..f4d5718a78 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/codemirror.css @@ -0,0 +1,344 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; + color: black; + direction: ltr; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + white-space: nowrap; +} + +.CodeMirror-guttermarker { color: black; } +.CodeMirror-guttermarker-subtle { color: #999; } + +/* CURSOR */ + +.CodeMirror-cursor { + border-left: 1px solid black; + border-right: none; + width: 0; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.cm-fat-cursor .CodeMirror-cursor { + width: auto; + border: 0 !important; + background: #7e7; +} +.cm-fat-cursor div.CodeMirror-cursors { + z-index: 1; +} +.cm-fat-cursor .CodeMirror-line::selection, +.cm-fat-cursor .CodeMirror-line > span::selection, +.cm-fat-cursor .CodeMirror-line > span > span::selection { background: transparent; } +.cm-fat-cursor .CodeMirror-line::-moz-selection, +.cm-fat-cursor .CodeMirror-line > span::-moz-selection, +.cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { background: transparent; } +.cm-fat-cursor { caret-color: transparent; } +@-moz-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@-webkit-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} + +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror-overwrite .CodeMirror-cursor {} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-rulers { + position: absolute; + left: 0; right: 0; top: -50px; bottom: 0; + overflow: hidden; +} +.CodeMirror-ruler { + border-left: 1px solid #ccc; + top: 0; bottom: 0; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} +.cm-strikethrough {text-decoration: line-through;} + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +.CodeMirror-composing { border-bottom: 2px solid; } + +/* Default styles for common addons */ + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;} +.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + position: relative; + overflow: hidden; + background: white; +} + +.CodeMirror-scroll { + overflow: scroll !important; /* Things will break if this is overridden */ + /* 50px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -50px; margin-right: -50px; + padding-bottom: 50px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; + z-index: 0; +} +.CodeMirror-sizer { + position: relative; + border-right: 50px solid transparent; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actual scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; + outline: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + min-height: 100%; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + display: inline-block; + vertical-align: top; + margin-bottom: -50px; +} +.CodeMirror-gutter-wrapper { + position: absolute; + z-index: 4; + background: none !important; + border: none !important; +} +.CodeMirror-gutter-background { + position: absolute; + top: 0; bottom: 0; + z-index: 4; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} +.CodeMirror-gutter-wrapper ::selection { background-color: transparent } +.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent } + +.CodeMirror-lines { + cursor: text; + min-height: 1px; /* prevents collapsing before first draw */ +} +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; + -webkit-tap-highlight-color: transparent; + -webkit-font-variant-ligatures: contextual; + font-variant-ligatures: contextual; +} +.CodeMirror-wrap pre.CodeMirror-line, +.CodeMirror-wrap pre.CodeMirror-line-like { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + padding: 0.1px; /* Force widget margins to stay inside of the container */ +} + +.CodeMirror-widget {} + +.CodeMirror-rtl pre { direction: rtl; } + +.CodeMirror-code { + outline: none; +} + +/* Force content-box sizing for the elements where we expect it */ +.CodeMirror-scroll, +.CodeMirror-sizer, +.CodeMirror-gutter, +.CodeMirror-gutters, +.CodeMirror-linenumber { + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.CodeMirror-cursor { + position: absolute; + pointer-events: none; +} +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 3; +} +div.CodeMirror-dragcursors { + visibility: visible; +} + +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } +.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } + +.cm-searching { + background-color: #ffa; + background-color: rgba(255, 255, 0, .4); +} + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} + +/* See issue #2901 */ +.cm-tab-wrap-hack:after { content: ''; } + +/* Help users use markselection to safely style text background */ +span.CodeMirror-selectedtext { background: none; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/codemirror.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/codemirror.js new file mode 100644 index 0000000000..e142f1dbd0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/codemirror.js @@ -0,0 +1,9849 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// This is CodeMirror (https://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.CodeMirror = factory()); +}(this, (function () { 'use strict'; + + // Kludges for bugs and behavior differences that can't be feature + // detected are enabled based on userAgent etc sniffing. + var userAgent = navigator.userAgent; + var platform = navigator.platform; + + var gecko = /gecko\/\d/i.test(userAgent); + var ie_upto10 = /MSIE \d/.test(userAgent); + var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); + var edge = /Edge\/(\d+)/.exec(userAgent); + var ie = ie_upto10 || ie_11up || edge; + var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); + var webkit = !edge && /WebKit\//.test(userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); + var chrome = !edge && /Chrome\//.test(userAgent); + var presto = /Opera\//.test(userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); + var phantom = /PhantomJS/.test(userAgent); + + var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2); + var android = /Android/.test(userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); + var mac = ios || /Mac/.test(platform); + var chromeOS = /\bCrOS\b/.test(userAgent); + var windows = /win/i.test(platform); + + var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); + if (presto_version) { presto_version = Number(presto_version[1]); } + if (presto_version && presto_version >= 15) { presto = false; webkit = true; } + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); + var captureRightClick = gecko || (ie && ie_version >= 9); + + function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } + + var rmClass = function(node, cls) { + var current = node.className; + var match = classTest(cls).exec(current); + if (match) { + var after = current.slice(match.index + match[0].length); + node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); + } + }; + + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + { e.removeChild(e.firstChild); } + return e + } + + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e) + } + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) { e.className = className; } + if (style) { e.style.cssText = style; } + if (typeof content == "string") { e.appendChild(document.createTextNode(content)); } + else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } } + return e + } + // wrapper for elt, which removes the elt from the accessibility tree + function eltP(tag, content, className, style) { + var e = elt(tag, content, className, style); + e.setAttribute("role", "presentation"); + return e + } + + var range; + if (document.createRange) { range = function(node, start, end, endNode) { + var r = document.createRange(); + r.setEnd(endNode || node, end); + r.setStart(node, start); + return r + }; } + else { range = function(node, start, end) { + var r = document.body.createTextRange(); + try { r.moveToElementText(node.parentNode); } + catch(e) { return r } + r.collapse(true); + r.moveEnd("character", end); + r.moveStart("character", start); + return r + }; } + + function contains(parent, child) { + if (child.nodeType == 3) // Android browser always returns false when child is a textnode + { child = child.parentNode; } + if (parent.contains) + { return parent.contains(child) } + do { + if (child.nodeType == 11) { child = child.host; } + if (child == parent) { return true } + } while (child = child.parentNode) + } + + function activeElt() { + // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. + // IE < 10 will throw when accessed while the page is loading or in an iframe. + // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. + var activeElement; + try { + activeElement = document.activeElement; + } catch(e) { + activeElement = document.body || null; + } + while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) + { activeElement = activeElement.shadowRoot.activeElement; } + return activeElement + } + + function addClass(node, cls) { + var current = node.className; + if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; } + } + function joinClasses(a, b) { + var as = a.split(" "); + for (var i = 0; i < as.length; i++) + { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } } + return b + } + + var selectInput = function(node) { node.select(); }; + if (ios) // Mobile Safari apparently has a bug where select() is broken. + { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; } + else if (ie) // Suppress mysterious IE10 errors + { selectInput = function(node) { try { node.select(); } catch(_e) {} }; } + + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args)} + } + + function copyObj(obj, target, overwrite) { + if (!target) { target = {}; } + for (var prop in obj) + { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + { target[prop] = obj[prop]; } } + return target + } + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) { end = string.length; } + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) + { return n + (end - i) } + n += nextTab - i; + n += tabSize - (n % tabSize); + i = nextTab + 1; + } + } + + var Delayed = function() { + this.id = null; + this.f = null; + this.time = 0; + this.handler = bind(this.onTimeout, this); + }; + Delayed.prototype.onTimeout = function (self) { + self.id = 0; + if (self.time <= +new Date) { + self.f(); + } else { + setTimeout(self.handler, self.time - +new Date); + } + }; + Delayed.prototype.set = function (ms, f) { + this.f = f; + var time = +new Date + ms; + if (!this.id || time < this.time) { + clearTimeout(this.id); + this.id = setTimeout(this.handler, ms); + this.time = time; + } + }; + + function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + { if (array[i] == elt) { return i } } + return -1 + } + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerGap = 50; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = {toString: function(){return "CodeMirror.Pass"}}; + + // Reused option objects for setSelection & friends + var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; + + // The inverse of countColumn -- find the offset that corresponds to + // a particular column. + function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos); + if (nextTab == -1) { nextTab = string.length; } + var skipped = nextTab - pos; + if (nextTab == string.length || col + skipped >= goal) + { return pos + Math.min(skipped, goal - col) } + col += nextTab - pos; + col += tabSize - (col % tabSize); + pos = nextTab + 1; + if (col >= goal) { return pos } + } + } + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + { spaceStrs.push(lst(spaceStrs) + " "); } + return spaceStrs[n] + } + + function lst(arr) { return arr[arr.length-1] } + + function map(array, f) { + var out = []; + for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); } + return out + } + + function insertSorted(array, value, score) { + var pos = 0, priority = score(value); + while (pos < array.length && score(array[pos]) <= priority) { pos++; } + array.splice(pos, 0, value); + } + + function nothing() {} + + function createObj(base, props) { + var inst; + if (Object.create) { + inst = Object.create(base); + } else { + nothing.prototype = base; + inst = new nothing(); + } + if (props) { copyObj(props, inst); } + return inst + } + + var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + function isWordCharBasic(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) + } + function isWordChar(ch, helper) { + if (!helper) { return isWordCharBasic(ch) } + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } + return helper.test(ch) + } + + function isEmpty(obj) { + for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } + return true + } + + // Extending unicode characters. A series of a non-extending char + + // any number of extending chars is treated as a single unit as far + // as editing and measuring is concerned. This is not fully correct, + // since some scripts/fonts/browsers also treat other configurations + // of code points as a group. + var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; + function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } + + // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. + function skipExtendingChars(str, pos, dir) { + while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; } + return pos + } + + // Returns the value from the range [`from`; `to`] that satisfies + // `pred` and is closest to `from`. Assumes that at least `to` + // satisfies `pred`. Supports `from` being greater than `to`. + function findFirst(pred, from, to) { + // At any point we are certain `to` satisfies `pred`, don't know + // whether `from` does. + var dir = from > to ? -1 : 1; + for (;;) { + if (from == to) { return from } + var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); + if (mid == from) { return pred(mid) ? from : to } + if (pred(mid)) { to = mid; } + else { from = mid + dir; } + } + } + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) { return f(from, to, "ltr", 0) } + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i); + found = true; + } + } + if (!found) { f(from, to, "ltr"); } + } + + var bidiOther = null; + function getBidiPartAt(order, ch, sticky) { + var found; + bidiOther = null; + for (var i = 0; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < ch && cur.to > ch) { return i } + if (cur.to == ch) { + if (cur.from != cur.to && sticky == "before") { found = i; } + else { bidiOther = i; } + } + if (cur.from == ch) { + if (cur.from != cur.to && sticky != "before") { found = i; } + else { bidiOther = i; } + } + } + return found != null ? found : bidiOther + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; + // Character types for codepoints 0x600 to 0x6f9 + var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; + function charType(code) { + if (code <= 0xf7) { return lowTypes.charAt(code) } + else if (0x590 <= code && code <= 0x5f4) { return "R" } + else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) } + else if (0x6ee <= code && code <= 0x8ac) { return "r" } + else if (0x2000 <= code && code <= 0x200b) { return "w" } + else if (code == 0x200c) { return "b" } + else { return "L" } + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + + function BidiSpan(level, from, to) { + this.level = level; + this.from = from; this.to = to; + } + + return function(str, direction) { + var outerType = direction == "ltr" ? "L" : "R"; + + if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false } + var len = str.length, types = []; + for (var i = 0; i < len; ++i) + { types.push(charType(str.charCodeAt(i))); } + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { + var type = types[i$1]; + if (type == "m") { types[i$1] = prev; } + else { prev = type; } + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { + var type$1 = types[i$2]; + if (type$1 == "1" && cur == "r") { types[i$2] = "n"; } + else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { + var type$2 = types[i$3]; + if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; } + else if (type$2 == "," && prev$1 == types[i$3+1] && + (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; } + prev$1 = type$2; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i$4 = 0; i$4 < len; ++i$4) { + var type$3 = types[i$4]; + if (type$3 == ",") { types[i$4] = "N"; } + else if (type$3 == "%") { + var end = (void 0); + for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; + for (var j = i$4; j < end; ++j) { types[j] = replace; } + i$4 = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { + var type$4 = types[i$5]; + if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; } + else if (isStrong.test(type$4)) { cur$1 = type$4; } + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i$6 = 0; i$6 < len; ++i$6) { + if (isNeutral.test(types[i$6])) { + var end$1 = (void 0); + for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} + var before = (i$6 ? types[i$6-1] : outerType) == "L"; + var after = (end$1 < len ? types[end$1] : outerType) == "L"; + var replace$1 = before == after ? (before ? "L" : "R") : outerType; + for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; } + i$6 = end$1 - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i$7 = 0; i$7 < len;) { + if (countsAsLeft.test(types[i$7])) { + var start = i$7; + for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} + order.push(new BidiSpan(0, start, i$7)); + } else { + var pos = i$7, at = order.length, isRTL = direction == "rtl" ? 1 : 0; + for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} + for (var j$2 = pos; j$2 < i$7;) { + if (countsAsNum.test(types[j$2])) { + if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; } + var nstart = j$2; + for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} + order.splice(at, 0, new BidiSpan(2, nstart, j$2)); + at += isRTL; + pos = j$2; + } else { ++j$2; } + } + if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); } + } + } + if (direction == "ltr") { + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift(new BidiSpan(0, 0, m[0].length)); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push(new BidiSpan(0, len - m[0].length, len)); + } + } + + return direction == "rtl" ? order.reverse() : order + } + })(); + + // Get the bidi ordering for the given line (and cache it). Returns + // false for lines that are fully left-to-right, and an array of + // BidiSpan objects otherwise. + function getOrder(line, direction) { + var order = line.order; + if (order == null) { order = line.order = bidiOrdering(line.text, direction); } + return order + } + + // EVENT HANDLING + + // Lightweight event framework. on/off also work on DOM nodes, + // registering native DOM handlers. + + var noHandlers = []; + + var on = function(emitter, type, f) { + if (emitter.addEventListener) { + emitter.addEventListener(type, f, false); + } else if (emitter.attachEvent) { + emitter.attachEvent("on" + type, f); + } else { + var map = emitter._handlers || (emitter._handlers = {}); + map[type] = (map[type] || noHandlers).concat(f); + } + }; + + function getHandlers(emitter, type) { + return emitter._handlers && emitter._handlers[type] || noHandlers + } + + function off(emitter, type, f) { + if (emitter.removeEventListener) { + emitter.removeEventListener(type, f, false); + } else if (emitter.detachEvent) { + emitter.detachEvent("on" + type, f); + } else { + var map = emitter._handlers, arr = map && map[type]; + if (arr) { + var index = indexOf(arr, f); + if (index > -1) + { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); } + } + } + } + + function signal(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type); + if (!handlers.length) { return } + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); } + } + + // The DOM events that CodeMirror handles can be overridden by + // registering a (non-DOM) handler on the editor for the event name, + // and preventDefault-ing the event in that handler. + function signalDOMEvent(cm, e, override) { + if (typeof e == "string") + { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; } + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore + } + + function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity; + if (!arr) { return } + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); + for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) + { set.push(arr[i]); } } + } + + function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0 + } + + // Add on and off methods to a constructor's prototype, to make + // registering events on such objects more convenient. + function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f);}; + ctor.prototype.off = function(type, f) {off(this, type, f);}; + } + + // Due to the fact that we still support jurassic IE versions, some + // compatibility wrappers are needed. + + function e_preventDefault(e) { + if (e.preventDefault) { e.preventDefault(); } + else { e.returnValue = false; } + } + function e_stopPropagation(e) { + if (e.stopPropagation) { e.stopPropagation(); } + else { e.cancelBubble = true; } + } + function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false + } + function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} + + function e_target(e) {return e.target || e.srcElement} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) { b = 1; } + else if (e.button & 2) { b = 3; } + else if (e.button & 4) { b = 2; } + } + if (mac && e.ctrlKey && b == 1) { b = 3; } + return b + } + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) { return false } + var div = elt('div'); + return "draggable" in div || "dragDrop" in div + }(); + + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } + } + var node = zwspSupported ? elt("span", "\u200b") : + elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + node.setAttribute("cm-text", ""); + return node + } + + // Feature-detect IE's crummy client rect reporting for bidi text + var badBidiRects; + function hasBadBidiRects(measure) { + if (badBidiRects != null) { return badBidiRects } + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); + var r0 = range(txt, 0, 1).getBoundingClientRect(); + var r1 = range(txt, 1, 2).getBoundingClientRect(); + removeChildren(measure); + if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) + return badBidiRects = (r1.right - r0.right < 3) + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) { nl = string.length; } + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result + } : function (string) { return string.split(/\r\n?|\n/); }; + + var hasSelection = window.getSelection ? function (te) { + try { return te.selectionStart != te.selectionEnd } + catch(e) { return false } + } : function (te) { + var range; + try {range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) { return false } + return range.compareEndPoints("StartToEnd", range) != 0 + }; + + var hasCopyEvent = (function () { + var e = elt("div"); + if ("oncopy" in e) { return true } + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == "function" + })(); + + var badZoomedRects = null; + function hasBadZoomedRects(measure) { + if (badZoomedRects != null) { return badZoomedRects } + var node = removeChildrenAndAdd(measure, elt("span", "x")); + var normal = node.getBoundingClientRect(); + var fromRange = range(node, 0, 1).getBoundingClientRect(); + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 + } + + // Known modes, by name and by MIME + var modes = {}, mimeModes = {}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + function defineMode(name, mode) { + if (arguments.length > 2) + { mode.dependencies = Array.prototype.slice.call(arguments, 2); } + modes[name] = mode; + } + + function defineMIME(mime, spec) { + mimeModes[mime] = spec; + } + + // Given a MIME type, a {name, ...options} config object, or a name + // string, return a mode config object. + function resolveMode(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + if (typeof found == "string") { found = {name: found}; } + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return resolveMode("application/xml") + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { + return resolveMode("application/json") + } + if (typeof spec == "string") { return {name: spec} } + else { return spec || {name: "null"} } + } + + // Given a mode spec (anything that resolveMode accepts), find and + // initialize an actual mode object. + function getMode(options, spec) { + spec = resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) { return getMode(options, "text/plain") } + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) { continue } + if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; } + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) { modeObj.helperType = spec.helperType; } + if (spec.modeProps) { for (var prop$1 in spec.modeProps) + { modeObj[prop$1] = spec.modeProps[prop$1]; } } + + return modeObj + } + + // This can be used to attach properties to mode objects from + // outside the actual mode definition. + var modeExtensions = {}; + function extendMode(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); + } + + function copyState(mode, state) { + if (state === true) { return state } + if (mode.copyState) { return mode.copyState(state) } + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) { val = val.concat([]); } + nstate[n] = val; + } + return nstate + } + + // Given a mode and a state (for that mode), find the inner mode and + // state at the position that the state refers to. + function innerMode(mode, state) { + var info; + while (mode.innerMode) { + info = mode.innerMode(state); + if (!info || info.mode == mode) { break } + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state} + } + + function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true + } + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + var StringStream = function(string, tabSize, lineOracle) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; + this.lineOracle = lineOracle; + }; + + StringStream.prototype.eol = function () {return this.pos >= this.string.length}; + StringStream.prototype.sol = function () {return this.pos == this.lineStart}; + StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined}; + StringStream.prototype.next = function () { + if (this.pos < this.string.length) + { return this.string.charAt(this.pos++) } + }; + StringStream.prototype.eat = function (match) { + var ch = this.string.charAt(this.pos); + var ok; + if (typeof match == "string") { ok = ch == match; } + else { ok = ch && (match.test ? match.test(ch) : match(ch)); } + if (ok) {++this.pos; return ch} + }; + StringStream.prototype.eatWhile = function (match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start + }; + StringStream.prototype.eatSpace = function () { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; } + return this.pos > start + }; + StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;}; + StringStream.prototype.skipTo = function (ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true} + }; + StringStream.prototype.backUp = function (n) {this.pos -= n;}; + StringStream.prototype.column = function () { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) + }; + StringStream.prototype.indentation = function () { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) + }; + StringStream.prototype.match = function (pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; }; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) { this.pos += pattern.length; } + return true + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) { return null } + if (match && consume !== false) { this.pos += match[0].length; } + return match + } + }; + StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)}; + StringStream.prototype.hideFirstChars = function (n, inner) { + this.lineStart += n; + try { return inner() } + finally { this.lineStart -= n; } + }; + StringStream.prototype.lookAhead = function (n) { + var oracle = this.lineOracle; + return oracle && oracle.lookAhead(n) + }; + StringStream.prototype.baseToken = function () { + var oracle = this.lineOracle; + return oracle && oracle.baseToken(this.pos) + }; + + // Find the line object corresponding to the given line number. + function getLine(doc, n) { + n -= doc.first; + if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") } + var chunk = doc; + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break } + n -= sz; + } + } + return chunk.lines[n] + } + + // Get the part of a document between two positions, as an array of + // strings. + function getBetween(doc, start, end) { + var out = [], n = start.line; + doc.iter(start.line, end.line + 1, function (line) { + var text = line.text; + if (n == end.line) { text = text.slice(0, end.ch); } + if (n == start.line) { text = text.slice(start.ch); } + out.push(text); + ++n; + }); + return out + } + // Get the lines between from and to, as array of strings. + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value + return out + } + + // Update the height of a line, propagating the height change + // upwards to parent nodes. + function updateLineHeight(line, height) { + var diff = height - line.height; + if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } } + } + + // Given a line object, find its line number by walking up through + // its parent links. + function lineNo(line) { + if (line.parent == null) { return null } + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) { break } + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first + } + + // Find the line at the given vertical position, using the height + // information in the document tree. + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { + var child = chunk.children[i$1], ch = child.height; + if (h < ch) { chunk = child; continue outer } + h -= ch; + n += child.chunkSize(); + } + return n + } while (!chunk.lines) + var i = 0; + for (; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) { break } + h -= lh; + } + return n + i + } + + function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} + + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)) + } + + // A Pos instance represents a position within the text. + function Pos(line, ch, sticky) { + if ( sticky === void 0 ) sticky = null; + + if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) } + this.line = line; + this.ch = ch; + this.sticky = sticky; + } + + // Compare two positions, return 0 if they are the same, a negative + // number when a is less, and a positive number otherwise. + function cmp(a, b) { return a.line - b.line || a.ch - b.ch } + + function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } + + function copyPos(x) {return Pos(x.line, x.ch)} + function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } + function minPos(a, b) { return cmp(a, b) < 0 ? a : b } + + // Most of the external API clips given positions to make sure they + // actually exist within the document. + function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} + function clipPos(doc, pos) { + if (pos.line < doc.first) { return Pos(doc.first, 0) } + var last = doc.first + doc.size - 1; + if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) } + return clipToLen(pos, getLine(doc, pos.line).text.length) + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) { return Pos(pos.line, linelen) } + else if (ch < 0) { return Pos(pos.line, 0) } + else { return pos } + } + function clipPosArray(doc, array) { + var out = []; + for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); } + return out + } + + var SavedContext = function(state, lookAhead) { + this.state = state; + this.lookAhead = lookAhead; + }; + + var Context = function(doc, state, line, lookAhead) { + this.state = state; + this.doc = doc; + this.line = line; + this.maxLookAhead = lookAhead || 0; + this.baseTokens = null; + this.baseTokenPos = 1; + }; + + Context.prototype.lookAhead = function (n) { + var line = this.doc.getLine(this.line + n); + if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; } + return line + }; + + Context.prototype.baseToken = function (n) { + if (!this.baseTokens) { return null } + while (this.baseTokens[this.baseTokenPos] <= n) + { this.baseTokenPos += 2; } + var type = this.baseTokens[this.baseTokenPos + 1]; + return {type: type && type.replace(/( |^)overlay .*/, ""), + size: this.baseTokens[this.baseTokenPos] - n} + }; + + Context.prototype.nextLine = function () { + this.line++; + if (this.maxLookAhead > 0) { this.maxLookAhead--; } + }; + + Context.fromSaved = function (doc, saved, line) { + if (saved instanceof SavedContext) + { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) } + else + { return new Context(doc, copyState(doc.mode, saved), line) } + }; + + Context.prototype.save = function (copy) { + var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; + return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state + }; + + + // Compute a style array (an array starting with a mode generation + // -- for invalidation -- followed by pairs of end positions and + // style strings), which is used to highlight the tokens on the + // line. + function highlightLine(cm, line, context, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], lineClasses = {}; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); }, + lineClasses, forceToEnd); + var state = context.state; + + // Run overlays, adjust style array. + var loop = function ( o ) { + context.baseTokens = st; + var overlay = cm.state.overlays[o], i = 1, at = 0; + context.state = true; + runMode(cm, line.text, overlay.mode, context, function (end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) + { st.splice(i, 1, end, st[i+1], i_end); } + i += 2; + at = Math.min(end, i_end); + } + if (!style) { return } + if (overlay.opaque) { + st.splice(start, i - start, end, "overlay " + style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start+1]; + st[start+1] = (cur ? cur + " " : "") + "overlay " + style; + } + } + }, lineClasses); + context.state = state; + context.baseTokens = null; + context.baseTokenPos = 1; + }; + + for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); + + return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} + } + + function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var context = getContextBefore(cm, lineNo(line)); + var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); + var result = highlightLine(cm, line, context); + if (resetState) { context.state = resetState; } + line.stateAfter = context.save(!resetState); + line.styles = result.styles; + if (result.classes) { line.styleClasses = result.classes; } + else if (line.styleClasses) { line.styleClasses = null; } + if (updateFrontier === cm.doc.highlightFrontier) + { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); } + } + return line.styles + } + + function getContextBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display; + if (!doc.mode.startState) { return new Context(doc, true, n) } + var start = findStartLine(cm, n, precise); + var saved = start > doc.first && getLine(doc, start - 1).stateAfter; + var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); + + doc.iter(start, n, function (line) { + processLine(cm, line.text, context); + var pos = context.line; + line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; + context.nextLine(); + }); + if (precise) { doc.modeFrontier = context.line; } + return context + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. Used for lines that + // aren't currently visible. + function processLine(cm, text, context, startAt) { + var mode = cm.doc.mode; + var stream = new StringStream(text, cm.options.tabSize, context); + stream.start = stream.pos = startAt || 0; + if (text == "") { callBlankLine(mode, context.state); } + while (!stream.eol()) { + readToken(mode, stream, context.state); + stream.start = stream.pos; + } + } + + function callBlankLine(mode, state) { + if (mode.blankLine) { return mode.blankLine(state) } + if (!mode.innerMode) { return } + var inner = innerMode(mode, state); + if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } + } + + function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) { inner[0] = innerMode(mode, state).mode; } + var style = mode.token(stream, state); + if (stream.pos > stream.start) { return style } + } + throw new Error("Mode " + mode.name + " failed to advance stream.") + } + + var Token = function(stream, type, state) { + this.start = stream.start; this.end = stream.pos; + this.string = stream.current(); + this.type = type || null; + this.state = state; + }; + + // Utility for getTokenAt and getLineTokens + function takeToken(cm, pos, precise, asArray) { + var doc = cm.doc, mode = doc.mode, style; + pos = clipPos(doc, pos); + var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise); + var stream = new StringStream(line.text, cm.options.tabSize, context), tokens; + if (asArray) { tokens = []; } + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos; + style = readToken(mode, stream, context.state); + if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); } + } + return asArray ? tokens : new Token(stream, style, context.state) + } + + function extractLineClasses(type, output) { + if (type) { for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); + if (!lineClass) { break } + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); + var prop = lineClass[1] ? "bgClass" : "textClass"; + if (output[prop] == null) + { output[prop] = lineClass[2]; } + else if (!(new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)")).test(output[prop])) + { output[prop] += " " + lineClass[2]; } + } } + return type + } + + // Run the given mode's parser over a line, calling f for each token. + function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; } + var curStart = 0, curStyle = null; + var stream = new StringStream(text, cm.options.tabSize, context), style; + var inner = cm.options.addModeClass && [null]; + if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); } + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + if (forceToEnd) { processLine(cm, text, context, stream.pos); } + stream.pos = text.length; + style = null; + } else { + style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); + } + if (inner) { + var mName = inner[0].name; + if (mName) { style = "m-" + (style ? mName + " " + style : mName); } + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 5000); + f(curStart, curStyle); + } + curStyle = style; + } + stream.start = stream.pos; + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 + // characters, and returns inaccurate measurements in nodes + // starting around 5000 chars. + var pos = Math.min(stream.pos, curStart + 5000); + f(pos, curStyle); + curStart = pos; + } + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc; + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); + for (var search = n; search > lim; --search) { + if (search <= doc.first) { return doc.first } + var line = getLine(doc, search - 1), after = line.stateAfter; + if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) + { return search } + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline + } + + function retreatFrontier(doc, n) { + doc.modeFrontier = Math.min(doc.modeFrontier, n); + if (doc.highlightFrontier < n - 10) { return } + var start = doc.first; + for (var line = n - 1; line > start; line--) { + var saved = getLine(doc, line).stateAfter; + // change is on 3 + // state on line 1 looked ahead 2 -- so saw 3 + // test 1 + 2 < 3 should cover this + if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { + start = line + 1; + break + } + } + doc.highlightFrontier = Math.min(doc.highlightFrontier, start); + } + + // Optimize some code when these features are not used. + var sawReadOnlySpans = false, sawCollapsedSpans = false; + + function seeReadOnlySpans() { + sawReadOnlySpans = true; + } + + function seeCollapsedSpans() { + sawCollapsedSpans = true; + } + + // TEXTMARKER SPANS + + function MarkedSpan(marker, from, to) { + this.marker = marker; + this.from = from; this.to = to; + } + + // Search an array of spans for a span matching the given marker. + function getMarkedSpanFor(spans, marker) { + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) { return span } + } } + } + + // Remove a span from an array, returning undefined if no spans are + // left (we don't store arrays for lines without spans). + function removeMarkedSpan(spans, span) { + var r; + for (var i = 0; i < spans.length; ++i) + { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } } + return r + } + + // Add a span to a line. + function addMarkedSpan(line, span, op) { + var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet)); + if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) { + line.markedSpans.push(span); + } else { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + if (inThisOp) { inThisOp.add(line.markedSpans); } + } + span.marker.attachLine(line); + } + + // Used for the algorithm that adjusts markers for a change in the + // document. These functions cut an array of spans at a given + // character position, returning an array of remaining chunks (or + // undefined if nothing remains). + function markedSpansBefore(old, startCh, isInsert) { + var nw; + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); + } + } } + return nw + } + function markedSpansAfter(old, endCh, isInsert) { + var nw; + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)); + } + } } + return nw + } + + // Given a change object, compute the new set of marker spans that + // cover the line in which the change took place. Removes spans + // entirely within the change, reconnects spans belonging to the + // same marker that appear on both sides of the change, and cuts off + // spans partially within the change. Returns an array of span + // arrays with one element for each line in (after) the change. + function stretchSpansOverChange(doc, change) { + if (change.full) { return null } + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) { return null } + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) { span.to = startCh; } + else if (sameLine) { span.to = found.to == null ? null : found.to + offset; } + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i$1 = 0; i$1 < last.length; ++i$1) { + var span$1 = last[i$1]; + if (span$1.to != null) { span$1.to += offset; } + if (span$1.from == null) { + var found$1 = getMarkedSpanFor(first, span$1.marker); + if (!found$1) { + span$1.from = offset; + if (sameLine) { (first || (first = [])).push(span$1); } + } + } else { + span$1.from += offset; + if (sameLine) { (first || (first = [])).push(span$1); } + } + } + } + // Make sure we didn't create any zero-length spans + if (first) { first = clearEmptySpans(first); } + if (last && last != first) { last = clearEmptySpans(last); } + + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers; + if (gap > 0 && first) + { for (var i$2 = 0; i$2 < first.length; ++i$2) + { if (first[i$2].to == null) + { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } } + for (var i$3 = 0; i$3 < gap; ++i$3) + { newMarkers.push(gapMarkers); } + newMarkers.push(last); + } + return newMarkers + } + + // Remove spans that are empty and don't have a clearWhenEmpty + // option of false. + function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + { spans.splice(i--, 1); } + } + if (!spans.length) { return null } + return spans + } + + // Used to 'clip' out readOnly ranges when making a change. + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function (line) { + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + { (markers || (markers = [])).push(mark); } + } } + }); + if (!markers) { return null } + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue } + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + { newParts.push({from: p.from, to: m.from}); } + if (dto > 0 || !mk.inclusiveRight && !dto) + { newParts.push({from: m.to, to: p.to}); } + parts.splice.apply(parts, newParts); + j += newParts.length - 3; + } + } + return parts + } + + // Connect or disconnect spans from a line. + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.detachLine(line); } + line.markedSpans = null; + } + function attachMarkedSpans(line, spans) { + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.attachLine(line); } + line.markedSpans = spans; + } + + // Helpers used when computing which overlapping collapsed span + // counts as the larger one. + function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 } + function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 } + + // Returns a number indicating which of two overlapping collapsed + // spans is larger (and thus includes the other). Falls back to + // comparing ids when the spans cover exactly the same range. + function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length; + if (lenDiff != 0) { return lenDiff } + var aPos = a.find(), bPos = b.find(); + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); + if (fromCmp) { return -fromCmp } + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); + if (toCmp) { return toCmp } + return b.id - a.id + } + + // Find out whether a line ends or starts in a collapsed span. If + // so, return the marker for that span. + function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + { found = sp.marker; } + } } + return found + } + function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) } + function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) } + + function collapsedSpanAround(line, ch) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; } + } } + return found + } + + // Test whether there exists a collapsed span that partially + // overlaps (covers the start or end, but not both) of a new span. + // Such overlap is not allowed. + function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo); + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (!sp.marker.collapsed) { continue } + var found = sp.marker.find(0); + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue } + if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || + fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) + { return true } + } } + } + + // A visual line is a line as drawn on the screen. Folding, for + // example, can cause multiple logical lines to appear on the same + // visual line. This finds the start of the visual line that the + // given line is part of (usually that is the line itself). + function visualLine(line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + { line = merged.find(-1, true).line; } + return line + } + + function visualLineEnd(line) { + var merged; + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line; } + return line + } + + // Returns an array of logical lines that continue the visual line + // started by the argument, or undefined if there are no such lines. + function visualLineContinued(line) { + var merged, lines; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line + ;(lines || (lines = [])).push(line); + } + return lines + } + + // Get the line number of the start of the visual line that the + // given line number is part of. + function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line); + if (line == vis) { return lineN } + return lineNo(vis) + } + + // Get the line number of the start of the next visual line after + // the given line. + function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) { return lineN } + var line = getLine(doc, lineN), merged; + if (!lineIsHidden(doc, line)) { return lineN } + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line; } + return lineNo(line) + 1 + } + + // Compute whether a line is hidden. Lines count as hidden when they + // are part of a visual line that starts with another line, or when + // they are entirely covered by collapsed, non-widget span. + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) { continue } + if (sp.from == null) { return true } + if (sp.marker.widgetNode) { continue } + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + { return true } + } } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true); + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)) + } + if (span.marker.inclusiveRight && span.to == line.text.length) + { return true } + for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) { return true } + } + } + + // Find the height above the given line. + function heightAtLine(lineObj) { + lineObj = visualLine(lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) { break } + else { h += line.height; } + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i$1 = 0; i$1 < p.children.length; ++i$1) { + var cur = p.children[i$1]; + if (cur == chunk) { break } + else { h += cur.height; } + } + } + return h + } + + // Compute the character length of a line, taking into account + // collapsed ranges (see markText) that might hide parts, and join + // other lines onto it. + function lineLength(line) { + if (line.height == 0) { return 0 } + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true); + cur = found.from.line; + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found$1 = merged.find(0, true); + len -= cur.text.length - found$1.from.ch; + cur = found$1.to.line; + len += cur.text.length - found$1.to.ch; + } + return len + } + + // Find the longest line in the document. + function findMaxLine(cm) { + var d = cm.display, doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(d.maxLine); + d.maxLineChanged = true; + doc.iter(function (line) { + var len = lineLength(line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + var Line = function(text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; + }; + + Line.prototype.lineNo = function () { return lineNo(this) }; + eventMixin(Line); + + // Change the content (text, markers) of a line. Automatically + // invalidates cached information and tries to re-estimate the + // line's height. + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) { line.stateAfter = null; } + if (line.styles) { line.styles = null; } + if (line.order != null) { line.order = null; } + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) { updateLineHeight(line, estHeight); } + } + + // Detach a line from the document tree and its markers. + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + // Convert a style as returned by a mode (either null, or a string + // containing one or more styles) to a CSS style. This is cached, + // and also looks for line-wide styles. + var styleToClassCache = {}, styleToClassCacheWithMode = {}; + function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) { return null } + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")) + } + + // Render the DOM representation of the text of a line. Also builds + // up a 'line map', which points at the DOM nodes that represent + // specific stretches of text, and is used by the measuring code. + // The returned object contains the DOM node, this map, and + // information about line-wide styles that were set by the mode. + function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); + var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content, + col: 0, pos: 0, cm: cm, + trailingSpace: false, + splitSpaces: cm.getOption("lineWrapping")}; + lineView.measure = {}; + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0); + builder.pos = 0; + builder.addToken = buildToken; + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) + { builder.addToken = buildTokenBadBidi(builder.addToken, order); } + builder.map = []; + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); + if (line.styleClasses) { + if (line.styleClasses.bgClass) + { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); } + if (line.styleClasses.textClass) + { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); } + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map; + lineView.measure.cache = {}; + } else { + (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) + ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}); + } + } + + // See issue #2901 + if (webkit) { + var last = builder.content.lastChild; + if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) + { builder.content.className = "cm-tab-wrap-hack"; } + } + + signal(cm, "renderLine", cm, lineView.line, builder.pre); + if (builder.pre.className) + { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); } + + return builder + } + + function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + ch.charCodeAt(0).toString(16); + token.setAttribute("aria-label", token.title); + return token + } + + // Build up the DOM representation for a single token, and add it to + // the line map. Takes care to render special characters separately. + function buildToken(builder, text, style, startStyle, endStyle, css, attributes) { + if (!text) { return } + var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; + var special = builder.cm.state.specialChars, mustWrap = false; + var content; + if (!special.test(text)) { + builder.col += text.length; + content = document.createTextNode(displayText); + builder.map.push(builder.pos, builder.pos + text.length, content); + if (ie && ie_version < 9) { mustWrap = true; } + builder.pos += text.length; + } else { + content = document.createDocumentFragment(); + var pos = 0; + while (true) { + special.lastIndex = pos; + var m = special.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); } + else { content.appendChild(txt); } + builder.map.push(builder.pos, builder.pos + skipped, txt); + builder.col += skipped; + builder.pos += skipped; + } + if (!m) { break } + pos += skipped + 1; + var txt$1 = (void 0); + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + txt$1.setAttribute("role", "presentation"); + txt$1.setAttribute("cm-text", "\t"); + builder.col += tabWidth; + } else if (m[0] == "\r" || m[0] == "\n") { + txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); + txt$1.setAttribute("cm-text", m[0]); + builder.col += 1; + } else { + txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); + txt$1.setAttribute("cm-text", m[0]); + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); } + else { content.appendChild(txt$1); } + builder.col += 1; + } + builder.map.push(builder.pos, builder.pos + 1, txt$1); + builder.pos++; + } + } + builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; + if (style || startStyle || endStyle || mustWrap || css || attributes) { + var fullStyle = style || ""; + if (startStyle) { fullStyle += startStyle; } + if (endStyle) { fullStyle += endStyle; } + var token = elt("span", [content], fullStyle, css); + if (attributes) { + for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") + { token.setAttribute(attr, attributes[attr]); } } + } + return builder.content.appendChild(token) + } + builder.content.appendChild(content); + } + + // Change some spaces to NBSP to prevent the browser from collapsing + // trailing spaces at the end of a line when rendering text (issue #1362). + function splitSpaces(text, trailingBefore) { + if (text.length > 1 && !/ /.test(text)) { return text } + var spaceBefore = trailingBefore, result = ""; + for (var i = 0; i < text.length; i++) { + var ch = text.charAt(i); + if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) + { ch = "\u00a0"; } + result += ch; + spaceBefore = ch == " "; + } + return result + } + + // Work around nonsense dimensions being reported for stretches of + // right-to-left text. + function buildTokenBadBidi(inner, order) { + return function (builder, text, style, startStyle, endStyle, css, attributes) { + style = style ? style + " cm-force-border" : "cm-force-border"; + var start = builder.pos, end = start + text.length; + for (;;) { + // Find the part that overlaps with the start of this text + var part = (void 0); + for (var i = 0; i < order.length; i++) { + part = order[i]; + if (part.to > start && part.from <= start) { break } + } + if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) } + inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes); + startStyle = null; + text = text.slice(part.to - start); + start = part.to; + } + } + } + + function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode; + if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); } + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) + { widget = builder.content.appendChild(document.createElement("span")); } + widget.setAttribute("cm-marker", marker.id); + } + if (widget) { + builder.cm.display.input.setUneditable(widget); + builder.content.appendChild(widget); + } + builder.pos += size; + builder.trailingSpace = false; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0; + if (!spans) { + for (var i$1 = 1; i$1 < styles.length; i$1+=2) + { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); } + return + } + + var len = allText.length, pos = 0, i = 1, text = "", style, css; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = css = ""; + attributes = null; + collapsed = null; nextChange = Infinity; + var foundBookmarks = [], endStyles = (void 0); + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m); + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to; + spanEndStyle = ""; + } + if (m.className) { spanStyle += " " + m.className; } + if (m.css) { css = (css ? css + ";" : "") + m.css; } + if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; } + if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); } + // support for the old title property + // https://github.com/codemirror/CodeMirror/pull/5673 + if (m.title) { (attributes || (attributes = {})).title = m.title; } + if (m.attributes) { + for (var attr in m.attributes) + { (attributes || (attributes = {}))[attr] = m.attributes[attr]; } + } + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + { collapsed = sp; } + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + } + if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) + { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } } + + if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) + { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null); + if (collapsed.to == null) { return } + if (collapsed.to == pos) { collapsed = false; } + } + } + if (pos >= len) { break } + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = interpretTokenStyle(styles[i++], builder.cm.options); + } + } + } + + + // These objects are used to represent the visible (currently drawn) + // part of the document. A LineView may correspond to multiple + // logical lines, if those are connected by collapsed ranges. + function LineView(doc, line, lineN) { + // The starting line + this.line = line; + // Continuing lines, if any + this.rest = visualLineContinued(line); + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; + this.node = this.text = null; + this.hidden = lineIsHidden(doc, line); + } + + // Create a range of LineView objects for the given lines. + function buildViewArray(cm, from, to) { + var array = [], nextPos; + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); + nextPos = pos + view.size; + array.push(view); + } + return array + } + + var operationGroup = null; + + function pushOperation(op) { + if (operationGroup) { + operationGroup.ops.push(op); + } else { + op.ownsGroup = operationGroup = { + ops: [op], + delayedCallbacks: [] + }; + } + } + + function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, i = 0; + do { + for (; i < callbacks.length; i++) + { callbacks[i].call(null); } + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j]; + if (op.cursorActivityHandlers) + { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) + { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } } + } + } while (i < callbacks.length) + } + + function finishOperation(op, endCb) { + var group = op.ownsGroup; + if (!group) { return } + + try { fireCallbacksForOps(group); } + finally { + operationGroup = null; + endCb(group); + } + } + + var orphanDelayedCallbacks = null; + + // Often, we want to signal events at a point where we are in the + // middle of some work, but don't want the handler to start calling + // other methods on the editor, which might be in an inconsistent + // state or simply not expect any other events to happen. + // signalLater looks whether there are any handlers, and schedules + // them to be executed when the last operation ends, or, if no + // operation is active, when a timeout fires. + function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type); + if (!arr.length) { return } + var args = Array.prototype.slice.call(arguments, 2), list; + if (operationGroup) { + list = operationGroup.delayedCallbacks; + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks; + } else { + list = orphanDelayedCallbacks = []; + setTimeout(fireOrphanDelayed, 0); + } + var loop = function ( i ) { + list.push(function () { return arr[i].apply(null, args); }); + }; + + for (var i = 0; i < arr.length; ++i) + loop( i ); + } + + function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks; + orphanDelayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) { delayed[i](); } + } + + // When an aspect of a line changes, a string is added to + // lineView.changes. This updates the relevant part of the line's + // DOM structure. + function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j]; + if (type == "text") { updateLineText(cm, lineView); } + else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); } + else if (type == "class") { updateLineClasses(cm, lineView); } + else if (type == "widget") { updateLineWidgets(cm, lineView, dims); } + } + lineView.changes = null; + } + + // Lines with gutter elements, widgets or a background class need to + // be wrapped, and have the extra elements added to the wrapper div + function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative"); + if (lineView.text.parentNode) + { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); } + lineView.node.appendChild(lineView.text); + if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; } + } + return lineView.node + } + + function updateLineBackground(cm, lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; + if (cls) { cls += " CodeMirror-linebackground"; } + if (lineView.background) { + if (cls) { lineView.background.className = cls; } + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } + } else if (cls) { + var wrap = ensureLineWrapped(lineView); + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); + cm.display.input.setUneditable(lineView.background); + } + } + + // Wrapper around buildLineContent which will reuse the structure + // in display.externalMeasured when possible. + function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured; + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null; + lineView.measure = ext.measure; + return ext.built + } + return buildLineContent(cm, lineView) + } + + // Redraw the line's text. Interacts with the background and text + // classes because the mode may output tokens that influence these + // classes. + function updateLineText(cm, lineView) { + var cls = lineView.text.className; + var built = getLineContent(cm, lineView); + if (lineView.text == lineView.node) { lineView.node = built.pre; } + lineView.text.parentNode.replaceChild(built.pre, lineView.text); + lineView.text = built.pre; + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass; + lineView.textClass = built.textClass; + updateLineClasses(cm, lineView); + } else if (cls) { + lineView.text.className = cls; + } + } + + function updateLineClasses(cm, lineView) { + updateLineBackground(cm, lineView); + if (lineView.line.wrapClass) + { ensureLineWrapped(lineView).className = lineView.line.wrapClass; } + else if (lineView.node != lineView.text) + { lineView.node.className = ""; } + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; + lineView.text.className = textClass || ""; + } + + function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter); + lineView.gutter = null; + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground); + lineView.gutterBackground = null; + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView); + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, + ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")); + cm.display.input.setUneditable(lineView.gutterBackground); + wrap.insertBefore(lineView.gutterBackground, lineView.text); + } + var markers = lineView.line.gutterMarkers; + if (cm.options.lineNumbers || markers) { + var wrap$1 = ensureLineWrapped(lineView); + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")); + gutterWrap.setAttribute("aria-hidden", "true"); + cm.display.input.setUneditable(gutterWrap); + wrap$1.insertBefore(gutterWrap, lineView.text); + if (lineView.line.gutterClass) + { gutterWrap.className += " " + lineView.line.gutterClass; } + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + { lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); } + if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) { + var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id]; + if (found) + { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); } + } } + } + } + + function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) { lineView.alignable = null; } + var isWidget = classTest("CodeMirror-linewidget"); + for (var node = lineView.node.firstChild, next = (void 0); node; node = next) { + next = node.nextSibling; + if (isWidget.test(node.className)) { lineView.node.removeChild(node); } + } + insertLineWidgets(cm, lineView, dims); + } + + // Build a line's DOM representation from scratch + function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView); + lineView.text = lineView.node = built.pre; + if (built.bgClass) { lineView.bgClass = built.bgClass; } + if (built.textClass) { lineView.textClass = built.textClass; } + + updateLineClasses(cm, lineView); + updateLineGutter(cm, lineView, lineN, dims); + insertLineWidgets(cm, lineView, dims); + return lineView.node + } + + // A lineView may contain multiple logical lines (when merged by + // collapsed spans). The widgets for all of them need to be drawn. + function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } } + } + + function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) { return } + var wrap = ensureLineWrapped(lineView); + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : "")); + if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); } + positionLineWidget(widget, node, lineView, dims); + cm.display.input.setUneditable(node); + if (allowAbove && widget.above) + { wrap.insertBefore(node, lineView.gutter || lineView.text); } + else + { wrap.appendChild(node); } + signalLater(widget, "redraw"); + } + } + + function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + (lineView.alignable || (lineView.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; } + } + } + + function widgetHeight(widget) { + if (widget.height != null) { return widget.height } + var cm = widget.doc.cm; + if (!cm) { return 0 } + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;"; + if (widget.coverGutter) + { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; } + if (widget.noHScroll) + { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; } + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); + } + return widget.height = widget.node.parentNode.offsetHeight + } + + // Return true when the given mouse event happened in a widget + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || + (n.parentNode == display.sizer && n != display.mover)) + { return true } + } + } + + // POSITION MEASUREMENT + + function paddingTop(display) {return display.lineSpace.offsetTop} + function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} + function paddingH(display) { + if (display.cachedPaddingH) { return display.cachedPaddingH } + var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like")); + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; + var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; + if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; } + return data + } + + function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } + function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth + } + function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight + } + + // Ensure the lineView.wrapping.heights array is populated. This is + // an array of bottom offsets for the lines that make up a drawn + // line. When lineWrapping is on, there might be more than one + // height. + function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping; + var curWidth = wrapping && displayWidth(cm); + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = []; + if (wrapping) { + lineView.measure.width = curWidth; + var rects = lineView.text.firstChild.getClientRects(); + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1]; + if (Math.abs(cur.bottom - next.bottom) > 2) + { heights.push((cur.bottom + next.top) / 2 - rect.top); } + } + } + heights.push(rect.bottom - rect.top); + } + } + + // Find a line map (mapping character offsets to text nodes) and a + // measurement cache for the given line number. (A line view might + // contain multiple lines when collapsed ranges are present.) + function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + { return {map: lineView.measure.map, cache: lineView.measure.cache} } + if (lineView.rest) { + for (var i = 0; i < lineView.rest.length; i++) + { if (lineView.rest[i] == line) + { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } + for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) + { if (lineNo(lineView.rest[i$1]) > lineN) + { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } + } + } + + // Render a line into the hidden node display.externalMeasured. Used + // when measurement is needed for a line that's not in the viewport. + function updateExternalMeasurement(cm, line) { + line = visualLine(line); + var lineN = lineNo(line); + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); + view.lineN = lineN; + var built = view.built = buildLineContent(cm, view); + view.text = built.pre; + removeChildrenAndAdd(cm.display.lineMeasure, built.pre); + return view + } + + // Get a {top, bottom, left, right} box (in line-local coordinates) + // for a given character. + function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) + } + + // Find a line view that corresponds to the given line number. + function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + { return cm.display.view[findViewIndex(cm, lineN)] } + var ext = cm.display.externalMeasured; + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + { return ext } + } + + // Measurement can be split in two steps, the set-up work that + // applies to the whole line, and the measurement of the actual + // character. Functions like coordsChar, that need to do a lot of + // measurements in a row, can thus ensure that the set-up work is + // only done once. + function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line); + var view = findViewForLine(cm, lineN); + if (view && !view.text) { + view = null; + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)); + cm.curOp.forceUpdate = true; + } + if (!view) + { view = updateExternalMeasurement(cm, line); } + + var info = mapFromLineView(view, line, lineN); + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + } + } + + // Given a prepared measurement object, measures the position of an + // actual character (or fetches it from the cache). + function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) { ch = -1; } + var key = ch + (bias || ""), found; + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key]; + } else { + if (!prepared.rect) + { prepared.rect = prepared.view.text.getBoundingClientRect(); } + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect); + prepared.hasHeights = true; + } + found = measureCharInner(cm, prepared, ch, bias); + if (!found.bogus) { prepared.cache[key] = found; } + } + return {left: found.left, right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom} + } + + var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; + + function nodeAndOffsetInLineMap(map, ch, bias) { + var node, start, end, collapse, mStart, mEnd; + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + mStart = map[i]; + mEnd = map[i + 1]; + if (ch < mStart) { + start = 0; end = 1; + collapse = "left"; + } else if (ch < mEnd) { + start = ch - mStart; + end = start + 1; + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart; + start = end - 1; + if (ch >= mEnd) { collapse = "right"; } + } + if (start != null) { + node = map[i + 2]; + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + { collapse = bias; } + if (bias == "left" && start == 0) + { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2]; + collapse = "left"; + } } + if (bias == "right" && start == mEnd - mStart) + { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2]; + collapse = "right"; + } } + break + } + } + return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} + } + + function getUsefulRect(rects, bias) { + var rect = nullRect; + if (bias == "left") { for (var i = 0; i < rects.length; i++) { + if ((rect = rects[i]).left != rect.right) { break } + } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { + if ((rect = rects[i$1]).left != rect.right) { break } + } } + return rect + } + + function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); + var node = place.node, start = place.start, end = place.end, collapse = place.collapse; + + var rect; + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; } + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; } + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) + { rect = node.parentNode.getBoundingClientRect(); } + else + { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); } + if (rect.left || rect.right || start == 0) { break } + end = start; + start = start - 1; + collapse = "right"; + } + if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); } + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) { collapse = bias = "right"; } + var rects; + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + { rect = rects[bias == "right" ? rects.length - 1 : 0]; } + else + { rect = node.getBoundingClientRect(); } + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0]; + if (rSpan) + { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; } + else + { rect = nullRect; } + } + + var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; + var mid = (rtop + rbot) / 2; + var heights = prepared.view.measure.heights; + var i = 0; + for (; i < heights.length - 1; i++) + { if (mid < heights[i]) { break } } + var top = i ? heights[i - 1] : 0, bot = heights[i]; + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot}; + if (!rect.left && !rect.right) { result.bogus = true; } + if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } + + return result + } + + // Work around problem with bounding client rects on ranges being + // returned incorrectly when zoomed on IE10 and below. + function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || + screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) + { return rect } + var scaleX = screen.logicalXDPI / screen.deviceXDPI; + var scaleY = screen.logicalYDPI / screen.deviceYDPI; + return {left: rect.left * scaleX, right: rect.right * scaleX, + top: rect.top * scaleY, bottom: rect.bottom * scaleY} + } + + function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {}; + lineView.measure.heights = null; + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { lineView.measure.caches[i] = {}; } } + } + } + + function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null; + removeChildren(cm.display.lineMeasure); + for (var i = 0; i < cm.display.view.length; i++) + { clearLineMeasurementCacheFor(cm.display.view[i]); } + } + + function clearCaches(cm) { + clearLineMeasurementCache(cm); + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; + if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; } + cm.display.lineNumChars = null; + } + + function pageScrollX() { + // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 + // which causes page_Offset and bounding client rects to use + // different reference viewports and invalidate our calculations. + if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) } + return window.pageXOffset || (document.documentElement || document.body).scrollLeft + } + function pageScrollY() { + if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) } + return window.pageYOffset || (document.documentElement || document.body).scrollTop + } + + function widgetTopHeight(lineObj) { + var ref = visualLine(lineObj); + var widgets = ref.widgets; + var height = 0; + if (widgets) { for (var i = 0; i < widgets.length; ++i) { if (widgets[i].above) + { height += widgetHeight(widgets[i]); } } } + return height + } + + // Converts a {top, bottom, left, right} box from line-local + // coordinates into another coordinate system. Context may be one of + // "line", "div" (display.lineDiv), "local"./null (editor), "window", + // or "page". + function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { + if (!includeWidgets) { + var height = widgetTopHeight(lineObj); + rect.top += height; rect.bottom += height; + } + if (context == "line") { return rect } + if (!context) { context = "local"; } + var yOff = heightAtLine(lineObj); + if (context == "local") { yOff += paddingTop(cm.display); } + else { yOff -= cm.display.viewOffset; } + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect + } + + // Coverts a box from "div" coords to another coordinate system. + // Context may be "window", "page", "div", or "local"./null. + function fromCoordSystem(cm, coords, context) { + if (context == "div") { return coords } + var left = coords.left, top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(); + top -= pageScrollY(); + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect(); + left += localBox.left; + top += localBox.top; + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} + } + + function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) { lineObj = getLine(cm.doc, pos.line); } + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) + } + + // Returns a box for a given cursor position, which may have an + // 'other' property containing the position of the secondary cursor + // on a bidi boundary. + // A cursor Pos(line, char, "before") is on the same visual line as `char - 1` + // and after `char - 1` in writing order of `char - 1` + // A cursor Pos(line, char, "after") is on the same visual line as `char` + // and before `char` in writing order of `char` + // Examples (upper-case letters are RTL, lower-case are LTR): + // Pos(0, 1, ...) + // before after + // ab a|b a|b + // aB a|B aB| + // Ab |Ab A|b + // AB B|A B|A + // Every position after the last character on a line is considered to stick + // to the last character on the line. + function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); + if (right) { m.left = m.right; } else { m.right = m.left; } + return intoCoordSystem(cm, lineObj, m, context) + } + var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky; + if (ch >= lineObj.text.length) { + ch = lineObj.text.length; + sticky = "before"; + } else if (ch <= 0) { + ch = 0; + sticky = "after"; + } + if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") } + + function getBidi(ch, partPos, invert) { + var part = order[partPos], right = part.level == 1; + return get(invert ? ch - 1 : ch, right != invert) + } + var partPos = getBidiPartAt(order, ch, sticky); + var other = bidiOther; + var val = getBidi(ch, partPos, sticky == "before"); + if (other != null) { val.other = getBidi(ch, other, sticky != "before"); } + return val + } + + // Used to cheaply estimate the coordinates for a position. Used for + // intermediate scroll updates. + function estimateCoords(cm, pos) { + var left = 0; + pos = clipPos(cm.doc, pos); + if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; } + var lineObj = getLine(cm.doc, pos.line); + var top = heightAtLine(lineObj) + paddingTop(cm.display); + return {left: left, right: left, top: top, bottom: top + lineObj.height} + } + + // Positions returned by coordsChar contain some extra information. + // xRel is the relative x position of the input coordinates compared + // to the found position (so xRel > 0 means the coordinates are to + // the right of the character position, for example). When outside + // is true, that means the coordinates lie outside the line's + // vertical range. + function PosWithInfo(line, ch, sticky, outside, xRel) { + var pos = Pos(line, ch, sticky); + pos.xRel = xRel; + if (outside) { pos.outside = outside; } + return pos + } + + // Compute the character position closest to the given coordinates. + // Input must be lineSpace-local ("div" coordinate system). + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) } + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; + if (lineN > last) + { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) } + if (x < 0) { x = 0; } + + var lineObj = getLine(doc, lineN); + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y); + var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0)); + if (!collapsed) { return found } + var rangeEnd = collapsed.find(1); + if (rangeEnd.line == lineN) { return rangeEnd } + lineObj = getLine(doc, lineN = rangeEnd.line); + } + } + + function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { + y -= widgetTopHeight(lineObj); + var end = lineObj.text.length; + var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0); + end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end); + return {begin: begin, end: end} + } + + function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } + var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; + return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop) + } + + // Returns true if the given side of a box is after the given + // coordinates, in top-to-bottom, left-to-right order. + function boxIsAfter(box, x, y, left) { + return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x + } + + function coordsCharInner(cm, lineObj, lineNo, x, y) { + // Move y into line-local coordinate space + y -= heightAtLine(lineObj); + var preparedMeasure = prepareMeasureForLine(cm, lineObj); + // When directly calling `measureCharPrepared`, we have to adjust + // for the widgets at this line. + var widgetHeight = widgetTopHeight(lineObj); + var begin = 0, end = lineObj.text.length, ltr = true; + + var order = getOrder(lineObj, cm.doc.direction); + // If the line isn't plain left-to-right text, first figure out + // which bidi section the coordinates fall into. + if (order) { + var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart) + (cm, lineObj, lineNo, preparedMeasure, order, x, y); + ltr = part.level != 1; + // The awkward -1 offsets are needed because findFirst (called + // on these below) will treat its first bound as inclusive, + // second as exclusive, but we want to actually address the + // characters in the part's range + begin = ltr ? part.from : part.to - 1; + end = ltr ? part.to : part.from - 1; + } + + // A binary search to find the first character whose bounding box + // starts after the coordinates. If we run across any whose box wrap + // the coordinates, store that. + var chAround = null, boxAround = null; + var ch = findFirst(function (ch) { + var box = measureCharPrepared(cm, preparedMeasure, ch); + box.top += widgetHeight; box.bottom += widgetHeight; + if (!boxIsAfter(box, x, y, false)) { return false } + if (box.top <= y && box.left <= x) { + chAround = ch; + boxAround = box; + } + return true + }, begin, end); + + var baseX, sticky, outside = false; + // If a box around the coordinates was found, use that + if (boxAround) { + // Distinguish coordinates nearer to the left or right side of the box + var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr; + ch = chAround + (atStart ? 0 : 1); + sticky = atStart ? "after" : "before"; + baseX = atLeft ? boxAround.left : boxAround.right; + } else { + // (Adjust for extended bound, if necessary.) + if (!ltr && (ch == end || ch == begin)) { ch++; } + // To determine which side to associate with, get the box to the + // left of the character and compare it's vertical position to the + // coordinates + sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : + (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ? + "after" : "before"; + // Now get accurate coordinates for this place, in order to get a + // base X position + var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure); + baseX = coords.left; + outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0; + } + + ch = skipExtendingChars(lineObj.text, ch, 1); + return PosWithInfo(lineNo, ch, sticky, outside, x - baseX) + } + + function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) { + // Bidi parts are sorted left-to-right, and in a non-line-wrapping + // situation, we can take this ordering to correspond to the visual + // ordering. This finds the first part whose end is after the given + // coordinates. + var index = findFirst(function (i) { + var part = order[i], ltr = part.level != 1; + return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"), + "line", lineObj, preparedMeasure), x, y, true) + }, 0, order.length - 1); + var part = order[index]; + // If this isn't the first part, the part's start is also after + // the coordinates, and the coordinates aren't on the same line as + // that start, move one part back. + if (index > 0) { + var ltr = part.level != 1; + var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"), + "line", lineObj, preparedMeasure); + if (boxIsAfter(start, x, y, true) && start.top > y) + { part = order[index - 1]; } + } + return part + } + + function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { + // In a wrapped line, rtl text on wrapping boundaries can do things + // that don't correspond to the ordering in our `order` array at + // all, so a binary search doesn't work, and we want to return a + // part that only spans one line so that the binary search in + // coordsCharInner is safe. As such, we first find the extent of the + // wrapped line, and then do a flat search in which we discard any + // spans that aren't on the line. + var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); + var begin = ref.begin; + var end = ref.end; + if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; } + var part = null, closestDist = null; + for (var i = 0; i < order.length; i++) { + var p = order[i]; + if (p.from >= end || p.to <= begin) { continue } + var ltr = p.level != 1; + var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; + // Weigh against spans ending before this, so that they are only + // picked if nothing ends after + var dist = endX < x ? x - endX + 1e9 : endX - x; + if (!part || closestDist > dist) { + part = p; + closestDist = dist; + } + } + if (!part) { part = order[order.length - 1]; } + // Clip the part to the wrapped line. + if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; } + if (part.to > end) { part = {from: part.from, to: end, level: part.level}; } + return part + } + + var measureText; + // Compute the default text height. + function textHeight(display) { + if (display.cachedTextHeight != null) { return display.cachedTextHeight } + if (measureText == null) { + measureText = elt("pre", null, "CodeMirror-line-like"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) { display.cachedTextHeight = height; } + removeChildren(display.measure); + return height || 1 + } + + // Compute the default character width. + function charWidth(display) { + if (display.cachedCharWidth != null) { return display.cachedCharWidth } + var anchor = elt("span", "xxxxxxxxxx"); + var pre = elt("pre", [anchor], "CodeMirror-line-like"); + removeChildrenAndAdd(display.measure, pre); + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; + if (width > 2) { display.cachedCharWidth = width; } + return width || 10 + } + + // Do a bulk-read of the DOM positions and sizes needed to draw the + // view, so that we don't interleave reading and writing to the DOM. + function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + var gutterLeft = d.gutters.clientLeft; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + var id = cm.display.gutterSpecs[i].className; + left[id] = n.offsetLeft + n.clientLeft + gutterLeft; + width[id] = n.clientWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth} + } + + // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, + // but using getBoundingClientRect to get a sub-pixel-accurate + // result. + function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left + } + + // Returns a function that estimates the height of a line, to use as + // first approximation until the line becomes visible (and is thus + // properly measurable). + function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function (line) { + if (lineIsHidden(cm.doc, line)) { return 0 } + + var widgetsHeight = 0; + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; } + } } + + if (wrapping) + { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th } + else + { return widgetsHeight + th } + } + } + + function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm); + doc.iter(function (line) { + var estHeight = est(line); + if (estHeight != line.height) { updateLineHeight(line, estHeight); } + }); + } + + // Given a mouse event, find the corresponding position. If liberal + // is false, it checks whether a gutter or scrollbar was clicked, + // and returns null if it was. forRect is used by rectangular + // selections, and tries to estimate a character position even for + // coordinates beyond the right of the text. + function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display; + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } + + var x, y, space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top; } + catch (e$1) { return null } + var coords = coordsChar(cm, x, y), line; + if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); + } + return coords + } + + // Find the view element corresponding to a given line. Return null + // when the line isn't visible. + function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) { return null } + n -= cm.display.viewFrom; + if (n < 0) { return null } + var view = cm.display.view; + for (var i = 0; i < view.length; i++) { + n -= view[i].size; + if (n < 0) { return i } + } + } + + // Updates the display.view data structure for a given change to the + // document. From and to are in pre-change coordinates. Lendiff is + // the amount of lines added or subtracted by the change. This is + // used for changes that span multiple lines, or change the way + // lines are divided into visual lines. regLineChange (below) + // registers single-line changes. + function regChange(cm, from, to, lendiff) { + if (from == null) { from = cm.doc.first; } + if (to == null) { to = cm.doc.first + cm.doc.size; } + if (!lendiff) { lendiff = 0; } + + var display = cm.display; + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + { display.updateLineNumbers = from; } + + cm.curOp.viewChanged = true; + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + { resetView(cm); } + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm); + } else { + display.viewFrom += lendiff; + display.viewTo += lendiff; + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm); + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cut) { + display.view = display.view.slice(cut.index); + display.viewFrom = cut.lineN; + display.viewTo += lendiff; + } else { + resetView(cm); + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut$1 = viewCuttingPoint(cm, from, from, -1); + if (cut$1) { + display.view = display.view.slice(0, cut$1.index); + display.viewTo = cut$1.lineN; + } else { + resetView(cm); + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1); + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)); + display.viewTo += lendiff; + } else { + resetView(cm); + } + } + + var ext = display.externalMeasured; + if (ext) { + if (to < ext.lineN) + { ext.lineN += lendiff; } + else if (from < ext.lineN + ext.size) + { display.externalMeasured = null; } + } + } + + // Register a change to a single line. Type must be one of "text", + // "gutter", "class", "widget" + function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true; + var display = cm.display, ext = cm.display.externalMeasured; + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + { display.externalMeasured = null; } + + if (line < display.viewFrom || line >= display.viewTo) { return } + var lineView = display.view[findViewIndex(cm, line)]; + if (lineView.node == null) { return } + var arr = lineView.changes || (lineView.changes = []); + if (indexOf(arr, type) == -1) { arr.push(type); } + } + + // Clear the view. + function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first; + cm.display.view = []; + cm.display.viewOffset = 0; + } + + function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view; + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) + { return {index: index, lineN: newN} } + var n = cm.display.viewFrom; + for (var i = 0; i < index; i++) + { n += view[i].size; } + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) { return null } + diff = (n + view[index].size) - oldN; + index++; + } else { + diff = n - oldN; + } + oldN += diff; newN += diff; + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) { return null } + newN += dir * view[index - (dir < 0 ? 1 : 0)].size; + index += dir; + } + return {index: index, lineN: newN} + } + + // Force the view to cover a given range, adding empty view element + // or clipping off existing ones as needed. + function adjustView(cm, from, to) { + var display = cm.display, view = display.view; + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to); + display.viewFrom = from; + } else { + if (display.viewFrom > from) + { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); } + else if (display.viewFrom < from) + { display.view = display.view.slice(findViewIndex(cm, from)); } + display.viewFrom = from; + if (display.viewTo < to) + { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); } + else if (display.viewTo > to) + { display.view = display.view.slice(0, findViewIndex(cm, to)); } + } + display.viewTo = to; + } + + // Count the number of lines in the view whose DOM representation is + // out of date (or nonexistent). + function countDirtyView(cm) { + var view = cm.display.view, dirty = 0; + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; } + } + return dirty + } + + function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()); + } + + function prepareSelection(cm, primary) { + if ( primary === void 0 ) primary = true; + + var doc = cm.doc, result = {}; + var curFragment = result.cursors = document.createDocumentFragment(); + var selFragment = result.selection = document.createDocumentFragment(); + + var customCursor = cm.options.$customCursor; + if (customCursor) { primary = true; } + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (!primary && i == doc.sel.primIndex) { continue } + var range = doc.sel.ranges[i]; + if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue } + var collapsed = range.empty(); + if (customCursor) { + var head = customCursor(cm, range); + if (head) { drawSelectionCursor(cm, head, curFragment); } + } else if (collapsed || cm.options.showCursorWhenSelecting) { + drawSelectionCursor(cm, range.head, curFragment); + } + if (!collapsed) + { drawSelectionRange(cm, range, selFragment); } + } + return result + } + + // Draws a cursor for the given range + function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); + cursor.style.left = pos.left + "px"; + cursor.style.top = pos.top + "px"; + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + + if (/\bcm-fat-cursor\b/.test(cm.getWrapperElement().className)) { + var charPos = charCoords(cm, head, "div", null, null); + var width = charPos.right - charPos.left; + cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + "px"; + } + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); + otherCursor.style.display = ""; + otherCursor.style.left = pos.other.left + "px"; + otherCursor.style.top = pos.other.top + "px"; + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } + } + + function cmpCoords(a, b) { return a.top - b.top || a.left - b.left } + + // Draws the given range as a highlighted selection + function drawSelectionRange(cm, range, output) { + var display = cm.display, doc = cm.doc; + var fragment = document.createDocumentFragment(); + var padding = paddingH(cm.display), leftSide = padding.left; + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; + var docLTR = doc.direction == "ltr"; + + function add(left, top, width, bottom) { + if (top < 0) { top = 0; } + top = Math.round(top); + bottom = Math.round(bottom); + fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px"))); + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias) + } + + function wrapX(pos, dir, side) { + var extent = wrappedLineExtentChar(cm, lineObj, null, pos); + var prop = (dir == "ltr") == (side == "after") ? "left" : "right"; + var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); + return coords(ch, prop)[prop] + } + + var order = getOrder(lineObj, doc.direction); + iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) { + var ltr = dir == "ltr"; + var fromPos = coords(from, ltr ? "left" : "right"); + var toPos = coords(to - 1, ltr ? "right" : "left"); + + var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen; + var first = i == 0, last = !order || i == order.length - 1; + if (toPos.top - fromPos.top <= 3) { // Single line + var openLeft = (docLTR ? openStart : openEnd) && first; + var openRight = (docLTR ? openEnd : openStart) && last; + var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; + var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; + add(left, fromPos.top, right - left, fromPos.bottom); + } else { // Multiple lines + var topLeft, topRight, botLeft, botRight; + if (ltr) { + topLeft = docLTR && openStart && first ? leftSide : fromPos.left; + topRight = docLTR ? rightSide : wrapX(from, dir, "before"); + botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); + botRight = docLTR && openEnd && last ? rightSide : toPos.right; + } else { + topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); + topRight = !docLTR && openStart && first ? rightSide : fromPos.right; + botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; + botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); + } + add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); + if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); } + add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); + } + + if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; } + if (cmpCoords(toPos, start) < 0) { start = toPos; } + if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; } + if (cmpCoords(toPos, end) < 0) { end = toPos; } + }); + return {start: start, end: end} + } + + var sFrom = range.from(), sTo = range.to(); + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch); + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); + var singleVLine = visualLine(fromLine) == visualLine(toLine); + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) + { add(leftSide, leftEnd.bottom, null, rightStart.top); } + } + + output.appendChild(fragment); + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) { return } + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursorDiv.style.visibility = ""; + if (cm.options.cursorBlinkRate > 0) + { display.blinker = setInterval(function () { + if (!cm.hasFocus()) { onBlur(cm); } + display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); } + else if (cm.options.cursorBlinkRate < 0) + { display.cursorDiv.style.visibility = "hidden"; } + } + + function ensureFocus(cm) { + if (!cm.hasFocus()) { + cm.display.input.focus(); + if (!cm.state.focused) { onFocus(cm); } + } + } + + function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true; + setTimeout(function () { if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false; + if (cm.state.focused) { onBlur(cm); } + } }, 100); + } + + function onFocus(cm, e) { + if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; } + + if (cm.options.readOnly == "nocursor") { return } + if (!cm.state.focused) { + signal(cm, "focus", cm, e); + cm.state.focused = true; + addClass(cm.display.wrapper, "CodeMirror-focused"); + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset(); + if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730 + } + cm.display.input.receivedFocus(); + } + restartBlink(cm); + } + function onBlur(cm, e) { + if (cm.state.delayingBlurEvent) { return } + + if (cm.state.focused) { + signal(cm, "blur", cm, e); + cm.state.focused = false; + rmClass(cm.display.wrapper, "CodeMirror-focused"); + } + clearInterval(cm.display.blinker); + setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150); + } + + // Read the actual heights of the rendered lines, and update their + // stored heights to match. + function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top); + var oldHeight = display.lineDiv.getBoundingClientRect().top; + var mustScroll = 0; + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], wrapping = cm.options.lineWrapping; + var height = (void 0), width = 0; + if (cur.hidden) { continue } + oldHeight += cur.line.height; + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = cur.node.getBoundingClientRect(); + height = box.bottom - box.top; + // Check that lines don't extend past the right of the current + // editor width + if (!wrapping && cur.text.firstChild) + { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; } + } + var diff = cur.line.height - height; + if (diff > .005 || diff < -.005) { + if (oldHeight < viewTop) { mustScroll -= diff; } + updateLineHeight(cur.line, height); + updateWidgetHeight(cur.line); + if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) + { updateWidgetHeight(cur.rest[j]); } } + } + if (width > cm.display.sizerWidth) { + var chWidth = Math.ceil(width / charWidth(cm.display)); + if (chWidth > cm.display.maxLineLength) { + cm.display.maxLineLength = chWidth; + cm.display.maxLine = cur.line; + cm.display.maxLineChanged = true; + } + } + } + if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; } + } + + // Read and store the height of line widgets associated with the + // given line. + function updateWidgetHeight(line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) { + var w = line.widgets[i], parent = w.node.parentNode; + if (parent) { w.height = parent.offsetHeight; } + } } + } + + // Compute the lines that are visible in a given viewport (defaults + // the the current scroll position). viewport may contain top, + // height, and ensure (see op.scrollToPos) properties. + function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; + top = Math.floor(top - paddingTop(display)); + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; + if (ensureFrom < from) { + from = ensureFrom; + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); + to = ensureTo; + } + } + return {from: from, to: Math.max(to, from + 1)} + } + + // SCROLLING THINGS INTO VIEW + + // If an editor sits on the top or bottom of the window, partially + // scrolled out of view, this ensures that the cursor is visible. + function maybeScrollWindow(cm, rect) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } + + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; + if (rect.top + box.top < 0) { doScroll = true; } + else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; } + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")); + cm.display.lineSpace.appendChild(scrollNode); + scrollNode.scrollIntoView(doScroll); + cm.display.lineSpace.removeChild(scrollNode); + } + } + + // Scroll a given position into view (immediately), verifying that + // it actually became visible (as line heights are accurately + // measured, the position of something may 'drift' during drawing). + function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) { margin = 0; } + var rect; + if (!cm.options.lineWrapping && pos == end) { + // Set pos and end to the cursor positions around the character pos sticks to + // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch + // If pos == Pos(_, 0, "before"), pos and end are unchanged + end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; + pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; + } + for (var limit = 0; limit < 5; limit++) { + var changed = false; + var coords = cursorCoords(cm, pos); + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); + rect = {left: Math.min(coords.left, endCoords.left), + top: Math.min(coords.top, endCoords.top) - margin, + right: Math.max(coords.left, endCoords.left), + bottom: Math.max(coords.bottom, endCoords.bottom) + margin}; + var scrollPos = calculateScrollPos(cm, rect); + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + updateScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; } + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; } + } + if (!changed) { break } + } + return rect + } + + // Scroll a given set of coordinates into view (immediately). + function scrollIntoView(cm, rect) { + var scrollPos = calculateScrollPos(cm, rect); + if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); } + if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); } + } + + // Calculate a new scroll position needed to scroll the given + // rectangle into view. Returns an object with scrollTop and + // scrollLeft properties. When these are undefined, the + // vertical/horizontal position does not need to be adjusted. + function calculateScrollPos(cm, rect) { + var display = cm.display, snapMargin = textHeight(cm.display); + if (rect.top < 0) { rect.top = 0; } + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; + var screen = displayHeight(cm), result = {}; + if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; } + var docBottom = cm.doc.height + paddingVert(display); + var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin; + if (rect.top < screentop) { + result.scrollTop = atTop ? 0 : rect.top; + } else if (rect.bottom > screentop + screen) { + var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen); + if (newTop != screentop) { result.scrollTop = newTop; } + } + + var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth; + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace; + var screenw = displayWidth(cm) - display.gutters.offsetWidth; + var tooWide = rect.right - rect.left > screenw; + if (tooWide) { rect.right = rect.left + screenw; } + if (rect.left < 10) + { result.scrollLeft = 0; } + else if (rect.left < screenleft) + { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); } + else if (rect.right > screenw + screenleft - 3) + { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; } + return result + } + + // Store a relative adjustment to the scroll position in the current + // operation (to be applied when the operation finishes). + function addToScrollTop(cm, top) { + if (top == null) { return } + resolveScrollToPos(cm); + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; + } + + // Make sure that at the end of the operation the current cursor is + // shown. + function ensureCursorVisible(cm) { + resolveScrollToPos(cm); + var cur = cm.getCursor(); + cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin}; + } + + function scrollToCoords(cm, x, y) { + if (x != null || y != null) { resolveScrollToPos(cm); } + if (x != null) { cm.curOp.scrollLeft = x; } + if (y != null) { cm.curOp.scrollTop = y; } + } + + function scrollToRange(cm, range) { + resolveScrollToPos(cm); + cm.curOp.scrollToPos = range; + } + + // When an operation has its scrollToPos property set, and another + // scroll action is applied before the end of the operation, this + // 'simulates' scrolling that position into view in a cheap way, so + // that the effect of intermediate scroll commands is not ignored. + function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos; + if (range) { + cm.curOp.scrollToPos = null; + var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); + scrollToCoordsRange(cm, from, to, range.margin); + } + } + + function scrollToCoordsRange(cm, from, to, margin) { + var sPos = calculateScrollPos(cm, { + left: Math.min(from.left, to.left), + top: Math.min(from.top, to.top) - margin, + right: Math.max(from.right, to.right), + bottom: Math.max(from.bottom, to.bottom) + margin + }); + scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); + } + + // Sync the scrollable area and scrollbars, ensure the viewport + // covers the visible area. + function updateScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) { return } + if (!gecko) { updateDisplaySimple(cm, {top: val}); } + setScrollTop(cm, val, true); + if (gecko) { updateDisplaySimple(cm); } + startWorker(cm, 100); + } + + function setScrollTop(cm, val, forceScroll) { + val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)); + if (cm.display.scroller.scrollTop == val && !forceScroll) { return } + cm.doc.scrollTop = val; + cm.display.scrollbars.setScrollTop(val); + if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; } + } + + // Sync scroller and scrollbar, ensure the gutter elements are + // aligned. + function setScrollLeft(cm, val, isScroller, forceScroll) { + val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)); + if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return } + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; } + cm.display.scrollbars.setScrollLeft(val); + } + + // SCROLLBARS + + // Prepare DOM reads needed to update the scrollbars. Done in one + // shot to minimize update/measure roundtrips. + function measureForScrollbars(cm) { + var d = cm.display, gutterW = d.gutters.offsetWidth; + var docH = Math.round(cm.doc.height + paddingVert(cm.display)); + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + } + } + + var NativeScrollbars = function(place, scroll, cm) { + this.cm = cm; + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); + vert.tabIndex = horiz.tabIndex = -1; + place(vert); place(horiz); + + on(vert, "scroll", function () { + if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); } + }); + on(horiz, "scroll", function () { + if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); } + }); + + this.checkedZeroWidth = false; + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } + }; + + NativeScrollbars.prototype.update = function (measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1; + var needsV = measure.scrollHeight > measure.clientHeight + 1; + var sWidth = measure.nativeBarWidth; + + if (needsV) { + this.vert.style.display = "block"; + this.vert.style.bottom = needsH ? sWidth + "px" : "0"; + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = + Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; + } else { + this.vert.scrollTop = 0; + this.vert.style.display = ""; + this.vert.firstChild.style.height = "0"; + } + + if (needsH) { + this.horiz.style.display = "block"; + this.horiz.style.right = needsV ? sWidth + "px" : "0"; + this.horiz.style.left = measure.barLeft + "px"; + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); + this.horiz.firstChild.style.width = + Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; + } else { + this.horiz.style.display = ""; + this.horiz.firstChild.style.width = "0"; + } + + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) { this.zeroWidthHack(); } + this.checkedZeroWidth = true; + } + + return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} + }; + + NativeScrollbars.prototype.setScrollLeft = function (pos) { + if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; } + if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); } + }; + + NativeScrollbars.prototype.setScrollTop = function (pos) { + if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; } + if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); } + }; + + NativeScrollbars.prototype.zeroWidthHack = function () { + var w = mac && !mac_geMountainLion ? "12px" : "18px"; + this.horiz.style.height = this.vert.style.width = w; + this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; + this.disableHoriz = new Delayed; + this.disableVert = new Delayed; + }; + + NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { + bar.style.pointerEvents = "auto"; + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // right corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect(); + var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) + : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); + if (elt != bar) { bar.style.pointerEvents = "none"; } + else { delay.set(1000, maybeDisable); } + } + delay.set(1000, maybeDisable); + }; + + NativeScrollbars.prototype.clear = function () { + var parent = this.horiz.parentNode; + parent.removeChild(this.horiz); + parent.removeChild(this.vert); + }; + + var NullScrollbars = function () {}; + + NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} }; + NullScrollbars.prototype.setScrollLeft = function () {}; + NullScrollbars.prototype.setScrollTop = function () {}; + NullScrollbars.prototype.clear = function () {}; + + function updateScrollbars(cm, measure) { + if (!measure) { measure = measureForScrollbars(cm); } + var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; + updateScrollbarsInner(cm, measure); + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) + { updateHeightsInViewport(cm); } + updateScrollbarsInner(cm, measureForScrollbars(cm)); + startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; + } + } + + // Re-synchronize the fake scrollbars with the actual size of the + // content. + function updateScrollbarsInner(cm, measure) { + var d = cm.display; + var sizes = d.scrollbars.update(measure); + + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; + d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; + + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = sizes.bottom + "px"; + d.scrollbarFiller.style.width = sizes.right + "px"; + } else { d.scrollbarFiller.style.display = ""; } + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = sizes.bottom + "px"; + d.gutterFiller.style.width = measure.gutterWidth + "px"; + } else { d.gutterFiller.style.display = ""; } + } + + var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; + + function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear(); + if (cm.display.scrollbars.addClass) + { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } + } + + cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function () { + if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); } + }); + node.setAttribute("cm-not-content", "true"); + }, function (pos, axis) { + if (axis == "horizontal") { setScrollLeft(cm, pos); } + else { updateScrollTop(cm, pos); } + }, cm); + if (cm.display.scrollbars.addClass) + { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } + } + + // Operations are used to wrap a series of changes to the editor + // state in such a way that each change won't have to update the + // cursor and display (which would be awkward, slow, and + // error-prone). Instead, display updates are batched and then all + // combined and executed at once. + + var nextOpId = 0; + // Start a new operation. + function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: 0, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + focus: false, + id: ++nextOpId, // Unique ID + markArrays: null // Used by addMarkedSpan + }; + pushOperation(cm.curOp); + } + + // Finish an operation, updating the display and signalling delayed events + function endOperation(cm) { + var op = cm.curOp; + if (op) { finishOperation(op, function (group) { + for (var i = 0; i < group.ops.length; i++) + { group.ops[i].cm.curOp = null; } + endOperations(group); + }); } + } + + // The DOM updates done when an operation finishes are batched so + // that the minimum number of relayouts are required. + function endOperations(group) { + var ops = group.ops; + for (var i = 0; i < ops.length; i++) // Read DOM + { endOperation_R1(ops[i]); } + for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) + { endOperation_W1(ops[i$1]); } + for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM + { endOperation_R2(ops[i$2]); } + for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) + { endOperation_W2(ops[i$3]); } + for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM + { endOperation_finish(ops[i$4]); } + } + + function endOperation_R1(op) { + var cm = op.cm, display = cm.display; + maybeClipScrollbars(cm); + if (op.updateMaxLine) { findMaxLine(cm); } + + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping; + op.update = op.mustUpdate && + new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); + } + + function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); + } + + function endOperation_R2(op) { + var cm = op.cm, display = cm.display; + if (op.updatedDisplay) { updateHeightsInViewport(cm); } + + op.barMeasure = measureForScrollbars(cm); + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; + cm.display.sizerWidth = op.adjustWidthTo; + op.barMeasure.scrollWidth = + Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); + } + + if (op.updatedDisplay || op.selectionChanged) + { op.preparedSelection = display.input.prepareSelection(); } + } + + function endOperation_W2(op) { + var cm = op.cm; + + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; + if (op.maxScrollLeft < cm.doc.scrollLeft) + { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); } + cm.display.maxLineChanged = false; + } + + var takeFocus = op.focus && op.focus == activeElt(); + if (op.preparedSelection) + { cm.display.input.showSelection(op.preparedSelection, takeFocus); } + if (op.updatedDisplay || op.startHeight != cm.doc.height) + { updateScrollbars(cm, op.barMeasure); } + if (op.updatedDisplay) + { setDocumentHeight(cm, op.barMeasure); } + + if (op.selectionChanged) { restartBlink(cm); } + + if (cm.state.focused && op.updateInput) + { cm.display.input.reset(op.typing); } + if (takeFocus) { ensureFocus(op.cm); } + } + + function endOperation_finish(op) { + var cm = op.cm, display = cm.display, doc = cm.doc; + + if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); } + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) + { display.wheelStartX = display.wheelStartY = null; } + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); } + + if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), + clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); + maybeScrollWindow(cm, rect); + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; + if (hidden) { for (var i = 0; i < hidden.length; ++i) + { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } } + if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) + { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } } + + if (display.wrapper.offsetHeight) + { doc.scrollTop = cm.display.scroller.scrollTop; } + + // Fire change events, and delayed event handlers + if (op.changeObjs) + { signal(cm, "changes", cm, op.changeObjs); } + if (op.update) + { op.update.finish(); } + } + + // Run the given function in an operation + function runInOp(cm, f) { + if (cm.curOp) { return f() } + startOperation(cm); + try { return f() } + finally { endOperation(cm); } + } + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm, f) { + return function() { + if (cm.curOp) { return f.apply(cm, arguments) } + startOperation(cm); + try { return f.apply(cm, arguments) } + finally { endOperation(cm); } + } + } + // Used to add methods to editor and doc instances, wrapping them in + // operations. + function methodOp(f) { + return function() { + if (this.curOp) { return f.apply(this, arguments) } + startOperation(this); + try { return f.apply(this, arguments) } + finally { endOperation(this); } + } + } + function docMethodOp(f) { + return function() { + var cm = this.cm; + if (!cm || cm.curOp) { return f.apply(this, arguments) } + startOperation(cm); + try { return f.apply(this, arguments) } + finally { endOperation(cm); } + } + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.highlightFrontier < cm.display.viewTo) + { cm.state.highlight.set(time, bind(highlightWorker, cm)); } + } + + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.highlightFrontier >= cm.display.viewTo) { return } + var end = +new Date + cm.options.workTime; + var context = getContextBefore(cm, doc.highlightFrontier); + var changedLines = []; + + doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { + if (context.line >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles; + var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; + var highlighted = highlightLine(cm, line, context, true); + if (resetState) { context.state = resetState; } + line.styles = highlighted.styles; + var oldCls = line.styleClasses, newCls = highlighted.classes; + if (newCls) { line.styleClasses = newCls; } + else if (oldCls) { line.styleClasses = null; } + var ischange = !oldStyles || oldStyles.length != line.styles.length || + oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); + for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; } + if (ischange) { changedLines.push(context.line); } + line.stateAfter = context.save(); + context.nextLine(); + } else { + if (line.text.length <= cm.options.maxHighlightLength) + { processLine(cm, line.text, context); } + line.stateAfter = context.line % 5 == 0 ? context.save() : null; + context.nextLine(); + } + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true + } + }); + doc.highlightFrontier = context.line; + doc.modeFrontier = Math.max(doc.modeFrontier, context.line); + if (changedLines.length) { runInOp(cm, function () { + for (var i = 0; i < changedLines.length; i++) + { regLineChange(cm, changedLines[i], "text"); } + }); } + } + + // DISPLAY DRAWING + + var DisplayUpdate = function(cm, viewport, force) { + var display = cm.display; + + this.viewport = viewport; + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport); + this.editorIsHidden = !display.wrapper.offsetWidth; + this.wrapperHeight = display.wrapper.clientHeight; + this.wrapperWidth = display.wrapper.clientWidth; + this.oldDisplayWidth = displayWidth(cm); + this.force = force; + this.dims = getDimensions(cm); + this.events = []; + }; + + DisplayUpdate.prototype.signal = function (emitter, type) { + if (hasHandler(emitter, type)) + { this.events.push(arguments); } + }; + DisplayUpdate.prototype.finish = function () { + for (var i = 0; i < this.events.length; i++) + { signal.apply(null, this.events[i]); } + }; + + function maybeClipScrollbars(cm) { + var display = cm.display; + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; + display.heightForcer.style.height = scrollGap(cm) + "px"; + display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; + display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; + display.scrollbarsClipped = true; + } + } + + function selectionSnapshot(cm) { + if (cm.hasFocus()) { return null } + var active = activeElt(); + if (!active || !contains(cm.display.lineDiv, active)) { return null } + var result = {activeElt: active}; + if (window.getSelection) { + var sel = window.getSelection(); + if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { + result.anchorNode = sel.anchorNode; + result.anchorOffset = sel.anchorOffset; + result.focusNode = sel.focusNode; + result.focusOffset = sel.focusOffset; + } + } + return result + } + + function restoreSelection(snapshot) { + if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return } + snapshot.activeElt.focus(); + if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && + snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { + var sel = window.getSelection(), range = document.createRange(); + range.setEnd(snapshot.anchorNode, snapshot.anchorOffset); + range.collapse(false); + sel.removeAllRanges(); + sel.addRange(range); + sel.extend(snapshot.focusNode, snapshot.focusOffset); + } + } + + // Does the actual updating of the line display. Bails out + // (returning false) when there is nothing to be done and forced is + // false. + function updateDisplayIfNeeded(cm, update) { + var display = cm.display, doc = cm.doc; + + if (update.editorIsHidden) { + resetView(cm); + return false + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && + update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && + display.renderedView == display.view && countDirtyView(cm) == 0) + { return false } + + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm); + update.dims = getDimensions(cm); + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size; + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, update.visible.to + cm.options.viewportMargin); + if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); } + if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); } + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from); + to = visualLineEndNo(cm.doc, to); + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; + adjustView(cm, from, to); + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px"; + + var toUpdate = countDirtyView(cm); + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) + { return false } + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var selSnapshot = selectionSnapshot(cm); + if (toUpdate > 4) { display.lineDiv.style.display = "none"; } + patchDisplay(cm, display.updateLineNumbers, update.dims); + if (toUpdate > 4) { display.lineDiv.style.display = ""; } + display.renderedView = display.view; + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + restoreSelection(selSnapshot); + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv); + removeChildren(display.selectionDiv); + display.gutters.style.height = display.sizer.style.minHeight = 0; + + if (different) { + display.lastWrapHeight = update.wrapperHeight; + display.lastWrapWidth = update.wrapperWidth; + startWorker(cm, 400); + } + + display.updateLineNumbers = null; + + return true + } + + function postUpdateDisplay(cm, update) { + var viewport = update.viewport; + + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) + { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; } + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport); + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) + { break } + } else if (first) { + update.visible = visibleLines(cm.display, cm.doc, viewport); + } + if (!updateDisplayIfNeeded(cm, update)) { break } + updateHeightsInViewport(cm); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.force = false; + } + + update.signal(cm, "update", cm); + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); + cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; + } + } + + function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport); + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm); + postUpdateDisplay(cm, update); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.finish(); + } + } + + // Sync the actual display DOM structure with display.view, removing + // nodes for lines that are no longer in view, and creating the ones + // that are not there yet, and updating the ones that are out of + // date. + function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers; + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + { node.style.display = "none"; } + else + { node.parentNode.removeChild(node); } + return next + } + + var view = display.view, lineN = display.viewFrom; + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims); + container.insertBefore(node, cur); + } else { // Already drawn + while (cur != lineView.node) { cur = rm(cur); } + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber; + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; } + updateLineForChanges(cm, lineView, lineN, dims); + } + if (updateNumber) { + removeChildren(lineView.lineNumber); + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); + } + cur = lineView.node.nextSibling; + } + lineN += lineView.size; + } + while (cur) { cur = rm(cur); } + } + + function updateGutterSpace(display) { + var width = display.gutters.offsetWidth; + display.sizer.style.marginLeft = width + "px"; + // Send an event to consumers responding to changes in gutter width. + signalLater(display, "gutterChanged", display); + } + + function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px"; + cm.display.heightForcer.style.top = measure.docHeight + "px"; + cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"; + } + + // Re-align line numbers and gutter marks to compensate for + // horizontal scrolling. + function alignHorizontally(cm) { + var display = cm.display, view = display.view; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return } + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, left = comp + "px"; + for (var i = 0; i < view.length; i++) { if (!view[i].hidden) { + if (cm.options.fixedGutter) { + if (view[i].gutter) + { view[i].gutter.style.left = left; } + if (view[i].gutterBackground) + { view[i].gutterBackground.style.left = left; } + } + var align = view[i].alignable; + if (align) { for (var j = 0; j < align.length; j++) + { align[j].style.left = left; } } + } } + if (cm.options.fixedGutter) + { display.gutters.style.left = (comp + gutterW) + "px"; } + } + + // Used to ensure that the line number gutter is still the right + // size for the current document size. Returns true when an update + // is needed. + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) { return false } + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + updateGutterSpace(cm.display); + return true + } + return false + } + + function getGutters(gutters, lineNumbers) { + var result = [], sawLineNumbers = false; + for (var i = 0; i < gutters.length; i++) { + var name = gutters[i], style = null; + if (typeof name != "string") { style = name.style; name = name.className; } + if (name == "CodeMirror-linenumbers") { + if (!lineNumbers) { continue } + else { sawLineNumbers = true; } + } + result.push({className: name, style: style}); + } + if (lineNumbers && !sawLineNumbers) { result.push({className: "CodeMirror-linenumbers", style: null}); } + return result + } + + // Rebuild the gutter elements, ensure the margin to the left of the + // code matches their width. + function renderGutters(display) { + var gutters = display.gutters, specs = display.gutterSpecs; + removeChildren(gutters); + display.lineGutter = null; + for (var i = 0; i < specs.length; ++i) { + var ref = specs[i]; + var className = ref.className; + var style = ref.style; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)); + if (style) { gElt.style.cssText = style; } + if (className == "CodeMirror-linenumbers") { + display.lineGutter = gElt; + gElt.style.width = (display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = specs.length ? "" : "none"; + updateGutterSpace(display); + } + + function updateGutters(cm) { + renderGutters(cm.display); + regChange(cm); + alignHorizontally(cm); + } + + // The display handles the DOM integration, both for input reading + // and content drawing. It holds references to DOM nodes and + // display-related state. + + function Display(place, doc, input, options) { + var d = this; + this.input = input; + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + d.scrollbarFiller.setAttribute("cm-not-content", "true"); + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + d.gutterFiller.setAttribute("cm-not-content", "true"); + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = eltP("div", null, "CodeMirror-code"); + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + d.cursorDiv = elt("div", null, "CodeMirror-cursors"); + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure"); + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none"); + var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); + // Moved around its parent to cover visible view. + d.mover = elt("div", [lines], null, "position: relative"); + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + d.sizerWidth = null; + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + + // This attribute is respected by automatic translation systems such as Google Translate, + // and may also be respected by tools used by human translators. + d.wrapper.setAttribute('translate', 'no'); + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; } + + if (place) { + if (place.appendChild) { place.appendChild(d.wrapper); } + else { place(d.wrapper); } + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first; + d.reportedViewFrom = d.reportedViewTo = doc.first; + // Information about the rendered lines. + d.view = []; + d.renderedView = null; + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null; + // Empty space (in pixels) above the view + d.viewOffset = 0; + d.lastWrapHeight = d.lastWrapWidth = 0; + d.updateLineNumbers = null; + + d.nativeBarWidth = d.barHeight = d.barWidth = 0; + d.scrollbarsClipped = false; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false; + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + // True when shift is held down. + d.shift = false; + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null; + + d.activeTouch = null; + + d.gutterSpecs = getGutters(options.gutters, options.lineNumbers); + renderGutters(d); + + input.init(d); + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) { wheelPixelsPerUnit = -.53; } + else if (gecko) { wheelPixelsPerUnit = 15; } + else if (chrome) { wheelPixelsPerUnit = -.7; } + else if (safari) { wheelPixelsPerUnit = -1/3; } + + function wheelEventDelta(e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; } + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; } + else if (dy == null) { dy = e.wheelDelta; } + return {x: dx, y: dy} + } + function wheelEventPixels(e) { + var delta = wheelEventDelta(e); + delta.x *= wheelPixelsPerUnit; + delta.y *= wheelPixelsPerUnit; + return delta + } + + function onScrollWheel(cm, e) { + var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; + var pixelsPerUnit = wheelPixelsPerUnit; + if (e.deltaMode === 0) { + dx = e.deltaX; + dy = e.deltaY; + pixelsPerUnit = 1; + } + + var display = cm.display, scroll = display.scroller; + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth; + var canScrollY = scroll.scrollHeight > scroll.clientHeight; + if (!(dx && canScrollX || dy && canScrollY)) { return } + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur; + break outer + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && pixelsPerUnit != null) { + if (dy && canScrollY) + { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); } + setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit)); + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || (dy && canScrollY)) + { e_preventDefault(e); } + display.wheelStartX = null; // Abort measurement, if in progress + return + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && pixelsPerUnit != null) { + var pixels = dy * pixelsPerUnit; + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; + if (pixels < 0) { top = Math.max(0, top + pixels - 50); } + else { bot = Math.min(cm.doc.height, bot + pixels + 50); } + updateDisplaySimple(cm, {top: top, bottom: bot}); + } + + if (wheelSamples < 20 && e.deltaMode !== 0) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; display.wheelDY = dy; + setTimeout(function () { + if (display.wheelStartX == null) { return } + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX); + display.wheelStartX = display.wheelStartY = null; + if (!sample) { return } + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; display.wheelDY += dy; + } + } + } + + // Selection objects are immutable. A new one is created every time + // the selection changes. A selection is one or more non-overlapping + // (and non-touching) ranges, sorted, and an integer that indicates + // which one is the primary selection (the one that's scrolled into + // view, that getCursor returns, etc). + var Selection = function(ranges, primIndex) { + this.ranges = ranges; + this.primIndex = primIndex; + }; + + Selection.prototype.primary = function () { return this.ranges[this.primIndex] }; + + Selection.prototype.equals = function (other) { + if (other == this) { return true } + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false } + for (var i = 0; i < this.ranges.length; i++) { + var here = this.ranges[i], there = other.ranges[i]; + if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false } + } + return true + }; + + Selection.prototype.deepCopy = function () { + var out = []; + for (var i = 0; i < this.ranges.length; i++) + { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); } + return new Selection(out, this.primIndex) + }; + + Selection.prototype.somethingSelected = function () { + for (var i = 0; i < this.ranges.length; i++) + { if (!this.ranges[i].empty()) { return true } } + return false + }; + + Selection.prototype.contains = function (pos, end) { + if (!end) { end = pos; } + for (var i = 0; i < this.ranges.length; i++) { + var range = this.ranges[i]; + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + { return i } + } + return -1 + }; + + var Range = function(anchor, head) { + this.anchor = anchor; this.head = head; + }; + + Range.prototype.from = function () { return minPos(this.anchor, this.head) }; + Range.prototype.to = function () { return maxPos(this.anchor, this.head) }; + Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }; + + // Take an unsorted, potentially overlapping set of ranges, and + // build a selection out of it. 'Consumes' ranges array (modifying + // it). + function normalizeSelection(cm, ranges, primIndex) { + var mayTouch = cm && cm.options.selectionsMayTouch; + var prim = ranges[primIndex]; + ranges.sort(function (a, b) { return cmp(a.from(), b.from()); }); + primIndex = indexOf(ranges, prim); + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1]; + var diff = cmp(prev.to(), cur.from()); + if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; + if (i <= primIndex) { --primIndex; } + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); + } + } + return new Selection(ranges, primIndex) + } + + function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0) + } + + // Compute the position of the end of a change (its 'to' property + // refers to the pre-change end). + function changeEnd(change) { + if (!change.text) { return change.to } + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)) + } + + // Adjust a position to refer to the post-change position of the + // same text, or the end of the change if the change covers it. + function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) { return pos } + if (cmp(pos, change.to) <= 0) { return changeEnd(change) } + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; + if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; } + return Pos(line, ch) + } + + function computeSelAfterChange(doc, change) { + var out = []; + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))); + } + return normalizeSelection(doc.cm, out, doc.sel.primIndex) + } + + function offsetPos(pos, old, nw) { + if (pos.line == old.line) + { return Pos(nw.line, pos.ch - old.ch + nw.ch) } + else + { return Pos(nw.line + (pos.line - old.line), pos.ch) } + } + + // Used by replaceSelections to allow moving the selection to the + // start or around the replaced test. Hint may be "start" or "around". + function computeReplacedSel(doc, changes, hint) { + var out = []; + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + var from = offsetPos(change.from, oldPrev, newPrev); + var to = offsetPos(changeEnd(change), oldPrev, newPrev); + oldPrev = change.to; + newPrev = to; + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; + out[i] = new Range(inv ? to : from, inv ? from : to); + } else { + out[i] = new Range(from, from); + } + } + return new Selection(out, doc.sel.primIndex) + } + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = getMode(cm.options, cm.doc.modeOption); + resetModeState(cm); + } + + function resetModeState(cm) { + cm.doc.iter(function (line) { + if (line.stateAfter) { line.stateAfter = null; } + if (line.styles) { line.styles = null; } + }); + cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) { regChange(cm); } + } + + // DOCUMENT DATA STRUCTURE + + // By default, updates that start and end at the beginning of a line + // are treated specially, in order to make the association of line + // widgets and marker elements with the text behave more intuitive. + function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore) + } + + // Perform a change on the document data structure. + function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight); + signalLater(line, "change", line, change); + } + function linesFor(start, end) { + var result = []; + for (var i = start; i < end; ++i) + { result.push(new Line(text[i], spansFor(i), estimateHeight)); } + return result + } + + var from = change.from, to = change.to, text = change.text; + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)); + doc.remove(text.length, doc.size - text.length); + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1); + update(lastLine, lastLine.text, lastSpans); + if (nlines) { doc.remove(from.line, nlines); } + if (added.length) { doc.insert(from.line, added); } + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + var added$1 = linesFor(1, text.length - 1); + added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added$1); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + var added$2 = linesFor(1, text.length - 1); + if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); } + doc.insert(from.line + 1, added$2); + } + + signalLater(doc, "change", doc, change); + } + + // Call f for all linked documents. + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) { continue } + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) { continue } + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } } + } + propagate(doc, null, true); + } + + // Attach a document to an editor. + function attachDoc(cm, doc) { + if (doc.cm) { throw new Error("This document is already in use.") } + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + setDirectionClass(cm); + cm.options.direction = doc.direction; + if (!cm.options.lineWrapping) { findMaxLine(cm); } + cm.options.mode = doc.modeOption; + regChange(cm); + } + + function setDirectionClass(cm) { + (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); + } + + function directionChanged(cm) { + runInOp(cm, function () { + setDirectionClass(cm); + regChange(cm); + }); + } + + function History(prev) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = []; + this.undoDepth = prev ? prev.undoDepth : Infinity; + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0; + this.lastOp = this.lastSelOp = null; + this.lastOrigin = this.lastSelOrigin = null; + // Used by the isClean() method + this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1; + } + + // Create a history change event from an updateDoc-style change + // object. + function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true); + return histChange + } + + // Pop all selection events off the end of a history array. Stop at + // a change event. + function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array); + if (last.ranges) { array.pop(); } + else { break } + } + } + + // Find the top change event in the history. Pop off selection + // events that are in the way. + function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done); + return lst(hist.done) + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done) + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop(); + return lst(hist.done) + } + } + + // Register a change in the history. Merges changes that are within + // a single operation, or are close together with an origin that + // allows merging (starting with "+") into a single event. + function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date, cur; + var last; + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + last = lst(cur.changes); + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done); + if (!before || !before.ranges) + { pushSelectionToHistory(doc.sel, hist.done); } + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation}; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) { + hist.done.shift(); + if (!hist.done[0].ranges) { hist.done.shift(); } + } + } + hist.done.push(selAfter); + hist.generation = ++hist.maxGeneration; + hist.lastModTime = hist.lastSelTime = time; + hist.lastOp = hist.lastSelOp = opId; + hist.lastOrigin = hist.lastSelOrigin = change.origin; + + if (!last) { signal(doc, "historyAdded"); } + } + + function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0); + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) + } + + // Called whenever the selection changes, sets the new selection as + // the pending selection in the history, and pushes the old pending + // selection into the 'done' array when it was significantly + // different (in number of selected ranges, emptiness, or time). + function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin; + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + { hist.done[hist.done.length - 1] = sel; } + else + { pushSelectionToHistory(sel, hist.done); } + + hist.lastSelTime = +new Date; + hist.lastSelOrigin = origin; + hist.lastSelOp = opId; + if (options && options.clearRedo !== false) + { clearSelectionEvents(hist.undone); } + } + + function pushSelectionToHistory(sel, dest) { + var top = lst(dest); + if (!(top && top.ranges && top.equals(sel))) + { dest.push(sel); } + } + + // Used to store marked span information in the history. + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { + if (line.markedSpans) + { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; } + ++n; + }); + } + + // When un/re-doing restores text containing marked spans, those + // that have been explicitly cleared should not be restored. + function removeClearedSpans(spans) { + if (!spans) { return null } + var out; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } } + else if (out) { out.push(spans[i]); } + } + return !out ? spans : out.length ? out : null + } + + // Retrieve and filter the old marked spans stored in a change event. + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) { return null } + var nw = []; + for (var i = 0; i < change.text.length; ++i) + { nw.push(removeClearedSpans(found[i])); } + return nw + } + + // Used for un/re-doing changes from the history. Combines the + // result of computing the existing spans with the set of spans that + // existed in the history (so that deleting around a span and then + // undoing brings back the span). + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) { return stretched } + if (!stretched) { return old } + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) + { if (oldCur[k].marker == span.marker) { continue spans } } + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup, instantiateSel) { + var copy = []; + for (var i = 0; i < events.length; ++i) { + var event = events[i]; + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); + continue + } + var changes = event.changes, newChanges = []; + copy.push({changes: newChanges}); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m = (void 0); + newChanges.push({from: change.from, to: change.to, text: change.text}); + if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } } } + } + } + return copy + } + + // The 'scroll' parameter given to many of these indicated whether + // the new cursor position should be scrolled into view after + // modifying the selection. + + // If shift is held or the extend flag is set, extends a range to + // include a given position (and optionally a second position). + // Otherwise, simply returns the range between the given positions. + // Used for cursor motion and such. + function extendRange(range, head, other, extend) { + if (extend) { + var anchor = range.anchor; + if (other) { + var posBefore = cmp(head, anchor) < 0; + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head; + head = other; + } else if (posBefore != (cmp(head, other) < 0)) { + head = other; + } + } + return new Range(anchor, head) + } else { + return new Range(other || head, head) + } + } + + // Extend the primary selection range, discard the rest. + function extendSelection(doc, head, other, options, extend) { + if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); } + setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); + } + + // Extend all selections (pos is an array of selections with length + // equal the number of selections) + function extendSelections(doc, heads, options) { + var out = []; + var extend = doc.cm && (doc.cm.display.shift || doc.extend); + for (var i = 0; i < doc.sel.ranges.length; i++) + { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); } + var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex); + setSelection(doc, newSel, options); + } + + // Updates a single range in the selection. + function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0); + ranges[i] = range; + setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options); + } + + // Reset the selection to a single range. + function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options); + } + + // Give beforeSelectionChange handlers a change to influence a + // selection update. + function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + this.ranges = []; + for (var i = 0; i < ranges.length; i++) + { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)); } + }, + origin: options && options.origin + }; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); } + if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) } + else { return sel } + } + + function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done); + if (last && last.ranges) { + done[done.length - 1] = sel; + setSelectionNoUndo(doc, sel, options); + } else { + setSelection(doc, sel, options); + } + } + + // Set a new selection. + function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options); + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); + } + + function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + { sel = filterSelectionChange(doc, sel, options); } + + var bias = options && options.bias || + (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); + + if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor") + { ensureCursorVisible(doc.cm); } + } + + function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) { return } + + doc.sel = sel; + + if (doc.cm) { + doc.cm.curOp.updateInput = 1; + doc.cm.curOp.selectionChanged = true; + signalCursorActivity(doc.cm); + } + signalLater(doc, "cursorActivity", doc); + } + + // Verify that the selection does not partially select any atomic + // marked ranges. + function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); + } + + // Return a selection that does not partially select any atomic + // ranges. + function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); + var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) { out = sel.ranges.slice(0, i); } + out[i] = new Range(newAnchor, newHead); + } + } + return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel + } + + function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line); + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + + // Determine if we should prevent the cursor being placed to the left/right of an atomic marker + // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it + // is with selectLeft/Right + var preventCursorLeft = ("selectLeft" in m) ? !m.selectLeft : m.inclusiveLeft; + var preventCursorRight = ("selectRight" in m) ? !m.selectRight : m.inclusiveRight; + + if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && + (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) { break } + else {--i; continue} + } + } + if (!m.atomic) { continue } + + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), diff = (void 0); + if (dir < 0 ? preventCursorRight : preventCursorLeft) + { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); } + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) + { return skipAtomicInner(doc, near, pos, dir, mayClear) } + } + + var far = m.find(dir < 0 ? -1 : 1); + if (dir < 0 ? preventCursorLeft : preventCursorRight) + { far = movePos(doc, far, dir, far.line == pos.line ? line : null); } + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null + } + } } + return pos + } + + // Ensure a given position is not inside an atomic range. + function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1; + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || + skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); + if (!found) { + doc.cantEdit = true; + return Pos(doc.first, 0) + } + return found + } + + function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } + else { return null } + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } + else { return null } + } else { + return new Pos(pos.line, pos.ch + dir) + } + } + + function selectAll(cm) { + cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); + } + + // UPDATING + + // Allow "beforeChange" event handlers to influence a change + function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function () { return obj.canceled = true; } + }; + if (update) { obj.update = function (from, to, text, origin) { + if (from) { obj.from = clipPos(doc, from); } + if (to) { obj.to = clipPos(doc, to); } + if (text) { obj.text = text; } + if (origin !== undefined) { obj.origin = origin; } + }; } + signal(doc, "beforeChange", doc, obj); + if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); } + + if (obj.canceled) { + if (doc.cm) { doc.cm.curOp.updateInput = 2; } + return null + } + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin} + } + + // Apply a change to a document, and add it to the document's + // history, and propagating it to all linked documents. + function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) } + if (doc.cm.state.suppressEdits) { return } + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) { return } + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 0; --i) + { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); } + } else { + makeChangeInner(doc, change); + } + } + + function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return } + var selAfter = computeSelAfterChange(doc, change); + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + // Revert a change stored in a document's history. + function makeChangeFromHistory(doc, type, allowSelectionOnly) { + var suppress = doc.cm && doc.cm.state.suppressEdits; + if (suppress && !allowSelectionOnly) { return } + + var hist = doc.history, event, selAfter = doc.sel; + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + var i = 0; + for (; i < source.length; i++) { + event = source[i]; + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + { break } + } + if (i == source.length) { return } + hist.lastOrigin = hist.lastSelOrigin = null; + + for (;;) { + event = source.pop(); + if (event.ranges) { + pushSelectionToHistory(event, dest); + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}); + return + } + selAfter = event; + } else if (suppress) { + source.push(event); + return + } else { break } + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = []; + pushSelectionToHistory(selAfter, dest); + dest.push({changes: antiChanges, generation: hist.generation}); + hist.generation = event.generation || ++hist.maxGeneration; + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + + var loop = function ( i ) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + source.length = 0; + return {} + } + + antiChanges.push(historyChangeFromChange(doc, change)); + + var after = i ? computeSelAfterChange(doc, change) : lst(source); + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); } + var rebased = []; + + // Propagate to the linked documents + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + }; + + for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { + var returned = loop( i$1 ); + + if ( returned ) return returned.v; + } + } + + // Sub-views need their line numbers shifted when text is added + // above or below them in the parent document. + function shiftDoc(doc, distance) { + if (distance == 0) { return } + doc.first += distance; + doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( + Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch) + ); }), doc.sel.primIndex); + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance); + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) + { regLineChange(doc.cm, l, "gutter"); } + } + } + + // More lower-level change function, handling only a single document + // (not linked ones). + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return + } + if (change.from.line > doc.lastLine()) { return } + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin}; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin}; + } + + change.removed = getBetween(doc, change.from, change.to); + + if (!selAfter) { selAfter = computeSelAfterChange(doc, change); } + if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); } + else { updateDoc(doc, change, spans); } + setSelectionNoUndo(doc, selAfter, sel_dontScroll); + + if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) + { doc.cantEdit = false; } + } + + // Handle the interaction of a change to a document with the editor + // that this document is part of. + function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to; + + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function (line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true + } + }); + } + + if (doc.sel.contains(change.from, change.to) > -1) + { signalCursorActivity(cm); } + + updateDoc(doc, change, spans, estimateHeight(cm)); + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function (line) { + var len = lineLength(line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; } + } + + retreatFrontier(doc, from.line); + startWorker(cm, 400); + + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + if (change.full) + { regChange(cm); } + else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + { regLineChange(cm, from.line, "text"); } + else + { regChange(cm, from.line, to.line + 1, lendiff); } + + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); + if (changeHandler || changesHandler) { + var obj = { + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + }; + if (changeHandler) { signalLater(cm, "change", cm, obj); } + if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } + } + cm.display.selForContextMenu = null; + } + + function replaceRange(doc, code, from, to, origin) { + var assign; + + if (!to) { to = from; } + if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); } + if (typeof code == "string") { code = doc.splitLines(code); } + makeChange(doc, {from: from, to: to, text: code, origin: origin}); + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true; + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); + } + continue + } + for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { + var cur = sub.changes[j$1]; + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch); + cur.to = Pos(cur.to.line + diff, cur.to.ch); + } else if (from <= cur.to.line) { + ok = false; + break + } + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } + } + } + + function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // Utility for applying a change to a line by handle or number, + // returning the number and optionally registering the line as + // changed. + function changeLine(doc, handle, changeType, op) { + var no = handle, line = handle; + if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); } + else { no = lineNo(handle); } + if (no == null) { return null } + if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); } + return line + } + + // The document is represented as a BTree consisting of leaves, with + // chunk of lines in them, and branches, with up to ten leaves or + // other branch nodes below them. The top node is always a branch + // node, and is the document object itself (meaning it has + // additional methods and properties). + // + // All nodes have parent links. The tree is used both to go from + // line numbers to line objects, and to go from objects to numbers. + // It also indexes by height, and is used to convert between height + // and line object, and to find the total height of the document. + // + // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + var height = 0; + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length }, + + // Remove the n lines at offset 'at'. + removeInner: function(at, n) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + + // Helper used to collapse a small branch into a single leaf. + collapse: function(lines) { + lines.push.apply(lines, this.lines); + }, + + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; } + }, + + // Used to iterate over a part of the tree. + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + { if (op(this.lines[at])) { return true } } + } + }; + + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0; i < children.length; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + + BranchChunk.prototype = { + chunkSize: function() { return this.size }, + + removeInner: function(at, n) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.removeInner(at, rm); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) { break } + at = 0; + } else { at -= sz; } + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + + collapse: function(lines) { + for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); } + }, + + insertInner: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. + // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. + var remaining = child.lines.length % 25 + 25; + for (var pos = remaining; pos < child.lines.length;) { + var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); + child.height -= leaf.height; + this.children.splice(++i, 0, leaf); + leaf.parent = this; + } + child.lines = child.lines.slice(0, remaining); + this.maybeSpill(); + } + break + } + at -= sz; + } + }, + + // When a node has grown, check whether it should be split. + maybeSpill: function() { + if (this.children.length <= 10) { return } + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10) + me.parent.maybeSpill(); + }, + + iterN: function(at, n, op) { + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) { return true } + if ((n -= used) == 0) { break } + at = 0; + } else { at -= sz; } + } + } + }; + + // Line widgets are block elements displayed above or below a line. + + var LineWidget = function(doc, node, options) { + if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) + { this[opt] = options[opt]; } } } + this.doc = doc; + this.node = node; + }; + + LineWidget.prototype.clear = function () { + var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); + if (no == null || !ws) { return } + for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } } + if (!ws.length) { line.widgets = null; } + var height = widgetHeight(this); + updateLineHeight(line, Math.max(0, line.height - height)); + if (cm) { + runInOp(cm, function () { + adjustScrollWhenAboveVisible(cm, line, -height); + regLineChange(cm, no, "widget"); + }); + signalLater(cm, "lineWidgetCleared", cm, this, no); + } + }; + + LineWidget.prototype.changed = function () { + var this$1 = this; + + var oldH = this.height, cm = this.doc.cm, line = this.line; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) { return } + if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); } + if (cm) { + runInOp(cm, function () { + cm.curOp.forceUpdate = true; + adjustScrollWhenAboveVisible(cm, line, diff); + signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); + }); + } + }; + eventMixin(LineWidget); + + function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + { addToScrollTop(cm, diff); } + } + + function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options); + var cm = doc.cm; + if (cm && widget.noHScroll) { cm.display.alignWidgets = true; } + changeLine(doc, handle, "widget", function (line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) { widgets.push(widget); } + else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); } + widget.line = line; + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) { addToScrollTop(cm, widget.height); } + cm.curOp.forceUpdate = true; + } + return true + }); + if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); } + return widget + } + + // TEXTMARKERS + + // Created with markText and setBookmark methods. A TextMarker is a + // handle that can be used to clear or find a marked position in the + // document. Line objects hold arrays (markedSpans) containing + // {from, to, marker} object pointing to such marker objects, and + // indicating that such a marker is present on that line. Multiple + // lines may point to the same marker when it spans across lines. + // The spans will have null for their from/to properties when the + // marker continues beyond the start/end of the line. Markers have + // links back to the lines they currently touch. + + // Collapsed markers have unique ids, in order to be able to order + // them, which is needed for uniquely determining an outer marker + // when they overlap (they may nest, but not partially overlap). + var nextMarkerId = 0; + + var TextMarker = function(doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + this.id = ++nextMarkerId; + }; + + // Clear the marker. + TextMarker.prototype.clear = function () { + if (this.explicitlyCleared) { return } + var cm = this.doc.cm, withOp = cm && !cm.curOp; + if (withOp) { startOperation(cm); } + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) { signalLater(this, "clear", found.from, found.to); } + } + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), "text"); } + else if (cm) { + if (span.to != null) { max = lineNo(line); } + if (span.from != null) { min = lineNo(line); } + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) + { updateLineHeight(line, textHeight(cm.display)); } + } + if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { + var visual = visualLine(this.lines[i$1]), len = lineLength(visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } } + + if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); } + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) { reCheckSelection(cm.doc); } + } + if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); } + if (withOp) { endOperation(cm); } + if (this.parent) { this.parent.clear(); } + }; + + // Find the position of the marker in the document. Returns a {from, + // to} object by default. Side can be passed to get a specific side + // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the + // Pos objects returned contain a line object, rather than a line + // number (used to prevent looking up the same line twice). + TextMarker.prototype.find = function (side, lineObj) { + if (side == null && this.type == "bookmark") { side = 1; } + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from); + if (side == -1) { return from } + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to); + if (side == 1) { return to } + } + } + return from && {from: from, to: to} + }; + + // Signals that the marker's widget changed, and surrounding layout + // should be recomputed. + TextMarker.prototype.changed = function () { + var this$1 = this; + + var pos = this.find(-1, true), widget = this, cm = this.doc.cm; + if (!pos || !cm) { return } + runInOp(cm, function () { + var line = pos.line, lineN = lineNo(pos.line); + var view = findViewForLine(cm, lineN); + if (view) { + clearLineMeasurementCacheFor(view); + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; + } + cm.curOp.updateMaxLine = true; + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height; + widget.height = null; + var dHeight = widgetHeight(widget) - oldHeight; + if (dHeight) + { updateLineHeight(line, line.height + dHeight); } + } + signalLater(cm, "markerChanged", cm, this$1); + }); + }; + + TextMarker.prototype.attachLine = function (line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } + } + this.lines.push(line); + }; + + TextMarker.prototype.detachLine = function (line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp + ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + eventMixin(TextMarker); + + // Create a marker, wire it up to the right lines, and + function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) { return markTextShared(doc, from, to, options, type) } + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } + + var marker = new TextMarker(doc, type), diff = cmp(from, to); + if (options) { copyObj(options, marker, false); } + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + { return marker } + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true; + marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); } + if (options.insertLeft) { marker.widgetNode.insertLeft = true; } + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + { throw new Error("Inserting collapsed marker partially overlapping an existing one") } + seeCollapsedSpans(); + } + + if (marker.addToHistory) + { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); } + + var curLine = from.line, cm = doc.cm, updateMaxLine; + doc.iter(curLine, to.line + 1, function (line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + { updateMaxLine = true; } + if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); } + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp); + ++curLine; + }); + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) { + if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); } + }); } + + if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); } + + if (marker.readOnly) { + seeReadOnlySpans(); + if (doc.history.done.length || doc.history.undone.length) + { doc.clearHistory(); } + } + if (marker.collapsed) { + marker.id = ++nextMarkerId; + marker.atomic = true; + } + if (cm) { + // Sync editor state + if (updateMaxLine) { cm.curOp.updateMaxLine = true; } + if (marker.collapsed) + { regChange(cm, from.line, to.line + 1); } + else if (marker.className || marker.startStyle || marker.endStyle || marker.css || + marker.attributes || marker.title) + { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } } + if (marker.atomic) { reCheckSelection(cm.doc); } + signalLater(cm, "markerAdded", cm, marker); + } + return marker + } + + // SHARED TEXTMARKERS + + // A shared marker spans multiple linked documents. It is + // implemented as a meta-marker-object controlling multiple normal + // markers. + var SharedTextMarker = function(markers, primary) { + this.markers = markers; + this.primary = primary; + for (var i = 0; i < markers.length; ++i) + { markers[i].parent = this; } + }; + + SharedTextMarker.prototype.clear = function () { + if (this.explicitlyCleared) { return } + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) + { this.markers[i].clear(); } + signalLater(this, "clear"); + }; + + SharedTextMarker.prototype.find = function (side, lineObj) { + return this.primary.find(side, lineObj) + }; + eventMixin(SharedTextMarker); + + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], primary = markers[0]; + var widget = options.widgetNode; + linkedDocs(doc, function (doc) { + if (widget) { options.widgetNode = widget.cloneNode(true); } + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) + { if (doc.linked[i].isParent) { return } } + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary) + } + + function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) + } + + function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], pos = marker.find(); + var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); + marker.markers.push(subMark); + subMark.parent = marker; + } + } + } + + function detachSharedMarkers(markers) { + var loop = function ( i ) { + var marker = markers[i], linked = [marker.primary.doc]; + linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }); + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j]; + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null; + marker.markers.splice(j--, 1); + } + } + }; + + for (var i = 0; i < markers.length; i++) loop( i ); + } + + var nextDocId = 0; + var Doc = function(text, mode, firstLine, lineSep, direction) { + if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) } + if (firstLine == null) { firstLine = 0; } + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.cleanGeneration = 1; + this.modeFrontier = this.highlightFrontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = simpleSelection(start); + this.history = new History(null); + this.id = ++nextDocId; + this.modeOption = mode; + this.lineSep = lineSep; + this.direction = (direction == "rtl") ? "rtl" : "ltr"; + this.extend = false; + + if (typeof text == "string") { text = this.splitLines(text); } + updateDoc(this, {from: start, to: start, text: text}); + setSelection(this, simpleSelection(start), sel_dontScroll); + }; + + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) { this.iterN(from - this.first, to - from, op); } + else { this.iterN(this.first, this.first + this.size, from); } + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0; + for (var i = 0; i < lines.length; ++i) { height += lines[i].height; } + this.insertInner(at - this.first, lines, height); + }, + remove: function(at, n) { this.removeInner(at - this.first, n); }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1; + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), origin: "setValue", full: true}, true); + if (this.cm) { scrollToCoords(this.cm, 0, 0); } + setSelection(this, simpleSelection(top), sel_dontScroll); + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) { return lines } + if (lineSep === '') { return lines.join('') } + return lines.join(lineSep || this.lineSeparator()) + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, + + getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, + getLineNumber: function(line) {return lineNo(line)}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") { line = getLine(this, line); } + return visualLine(line) + }, + + lineCount: function() {return this.size}, + firstLine: function() {return this.first}, + lastLine: function() {return this.first + this.size - 1}, + + clipPos: function(pos) {return clipPos(this, pos)}, + + getCursor: function(start) { + var range = this.sel.primary(), pos; + if (start == null || start == "head") { pos = range.head; } + else if (start == "anchor") { pos = range.anchor; } + else if (start == "end" || start == "to" || start === false) { pos = range.to(); } + else { pos = range.from(); } + return pos + }, + listSelections: function() { return this.sel.ranges }, + somethingSelected: function() {return this.sel.somethingSelected()}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads), options); + }), + extendSelectionsBy: docMethodOp(function(f, options) { + var heads = map(this.sel.ranges, f); + extendSelections(this, clipPosArray(this, heads), options); + }), + setSelections: docMethodOp(function(ranges, primary, options) { + if (!ranges.length) { return } + var out = []; + for (var i = 0; i < ranges.length; i++) + { out[i] = new Range(clipPos(this, ranges[i].anchor), + clipPos(this, ranges[i].head || ranges[i].anchor)); } + if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); } + setSelection(this, normalizeSelection(this.cm, out, primary), options); + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0); + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); + setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options); + }), + + getSelection: function(lineSep) { + var ranges = this.sel.ranges, lines; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + lines = lines ? lines.concat(sel) : sel; + } + if (lineSep === false) { return lines } + else { return lines.join(lineSep || this.lineSeparator()) } + }, + getSelections: function(lineSep) { + var parts = [], ranges = this.sel.ranges; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); } + parts[i] = sel; + } + return parts + }, + replaceSelection: function(code, collapse, origin) { + var dup = []; + for (var i = 0; i < this.sel.ranges.length; i++) + { dup[i] = code; } + this.replaceSelections(dup, collapse, origin || "+input"); + }, + replaceSelections: docMethodOp(function(code, collapse, origin) { + var changes = [], sel = this.sel; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin}; + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); + for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) + { makeChange(this, changes[i$1]); } + if (newSel) { setSelectionReplaceHistory(this, newSel); } + else if (this.cm) { ensureCursorVisible(this.cm); } + }), + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), + + setExtending: function(val) {this.extend = val;}, + getExtending: function() {return this.extend}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0; + for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } } + for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } } + return {undo: done, redo: undone} + }, + clearHistory: function() { + var this$1 = this; + + this.history = new History(this.history); + linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true); + }, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true); + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; } + return this.history.generation + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration) + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)} + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history); + hist.done = copyHistoryArray(histData.done.slice(0), null, true); + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); + }, + + setGutterMarker: docMethodOp(function(line, gutterID, value) { + return changeLine(this, line, "gutter", function (line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) { line.gutterMarkers = null; } + return true + }) + }), + + clearGutter: docMethodOp(function(gutterID) { + var this$1 = this; + + this.iter(function (line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + changeLine(this$1, line, "gutter", function () { + line.gutterMarkers[gutterID] = null; + if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; } + return true + }); + } + }); + }), + + lineInfo: function(line) { + var n; + if (typeof line == "number") { + if (!isLine(this, line)) { return null } + n = line; + line = getLine(this, line); + if (!line) { return null } + } else { + n = lineNo(line); + if (n == null) { return null } + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets} + }, + + addLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + if (!line[prop]) { line[prop] = cls; } + else if (classTest(cls).test(line[prop])) { return false } + else { line[prop] += " " + cls; } + return true + }) + }), + removeLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) { return false } + else if (cls == null) { line[prop] = null; } + else { + var found = cur.match(classTest(cls)); + if (!found) { return false } + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true + }) + }), + + addLineWidget: docMethodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options) + }), + removeLineWidget: function(widget) { widget.clear(); }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents}; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark") + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos); + var markers = [], spans = getLine(this, pos.line).markedSpans; + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + { markers.push(span.marker.parent || span.marker); } + } } + return markers + }, + findMarks: function(from, to, filter) { + from = clipPos(this, from); to = clipPos(this, to); + var found = [], lineNo = from.line; + this.iter(from.line, to.line + 1, function (line) { + var spans = line.markedSpans; + if (spans) { for (var i = 0; i < spans.length; i++) { + var span = spans[i]; + if (!(span.to != null && lineNo == from.line && from.ch >= span.to || + span.from == null && lineNo != from.line || + span.from != null && lineNo == to.line && span.from >= to.ch) && + (!filter || filter(span.marker))) + { found.push(span.marker.parent || span.marker); } + } } + ++lineNo; + }); + return found + }, + getAllMarks: function() { + var markers = []; + this.iter(function (line) { + var sps = line.markedSpans; + if (sps) { for (var i = 0; i < sps.length; ++i) + { if (sps[i].from != null) { markers.push(sps[i].marker); } } } + }); + return markers + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first, sepSize = this.lineSeparator().length; + this.iter(function (line) { + var sz = line.text.length + sepSize; + if (sz > off) { ch = off; return true } + off -= sz; + ++lineNo; + }); + return clipPos(this, Pos(lineNo, ch)) + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) { return 0 } + var sepSize = this.lineSeparator().length; + this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value + index += line.text.length + sepSize; + }); + return index + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), + this.modeOption, this.first, this.lineSep, this.direction); + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; + doc.sel = this.sel; + doc.extend = false; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc + }, + + linkedDoc: function(options) { + if (!options) { options = {}; } + var from = this.first, to = this.first + this.size; + if (options.from != null && options.from > from) { from = options.from; } + if (options.to != null && options.to < to) { to = options.to; } + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); + if (options.sharedHist) { copy.history = this.history + ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; + copySharedMarkers(copy, findSharedMarkers(this)); + return copy + }, + unlinkDoc: function(other) { + if (other instanceof CodeMirror) { other = other.doc; } + if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { + var link = this.linked[i]; + if (link.doc != other) { continue } + this.linked.splice(i, 1); + other.unlinkDoc(this); + detachSharedMarkers(findSharedMarkers(this)); + break + } } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true); + other.history = new History(null); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f);}, + + getMode: function() {return this.mode}, + getEditor: function() {return this.cm}, + + splitLines: function(str) { + if (this.lineSep) { return str.split(this.lineSep) } + return splitLinesAuto(str) + }, + lineSeparator: function() { return this.lineSep || "\n" }, + + setDirection: docMethodOp(function (dir) { + if (dir != "rtl") { dir = "ltr"; } + if (dir == this.direction) { return } + this.direction = dir; + this.iter(function (line) { return line.order = null; }); + if (this.cm) { directionChanged(this.cm); } + }) + }); + + // Public alias. + Doc.prototype.eachLine = Doc.prototype.iter; + + // Kludge to work around strange IE behavior where it'll sometimes + // re-fire a series of drag-related events right after the drop (#1551) + var lastDrop = 0; + + function onDrop(e) { + var cm = this; + clearDragCursor(cm); + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + { return } + e_preventDefault(e); + if (ie) { lastDrop = +new Date; } + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || cm.isReadOnly()) { return } + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var markAsReadAndPasteIfAllFilesAreRead = function () { + if (++read == n) { + operation(cm, function () { + pos = clipPos(cm.doc, pos); + var change = {from: pos, to: pos, + text: cm.doc.splitLines( + text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())), + origin: "paste"}; + makeChange(cm.doc, change); + setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change)))); + })(); + } + }; + var readTextFromFile = function (file, i) { + if (cm.options.allowDropFileTypes && + indexOf(cm.options.allowDropFileTypes, file.type) == -1) { + markAsReadAndPasteIfAllFilesAreRead(); + return + } + var reader = new FileReader; + reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); }; + reader.onload = function () { + var content = reader.result; + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { + markAsReadAndPasteIfAllFilesAreRead(); + return + } + text[i] = content; + markAsReadAndPasteIfAllFilesAreRead(); + }; + reader.readAsText(file); + }; + for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); } + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(function () { return cm.display.input.focus(); }, 20); + return + } + try { + var text$1 = e.dataTransfer.getData("Text"); + if (text$1) { + var selected; + if (cm.state.draggingText && !cm.state.draggingText.copy) + { selected = cm.listSelections(); } + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); + if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) + { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } } + cm.replaceSelection(text$1, "around", "paste"); + cm.display.input.focus(); + } + } + catch(e$1){} + } + } + + function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } + + e.dataTransfer.setData("Text", cm.getSelection()); + e.dataTransfer.effectAllowed = "copyMove"; + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (presto) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (presto) { img.parentNode.removeChild(img); } + } + } + + function onDragOver(cm, e) { + var pos = posFromMouse(cm, e); + if (!pos) { return } + var frag = document.createDocumentFragment(); + drawSelectionCursor(cm, pos, frag); + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); + } + removeChildrenAndAdd(cm.display.dragCursor, frag); + } + + function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor); + cm.display.dragCursor = null; + } + } + + // These must be handled carefully, because naively registering a + // handler for each editor will cause the editors to never be + // garbage collected. + + function forEachCodeMirror(f) { + if (!document.getElementsByClassName) { return } + var byClass = document.getElementsByClassName("CodeMirror"), editors = []; + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror; + if (cm) { editors.push(cm); } + } + if (editors.length) { editors[0].operation(function () { + for (var i = 0; i < editors.length; i++) { f(editors[i]); } + }); } + } + + var globalsRegistered = false; + function ensureGlobalHandlers() { + if (globalsRegistered) { return } + registerGlobalHandlers(); + globalsRegistered = true; + } + function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer; + on(window, "resize", function () { + if (resizeTimer == null) { resizeTimer = setTimeout(function () { + resizeTimer = null; + forEachCodeMirror(onResize); + }, 100); } + }); + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function () { return forEachCodeMirror(onBlur); }); + } + // Called when the window resizes + function onResize(cm) { + var d = cm.display; + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + d.scrollbarsClipped = false; + cm.setSize(); + } + + var keyNames = { + 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", + 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" + }; + + // Number keys + for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); } + // Alphabetic keys + for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); } + // Function keys + for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; } + + var keyMap = {}; + + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" + }; + // Note that the save and find-related commands aren't defined by + // default. User code or addons can define them. Unknown commands + // are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + "fallthrough": "basic" + }; + // Very basic readline/emacs-style bindings, which are standard on Mac. + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", + "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", + "Ctrl-T": "transposeChars", "Ctrl-O": "openLine" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", + "fallthrough": ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + + // KEYMAP DISPATCH + + function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/); + name = parts[parts.length - 1]; + var alt, ctrl, shift, cmd; + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i]; + if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; } + else if (/^a(lt)?$/i.test(mod)) { alt = true; } + else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; } + else if (/^s(hift)?$/i.test(mod)) { shift = true; } + else { throw new Error("Unrecognized modifier name: " + mod) } + } + if (alt) { name = "Alt-" + name; } + if (ctrl) { name = "Ctrl-" + name; } + if (cmd) { name = "Cmd-" + name; } + if (shift) { name = "Shift-" + name; } + return name + } + + // This is a kludge to keep keymaps mostly working as raw objects + // (backwards compatibility) while at the same time support features + // like normalization and multi-stroke key bindings. It compiles a + // new normalized keymap, and then updates the old object to reflect + // this. + function normalizeKeyMap(keymap) { + var copy = {}; + for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname]; + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } + if (value == "...") { delete keymap[keyname]; continue } + + var keys = map(keyname.split(" "), normalizeKeyName); + for (var i = 0; i < keys.length; i++) { + var val = (void 0), name = (void 0); + if (i == keys.length - 1) { + name = keys.join(" "); + val = value; + } else { + name = keys.slice(0, i + 1).join(" "); + val = "..."; + } + var prev = copy[name]; + if (!prev) { copy[name] = val; } + else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } + } + delete keymap[keyname]; + } } + for (var prop in copy) { keymap[prop] = copy[prop]; } + return keymap + } + + function lookupKey(key, map, handle, context) { + map = getKeyMap(map); + var found = map.call ? map.call(key, context) : map[key]; + if (found === false) { return "nothing" } + if (found === "...") { return "multi" } + if (found != null && handle(found)) { return "handled" } + + if (map.fallthrough) { + if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") + { return lookupKey(key, map.fallthrough, handle, context) } + for (var i = 0; i < map.fallthrough.length; i++) { + var result = lookupKey(key, map.fallthrough[i], handle, context); + if (result) { return result } + } + } + } + + // Modifier key presses don't count as 'real' key presses for the + // purpose of keymap fallthrough. + function isModifierKey(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" + } + + function addModifierNames(name, event, noShift) { + var base = name; + if (event.altKey && base != "Alt") { name = "Alt-" + name; } + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; } + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { name = "Cmd-" + name; } + if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; } + return name + } + + // Look up the name of a key as indicated by an event object. + function keyName(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) { return false } + var name = keyNames[event.keyCode]; + if (name == null || event.altGraphKey) { return false } + // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause, + // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+) + if (event.keyCode == 3 && event.code) { name = event.code; } + return addModifierNames(name, event, noShift) + } + + function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val + } + + // Helper for deleting text near the selection(s), used to implement + // backspace, delete, and similar functionality. + function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = []; + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]); + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop(); + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from; + break + } + } + kill.push(toKill); + } + // Next, remove those actual ranges. + runInOp(cm, function () { + for (var i = kill.length - 1; i >= 0; i--) + { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); } + ensureCursorVisible(cm); + }); + } + + function moveCharLogically(line, ch, dir) { + var target = skipExtendingChars(line.text, ch + dir, dir); + return target < 0 || target > line.text.length ? null : target + } + + function moveLogically(line, start, dir) { + var ch = moveCharLogically(line, start.ch, dir); + return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before") + } + + function endOfLine(visually, cm, lineObj, lineNo, dir) { + if (visually) { + if (cm.doc.direction == "rtl") { dir = -dir; } + var order = getOrder(lineObj, cm.doc.direction); + if (order) { + var part = dir < 0 ? lst(order) : order[0]; + var moveInStorageOrder = (dir < 0) == (part.level == 1); + var sticky = moveInStorageOrder ? "after" : "before"; + var ch; + // With a wrapped rtl chunk (possibly spanning multiple bidi parts), + // it could be that the last bidi part is not on the last visual line, + // since visual lines contain content order-consecutive chunks. + // Thus, in rtl, we are looking for the first (content-order) character + // in the rtl chunk that is on the last line (that is, the same line + // as the last (content-order) character). + if (part.level > 0 || cm.doc.direction == "rtl") { + var prep = prepareMeasureForLine(cm, lineObj); + ch = dir < 0 ? lineObj.text.length - 1 : 0; + var targetTop = measureCharPrepared(cm, prep, ch).top; + ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch); + if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); } + } else { ch = dir < 0 ? part.to : part.from; } + return new Pos(lineNo, ch, sticky) + } + } + return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after") + } + + function moveVisually(cm, line, start, dir) { + var bidi = getOrder(line, cm.doc.direction); + if (!bidi) { return moveLogically(line, start, dir) } + if (start.ch >= line.text.length) { + start.ch = line.text.length; + start.sticky = "before"; + } else if (start.ch <= 0) { + start.ch = 0; + start.sticky = "after"; + } + var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]; + if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { + // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, + // nothing interesting happens. + return moveLogically(line, start, dir) + } + + var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); }; + var prep; + var getWrappedLineExtent = function (ch) { + if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} } + prep = prep || prepareMeasureForLine(cm, line); + return wrappedLineExtentChar(cm, line, prep, ch) + }; + var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); + + if (cm.doc.direction == "rtl" || part.level == 1) { + var moveInStorageOrder = (part.level == 1) == (dir < 0); + var ch = mv(start, moveInStorageOrder ? 1 : -1); + if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { + // Case 2: We move within an rtl part or in an rtl editor on the same visual line + var sticky = moveInStorageOrder ? "before" : "after"; + return new Pos(start.line, ch, sticky) + } + } + + // Case 3: Could not move within this bidi part in this visual line, so leave + // the current bidi part + + var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { + var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder + ? new Pos(start.line, mv(ch, 1), "before") + : new Pos(start.line, ch, "after"); }; + + for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { + var part = bidi[partPos]; + var moveInStorageOrder = (dir > 0) == (part.level != 1); + var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1); + if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) } + ch = moveInStorageOrder ? part.from : mv(part.to, -1); + if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) } + } + }; + + // Case 3a: Look for other bidi parts on the same visual line + var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent); + if (res) { return res } + + // Case 3b: Look for other bidi parts on the next visual line + var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1); + if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { + res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); + if (res) { return res } + } + + // Case 4: Nowhere to move + return null + } + + // Commands are parameter-less actions that can be performed on an + // editor, mostly used for keybindings. + var commands = { + selectAll: selectAll, + singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, + killLine: function (cm) { return deleteNearSelection(cm, function (range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length; + if (range.head.ch == len && range.head.line < cm.lastLine()) + { return {from: range.head, to: Pos(range.head.line + 1, 0)} } + else + { return {from: range.head, to: Pos(range.head.line, len)} } + } else { + return {from: range.from(), to: range.to()} + } + }); }, + deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) + }); }); }, + delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), to: range.from() + }); }); }, + delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var leftPos = cm.coordsChar({left: 0, top: top}, "div"); + return {from: leftPos, to: range.from()} + }); }, + delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); + return {from: range.from(), to: rightPos } + }); }, + undo: function (cm) { return cm.undo(); }, + redo: function (cm) { return cm.redo(); }, + undoSelection: function (cm) { return cm.undoSelection(); }, + redoSelection: function (cm) { return cm.redoSelection(); }, + goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, + goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, + goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, + {origin: "+move", bias: 1} + ); }, + goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, + {origin: "+move", bias: 1} + ); }, + goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, + {origin: "+move", bias: -1} + ); }, + goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") + }, sel_move); }, + goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({left: 0, top: top}, "div") + }, sel_move); }, + goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + var pos = cm.coordsChar({left: 0, top: top}, "div"); + if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } + return pos + }, sel_move); }, + goLineUp: function (cm) { return cm.moveV(-1, "line"); }, + goLineDown: function (cm) { return cm.moveV(1, "line"); }, + goPageUp: function (cm) { return cm.moveV(-1, "page"); }, + goPageDown: function (cm) { return cm.moveV(1, "page"); }, + goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, + goCharRight: function (cm) { return cm.moveH(1, "char"); }, + goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, + goColumnRight: function (cm) { return cm.moveH(1, "column"); }, + goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, + goGroupRight: function (cm) { return cm.moveH(1, "group"); }, + goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, + goWordRight: function (cm) { return cm.moveH(1, "word"); }, + delCharBefore: function (cm) { return cm.deleteH(-1, "codepoint"); }, + delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, + delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, + delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, + delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, + delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, + indentAuto: function (cm) { return cm.indentSelection("smart"); }, + indentMore: function (cm) { return cm.indentSelection("add"); }, + indentLess: function (cm) { return cm.indentSelection("subtract"); }, + insertTab: function (cm) { return cm.replaceSelection("\t"); }, + insertSoftTab: function (cm) { + var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from(); + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); + spaces.push(spaceStr(tabSize - col % tabSize)); + } + cm.replaceSelections(spaces); + }, + defaultTab: function (cm) { + if (cm.somethingSelected()) { cm.indentSelection("add"); } + else { cm.execCommand("insertTab"); } + }, + // Swap the two chars left and right of each selection's head. + // Move cursor behind the two swapped characters afterwards. + // + // Doesn't consider line feeds a character. + // Doesn't scan more than one line above to find a character. + // Doesn't do anything on an empty line. + // Doesn't do anything with non-empty selections. + transposeChars: function (cm) { return runInOp(cm, function () { + var ranges = cm.listSelections(), newSel = []; + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) { continue } + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; + if (line) { + if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); } + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1); + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), + Pos(cur.line, cur.ch - 2), cur, "+transpose"); + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text; + if (prev) { + cur = new Pos(cur.line, 1); + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + + prev.charAt(prev.length - 1), + Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); + } + } + } + newSel.push(new Range(cur, cur)); + } + cm.setSelections(newSel); + }); }, + newlineAndIndent: function (cm) { return runInOp(cm, function () { + var sels = cm.listSelections(); + for (var i = sels.length - 1; i >= 0; i--) + { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); } + sels = cm.listSelections(); + for (var i$1 = 0; i$1 < sels.length; i$1++) + { cm.indentLine(sels[i$1].from().line, null, true); } + ensureCursorVisible(cm); + }); }, + openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, + toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } + }; + + + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(line); + if (visual != line) { lineN = lineNo(visual); } + return endOfLine(true, cm, visual, lineN, 1) + } + function lineEnd(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLineEnd(line); + if (visual != line) { lineN = lineNo(visual); } + return endOfLine(true, cm, line, lineN, -1) + } + function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line); + var line = getLine(cm.doc, start.line); + var order = getOrder(line, cm.doc.direction); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(start.ch, line.text.search(/\S/)); + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; + return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky) + } + return start + } + + // Run a handler that was bound to a key. + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) { return false } + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled(); + var prevShift = cm.display.shift, done = false; + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true; } + if (dropShift) { cm.display.shift = false; } + done = bound(cm) != Pass; + } finally { + cm.display.shift = prevShift; + cm.state.suppressEdits = false; + } + return done + } + + function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); + if (result) { return result } + } + return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) + || lookupKey(name, cm.options.keyMap, handle, cm) + } + + // Note that, despite the name, this function is also used to check + // for bound mouse clicks. + + var stopSeq = new Delayed; + + function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq; + if (seq) { + if (isModifierKey(name)) { return "handled" } + if (/\'$/.test(name)) + { cm.state.keySeq = null; } + else + { stopSeq.set(50, function () { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null; + cm.display.input.reset(); + } + }); } + if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true } + } + return dispatchKeyInner(cm, name, e, handle) + } + + function dispatchKeyInner(cm, name, e, handle) { + var result = lookupKeyForEditor(cm, name, handle); + + if (result == "multi") + { cm.state.keySeq = name; } + if (result == "handled") + { signalLater(cm, "keyHandled", cm, name, e); } + + if (result == "handled" || result == "multi") { + e_preventDefault(e); + restartBlink(cm); + } + + return !!result + } + + // Handle a key from the keydown event. + function handleKeyBinding(cm, e) { + var name = keyName(e, true); + if (!name) { return false } + + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) + || dispatchKey(cm, name, e, function (b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + { return doHandleBinding(cm, b) } + }) + } else { + return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) + } + } + + // Handle a key from the keypress event + function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) + } + + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + if (e.target && e.target != cm.display.input.getField()) { return } + cm.curOp.focus = activeElt(); + if (signalDOMEvent(cm, e)) { return } + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; } + var code = e.keyCode; + cm.display.shift = code == 16 || e.shiftKey; + var handled = handleKeyBinding(cm, e); + if (presto) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + { cm.replaceSelection("", null, "cut"); } + } + if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) + { document.execCommand("cut"); } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) + { showCrossHair(cm); } + } + + function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv; + addClass(lineDiv, "CodeMirror-crosshair"); + + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair"); + off(document, "keyup", up); + off(document, "mouseover", up); + } + } + on(document, "keyup", up); + on(document, "mouseover", up); + } + + function onKeyUp(e) { + if (e.keyCode == 16) { this.doc.sel.shift = false; } + signalDOMEvent(this, e); + } + + function onKeyPress(e) { + var cm = this; + if (e.target && e.target != cm.display.input.getField()) { return } + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } + var keyCode = e.keyCode, charCode = e.charCode; + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} + if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + // Some browsers fire keypress events for backspace + if (ch == "\x08") { return } + if (handleCharBinding(cm, e, ch)) { return } + cm.display.input.onKeyPress(e); + } + + var DOUBLECLICK_DELAY = 400; + + var PastClick = function(time, pos, button) { + this.time = time; + this.pos = pos; + this.button = button; + }; + + PastClick.prototype.compare = function (time, pos, button) { + return this.time + DOUBLECLICK_DELAY > time && + cmp(pos, this.pos) == 0 && button == this.button + }; + + var lastClick, lastDoubleClick; + function clickRepeat(pos, button) { + var now = +new Date; + if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { + lastClick = lastDoubleClick = null; + return "triple" + } else if (lastClick && lastClick.compare(now, pos, button)) { + lastDoubleClick = new PastClick(now, pos, button); + lastClick = null; + return "double" + } else { + lastClick = new PastClick(now, pos, button); + lastDoubleClick = null; + return "single" + } + } + + // A mouse down can be a single click, double click, triple click, + // start of selection drag, start of text drag, new cursor + // (ctrl-click), rectangle drag (alt-drag), or xwin + // middle-click-paste. Or it might be a click on something we should + // not interfere with, such as a scrollbar or widget. + function onMouseDown(e) { + var cm = this, display = cm.display; + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } + display.input.ensurePolled(); + display.shift = e.shiftKey; + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false; + setTimeout(function () { return display.scroller.draggable = true; }, 100); + } + return + } + if (clickInGutter(cm, e)) { return } + var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"; + window.focus(); + + // #3261: make sure, that we're not starting a second selection + if (button == 1 && cm.state.selectingText) + { cm.state.selectingText(e); } + + if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return } + + if (button == 1) { + if (pos) { leftButtonDown(cm, pos, repeat, e); } + else if (e_target(e) == display.scroller) { e_preventDefault(e); } + } else if (button == 2) { + if (pos) { extendSelection(cm.doc, pos); } + setTimeout(function () { return display.input.focus(); }, 20); + } else if (button == 3) { + if (captureRightClick) { cm.display.input.onContextMenu(e); } + else { delayBlurEvent(cm); } + } + } + + function handleMappedButton(cm, button, pos, repeat, event) { + var name = "Click"; + if (repeat == "double") { name = "Double" + name; } + else if (repeat == "triple") { name = "Triple" + name; } + name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; + + return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { + if (typeof bound == "string") { bound = commands[bound]; } + if (!bound) { return false } + var done = false; + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true; } + done = bound(cm, pos) != Pass; + } finally { + cm.state.suppressEdits = false; + } + return done + }) + } + + function configureMouse(cm, repeat, event) { + var option = cm.getOption("configureMouse"); + var value = option ? option(cm, repeat, event) : {}; + if (value.unit == null) { + var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; + value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; + } + if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; } + if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; } + if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); } + return value + } + + function leftButtonDown(cm, pos, repeat, event) { + if (ie) { setTimeout(bind(ensureFocus, cm), 0); } + else { cm.curOp.focus = activeElt(); } + + var behavior = configureMouse(cm, repeat, event); + + var sel = cm.doc.sel, contained; + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && + repeat == "single" && (contained = sel.contains(pos)) > -1 && + (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && + (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) + { leftButtonStartDrag(cm, event, pos, behavior); } + else + { leftButtonSelect(cm, event, pos, behavior); } + } + + // Start a text drag. When it ends, see if any dragging actually + // happen, and treat as a click if it didn't. + function leftButtonStartDrag(cm, event, pos, behavior) { + var display = cm.display, moved = false; + var dragEnd = operation(cm, function (e) { + if (webkit) { display.scroller.draggable = false; } + cm.state.draggingText = false; + if (cm.state.delayingBlurEvent) { + if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; } + else { delayBlurEvent(cm); } + } + off(display.wrapper.ownerDocument, "mouseup", dragEnd); + off(display.wrapper.ownerDocument, "mousemove", mouseMove); + off(display.scroller, "dragstart", dragStart); + off(display.scroller, "drop", dragEnd); + if (!moved) { + e_preventDefault(e); + if (!behavior.addNew) + { extendSelection(cm.doc, pos, null, null, behavior.extend); } + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if ((webkit && !safari) || ie && ie_version == 9) + { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); } + else + { display.input.focus(); } + } + }); + var mouseMove = function(e2) { + moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; + }; + var dragStart = function () { return moved = true; }; + // Let the drag handler handle this. + if (webkit) { display.scroller.draggable = true; } + cm.state.draggingText = dragEnd; + dragEnd.copy = !behavior.moveOnDrag; + on(display.wrapper.ownerDocument, "mouseup", dragEnd); + on(display.wrapper.ownerDocument, "mousemove", mouseMove); + on(display.scroller, "dragstart", dragStart); + on(display.scroller, "drop", dragEnd); + + cm.state.delayingBlurEvent = true; + setTimeout(function () { return display.input.focus(); }, 20); + // IE's approach to draggable + if (display.scroller.dragDrop) { display.scroller.dragDrop(); } + } + + function rangeForUnit(cm, pos, unit) { + if (unit == "char") { return new Range(pos, pos) } + if (unit == "word") { return cm.findWordAt(pos) } + if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } + var result = unit(cm, pos); + return new Range(result.from, result.to) + } + + // Normal selection, as opposed to text dragging. + function leftButtonSelect(cm, event, start, behavior) { + if (ie) { delayBlurEvent(cm); } + var display = cm.display, doc = cm.doc; + e_preventDefault(event); + + var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; + if (behavior.addNew && !behavior.extend) { + ourIndex = doc.sel.contains(start); + if (ourIndex > -1) + { ourRange = ranges[ourIndex]; } + else + { ourRange = new Range(start, start); } + } else { + ourRange = doc.sel.primary(); + ourIndex = doc.sel.primIndex; + } + + if (behavior.unit == "rectangle") { + if (!behavior.addNew) { ourRange = new Range(start, start); } + start = posFromMouse(cm, event, true, true); + ourIndex = -1; + } else { + var range = rangeForUnit(cm, start, behavior.unit); + if (behavior.extend) + { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); } + else + { ourRange = range; } + } + + if (!behavior.addNew) { + ourIndex = 0; + setSelection(doc, new Selection([ourRange], 0), sel_mouse); + startSel = doc.sel; + } else if (ourIndex == -1) { + ourIndex = ranges.length; + setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}); + } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { + setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), + {scroll: false, origin: "*mouse"}); + startSel = doc.sel; + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + } + + var lastPos = start; + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) { return } + lastPos = pos; + + if (behavior.unit == "rectangle") { + var ranges = [], tabSize = cm.options.tabSize; + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); + if (left == right) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); } + else if (text.length > leftPos) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } + } + if (!ranges.length) { ranges.push(new Range(start, start)); } + setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), + {origin: "*mouse", scroll: false}); + cm.scrollIntoView(pos); + } else { + var oldRange = ourRange; + var range = rangeForUnit(cm, pos, behavior.unit); + var anchor = oldRange.anchor, head; + if (cmp(range.anchor, anchor) > 0) { + head = range.head; + anchor = minPos(oldRange.from(), range.anchor); + } else { + head = range.anchor; + anchor = maxPos(oldRange.to(), range.head); + } + var ranges$1 = startSel.ranges.slice(0); + ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); + setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); + } + } + + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); + if (!cur) { return } + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt(); + extendTo(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); } + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) { setTimeout(operation(cm, function () { + if (counter != curCount) { return } + display.scroller.scrollTop += outside; + extend(e); + }), 50); } + } + } + + function done(e) { + cm.state.selectingText = false; + counter = Infinity; + // If e is null or undefined we interpret this as someone trying + // to explicitly cancel the selection rather than the user + // letting go of the mouse button. + if (e) { + e_preventDefault(e); + display.input.focus(); + } + off(display.wrapper.ownerDocument, "mousemove", move); + off(display.wrapper.ownerDocument, "mouseup", up); + doc.history.lastSelOrigin = null; + } + + var move = operation(cm, function (e) { + if (e.buttons === 0 || !e_button(e)) { done(e); } + else { extend(e); } + }); + var up = operation(cm, done); + cm.state.selectingText = up; + on(display.wrapper.ownerDocument, "mousemove", move); + on(display.wrapper.ownerDocument, "mouseup", up); + } + + // Used when mouse-selecting to adjust the anchor to the proper side + // of a bidi jump depending on the visual position of the head. + function bidiSimplify(cm, range) { + var anchor = range.anchor; + var head = range.head; + var anchorLine = getLine(cm.doc, anchor.line); + if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range } + var order = getOrder(anchorLine); + if (!order) { return range } + var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index]; + if (part.from != anchor.ch && part.to != anchor.ch) { return range } + var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1); + if (boundary == 0 || boundary == order.length) { return range } + + // Compute the relative visual position of the head compared to the + // anchor (<0 is to the left, >0 to the right) + var leftSide; + if (head.line != anchor.line) { + leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; + } else { + var headIndex = getBidiPartAt(order, head.ch, head.sticky); + var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); + if (headIndex == boundary - 1 || headIndex == boundary) + { leftSide = dir < 0; } + else + { leftSide = dir > 0; } + } + + var usePart = order[boundary + (leftSide ? -1 : 0)]; + var from = leftSide == (usePart.level == 1); + var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before"; + return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head) + } + + + // Determines whether an event happened in the gutter, and fires the + // handlers for the corresponding event. + function gutterEvent(cm, e, type, prevent) { + var mX, mY; + if (e.touches) { + mX = e.touches[0].clientX; + mY = e.touches[0].clientY; + } else { + try { mX = e.clientX; mY = e.clientY; } + catch(e$1) { return false } + } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } + if (prevent) { e_preventDefault(e); } + + var display = cm.display; + var lineBox = display.lineDiv.getBoundingClientRect(); + + if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.display.gutterSpecs.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.display.gutterSpecs[i]; + signal(cm, type, cm, line, gutter.className, e); + return e_defaultPrevented(e) + } + } + } + + function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true) + } + + // CONTEXT MENU HANDLING + + // To make the context menu work, we need to briefly unhide the + // textarea (making it as unobtrusive as possible) to let the + // right-click take effect on it. + function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } + if (signalDOMEvent(cm, e, "contextmenu")) { return } + if (!captureRightClick) { cm.display.input.onContextMenu(e); } + } + + function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) { return false } + return gutterEvent(cm, e, "gutterContextMenu", false) + } + + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + + var Init = {toString: function(){return "CodeMirror.Init"}}; + + var defaults = {}; + var optionHandlers = {}; + + function defineOptions(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) { optionHandlers[name] = + notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; } + } + + CodeMirror.defineOption = option; + + // Passed to option handlers when there is no old value. + CodeMirror.Init = Init; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function (cm, val) { return cm.setValue(val); }, true); + option("mode", null, function (cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function (cm) { + resetModeState(cm); + clearCaches(cm); + regChange(cm); + }, true); + + option("lineSeparator", null, function (cm, val) { + cm.doc.lineSep = val; + if (!val) { return } + var newBreaks = [], lineNo = cm.doc.first; + cm.doc.iter(function (line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos); + if (found == -1) { break } + pos = found + val.length; + newBreaks.push(Pos(lineNo, found)); + } + lineNo++; + }); + for (var i = newBreaks.length - 1; i >= 0; i--) + { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); } + }); + option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); + if (old != Init) { cm.refresh(); } + }); + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true); + option("electricChars", true); + option("inputStyle", mobile ? "contenteditable" : "textarea", function () { + throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME + }, true); + option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true); + option("autocorrect", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true); + option("autocapitalize", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true); + option("rtlMoveVisually", !windows); + option("wholeLineUpdateBefore", true); + + option("theme", "default", function (cm) { + themeChanged(cm); + updateGutters(cm); + }, true); + option("keyMap", "default", function (cm, val, old) { + var next = getKeyMap(val); + var prev = old != Init && getKeyMap(old); + if (prev && prev.detach) { prev.detach(cm, next); } + if (next.attach) { next.attach(cm, prev || null); } + }); + option("extraKeys", null); + option("configureMouse", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function (cm, val) { + cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers); + updateGutters(cm); + }, true); + option("fixedGutter", true, function (cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true); + option("scrollbarStyle", "native", function (cm) { + initScrollbars(cm); + updateScrollbars(cm); + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); + }, true); + option("lineNumbers", false, function (cm, val) { + cm.display.gutterSpecs = getGutters(cm.options.gutters, val); + updateGutters(cm); + }, true); + option("firstLineNumber", 1, updateGutters, true); + option("lineNumberFormatter", function (integer) { return integer; }, updateGutters, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("resetSelectionOnContextMenu", true); + option("lineWiseCopyCut", true); + option("pasteLinesPerSelection", true); + option("selectionsMayTouch", false); + + option("readOnly", false, function (cm, val) { + if (val == "nocursor") { + onBlur(cm); + cm.display.input.blur(); + } + cm.display.input.readOnlyChanged(val); + }); + + option("screenReaderLabel", null, function (cm, val) { + val = (val === '') ? null : val; + cm.display.input.screenReaderLabelChanged(val); + }); + + option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true); + option("dragDrop", true, dragDropChanged); + option("allowDropFileTypes", null); + + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1, updateSelection, true); + option("singleCursorHeightPerLine", true, updateSelection, true); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true, resetModeState, true); + option("addModeClass", false, resetModeState, true); + option("pollInterval", 100); + option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }); + option("historyEventDelay", 1250); + option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true); + option("maxHighlightLength", 10000, resetModeState, true); + option("moveInputWithCursor", true, function (cm, val) { + if (!val) { cm.display.input.resetPosition(); } + }); + + option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }); + option("autofocus", null); + option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true); + option("phrases", null); + } + + function dragDropChanged(cm, value, old) { + var wasOn = old && old != Init; + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions; + var toggle = value ? on : off; + toggle(cm.display.scroller, "dragstart", funcs.start); + toggle(cm.display.scroller, "dragenter", funcs.enter); + toggle(cm.display.scroller, "dragover", funcs.over); + toggle(cm.display.scroller, "dragleave", funcs.leave); + toggle(cm.display.scroller, "drop", funcs.drop); + } + } + + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap"); + cm.display.sizer.style.minWidth = ""; + cm.display.sizerWidth = null; + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap"); + findMaxLine(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function () { return updateScrollbars(cm); }, 100); + } + + // A CodeMirror instance represents an editor. This is the object + // that user code is usually dealing with. + + function CodeMirror(place, options) { + var this$1 = this; + + if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) } + + this.options = options = options ? copyObj(options) : {}; + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false); + + var doc = options.value; + if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); } + else if (options.mode) { doc.modeOption = options.mode; } + this.doc = doc; + + var input = new CodeMirror.inputStyles[options.inputStyle](this); + var display = this.display = new Display(place, doc, input, options); + display.wrapper.CodeMirror = this; + themeChanged(this); + if (options.lineWrapping) + { this.display.wrapper.className += " CodeMirror-wrap"; } + initScrollbars(this); + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), // stores highlight worker timeout + keySeq: null, // Unfinished key sequence + specialChars: null + }; + + if (options.autofocus && !mobile) { display.input.focus(); } + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); } + + registerEventHandlers(this); + ensureGlobalHandlers(); + + startOperation(this); + this.curOp.forceUpdate = true; + attachDoc(this, doc); + + if ((options.autofocus && !mobile) || this.hasFocus()) + { setTimeout(function () { + if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); } + }, 20); } + else + { onBlur(this); } + + for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) + { optionHandlers[opt](this, options[opt], Init); } } + maybeUpdateLineNumberWidth(this); + if (options.finishInit) { options.finishInit(this); } + for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); } + endOperation(this); + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && + getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") + { display.lineDiv.style.textRendering = "auto"; } + } + + // The default configuration options. + CodeMirror.defaults = defaults; + // Functions to run when options are changed. + CodeMirror.optionHandlers = optionHandlers; + + // Attach the necessary event handlers when initializing the editor + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) + { on(d.scroller, "dblclick", operation(cm, function (e) { + if (signalDOMEvent(cm, e)) { return } + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } + e_preventDefault(e); + var word = cm.findWordAt(pos); + extendSelection(cm.doc, word.anchor, word.head); + })); } + else + { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); } + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }); + on(d.input.getField(), "contextmenu", function (e) { + if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); } + }); + + // Used to suppress mouse event handling when a touch happens + var touchFinished, prevTouch = {end: 0}; + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000); + prevTouch = d.activeTouch; + prevTouch.end = +new Date; + } + } + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) { return false } + var touch = e.touches[0]; + return touch.radiusX <= 1 && touch.radiusY <= 1 + } + function farAway(touch, other) { + if (other.left == null) { return true } + var dx = other.left - touch.left, dy = other.top - touch.top; + return dx * dx + dy * dy > 20 * 20 + } + on(d.scroller, "touchstart", function (e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { + d.input.ensurePolled(); + clearTimeout(touchFinished); + var now = +new Date; + d.activeTouch = {start: now, moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null}; + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX; + d.activeTouch.top = e.touches[0].pageY; + } + } + }); + on(d.scroller, "touchmove", function () { + if (d.activeTouch) { d.activeTouch.moved = true; } + }); + on(d.scroller, "touchend", function (e) { + var touch = d.activeTouch; + if (touch && !eventInWidget(d, e) && touch.left != null && + !touch.moved && new Date - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), range; + if (!touch.prev || farAway(touch, touch.prev)) // Single tap + { range = new Range(pos, pos); } + else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap + { range = cm.findWordAt(pos); } + else // Triple tap + { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); } + cm.setSelection(range.anchor, range.head); + cm.focus(); + e_preventDefault(e); + } + finishTouch(); + }); + on(d.scroller, "touchcancel", finishTouch); + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function () { + if (d.scroller.clientHeight) { + updateScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }); + on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }); + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + + d.dragFunctions = { + enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }}, + over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, + start: function (e) { return onDragStart(cm, e); }, + drop: operation(cm, onDrop), + leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }} + }; + + var inp = d.input.getField(); + on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }); + on(inp, "keydown", operation(cm, onKeyDown)); + on(inp, "keypress", operation(cm, onKeyPress)); + on(inp, "focus", function (e) { return onFocus(cm, e); }); + on(inp, "blur", function (e) { return onBlur(cm, e); }); + } + + var initHooks = []; + CodeMirror.defineInitHook = function (f) { return initHooks.push(f); }; + + // Indent the given line. The how parameter can be "smart", + // "add"/null, "subtract", or "prev". When aggressive is false + // (typically set to true for forced single-line indents), empty + // lines are not indented, and places where the mode returns Pass + // are left alone. + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state; + if (how == null) { how = "add"; } + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) { how = "prev"; } + else { state = getContextBefore(cm, n).state; } + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + if (line.stateAfter) { line.stateAfter = null; } + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0; + how = "not"; + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass || indentation > 150) { + if (!aggressive) { return } + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); } + else { indentation = 0; } + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} } + if (pos < indentation) { indentString += spaceStr(indentation - pos); } + + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + line.stateAfter = null; + return true + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { + var range = doc.sel.ranges[i$1]; + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos$1 = Pos(n, curSpaceString.length); + replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)); + break + } + } + } + } + + // This will be set to a {lineWise: bool, text: [string]} object, so + // that, when pasting, we know what kind of selections the copied + // text was made out of. + var lastCopied = null; + + function setLastCopied(newLastCopied) { + lastCopied = newLastCopied; + } + + function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc; + cm.display.shift = false; + if (!sel) { sel = doc.sel; } + + var recent = +new Date - 200; + var paste = origin == "paste" || cm.state.pasteIncoming > recent; + var textLines = splitLinesAuto(inserted), multiPaste = null; + // When pasting N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.text.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.text.length == 0) { + multiPaste = []; + for (var i = 0; i < lastCopied.text.length; i++) + { multiPaste.push(doc.splitLines(lastCopied.text[i])); } + } + } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { + multiPaste = map(textLines, function (l) { return [l]; }); + } + } + + var updateInput = cm.curOp.updateInput; + // Normal behavior is to insert the new text into every selection + for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { + var range = sel.ranges[i$1]; + var from = range.from(), to = range.to(); + if (range.empty()) { + if (deleted && deleted > 0) // Handle deletion + { from = Pos(from.line, from.ch - deleted); } + else if (cm.state.overwrite && !paste) // Handle overwrite + { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); } + else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n")) + { from = to = Pos(from.line, 0); } + } + var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input")}; + makeChange(cm.doc, changeEvent); + signalLater(cm, "inputRead", cm, changeEvent); + } + if (inserted && !paste) + { triggerElectric(cm, inserted); } + + ensureCursorVisible(cm); + if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; } + cm.curOp.typing = true; + cm.state.pasteIncoming = cm.state.cutIncoming = -1; + } + + function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("Text"); + if (pasted) { + e.preventDefault(); + if (!cm.isReadOnly() && !cm.options.disableInput) + { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); } + return true + } + } + + function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) { return } + var sel = cm.doc.sel; + + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i]; + if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue } + var mode = cm.getModeAt(range.head); + var indented = false; + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) + { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range.head.line, "smart"); + break + } } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) + { indented = indentLine(cm, range.head.line, "smart"); } + } + if (indented) { signalLater(cm, "electricInput", cm, range.head.line); } + } + } + + function copyableRanges(cm) { + var text = [], ranges = []; + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line; + var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; + ranges.push(lineRange); + text.push(cm.getRange(lineRange.anchor, lineRange.head)); + } + return {text: text, ranges: ranges} + } + + function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) { + field.setAttribute("autocorrect", autocorrect ? "" : "off"); + field.setAttribute("autocapitalize", autocapitalize ? "" : "off"); + field.setAttribute("spellcheck", !!spellcheck); + } + + function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none"); + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) { te.style.width = "1000px"; } + else { te.setAttribute("wrap", "off"); } + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) { te.style.border = "1px solid black"; } + disableBrowserMagic(te); + return div + } + + // The publicly visible API. Note that methodOp(f) means + // 'wrap f in an operation, performed on its `this` parameter'. + + // This is not the complete set of editor methods. Most of the + // methods defined on the Doc type are also injected into + // CodeMirror.prototype, for backwards compatibility and + // convenience. + + function addEditorMethods(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + + var helpers = CodeMirror.helpers = {}; + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); this.display.input.focus();}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") { return } + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + { operation(this, optionHandlers[option])(this, value, old); } + signal(this, "optionChange", this, option); + }, + + getOption: function(option) {return this.options[option]}, + getDoc: function() {return this.doc}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) + { if (maps[i] == map || maps[i].name == map) { + maps.splice(i, 1); + return true + } } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) { throw new Error("Overlays may not be stateful.") } + insertSorted(this.state.overlays, + {mode: mode, modeSpec: spec, opaque: options && options.opaque, + priority: (options && options.priority) || 0}, + function (overlay) { return overlay.priority; }); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: methodOp(function(spec) { + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this.state.modeGen++; + regChange(this); + return + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; } + else { dir = dir ? "add" : "subtract"; } + } + if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); } + }), + indentSelection: methodOp(function(how) { + var ranges = this.doc.sel.ranges, end = -1; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (!range.empty()) { + var from = range.from(), to = range.to(); + var start = Math.max(end, from.line); + end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; + for (var j = start; j < end; ++j) + { indentLine(this, j, how); } + var newRanges = this.doc.sel.ranges; + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) + { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } + } else if (range.head.line > end) { + indentLine(this, range.head.line, how, true); + end = range.head.line; + if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); } + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + return takeToken(this, pos, precise) + }, + + getLineTokens: function(line, precise) { + return takeToken(this, Pos(line), precise, true) + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; + var type; + if (ch == 0) { type = styles[2]; } + else { for (;;) { + var mid = (before + after) >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; } + else if (styles[mid * 2 + 1] < ch) { before = mid + 1; } + else { type = styles[mid * 2 + 2]; break } + } } + var cut = type ? type.indexOf("overlay ") : -1; + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) + }, + + getModeAt: function(pos) { + var mode = this.doc.mode; + if (!mode.innerMode) { return mode } + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0] + }, + + getHelpers: function(pos, type) { + var found = []; + if (!helpers.hasOwnProperty(type)) { return found } + var help = helpers[type], mode = this.getModeAt(pos); + if (typeof mode[type] == "string") { + if (help[mode[type]]) { found.push(help[mode[type]]); } + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]]; + if (val) { found.push(val); } + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]); + } else if (help[mode.name]) { + found.push(help[mode.name]); + } + for (var i$1 = 0; i$1 < help._global.length; i$1++) { + var cur = help._global[i$1]; + if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) + { found.push(cur.val); } + } + return found + }, + + getStateAfter: function(line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); + return getContextBefore(this, line + 1, precise).state + }, + + cursorCoords: function(start, mode) { + var pos, range = this.doc.sel.primary(); + if (start == null) { pos = range.head; } + else if (typeof start == "object") { pos = clipPos(this.doc, start); } + else { pos = start ? range.from() : range.to(); } + return cursorCoords(this, pos, mode || "page") + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page") + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top) + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset) + }, + heightAtLine: function(line, mode, includeWidgets) { + var end = false, lineObj; + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) { line = this.doc.first; } + else if (line > last) { line = last; end = true; } + lineObj = getLine(this.doc, line); + } else { + lineObj = line; + } + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top + + (end ? this.doc.height - heightAtLine(lineObj) : 0) + }, + + defaultTextHeight: function() { return textHeight(this.display) }, + defaultCharWidth: function() { return charWidth(this.display) }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, left = pos.left; + node.style.position = "absolute"; + node.setAttribute("cm-ignore-events", "true"); + this.display.input.setUneditable(node); + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + { top = pos.top - node.offsetHeight; } + else if (pos.bottom + node.offsetHeight <= vspace) + { top = pos.bottom; } + if (left + node.offsetWidth > hspace) + { left = hspace - node.offsetWidth; } + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") { left = 0; } + else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; } + node.style.left = left + "px"; + } + if (scroll) + { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); } + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + triggerOnMouseDown: methodOp(onMouseDown), + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + { return commands[cmd].call(null, this) } + }, + + triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), + + findPosH: function(from, amount, unit, visually) { + var dir = 1; + if (amount < 0) { dir = -1; amount = -amount; } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + cur = findPosH(this.doc, cur, dir, unit, visually); + if (cur.hitSide) { break } + } + return cur + }, + + moveH: methodOp(function(dir, unit) { + var this$1 = this; + + this.extendSelectionsBy(function (range) { + if (this$1.display.shift || this$1.doc.extend || range.empty()) + { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) } + else + { return dir < 0 ? range.from() : range.to() } + }, sel_move); + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc; + if (sel.somethingSelected()) + { doc.replaceSelection("", null, "+delete"); } + else + { deleteNearSelection(this, function (range) { + var other = findPosH(doc, range.head, dir, unit, false); + return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other} + }); } + }), + + findPosV: function(from, amount, unit, goalColumn) { + var dir = 1, x = goalColumn; + if (amount < 0) { dir = -1; amount = -amount; } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + var coords = cursorCoords(this, cur, "div"); + if (x == null) { x = coords.left; } + else { coords.left = x; } + cur = findPosV(this, coords, dir, unit); + if (cur.hitSide) { break } + } + return cur + }, + + moveV: methodOp(function(dir, unit) { + var this$1 = this; + + var doc = this.doc, goals = []; + var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); + doc.extendSelectionsBy(function (range) { + if (collapse) + { return dir < 0 ? range.from() : range.to() } + var headPos = cursorCoords(this$1, range.head, "div"); + if (range.goalColumn != null) { headPos.left = range.goalColumn; } + goals.push(headPos.left); + var pos = findPosV(this$1, headPos, dir, unit); + if (unit == "page" && range == doc.sel.primary()) + { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); } + return pos + }, sel_move); + if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) + { doc.sel.ranges[i].goalColumn = goals[i]; } } + }), + + // Find the word at the given position (as returned by coordsChar). + findWordAt: function(pos) { + var doc = this.doc, line = getLine(doc, pos.line).text; + var start = pos.ch, end = pos.ch; + if (line) { + var helper = this.getHelper(pos, "wordChars"); + if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; } + var startChar = line.charAt(start); + var check = isWordChar(startChar, helper) + ? function (ch) { return isWordChar(ch, helper); } + : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } + : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); }; + while (start > 0 && check(line.charAt(start - 1))) { --start; } + while (end < line.length && check(line.charAt(end))) { ++end; } + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)) + }, + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) { return } + if (this.state.overwrite = !this.state.overwrite) + { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); } + else + { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); } + + signal(this, "overwriteToggle", this, this.state.overwrite); + }, + hasFocus: function() { return this.display.input.getField() == activeElt() }, + isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, + + scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }), + getScrollInfo: function() { + var scroller = this.display.scroller; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), clientWidth: displayWidth(this)} + }, + + scrollIntoView: methodOp(function(range, margin) { + if (range == null) { + range = {from: this.doc.sel.primary().head, to: null}; + if (margin == null) { margin = this.options.cursorScrollMargin; } + } else if (typeof range == "number") { + range = {from: Pos(range, 0), to: null}; + } else if (range.from == null) { + range = {from: range, to: null}; + } + if (!range.to) { range.to = range.from; } + range.margin = margin || 0; + + if (range.from.line != null) { + scrollToRange(this, range); + } else { + scrollToCoordsRange(this, range.from, range.to, range.margin); + } + }), + + setSize: methodOp(function(width, height) { + var this$1 = this; + + var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }; + if (width != null) { this.display.wrapper.style.width = interpret(width); } + if (height != null) { this.display.wrapper.style.height = interpret(height); } + if (this.options.lineWrapping) { clearLineMeasurementCache(this); } + var lineNo = this.display.viewFrom; + this.doc.iter(lineNo, this.display.viewTo, function (line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) + { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } } + ++lineNo; + }); + this.curOp.forceUpdate = true; + signal(this, "refresh", this); + }), + + operation: function(f){return runInOp(this, f)}, + startOperation: function(){return startOperation(this)}, + endOperation: function(){return endOperation(this)}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight; + regChange(this); + this.curOp.forceUpdate = true; + clearCaches(this); + scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); + updateGutterSpace(this.display); + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) + { estimateLineHeights(this); } + signal(this, "refresh", this); + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc; + old.cm = null; + // Cancel the current text selection if any (#5821) + if (this.state.selectingText) { this.state.selectingText(); } + attachDoc(this, doc); + clearCaches(this); + this.display.input.reset(); + scrollToCoords(this, doc.scrollLeft, doc.scrollTop); + this.curOp.forceScroll = true; + signalLater(this, "swapDoc", this, old); + return old + }), + + phrase: function(phraseText) { + var phrases = this.options.phrases; + return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText + }, + + getInputField: function(){return this.display.input.getField()}, + getWrapperElement: function(){return this.display.wrapper}, + getScrollerElement: function(){return this.display.scroller}, + getGutterElement: function(){return this.display.gutters} + }; + eventMixin(CodeMirror); + + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; } + helpers[type][name] = value; + }; + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value); + helpers[type]._global.push({pred: predicate, val: value}); + }; + } + + // Used for horizontal relative motion. Dir is -1 or 1 (left or + // right), unit can be "codepoint", "char", "column" (like char, but + // doesn't cross line boundaries), "word" (across next word), or + // "group" (to the start of next group of word or + // non-word-non-whitespace chars). The visually param controls + // whether, in right-to-left text, direction 1 means to move towards + // the next index in the string, or towards the character to the right + // of the current position. The resulting position will have a + // hitSide=true property if it reached the end of the document. + function findPosH(doc, pos, dir, unit, visually) { + var oldPos = pos; + var origDir = dir; + var lineObj = getLine(doc, pos.line); + var lineDir = visually && doc.direction == "rtl" ? -dir : dir; + function findNextLine() { + var l = pos.line + lineDir; + if (l < doc.first || l >= doc.first + doc.size) { return false } + pos = new Pos(l, pos.ch, pos.sticky); + return lineObj = getLine(doc, l) + } + function moveOnce(boundToLine) { + var next; + if (unit == "codepoint") { + var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1)); + if (isNaN(ch)) { + next = null; + } else { + var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF; + next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir); + } + } else if (visually) { + next = moveVisually(doc.cm, lineObj, pos, dir); + } else { + next = moveLogically(lineObj, pos, dir); + } + if (next == null) { + if (!boundToLine && findNextLine()) + { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); } + else + { return false } + } else { + pos = next; + } + return true + } + + if (unit == "char" || unit == "codepoint") { + moveOnce(); + } else if (unit == "column") { + moveOnce(true); + } else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group"; + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) { break } + var cur = lineObj.text.charAt(pos.ch) || "\n"; + var type = isWordChar(cur, helper) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p"; + if (group && !first && !type) { type = "s"; } + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";} + break + } + + if (type) { sawType = type; } + if (dir > 0 && !moveOnce(!first)) { break } + } + } + var result = skipAtomic(doc, pos, oldPos, origDir, true); + if (equalCursorPos(oldPos, result)) { result.hitSide = true; } + return result + } + + // For relative vertical movement. Dir may be -1 or 1. Unit can be + // "page" or "line". The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); + y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; + + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + var target; + for (;;) { + target = coordsChar(cm, x, y); + if (!target.outside) { break } + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break } + y += dir * 5; + } + return target + } + + // CONTENTEDITABLE INPUT STYLE + + var ContentEditableInput = function(cm) { + this.cm = cm; + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; + this.polling = new Delayed(); + this.composing = null; + this.gracePeriod = false; + this.readDOMTimeout = null; + }; + + ContentEditableInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = input.cm; + var div = input.div = display.lineDiv; + div.contentEditable = true; + disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize); + + function belongsToInput(e) { + for (var t = e.target; t; t = t.parentNode) { + if (t == div) { return true } + if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { break } + } + return false + } + + on(div, "paste", function (e) { + if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + // IE doesn't fire input events, so we schedule a read for the pasted content in this way + if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); } + }); + + on(div, "compositionstart", function (e) { + this$1.composing = {data: e.data, done: false}; + }); + on(div, "compositionupdate", function (e) { + if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; } + }); + on(div, "compositionend", function (e) { + if (this$1.composing) { + if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); } + this$1.composing.done = true; + } + }); + + on(div, "touchstart", function () { return input.forceCompositionEnd(); }); + + on(div, "input", function () { + if (!this$1.composing) { this$1.readFromDOMSoon(); } + }); + + function onCopyCut(e) { + if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}); + if (e.type == "cut") { cm.replaceSelection("", null, "cut"); } + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm); + setLastCopied({lineWise: true, text: ranges.text}); + if (e.type == "cut") { + cm.operation(function () { + cm.setSelections(ranges.ranges, 0, sel_dontScroll); + cm.replaceSelection("", null, "cut"); + }); + } + } + if (e.clipboardData) { + e.clipboardData.clearData(); + var content = lastCopied.text.join("\n"); + // iOS exposes the clipboard API, but seems to discard content inserted into it + e.clipboardData.setData("Text", content); + if (e.clipboardData.getData("Text") == content) { + e.preventDefault(); + return + } + } + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), te = kludge.firstChild; + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); + te.value = lastCopied.text.join("\n"); + var hadFocus = activeElt(); + selectInput(te); + setTimeout(function () { + cm.display.lineSpace.removeChild(kludge); + hadFocus.focus(); + if (hadFocus == div) { input.showPrimarySelection(); } + }, 50); + } + on(div, "copy", onCopyCut); + on(div, "cut", onCopyCut); + }; + + ContentEditableInput.prototype.screenReaderLabelChanged = function (label) { + // Label for screenreaders, accessibility + if(label) { + this.div.setAttribute('aria-label', label); + } else { + this.div.removeAttribute('aria-label'); + } + }; + + ContentEditableInput.prototype.prepareSelection = function () { + var result = prepareSelection(this.cm, false); + result.focus = activeElt() == this.div; + return result + }; + + ContentEditableInput.prototype.showSelection = function (info, takeFocus) { + if (!info || !this.cm.display.view.length) { return } + if (info.focus || takeFocus) { this.showPrimarySelection(); } + this.showMultipleSelections(info); + }; + + ContentEditableInput.prototype.getSelection = function () { + return this.cm.display.wrapper.ownerDocument.getSelection() + }; + + ContentEditableInput.prototype.showPrimarySelection = function () { + var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary(); + var from = prim.from(), to = prim.to(); + + if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { + sel.removeAllRanges(); + return + } + + var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && + cmp(minPos(curAnchor, curFocus), from) == 0 && + cmp(maxPos(curAnchor, curFocus), to) == 0) + { return } + + var view = cm.display.view; + var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || + {node: view[0].measure.map[2], offset: 0}; + var end = to.line < cm.display.viewTo && posToDOM(cm, to); + if (!end) { + var measure = view[view.length - 1].measure; + var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; + end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; + } + + if (!start || !end) { + sel.removeAllRanges(); + return + } + + var old = sel.rangeCount && sel.getRangeAt(0), rng; + try { rng = range(start.node, start.offset, end.offset, end.node); } + catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && cm.state.focused) { + sel.collapse(start.node, start.offset); + if (!rng.collapsed) { + sel.removeAllRanges(); + sel.addRange(rng); + } + } else { + sel.removeAllRanges(); + sel.addRange(rng); + } + if (old && sel.anchorNode == null) { sel.addRange(old); } + else if (gecko) { this.startGracePeriod(); } + } + this.rememberSelection(); + }; + + ContentEditableInput.prototype.startGracePeriod = function () { + var this$1 = this; + + clearTimeout(this.gracePeriod); + this.gracePeriod = setTimeout(function () { + this$1.gracePeriod = false; + if (this$1.selectionChanged()) + { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); } + }, 20); + }; + + ContentEditableInput.prototype.showMultipleSelections = function (info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); + }; + + ContentEditableInput.prototype.rememberSelection = function () { + var sel = this.getSelection(); + this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; + this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; + }; + + ContentEditableInput.prototype.selectionInEditor = function () { + var sel = this.getSelection(); + if (!sel.rangeCount) { return false } + var node = sel.getRangeAt(0).commonAncestorContainer; + return contains(this.div, node) + }; + + ContentEditableInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor") { + if (!this.selectionInEditor() || activeElt() != this.div) + { this.showSelection(this.prepareSelection(), true); } + this.div.focus(); + } + }; + ContentEditableInput.prototype.blur = function () { this.div.blur(); }; + ContentEditableInput.prototype.getField = function () { return this.div }; + + ContentEditableInput.prototype.supportsTouch = function () { return true }; + + ContentEditableInput.prototype.receivedFocus = function () { + var this$1 = this; + + var input = this; + if (this.selectionInEditor()) + { setTimeout(function () { return this$1.pollSelection(); }, 20); } + else + { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); } + + function poll() { + if (input.cm.state.focused) { + input.pollSelection(); + input.polling.set(input.cm.options.pollInterval, poll); + } + } + this.polling.set(this.cm.options.pollInterval, poll); + }; + + ContentEditableInput.prototype.selectionChanged = function () { + var sel = this.getSelection(); + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || + sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset + }; + + ContentEditableInput.prototype.pollSelection = function () { + if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return } + var sel = this.getSelection(), cm = this.cm; + // On Android Chrome (version 56, at least), backspacing into an + // uneditable block element will put the cursor in that element, + // and then, because it's not editable, hide the virtual keyboard. + // Because Android doesn't allow us to actually detect backspace + // presses in a sane way, this code checks for when that happens + // and simulates a backspace press in this case. + if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) { + this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs}); + this.blur(); + this.focus(); + return + } + if (this.composing) { return } + this.rememberSelection(); + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var head = domToPos(cm, sel.focusNode, sel.focusOffset); + if (anchor && head) { runInOp(cm, function () { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); + if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; } + }); } + }; + + ContentEditableInput.prototype.pollContent = function () { + if (this.readDOMTimeout != null) { + clearTimeout(this.readDOMTimeout); + this.readDOMTimeout = null; + } + + var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); + var from = sel.from(), to = sel.to(); + if (from.ch == 0 && from.line > cm.firstLine()) + { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); } + if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) + { to = Pos(to.line + 1, 0); } + if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } + + var fromIndex, fromLine, fromNode; + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + fromLine = lineNo(display.view[0].line); + fromNode = display.view[0].node; + } else { + fromLine = lineNo(display.view[fromIndex].line); + fromNode = display.view[fromIndex - 1].node.nextSibling; + } + var toIndex = findViewIndex(cm, to.line); + var toLine, toNode; + if (toIndex == display.view.length - 1) { + toLine = display.viewTo - 1; + toNode = display.lineDiv.lastChild; + } else { + toLine = lineNo(display.view[toIndex + 1].line) - 1; + toNode = display.view[toIndex + 1].node.previousSibling; + } + + if (!fromNode) { return false } + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } + else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } + else { break } + } + + var cutFront = 0, cutEnd = 0; + var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) + { ++cutFront; } + var newBot = lst(newText), oldBot = lst(oldText); + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), + oldBot.length - (oldText.length == 1 ? cutFront : 0)); + while (cutEnd < maxCutEnd && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) + { ++cutEnd; } + // Try to move start of change to start of selection if ambiguous + if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { + while (cutFront && cutFront > from.ch && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + cutFront--; + cutEnd++; + } + } + + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); + newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); + + var chFrom = Pos(fromLine, cutFront); + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input"); + return true + } + }; + + ContentEditableInput.prototype.ensurePolled = function () { + this.forceCompositionEnd(); + }; + ContentEditableInput.prototype.reset = function () { + this.forceCompositionEnd(); + }; + ContentEditableInput.prototype.forceCompositionEnd = function () { + if (!this.composing) { return } + clearTimeout(this.readDOMTimeout); + this.composing = null; + this.updateFromDOM(); + this.div.blur(); + this.div.focus(); + }; + ContentEditableInput.prototype.readFromDOMSoon = function () { + var this$1 = this; + + if (this.readDOMTimeout != null) { return } + this.readDOMTimeout = setTimeout(function () { + this$1.readDOMTimeout = null; + if (this$1.composing) { + if (this$1.composing.done) { this$1.composing = null; } + else { return } + } + this$1.updateFromDOM(); + }, 80); + }; + + ContentEditableInput.prototype.updateFromDOM = function () { + var this$1 = this; + + if (this.cm.isReadOnly() || !this.pollContent()) + { runInOp(this.cm, function () { return regChange(this$1.cm); }); } + }; + + ContentEditableInput.prototype.setUneditable = function (node) { + node.contentEditable = "false"; + }; + + ContentEditableInput.prototype.onKeyPress = function (e) { + if (e.charCode == 0 || this.composing) { return } + e.preventDefault(); + if (!this.cm.isReadOnly()) + { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); } + }; + + ContentEditableInput.prototype.readOnlyChanged = function (val) { + this.div.contentEditable = String(val != "nocursor"); + }; + + ContentEditableInput.prototype.onContextMenu = function () {}; + ContentEditableInput.prototype.resetPosition = function () {}; + + ContentEditableInput.prototype.needsContentAttribute = true; + + function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line); + if (!view || view.hidden) { return null } + var line = getLine(cm.doc, pos.line); + var info = mapFromLineView(view, line, pos.line); + + var order = getOrder(line, cm.doc.direction), side = "left"; + if (order) { + var partPos = getBidiPartAt(order, pos.ch); + side = partPos % 2 ? "right" : "left"; + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); + result.offset = result.collapse == "right" ? result.end : result.start; + return result + } + + function isInGutter(node) { + for (var scan = node; scan; scan = scan.parentNode) + { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } } + return false + } + + function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } + + function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false; + function recognizeMarker(id) { return function (marker) { return marker.id == id; } } + function close() { + if (closing) { + text += lineSep; + if (extraLinebreak) { text += lineSep; } + closing = extraLinebreak = false; + } + } + function addText(str) { + if (str) { + close(); + text += str; + } + } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text"); + if (cmText) { + addText(cmText); + return + } + var markerID = node.getAttribute("cm-marker"), range; + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); + if (found.length && (range = found[0].find(0))) + { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); } + return + } + if (node.getAttribute("contenteditable") == "false") { return } + var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); + if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return } + + if (isBlock) { close(); } + for (var i = 0; i < node.childNodes.length; i++) + { walk(node.childNodes[i]); } + + if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; } + if (isBlock) { closing = true; } + } else if (node.nodeType == 3) { + addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); + } + } + for (;;) { + walk(from); + if (from == to) { break } + from = from.nextSibling; + extraLinebreak = false; + } + return text + } + + function domToPos(cm, node, offset) { + var lineNode; + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset]; + if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } + node = null; offset = 0; + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) { return null } + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i]; + if (lineView.node == lineNode) + { return locateNodeInLineView(lineView, node, offset) } + } + } + + function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, bad = false; + if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } + if (node == wrapper) { + bad = true; + node = wrapper.childNodes[offset]; + offset = 0; + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line; + return badPos(Pos(lineNo(line), line.text.length), bad) + } + } + + var textNode = node.nodeType == 3 ? node : null, topNode = node; + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild; + if (offset) { offset = textNode.nodeValue.length; } + } + while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; } + var measure = lineView.measure, maps = measure.maps; + + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map = i < 0 ? measure.map : maps[i]; + for (var j = 0; j < map.length; j += 3) { + var curNode = map[j + 2]; + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); + var ch = map[j] + offset; + if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; } + return Pos(line, ch) + } + } + } + } + var found = find(textNode, topNode, offset); + if (found) { return badPos(found, bad) } + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0); + if (found) + { return badPos(Pos(found.line, found.ch - dist), bad) } + else + { dist += after.textContent.length; } + } + for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1); + if (found) + { return badPos(Pos(found.line, found.ch + dist$1), bad) } + else + { dist$1 += before.textContent.length; } + } + } + + // TEXTAREA INPUT STYLE + + var TextareaInput = function(cm) { + this.cm = cm; + // See input.poll and input.reset + this.prevInput = ""; + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false; + // Self-resetting timeout for the poller + this.polling = new Delayed(); + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false; + this.composing = null; + }; + + TextareaInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = this.cm; + this.createField(display); + var te = this.textarea; + + display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) { te.style.width = "0px"; } + + on(te, "input", function () { + if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; } + input.poll(); + }); + + on(te, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + + cm.state.pasteIncoming = +new Date; + input.fastPoll(); + }); + + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}); + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm); + setLastCopied({lineWise: true, text: ranges.text}); + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll); + } else { + input.prevInput = ""; + te.value = ranges.text.join("\n"); + selectInput(te); + } + } + if (e.type == "cut") { cm.state.cutIncoming = +new Date; } + } + on(te, "cut", prepareCopyCut); + on(te, "copy", prepareCopyCut); + + on(display.scroller, "paste", function (e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } + if (!te.dispatchEvent) { + cm.state.pasteIncoming = +new Date; + input.focus(); + return + } + + // Pass the `paste` event to the textarea so it's handled by its event listener. + var event = new Event("paste"); + event.clipboardData = e.clipboardData; + te.dispatchEvent(event); + }); + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function (e) { + if (!eventInWidget(display, e)) { e_preventDefault(e); } + }); + + on(te, "compositionstart", function () { + var start = cm.getCursor("from"); + if (input.composing) { input.composing.range.clear(); } + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) + }; + }); + on(te, "compositionend", function () { + if (input.composing) { + input.poll(); + input.composing.range.clear(); + input.composing = null; + } + }); + }; + + TextareaInput.prototype.createField = function (_display) { + // Wraps and hides input textarea + this.wrapper = hiddenTextarea(); + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + this.textarea = this.wrapper.firstChild; + }; + + TextareaInput.prototype.screenReaderLabelChanged = function (label) { + // Label for screenreaders, accessibility + if(label) { + this.textarea.setAttribute('aria-label', label); + } else { + this.textarea.removeAttribute('aria-label'); + } + }; + + TextareaInput.prototype.prepareSelection = function () { + // Redraw the selection and/or cursor + var cm = this.cm, display = cm.display, doc = cm.doc; + var result = prepareSelection(cm); + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)); + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)); + } + + return result + }; + + TextareaInput.prototype.showSelection = function (drawn) { + var cm = this.cm, display = cm.display; + removeChildrenAndAdd(display.cursorDiv, drawn.cursors); + removeChildrenAndAdd(display.selectionDiv, drawn.selection); + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px"; + this.wrapper.style.left = drawn.teLeft + "px"; + } + }; + + // Reset the input to correspond to the selection (or to be empty, + // when not typing and nothing is selected) + TextareaInput.prototype.reset = function (typing) { + if (this.contextMenuPending || this.composing) { return } + var cm = this.cm; + if (cm.somethingSelected()) { + this.prevInput = ""; + var content = cm.getSelection(); + this.textarea.value = content; + if (cm.state.focused) { selectInput(this.textarea); } + if (ie && ie_version >= 9) { this.hasSelection = content; } + } else if (!typing) { + this.prevInput = this.textarea.value = ""; + if (ie && ie_version >= 9) { this.hasSelection = null; } + } + }; + + TextareaInput.prototype.getField = function () { return this.textarea }; + + TextareaInput.prototype.supportsTouch = function () { return false }; + + TextareaInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + try { this.textarea.focus(); } + catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } + }; + + TextareaInput.prototype.blur = function () { this.textarea.blur(); }; + + TextareaInput.prototype.resetPosition = function () { + this.wrapper.style.top = this.wrapper.style.left = 0; + }; + + TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); }; + + // Poll for input changes, using the normal rate of polling. This + // runs as long as the editor is focused. + TextareaInput.prototype.slowPoll = function () { + var this$1 = this; + + if (this.pollingFast) { return } + this.polling.set(this.cm.options.pollInterval, function () { + this$1.poll(); + if (this$1.cm.state.focused) { this$1.slowPoll(); } + }); + }; + + // When an event has just come in that is likely to add or change + // something in the input textarea, we poll faster, to ensure that + // the change appears on the screen quickly. + TextareaInput.prototype.fastPoll = function () { + var missed = false, input = this; + input.pollingFast = true; + function p() { + var changed = input.poll(); + if (!changed && !missed) {missed = true; input.polling.set(60, p);} + else {input.pollingFast = false; input.slowPoll();} + } + input.polling.set(20, p); + }; + + // Read input from the textarea, and update the document to match. + // When something is selected, it is present in the textarea, and + // selected (unless it is huge, in which case a placeholder is + // used). When nothing is selected, the cursor sits after previously + // seen text (can be empty), which is stored in prevInput (we must + // not reset the textarea when typing, because that breaks IME). + TextareaInput.prototype.poll = function () { + var this$1 = this; + + var cm = this.cm, input = this.textarea, prevInput = this.prevInput; + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || !cm.state.focused || + (hasSelection(input) && !prevInput && !this.composing) || + cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) + { return false } + + var text = input.value; + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) { return false } + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || + mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset(); + return false + } + + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0); + if (first == 0x200b && !prevInput) { prevInput = "\u200b"; } + if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } + } + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; } + + runInOp(cm, function () { + applyTextInput(cm, text.slice(same), prevInput.length - same, + null, this$1.composing ? "*compose" : null); + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; } + else { this$1.prevInput = text; } + + if (this$1.composing) { + this$1.composing.range.clear(); + this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), + {className: "CodeMirror-composing"}); + } + }); + return true + }; + + TextareaInput.prototype.ensurePolled = function () { + if (this.pollingFast && this.poll()) { this.pollingFast = false; } + }; + + TextareaInput.prototype.onKeyPress = function () { + if (ie && ie_version >= 9) { this.hasSelection = null; } + this.fastPoll(); + }; + + TextareaInput.prototype.onContextMenu = function (e) { + var input = this, cm = input.cm, display = cm.display, te = input.textarea; + if (input.contextMenuPending) { input.contextMenuPending(); } + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || presto) { return } // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu; + if (reset && cm.doc.sel.contains(pos) == -1) + { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); } + + var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; + var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect(); + input.wrapper.style.cssText = "position: static"; + te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + var oldScrollY; + if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712) + display.input.focus(); + if (webkit) { window.scrollTo(null, oldScrollY); } + display.input.reset(); + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) { te.value = input.prevInput = " "; } + input.contextMenuPending = rehide; + display.selForContextMenu = cm.doc.sel; + clearTimeout(display.detectingSelectAll); + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected(); + var extval = "\u200b" + (selected ? te.value : ""); + te.value = "\u21da"; // Used to catch context-menu undo + te.value = extval; + input.prevInput = selected ? "" : "\u200b"; + te.selectionStart = 1; te.selectionEnd = extval.length; + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel; + } + } + function rehide() { + if (input.contextMenuPending != rehide) { return } + input.contextMenuPending = false; + input.wrapper.style.cssText = oldWrapperCSS; + te.style.cssText = oldCSS; + if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); } + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); } + var i = 0, poll = function () { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && + te.selectionEnd > 0 && input.prevInput == "\u200b") { + operation(cm, selectAll)(cm); + } else if (i++ < 10) { + display.detectingSelectAll = setTimeout(poll, 500); + } else { + display.selForContextMenu = null; + display.input.reset(); + } + }; + display.detectingSelectAll = setTimeout(poll, 200); + } + } + + if (ie && ie_version >= 9) { prepareSelectAllHack(); } + if (captureRightClick) { + e_stop(e); + var mouseup = function () { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + }; + + TextareaInput.prototype.readOnlyChanged = function (val) { + if (!val) { this.reset(); } + this.textarea.disabled = val == "nocursor"; + this.textarea.readOnly = !!val; + }; + + TextareaInput.prototype.setUneditable = function () {}; + + TextareaInput.prototype.needsContentAttribute = false; + + function fromTextArea(textarea, options) { + options = options ? copyObj(options) : {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabIndex) + { options.tabindex = textarea.tabIndex; } + if (!options.placeholder && textarea.placeholder) + { options.placeholder = textarea.placeholder; } + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt(); + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + + var realSubmit; + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form; + realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function () { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + } + + options.finishInit = function (cm) { + cm.save = save; + cm.getTextArea = function () { return textarea; }; + cm.toTextArea = function () { + cm.toTextArea = isNaN; // Prevent this from being ran twice + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function") + { textarea.form.submit = realSubmit; } + } + }; + }; + + textarea.style.display = "none"; + var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, + options); + return cm + } + + function addLegacyProps(CodeMirror) { + CodeMirror.off = off; + CodeMirror.on = on; + CodeMirror.wheelEventPixels = wheelEventPixels; + CodeMirror.Doc = Doc; + CodeMirror.splitLines = splitLinesAuto; + CodeMirror.countColumn = countColumn; + CodeMirror.findColumn = findColumn; + CodeMirror.isWordChar = isWordCharBasic; + CodeMirror.Pass = Pass; + CodeMirror.signal = signal; + CodeMirror.Line = Line; + CodeMirror.changeEnd = changeEnd; + CodeMirror.scrollbarModel = scrollbarModel; + CodeMirror.Pos = Pos; + CodeMirror.cmpPos = cmp; + CodeMirror.modes = modes; + CodeMirror.mimeModes = mimeModes; + CodeMirror.resolveMode = resolveMode; + CodeMirror.getMode = getMode; + CodeMirror.modeExtensions = modeExtensions; + CodeMirror.extendMode = extendMode; + CodeMirror.copyState = copyState; + CodeMirror.startState = startState; + CodeMirror.innerMode = innerMode; + CodeMirror.commands = commands; + CodeMirror.keyMap = keyMap; + CodeMirror.keyName = keyName; + CodeMirror.isModifierKey = isModifierKey; + CodeMirror.lookupKey = lookupKey; + CodeMirror.normalizeKeyMap = normalizeKeyMap; + CodeMirror.StringStream = StringStream; + CodeMirror.SharedTextMarker = SharedTextMarker; + CodeMirror.TextMarker = TextMarker; + CodeMirror.LineWidget = LineWidget; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + CodeMirror.e_stop = e_stop; + CodeMirror.addClass = addClass; + CodeMirror.contains = contains; + CodeMirror.rmClass = rmClass; + CodeMirror.keyNames = keyNames; + } + + // EDITOR CONSTRUCTOR + + defineOptions(CodeMirror); + + addEditorMethods(CodeMirror); + + // Set up methods on CodeMirror's prototype to redirect to the editor's document. + var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); + for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + { CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments)} + })(Doc.prototype[prop]); } } + + eventMixin(Doc); + CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + CodeMirror.defineMode = function(name/*, mode, …*/) { + if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name; } + defineMode.apply(this, arguments); + }; + + CodeMirror.defineMIME = defineMIME; + + // Minimal default mode. + CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }); + CodeMirror.defineMIME("text/plain", "null"); + + // EXTENSIONS + + CodeMirror.defineExtension = function (name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function (name, func) { + Doc.prototype[name] = func; + }; + + CodeMirror.fromTextArea = fromTextArea; + + addLegacyProps(CodeMirror); + + CodeMirror.version = "5.65.3"; + + return CodeMirror; + +}))); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/apl/apl.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/apl/apl.js new file mode 100644 index 0000000000..b1955f6c94 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/apl/apl.js @@ -0,0 +1,174 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("apl", function() { + var builtInOps = { + ".": "innerProduct", + "\\": "scan", + "/": "reduce", + "⌿": "reduce1Axis", + "⍀": "scan1Axis", + "¨": "each", + "⍣": "power" + }; + var builtInFuncs = { + "+": ["conjugate", "add"], + "−": ["negate", "subtract"], + "×": ["signOf", "multiply"], + "÷": ["reciprocal", "divide"], + "⌈": ["ceiling", "greaterOf"], + "⌊": ["floor", "lesserOf"], + "∣": ["absolute", "residue"], + "⍳": ["indexGenerate", "indexOf"], + "?": ["roll", "deal"], + "⋆": ["exponentiate", "toThePowerOf"], + "⍟": ["naturalLog", "logToTheBase"], + "○": ["piTimes", "circularFuncs"], + "!": ["factorial", "binomial"], + "⌹": ["matrixInverse", "matrixDivide"], + "<": [null, "lessThan"], + "≤": [null, "lessThanOrEqual"], + "=": [null, "equals"], + ">": [null, "greaterThan"], + "≥": [null, "greaterThanOrEqual"], + "≠": [null, "notEqual"], + "≡": ["depth", "match"], + "≢": [null, "notMatch"], + "∈": ["enlist", "membership"], + "⍷": [null, "find"], + "∪": ["unique", "union"], + "∩": [null, "intersection"], + "∼": ["not", "without"], + "∨": [null, "or"], + "∧": [null, "and"], + "⍱": [null, "nor"], + "⍲": [null, "nand"], + "⍴": ["shapeOf", "reshape"], + ",": ["ravel", "catenate"], + "⍪": [null, "firstAxisCatenate"], + "⌽": ["reverse", "rotate"], + "⊖": ["axis1Reverse", "axis1Rotate"], + "⍉": ["transpose", null], + "↑": ["first", "take"], + "↓": [null, "drop"], + "⊂": ["enclose", "partitionWithAxis"], + "⊃": ["diclose", "pick"], + "⌷": [null, "index"], + "⍋": ["gradeUp", null], + "⍒": ["gradeDown", null], + "⊤": ["encode", null], + "⊥": ["decode", null], + "⍕": ["format", "formatByExample"], + "⍎": ["execute", null], + "⊣": ["stop", "left"], + "⊢": ["pass", "right"] + }; + + var isOperator = /[\.\/⌿⍀¨⍣]/; + var isNiladic = /⍬/; + var isFunction = /[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/; + var isArrow = /←/; + var isComment = /[⍝#].*$/; + + var stringEater = function(type) { + var prev; + prev = false; + return function(c) { + prev = c; + if (c === type) { + return prev === "\\"; + } + return true; + }; + }; + return { + startState: function() { + return { + prev: false, + func: false, + op: false, + string: false, + escape: false + }; + }, + token: function(stream, state) { + var ch, funcName; + if (stream.eatSpace()) { + return null; + } + ch = stream.next(); + if (ch === '"' || ch === "'") { + stream.eatWhile(stringEater(ch)); + stream.next(); + state.prev = true; + return "string"; + } + if (/[\[{\(]/.test(ch)) { + state.prev = false; + return null; + } + if (/[\]}\)]/.test(ch)) { + state.prev = true; + return null; + } + if (isNiladic.test(ch)) { + state.prev = false; + return "niladic"; + } + if (/[¯\d]/.test(ch)) { + if (state.func) { + state.func = false; + state.prev = false; + } else { + state.prev = true; + } + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (isOperator.test(ch)) { + return "operator apl-" + builtInOps[ch]; + } + if (isArrow.test(ch)) { + return "apl-arrow"; + } + if (isFunction.test(ch)) { + funcName = "apl-"; + if (builtInFuncs[ch] != null) { + if (state.prev) { + funcName += builtInFuncs[ch][1]; + } else { + funcName += builtInFuncs[ch][0]; + } + } + state.func = true; + state.prev = false; + return "function " + funcName; + } + if (isComment.test(ch)) { + stream.skipToEnd(); + return "comment"; + } + if (ch === "∘" && stream.peek() === ".") { + stream.next(); + return "function jot-dot"; + } + stream.eatWhile(/[\w\$_]/); + state.prev = true; + return "keyword"; + } + }; +}); + +CodeMirror.defineMIME("text/apl", "apl"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/asciiarmor/asciiarmor.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/asciiarmor/asciiarmor.js new file mode 100644 index 0000000000..f560f42423 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/asciiarmor/asciiarmor.js @@ -0,0 +1,74 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function errorIfNotEmpty(stream) { + var nonWS = stream.match(/^\s*\S/); + stream.skipToEnd(); + return nonWS ? "error" : null; + } + + CodeMirror.defineMode("asciiarmor", function() { + return { + token: function(stream, state) { + var m; + if (state.state == "top") { + if (stream.sol() && (m = stream.match(/^-----BEGIN (.*)?-----\s*$/))) { + state.state = "headers"; + state.type = m[1]; + return "tag"; + } + return errorIfNotEmpty(stream); + } else if (state.state == "headers") { + if (stream.sol() && stream.match(/^\w+:/)) { + state.state = "header"; + return "atom"; + } else { + var result = errorIfNotEmpty(stream); + if (result) state.state = "body"; + return result; + } + } else if (state.state == "header") { + stream.skipToEnd(); + state.state = "headers"; + return "string"; + } else if (state.state == "body") { + if (stream.sol() && (m = stream.match(/^-----END (.*)?-----\s*$/))) { + if (m[1] != state.type) return "error"; + state.state = "end"; + return "tag"; + } else { + if (stream.eatWhile(/[A-Za-z0-9+\/=]/)) { + return null; + } else { + stream.next(); + return "error"; + } + } + } else if (state.state == "end") { + return errorIfNotEmpty(stream); + } + }, + blankLine: function(state) { + if (state.state == "headers") state.state = "body"; + }, + startState: function() { + return {state: "top", type: null}; + } + }; + }); + + CodeMirror.defineMIME("application/pgp", "asciiarmor"); + CodeMirror.defineMIME("application/pgp-encrypted", "asciiarmor"); + CodeMirror.defineMIME("application/pgp-keys", "asciiarmor"); + CodeMirror.defineMIME("application/pgp-signature", "asciiarmor"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/asn.1/asn.1.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/asn.1/asn.1.js new file mode 100644 index 0000000000..df1330b686 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/asn.1/asn.1.js @@ -0,0 +1,204 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("asn.1", function(config, parserConfig) { + var indentUnit = config.indentUnit, + keywords = parserConfig.keywords || {}, + cmipVerbs = parserConfig.cmipVerbs || {}, + compareTypes = parserConfig.compareTypes || {}, + status = parserConfig.status || {}, + tags = parserConfig.tags || {}, + storage = parserConfig.storage || {}, + modifier = parserConfig.modifier || {}, + accessTypes = parserConfig.accessTypes|| {}, + multiLineStrings = parserConfig.multiLineStrings, + indentStatements = parserConfig.indentStatements !== false; + var isOperatorChar = /[\|\^]/; + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]\(\){}:=,;]/.test(ch)) { + curPunc = ch; + return "punctuation"; + } + if (ch == "-"){ + if (stream.eat("-")) { + stream.skipToEnd(); + return "comment"; + } + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + + stream.eatWhile(/[\w\-]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + if (cmipVerbs.propertyIsEnumerable(cur)) return "variable cmipVerbs"; + if (compareTypes.propertyIsEnumerable(cur)) return "atom compareTypes"; + if (status.propertyIsEnumerable(cur)) return "comment status"; + if (tags.propertyIsEnumerable(cur)) return "variable-3 tags"; + if (storage.propertyIsEnumerable(cur)) return "builtin storage"; + if (modifier.propertyIsEnumerable(cur)) return "string-2 modifier"; + if (accessTypes.propertyIsEnumerable(cur)) return "atom accessTypes"; + + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped){ + var afterNext = stream.peek(); + //look if the character if the quote is like the B in '10100010'B + if (afterNext){ + afterNext = afterNext.toLowerCase(); + if(afterNext == "b" || afterNext == "h" || afterNext == "o") + stream.next(); + } + end = true; break; + } + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + //Interface + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") + && ctx.type == "statement"){ + popContext(state); + } + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") + && curPunc != ';') || (ctx.type == "statement" + && curPunc == "newstatement"))) + pushContext(state, stream.column(), "statement"); + + state.startOfLine = false; + return style; + }, + + electricChars: "{}", + lineComment: "--", + fold: "brace" + }; + }); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + CodeMirror.defineMIME("text/x-ttcn-asn", { + name: "asn.1", + keywords: words("DEFINITIONS OBJECTS IF DERIVED INFORMATION ACTION" + + " REPLY ANY NAMED CHARACTERIZED BEHAVIOUR REGISTERED" + + " WITH AS IDENTIFIED CONSTRAINED BY PRESENT BEGIN" + + " IMPORTS FROM UNITS SYNTAX MIN-ACCESS MAX-ACCESS" + + " MINACCESS MAXACCESS REVISION STATUS DESCRIPTION" + + " SEQUENCE SET COMPONENTS OF CHOICE DistinguishedName" + + " ENUMERATED SIZE MODULE END INDEX AUGMENTS EXTENSIBILITY" + + " IMPLIED EXPORTS"), + cmipVerbs: words("ACTIONS ADD GET NOTIFICATIONS REPLACE REMOVE"), + compareTypes: words("OPTIONAL DEFAULT MANAGED MODULE-TYPE MODULE_IDENTITY" + + " MODULE-COMPLIANCE OBJECT-TYPE OBJECT-IDENTITY" + + " OBJECT-COMPLIANCE MODE CONFIRMED CONDITIONAL" + + " SUBORDINATE SUPERIOR CLASS TRUE FALSE NULL" + + " TEXTUAL-CONVENTION"), + status: words("current deprecated mandatory obsolete"), + tags: words("APPLICATION AUTOMATIC EXPLICIT IMPLICIT PRIVATE TAGS" + + " UNIVERSAL"), + storage: words("BOOLEAN INTEGER OBJECT IDENTIFIER BIT OCTET STRING" + + " UTCTime InterfaceIndex IANAifType CMIP-Attribute" + + " REAL PACKAGE PACKAGES IpAddress PhysAddress" + + " NetworkAddress BITS BMPString TimeStamp TimeTicks" + + " TruthValue RowStatus DisplayString GeneralString" + + " GraphicString IA5String NumericString" + + " PrintableString SnmpAdminString TeletexString" + + " UTF8String VideotexString VisibleString StringStore" + + " ISO646String T61String UniversalString Unsigned32" + + " Integer32 Gauge Gauge32 Counter Counter32 Counter64"), + modifier: words("ATTRIBUTE ATTRIBUTES MANDATORY-GROUP MANDATORY-GROUPS" + + " GROUP GROUPS ELEMENTS EQUALITY ORDERING SUBSTRINGS" + + " DEFINED"), + accessTypes: words("not-accessible accessible-for-notify read-only" + + " read-create read-write"), + multiLineStrings: true + }); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/asterisk/asterisk.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/asterisk/asterisk.js new file mode 100644 index 0000000000..49a727019a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/asterisk/asterisk.js @@ -0,0 +1,220 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/* + * ===================================================================================== + * + * Filename: mode/asterisk/asterisk.js + * + * Description: CodeMirror mode for Asterisk dialplan + * + * Created: 05/17/2012 09:20:25 PM + * Revision: 08/05/2019 AstLinux Project: Support block-comments + * + * Author: Stas Kobzar (stas@modulis.ca), + * Company: Modulis.ca Inc. + * + * ===================================================================================== + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("asterisk", function() { + var atoms = ["exten", "same", "include","ignorepat","switch"], + dpcmd = ["#include","#exec"], + apps = [ + "addqueuemember","adsiprog","aelsub","agentlogin","agentmonitoroutgoing","agi", + "alarmreceiver","amd","answer","authenticate","background","backgrounddetect", + "bridge","busy","callcompletioncancel","callcompletionrequest","celgenuserevent", + "changemonitor","chanisavail","channelredirect","chanspy","clearhash","confbridge", + "congestion","continuewhile","controlplayback","dahdiacceptr2call","dahdibarge", + "dahdiras","dahdiscan","dahdisendcallreroutingfacility","dahdisendkeypadfacility", + "datetime","dbdel","dbdeltree","deadagi","dial","dictate","directory","disa", + "dumpchan","eagi","echo","endwhile","exec","execif","execiftime","exitwhile","extenspy", + "externalivr","festival","flash","followme","forkcdr","getcpeid","gosub","gosubif", + "goto","gotoif","gotoiftime","hangup","iax2provision","ices","importvar","incomplete", + "ivrdemo","jabberjoin","jabberleave","jabbersend","jabbersendgroup","jabberstatus", + "jack","log","macro","macroexclusive","macroexit","macroif","mailboxexists","meetme", + "meetmeadmin","meetmechanneladmin","meetmecount","milliwatt","minivmaccmess","minivmdelete", + "minivmgreet","minivmmwi","minivmnotify","minivmrecord","mixmonitor","monitor","morsecode", + "mp3player","mset","musiconhold","nbscat","nocdr","noop","odbc","odbc","odbcfinish", + "originate","ospauth","ospfinish","osplookup","ospnext","page","park","parkandannounce", + "parkedcall","pausemonitor","pausequeuemember","pickup","pickupchan","playback","playtones", + "privacymanager","proceeding","progress","queue","queuelog","raiseexception","read","readexten", + "readfile","receivefax","receivefax","receivefax","record","removequeuemember", + "resetcdr","retrydial","return","ringing","sayalpha","saycountedadj","saycountednoun", + "saycountpl","saydigits","saynumber","sayphonetic","sayunixtime","senddtmf","sendfax", + "sendfax","sendfax","sendimage","sendtext","sendurl","set","setamaflags", + "setcallerpres","setmusiconhold","sipaddheader","sipdtmfmode","sipremoveheader","skel", + "slastation","slatrunk","sms","softhangup","speechactivategrammar","speechbackground", + "speechcreate","speechdeactivategrammar","speechdestroy","speechloadgrammar","speechprocessingsound", + "speechstart","speechunloadgrammar","stackpop","startmusiconhold","stopmixmonitor","stopmonitor", + "stopmusiconhold","stopplaytones","system","testclient","testserver","transfer","tryexec", + "trysystem","unpausemonitor","unpausequeuemember","userevent","verbose","vmauthenticate", + "vmsayname","voicemail","voicemailmain","wait","waitexten","waitfornoise","waitforring", + "waitforsilence","waitmusiconhold","waituntil","while","zapateller" + ]; + + function basicToken(stream,state){ + var cur = ''; + var ch = stream.next(); + // comment + if (state.blockComment) { + if (ch == "-" && stream.match("-;", true)) { + state.blockComment = false; + } else if (stream.skipTo("--;")) { + stream.next(); + stream.next(); + stream.next(); + state.blockComment = false; + } else { + stream.skipToEnd(); + } + return "comment"; + } + if(ch == ";") { + if (stream.match("--", true)) { + if (!stream.match("-", false)) { // Except ;--- is not a block comment + state.blockComment = true; + return "comment"; + } + } + stream.skipToEnd(); + return "comment"; + } + // context + if(ch == '[') { + stream.skipTo(']'); + stream.eat(']'); + return "header"; + } + // string + if(ch == '"') { + stream.skipTo('"'); + return "string"; + } + if(ch == "'") { + stream.skipTo("'"); + return "string-2"; + } + // dialplan commands + if(ch == '#') { + stream.eatWhile(/\w/); + cur = stream.current(); + if(dpcmd.indexOf(cur) !== -1) { + stream.skipToEnd(); + return "strong"; + } + } + // application args + if(ch == '$'){ + var ch1 = stream.peek(); + if(ch1 == '{'){ + stream.skipTo('}'); + stream.eat('}'); + return "variable-3"; + } + } + // extension + stream.eatWhile(/\w/); + cur = stream.current(); + if(atoms.indexOf(cur) !== -1) { + state.extenStart = true; + switch(cur) { + case 'same': state.extenSame = true; break; + case 'include': + case 'switch': + case 'ignorepat': + state.extenInclude = true;break; + default:break; + } + return "atom"; + } + } + + return { + startState: function() { + return { + blockComment: false, + extenStart: false, + extenSame: false, + extenInclude: false, + extenExten: false, + extenPriority: false, + extenApplication: false + }; + }, + token: function(stream, state) { + + var cur = ''; + if(stream.eatSpace()) return null; + // extension started + if(state.extenStart){ + stream.eatWhile(/[^\s]/); + cur = stream.current(); + if(/^=>?$/.test(cur)){ + state.extenExten = true; + state.extenStart = false; + return "strong"; + } else { + state.extenStart = false; + stream.skipToEnd(); + return "error"; + } + } else if(state.extenExten) { + // set exten and priority + state.extenExten = false; + state.extenPriority = true; + stream.eatWhile(/[^,]/); + if(state.extenInclude) { + stream.skipToEnd(); + state.extenPriority = false; + state.extenInclude = false; + } + if(state.extenSame) { + state.extenPriority = false; + state.extenSame = false; + state.extenApplication = true; + } + return "tag"; + } else if(state.extenPriority) { + state.extenPriority = false; + state.extenApplication = true; + stream.next(); // get comma + if(state.extenSame) return null; + stream.eatWhile(/[^,]/); + return "number"; + } else if(state.extenApplication) { + stream.eatWhile(/,/); + cur = stream.current(); + if(cur === ',') return null; + stream.eatWhile(/\w/); + cur = stream.current().toLowerCase(); + state.extenApplication = false; + if(apps.indexOf(cur) !== -1){ + return "def strong"; + } + } else{ + return basicToken(stream,state); + } + + return null; + }, + + blockCommentStart: ";--", + blockCommentEnd: "--;", + lineComment: ";" + }; +}); + +CodeMirror.defineMIME("text/x-asterisk", "asterisk"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/brainfuck/brainfuck.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/brainfuck/brainfuck.js new file mode 100644 index 0000000000..af6d889aee --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/brainfuck/brainfuck.js @@ -0,0 +1,85 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Brainfuck mode created by Michael Kaminsky https://github.com/mkaminsky11 + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") + mod(require("../../lib/codemirror")) + else if (typeof define == "function" && define.amd) + define(["../../lib/codemirror"], mod) + else + mod(CodeMirror) +})(function(CodeMirror) { + "use strict" + var reserve = "><+-.,[]".split(""); + /* + comments can be either: + placed behind lines + + +++ this is a comment + + where reserved characters cannot be used + or in a loop + [ + this is ok to use [ ] and stuff + ] + or preceded by # + */ + CodeMirror.defineMode("brainfuck", function() { + return { + startState: function() { + return { + commentLine: false, + left: 0, + right: 0, + commentLoop: false + } + }, + token: function(stream, state) { + if (stream.eatSpace()) return null + if(stream.sol()){ + state.commentLine = false; + } + var ch = stream.next().toString(); + if(reserve.indexOf(ch) !== -1){ + if(state.commentLine === true){ + if(stream.eol()){ + state.commentLine = false; + } + return "comment"; + } + if(ch === "]" || ch === "["){ + if(ch === "["){ + state.left++; + } + else{ + state.right++; + } + return "bracket"; + } + else if(ch === "+" || ch === "-"){ + return "keyword"; + } + else if(ch === "<" || ch === ">"){ + return "atom"; + } + else if(ch === "." || ch === ","){ + return "def"; + } + } + else{ + state.commentLine = true; + if(stream.eol()){ + state.commentLine = false; + } + return "comment"; + } + if(stream.eol()){ + state.commentLine = false; + } + } + }; + }); +CodeMirror.defineMIME("text/x-brainfuck","brainfuck") +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/clike/clike.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/clike/clike.js new file mode 100644 index 0000000000..afb7b3be88 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/clike/clike.js @@ -0,0 +1,940 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +function Context(indented, column, type, info, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.info = info; + this.align = align; + this.prev = prev; +} +function pushContext(state, col, type, info) { + var indent = state.indented; + if (state.context && state.context.type == "statement" && type != "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, info, null, state.context); +} +function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; +} + +function typeBefore(stream, state, pos) { + if (state.prevToken == "variable" || state.prevToken == "type") return true; + if (/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(stream.string.slice(0, pos))) return true; + if (state.typeAtEndOfLine && stream.column() == stream.indentation()) return true; +} + +function isTopScope(context) { + for (;;) { + if (!context || context.type == "top") return true; + if (context.type == "}" && context.prev.info != "namespace") return false; + context = context.prev; + } +} + +CodeMirror.defineMode("clike", function(config, parserConfig) { + var indentUnit = config.indentUnit, + statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, + dontAlignCalls = parserConfig.dontAlignCalls, + keywords = parserConfig.keywords || {}, + types = parserConfig.types || {}, + builtin = parserConfig.builtin || {}, + blockKeywords = parserConfig.blockKeywords || {}, + defKeywords = parserConfig.defKeywords || {}, + atoms = parserConfig.atoms || {}, + hooks = parserConfig.hooks || {}, + multiLineStrings = parserConfig.multiLineStrings, + indentStatements = parserConfig.indentStatements !== false, + indentSwitch = parserConfig.indentSwitch !== false, + namespaceSeparator = parserConfig.namespaceSeparator, + isPunctuationChar = parserConfig.isPunctuationChar || /[\[\]{}\(\),;\:\.]/, + numberStart = parserConfig.numberStart || /[\d\.]/, + number = parserConfig.number || /^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i, + isOperatorChar = parserConfig.isOperatorChar || /[+\-*&%=<>!?|\/]/, + isIdentifierChar = parserConfig.isIdentifierChar || /[\w\$_\xa1-\uffff]/, + // An optional function that takes a {string} token and returns true if it + // should be treated as a builtin. + isReservedIdentifier = parserConfig.isReservedIdentifier || false; + + var curPunc, isDefKeyword; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (numberStart.test(ch)) { + stream.backUp(1) + if (stream.match(number)) return "number" + stream.next() + } + if (isPunctuationChar.test(ch)) { + curPunc = ch; + return null; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + while (!stream.match(/^\/[\/*]/, false) && stream.eat(isOperatorChar)) {} + return "operator"; + } + stream.eatWhile(isIdentifierChar); + if (namespaceSeparator) while (stream.match(namespaceSeparator)) + stream.eatWhile(isIdentifierChar); + + var cur = stream.current(); + if (contains(keywords, cur)) { + if (contains(blockKeywords, cur)) curPunc = "newstatement"; + if (contains(defKeywords, cur)) isDefKeyword = true; + return "keyword"; + } + if (contains(types, cur)) return "type"; + if (contains(builtin, cur) + || (isReservedIdentifier && isReservedIdentifier(cur))) { + if (contains(blockKeywords, cur)) curPunc = "newstatement"; + return "builtin"; + } + if (contains(atoms, cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function maybeEOL(stream, state) { + if (parserConfig.typeFirstDefinitions && stream.eol() && isTopScope(state.context)) + state.typeAtEndOfLine = typeBefore(stream, state, stream.pos) + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", null, false), + indented: 0, + startOfLine: true, + prevToken: null + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) { maybeEOL(stream, state); return null; } + curPunc = isDefKeyword = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if (curPunc == ";" || curPunc == ":" || (curPunc == "," && stream.match(/^\s*(?:\/\/.*)?$/, false))) + while (state.context.type == "statement") popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (indentStatements && + (((ctx.type == "}" || ctx.type == "top") && curPunc != ";") || + (ctx.type == "statement" && curPunc == "newstatement"))) { + pushContext(state, stream.column(), "statement", stream.current()); + } + + if (style == "variable" && + ((state.prevToken == "def" || + (parserConfig.typeFirstDefinitions && typeBefore(stream, state, stream.start) && + isTopScope(state.context) && stream.match(/^\s*\(/, false))))) + style = "def"; + + if (hooks.token) { + var result = hooks.token(stream, state, style); + if (result !== undefined) style = result; + } + + if (style == "def" && parserConfig.styleDefs === false) style = "variable"; + + state.startOfLine = false; + state.prevToken = isDefKeyword ? "def" : style || curPunc; + maybeEOL(stream, state); + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null || state.typeAtEndOfLine) return CodeMirror.Pass; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + var closing = firstChar == ctx.type; + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + if (parserConfig.dontIndentStatements) + while (ctx.type == "statement" && parserConfig.dontIndentStatements.test(ctx.info)) + ctx = ctx.prev + if (hooks.indent) { + var hook = hooks.indent(state, ctx, textAfter, indentUnit); + if (typeof hook == "number") return hook + } + var switchBlock = ctx.prev && ctx.prev.info == "switch"; + if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) { + while (ctx.type != "top" && ctx.type != "}") ctx = ctx.prev + return ctx.indented + } + if (ctx.type == "statement") + return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); + if (ctx.align && (!dontAlignCalls || ctx.type != ")")) + return ctx.column + (closing ? 0 : 1); + if (ctx.type == ")" && !closing) + return ctx.indented + statementIndentUnit; + + return ctx.indented + (closing ? 0 : indentUnit) + + (!closing && switchBlock && !/^(?:case|default)\b/.test(textAfter) ? indentUnit : 0); + }, + + electricInput: indentSwitch ? /^\s*(?:case .*?:|default:|\{\}?|\})$/ : /^\s*[{}]$/, + blockCommentStart: "/*", + blockCommentEnd: "*/", + blockCommentContinue: " * ", + lineComment: "//", + fold: "brace" + }; +}); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + function contains(words, word) { + if (typeof words === "function") { + return words(word); + } else { + return words.propertyIsEnumerable(word); + } + } + var cKeywords = "auto if break case register continue return default do sizeof " + + "static else struct switch extern typedef union for goto while enum const " + + "volatile inline restrict asm fortran"; + + // Keywords from https://en.cppreference.com/w/cpp/keyword includes C++20. + var cppKeywords = "alignas alignof and and_eq audit axiom bitand bitor catch " + + "class compl concept constexpr const_cast decltype delete dynamic_cast " + + "explicit export final friend import module mutable namespace new noexcept " + + "not not_eq operator or or_eq override private protected public " + + "reinterpret_cast requires static_assert static_cast template this " + + "thread_local throw try typeid typename using virtual xor xor_eq"; + + var objCKeywords = "bycopy byref in inout oneway out self super atomic nonatomic retain copy " + + "readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd " + + "@interface @implementation @end @protocol @encode @property @synthesize @dynamic @class " + + "@public @package @private @protected @required @optional @try @catch @finally @import " + + "@selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available"; + + var objCBuiltins = "FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION " + + " NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER " + + "NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION " + + "NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT" + + // Do not use this. Use the cTypes function below. This is global just to avoid + // excessive calls when cTypes is being called multiple times during a parse. + var basicCTypes = words("int long char short double float unsigned signed " + + "void bool"); + + // Do not use this. Use the objCTypes function below. This is global just to avoid + // excessive calls when objCTypes is being called multiple times during a parse. + var basicObjCTypes = words("SEL instancetype id Class Protocol BOOL"); + + // Returns true if identifier is a "C" type. + // C type is defined as those that are reserved by the compiler (basicTypes), + // and those that end in _t (Reserved by POSIX for types) + // http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html + function cTypes(identifier) { + return contains(basicCTypes, identifier) || /.+_t$/.test(identifier); + } + + // Returns true if identifier is a "Objective C" type. + function objCTypes(identifier) { + return cTypes(identifier) || contains(basicObjCTypes, identifier); + } + + var cBlockKeywords = "case do else for if switch while struct enum union"; + var cDefKeywords = "struct enum union"; + + function cppHook(stream, state) { + if (!state.startOfLine) return false + for (var ch, next = null; ch = stream.peek();) { + if (ch == "\\" && stream.match(/^.$/)) { + next = cppHook + break + } else if (ch == "/" && stream.match(/^\/[\/\*]/, false)) { + break + } + stream.next() + } + state.tokenize = next + return "meta" + } + + function pointerHook(_stream, state) { + if (state.prevToken == "type") return "type"; + return false; + } + + // For C and C++ (and ObjC): identifiers starting with __ + // or _ followed by a capital letter are reserved for the compiler. + function cIsReservedIdentifier(token) { + if (!token || token.length < 2) return false; + if (token[0] != '_') return false; + return (token[1] == '_') || (token[1] !== token[1].toLowerCase()); + } + + function cpp14Literal(stream) { + stream.eatWhile(/[\w\.']/); + return "number"; + } + + function cpp11StringHook(stream, state) { + stream.backUp(1); + // Raw strings. + if (stream.match(/^(?:R|u8R|uR|UR|LR)/)) { + var match = stream.match(/^"([^\s\\()]{0,16})\(/); + if (!match) { + return false; + } + state.cpp11RawStringDelim = match[1]; + state.tokenize = tokenRawString; + return tokenRawString(stream, state); + } + // Unicode strings/chars. + if (stream.match(/^(?:u8|u|U|L)/)) { + if (stream.match(/^["']/, /* eat */ false)) { + return "string"; + } + return false; + } + // Ignore this hook. + stream.next(); + return false; + } + + function cppLooksLikeConstructor(word) { + var lastTwo = /(\w+)::~?(\w+)$/.exec(word); + return lastTwo && lastTwo[1] == lastTwo[2]; + } + + // C#-style strings where "" escapes a quote. + function tokenAtString(stream, state) { + var next; + while ((next = stream.next()) != null) { + if (next == '"' && !stream.eat('"')) { + state.tokenize = null; + break; + } + } + return "string"; + } + + // C++11 raw string literal is "( anything )", where + // can be a string up to 16 characters long. + function tokenRawString(stream, state) { + // Escape characters that have special regex meanings. + var delim = state.cpp11RawStringDelim.replace(/[^\w\s]/g, '\\$&'); + var match = stream.match(new RegExp(".*?\\)" + delim + '"')); + if (match) + state.tokenize = null; + else + stream.skipToEnd(); + return "string"; + } + + function def(mimes, mode) { + if (typeof mimes == "string") mimes = [mimes]; + var words = []; + function add(obj) { + if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) + words.push(prop); + } + add(mode.keywords); + add(mode.types); + add(mode.builtin); + add(mode.atoms); + if (words.length) { + mode.helperType = mimes[0]; + CodeMirror.registerHelper("hintWords", mimes[0], words); + } + + for (var i = 0; i < mimes.length; ++i) + CodeMirror.defineMIME(mimes[i], mode); + } + + def(["text/x-csrc", "text/x-c", "text/x-chdr"], { + name: "clike", + keywords: words(cKeywords), + types: cTypes, + blockKeywords: words(cBlockKeywords), + defKeywords: words(cDefKeywords), + typeFirstDefinitions: true, + atoms: words("NULL true false"), + isReservedIdentifier: cIsReservedIdentifier, + hooks: { + "#": cppHook, + "*": pointerHook, + }, + modeProps: {fold: ["brace", "include"]} + }); + + def(["text/x-c++src", "text/x-c++hdr"], { + name: "clike", + keywords: words(cKeywords + " " + cppKeywords), + types: cTypes, + blockKeywords: words(cBlockKeywords + " class try catch"), + defKeywords: words(cDefKeywords + " class namespace"), + typeFirstDefinitions: true, + atoms: words("true false NULL nullptr"), + dontIndentStatements: /^template$/, + isIdentifierChar: /[\w\$_~\xa1-\uffff]/, + isReservedIdentifier: cIsReservedIdentifier, + hooks: { + "#": cppHook, + "*": pointerHook, + "u": cpp11StringHook, + "U": cpp11StringHook, + "L": cpp11StringHook, + "R": cpp11StringHook, + "0": cpp14Literal, + "1": cpp14Literal, + "2": cpp14Literal, + "3": cpp14Literal, + "4": cpp14Literal, + "5": cpp14Literal, + "6": cpp14Literal, + "7": cpp14Literal, + "8": cpp14Literal, + "9": cpp14Literal, + token: function(stream, state, style) { + if (style == "variable" && stream.peek() == "(" && + (state.prevToken == ";" || state.prevToken == null || + state.prevToken == "}") && + cppLooksLikeConstructor(stream.current())) + return "def"; + } + }, + namespaceSeparator: "::", + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-java", { + name: "clike", + keywords: words("abstract assert break case catch class const continue default " + + "do else enum extends final finally for goto if implements import " + + "instanceof interface native new package private protected public " + + "return static strictfp super switch synchronized this throw throws transient " + + "try volatile while @interface"), + types: words("var byte short int long float double boolean char void Boolean Byte Character Double Float " + + "Integer Long Number Object Short String StringBuffer StringBuilder Void"), + blockKeywords: words("catch class do else finally for if switch try while"), + defKeywords: words("class interface enum @interface"), + typeFirstDefinitions: true, + atoms: words("true false null"), + number: /^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i, + hooks: { + "@": function(stream) { + // Don't match the @interface keyword. + if (stream.match('interface', false)) return false; + + stream.eatWhile(/[\w\$_]/); + return "meta"; + }, + '"': function(stream, state) { + if (!stream.match(/""$/)) return false; + state.tokenize = tokenTripleString; + return state.tokenize(stream, state); + } + }, + modeProps: {fold: ["brace", "import"]} + }); + + def("text/x-csharp", { + name: "clike", + keywords: words("abstract as async await base break case catch checked class const continue" + + " default delegate do else enum event explicit extern finally fixed for" + + " foreach goto if implicit in interface internal is lock namespace new" + + " operator out override params private protected public readonly ref return sealed" + + " sizeof stackalloc static struct switch this throw try typeof unchecked" + + " unsafe using virtual void volatile while add alias ascending descending dynamic from get" + + " global group into join let orderby partial remove select set value var yield"), + types: words("Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func" + + " Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32" + + " UInt64 bool byte char decimal double short int long object" + + " sbyte float string ushort uint ulong"), + blockKeywords: words("catch class do else finally for foreach if struct switch try while"), + defKeywords: words("class interface namespace struct var"), + typeFirstDefinitions: true, + atoms: words("true false null"), + hooks: { + "@": function(stream, state) { + if (stream.eat('"')) { + state.tokenize = tokenAtString; + return tokenAtString(stream, state); + } + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); + + function tokenTripleString(stream, state) { + var escaped = false; + while (!stream.eol()) { + if (!escaped && stream.match('"""')) { + state.tokenize = null; + break; + } + escaped = stream.next() == "\\" && !escaped; + } + return "string"; + } + + function tokenNestedComment(depth) { + return function (stream, state) { + var ch + while (ch = stream.next()) { + if (ch == "*" && stream.eat("/")) { + if (depth == 1) { + state.tokenize = null + break + } else { + state.tokenize = tokenNestedComment(depth - 1) + return state.tokenize(stream, state) + } + } else if (ch == "/" && stream.eat("*")) { + state.tokenize = tokenNestedComment(depth + 1) + return state.tokenize(stream, state) + } + } + return "comment" + } + } + + def("text/x-scala", { + name: "clike", + keywords: words( + /* scala */ + "abstract case catch class def do else extends final finally for forSome if " + + "implicit import lazy match new null object override package private protected return " + + "sealed super this throw trait try type val var while with yield _ " + + + /* package scala */ + "assert assume require print println printf readLine readBoolean readByte readShort " + + "readChar readInt readLong readFloat readDouble" + ), + types: words( + "AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either " + + "Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable " + + "Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering " + + "Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder " + + "StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector " + + + /* package java.lang */ + "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" + ), + multiLineStrings: true, + blockKeywords: words("catch class enum do else finally for forSome if match switch try while"), + defKeywords: words("class enum def object package trait type val var"), + atoms: words("true false null"), + indentStatements: false, + indentSwitch: false, + isOperatorChar: /[+\-*&%=<>!?|\/#:@]/, + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + }, + '"': function(stream, state) { + if (!stream.match('""')) return false; + state.tokenize = tokenTripleString; + return state.tokenize(stream, state); + }, + "'": function(stream) { + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + return "atom"; + }, + "=": function(stream, state) { + var cx = state.context + if (cx.type == "}" && cx.align && stream.eat(">")) { + state.context = new Context(cx.indented, cx.column, cx.type, cx.info, null, cx.prev) + return "operator" + } else { + return false + } + }, + + "/": function(stream, state) { + if (!stream.eat("*")) return false + state.tokenize = tokenNestedComment(1) + return state.tokenize(stream, state) + } + }, + modeProps: {closeBrackets: {pairs: '()[]{}""', triples: '"'}} + }); + + function tokenKotlinString(tripleString){ + return function (stream, state) { + var escaped = false, next, end = false; + while (!stream.eol()) { + if (!tripleString && !escaped && stream.match('"') ) {end = true; break;} + if (tripleString && stream.match('"""')) {end = true; break;} + next = stream.next(); + if(!escaped && next == "$" && stream.match('{')) + stream.skipTo("}"); + escaped = !escaped && next == "\\" && !tripleString; + } + if (end || !tripleString) + state.tokenize = null; + return "string"; + } + } + + def("text/x-kotlin", { + name: "clike", + keywords: words( + /*keywords*/ + "package as typealias class interface this super val operator " + + "var fun for is in This throw return annotation " + + "break continue object if else while do try when !in !is as? " + + + /*soft keywords*/ + "file import where by get set abstract enum open inner override private public internal " + + "protected catch finally out final vararg reified dynamic companion constructor init " + + "sealed field property receiver param sparam lateinit data inline noinline tailrec " + + "external annotation crossinline const operator infix suspend actual expect setparam value" + ), + types: words( + /* package java.lang */ + "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray " + + "ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy " + + "LazyThreadSafetyMode LongArray Nothing ShortArray Unit" + ), + intendSwitch: false, + indentStatements: false, + multiLineStrings: true, + number: /^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i, + blockKeywords: words("catch class do else finally for if where try while enum"), + defKeywords: words("class val var object interface fun"), + atoms: words("true false null this"), + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + }, + '*': function(_stream, state) { + return state.prevToken == '.' ? 'variable' : 'operator'; + }, + '"': function(stream, state) { + state.tokenize = tokenKotlinString(stream.match('""')); + return state.tokenize(stream, state); + }, + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenNestedComment(1); + return state.tokenize(stream, state) + }, + indent: function(state, ctx, textAfter, indentUnit) { + var firstChar = textAfter && textAfter.charAt(0); + if ((state.prevToken == "}" || state.prevToken == ")") && textAfter == "") + return state.indented; + if ((state.prevToken == "operator" && textAfter != "}" && state.context.type != "}") || + state.prevToken == "variable" && firstChar == "." || + (state.prevToken == "}" || state.prevToken == ")") && firstChar == ".") + return indentUnit * 2 + ctx.indented; + if (ctx.align && ctx.type == "}") + return ctx.indented + (state.context.type == (textAfter || "").charAt(0) ? 0 : indentUnit); + } + }, + modeProps: {closeBrackets: {triples: '"'}} + }); + + def(["x-shader/x-vertex", "x-shader/x-fragment"], { + name: "clike", + keywords: words("sampler1D sampler2D sampler3D samplerCube " + + "sampler1DShadow sampler2DShadow " + + "const attribute uniform varying " + + "break continue discard return " + + "for while do if else struct " + + "in out inout"), + types: words("float int bool void " + + "vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 " + + "mat2 mat3 mat4"), + blockKeywords: words("for while do if else struct"), + builtin: words("radians degrees sin cos tan asin acos atan " + + "pow exp log exp2 sqrt inversesqrt " + + "abs sign floor ceil fract mod min max clamp mix step smoothstep " + + "length distance dot cross normalize ftransform faceforward " + + "reflect refract matrixCompMult " + + "lessThan lessThanEqual greaterThan greaterThanEqual " + + "equal notEqual any all not " + + "texture1D texture1DProj texture1DLod texture1DProjLod " + + "texture2D texture2DProj texture2DLod texture2DProjLod " + + "texture3D texture3DProj texture3DLod texture3DProjLod " + + "textureCube textureCubeLod " + + "shadow1D shadow2D shadow1DProj shadow2DProj " + + "shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod " + + "dFdx dFdy fwidth " + + "noise1 noise2 noise3 noise4"), + atoms: words("true false " + + "gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex " + + "gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 " + + "gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 " + + "gl_FogCoord gl_PointCoord " + + "gl_Position gl_PointSize gl_ClipVertex " + + "gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor " + + "gl_TexCoord gl_FogFragCoord " + + "gl_FragCoord gl_FrontFacing " + + "gl_FragData gl_FragDepth " + + "gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix " + + "gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse " + + "gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse " + + "gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose " + + "gl_ProjectionMatrixInverseTranspose " + + "gl_ModelViewProjectionMatrixInverseTranspose " + + "gl_TextureMatrixInverseTranspose " + + "gl_NormalScale gl_DepthRange gl_ClipPlane " + + "gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel " + + "gl_FrontLightModelProduct gl_BackLightModelProduct " + + "gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ " + + "gl_FogParameters " + + "gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords " + + "gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats " + + "gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits " + + "gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits " + + "gl_MaxDrawBuffers"), + indentSwitch: false, + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-nesc", { + name: "clike", + keywords: words(cKeywords + " as atomic async call command component components configuration event generic " + + "implementation includes interface module new norace nx_struct nx_union post provides " + + "signal task uses abstract extends"), + types: cTypes, + blockKeywords: words(cBlockKeywords), + atoms: words("null true false"), + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-objectivec", { + name: "clike", + keywords: words(cKeywords + " " + objCKeywords), + types: objCTypes, + builtin: words(objCBuiltins), + blockKeywords: words(cBlockKeywords + " @synthesize @try @catch @finally @autoreleasepool @synchronized"), + defKeywords: words(cDefKeywords + " @interface @implementation @protocol @class"), + dontIndentStatements: /^@.*$/, + typeFirstDefinitions: true, + atoms: words("YES NO NULL Nil nil true false nullptr"), + isReservedIdentifier: cIsReservedIdentifier, + hooks: { + "#": cppHook, + "*": pointerHook, + }, + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-objectivec++", { + name: "clike", + keywords: words(cKeywords + " " + objCKeywords + " " + cppKeywords), + types: objCTypes, + builtin: words(objCBuiltins), + blockKeywords: words(cBlockKeywords + " @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"), + defKeywords: words(cDefKeywords + " @interface @implementation @protocol @class class namespace"), + dontIndentStatements: /^@.*$|^template$/, + typeFirstDefinitions: true, + atoms: words("YES NO NULL Nil nil true false nullptr"), + isReservedIdentifier: cIsReservedIdentifier, + hooks: { + "#": cppHook, + "*": pointerHook, + "u": cpp11StringHook, + "U": cpp11StringHook, + "L": cpp11StringHook, + "R": cpp11StringHook, + "0": cpp14Literal, + "1": cpp14Literal, + "2": cpp14Literal, + "3": cpp14Literal, + "4": cpp14Literal, + "5": cpp14Literal, + "6": cpp14Literal, + "7": cpp14Literal, + "8": cpp14Literal, + "9": cpp14Literal, + token: function(stream, state, style) { + if (style == "variable" && stream.peek() == "(" && + (state.prevToken == ";" || state.prevToken == null || + state.prevToken == "}") && + cppLooksLikeConstructor(stream.current())) + return "def"; + } + }, + namespaceSeparator: "::", + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-squirrel", { + name: "clike", + keywords: words("base break clone continue const default delete enum extends function in class" + + " foreach local resume return this throw typeof yield constructor instanceof static"), + types: cTypes, + blockKeywords: words("case catch class else for foreach if switch try while"), + defKeywords: words("function local class"), + typeFirstDefinitions: true, + atoms: words("true false null"), + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); + + // Ceylon Strings need to deal with interpolation + var stringTokenizer = null; + function tokenCeylonString(type) { + return function(stream, state) { + var escaped = false, next, end = false; + while (!stream.eol()) { + if (!escaped && stream.match('"') && + (type == "single" || stream.match('""'))) { + end = true; + break; + } + if (!escaped && stream.match('``')) { + stringTokenizer = tokenCeylonString(type); + end = true; + break; + } + next = stream.next(); + escaped = type == "single" && !escaped && next == "\\"; + } + if (end) + state.tokenize = null; + return "string"; + } + } + + def("text/x-ceylon", { + name: "clike", + keywords: words("abstracts alias assembly assert assign break case catch class continue dynamic else" + + " exists extends finally for function given if import in interface is let module new" + + " nonempty object of out outer package return satisfies super switch then this throw" + + " try value void while"), + types: function(word) { + // In Ceylon all identifiers that start with an uppercase are types + var first = word.charAt(0); + return (first === first.toUpperCase() && first !== first.toLowerCase()); + }, + blockKeywords: words("case catch class dynamic else finally for function if interface module new object switch try while"), + defKeywords: words("class dynamic function interface module object package value"), + builtin: words("abstract actual aliased annotation by default deprecated doc final formal late license" + + " native optional sealed see serializable shared suppressWarnings tagged throws variable"), + isPunctuationChar: /[\[\]{}\(\),;\:\.`]/, + isOperatorChar: /[+\-*&%=<>!?|^~:\/]/, + numberStart: /[\d#$]/, + number: /^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i, + multiLineStrings: true, + typeFirstDefinitions: true, + atoms: words("true false null larger smaller equal empty finished"), + indentSwitch: false, + styleDefs: false, + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + }, + '"': function(stream, state) { + state.tokenize = tokenCeylonString(stream.match('""') ? "triple" : "single"); + return state.tokenize(stream, state); + }, + '`': function(stream, state) { + if (!stringTokenizer || !stream.match('`')) return false; + state.tokenize = stringTokenizer; + stringTokenizer = null; + return state.tokenize(stream, state); + }, + "'": function(stream) { + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + return "atom"; + }, + token: function(_stream, state, style) { + if ((style == "variable" || style == "type") && + state.prevToken == ".") { + return "variable-2"; + } + } + }, + modeProps: { + fold: ["brace", "import"], + closeBrackets: {triples: '"'} + } + }); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/clojure/clojure.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/clojure/clojure.js new file mode 100644 index 0000000000..0b9d6acc3e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/clojure/clojure.js @@ -0,0 +1,292 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports === "object" && typeof module === "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define === "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("clojure", function (options) { + var atoms = ["false", "nil", "true"]; + var specialForms = [".", "catch", "def", "do", "if", "monitor-enter", + "monitor-exit", "new", "quote", "recur", "set!", "throw", "try", "var"]; + var coreSymbols = ["*", "*'", "*1", "*2", "*3", "*agent*", + "*allow-unresolved-vars*", "*assert*", "*clojure-version*", + "*command-line-args*", "*compile-files*", "*compile-path*", + "*compiler-options*", "*data-readers*", "*default-data-reader-fn*", "*e", + "*err*", "*file*", "*flush-on-newline*", "*fn-loader*", "*in*", + "*math-context*", "*ns*", "*out*", "*print-dup*", "*print-length*", + "*print-level*", "*print-meta*", "*print-namespace-maps*", + "*print-readably*", "*read-eval*", "*reader-resolver*", "*source-path*", + "*suppress-read*", "*unchecked-math*", "*use-context-classloader*", + "*verbose-defrecords*", "*warn-on-reflection*", "+", "+'", "-", "-'", + "->", "->>", "->ArrayChunk", "->Eduction", "->Vec", "->VecNode", + "->VecSeq", "-cache-protocol-fn", "-reset-methods", "..", "/", "<", "<=", + "=", "==", ">", ">=", "EMPTY-NODE", "Inst", "StackTraceElement->vec", + "Throwable->map", "accessor", "aclone", "add-classpath", "add-watch", + "agent", "agent-error", "agent-errors", "aget", "alength", "alias", + "all-ns", "alter", "alter-meta!", "alter-var-root", "amap", "ancestors", + "and", "any?", "apply", "areduce", "array-map", "as->", "aset", + "aset-boolean", "aset-byte", "aset-char", "aset-double", "aset-float", + "aset-int", "aset-long", "aset-short", "assert", "assoc", "assoc!", + "assoc-in", "associative?", "atom", "await", "await-for", "await1", + "bases", "bean", "bigdec", "bigint", "biginteger", "binding", "bit-and", + "bit-and-not", "bit-clear", "bit-flip", "bit-not", "bit-or", "bit-set", + "bit-shift-left", "bit-shift-right", "bit-test", "bit-xor", "boolean", + "boolean-array", "boolean?", "booleans", "bound-fn", "bound-fn*", + "bound?", "bounded-count", "butlast", "byte", "byte-array", "bytes", + "bytes?", "case", "cast", "cat", "char", "char-array", + "char-escape-string", "char-name-string", "char?", "chars", "chunk", + "chunk-append", "chunk-buffer", "chunk-cons", "chunk-first", "chunk-next", + "chunk-rest", "chunked-seq?", "class", "class?", "clear-agent-errors", + "clojure-version", "coll?", "comment", "commute", "comp", "comparator", + "compare", "compare-and-set!", "compile", "complement", "completing", + "concat", "cond", "cond->", "cond->>", "condp", "conj", "conj!", "cons", + "constantly", "construct-proxy", "contains?", "count", "counted?", + "create-ns", "create-struct", "cycle", "dec", "dec'", "decimal?", + "declare", "dedupe", "default-data-readers", "definline", "definterface", + "defmacro", "defmethod", "defmulti", "defn", "defn-", "defonce", + "defprotocol", "defrecord", "defstruct", "deftype", "delay", "delay?", + "deliver", "denominator", "deref", "derive", "descendants", "destructure", + "disj", "disj!", "dissoc", "dissoc!", "distinct", "distinct?", "doall", + "dorun", "doseq", "dosync", "dotimes", "doto", "double", "double-array", + "double?", "doubles", "drop", "drop-last", "drop-while", "eduction", + "empty", "empty?", "ensure", "ensure-reduced", "enumeration-seq", + "error-handler", "error-mode", "eval", "even?", "every-pred", "every?", + "ex-data", "ex-info", "extend", "extend-protocol", "extend-type", + "extenders", "extends?", "false?", "ffirst", "file-seq", "filter", + "filterv", "find", "find-keyword", "find-ns", "find-protocol-impl", + "find-protocol-method", "find-var", "first", "flatten", "float", + "float-array", "float?", "floats", "flush", "fn", "fn?", "fnext", "fnil", + "for", "force", "format", "frequencies", "future", "future-call", + "future-cancel", "future-cancelled?", "future-done?", "future?", + "gen-class", "gen-interface", "gensym", "get", "get-in", "get-method", + "get-proxy-class", "get-thread-bindings", "get-validator", "group-by", + "halt-when", "hash", "hash-combine", "hash-map", "hash-ordered-coll", + "hash-set", "hash-unordered-coll", "ident?", "identical?", "identity", + "if-let", "if-not", "if-some", "ifn?", "import", "in-ns", "inc", "inc'", + "indexed?", "init-proxy", "inst-ms", "inst-ms*", "inst?", "instance?", + "int", "int-array", "int?", "integer?", "interleave", "intern", + "interpose", "into", "into-array", "ints", "io!", "isa?", "iterate", + "iterator-seq", "juxt", "keep", "keep-indexed", "key", "keys", "keyword", + "keyword?", "last", "lazy-cat", "lazy-seq", "let", "letfn", "line-seq", + "list", "list*", "list?", "load", "load-file", "load-reader", + "load-string", "loaded-libs", "locking", "long", "long-array", "longs", + "loop", "macroexpand", "macroexpand-1", "make-array", "make-hierarchy", + "map", "map-entry?", "map-indexed", "map?", "mapcat", "mapv", "max", + "max-key", "memfn", "memoize", "merge", "merge-with", "meta", + "method-sig", "methods", "min", "min-key", "mix-collection-hash", "mod", + "munge", "name", "namespace", "namespace-munge", "nat-int?", "neg-int?", + "neg?", "newline", "next", "nfirst", "nil?", "nnext", "not", "not-any?", + "not-empty", "not-every?", "not=", "ns", "ns-aliases", "ns-imports", + "ns-interns", "ns-map", "ns-name", "ns-publics", "ns-refers", + "ns-resolve", "ns-unalias", "ns-unmap", "nth", "nthnext", "nthrest", + "num", "number?", "numerator", "object-array", "odd?", "or", "parents", + "partial", "partition", "partition-all", "partition-by", "pcalls", "peek", + "persistent!", "pmap", "pop", "pop!", "pop-thread-bindings", "pos-int?", + "pos?", "pr", "pr-str", "prefer-method", "prefers", + "primitives-classnames", "print", "print-ctor", "print-dup", + "print-method", "print-simple", "print-str", "printf", "println", + "println-str", "prn", "prn-str", "promise", "proxy", + "proxy-call-with-super", "proxy-mappings", "proxy-name", "proxy-super", + "push-thread-bindings", "pvalues", "qualified-ident?", + "qualified-keyword?", "qualified-symbol?", "quot", "rand", "rand-int", + "rand-nth", "random-sample", "range", "ratio?", "rational?", + "rationalize", "re-find", "re-groups", "re-matcher", "re-matches", + "re-pattern", "re-seq", "read", "read-line", "read-string", + "reader-conditional", "reader-conditional?", "realized?", "record?", + "reduce", "reduce-kv", "reduced", "reduced?", "reductions", "ref", + "ref-history-count", "ref-max-history", "ref-min-history", "ref-set", + "refer", "refer-clojure", "reify", "release-pending-sends", "rem", + "remove", "remove-all-methods", "remove-method", "remove-ns", + "remove-watch", "repeat", "repeatedly", "replace", "replicate", "require", + "reset!", "reset-meta!", "reset-vals!", "resolve", "rest", + "restart-agent", "resultset-seq", "reverse", "reversible?", "rseq", + "rsubseq", "run!", "satisfies?", "second", "select-keys", "send", + "send-off", "send-via", "seq", "seq?", "seqable?", "seque", "sequence", + "sequential?", "set", "set-agent-send-executor!", + "set-agent-send-off-executor!", "set-error-handler!", "set-error-mode!", + "set-validator!", "set?", "short", "short-array", "shorts", "shuffle", + "shutdown-agents", "simple-ident?", "simple-keyword?", "simple-symbol?", + "slurp", "some", "some->", "some->>", "some-fn", "some?", "sort", + "sort-by", "sorted-map", "sorted-map-by", "sorted-set", "sorted-set-by", + "sorted?", "special-symbol?", "spit", "split-at", "split-with", "str", + "string?", "struct", "struct-map", "subs", "subseq", "subvec", "supers", + "swap!", "swap-vals!", "symbol", "symbol?", "sync", "tagged-literal", + "tagged-literal?", "take", "take-last", "take-nth", "take-while", "test", + "the-ns", "thread-bound?", "time", "to-array", "to-array-2d", + "trampoline", "transduce", "transient", "tree-seq", "true?", "type", + "unchecked-add", "unchecked-add-int", "unchecked-byte", "unchecked-char", + "unchecked-dec", "unchecked-dec-int", "unchecked-divide-int", + "unchecked-double", "unchecked-float", "unchecked-inc", + "unchecked-inc-int", "unchecked-int", "unchecked-long", + "unchecked-multiply", "unchecked-multiply-int", "unchecked-negate", + "unchecked-negate-int", "unchecked-remainder-int", "unchecked-short", + "unchecked-subtract", "unchecked-subtract-int", "underive", "unquote", + "unquote-splicing", "unreduced", "unsigned-bit-shift-right", "update", + "update-in", "update-proxy", "uri?", "use", "uuid?", "val", "vals", + "var-get", "var-set", "var?", "vary-meta", "vec", "vector", "vector-of", + "vector?", "volatile!", "volatile?", "vreset!", "vswap!", "when", + "when-first", "when-let", "when-not", "when-some", "while", + "with-bindings", "with-bindings*", "with-in-str", "with-loading-context", + "with-local-vars", "with-meta", "with-open", "with-out-str", + "with-precision", "with-redefs", "with-redefs-fn", "xml-seq", "zero?", + "zipmap"]; + var haveBodyParameter = [ + "->", "->>", "as->", "binding", "bound-fn", "case", "catch", "comment", + "cond", "cond->", "cond->>", "condp", "def", "definterface", "defmethod", + "defn", "defmacro", "defprotocol", "defrecord", "defstruct", "deftype", + "do", "doseq", "dotimes", "doto", "extend", "extend-protocol", + "extend-type", "fn", "for", "future", "if", "if-let", "if-not", "if-some", + "let", "letfn", "locking", "loop", "ns", "proxy", "reify", "struct-map", + "some->", "some->>", "try", "when", "when-first", "when-let", "when-not", + "when-some", "while", "with-bindings", "with-bindings*", "with-in-str", + "with-loading-context", "with-local-vars", "with-meta", "with-open", + "with-out-str", "with-precision", "with-redefs", "with-redefs-fn"]; + + CodeMirror.registerHelper("hintWords", "clojure", + [].concat(atoms, specialForms, coreSymbols)); + + var atom = createLookupMap(atoms); + var specialForm = createLookupMap(specialForms); + var coreSymbol = createLookupMap(coreSymbols); + var hasBodyParameter = createLookupMap(haveBodyParameter); + var delimiter = /^(?:[\\\[\]\s"(),;@^`{}~]|$)/; + var numberLiteral = /^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/; + var characterLiteral = /^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/; + + // simple-namespace := /^[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*/ + // simple-symbol := /^(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)/ + // qualified-symbol := ((<.>)*)? + var qualifiedSymbol = /^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/; + + function base(stream, state) { + if (stream.eatSpace() || stream.eat(",")) return ["space", null]; + if (stream.match(numberLiteral)) return [null, "number"]; + if (stream.match(characterLiteral)) return [null, "string-2"]; + if (stream.eat(/^"/)) return (state.tokenize = inString)(stream, state); + if (stream.eat(/^[(\[{]/)) return ["open", "bracket"]; + if (stream.eat(/^[)\]}]/)) return ["close", "bracket"]; + if (stream.eat(/^;/)) {stream.skipToEnd(); return ["space", "comment"];} + if (stream.eat(/^[#'@^`~]/)) return [null, "meta"]; + + var matches = stream.match(qualifiedSymbol); + var symbol = matches && matches[0]; + + if (!symbol) { + // advance stream by at least one character so we don't get stuck. + stream.next(); + stream.eatWhile(function (c) {return !is(c, delimiter);}); + return [null, "error"]; + } + + if (symbol === "comment" && state.lastToken === "(") + return (state.tokenize = inComment)(stream, state); + if (is(symbol, atom) || symbol.charAt(0) === ":") return ["symbol", "atom"]; + if (is(symbol, specialForm) || is(symbol, coreSymbol)) return ["symbol", "keyword"]; + if (state.lastToken === "(") return ["symbol", "builtin"]; // other operator + + return ["symbol", "variable"]; + } + + function inString(stream, state) { + var escaped = false, next; + + while (next = stream.next()) { + if (next === "\"" && !escaped) {state.tokenize = base; break;} + escaped = !escaped && next === "\\"; + } + + return [null, "string"]; + } + + function inComment(stream, state) { + var parenthesisCount = 1; + var next; + + while (next = stream.next()) { + if (next === ")") parenthesisCount--; + if (next === "(") parenthesisCount++; + if (parenthesisCount === 0) { + stream.backUp(1); + state.tokenize = base; + break; + } + } + + return ["space", "comment"]; + } + + function createLookupMap(words) { + var obj = {}; + + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + + return obj; + } + + function is(value, test) { + if (test instanceof RegExp) return test.test(value); + if (test instanceof Object) return test.propertyIsEnumerable(value); + } + + return { + startState: function () { + return { + ctx: {prev: null, start: 0, indentTo: 0}, + lastToken: null, + tokenize: base + }; + }, + + token: function (stream, state) { + if (stream.sol() && (typeof state.ctx.indentTo !== "number")) + state.ctx.indentTo = state.ctx.start + 1; + + var typeStylePair = state.tokenize(stream, state); + var type = typeStylePair[0]; + var style = typeStylePair[1]; + var current = stream.current(); + + if (type !== "space") { + if (state.lastToken === "(" && state.ctx.indentTo === null) { + if (type === "symbol" && is(current, hasBodyParameter)) + state.ctx.indentTo = state.ctx.start + options.indentUnit; + else state.ctx.indentTo = "next"; + } else if (state.ctx.indentTo === "next") { + state.ctx.indentTo = stream.column(); + } + + state.lastToken = current; + } + + if (type === "open") + state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null}; + else if (type === "close") state.ctx = state.ctx.prev || state.ctx; + + return style; + }, + + indent: function (state) { + var i = state.ctx.indentTo; + + return (typeof i === "number") ? + i : + state.ctx.start + 1; + }, + + closeBrackets: {pairs: "()[]{}\"\""}, + lineComment: ";;" + }; +}); + +CodeMirror.defineMIME("text/x-clojure", "clojure"); +CodeMirror.defineMIME("text/x-clojurescript", "clojure"); +CodeMirror.defineMIME("application/edn", "clojure"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/cmake/cmake.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/cmake/cmake.js new file mode 100644 index 0000000000..496c71d1fd --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/cmake/cmake.js @@ -0,0 +1,97 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) + define(["../../lib/codemirror"], mod); + else + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("cmake", function () { + var variable_regex = /({)?[a-zA-Z0-9_]+(})?/; + + function tokenString(stream, state) { + var current, prev, found_var = false; + while (!stream.eol() && (current = stream.next()) != state.pending) { + if (current === '$' && prev != '\\' && state.pending == '"') { + found_var = true; + break; + } + prev = current; + } + if (found_var) { + stream.backUp(1); + } + if (current == state.pending) { + state.continueString = false; + } else { + state.continueString = true; + } + return "string"; + } + + function tokenize(stream, state) { + var ch = stream.next(); + + // Have we found a variable? + if (ch === '$') { + if (stream.match(variable_regex)) { + return 'variable-2'; + } + return 'variable'; + } + // Should we still be looking for the end of a string? + if (state.continueString) { + // If so, go through the loop again + stream.backUp(1); + return tokenString(stream, state); + } + // Do we just have a function on our hands? + // In 'cmake_minimum_required (VERSION 2.8.8)', 'cmake_minimum_required' is matched + if (stream.match(/(\s+)?\w+\(/) || stream.match(/(\s+)?\w+\ \(/)) { + stream.backUp(1); + return 'def'; + } + if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + // Have we found a string? + if (ch == "'" || ch == '"') { + // Store the type (single or double) + state.pending = ch; + // Perform the looping function to find the end + return tokenString(stream, state); + } + if (ch == '(' || ch == ')') { + return 'bracket'; + } + if (ch.match(/[0-9]/)) { + return 'number'; + } + stream.eatWhile(/[\w-]/); + return null; + } + return { + startState: function () { + var state = {}; + state.inDefinition = false; + state.inInclude = false; + state.continueString = false; + state.pending = false; + return state; + }, + token: function (stream, state) { + if (stream.eatSpace()) return null; + return tokenize(stream, state); + } + }; +}); + +CodeMirror.defineMIME("text/x-cmake", "cmake"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/cobol/cobol.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/cobol/cobol.js new file mode 100644 index 0000000000..a7aeafa03a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/cobol/cobol.js @@ -0,0 +1,255 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/** + * Author: Gautam Mehta + * Branched from CodeMirror's Scheme mode + */ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("cobol", function () { + var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", + ATOM = "atom", NUMBER = "number", KEYWORD = "keyword", MODTAG = "header", + COBOLLINENUM = "def", PERIOD = "link"; + function makeKeywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var atoms = makeKeywords("TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES "); + var keywords = makeKeywords( + "ACCEPT ACCESS ACQUIRE ADD ADDRESS " + + "ADVANCING AFTER ALIAS ALL ALPHABET " + + "ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED " + + "ALSO ALTER ALTERNATE AND ANY " + + "ARE AREA AREAS ARITHMETIC ASCENDING " + + "ASSIGN AT ATTRIBUTE AUTHOR AUTO " + + "AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS " + + "B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP " + + "BEFORE BELL BINARY BIT BITS " + + "BLANK BLINK BLOCK BOOLEAN BOTTOM " + + "BY CALL CANCEL CD CF " + + "CH CHARACTER CHARACTERS CLASS CLOCK-UNITS " + + "CLOSE COBOL CODE CODE-SET COL " + + "COLLATING COLUMN COMMA COMMIT COMMITMENT " + + "COMMON COMMUNICATION COMP COMP-0 COMP-1 " + + "COMP-2 COMP-3 COMP-4 COMP-5 COMP-6 " + + "COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0 " + + "COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5 " + + "COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE " + + "CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS " + + "CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS " + + "CONVERTING COPY CORR CORRESPONDING COUNT " + + "CRT CRT-UNDER CURRENCY CURRENT CURSOR " + + "DATA DATE DATE-COMPILED DATE-WRITTEN DAY " + + "DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION " + + "DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS " + + "DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE " + + "DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING " + + "DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED " + + "DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION " + + "DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1 " + + "DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6 " + + "DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION " + + "DOWN DROP DUPLICATE DUPLICATES DYNAMIC " + + "EBCDIC EGI EJECT ELSE EMI " + + "EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT. " + + "END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY " + + "END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY " + + "END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN " + + "END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT " + + "END-UNSTRING END-WRITE END-XML ENTER ENTRY " + + "ENVIRONMENT EOP EQUAL EQUALS ERASE " + + "ERROR ESI EVALUATE EVERY EXCEEDS " + + "EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL " + + "EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL " + + "FILE-STREAM FILES FILLER FINAL FIND " + + "FINISH FIRST FOOTING FOR FOREGROUND-COLOR " + + "FOREGROUND-COLOUR FORMAT FREE FROM FULL " + + "FUNCTION GENERATE GET GIVING GLOBAL " + + "GO GOBACK GREATER GROUP HEADING " + + "HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL " + + "ID IDENTIFICATION IF IN INDEX " + + "INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5 " + + "INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED " + + "INDIC INDICATE INDICATOR INDICATORS INITIAL " + + "INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT " + + "INSTALLATION INTO INVALID INVOKE IS " + + "JUST JUSTIFIED KANJI KEEP KEY " + + "LABEL LAST LD LEADING LEFT " + + "LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY " + + "LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER " + + "LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE " + + "LOCALE LOCALLY LOCK " + + "MEMBER MEMORY MERGE MESSAGE METACLASS " + + "MODE MODIFIED MODIFY MODULES MOVE " + + "MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE " + + "NEXT NO NO-ECHO NONE NOT " + + "NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER " + + "NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS " + + "OF OFF OMITTED ON ONLY " + + "OPEN OPTIONAL OR ORDER ORGANIZATION " + + "OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL " + + "PADDING PAGE PAGE-COUNTER PARSE PERFORM " + + "PF PH PIC PICTURE PLUS " + + "POINTER POSITION POSITIVE PREFIX PRESENT " + + "PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES " + + "PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID " + + "PROMPT PROTECTED PURGE QUEUE QUOTE " + + "QUOTES RANDOM RD READ READY " + + "REALM RECEIVE RECONNECT RECORD RECORD-NAME " + + "RECORDS RECURSIVE REDEFINES REEL REFERENCE " + + "REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE " + + "REMAINDER REMOVAL RENAMES REPEATED REPLACE " + + "REPLACING REPORT REPORTING REPORTS REPOSITORY " + + "REQUIRED RERUN RESERVE RESET RETAINING " + + "RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO " + + "REVERSED REWIND REWRITE RF RH " + + "RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED " + + "RUN SAME SCREEN SD SEARCH " + + "SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT " + + "SELECT SEND SENTENCE SEPARATE SEQUENCE " + + "SEQUENTIAL SET SHARED SIGN SIZE " + + "SKIP1 SKIP2 SKIP3 SORT SORT-MERGE " + + "SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL " + + "SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2 " + + "START STARTING STATUS STOP STORE " + + "STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA " + + "SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS " + + "SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT " + + "TABLE TALLYING TAPE TENANT TERMINAL " + + "TERMINATE TEST TEXT THAN THEN " + + "THROUGH THRU TIME TIMES TITLE " + + "TO TOP TRAILING TRAILING-SIGN TRANSACTION " + + "TYPE TYPEDEF UNDERLINE UNEQUAL UNIT " + + "UNSTRING UNTIL UP UPDATE UPON " + + "USAGE USAGE-MODE USE USING VALID " + + "VALIDATE VALUE VALUES VARYING VLR " + + "WAIT WHEN WHEN-COMPILED WITH WITHIN " + + "WORDS WORKING-STORAGE WRITE XML XML-CODE " + + "XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL " ); + + var builtins = makeKeywords("- * ** / + < <= = > >= "); + var tests = { + digit: /\d/, + digit_or_colon: /[\d:]/, + hex: /[0-9a-f]/i, + sign: /[+-]/, + exponent: /e/i, + keyword_char: /[^\s\(\[\;\)\]]/, + symbol: /[\w*+\-]/ + }; + function isNumber(ch, stream){ + // hex + if ( ch === '0' && stream.eat(/x/i) ) { + stream.eatWhile(tests.hex); + return true; + } + // leading sign + if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { + stream.eat(tests.sign); + ch = stream.next(); + } + if ( tests.digit.test(ch) ) { + stream.eat(ch); + stream.eatWhile(tests.digit); + if ( '.' == stream.peek()) { + stream.eat('.'); + stream.eatWhile(tests.digit); + } + if ( stream.eat(tests.exponent) ) { + stream.eat(tests.sign); + stream.eatWhile(tests.digit); + } + return true; + } + return false; + } + return { + startState: function () { + return { + indentStack: null, + indentation: 0, + mode: false + }; + }, + token: function (stream, state) { + if (state.indentStack == null && stream.sol()) { + // update indentation, but only if indentStack is empty + state.indentation = 6 ; //stream.indentation(); + } + // skip spaces + if (stream.eatSpace()) { + return null; + } + var returnType = null; + switch(state.mode){ + case "string": // multi-line string parsing mode + var next = false; + while ((next = stream.next()) != null) { + if ((next == "\"" || next == "\'") && !stream.match(/['"]/, false)) { + state.mode = false; + break; + } + } + returnType = STRING; // continue on in string mode + break; + default: // default parsing mode + var ch = stream.next(); + var col = stream.column(); + if (col >= 0 && col <= 5) { + returnType = COBOLLINENUM; + } else if (col >= 72 && col <= 79) { + stream.skipToEnd(); + returnType = MODTAG; + } else if (ch == "*" && col == 6) { // comment + stream.skipToEnd(); // rest of the line is a comment + returnType = COMMENT; + } else if (ch == "\"" || ch == "\'") { + state.mode = "string"; + returnType = STRING; + } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { + returnType = ATOM; + } else if (ch == ".") { + returnType = PERIOD; + } else if (isNumber(ch,stream)){ + returnType = NUMBER; + } else { + if (stream.current().match(tests.symbol)) { + while (col < 71) { + if (stream.eat(tests.symbol) === undefined) { + break; + } else { + col++; + } + } + } + if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { + returnType = KEYWORD; + } else if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) { + returnType = BUILTIN; + } else if (atoms && atoms.propertyIsEnumerable(stream.current().toUpperCase())) { + returnType = ATOM; + } else returnType = null; + } + } + return returnType; + }, + indent: function (state) { + if (state.indentStack == null) return state.indentation; + return state.indentStack.indent; + } + }; +}); + +CodeMirror.defineMIME("text/x-cobol", "cobol"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/coffeescript/coffeescript.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/coffeescript/coffeescript.js new file mode 100644 index 0000000000..a54e9d5ed0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/coffeescript/coffeescript.js @@ -0,0 +1,359 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/** + * Link to the project's GitHub page: + * https://github.com/pickhardt/coffeescript-codemirror-mode + */ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("coffeescript", function(conf, parserConf) { + var ERRORCLASS = "error"; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/; + var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/; + var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/; + var atProp = /^@[_A-Za-z$][_A-Za-z$0-9]*/; + + var wordOperators = wordRegexp(["and", "or", "not", + "is", "isnt", "in", + "instanceof", "typeof"]); + var indentKeywords = ["for", "while", "loop", "if", "unless", "else", + "switch", "try", "catch", "finally", "class"]; + var commonKeywords = ["break", "by", "continue", "debugger", "delete", + "do", "in", "of", "new", "return", "then", + "this", "@", "throw", "when", "until", "extends"]; + + var keywords = wordRegexp(indentKeywords.concat(commonKeywords)); + + indentKeywords = wordRegexp(indentKeywords); + + + var stringPrefixes = /^('{3}|\"{3}|['\"])/; + var regexPrefixes = /^(\/{3}|\/)/; + var commonConstants = ["Infinity", "NaN", "undefined", "null", "true", "false", "on", "off", "yes", "no"]; + var constants = wordRegexp(commonConstants); + + // Tokenizers + function tokenBase(stream, state) { + // Handle scope changes + if (stream.sol()) { + if (state.scope.align === null) state.scope.align = false; + var scopeOffset = state.scope.offset; + if (stream.eatSpace()) { + var lineOffset = stream.indentation(); + if (lineOffset > scopeOffset && state.scope.type == "coffee") { + return "indent"; + } else if (lineOffset < scopeOffset) { + return "dedent"; + } + return null; + } else { + if (scopeOffset > 0) { + dedent(stream, state); + } + } + } + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle docco title comment (single line) + if (stream.match("####")) { + stream.skipToEnd(); + return "comment"; + } + + // Handle multi line comments + if (stream.match("###")) { + state.tokenize = longComment; + return state.tokenize(stream, state); + } + + // Single line comment + if (ch === "#") { + stream.skipToEnd(); + return "comment"; + } + + // Handle number literals + if (stream.match(/^-?[0-9\.]/, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) { + floatLiteral = true; + } + if (stream.match(/^-?\d+\.\d*/)) { + floatLiteral = true; + } + if (stream.match(/^-?\.\d+/)) { + floatLiteral = true; + } + + if (floatLiteral) { + // prevent from getting extra . on 1.. + if (stream.peek() == "."){ + stream.backUp(1); + } + return "number"; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^-?0x[0-9a-f]+/i)) { + intLiteral = true; + } + // Decimal + if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) { + intLiteral = true; + } + // Zero by itself with no other piece of number. + if (stream.match(/^-?0(?![\dx])/i)) { + intLiteral = true; + } + if (intLiteral) { + return "number"; + } + } + + // Handle strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenFactory(stream.current(), false, "string"); + return state.tokenize(stream, state); + } + // Handle regex literals + if (stream.match(regexPrefixes)) { + if (stream.current() != "/" || stream.match(/^.*\//, false)) { // prevent highlight of division + state.tokenize = tokenFactory(stream.current(), true, "string-2"); + return state.tokenize(stream, state); + } else { + stream.backUp(1); + } + } + + + + // Handle operators and delimiters + if (stream.match(operators) || stream.match(wordOperators)) { + return "operator"; + } + if (stream.match(delimiters)) { + return "punctuation"; + } + + if (stream.match(constants)) { + return "atom"; + } + + if (stream.match(atProp) || state.prop && stream.match(identifiers)) { + return "property"; + } + + if (stream.match(keywords)) { + return "keyword"; + } + + if (stream.match(identifiers)) { + return "variable"; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenFactory(delimiter, singleline, outclass) { + return function(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\/\\]/); + if (stream.eat("\\")) { + stream.next(); + if (singleline && stream.eol()) { + return outclass; + } + } else if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return outclass; + } else { + stream.eat(/['"\/]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + outclass = ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return outclass; + }; + } + + function longComment(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^#]/); + if (stream.match("###")) { + state.tokenize = tokenBase; + break; + } + stream.eatWhile("#"); + } + return "comment"; + } + + function indent(stream, state, type) { + type = type || "coffee"; + var offset = 0, align = false, alignOffset = null; + for (var scope = state.scope; scope; scope = scope.prev) { + if (scope.type === "coffee" || scope.type == "}") { + offset = scope.offset + conf.indentUnit; + break; + } + } + if (type !== "coffee") { + align = null; + alignOffset = stream.column() + stream.current().length; + } else if (state.scope.align) { + state.scope.align = false; + } + state.scope = { + offset: offset, + type: type, + prev: state.scope, + align: align, + alignOffset: alignOffset + }; + } + + function dedent(stream, state) { + if (!state.scope.prev) return; + if (state.scope.type === "coffee") { + var _indent = stream.indentation(); + var matched = false; + for (var scope = state.scope; scope; scope = scope.prev) { + if (_indent === scope.offset) { + matched = true; + break; + } + } + if (!matched) { + return true; + } + while (state.scope.prev && state.scope.offset !== _indent) { + state.scope = state.scope.prev; + } + return false; + } else { + state.scope = state.scope.prev; + return false; + } + } + + function tokenLexer(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle scope changes. + if (current === "return") { + state.dedent = true; + } + if (((current === "->" || current === "=>") && stream.eol()) + || style === "indent") { + indent(stream, state); + } + var delimiter_index = "[({".indexOf(current); + if (delimiter_index !== -1) { + indent(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); + } + if (indentKeywords.exec(current)){ + indent(stream, state); + } + if (current == "then"){ + dedent(stream, state); + } + + + if (style === "dedent") { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + delimiter_index = "])}".indexOf(current); + if (delimiter_index !== -1) { + while (state.scope.type == "coffee" && state.scope.prev) + state.scope = state.scope.prev; + if (state.scope.type == current) + state.scope = state.scope.prev; + } + if (state.dedent && stream.eol()) { + if (state.scope.type == "coffee" && state.scope.prev) + state.scope = state.scope.prev; + state.dedent = false; + } + + return style; + } + + var external = { + startState: function(basecolumn) { + return { + tokenize: tokenBase, + scope: {offset:basecolumn || 0, type:"coffee", prev: null, align: false}, + prop: false, + dedent: 0 + }; + }, + + token: function(stream, state) { + var fillAlign = state.scope.align === null && state.scope; + if (fillAlign && stream.sol()) fillAlign.align = false; + + var style = tokenLexer(stream, state); + if (style && style != "comment") { + if (fillAlign) fillAlign.align = true; + state.prop = style == "punctuation" && stream.current() == "." + } + + return style; + }, + + indent: function(state, text) { + if (state.tokenize != tokenBase) return 0; + var scope = state.scope; + var closer = text && "])}".indexOf(text.charAt(0)) > -1; + if (closer) while (scope.type == "coffee" && scope.prev) scope = scope.prev; + var closes = closer && scope.type === text.charAt(0); + if (scope.align) + return scope.alignOffset - (closes ? 1 : 0); + else + return (closes ? scope.prev : scope).offset; + }, + + lineComment: "#", + fold: "indent" + }; + return external; +}); + +// IANA registered media type +// https://www.iana.org/assignments/media-types/ +CodeMirror.defineMIME("application/vnd.coffeescript", "coffeescript"); + +CodeMirror.defineMIME("text/x-coffeescript", "coffeescript"); +CodeMirror.defineMIME("text/coffeescript", "coffeescript"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/commonlisp/commonlisp.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/commonlisp/commonlisp.js new file mode 100644 index 0000000000..e8528a9cf5 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/commonlisp/commonlisp.js @@ -0,0 +1,125 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("commonlisp", function (config) { + var specialForm = /^(block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote)$/; + var assumeBody = /^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/; + var numLiteral = /^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/; + var symbol = /[^\s'`,@()\[\]";]/; + var type; + + function readSym(stream) { + var ch; + while (ch = stream.next()) { + if (ch == "\\") stream.next(); + else if (!symbol.test(ch)) { stream.backUp(1); break; } + } + return stream.current(); + } + + function base(stream, state) { + if (stream.eatSpace()) {type = "ws"; return null;} + if (stream.match(numLiteral)) return "number"; + var ch = stream.next(); + if (ch == "\\") ch = stream.next(); + + if (ch == '"') return (state.tokenize = inString)(stream, state); + else if (ch == "(") { type = "open"; return "bracket"; } + else if (ch == ")" || ch == "]") { type = "close"; return "bracket"; } + else if (ch == ";") { stream.skipToEnd(); type = "ws"; return "comment"; } + else if (/['`,@]/.test(ch)) return null; + else if (ch == "|") { + if (stream.skipTo("|")) { stream.next(); return "symbol"; } + else { stream.skipToEnd(); return "error"; } + } else if (ch == "#") { + var ch = stream.next(); + if (ch == "(") { type = "open"; return "bracket"; } + else if (/[+\-=\.']/.test(ch)) return null; + else if (/\d/.test(ch) && stream.match(/^\d*#/)) return null; + else if (ch == "|") return (state.tokenize = inComment)(stream, state); + else if (ch == ":") { readSym(stream); return "meta"; } + else if (ch == "\\") { stream.next(); readSym(stream); return "string-2" } + else return "error"; + } else { + var name = readSym(stream); + if (name == ".") return null; + type = "symbol"; + if (name == "nil" || name == "t" || name.charAt(0) == ":") return "atom"; + if (state.lastType == "open" && (specialForm.test(name) || assumeBody.test(name))) return "keyword"; + if (name.charAt(0) == "&") return "variable-2"; + return "variable"; + } + } + + function inString(stream, state) { + var escaped = false, next; + while (next = stream.next()) { + if (next == '"' && !escaped) { state.tokenize = base; break; } + escaped = !escaped && next == "\\"; + } + return "string"; + } + + function inComment(stream, state) { + var next, last; + while (next = stream.next()) { + if (next == "#" && last == "|") { state.tokenize = base; break; } + last = next; + } + type = "ws"; + return "comment"; + } + + return { + startState: function () { + return {ctx: {prev: null, start: 0, indentTo: 0}, lastType: null, tokenize: base}; + }, + + token: function (stream, state) { + if (stream.sol() && typeof state.ctx.indentTo != "number") + state.ctx.indentTo = state.ctx.start + 1; + + type = null; + var style = state.tokenize(stream, state); + if (type != "ws") { + if (state.ctx.indentTo == null) { + if (type == "symbol" && assumeBody.test(stream.current())) + state.ctx.indentTo = state.ctx.start + config.indentUnit; + else + state.ctx.indentTo = "next"; + } else if (state.ctx.indentTo == "next") { + state.ctx.indentTo = stream.column(); + } + state.lastType = type; + } + if (type == "open") state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null}; + else if (type == "close") state.ctx = state.ctx.prev || state.ctx; + return style; + }, + + indent: function (state, _textAfter) { + var i = state.ctx.indentTo; + return typeof i == "number" ? i : state.ctx.start + 1; + }, + + closeBrackets: {pairs: "()[]{}\"\""}, + lineComment: ";;", + fold: "brace-paren", + blockCommentStart: "#|", + blockCommentEnd: "|#" + }; +}); + +CodeMirror.defineMIME("text/x-common-lisp", "commonlisp"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/crystal/crystal.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/crystal/crystal.js new file mode 100644 index 0000000000..5dae5032b4 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/crystal/crystal.js @@ -0,0 +1,433 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("crystal", function(config) { + function wordRegExp(words, end) { + return new RegExp((end ? "" : "^") + "(?:" + words.join("|") + ")" + (end ? "$" : "\\b")); + } + + function chain(tokenize, stream, state) { + state.tokenize.push(tokenize); + return tokenize(stream, state); + } + + var operators = /^(?:[-+/%|&^]|\*\*?|[<>]{2})/; + var conditionalOperators = /^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/; + var indexingOperators = /^(?:\[\][?=]?)/; + var anotherOperators = /^(?:\.(?:\.{2})?|->|[?:])/; + var idents = /^[a-z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/; + var types = /^[A-Z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/; + var keywords = wordRegExp([ + "abstract", "alias", "as", "asm", "begin", "break", "case", "class", "def", "do", + "else", "elsif", "end", "ensure", "enum", "extend", "for", "fun", "if", + "include", "instance_sizeof", "lib", "macro", "module", "next", "of", "out", "pointerof", + "private", "protected", "rescue", "return", "require", "select", "sizeof", "struct", + "super", "then", "type", "typeof", "uninitialized", "union", "unless", "until", "when", "while", "with", + "yield", "__DIR__", "__END_LINE__", "__FILE__", "__LINE__" + ]); + var atomWords = wordRegExp(["true", "false", "nil", "self"]); + var indentKeywordsArray = [ + "def", "fun", "macro", + "class", "module", "struct", "lib", "enum", "union", + "do", "for" + ]; + var indentKeywords = wordRegExp(indentKeywordsArray); + var indentExpressionKeywordsArray = ["if", "unless", "case", "while", "until", "begin", "then"]; + var indentExpressionKeywords = wordRegExp(indentExpressionKeywordsArray); + var dedentKeywordsArray = ["end", "else", "elsif", "rescue", "ensure"]; + var dedentKeywords = wordRegExp(dedentKeywordsArray); + var dedentPunctualsArray = ["\\)", "\\}", "\\]"]; + var dedentPunctuals = new RegExp("^(?:" + dedentPunctualsArray.join("|") + ")$"); + var nextTokenizer = { + "def": tokenFollowIdent, "fun": tokenFollowIdent, "macro": tokenMacroDef, + "class": tokenFollowType, "module": tokenFollowType, "struct": tokenFollowType, + "lib": tokenFollowType, "enum": tokenFollowType, "union": tokenFollowType + }; + var matching = {"[": "]", "{": "}", "(": ")", "<": ">"}; + + function tokenBase(stream, state) { + if (stream.eatSpace()) { + return null; + } + + // Macros + if (state.lastToken != "\\" && stream.match("{%", false)) { + return chain(tokenMacro("%", "%"), stream, state); + } + + if (state.lastToken != "\\" && stream.match("{{", false)) { + return chain(tokenMacro("{", "}"), stream, state); + } + + // Comments + if (stream.peek() == "#") { + stream.skipToEnd(); + return "comment"; + } + + // Variables and keywords + var matched; + if (stream.match(idents)) { + stream.eat(/[?!]/); + + matched = stream.current(); + if (stream.eat(":")) { + return "atom"; + } else if (state.lastToken == ".") { + return "property"; + } else if (keywords.test(matched)) { + if (indentKeywords.test(matched)) { + if (!(matched == "fun" && state.blocks.indexOf("lib") >= 0) && !(matched == "def" && state.lastToken == "abstract")) { + state.blocks.push(matched); + state.currentIndent += 1; + } + } else if ((state.lastStyle == "operator" || !state.lastStyle) && indentExpressionKeywords.test(matched)) { + state.blocks.push(matched); + state.currentIndent += 1; + } else if (matched == "end") { + state.blocks.pop(); + state.currentIndent -= 1; + } + + if (nextTokenizer.hasOwnProperty(matched)) { + state.tokenize.push(nextTokenizer[matched]); + } + + return "keyword"; + } else if (atomWords.test(matched)) { + return "atom"; + } + + return "variable"; + } + + // Class variables and instance variables + // or attributes + if (stream.eat("@")) { + if (stream.peek() == "[") { + return chain(tokenNest("[", "]", "meta"), stream, state); + } + + stream.eat("@"); + stream.match(idents) || stream.match(types); + return "variable-2"; + } + + // Constants and types + if (stream.match(types)) { + return "tag"; + } + + // Symbols or ':' operator + if (stream.eat(":")) { + if (stream.eat("\"")) { + return chain(tokenQuote("\"", "atom", false), stream, state); + } else if (stream.match(idents) || stream.match(types) || + stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators)) { + return "atom"; + } + stream.eat(":"); + return "operator"; + } + + // Strings + if (stream.eat("\"")) { + return chain(tokenQuote("\"", "string", true), stream, state); + } + + // Strings or regexps or macro variables or '%' operator + if (stream.peek() == "%") { + var style = "string"; + var embed = true; + var delim; + + if (stream.match("%r")) { + // Regexps + style = "string-2"; + delim = stream.next(); + } else if (stream.match("%w")) { + embed = false; + delim = stream.next(); + } else if (stream.match("%q")) { + embed = false; + delim = stream.next(); + } else { + if(delim = stream.match(/^%([^\w\s=])/)) { + delim = delim[1]; + } else if (stream.match(/^%[a-zA-Z_\u009F-\uFFFF][\w\u009F-\uFFFF]*/)) { + // Macro variables + return "meta"; + } else if (stream.eat('%')) { + // '%' operator + return "operator"; + } + } + + if (matching.hasOwnProperty(delim)) { + delim = matching[delim]; + } + return chain(tokenQuote(delim, style, embed), stream, state); + } + + // Here Docs + if (matched = stream.match(/^<<-('?)([A-Z]\w*)\1/)) { + return chain(tokenHereDoc(matched[2], !matched[1]), stream, state) + } + + // Characters + if (stream.eat("'")) { + stream.match(/^(?:[^']|\\(?:[befnrtv0'"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\{[0-9a-fA-F]{1,6}\})))/); + stream.eat("'"); + return "atom"; + } + + // Numbers + if (stream.eat("0")) { + if (stream.eat("x")) { + stream.match(/^[0-9a-fA-F_]+/); + } else if (stream.eat("o")) { + stream.match(/^[0-7_]+/); + } else if (stream.eat("b")) { + stream.match(/^[01_]+/); + } + return "number"; + } + + if (stream.eat(/^\d/)) { + stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+-]?\d+)?/); + return "number"; + } + + // Operators + if (stream.match(operators)) { + stream.eat("="); // Operators can follow assign symbol. + return "operator"; + } + + if (stream.match(conditionalOperators) || stream.match(anotherOperators)) { + return "operator"; + } + + // Parens and braces + if (matched = stream.match(/[({[]/, false)) { + matched = matched[0]; + return chain(tokenNest(matched, matching[matched], null), stream, state); + } + + // Escapes + if (stream.eat("\\")) { + stream.next(); + return "meta"; + } + + stream.next(); + return null; + } + + function tokenNest(begin, end, style, started) { + return function (stream, state) { + if (!started && stream.match(begin)) { + state.tokenize[state.tokenize.length - 1] = tokenNest(begin, end, style, true); + state.currentIndent += 1; + return style; + } + + var nextStyle = tokenBase(stream, state); + if (stream.current() === end) { + state.tokenize.pop(); + state.currentIndent -= 1; + nextStyle = style; + } + + return nextStyle; + }; + } + + function tokenMacro(begin, end, started) { + return function (stream, state) { + if (!started && stream.match("{" + begin)) { + state.currentIndent += 1; + state.tokenize[state.tokenize.length - 1] = tokenMacro(begin, end, true); + return "meta"; + } + + if (stream.match(end + "}")) { + state.currentIndent -= 1; + state.tokenize.pop(); + return "meta"; + } + + return tokenBase(stream, state); + }; + } + + function tokenMacroDef(stream, state) { + if (stream.eatSpace()) { + return null; + } + + var matched; + if (matched = stream.match(idents)) { + if (matched == "def") { + return "keyword"; + } + stream.eat(/[?!]/); + } + + state.tokenize.pop(); + return "def"; + } + + function tokenFollowIdent(stream, state) { + if (stream.eatSpace()) { + return null; + } + + if (stream.match(idents)) { + stream.eat(/[!?]/); + } else { + stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators); + } + state.tokenize.pop(); + return "def"; + } + + function tokenFollowType(stream, state) { + if (stream.eatSpace()) { + return null; + } + + stream.match(types); + state.tokenize.pop(); + return "def"; + } + + function tokenQuote(end, style, embed) { + return function (stream, state) { + var escaped = false; + + while (stream.peek()) { + if (!escaped) { + if (stream.match("{%", false)) { + state.tokenize.push(tokenMacro("%", "%")); + return style; + } + + if (stream.match("{{", false)) { + state.tokenize.push(tokenMacro("{", "}")); + return style; + } + + if (embed && stream.match("#{", false)) { + state.tokenize.push(tokenNest("#{", "}", "meta")); + return style; + } + + var ch = stream.next(); + + if (ch == end) { + state.tokenize.pop(); + return style; + } + + escaped = embed && ch == "\\"; + } else { + stream.next(); + escaped = false; + } + } + + return style; + }; + } + + function tokenHereDoc(phrase, embed) { + return function (stream, state) { + if (stream.sol()) { + stream.eatSpace() + if (stream.match(phrase)) { + state.tokenize.pop(); + return "string"; + } + } + + var escaped = false; + while (stream.peek()) { + if (!escaped) { + if (stream.match("{%", false)) { + state.tokenize.push(tokenMacro("%", "%")); + return "string"; + } + + if (stream.match("{{", false)) { + state.tokenize.push(tokenMacro("{", "}")); + return "string"; + } + + if (embed && stream.match("#{", false)) { + state.tokenize.push(tokenNest("#{", "}", "meta")); + return "string"; + } + + escaped = embed && stream.next() == "\\"; + } else { + stream.next(); + escaped = false; + } + } + + return "string"; + } + } + + return { + startState: function () { + return { + tokenize: [tokenBase], + currentIndent: 0, + lastToken: null, + lastStyle: null, + blocks: [] + }; + }, + + token: function (stream, state) { + var style = state.tokenize[state.tokenize.length - 1](stream, state); + var token = stream.current(); + + if (style && style != "comment") { + state.lastToken = token; + state.lastStyle = style; + } + + return style; + }, + + indent: function (state, textAfter) { + textAfter = textAfter.replace(/^\s*(?:\{%)?\s*|\s*(?:%\})?\s*$/g, ""); + + if (dedentKeywords.test(textAfter) || dedentPunctuals.test(textAfter)) { + return config.indentUnit * (state.currentIndent - 1); + } + + return config.indentUnit * state.currentIndent; + }, + + fold: "indent", + electricInput: wordRegExp(dedentPunctualsArray.concat(dedentKeywordsArray), true), + lineComment: '#' + }; + }); + + CodeMirror.defineMIME("text/x-crystal", "crystal"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/css/css.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/css/css.js new file mode 100644 index 0000000000..503c48c261 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/css/css.js @@ -0,0 +1,866 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("css", function(config, parserConfig) { + var inline = parserConfig.inline + if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); + + var indentUnit = config.indentUnit, + tokenHooks = parserConfig.tokenHooks, + documentTypes = parserConfig.documentTypes || {}, + mediaTypes = parserConfig.mediaTypes || {}, + mediaFeatures = parserConfig.mediaFeatures || {}, + mediaValueKeywords = parserConfig.mediaValueKeywords || {}, + propertyKeywords = parserConfig.propertyKeywords || {}, + nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, + fontProperties = parserConfig.fontProperties || {}, + counterDescriptors = parserConfig.counterDescriptors || {}, + colorKeywords = parserConfig.colorKeywords || {}, + valueKeywords = parserConfig.valueKeywords || {}, + allowNested = parserConfig.allowNested, + lineComment = parserConfig.lineComment, + supportsAtComponent = parserConfig.supportsAtComponent === true, + highlightNonStandardPropertyKeywords = config.highlightNonStandardPropertyKeywords !== false; + + var type, override; + function ret(style, tp) { type = tp; return style; } + + // Tokenizers + + function tokenBase(stream, state) { + var ch = stream.next(); + if (tokenHooks[ch]) { + var result = tokenHooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == "@") { + stream.eatWhile(/[\w\\\-]/); + return ret("def", stream.current()); + } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { + return ret(null, "compare"); + } else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "#") { + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "hash"); + } else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (ch === "-") { + if (/[\d.]/.test(stream.peek())) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (stream.match(/^-[\w\\\-]*/)) { + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ret("variable-2", "variable-definition"); + return ret("variable-2", "variable"); + } else if (stream.match(/^\w+-/)) { + return ret("meta", "meta"); + } + } else if (/[,+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { + return ret("qualifier", "qualifier"); + } else if (/[:;{}\[\]\(\)]/.test(ch)) { + return ret(null, ch); + } else if (stream.match(/^[\w-.]+(?=\()/)) { + if (/^(url(-prefix)?|domain|regexp)$/i.test(stream.current())) { + state.tokenize = tokenParenthesized; + } + return ret("variable callee", "variable"); + } else if (/[\w\\\-]/.test(ch)) { + stream.eatWhile(/[\w\\\-]/); + return ret("property", "word"); + } else { + return ret(null, null); + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + if (quote == ")") stream.backUp(1); + break; + } + escaped = !escaped && ch == "\\"; + } + if (ch == quote || !escaped && quote != ")") state.tokenize = null; + return ret("string", "string"); + }; + } + + function tokenParenthesized(stream, state) { + stream.next(); // Must be '(' + if (!stream.match(/^\s*[\"\')]/, false)) + state.tokenize = tokenString(")"); + else + state.tokenize = null; + return ret(null, "("); + } + + // Context management + + function Context(type, indent, prev) { + this.type = type; + this.indent = indent; + this.prev = prev; + } + + function pushContext(state, stream, type, indent) { + state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); + return type; + } + + function popContext(state) { + if (state.context.prev) + state.context = state.context.prev; + return state.context.type; + } + + function pass(type, stream, state) { + return states[state.context.type](type, stream, state); + } + function popAndPass(type, stream, state, n) { + for (var i = n || 1; i > 0; i--) + state.context = state.context.prev; + return pass(type, stream, state); + } + + // Parser + + function wordAsValue(stream) { + var word = stream.current().toLowerCase(); + if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "variable"; + } + + var states = {}; + + states.top = function(type, stream, state) { + if (type == "{") { + return pushContext(state, stream, "block"); + } else if (type == "}" && state.context.prev) { + return popContext(state); + } else if (supportsAtComponent && /@component/i.test(type)) { + return pushContext(state, stream, "atComponentBlock"); + } else if (/^@(-moz-)?document$/i.test(type)) { + return pushContext(state, stream, "documentTypes"); + } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) { + return pushContext(state, stream, "atBlock"); + } else if (/^@(font-face|counter-style)/i.test(type)) { + state.stateArg = type; + return "restricted_atBlock_before"; + } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) { + return "keyframes"; + } else if (type && type.charAt(0) == "@") { + return pushContext(state, stream, "at"); + } else if (type == "hash") { + override = "builtin"; + } else if (type == "word") { + override = "tag"; + } else if (type == "variable-definition") { + return "maybeprop"; + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } else if (type == ":") { + return "pseudo"; + } else if (allowNested && type == "(") { + return pushContext(state, stream, "parens"); + } + return state.context.type; + }; + + states.block = function(type, stream, state) { + if (type == "word") { + var word = stream.current().toLowerCase(); + if (propertyKeywords.hasOwnProperty(word)) { + override = "property"; + return "maybeprop"; + } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { + override = highlightNonStandardPropertyKeywords ? "string-2" : "property"; + return "maybeprop"; + } else if (allowNested) { + override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; + return "block"; + } else { + override += " error"; + return "maybeprop"; + } + } else if (type == "meta") { + return "block"; + } else if (!allowNested && (type == "hash" || type == "qualifier")) { + override = "error"; + return "block"; + } else { + return states.top(type, stream, state); + } + }; + + states.maybeprop = function(type, stream, state) { + if (type == ":") return pushContext(state, stream, "prop"); + return pass(type, stream, state); + }; + + states.prop = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); + if (type == "}" || type == "{") return popAndPass(type, stream, state); + if (type == "(") return pushContext(state, stream, "parens"); + + if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) { + override += " error"; + } else if (type == "word") { + wordAsValue(stream); + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } + return "prop"; + }; + + states.propBlock = function(type, _stream, state) { + if (type == "}") return popContext(state); + if (type == "word") { override = "property"; return "maybeprop"; } + return state.context.type; + }; + + states.parens = function(type, stream, state) { + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == ")") return popContext(state); + if (type == "(") return pushContext(state, stream, "parens"); + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + if (type == "word") wordAsValue(stream); + return "parens"; + }; + + states.pseudo = function(type, stream, state) { + if (type == "meta") return "pseudo"; + + if (type == "word") { + override = "variable-3"; + return state.context.type; + } + return pass(type, stream, state); + }; + + states.documentTypes = function(type, stream, state) { + if (type == "word" && documentTypes.hasOwnProperty(stream.current())) { + override = "tag"; + return state.context.type; + } else { + return states.atBlock(type, stream, state); + } + }; + + states.atBlock = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "atBlock_parens"); + if (type == "}" || type == ";") return popAndPass(type, stream, state); + if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); + + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + + if (type == "word") { + var word = stream.current().toLowerCase(); + if (word == "only" || word == "not" || word == "and" || word == "or") + override = "keyword"; + else if (mediaTypes.hasOwnProperty(word)) + override = "attribute"; + else if (mediaFeatures.hasOwnProperty(word)) + override = "property"; + else if (mediaValueKeywords.hasOwnProperty(word)) + override = "keyword"; + else if (propertyKeywords.hasOwnProperty(word)) + override = "property"; + else if (nonStandardPropertyKeywords.hasOwnProperty(word)) + override = highlightNonStandardPropertyKeywords ? "string-2" : "property"; + else if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "error"; + } + return state.context.type; + }; + + states.atComponentBlock = function(type, stream, state) { + if (type == "}") + return popAndPass(type, stream, state); + if (type == "{") + return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); + if (type == "word") + override = "error"; + return state.context.type; + }; + + states.atBlock_parens = function(type, stream, state) { + if (type == ")") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); + return states.atBlock(type, stream, state); + }; + + states.restricted_atBlock_before = function(type, stream, state) { + if (type == "{") + return pushContext(state, stream, "restricted_atBlock"); + if (type == "word" && state.stateArg == "@counter-style") { + override = "variable"; + return "restricted_atBlock_before"; + } + return pass(type, stream, state); + }; + + states.restricted_atBlock = function(type, stream, state) { + if (type == "}") { + state.stateArg = null; + return popContext(state); + } + if (type == "word") { + if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || + (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) + override = "error"; + else + override = "property"; + return "maybeprop"; + } + return "restricted_atBlock"; + }; + + states.keyframes = function(type, stream, state) { + if (type == "word") { override = "variable"; return "keyframes"; } + if (type == "{") return pushContext(state, stream, "top"); + return pass(type, stream, state); + }; + + states.at = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == "word") override = "tag"; + else if (type == "hash") override = "builtin"; + return "at"; + }; + + states.interpolation = function(type, stream, state) { + if (type == "}") return popContext(state); + if (type == "{" || type == ";") return popAndPass(type, stream, state); + if (type == "word") override = "variable"; + else if (type != "variable" && type != "(" && type != ")") override = "error"; + return "interpolation"; + }; + + return { + startState: function(base) { + return {tokenize: null, + state: inline ? "block" : "top", + stateArg: null, + context: new Context(inline ? "block" : "top", base || 0, null)}; + }, + + token: function(stream, state) { + if (!state.tokenize && stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style && typeof style == "object") { + type = style[1]; + style = style[0]; + } + override = style; + if (type != "comment") + state.state = states[state.state](type, stream, state); + return override; + }, + + indent: function(state, textAfter) { + var cx = state.context, ch = textAfter && textAfter.charAt(0); + var indent = cx.indent; + if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; + if (cx.prev) { + if (ch == "}" && (cx.type == "block" || cx.type == "top" || + cx.type == "interpolation" || cx.type == "restricted_atBlock")) { + // Resume indentation from parent context. + cx = cx.prev; + indent = cx.indent; + } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || + ch == "{" && (cx.type == "at" || cx.type == "atBlock")) { + // Dedent relative to current context. + indent = Math.max(0, cx.indent - indentUnit); + } + } + return indent; + }, + + electricChars: "}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + blockCommentContinue: " * ", + lineComment: lineComment, + fold: "brace" + }; +}); + + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i].toLowerCase()] = true; + } + return keys; + } + + var documentTypes_ = [ + "domain", "regexp", "url", "url-prefix" + ], documentTypes = keySet(documentTypes_); + + var mediaTypes_ = [ + "all", "aural", "braille", "handheld", "print", "projection", "screen", + "tty", "tv", "embossed" + ], mediaTypes = keySet(mediaTypes_); + + var mediaFeatures_ = [ + "width", "min-width", "max-width", "height", "min-height", "max-height", + "device-width", "min-device-width", "max-device-width", "device-height", + "min-device-height", "max-device-height", "aspect-ratio", + "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", + "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", + "max-color", "color-index", "min-color-index", "max-color-index", + "monochrome", "min-monochrome", "max-monochrome", "resolution", + "min-resolution", "max-resolution", "scan", "grid", "orientation", + "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", + "pointer", "any-pointer", "hover", "any-hover", "prefers-color-scheme", + "dynamic-range", "video-dynamic-range" + ], mediaFeatures = keySet(mediaFeatures_); + + var mediaValueKeywords_ = [ + "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", + "interlace", "progressive", + "dark", "light", + "standard", "high" + ], mediaValueKeywords = keySet(mediaValueKeywords_); + + var propertyKeywords_ = [ + "align-content", "align-items", "align-self", "alignment-adjust", + "alignment-baseline", "all", "anchor-point", "animation", "animation-delay", + "animation-direction", "animation-duration", "animation-fill-mode", + "animation-iteration-count", "animation-name", "animation-play-state", + "animation-timing-function", "appearance", "azimuth", "backdrop-filter", + "backface-visibility", "background", "background-attachment", + "background-blend-mode", "background-clip", "background-color", + "background-image", "background-origin", "background-position", + "background-position-x", "background-position-y", "background-repeat", + "background-size", "baseline-shift", "binding", "bleed", "block-size", + "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", + "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", + "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", + "border-collapse", "border-color", "border-image", "border-image-outset", + "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-left", "border-left-color", "border-left-style", + "border-left-width", "border-radius", "border-right", "border-right-color", + "border-right-style", "border-right-width", "border-spacing", "border-style", + "border-top", "border-top-color", "border-top-left-radius", + "border-top-right-radius", "border-top-style", "border-top-width", + "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", + "break-after", "break-before", "break-inside", "caption-side", "caret-color", + "clear", "clip", "color", "color-profile", "column-count", "column-fill", + "column-gap", "column-rule", "column-rule-color", "column-rule-style", + "column-rule-width", "column-span", "column-width", "columns", "contain", + "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", + "cue-before", "cursor", "direction", "display", "dominant-baseline", + "drop-initial-after-adjust", "drop-initial-after-align", + "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", + "drop-initial-value", "elevation", "empty-cells", "fit", "fit-content", "fit-position", + "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", + "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", + "font", "font-family", "font-feature-settings", "font-kerning", + "font-language-override", "font-optical-sizing", "font-size", + "font-size-adjust", "font-stretch", "font-style", "font-synthesis", + "font-variant", "font-variant-alternates", "font-variant-caps", + "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", + "font-variant-position", "font-variation-settings", "font-weight", "gap", + "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows", + "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start", + "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start", + "grid-template", "grid-template-areas", "grid-template-columns", + "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", + "image-orientation", "image-rendering", "image-resolution", "inline-box-align", + "inset", "inset-block", "inset-block-end", "inset-block-start", "inset-inline", + "inset-inline-end", "inset-inline-start", "isolation", "justify-content", + "justify-items", "justify-self", "left", "letter-spacing", "line-break", + "line-height", "line-height-step", "line-stacking", "line-stacking-ruby", + "line-stacking-shift", "line-stacking-strategy", "list-style", + "list-style-image", "list-style-position", "list-style-type", "margin", + "margin-bottom", "margin-left", "margin-right", "margin-top", "marks", + "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", + "marquee-style", "mask-clip", "mask-composite", "mask-image", "mask-mode", + "mask-origin", "mask-position", "mask-repeat", "mask-size","mask-type", + "max-block-size", "max-height", "max-inline-size", + "max-width", "min-block-size", "min-height", "min-inline-size", "min-width", + "mix-blend-mode", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", + "nav-up", "object-fit", "object-position", "offset", "offset-anchor", + "offset-distance", "offset-path", "offset-position", "offset-rotate", + "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", + "outline-style", "outline-width", "overflow", "overflow-style", + "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", + "padding-left", "padding-right", "padding-top", "page", "page-break-after", + "page-break-before", "page-break-inside", "page-policy", "pause", + "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", + "pitch-range", "place-content", "place-items", "place-self", "play-during", + "position", "presentation-level", "punctuation-trim", "quotes", + "region-break-after", "region-break-before", "region-break-inside", + "region-fragment", "rendering-intent", "resize", "rest", "rest-after", + "rest-before", "richness", "right", "rotate", "rotation", "rotation-point", + "row-gap", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", + "scale", "scroll-behavior", "scroll-margin", "scroll-margin-block", + "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom", + "scroll-margin-inline", "scroll-margin-inline-end", + "scroll-margin-inline-start", "scroll-margin-left", "scroll-margin-right", + "scroll-margin-top", "scroll-padding", "scroll-padding-block", + "scroll-padding-block-end", "scroll-padding-block-start", + "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end", + "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right", + "scroll-padding-top", "scroll-snap-align", "scroll-snap-type", + "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", + "size", "speak", "speak-as", "speak-header", "speak-numeral", + "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", + "table-layout", "target", "target-name", "target-new", "target-position", + "text-align", "text-align-last", "text-combine-upright", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-skip", + "text-decoration-skip-ink", "text-decoration-style", "text-emphasis", + "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", + "text-height", "text-indent", "text-justify", "text-orientation", + "text-outline", "text-overflow", "text-rendering", "text-shadow", + "text-size-adjust", "text-space-collapse", "text-transform", + "text-underline-position", "text-wrap", "top", "touch-action", "transform", "transform-origin", + "transform-style", "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "translate", + "unicode-bidi", "user-select", "vertical-align", "visibility", "voice-balance", + "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", + "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", + "will-change", "word-break", "word-spacing", "word-wrap", "writing-mode", "z-index", + // SVG-specific + "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", + "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", + "color-interpolation", "color-interpolation-filters", + "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", + "marker", "marker-end", "marker-mid", "marker-start", "paint-order", "shape-rendering", "stroke", + "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", + "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", + "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", + "glyph-orientation-vertical", "text-anchor", "writing-mode", + ], propertyKeywords = keySet(propertyKeywords_); + + var nonStandardPropertyKeywords_ = [ + "accent-color", "aspect-ratio", "border-block", "border-block-color", "border-block-end", + "border-block-end-color", "border-block-end-style", "border-block-end-width", + "border-block-start", "border-block-start-color", "border-block-start-style", + "border-block-start-width", "border-block-style", "border-block-width", + "border-inline", "border-inline-color", "border-inline-end", + "border-inline-end-color", "border-inline-end-style", + "border-inline-end-width", "border-inline-start", "border-inline-start-color", + "border-inline-start-style", "border-inline-start-width", + "border-inline-style", "border-inline-width", "content-visibility", "margin-block", + "margin-block-end", "margin-block-start", "margin-inline", "margin-inline-end", + "margin-inline-start", "overflow-anchor", "overscroll-behavior", "padding-block", "padding-block-end", + "padding-block-start", "padding-inline", "padding-inline-end", + "padding-inline-start", "scroll-snap-stop", "scrollbar-3d-light-color", + "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", + "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", + "scrollbar-track-color", "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", "shape-inside", "zoom" + ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); + + var fontProperties_ = [ + "font-display", "font-family", "src", "unicode-range", "font-variant", + "font-feature-settings", "font-stretch", "font-weight", "font-style" + ], fontProperties = keySet(fontProperties_); + + var counterDescriptors_ = [ + "additive-symbols", "fallback", "negative", "pad", "prefix", "range", + "speak-as", "suffix", "symbols", "system" + ], counterDescriptors = keySet(counterDescriptors_); + + var colorKeywords_ = [ + "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", + "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", + "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", + "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", + "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", + "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", + "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", + "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", + "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", + "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", + "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", + "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", + "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", + "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", + "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", + "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", + "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", + "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", + "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", + "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", + "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", + "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", + "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", + "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", + "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", + "whitesmoke", "yellow", "yellowgreen" + ], colorKeywords = keySet(colorKeywords_); + + var valueKeywords_ = [ + "above", "absolute", "activeborder", "additive", "activecaption", "afar", + "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", + "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", + "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", + "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "binary", + "bengali", "blink", "block", "block-axis", "blur", "bold", "bolder", "border", "border-box", + "both", "bottom", "break", "break-all", "break-word", "brightness", "bullets", "button", "button-bevel", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", + "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", + "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", + "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", + "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", + "compact", "condensed", "conic-gradient", "contain", "content", "contents", + "content-box", "context-menu", "continuous", "contrast", "copy", "counter", "counters", "cover", "crop", + "cross", "crosshair", "cubic-bezier", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", + "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", + "destination-in", "destination-out", "destination-over", "devanagari", "difference", + "disc", "discard", "disclosure-closed", "disclosure-open", "document", + "dot-dash", "dot-dot-dash", + "dotted", "double", "down", "drop-shadow", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", + "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", + "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", + "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", + "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", + "ethiopic-halehame-gez", "ethiopic-halehame-om-et", + "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", + "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", + "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", + "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", + "forwards", "from", "geometricPrecision", "georgian", "grayscale", "graytext", "grid", "groove", + "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", + "help", "hidden", "hide", "higher", "highlight", "highlighttext", + "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "hue-rotate", "icon", "ignore", + "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", + "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", + "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", + "italic", "japanese-formal", "japanese-informal", "justify", "kannada", + "katakana", "katakana-iroha", "keep-all", "khmer", + "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", + "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", + "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", + "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", + "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", + "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "manipulation", "match", "matrix", "matrix3d", + "media-controls-background", "media-current-time-display", + "media-fullscreen-button", "media-mute-button", "media-play-button", + "media-return-to-realtime-button", "media-rewind-button", + "media-seek-back-button", "media-seek-forward-button", "media-slider", + "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", + "media-volume-slider-container", "media-volume-sliderthumb", "medium", + "menu", "menulist", "menulist-button", "menulist-text", + "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", + "mix", "mongolian", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "myanmar", "n-resize", + "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", + "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", + "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote", + "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", + "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", + "painted", "page", "paused", "persian", "perspective", "pinch-zoom", "plus-darker", "plus-lighter", + "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", + "progress", "push-button", "radial-gradient", "radio", "read-only", + "read-write", "read-write-plaintext-only", "rectangle", "region", + "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", + "repeating-conic-gradient", "repeat-x", "repeat-y", "reset", "reverse", + "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", + "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", + "s-resize", "sans-serif", "saturate", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", + "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", + "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end", + "semi-condensed", "semi-expanded", "separate", "sepia", "serif", "show", "sidama", + "simp-chinese-formal", "simp-chinese-informal", "single", + "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", + "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", + "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", + "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", + "square-button", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub", + "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", + "table-caption", "table-cell", "table-column", "table-column-group", + "table-footer-group", "table-header-group", "table-row", "table-row-group", + "tamil", + "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", + "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", + "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", + "trad-chinese-formal", "trad-chinese-informal", "transform", + "translate", "translate3d", "translateX", "translateY", "translateZ", + "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up", + "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", + "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", + "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted", + "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", + "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", + "xx-large", "xx-small" + ], valueKeywords = keySet(valueKeywords_); + + var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_) + .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_) + .concat(valueKeywords_); + CodeMirror.registerHelper("hintWords", "css", allWords); + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + CodeMirror.defineMIME("text/css", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css" + }); + + CodeMirror.defineMIME("text/x-scss", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + lineComment: "//", + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + ":": function(stream) { + if (stream.match(/^\s*\{/, false)) + return [null, null] + return false; + }, + "$": function(stream) { + stream.match(/^[\w-]+/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "#": function(stream) { + if (!stream.eat("{")) return false; + return [null, "interpolation"]; + } + }, + name: "css", + helperType: "scss" + }); + + CodeMirror.defineMIME("text/x-less", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + lineComment: "//", + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + "@": function(stream) { + if (stream.eat("{")) return [null, "interpolation"]; + if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false; + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "&": function() { + return ["atom", "atom"]; + } + }, + name: "css", + helperType: "less" + }); + + CodeMirror.defineMIME("text/x-gss", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + supportsAtComponent: true, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css", + helperType: "gss" + }); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/cypher/cypher.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/cypher/cypher.js new file mode 100644 index 0000000000..6203d59984 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/cypher/cypher.js @@ -0,0 +1,152 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// By the Neo4j Team and contributors. +// https://github.com/neo4j-contrib/CodeMirror + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + var wordRegexp = function(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + }; + + CodeMirror.defineMode("cypher", function(config) { + var tokenBase = function(stream/*, state*/) { + curPunc = null + var ch = stream.next(); + if (ch ==='"') { + stream.match(/^[^"]*"/); + return "string"; + } + if (ch === "'") { + stream.match(/^[^']*'/); + return "string"; + } + if (/[{}\(\),\.;\[\]]/.test(ch)) { + curPunc = ch; + return "node"; + } else if (ch === "/" && stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } else if (operatorChars.test(ch)) { + stream.eatWhile(operatorChars); + return null; + } else { + stream.eatWhile(/[_\w\d]/); + if (stream.eat(":")) { + stream.eatWhile(/[\w\d_\-]/); + return "atom"; + } + var word = stream.current(); + if (funcs.test(word)) return "builtin"; + if (preds.test(word)) return "def"; + if (keywords.test(word) || systemKeywords.test(word)) return "keyword"; + return "variable"; + } + }; + var pushContext = function(state, type, col) { + return state.context = { + prev: state.context, + indent: state.indent, + col: col, + type: type + }; + }; + var popContext = function(state) { + state.indent = state.context.indent; + return state.context = state.context.prev; + }; + var indentUnit = config.indentUnit; + var curPunc; + var funcs = wordRegexp(["abs", "acos", "allShortestPaths", "asin", "atan", "atan2", "avg", "ceil", "coalesce", "collect", "cos", "cot", "count", "degrees", "e", "endnode", "exp", "extract", "filter", "floor", "haversin", "head", "id", "keys", "labels", "last", "left", "length", "log", "log10", "lower", "ltrim", "max", "min", "node", "nodes", "percentileCont", "percentileDisc", "pi", "radians", "rand", "range", "reduce", "rel", "relationship", "relationships", "replace", "reverse", "right", "round", "rtrim", "shortestPath", "sign", "sin", "size", "split", "sqrt", "startnode", "stdev", "stdevp", "str", "substring", "sum", "tail", "tan", "timestamp", "toFloat", "toInt", "toString", "trim", "type", "upper"]); + var preds = wordRegexp(["all", "and", "any", "contains", "exists", "has", "in", "none", "not", "or", "single", "xor"]); + var keywords = wordRegexp(["as", "asc", "ascending", "assert", "by", "case", "commit", "constraint", "create", "csv", "cypher", "delete", "desc", "descending", "detach", "distinct", "drop", "else", "end", "ends", "explain", "false", "fieldterminator", "foreach", "from", "headers", "in", "index", "is", "join", "limit", "load", "match", "merge", "null", "on", "optional", "order", "periodic", "profile", "remove", "return", "scan", "set", "skip", "start", "starts", "then", "true", "union", "unique", "unwind", "using", "when", "where", "with", "call", "yield"]); + var systemKeywords = wordRegexp(["access", "active", "assign", "all", "alter", "as", "catalog", "change", "copy", "create", "constraint", "constraints", "current", "database", "databases", "dbms", "default", "deny", "drop", "element", "elements", "exists", "from", "grant", "graph", "graphs", "if", "index", "indexes", "label", "labels", "management", "match", "name", "names", "new", "node", "nodes", "not", "of", "on", "or", "password", "populated", "privileges", "property", "read", "relationship", "relationships", "remove", "replace", "required", "revoke", "role", "roles", "set", "show", "start", "status", "stop", "suspended", "to", "traverse", "type", "types", "user", "users", "with", "write"]); + var operatorChars = /[*+\-<>=&|~%^]/; + + return { + startState: function(/*base*/) { + return { + tokenize: tokenBase, + context: null, + indent: 0, + col: 0 + }; + }, + token: function(stream, state) { + if (stream.sol()) { + if (state.context && (state.context.align == null)) { + state.context.align = false; + } + state.indent = stream.indentation(); + } + if (stream.eatSpace()) { + return null; + } + var style = state.tokenize(stream, state); + if (style !== "comment" && state.context && (state.context.align == null) && state.context.type !== "pattern") { + state.context.align = true; + } + if (curPunc === "(") { + pushContext(state, ")", stream.column()); + } else if (curPunc === "[") { + pushContext(state, "]", stream.column()); + } else if (curPunc === "{") { + pushContext(state, "}", stream.column()); + } else if (/[\]\}\)]/.test(curPunc)) { + while (state.context && state.context.type === "pattern") { + popContext(state); + } + if (state.context && curPunc === state.context.type) { + popContext(state); + } + } else if (curPunc === "." && state.context && state.context.type === "pattern") { + popContext(state); + } else if (/atom|string|variable/.test(style) && state.context) { + if (/[\}\]]/.test(state.context.type)) { + pushContext(state, "pattern", stream.column()); + } else if (state.context.type === "pattern" && !state.context.align) { + state.context.align = true; + state.context.col = stream.column(); + } + } + return style; + }, + indent: function(state, textAfter) { + var firstChar = textAfter && textAfter.charAt(0); + var context = state.context; + if (/[\]\}]/.test(firstChar)) { + while (context && context.type === "pattern") { + context = context.prev; + } + } + var closing = context && firstChar === context.type; + if (!context) return 0; + if (context.type === "keywords") return CodeMirror.commands.newlineAndIndent; + if (context.align) return context.col + (closing ? 0 : 1); + return context.indent + (closing ? 0 : indentUnit); + } + }; + }); + + CodeMirror.modeExtensions["cypher"] = { + autoFormatLineBreaks: function(text) { + var i, lines, reProcessedPortion; + var lines = text.split("\n"); + var reProcessedPortion = /\s+\b(return|where|order by|match|with|skip|limit|create|delete|set)\b\s/g; + for (var i = 0; i < lines.length; i++) + lines[i] = lines[i].replace(reProcessedPortion, " \n$1 ").trim(); + return lines.join("\n"); + } + }; + + CodeMirror.defineMIME("application/x-cypher-query", "cypher"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/d/d.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/d/d.js new file mode 100644 index 0000000000..efab570633 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/d/d.js @@ -0,0 +1,223 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("d", function(config, parserConfig) { + var indentUnit = config.indentUnit, + statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, + keywords = parserConfig.keywords || {}, + builtin = parserConfig.builtin || {}, + blockKeywords = parserConfig.blockKeywords || {}, + atoms = parserConfig.atoms || {}, + hooks = parserConfig.hooks || {}, + multiLineStrings = parserConfig.multiLineStrings; + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'" || ch == "`") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("+")) { + state.tokenize = tokenNestedComment; + return tokenNestedComment(stream, state); + } + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "keyword"; + } + if (builtin.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "builtin"; + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenNestedComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "+"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement") popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + blockCommentContinue: " * ", + lineComment: "//", + fold: "brace" + }; +}); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var blockKeywords = "body catch class do else enum for foreach foreach_reverse if in interface mixin " + + "out scope struct switch try union unittest version while with"; + + CodeMirror.defineMIME("text/x-d", { + name: "d", + keywords: words("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue " + + "debug default delegate delete deprecated export extern final finally function goto immutable " + + "import inout invariant is lazy macro module new nothrow override package pragma private " + + "protected public pure ref return shared short static super synchronized template this " + + "throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters " + + blockKeywords), + blockKeywords: words(blockKeywords), + builtin: words("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte " + + "ucent uint ulong ushort wchar wstring void size_t sizediff_t"), + atoms: words("exit failure success true false null"), + hooks: { + "@": function(stream, _state) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dart/dart.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dart/dart.js new file mode 100644 index 0000000000..fe64517a5e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dart/dart.js @@ -0,0 +1,166 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../clike/clike")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../clike/clike"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var keywords = ("this super static final const abstract class extends external factory " + + "implements mixin get native set typedef with enum throw rethrow " + + "assert break case continue default in return new deferred async await covariant " + + "try catch finally do else for if switch while import library export " + + "part of show hide is as extension on yield late required").split(" "); + var blockKeywords = "try catch finally do else for if switch while".split(" "); + var atoms = "true false null".split(" "); + var builtins = "void bool num int double dynamic var String Null Never".split(" "); + + function set(words) { + var obj = {}; + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + function pushInterpolationStack(state) { + (state.interpolationStack || (state.interpolationStack = [])).push(state.tokenize); + } + + function popInterpolationStack(state) { + return (state.interpolationStack || (state.interpolationStack = [])).pop(); + } + + function sizeInterpolationStack(state) { + return state.interpolationStack ? state.interpolationStack.length : 0; + } + + CodeMirror.defineMIME("application/dart", { + name: "clike", + keywords: set(keywords), + blockKeywords: set(blockKeywords), + builtin: set(builtins), + atoms: set(atoms), + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_\.]/); + return "meta"; + }, + + // custom string handling to deal with triple-quoted strings and string interpolation + "'": function(stream, state) { + return tokenString("'", stream, state, false); + }, + "\"": function(stream, state) { + return tokenString("\"", stream, state, false); + }, + "r": function(stream, state) { + var peek = stream.peek(); + if (peek == "'" || peek == "\"") { + return tokenString(stream.next(), stream, state, true); + } + return false; + }, + + "}": function(_stream, state) { + // "}" is end of interpolation, if interpolation stack is non-empty + if (sizeInterpolationStack(state) > 0) { + state.tokenize = popInterpolationStack(state); + return null; + } + return false; + }, + + "/": function(stream, state) { + if (!stream.eat("*")) return false + state.tokenize = tokenNestedComment(1) + return state.tokenize(stream, state) + }, + token: function(stream, _, style) { + if (style == "variable") { + // Assume uppercase symbols are classes using variable-2 + var isUpper = RegExp('^[_$]*[A-Z][a-zA-Z0-9_$]*$','g'); + if (isUpper.test(stream.current())) { + return 'variable-2'; + } + } + } + } + }); + + function tokenString(quote, stream, state, raw) { + var tripleQuoted = false; + if (stream.eat(quote)) { + if (stream.eat(quote)) tripleQuoted = true; + else return "string"; //empty string + } + function tokenStringHelper(stream, state) { + var escaped = false; + while (!stream.eol()) { + if (!raw && !escaped && stream.peek() == "$") { + pushInterpolationStack(state); + state.tokenize = tokenInterpolation; + return "string"; + } + var next = stream.next(); + if (next == quote && !escaped && (!tripleQuoted || stream.match(quote + quote))) { + state.tokenize = null; + break; + } + escaped = !raw && !escaped && next == "\\"; + } + return "string"; + } + state.tokenize = tokenStringHelper; + return tokenStringHelper(stream, state); + } + + function tokenInterpolation(stream, state) { + stream.eat("$"); + if (stream.eat("{")) { + // let clike handle the content of ${...}, + // we take over again when "}" appears (see hooks). + state.tokenize = null; + } else { + state.tokenize = tokenInterpolationIdentifier; + } + return null; + } + + function tokenInterpolationIdentifier(stream, state) { + stream.eatWhile(/[\w_]/); + state.tokenize = popInterpolationStack(state); + return "variable"; + } + + function tokenNestedComment(depth) { + return function (stream, state) { + var ch + while (ch = stream.next()) { + if (ch == "*" && stream.eat("/")) { + if (depth == 1) { + state.tokenize = null + break + } else { + state.tokenize = tokenNestedComment(depth - 1) + return state.tokenize(stream, state) + } + } else if (ch == "/" && stream.eat("*")) { + state.tokenize = tokenNestedComment(depth + 1) + return state.tokenize(stream, state) + } + } + return "comment" + } + } + + CodeMirror.registerHelper("hintWords", "application/dart", keywords.concat(atoms).concat(builtins)); + + // This is needed to make loading through meta.js work. + CodeMirror.defineMode("dart", function(conf) { + return CodeMirror.getMode(conf, "application/dart"); + }, "clike"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/diff/diff.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/diff/diff.js new file mode 100644 index 0000000000..a30fd37a50 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/diff/diff.js @@ -0,0 +1,47 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("diff", function() { + + var TOKEN_NAMES = { + '+': 'positive', + '-': 'negative', + '@': 'meta' + }; + + return { + token: function(stream) { + var tw_pos = stream.string.search(/[\t ]+?$/); + + if (!stream.sol() || tw_pos === 0) { + stream.skipToEnd(); + return ("error " + ( + TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); + } + + var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); + + if (tw_pos === -1) { + stream.skipToEnd(); + } else { + stream.pos = tw_pos; + } + + return token_name; + } + }; +}); + +CodeMirror.defineMIME("text/x-diff", "diff"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/django/django.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/django/django.js new file mode 100644 index 0000000000..07be123986 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/django/django.js @@ -0,0 +1,356 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), + require("../../addon/mode/overlay")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", + "../../addon/mode/overlay"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("django:inner", function() { + var keywords = ["block", "endblock", "for", "endfor", "true", "false", "filter", "endfilter", + "loop", "none", "self", "super", "if", "elif", "endif", "as", "else", "import", + "with", "endwith", "without", "context", "ifequal", "endifequal", "ifnotequal", + "endifnotequal", "extends", "include", "load", "comment", "endcomment", + "empty", "url", "static", "trans", "blocktrans", "endblocktrans", "now", + "regroup", "lorem", "ifchanged", "endifchanged", "firstof", "debug", "cycle", + "csrf_token", "autoescape", "endautoescape", "spaceless", "endspaceless", + "ssi", "templatetag", "verbatim", "endverbatim", "widthratio"], + filters = ["add", "addslashes", "capfirst", "center", "cut", "date", + "default", "default_if_none", "dictsort", + "dictsortreversed", "divisibleby", "escape", "escapejs", + "filesizeformat", "first", "floatformat", "force_escape", + "get_digit", "iriencode", "join", "last", "length", + "length_is", "linebreaks", "linebreaksbr", "linenumbers", + "ljust", "lower", "make_list", "phone2numeric", "pluralize", + "pprint", "random", "removetags", "rjust", "safe", + "safeseq", "slice", "slugify", "stringformat", "striptags", + "time", "timesince", "timeuntil", "title", "truncatechars", + "truncatechars_html", "truncatewords", "truncatewords_html", + "unordered_list", "upper", "urlencode", "urlize", + "urlizetrunc", "wordcount", "wordwrap", "yesno"], + operators = ["==", "!=", "<", ">", "<=", ">="], + wordOperators = ["in", "not", "or", "and"]; + + keywords = new RegExp("^\\b(" + keywords.join("|") + ")\\b"); + filters = new RegExp("^\\b(" + filters.join("|") + ")\\b"); + operators = new RegExp("^\\b(" + operators.join("|") + ")\\b"); + wordOperators = new RegExp("^\\b(" + wordOperators.join("|") + ")\\b"); + + // We have to return "null" instead of null, in order to avoid string + // styling as the default, when using Django templates inside HTML + // element attributes + function tokenBase (stream, state) { + // Attempt to identify a variable, template or comment tag respectively + if (stream.match("{{")) { + state.tokenize = inVariable; + return "tag"; + } else if (stream.match("{%")) { + state.tokenize = inTag; + return "tag"; + } else if (stream.match("{#")) { + state.tokenize = inComment; + return "comment"; + } + + // Ignore completely any stream series that do not match the + // Django template opening tags. + while (stream.next() != null && !stream.match(/\{[{%#]/, false)) {} + return null; + } + + // A string can be included in either single or double quotes (this is + // the delimiter). Mark everything as a string until the start delimiter + // occurs again. + function inString (delimiter, previousTokenizer) { + return function (stream, state) { + if (!state.escapeNext && stream.eat(delimiter)) { + state.tokenize = previousTokenizer; + } else { + if (state.escapeNext) { + state.escapeNext = false; + } + + var ch = stream.next(); + + // Take into account the backslash for escaping characters, such as + // the string delimiter. + if (ch == "\\") { + state.escapeNext = true; + } + } + + return "string"; + }; + } + + // Apply Django template variable syntax highlighting + function inVariable (stream, state) { + // Attempt to match a dot that precedes a property + if (state.waitDot) { + state.waitDot = false; + + if (stream.peek() != ".") { + return "null"; + } + + // Dot followed by a non-word character should be considered an error. + if (stream.match(/\.\W+/)) { + return "error"; + } else if (stream.eat(".")) { + state.waitProperty = true; + return "null"; + } else { + throw Error ("Unexpected error while waiting for property."); + } + } + + // Attempt to match a pipe that precedes a filter + if (state.waitPipe) { + state.waitPipe = false; + + if (stream.peek() != "|") { + return "null"; + } + + // Pipe followed by a non-word character should be considered an error. + if (stream.match(/\.\W+/)) { + return "error"; + } else if (stream.eat("|")) { + state.waitFilter = true; + return "null"; + } else { + throw Error ("Unexpected error while waiting for filter."); + } + } + + // Highlight properties + if (state.waitProperty) { + state.waitProperty = false; + if (stream.match(/\b(\w+)\b/)) { + state.waitDot = true; // A property can be followed by another property + state.waitPipe = true; // A property can be followed by a filter + return "property"; + } + } + + // Highlight filters + if (state.waitFilter) { + state.waitFilter = false; + if (stream.match(filters)) { + return "variable-2"; + } + } + + // Ignore all white spaces + if (stream.eatSpace()) { + state.waitProperty = false; + return "null"; + } + + // Identify numbers + if (stream.match(/\b\d+(\.\d+)?\b/)) { + return "number"; + } + + // Identify strings + if (stream.match("'")) { + state.tokenize = inString("'", state.tokenize); + return "string"; + } else if (stream.match('"')) { + state.tokenize = inString('"', state.tokenize); + return "string"; + } + + // Attempt to find the variable + if (stream.match(/\b(\w+)\b/) && !state.foundVariable) { + state.waitDot = true; + state.waitPipe = true; // A property can be followed by a filter + return "variable"; + } + + // If found closing tag reset + if (stream.match("}}")) { + state.waitProperty = null; + state.waitFilter = null; + state.waitDot = null; + state.waitPipe = null; + state.tokenize = tokenBase; + return "tag"; + } + + // If nothing was found, advance to the next character + stream.next(); + return "null"; + } + + function inTag (stream, state) { + // Attempt to match a dot that precedes a property + if (state.waitDot) { + state.waitDot = false; + + if (stream.peek() != ".") { + return "null"; + } + + // Dot followed by a non-word character should be considered an error. + if (stream.match(/\.\W+/)) { + return "error"; + } else if (stream.eat(".")) { + state.waitProperty = true; + return "null"; + } else { + throw Error ("Unexpected error while waiting for property."); + } + } + + // Attempt to match a pipe that precedes a filter + if (state.waitPipe) { + state.waitPipe = false; + + if (stream.peek() != "|") { + return "null"; + } + + // Pipe followed by a non-word character should be considered an error. + if (stream.match(/\.\W+/)) { + return "error"; + } else if (stream.eat("|")) { + state.waitFilter = true; + return "null"; + } else { + throw Error ("Unexpected error while waiting for filter."); + } + } + + // Highlight properties + if (state.waitProperty) { + state.waitProperty = false; + if (stream.match(/\b(\w+)\b/)) { + state.waitDot = true; // A property can be followed by another property + state.waitPipe = true; // A property can be followed by a filter + return "property"; + } + } + + // Highlight filters + if (state.waitFilter) { + state.waitFilter = false; + if (stream.match(filters)) { + return "variable-2"; + } + } + + // Ignore all white spaces + if (stream.eatSpace()) { + state.waitProperty = false; + return "null"; + } + + // Identify numbers + if (stream.match(/\b\d+(\.\d+)?\b/)) { + return "number"; + } + + // Identify strings + if (stream.match("'")) { + state.tokenize = inString("'", state.tokenize); + return "string"; + } else if (stream.match('"')) { + state.tokenize = inString('"', state.tokenize); + return "string"; + } + + // Attempt to match an operator + if (stream.match(operators)) { + return "operator"; + } + + // Attempt to match a word operator + if (stream.match(wordOperators)) { + return "keyword"; + } + + // Attempt to match a keyword + var keywordMatch = stream.match(keywords); + if (keywordMatch) { + if (keywordMatch[0] == "comment") { + state.blockCommentTag = true; + } + return "keyword"; + } + + // Attempt to match a variable + if (stream.match(/\b(\w+)\b/)) { + state.waitDot = true; + state.waitPipe = true; // A property can be followed by a filter + return "variable"; + } + + // If found closing tag reset + if (stream.match("%}")) { + state.waitProperty = null; + state.waitFilter = null; + state.waitDot = null; + state.waitPipe = null; + // If the tag that closes is a block comment tag, we want to mark the + // following code as comment, until the tag closes. + if (state.blockCommentTag) { + state.blockCommentTag = false; // Release the "lock" + state.tokenize = inBlockComment; + } else { + state.tokenize = tokenBase; + } + return "tag"; + } + + // If nothing was found, advance to the next character + stream.next(); + return "null"; + } + + // Mark everything as comment inside the tag and the tag itself. + function inComment (stream, state) { + if (stream.match(/^.*?#\}/)) state.tokenize = tokenBase + else stream.skipToEnd() + return "comment"; + } + + // Mark everything as a comment until the `blockcomment` tag closes. + function inBlockComment (stream, state) { + if (stream.match(/\{%\s*endcomment\s*%\}/, false)) { + state.tokenize = inTag; + stream.match("{%"); + return "tag"; + } else { + stream.next(); + return "comment"; + } + } + + return { + startState: function () { + return {tokenize: tokenBase}; + }, + token: function (stream, state) { + return state.tokenize(stream, state); + }, + blockCommentStart: "{% comment %}", + blockCommentEnd: "{% endcomment %}" + }; + }); + + CodeMirror.defineMode("django", function(config) { + var htmlBase = CodeMirror.getMode(config, "text/html"); + var djangoInner = CodeMirror.getMode(config, "django:inner"); + return CodeMirror.overlayMode(htmlBase, djangoInner); + }); + + CodeMirror.defineMIME("text/x-django", "django"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dockerfile/dockerfile.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dockerfile/dockerfile.js new file mode 100644 index 0000000000..983170f519 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dockerfile/dockerfile.js @@ -0,0 +1,211 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var from = "from"; + var fromRegex = new RegExp("^(\\s*)\\b(" + from + ")\\b", "i"); + + var shells = ["run", "cmd", "entrypoint", "shell"]; + var shellsAsArrayRegex = new RegExp("^(\\s*)(" + shells.join('|') + ")(\\s+\\[)", "i"); + + var expose = "expose"; + var exposeRegex = new RegExp("^(\\s*)(" + expose + ")(\\s+)", "i"); + + var others = [ + "arg", "from", "maintainer", "label", "env", + "add", "copy", "volume", "user", + "workdir", "onbuild", "stopsignal", "healthcheck", "shell" + ]; + + // Collect all Dockerfile directives + var instructions = [from, expose].concat(shells).concat(others), + instructionRegex = "(" + instructions.join('|') + ")", + instructionOnlyLine = new RegExp("^(\\s*)" + instructionRegex + "(\\s*)(#.*)?$", "i"), + instructionWithArguments = new RegExp("^(\\s*)" + instructionRegex + "(\\s+)", "i"); + + CodeMirror.defineSimpleMode("dockerfile", { + start: [ + // Block comment: This is a line starting with a comment + { + regex: /^\s*#.*$/, + sol: true, + token: "comment" + }, + { + regex: fromRegex, + token: [null, "keyword"], + sol: true, + next: "from" + }, + // Highlight an instruction without any arguments (for convenience) + { + regex: instructionOnlyLine, + token: [null, "keyword", null, "error"], + sol: true + }, + { + regex: shellsAsArrayRegex, + token: [null, "keyword", null], + sol: true, + next: "array" + }, + { + regex: exposeRegex, + token: [null, "keyword", null], + sol: true, + next: "expose" + }, + // Highlight an instruction followed by arguments + { + regex: instructionWithArguments, + token: [null, "keyword", null], + sol: true, + next: "arguments" + }, + { + regex: /./, + token: null + } + ], + from: [ + { + regex: /\s*$/, + token: null, + next: "start" + }, + { + // Line comment without instruction arguments is an error + regex: /(\s*)(#.*)$/, + token: [null, "error"], + next: "start" + }, + { + regex: /(\s*\S+\s+)(as)/i, + token: [null, "keyword"], + next: "start" + }, + // Fail safe return to start + { + token: null, + next: "start" + } + ], + single: [ + { + regex: /(?:[^\\']|\\.)/, + token: "string" + }, + { + regex: /'/, + token: "string", + pop: true + } + ], + double: [ + { + regex: /(?:[^\\"]|\\.)/, + token: "string" + }, + { + regex: /"/, + token: "string", + pop: true + } + ], + array: [ + { + regex: /\]/, + token: null, + next: "start" + }, + { + regex: /"(?:[^\\"]|\\.)*"?/, + token: "string" + } + ], + expose: [ + { + regex: /\d+$/, + token: "number", + next: "start" + }, + { + regex: /[^\d]+$/, + token: null, + next: "start" + }, + { + regex: /\d+/, + token: "number" + }, + { + regex: /[^\d]+/, + token: null + }, + // Fail safe return to start + { + token: null, + next: "start" + } + ], + arguments: [ + { + regex: /^\s*#.*$/, + sol: true, + token: "comment" + }, + { + regex: /"(?:[^\\"]|\\.)*"?$/, + token: "string", + next: "start" + }, + { + regex: /"/, + token: "string", + push: "double" + }, + { + regex: /'(?:[^\\']|\\.)*'?$/, + token: "string", + next: "start" + }, + { + regex: /'/, + token: "string", + push: "single" + }, + { + regex: /[^#"']+[\\`]$/, + token: null + }, + { + regex: /[^#"']+$/, + token: null, + next: "start" + }, + { + regex: /[^#"']+/, + token: null + }, + // Fail safe return to start + { + token: null, + next: "start" + } + ], + meta: { + lineComment: "#" + } + }); + + CodeMirror.defineMIME("text/x-dockerfile", "dockerfile"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dtd/dtd.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dtd/dtd.js new file mode 100644 index 0000000000..1bff91cbab --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dtd/dtd.js @@ -0,0 +1,142 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/* + DTD mode + Ported to CodeMirror by Peter Kroon + Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues + GitHub: @peterkroon +*/ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("dtd", function(config) { + var indentUnit = config.indentUnit, type; + function ret(style, tp) {type = tp; return style;} + + function tokenBase(stream, state) { + var ch = stream.next(); + + if (ch == "<" && stream.eat("!") ) { + if (stream.eatWhile(/[\-]/)) { + state.tokenize = tokenSGMLComment; + return tokenSGMLComment(stream, state); + } else if (stream.eatWhile(/[\w]/)) return ret("keyword", "doindent"); + } else if (ch == "<" && stream.eat("?")) { //xml declaration + state.tokenize = inBlock("meta", "?>"); + return ret("meta", ch); + } else if (ch == "#" && stream.eatWhile(/[\w]/)) return ret("atom", "tag"); + else if (ch == "|") return ret("keyword", "separator"); + else if (ch.match(/[\(\)\[\]\-\.,\+\?>]/)) return ret(null, ch);//if(ch === ">") return ret(null, "endtag"); else + else if (ch.match(/[\[\]]/)) return ret("rule", ch); + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (stream.eatWhile(/[a-zA-Z\?\+\d]/)) { + var sc = stream.current(); + if( sc.substr(sc.length-1,sc.length).match(/\?|\+/) !== null )stream.backUp(1); + return ret("tag", "tag"); + } else if (ch == "%" || ch == "*" ) return ret("number", "number"); + else { + stream.eatWhile(/[\w\\\-_%.{,]/); + return ret(null, null); + } + } + + function tokenSGMLComment(stream, state) { + var dashes = 0, ch; + while ((ch = stream.next()) != null) { + if (dashes >= 2 && ch == ">") { + state.tokenize = tokenBase; + break; + } + dashes = (ch == "-") ? dashes + 1 : 0; + } + return ret("comment", "comment"); + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return ret("string", "tag"); + }; + } + + function inBlock(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = tokenBase; + break; + } + stream.next(); + } + return style; + }; + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + stack: []}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + + var context = state.stack[state.stack.length-1]; + if (stream.current() == "[" || type === "doindent" || type == "[") state.stack.push("rule"); + else if (type === "endtag") state.stack[state.stack.length-1] = "endtag"; + else if (stream.current() == "]" || type == "]" || (type == ">" && context == "rule")) state.stack.pop(); + else if (type == "[") state.stack.push("["); + return style; + }, + + indent: function(state, textAfter) { + var n = state.stack.length; + + if( textAfter.charAt(0) === ']' )n--; + else if(textAfter.substr(textAfter.length-1, textAfter.length) === ">"){ + if(textAfter.substr(0,1) === "<") {} + else if( type == "doindent" && textAfter.length > 1 ) {} + else if( type == "doindent")n--; + else if( type == ">" && textAfter.length > 1) {} + else if( type == "tag" && textAfter !== ">") {} + else if( type == "tag" && state.stack[state.stack.length-1] == "rule")n--; + else if( type == "tag")n++; + else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule" && type === ">")n--; + else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule") {} + else if( textAfter.substr(0,1) !== "<" && textAfter.substr(0,1) === ">" )n=n-1; + else if( textAfter === ">") {} + else n=n-1; + //over rule them all + if(type == null || type == "]")n--; + } + + return state.baseIndent + n * indentUnit; + }, + + electricChars: "]>" + }; +}); + +CodeMirror.defineMIME("application/xml-dtd", "dtd"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dylan/dylan.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dylan/dylan.js new file mode 100644 index 0000000000..6725edccc0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/dylan/dylan.js @@ -0,0 +1,352 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +function forEach(arr, f) { + for (var i = 0; i < arr.length; i++) f(arr[i], i) +} +function some(arr, f) { + for (var i = 0; i < arr.length; i++) if (f(arr[i], i)) return true + return false +} + +CodeMirror.defineMode("dylan", function(_config) { + // Words + var words = { + // Words that introduce unnamed definitions like "define interface" + unnamedDefinition: ["interface"], + + // Words that introduce simple named definitions like "define library" + namedDefinition: ["module", "library", "macro", + "C-struct", "C-union", + "C-function", "C-callable-wrapper" + ], + + // Words that introduce type definitions like "define class". + // These are also parameterized like "define method" and are + // appended to otherParameterizedDefinitionWords + typeParameterizedDefinition: ["class", "C-subtype", "C-mapped-subtype"], + + // Words that introduce trickier definitions like "define method". + // These require special definitions to be added to startExpressions + otherParameterizedDefinition: ["method", "function", + "C-variable", "C-address" + ], + + // Words that introduce module constant definitions. + // These must also be simple definitions and are + // appended to otherSimpleDefinitionWords + constantSimpleDefinition: ["constant"], + + // Words that introduce module variable definitions. + // These must also be simple definitions and are + // appended to otherSimpleDefinitionWords + variableSimpleDefinition: ["variable"], + + // Other words that introduce simple definitions + // (without implicit bodies). + otherSimpleDefinition: ["generic", "domain", + "C-pointer-type", + "table" + ], + + // Words that begin statements with implicit bodies. + statement: ["if", "block", "begin", "method", "case", + "for", "select", "when", "unless", "until", + "while", "iterate", "profiling", "dynamic-bind" + ], + + // Patterns that act as separators in compound statements. + // This may include any general pattern that must be indented + // specially. + separator: ["finally", "exception", "cleanup", "else", + "elseif", "afterwards" + ], + + // Keywords that do not require special indentation handling, + // but which should be highlighted + other: ["above", "below", "by", "from", "handler", "in", + "instance", "let", "local", "otherwise", "slot", + "subclass", "then", "to", "keyed-by", "virtual" + ], + + // Condition signaling function calls + signalingCalls: ["signal", "error", "cerror", + "break", "check-type", "abort" + ] + }; + + words["otherDefinition"] = + words["unnamedDefinition"] + .concat(words["namedDefinition"]) + .concat(words["otherParameterizedDefinition"]); + + words["definition"] = + words["typeParameterizedDefinition"] + .concat(words["otherDefinition"]); + + words["parameterizedDefinition"] = + words["typeParameterizedDefinition"] + .concat(words["otherParameterizedDefinition"]); + + words["simpleDefinition"] = + words["constantSimpleDefinition"] + .concat(words["variableSimpleDefinition"]) + .concat(words["otherSimpleDefinition"]); + + words["keyword"] = + words["statement"] + .concat(words["separator"]) + .concat(words["other"]); + + // Patterns + var symbolPattern = "[-_a-zA-Z?!*@<>$%]+"; + var symbol = new RegExp("^" + symbolPattern); + var patterns = { + // Symbols with special syntax + symbolKeyword: symbolPattern + ":", + symbolClass: "<" + symbolPattern + ">", + symbolGlobal: "\\*" + symbolPattern + "\\*", + symbolConstant: "\\$" + symbolPattern + }; + var patternStyles = { + symbolKeyword: "atom", + symbolClass: "tag", + symbolGlobal: "variable-2", + symbolConstant: "variable-3" + }; + + // Compile all patterns to regular expressions + for (var patternName in patterns) + if (patterns.hasOwnProperty(patternName)) + patterns[patternName] = new RegExp("^" + patterns[patternName]); + + // Names beginning "with-" and "without-" are commonly + // used as statement macro + patterns["keyword"] = [/^with(?:out)?-[-_a-zA-Z?!*@<>$%]+/]; + + var styles = {}; + styles["keyword"] = "keyword"; + styles["definition"] = "def"; + styles["simpleDefinition"] = "def"; + styles["signalingCalls"] = "builtin"; + + // protected words lookup table + var wordLookup = {}; + var styleLookup = {}; + + forEach([ + "keyword", + "definition", + "simpleDefinition", + "signalingCalls" + ], function(type) { + forEach(words[type], function(word) { + wordLookup[word] = type; + styleLookup[word] = styles[type]; + }); + }); + + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function tokenBase(stream, state) { + // String + var ch = stream.peek(); + if (ch == "'" || ch == '"') { + stream.next(); + return chain(stream, state, tokenString(ch, "string")); + } + // Comment + else if (ch == "/") { + stream.next(); + if (stream.eat("*")) { + return chain(stream, state, tokenComment); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + stream.backUp(1); + } + // Decimal + else if (/[+\-\d\.]/.test(ch)) { + if (stream.match(/^[+-]?[0-9]*\.[0-9]*([esdx][+-]?[0-9]+)?/i) || + stream.match(/^[+-]?[0-9]+([esdx][+-]?[0-9]+)/i) || + stream.match(/^[+-]?\d+/)) { + return "number"; + } + } + // Hash + else if (ch == "#") { + stream.next(); + // Symbol with string syntax + ch = stream.peek(); + if (ch == '"') { + stream.next(); + return chain(stream, state, tokenString('"', "string")); + } + // Binary number + else if (ch == "b") { + stream.next(); + stream.eatWhile(/[01]/); + return "number"; + } + // Hex number + else if (ch == "x") { + stream.next(); + stream.eatWhile(/[\da-f]/i); + return "number"; + } + // Octal number + else if (ch == "o") { + stream.next(); + stream.eatWhile(/[0-7]/); + return "number"; + } + // Token concatenation in macros + else if (ch == '#') { + stream.next(); + return "punctuation"; + } + // Sequence literals + else if ((ch == '[') || (ch == '(')) { + stream.next(); + return "bracket"; + // Hash symbol + } else if (stream.match(/f|t|all-keys|include|key|next|rest/i)) { + return "atom"; + } else { + stream.eatWhile(/[-a-zA-Z]/); + return "error"; + } + } else if (ch == "~") { + stream.next(); + ch = stream.peek(); + if (ch == "=") { + stream.next(); + ch = stream.peek(); + if (ch == "=") { + stream.next(); + return "operator"; + } + return "operator"; + } + return "operator"; + } else if (ch == ":") { + stream.next(); + ch = stream.peek(); + if (ch == "=") { + stream.next(); + return "operator"; + } else if (ch == ":") { + stream.next(); + return "punctuation"; + } + } else if ("[](){}".indexOf(ch) != -1) { + stream.next(); + return "bracket"; + } else if (".,".indexOf(ch) != -1) { + stream.next(); + return "punctuation"; + } else if (stream.match("end")) { + return "keyword"; + } + for (var name in patterns) { + if (patterns.hasOwnProperty(name)) { + var pattern = patterns[name]; + if ((pattern instanceof Array && some(pattern, function(p) { + return stream.match(p); + })) || stream.match(pattern)) + return patternStyles[name]; + } + } + if (/[+\-*\/^=<>&|]/.test(ch)) { + stream.next(); + return "operator"; + } + if (stream.match("define")) { + return "def"; + } else { + stream.eatWhile(/[\w\-]/); + // Keyword + if (wordLookup.hasOwnProperty(stream.current())) { + return styleLookup[stream.current()]; + } else if (stream.current().match(symbol)) { + return "variable"; + } else { + stream.next(); + return "variable-2"; + } + } + } + + function tokenComment(stream, state) { + var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; + while ((ch = stream.next())) { + if (ch == "/" && maybeEnd) { + if (nestedCount > 0) { + nestedCount--; + } else { + state.tokenize = tokenBase; + break; + } + } else if (ch == "*" && maybeNested) { + nestedCount++; + } + maybeEnd = (ch == "*"); + maybeNested = (ch == "/"); + } + return "comment"; + } + + function tokenString(quote, style) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end || !escaped) { + state.tokenize = tokenBase; + } + return style; + }; + } + + // Interface + return { + startState: function() { + return { + tokenize: tokenBase, + currentIndent: 0 + }; + }, + token: function(stream, state) { + if (stream.eatSpace()) + return null; + var style = state.tokenize(stream, state); + return style; + }, + blockCommentStart: "/*", + blockCommentEnd: "*/" + }; +}); + +CodeMirror.defineMIME("text/x-dylan", "dylan"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ebnf/ebnf.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ebnf/ebnf.js new file mode 100644 index 0000000000..d8fb3f3a2f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ebnf/ebnf.js @@ -0,0 +1,195 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("ebnf", function (config) { + var commentType = {slash: 0, parenthesis: 1}; + var stateType = {comment: 0, _string: 1, characterClass: 2}; + var bracesMode = null; + + if (config.bracesMode) + bracesMode = CodeMirror.getMode(config, config.bracesMode); + + return { + startState: function () { + return { + stringType: null, + commentType: null, + braced: 0, + lhs: true, + localState: null, + stack: [], + inDefinition: false + }; + }, + token: function (stream, state) { + if (!stream) return; + + //check for state changes + if (state.stack.length === 0) { + //strings + if ((stream.peek() == '"') || (stream.peek() == "'")) { + state.stringType = stream.peek(); + stream.next(); // Skip quote + state.stack.unshift(stateType._string); + } else if (stream.match('/*')) { //comments starting with /* + state.stack.unshift(stateType.comment); + state.commentType = commentType.slash; + } else if (stream.match('(*')) { //comments starting with (* + state.stack.unshift(stateType.comment); + state.commentType = commentType.parenthesis; + } + } + + //return state + //stack has + switch (state.stack[0]) { + case stateType._string: + while (state.stack[0] === stateType._string && !stream.eol()) { + if (stream.peek() === state.stringType) { + stream.next(); // Skip quote + state.stack.shift(); // Clear flag + } else if (stream.peek() === "\\") { + stream.next(); + stream.next(); + } else { + stream.match(/^.[^\\\"\']*/); + } + } + return state.lhs ? "property string" : "string"; // Token style + + case stateType.comment: + while (state.stack[0] === stateType.comment && !stream.eol()) { + if (state.commentType === commentType.slash && stream.match('*/')) { + state.stack.shift(); // Clear flag + state.commentType = null; + } else if (state.commentType === commentType.parenthesis && stream.match('*)')) { + state.stack.shift(); // Clear flag + state.commentType = null; + } else { + stream.match(/^.[^\*]*/); + } + } + return "comment"; + + case stateType.characterClass: + while (state.stack[0] === stateType.characterClass && !stream.eol()) { + if (!(stream.match(/^[^\]\\]+/) || stream.match('.'))) { + state.stack.shift(); + } + } + return "operator"; + } + + var peek = stream.peek(); + + if (bracesMode !== null && (state.braced || peek === "{")) { + if (state.localState === null) + state.localState = CodeMirror.startState(bracesMode); + + var token = bracesMode.token(stream, state.localState), + text = stream.current(); + + if (!token) { + for (var i = 0; i < text.length; i++) { + if (text[i] === "{") { + if (state.braced === 0) { + token = "matchingbracket"; + } + state.braced++; + } else if (text[i] === "}") { + state.braced--; + if (state.braced === 0) { + token = "matchingbracket"; + } + } + } + } + return token; + } + + //no stack + switch (peek) { + case "[": + stream.next(); + state.stack.unshift(stateType.characterClass); + return "bracket"; + case ":": + case "|": + case ";": + stream.next(); + return "operator"; + case "%": + if (stream.match("%%")) { + return "header"; + } else if (stream.match(/[%][A-Za-z]+/)) { + return "keyword"; + } else if (stream.match(/[%][}]/)) { + return "matchingbracket"; + } + break; + case "/": + if (stream.match(/[\/][A-Za-z]+/)) { + return "keyword"; + } + case "\\": + if (stream.match(/[\][a-z]+/)) { + return "string-2"; + } + case ".": + if (stream.match(".")) { + return "atom"; + } + case "*": + case "-": + case "+": + case "^": + if (stream.match(peek)) { + return "atom"; + } + case "$": + if (stream.match("$$")) { + return "builtin"; + } else if (stream.match(/[$][0-9]+/)) { + return "variable-3"; + } + case "<": + if (stream.match(/<<[a-zA-Z_]+>>/)) { + return "builtin"; + } + } + + if (stream.match('//')) { + stream.skipToEnd(); + return "comment"; + } else if (stream.match('return')) { + return "operator"; + } else if (stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)) { + if (stream.match(/(?=[\(.])/)) { + return "variable"; + } else if (stream.match(/(?=[\s\n]*[:=])/)) { + return "def"; + } + return "variable-2"; + } else if (["[", "]", "(", ")"].indexOf(stream.peek()) != -1) { + stream.next(); + return "bracket"; + } else if (!stream.eatSpace()) { + stream.next(); + } + return null; + } + }; + }); + + CodeMirror.defineMIME("text/x-ebnf", "ebnf"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ecl/ecl.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ecl/ecl.js new file mode 100644 index 0000000000..9af8aee180 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ecl/ecl.js @@ -0,0 +1,206 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("ecl", function(config) { + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + function metaHook(stream, state) { + if (!state.startOfLine) return false; + stream.skipToEnd(); + return "meta"; + } + + var indentUnit = config.indentUnit; + var keyword = words("abs acos allnodes ascii asin asstring atan atan2 ave case choose choosen choosesets clustersize combine correlation cos cosh count covariance cron dataset dedup define denormalize distribute distributed distribution ebcdic enth error evaluate event eventextra eventname exists exp failcode failmessage fetch fromunicode getisvalid global graph group hash hash32 hash64 hashcrc hashmd5 having if index intformat isvalid iterate join keyunicode length library limit ln local log loop map matched matchlength matchposition matchtext matchunicode max merge mergejoin min nolocal nonempty normalize parse pipe power preload process project pull random range rank ranked realformat recordof regexfind regexreplace regroup rejected rollup round roundup row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt stepped stored sum table tan tanh thisnode topn tounicode transfer trim truncate typeof ungroup unicodeorder variance which workunit xmldecode xmlencode xmltext xmlunicode"); + var variable = words("apply assert build buildindex evaluate fail keydiff keypatch loadxml nothor notify output parallel sequential soapcall wait"); + var variable_2 = words("__compressed__ all and any as atmost before beginc++ best between case const counter csv descend encrypt end endc++ endmacro except exclusive expire export extend false few first flat from full function group header heading hole ifblock import in interface joined keep keyed last left limit load local locale lookup macro many maxcount maxlength min skew module named nocase noroot noscan nosort not of only opt or outer overwrite packed partition penalty physicallength pipe quote record relationship repeat return right scan self separator service shared skew skip sql store terminator thor threshold token transform trim true type unicodeorder unsorted validate virtual whole wild within xml xpath"); + var variable_3 = words("ascii big_endian boolean data decimal ebcdic integer pattern qstring real record rule set of string token udecimal unicode unsigned varstring varunicode"); + var builtin = words("checkpoint deprecated failcode failmessage failure global independent onwarning persist priority recovery stored success wait when"); + var blockKeywords = words("catch class do else finally for if switch try while"); + var atoms = words("true false null"); + var hooks = {"#": metaHook}; + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current().toLowerCase(); + if (keyword.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "keyword"; + } else if (variable.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "variable"; + } else if (variable_2.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "variable-2"; + } else if (variable_3.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "variable-3"; + } else if (builtin.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "builtin"; + } else { //Data types are of from KEYWORD## + var i = cur.length - 1; + while(i >= 0 && (!isNaN(cur[i]) || cur[i] == '_')) + --i; + + if (i > 0) { + var cur2 = cur.substr(0, i + 1); + if (variable_3.propertyIsEnumerable(cur2)) { + if (blockKeywords.propertyIsEnumerable(cur2)) curPunc = "newstatement"; + return "variable-3"; + } + } + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return null; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !escaped) + state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return 0; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : indentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}" + }; +}); + +CodeMirror.defineMIME("text/x-ecl", "ecl"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/eiffel/eiffel.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/eiffel/eiffel.js new file mode 100644 index 0000000000..f6f3f458b6 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/eiffel/eiffel.js @@ -0,0 +1,160 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("eiffel", function() { + function wordObj(words) { + var o = {}; + for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; + return o; + } + var keywords = wordObj([ + 'note', + 'across', + 'when', + 'variant', + 'until', + 'unique', + 'undefine', + 'then', + 'strip', + 'select', + 'retry', + 'rescue', + 'require', + 'rename', + 'reference', + 'redefine', + 'prefix', + 'once', + 'old', + 'obsolete', + 'loop', + 'local', + 'like', + 'is', + 'inspect', + 'infix', + 'include', + 'if', + 'frozen', + 'from', + 'external', + 'export', + 'ensure', + 'end', + 'elseif', + 'else', + 'do', + 'creation', + 'create', + 'check', + 'alias', + 'agent', + 'separate', + 'invariant', + 'inherit', + 'indexing', + 'feature', + 'expanded', + 'deferred', + 'class', + 'Void', + 'True', + 'Result', + 'Precursor', + 'False', + 'Current', + 'create', + 'attached', + 'detachable', + 'as', + 'and', + 'implies', + 'not', + 'or' + ]); + var operators = wordObj([":=", "and then","and", "or","<<",">>"]); + + function chain(newtok, stream, state) { + state.tokenize.push(newtok); + return newtok(stream, state); + } + + function tokenBase(stream, state) { + if (stream.eatSpace()) return null; + var ch = stream.next(); + if (ch == '"'||ch == "'") { + return chain(readQuoted(ch, "string"), stream, state); + } else if (ch == "-"&&stream.eat("-")) { + stream.skipToEnd(); + return "comment"; + } else if (ch == ":"&&stream.eat("=")) { + return "operator"; + } else if (/[0-9]/.test(ch)) { + stream.eatWhile(/[xXbBCc0-9\.]/); + stream.eat(/[\?\!]/); + return "ident"; + } else if (/[a-zA-Z_0-9]/.test(ch)) { + stream.eatWhile(/[a-zA-Z_0-9]/); + stream.eat(/[\?\!]/); + return "ident"; + } else if (/[=+\-\/*^%<>~]/.test(ch)) { + stream.eatWhile(/[=+\-\/*^%<>~]/); + return "operator"; + } else { + return null; + } + } + + function readQuoted(quote, style, unescaped) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && (unescaped || !escaped)) { + state.tokenize.pop(); + break; + } + escaped = !escaped && ch == "%"; + } + return style; + }; + } + + return { + startState: function() { + return {tokenize: [tokenBase]}; + }, + + token: function(stream, state) { + var style = state.tokenize[state.tokenize.length-1](stream, state); + if (style == "ident") { + var word = stream.current(); + style = keywords.propertyIsEnumerable(stream.current()) ? "keyword" + : operators.propertyIsEnumerable(stream.current()) ? "operator" + : /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag" + : /^0[bB][0-1]+$/g.test(word) ? "number" + : /^0[cC][0-7]+$/g.test(word) ? "number" + : /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number" + : /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number" + : /^[0-9]+$/g.test(word) ? "number" + : "variable"; + } + return style; + }, + lineComment: "--" + }; +}); + +CodeMirror.defineMIME("text/x-eiffel", "eiffel"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/elm/elm.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/elm/elm.js new file mode 100644 index 0000000000..6ce940fe82 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/elm/elm.js @@ -0,0 +1,243 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("elm", function() { + + function switchState(source, setState, f) + { + setState(f); + return f(source, setState); + } + + var lowerRE = /[a-z]/; + var upperRE = /[A-Z]/; + var innerRE = /[a-zA-Z0-9_]/; + + var digitRE = /[0-9]/; + var hexRE = /[0-9A-Fa-f]/; + var symbolRE = /[-&*+.\\/<>=?^|:]/; + var specialRE = /[(),[\]{}]/; + var spacesRE = /[ \v\f]/; // newlines are handled in tokenizer + + function normal() + { + return function(source, setState) + { + if (source.eatWhile(spacesRE)) + { + return null; + } + + var char = source.next(); + + if (specialRE.test(char)) + { + return (char === '{' && source.eat('-')) + ? switchState(source, setState, chompMultiComment(1)) + : (char === '[' && source.match('glsl|')) + ? switchState(source, setState, chompGlsl) + : 'builtin'; + } + + if (char === '\'') + { + return switchState(source, setState, chompChar); + } + + if (char === '"') + { + return source.eat('"') + ? source.eat('"') + ? switchState(source, setState, chompMultiString) + : 'string' + : switchState(source, setState, chompSingleString); + } + + if (upperRE.test(char)) + { + source.eatWhile(innerRE); + return 'variable-2'; + } + + if (lowerRE.test(char)) + { + var isDef = source.pos === 1; + source.eatWhile(innerRE); + return isDef ? "def" : "variable"; + } + + if (digitRE.test(char)) + { + if (char === '0') + { + if (source.eat(/[xX]/)) + { + source.eatWhile(hexRE); // should require at least 1 + return "number"; + } + } + else + { + source.eatWhile(digitRE); + } + if (source.eat('.')) + { + source.eatWhile(digitRE); // should require at least 1 + } + if (source.eat(/[eE]/)) + { + source.eat(/[-+]/); + source.eatWhile(digitRE); // should require at least 1 + } + return "number"; + } + + if (symbolRE.test(char)) + { + if (char === '-' && source.eat('-')) + { + source.skipToEnd(); + return "comment"; + } + source.eatWhile(symbolRE); + return "keyword"; + } + + if (char === '_') + { + return "keyword"; + } + + return "error"; + } + } + + function chompMultiComment(nest) + { + if (nest == 0) + { + return normal(); + } + return function(source, setState) + { + while (!source.eol()) + { + var char = source.next(); + if (char == '{' && source.eat('-')) + { + ++nest; + } + else if (char == '-' && source.eat('}')) + { + --nest; + if (nest === 0) + { + setState(normal()); + return 'comment'; + } + } + } + setState(chompMultiComment(nest)); + return 'comment'; + } + } + + function chompMultiString(source, setState) + { + while (!source.eol()) + { + var char = source.next(); + if (char === '"' && source.eat('"') && source.eat('"')) + { + setState(normal()); + return 'string'; + } + } + return 'string'; + } + + function chompSingleString(source, setState) + { + while (source.skipTo('\\"')) { source.next(); source.next(); } + if (source.skipTo('"')) + { + source.next(); + setState(normal()); + return 'string'; + } + source.skipToEnd(); + setState(normal()); + return 'error'; + } + + function chompChar(source, setState) + { + while (source.skipTo("\\'")) { source.next(); source.next(); } + if (source.skipTo("'")) + { + source.next(); + setState(normal()); + return 'string'; + } + source.skipToEnd(); + setState(normal()); + return 'error'; + } + + function chompGlsl(source, setState) + { + while (!source.eol()) + { + var char = source.next(); + if (char === '|' && source.eat(']')) + { + setState(normal()); + return 'string'; + } + } + return 'string'; + } + + var wellKnownWords = { + case: 1, + of: 1, + as: 1, + if: 1, + then: 1, + else: 1, + let: 1, + in: 1, + type: 1, + alias: 1, + module: 1, + where: 1, + import: 1, + exposing: 1, + port: 1 + }; + + return { + startState: function () { return { f: normal() }; }, + copyState: function (s) { return { f: s.f }; }, + + token: function(stream, state) { + var type = state.f(stream, function(s) { state.f = s; }); + var word = stream.current(); + return (wellKnownWords.hasOwnProperty(word)) ? 'keyword' : type; + } + }; + + }); + + CodeMirror.defineMIME("text/x-elm", "elm"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/erlang/erlang.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/erlang/erlang.js new file mode 100644 index 0000000000..d827296f3b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/erlang/erlang.js @@ -0,0 +1,619 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/*jshint unused:true, eqnull:true, curly:true, bitwise:true */ +/*jshint undef:true, latedef:true, trailing:true */ +/*global CodeMirror:true */ + +// erlang mode. +// tokenizer -> token types -> CodeMirror styles +// tokenizer maintains a parse stack +// indenter uses the parse stack + +// TODO indenter: +// bit syntax +// old guard/bif/conversion clashes (e.g. "float/1") +// type/spec/opaque + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMIME("text/x-erlang", "erlang"); + +CodeMirror.defineMode("erlang", function(cmCfg) { + "use strict"; + +///////////////////////////////////////////////////////////////////////////// +// constants + + var typeWords = [ + "-type", "-spec", "-export_type", "-opaque"]; + + var keywordWords = [ + "after","begin","catch","case","cond","end","fun","if", + "let","of","query","receive","try","when"]; + + var separatorRE = /[\->,;]/; + var separatorWords = [ + "->",";",","]; + + var operatorAtomWords = [ + "and","andalso","band","bnot","bor","bsl","bsr","bxor", + "div","not","or","orelse","rem","xor"]; + + var operatorSymbolRE = /[\+\-\*\/<>=\|:!]/; + var operatorSymbolWords = [ + "=","+","-","*","/",">",">=","<","=<","=:=","==","=/=","/=","||","<-","!"]; + + var openParenRE = /[<\(\[\{]/; + var openParenWords = [ + "<<","(","[","{"]; + + var closeParenRE = /[>\)\]\}]/; + var closeParenWords = [ + "}","]",")",">>"]; + + var guardWords = [ + "is_atom","is_binary","is_bitstring","is_boolean","is_float", + "is_function","is_integer","is_list","is_number","is_pid", + "is_port","is_record","is_reference","is_tuple", + "atom","binary","bitstring","boolean","function","integer","list", + "number","pid","port","record","reference","tuple"]; + + var bifWords = [ + "abs","adler32","adler32_combine","alive","apply","atom_to_binary", + "atom_to_list","binary_to_atom","binary_to_existing_atom", + "binary_to_list","binary_to_term","bit_size","bitstring_to_list", + "byte_size","check_process_code","contact_binary","crc32", + "crc32_combine","date","decode_packet","delete_module", + "disconnect_node","element","erase","exit","float","float_to_list", + "garbage_collect","get","get_keys","group_leader","halt","hd", + "integer_to_list","internal_bif","iolist_size","iolist_to_binary", + "is_alive","is_atom","is_binary","is_bitstring","is_boolean", + "is_float","is_function","is_integer","is_list","is_number","is_pid", + "is_port","is_process_alive","is_record","is_reference","is_tuple", + "length","link","list_to_atom","list_to_binary","list_to_bitstring", + "list_to_existing_atom","list_to_float","list_to_integer", + "list_to_pid","list_to_tuple","load_module","make_ref","module_loaded", + "monitor_node","node","node_link","node_unlink","nodes","notalive", + "now","open_port","pid_to_list","port_close","port_command", + "port_connect","port_control","pre_loaded","process_flag", + "process_info","processes","purge_module","put","register", + "registered","round","self","setelement","size","spawn","spawn_link", + "spawn_monitor","spawn_opt","split_binary","statistics", + "term_to_binary","time","throw","tl","trunc","tuple_size", + "tuple_to_list","unlink","unregister","whereis"]; + +// upper case: [A-Z] [Ø-Þ] [À-Ö] +// lower case: [a-z] [ß-ö] [ø-ÿ] + var anumRE = /[\w@Ø-ÞÀ-Öß-öø-ÿ]/; + var escapesRE = + /[0-7]{1,3}|[bdefnrstv\\"']|\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/; + +///////////////////////////////////////////////////////////////////////////// +// tokenizer + + function tokenizer(stream,state) { + // in multi-line string + if (state.in_string) { + state.in_string = (!doubleQuote(stream)); + return rval(state,stream,"string"); + } + + // in multi-line atom + if (state.in_atom) { + state.in_atom = (!singleQuote(stream)); + return rval(state,stream,"atom"); + } + + // whitespace + if (stream.eatSpace()) { + return rval(state,stream,"whitespace"); + } + + // attributes and type specs + if (!peekToken(state) && + stream.match(/-\s*[a-zß-öø-ÿ][\wØ-ÞÀ-Öß-öø-ÿ]*/)) { + if (is_member(stream.current(),typeWords)) { + return rval(state,stream,"type"); + }else{ + return rval(state,stream,"attribute"); + } + } + + var ch = stream.next(); + + // comment + if (ch == '%') { + stream.skipToEnd(); + return rval(state,stream,"comment"); + } + + // colon + if (ch == ":") { + return rval(state,stream,"colon"); + } + + // macro + if (ch == '?') { + stream.eatSpace(); + stream.eatWhile(anumRE); + return rval(state,stream,"macro"); + } + + // record + if (ch == "#") { + stream.eatSpace(); + stream.eatWhile(anumRE); + return rval(state,stream,"record"); + } + + // dollar escape + if (ch == "$") { + if (stream.next() == "\\" && !stream.match(escapesRE)) { + return rval(state,stream,"error"); + } + return rval(state,stream,"number"); + } + + // dot + if (ch == ".") { + return rval(state,stream,"dot"); + } + + // quoted atom + if (ch == '\'') { + if (!(state.in_atom = (!singleQuote(stream)))) { + if (stream.match(/\s*\/\s*[0-9]/,false)) { + stream.match(/\s*\/\s*[0-9]/,true); + return rval(state,stream,"fun"); // 'f'/0 style fun + } + if (stream.match(/\s*\(/,false) || stream.match(/\s*:/,false)) { + return rval(state,stream,"function"); + } + } + return rval(state,stream,"atom"); + } + + // string + if (ch == '"') { + state.in_string = (!doubleQuote(stream)); + return rval(state,stream,"string"); + } + + // variable + if (/[A-Z_Ø-ÞÀ-Ö]/.test(ch)) { + stream.eatWhile(anumRE); + return rval(state,stream,"variable"); + } + + // atom/keyword/BIF/function + if (/[a-z_ß-öø-ÿ]/.test(ch)) { + stream.eatWhile(anumRE); + + if (stream.match(/\s*\/\s*[0-9]/,false)) { + stream.match(/\s*\/\s*[0-9]/,true); + return rval(state,stream,"fun"); // f/0 style fun + } + + var w = stream.current(); + + if (is_member(w,keywordWords)) { + return rval(state,stream,"keyword"); + }else if (is_member(w,operatorAtomWords)) { + return rval(state,stream,"operator"); + }else if (stream.match(/\s*\(/,false)) { + // 'put' and 'erlang:put' are bifs, 'foo:put' is not + if (is_member(w,bifWords) && + ((peekToken(state).token != ":") || + (peekToken(state,2).token == "erlang"))) { + return rval(state,stream,"builtin"); + }else if (is_member(w,guardWords)) { + return rval(state,stream,"guard"); + }else{ + return rval(state,stream,"function"); + } + }else if (lookahead(stream) == ":") { + if (w == "erlang") { + return rval(state,stream,"builtin"); + } else { + return rval(state,stream,"function"); + } + }else if (is_member(w,["true","false"])) { + return rval(state,stream,"boolean"); + }else{ + return rval(state,stream,"atom"); + } + } + + // number + var digitRE = /[0-9]/; + var radixRE = /[0-9a-zA-Z]/; // 36#zZ style int + if (digitRE.test(ch)) { + stream.eatWhile(digitRE); + if (stream.eat('#')) { // 36#aZ style integer + if (!stream.eatWhile(radixRE)) { + stream.backUp(1); //"36#" - syntax error + } + } else if (stream.eat('.')) { // float + if (!stream.eatWhile(digitRE)) { + stream.backUp(1); // "3." - probably end of function + } else { + if (stream.eat(/[eE]/)) { // float with exponent + if (stream.eat(/[-+]/)) { + if (!stream.eatWhile(digitRE)) { + stream.backUp(2); // "2e-" - syntax error + } + } else { + if (!stream.eatWhile(digitRE)) { + stream.backUp(1); // "2e" - syntax error + } + } + } + } + } + return rval(state,stream,"number"); // normal integer + } + + // open parens + if (nongreedy(stream,openParenRE,openParenWords)) { + return rval(state,stream,"open_paren"); + } + + // close parens + if (nongreedy(stream,closeParenRE,closeParenWords)) { + return rval(state,stream,"close_paren"); + } + + // separators + if (greedy(stream,separatorRE,separatorWords)) { + return rval(state,stream,"separator"); + } + + // operators + if (greedy(stream,operatorSymbolRE,operatorSymbolWords)) { + return rval(state,stream,"operator"); + } + + return rval(state,stream,null); + } + +///////////////////////////////////////////////////////////////////////////// +// utilities + function nongreedy(stream,re,words) { + if (stream.current().length == 1 && re.test(stream.current())) { + stream.backUp(1); + while (re.test(stream.peek())) { + stream.next(); + if (is_member(stream.current(),words)) { + return true; + } + } + stream.backUp(stream.current().length-1); + } + return false; + } + + function greedy(stream,re,words) { + if (stream.current().length == 1 && re.test(stream.current())) { + while (re.test(stream.peek())) { + stream.next(); + } + while (0 < stream.current().length) { + if (is_member(stream.current(),words)) { + return true; + }else{ + stream.backUp(1); + } + } + stream.next(); + } + return false; + } + + function doubleQuote(stream) { + return quote(stream, '"', '\\'); + } + + function singleQuote(stream) { + return quote(stream,'\'','\\'); + } + + function quote(stream,quoteChar,escapeChar) { + while (!stream.eol()) { + var ch = stream.next(); + if (ch == quoteChar) { + return true; + }else if (ch == escapeChar) { + stream.next(); + } + } + return false; + } + + function lookahead(stream) { + var m = stream.match(/^\s*([^\s%])/, false) + return m ? m[1] : ""; + } + + function is_member(element,list) { + return (-1 < list.indexOf(element)); + } + + function rval(state,stream,type) { + + // parse stack + pushToken(state,realToken(type,stream)); + + // map erlang token type to CodeMirror style class + // erlang -> CodeMirror tag + switch (type) { + case "atom": return "atom"; + case "attribute": return "attribute"; + case "boolean": return "atom"; + case "builtin": return "builtin"; + case "close_paren": return null; + case "colon": return null; + case "comment": return "comment"; + case "dot": return null; + case "error": return "error"; + case "fun": return "meta"; + case "function": return "tag"; + case "guard": return "property"; + case "keyword": return "keyword"; + case "macro": return "variable-2"; + case "number": return "number"; + case "open_paren": return null; + case "operator": return "operator"; + case "record": return "bracket"; + case "separator": return null; + case "string": return "string"; + case "type": return "def"; + case "variable": return "variable"; + default: return null; + } + } + + function aToken(tok,col,ind,typ) { + return {token: tok, + column: col, + indent: ind, + type: typ}; + } + + function realToken(type,stream) { + return aToken(stream.current(), + stream.column(), + stream.indentation(), + type); + } + + function fakeToken(type) { + return aToken(type,0,0,type); + } + + function peekToken(state,depth) { + var len = state.tokenStack.length; + var dep = (depth ? depth : 1); + + if (len < dep) { + return false; + }else{ + return state.tokenStack[len-dep]; + } + } + + function pushToken(state,token) { + + if (!(token.type == "comment" || token.type == "whitespace")) { + state.tokenStack = maybe_drop_pre(state.tokenStack,token); + state.tokenStack = maybe_drop_post(state.tokenStack); + } + } + + function maybe_drop_pre(s,token) { + var last = s.length-1; + + if (0 < last && s[last].type === "record" && token.type === "dot") { + s.pop(); + }else if (0 < last && s[last].type === "group") { + s.pop(); + s.push(token); + }else{ + s.push(token); + } + return s; + } + + function maybe_drop_post(s) { + if (!s.length) return s + var last = s.length-1; + + if (s[last].type === "dot") { + return []; + } + if (last > 1 && s[last].type === "fun" && s[last-1].token === "fun") { + return s.slice(0,last-1); + } + switch (s[last].token) { + case "}": return d(s,{g:["{"]}); + case "]": return d(s,{i:["["]}); + case ")": return d(s,{i:["("]}); + case ">>": return d(s,{i:["<<"]}); + case "end": return d(s,{i:["begin","case","fun","if","receive","try"]}); + case ",": return d(s,{e:["begin","try","when","->", + ",","(","[","{","<<"]}); + case "->": return d(s,{r:["when"], + m:["try","if","case","receive"]}); + case ";": return d(s,{E:["case","fun","if","receive","try","when"]}); + case "catch":return d(s,{e:["try"]}); + case "of": return d(s,{e:["case"]}); + case "after":return d(s,{e:["receive","try"]}); + default: return s; + } + } + + function d(stack,tt) { + // stack is a stack of Token objects. + // tt is an object; {type:tokens} + // type is a char, tokens is a list of token strings. + // The function returns (possibly truncated) stack. + // It will descend the stack, looking for a Token such that Token.token + // is a member of tokens. If it does not find that, it will normally (but + // see "E" below) return stack. If it does find a match, it will remove + // all the Tokens between the top and the matched Token. + // If type is "m", that is all it does. + // If type is "i", it will also remove the matched Token and the top Token. + // If type is "g", like "i", but add a fake "group" token at the top. + // If type is "r", it will remove the matched Token, but not the top Token. + // If type is "e", it will keep the matched Token but not the top Token. + // If type is "E", it behaves as for type "e", except if there is no match, + // in which case it will return an empty stack. + + for (var type in tt) { + var len = stack.length-1; + var tokens = tt[type]; + for (var i = len-1; -1 < i ; i--) { + if (is_member(stack[i].token,tokens)) { + var ss = stack.slice(0,i); + switch (type) { + case "m": return ss.concat(stack[i]).concat(stack[len]); + case "r": return ss.concat(stack[len]); + case "i": return ss; + case "g": return ss.concat(fakeToken("group")); + case "E": return ss.concat(stack[i]); + case "e": return ss.concat(stack[i]); + } + } + } + } + return (type == "E" ? [] : stack); + } + +///////////////////////////////////////////////////////////////////////////// +// indenter + + function indenter(state,textAfter) { + var t; + var unit = cmCfg.indentUnit; + var wordAfter = wordafter(textAfter); + var currT = peekToken(state,1); + var prevT = peekToken(state,2); + + if (state.in_string || state.in_atom) { + return CodeMirror.Pass; + }else if (!prevT) { + return 0; + }else if (currT.token == "when") { + return currT.column+unit; + }else if (wordAfter === "when" && prevT.type === "function") { + return prevT.indent+unit; + }else if (wordAfter === "(" && currT.token === "fun") { + return currT.column+3; + }else if (wordAfter === "catch" && (t = getToken(state,["try"]))) { + return t.column; + }else if (is_member(wordAfter,["end","after","of"])) { + t = getToken(state,["begin","case","fun","if","receive","try"]); + return t ? t.column : CodeMirror.Pass; + }else if (is_member(wordAfter,closeParenWords)) { + t = getToken(state,openParenWords); + return t ? t.column : CodeMirror.Pass; + }else if (is_member(currT.token,[",","|","||"]) || + is_member(wordAfter,[",","|","||"])) { + t = postcommaToken(state); + return t ? t.column+t.token.length : unit; + }else if (currT.token == "->") { + if (is_member(prevT.token, ["receive","case","if","try"])) { + return prevT.column+unit+unit; + }else{ + return prevT.column+unit; + } + }else if (is_member(currT.token,openParenWords)) { + return currT.column+currT.token.length; + }else{ + t = defaultToken(state); + return truthy(t) ? t.column+unit : 0; + } + } + + function wordafter(str) { + var m = str.match(/,|[a-z]+|\}|\]|\)|>>|\|+|\(/); + + return truthy(m) && (m.index === 0) ? m[0] : ""; + } + + function postcommaToken(state) { + var objs = state.tokenStack.slice(0,-1); + var i = getTokenIndex(objs,"type",["open_paren"]); + + return truthy(objs[i]) ? objs[i] : false; + } + + function defaultToken(state) { + var objs = state.tokenStack; + var stop = getTokenIndex(objs,"type",["open_paren","separator","keyword"]); + var oper = getTokenIndex(objs,"type",["operator"]); + + if (truthy(stop) && truthy(oper) && stop < oper) { + return objs[stop+1]; + } else if (truthy(stop)) { + return objs[stop]; + } else { + return false; + } + } + + function getToken(state,tokens) { + var objs = state.tokenStack; + var i = getTokenIndex(objs,"token",tokens); + + return truthy(objs[i]) ? objs[i] : false; + } + + function getTokenIndex(objs,propname,propvals) { + + for (var i = objs.length-1; -1 < i ; i--) { + if (is_member(objs[i][propname],propvals)) { + return i; + } + } + return false; + } + + function truthy(x) { + return (x !== false) && (x != null); + } + +///////////////////////////////////////////////////////////////////////////// +// this object defines the mode + + return { + startState: + function() { + return {tokenStack: [], + in_string: false, + in_atom: false}; + }, + + token: + function(stream, state) { + return tokenizer(stream, state); + }, + + indent: + function(state, textAfter) { + return indenter(state,textAfter); + }, + + lineComment: "%" + }; +}); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/factor/factor.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/factor/factor.js new file mode 100644 index 0000000000..d3f7d499cb --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/factor/factor.js @@ -0,0 +1,85 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Factor syntax highlight - simple mode +// +// by Dimage Sapelkin (https://github.com/kerabromsmu) + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineSimpleMode("factor", { + // The start state contains the rules that are initially used + start: [ + // comments + {regex: /#?!.*/, token: "comment"}, + // strings """, multiline --> state + {regex: /"""/, token: "string", next: "string3"}, + {regex: /(STRING:)(\s)/, token: ["keyword", null], next: "string2"}, + {regex: /\S*?"/, token: "string", next: "string"}, + // numbers: dec, hex, unicode, bin, fractional, complex + {regex: /(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\-?\d+.?\d*)(?=\s)/, token: "number"}, + //{regex: /[+-]?/} //fractional + // definition: defining word, defined word, etc + {regex: /((?:GENERIC)|\:?\:)(\s+)(\S+)(\s+)(\()/, token: ["keyword", null, "def", null, "bracket"], next: "stack"}, + // method definition: defining word, type, defined word, etc + {regex: /(M\:)(\s+)(\S+)(\s+)(\S+)/, token: ["keyword", null, "def", null, "tag"]}, + // vocabulary using --> state + {regex: /USING\:/, token: "keyword", next: "vocabulary"}, + // vocabulary definition/use + {regex: /(USE\:|IN\:)(\s+)(\S+)(?=\s|$)/, token: ["keyword", null, "tag"]}, + // definition: a defining word, defined word + {regex: /(\S+\:)(\s+)(\S+)(?=\s|$)/, token: ["keyword", null, "def"]}, + // "keywords", incl. ; t f . [ ] { } defining words + {regex: /(?:;|\\|t|f|if|loop|while|until|do|PRIVATE>| and the like + {regex: /\S+[\)>\.\*\?]+(?=\s|$)/, token: "builtin"}, + {regex: /[\)><]+\S+(?=\s|$)/, token: "builtin"}, + // operators + {regex: /(?:[\+\-\=\/\*<>])(?=\s|$)/, token: "keyword"}, + // any id (?) + {regex: /\S+/, token: "variable"}, + {regex: /\s+|./, token: null} + ], + vocabulary: [ + {regex: /;/, token: "keyword", next: "start"}, + {regex: /\S+/, token: "tag"}, + {regex: /\s+|./, token: null} + ], + string: [ + {regex: /(?:[^\\]|\\.)*?"/, token: "string", next: "start"}, + {regex: /.*/, token: "string"} + ], + string2: [ + {regex: /^;/, token: "keyword", next: "start"}, + {regex: /.*/, token: "string"} + ], + string3: [ + {regex: /(?:[^\\]|\\.)*?"""/, token: "string", next: "start"}, + {regex: /.*/, token: "string"} + ], + stack: [ + {regex: /\)/, token: "bracket", next: "start"}, + {regex: /--/, token: "bracket"}, + {regex: /\S+/, token: "meta"}, + {regex: /\s+|./, token: null} + ], + // The meta property contains global information about the mode. It + // can contain properties like lineComment, which are supported by + // all modes, and also directives like dontIndentStates, which are + // specific to simple modes. + meta: { + dontIndentStates: ["start", "vocabulary", "string", "string3", "stack"], + lineComment: "!" + } + }); + + CodeMirror.defineMIME("text/x-factor", "factor"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/fcl/fcl.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/fcl/fcl.js new file mode 100644 index 0000000000..2d3f2001d3 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/fcl/fcl.js @@ -0,0 +1,173 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("fcl", function(config) { + var indentUnit = config.indentUnit; + + var keywords = { + "term": true, + "method": true, "accu": true, + "rule": true, "then": true, "is": true, "and": true, "or": true, + "if": true, "default": true + }; + + var start_blocks = { + "var_input": true, + "var_output": true, + "fuzzify": true, + "defuzzify": true, + "function_block": true, + "ruleblock": true + }; + + var end_blocks = { + "end_ruleblock": true, + "end_defuzzify": true, + "end_function_block": true, + "end_fuzzify": true, + "end_var": true + }; + + var atoms = { + "true": true, "false": true, "nan": true, + "real": true, "min": true, "max": true, "cog": true, "cogs": true + }; + + var isOperatorChar = /[+\-*&^%:=<>!|\/]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + + if (/[\d\.]/.test(ch)) { + if (ch == ".") { + stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); + } else if (ch == "0") { + stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); + } else { + stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); + } + return "number"; + } + + if (ch == "/" || ch == "(") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + + var cur = stream.current().toLowerCase(); + if (keywords.propertyIsEnumerable(cur) || + start_blocks.propertyIsEnumerable(cur) || + end_blocks.propertyIsEnumerable(cur)) { + return "keyword"; + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if ((ch == "/" || ch == ")") && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + + function popContext(state) { + if (!state.context.prev) return; + var t = state.context.type; + if (t == "end_block") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + var cur = stream.current().toLowerCase(); + + if (start_blocks.propertyIsEnumerable(cur)) pushContext(state, stream.column(), "end_block"); + else if (end_blocks.propertyIsEnumerable(cur)) popContext(state); + + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return 0; + var ctx = state.context; + + var closing = end_blocks.propertyIsEnumerable(textAfter); + if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "ryk", + fold: "brace", + blockCommentStart: "(*", + blockCommentEnd: "*)", + lineComment: "//" + }; +}); + +CodeMirror.defineMIME("text/x-fcl", "fcl"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/forth/forth.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/forth/forth.js new file mode 100644 index 0000000000..f2caa27af8 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/forth/forth.js @@ -0,0 +1,180 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Author: Aliaksei Chapyzhenka + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function toWordList(words) { + var ret = []; + words.split(' ').forEach(function(e){ + ret.push({name: e}); + }); + return ret; + } + + var coreWordList = toWordList( +'INVERT AND OR XOR\ + 2* 2/ LSHIFT RSHIFT\ + 0= = 0< < > U< MIN MAX\ + 2DROP 2DUP 2OVER 2SWAP ?DUP DEPTH DROP DUP OVER ROT SWAP\ + >R R> R@\ + + - 1+ 1- ABS NEGATE\ + S>D * M* UM*\ + FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD\ + HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2!\ + ALIGN ALIGNED +! ALLOT\ + CHAR [CHAR] [ ] BL\ + FIND EXECUTE IMMEDIATE COUNT LITERAL STATE\ + ; DOES> >BODY\ + EVALUATE\ + SOURCE >IN\ + <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL\ + FILL MOVE\ + . CR EMIT SPACE SPACES TYPE U. .R U.R\ + ACCEPT\ + TRUE FALSE\ + <> U> 0<> 0>\ + NIP TUCK ROLL PICK\ + 2>R 2R@ 2R>\ + WITHIN UNUSED MARKER\ + I J\ + TO\ + COMPILE, [COMPILE]\ + SAVE-INPUT RESTORE-INPUT\ + PAD ERASE\ + 2LITERAL DNEGATE\ + D- D+ D0< D0= D2* D2/ D< D= DMAX DMIN D>S DABS\ + M+ M*/ D. D.R 2ROT DU<\ + CATCH THROW\ + FREE RESIZE ALLOCATE\ + CS-PICK CS-ROLL\ + GET-CURRENT SET-CURRENT FORTH-WORDLIST GET-ORDER SET-ORDER\ + PREVIOUS SEARCH-WORDLIST WORDLIST FIND ALSO ONLY FORTH DEFINITIONS ORDER\ + -TRAILING /STRING SEARCH COMPARE CMOVE CMOVE> BLANK SLITERAL'); + + var immediateWordList = toWordList('IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE [IF] [ELSE] [THEN] ?DO DO LOOP +LOOP UNLOOP LEAVE EXIT AGAIN CASE OF ENDOF ENDCASE'); + + CodeMirror.defineMode('forth', function() { + function searchWordList (wordList, word) { + var i; + for (i = wordList.length - 1; i >= 0; i--) { + if (wordList[i].name === word.toUpperCase()) { + return wordList[i]; + } + } + return undefined; + } + return { + startState: function() { + return { + state: '', + base: 10, + coreWordList: coreWordList, + immediateWordList: immediateWordList, + wordList: [] + }; + }, + token: function (stream, stt) { + var mat; + if (stream.eatSpace()) { + return null; + } + if (stt.state === '') { // interpretation + if (stream.match(/^(\]|:NONAME)(\s|$)/i)) { + stt.state = ' compilation'; + return 'builtin compilation'; + } + mat = stream.match(/^(\:)\s+(\S+)(\s|$)+/); + if (mat) { + stt.wordList.push({name: mat[2].toUpperCase()}); + stt.state = ' compilation'; + return 'def' + stt.state; + } + mat = stream.match(/^(VARIABLE|2VARIABLE|CONSTANT|2CONSTANT|CREATE|POSTPONE|VALUE|WORD)\s+(\S+)(\s|$)+/i); + if (mat) { + stt.wordList.push({name: mat[2].toUpperCase()}); + return 'def' + stt.state; + } + mat = stream.match(/^(\'|\[\'\])\s+(\S+)(\s|$)+/); + if (mat) { + return 'builtin' + stt.state; + } + } else { // compilation + // ; [ + if (stream.match(/^(\;|\[)(\s)/)) { + stt.state = ''; + stream.backUp(1); + return 'builtin compilation'; + } + if (stream.match(/^(\;|\[)($)/)) { + stt.state = ''; + return 'builtin compilation'; + } + if (stream.match(/^(POSTPONE)\s+\S+(\s|$)+/)) { + return 'builtin'; + } + } + + // dynamic wordlist + mat = stream.match(/^(\S+)(\s+|$)/); + if (mat) { + if (searchWordList(stt.wordList, mat[1]) !== undefined) { + return 'variable' + stt.state; + } + + // comments + if (mat[1] === '\\') { + stream.skipToEnd(); + return 'comment' + stt.state; + } + + // core words + if (searchWordList(stt.coreWordList, mat[1]) !== undefined) { + return 'builtin' + stt.state; + } + if (searchWordList(stt.immediateWordList, mat[1]) !== undefined) { + return 'keyword' + stt.state; + } + + if (mat[1] === '(') { + stream.eatWhile(function (s) { return s !== ')'; }); + stream.eat(')'); + return 'comment' + stt.state; + } + + // // strings + if (mat[1] === '.(') { + stream.eatWhile(function (s) { return s !== ')'; }); + stream.eat(')'); + return 'string' + stt.state; + } + if (mat[1] === 'S"' || mat[1] === '."' || mat[1] === 'C"') { + stream.eatWhile(function (s) { return s !== '"'; }); + stream.eat('"'); + return 'string' + stt.state; + } + + // numbers + if (mat[1] - 0xfffffffff) { + return 'number' + stt.state; + } + // if (mat[1].match(/^[-+]?[0-9]+\.[0-9]*/)) { + // return 'number' + stt.state; + // } + + return 'atom' + stt.state; + } + } + }; + }); + CodeMirror.defineMIME("text/x-forth", "forth"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/fortran/fortran.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/fortran/fortran.js new file mode 100644 index 0000000000..c33cf63edd --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/fortran/fortran.js @@ -0,0 +1,188 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("fortran", function() { + function words(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i]] = true; + } + return keys; + } + + var keywords = words([ + "abstract", "accept", "allocatable", "allocate", + "array", "assign", "asynchronous", "backspace", + "bind", "block", "byte", "call", "case", + "class", "close", "common", "contains", + "continue", "cycle", "data", "deallocate", + "decode", "deferred", "dimension", "do", + "elemental", "else", "encode", "end", + "endif", "entry", "enumerator", "equivalence", + "exit", "external", "extrinsic", "final", + "forall", "format", "function", "generic", + "go", "goto", "if", "implicit", "import", "include", + "inquire", "intent", "interface", "intrinsic", + "module", "namelist", "non_intrinsic", + "non_overridable", "none", "nopass", + "nullify", "open", "optional", "options", + "parameter", "pass", "pause", "pointer", + "print", "private", "program", "protected", + "public", "pure", "read", "recursive", "result", + "return", "rewind", "save", "select", "sequence", + "stop", "subroutine", "target", "then", "to", "type", + "use", "value", "volatile", "where", "while", + "write"]); + var builtins = words(["abort", "abs", "access", "achar", "acos", + "adjustl", "adjustr", "aimag", "aint", "alarm", + "all", "allocated", "alog", "amax", "amin", + "amod", "and", "anint", "any", "asin", + "associated", "atan", "besj", "besjn", "besy", + "besyn", "bit_size", "btest", "cabs", "ccos", + "ceiling", "cexp", "char", "chdir", "chmod", + "clog", "cmplx", "command_argument_count", + "complex", "conjg", "cos", "cosh", "count", + "cpu_time", "cshift", "csin", "csqrt", "ctime", + "c_funloc", "c_loc", "c_associated", "c_null_ptr", + "c_null_funptr", "c_f_pointer", "c_null_char", + "c_alert", "c_backspace", "c_form_feed", + "c_new_line", "c_carriage_return", + "c_horizontal_tab", "c_vertical_tab", "dabs", + "dacos", "dasin", "datan", "date_and_time", + "dbesj", "dbesj", "dbesjn", "dbesy", "dbesy", + "dbesyn", "dble", "dcos", "dcosh", "ddim", "derf", + "derfc", "dexp", "digits", "dim", "dint", "dlog", + "dlog", "dmax", "dmin", "dmod", "dnint", + "dot_product", "dprod", "dsign", "dsinh", + "dsin", "dsqrt", "dtanh", "dtan", "dtime", + "eoshift", "epsilon", "erf", "erfc", "etime", + "exit", "exp", "exponent", "extends_type_of", + "fdate", "fget", "fgetc", "float", "floor", + "flush", "fnum", "fputc", "fput", "fraction", + "fseek", "fstat", "ftell", "gerror", "getarg", + "get_command", "get_command_argument", + "get_environment_variable", "getcwd", + "getenv", "getgid", "getlog", "getpid", + "getuid", "gmtime", "hostnm", "huge", "iabs", + "iachar", "iand", "iargc", "ibclr", "ibits", + "ibset", "ichar", "idate", "idim", "idint", + "idnint", "ieor", "ierrno", "ifix", "imag", + "imagpart", "index", "int", "ior", "irand", + "isatty", "ishft", "ishftc", "isign", + "iso_c_binding", "is_iostat_end", "is_iostat_eor", + "itime", "kill", "kind", "lbound", "len", "len_trim", + "lge", "lgt", "link", "lle", "llt", "lnblnk", "loc", + "log", "logical", "long", "lshift", "lstat", "ltime", + "matmul", "max", "maxexponent", "maxloc", "maxval", + "mclock", "merge", "move_alloc", "min", "minexponent", + "minloc", "minval", "mod", "modulo", "mvbits", + "nearest", "new_line", "nint", "not", "or", "pack", + "perror", "precision", "present", "product", "radix", + "rand", "random_number", "random_seed", "range", + "real", "realpart", "rename", "repeat", "reshape", + "rrspacing", "rshift", "same_type_as", "scale", + "scan", "second", "selected_int_kind", + "selected_real_kind", "set_exponent", "shape", + "short", "sign", "signal", "sinh", "sin", "sleep", + "sngl", "spacing", "spread", "sqrt", "srand", "stat", + "sum", "symlnk", "system", "system_clock", "tan", + "tanh", "time", "tiny", "transfer", "transpose", + "trim", "ttynam", "ubound", "umask", "unlink", + "unpack", "verify", "xor", "zabs", "zcos", "zexp", + "zlog", "zsin", "zsqrt"]); + + var dataTypes = words(["c_bool", "c_char", "c_double", "c_double_complex", + "c_float", "c_float_complex", "c_funptr", "c_int", + "c_int16_t", "c_int32_t", "c_int64_t", "c_int8_t", + "c_int_fast16_t", "c_int_fast32_t", "c_int_fast64_t", + "c_int_fast8_t", "c_int_least16_t", "c_int_least32_t", + "c_int_least64_t", "c_int_least8_t", "c_intmax_t", + "c_intptr_t", "c_long", "c_long_double", + "c_long_double_complex", "c_long_long", "c_ptr", + "c_short", "c_signed_char", "c_size_t", "character", + "complex", "double", "integer", "logical", "real"]); + var isOperatorChar = /[+\-*&=<>\/\:]/; + var litOperator = /^\.(and|or|eq|lt|le|gt|ge|ne|not|eqv|neqv)\./i; + + function tokenBase(stream, state) { + + if (stream.match(litOperator)){ + return 'operator'; + } + + var ch = stream.next(); + if (ch == "!") { + stream.skipToEnd(); + return "comment"; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]\(\),]/.test(ch)) { + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var word = stream.current().toLowerCase(); + + if (keywords.hasOwnProperty(word)){ + return 'keyword'; + } + if (builtins.hasOwnProperty(word) || dataTypes.hasOwnProperty(word)) { + return 'builtin'; + } + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end || !escaped) state.tokenize = null; + return "string"; + }; + } + + // Interface + + return { + startState: function() { + return {tokenize: null}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + return style; + } + }; +}); + +CodeMirror.defineMIME("text/x-fortran", "fortran"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/gas/gas.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/gas/gas.js new file mode 100644 index 0000000000..016dc29d60 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/gas/gas.js @@ -0,0 +1,353 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("gas", function(_config, parserConfig) { + 'use strict'; + + // If an architecture is specified, its initialization function may + // populate this array with custom parsing functions which will be + // tried in the event that the standard functions do not find a match. + var custom = []; + + // The symbol used to start a line comment changes based on the target + // architecture. + // If no architecture is pased in "parserConfig" then only multiline + // comments will have syntax support. + var lineCommentStartSymbol = ""; + + // These directives are architecture independent. + // Machine specific directives should go in their respective + // architecture initialization function. + // Reference: + // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops + var directives = { + ".abort" : "builtin", + ".align" : "builtin", + ".altmacro" : "builtin", + ".ascii" : "builtin", + ".asciz" : "builtin", + ".balign" : "builtin", + ".balignw" : "builtin", + ".balignl" : "builtin", + ".bundle_align_mode" : "builtin", + ".bundle_lock" : "builtin", + ".bundle_unlock" : "builtin", + ".byte" : "builtin", + ".cfi_startproc" : "builtin", + ".comm" : "builtin", + ".data" : "builtin", + ".def" : "builtin", + ".desc" : "builtin", + ".dim" : "builtin", + ".double" : "builtin", + ".eject" : "builtin", + ".else" : "builtin", + ".elseif" : "builtin", + ".end" : "builtin", + ".endef" : "builtin", + ".endfunc" : "builtin", + ".endif" : "builtin", + ".equ" : "builtin", + ".equiv" : "builtin", + ".eqv" : "builtin", + ".err" : "builtin", + ".error" : "builtin", + ".exitm" : "builtin", + ".extern" : "builtin", + ".fail" : "builtin", + ".file" : "builtin", + ".fill" : "builtin", + ".float" : "builtin", + ".func" : "builtin", + ".global" : "builtin", + ".gnu_attribute" : "builtin", + ".hidden" : "builtin", + ".hword" : "builtin", + ".ident" : "builtin", + ".if" : "builtin", + ".incbin" : "builtin", + ".include" : "builtin", + ".int" : "builtin", + ".internal" : "builtin", + ".irp" : "builtin", + ".irpc" : "builtin", + ".lcomm" : "builtin", + ".lflags" : "builtin", + ".line" : "builtin", + ".linkonce" : "builtin", + ".list" : "builtin", + ".ln" : "builtin", + ".loc" : "builtin", + ".loc_mark_labels" : "builtin", + ".local" : "builtin", + ".long" : "builtin", + ".macro" : "builtin", + ".mri" : "builtin", + ".noaltmacro" : "builtin", + ".nolist" : "builtin", + ".octa" : "builtin", + ".offset" : "builtin", + ".org" : "builtin", + ".p2align" : "builtin", + ".popsection" : "builtin", + ".previous" : "builtin", + ".print" : "builtin", + ".protected" : "builtin", + ".psize" : "builtin", + ".purgem" : "builtin", + ".pushsection" : "builtin", + ".quad" : "builtin", + ".reloc" : "builtin", + ".rept" : "builtin", + ".sbttl" : "builtin", + ".scl" : "builtin", + ".section" : "builtin", + ".set" : "builtin", + ".short" : "builtin", + ".single" : "builtin", + ".size" : "builtin", + ".skip" : "builtin", + ".sleb128" : "builtin", + ".space" : "builtin", + ".stab" : "builtin", + ".string" : "builtin", + ".struct" : "builtin", + ".subsection" : "builtin", + ".symver" : "builtin", + ".tag" : "builtin", + ".text" : "builtin", + ".title" : "builtin", + ".type" : "builtin", + ".uleb128" : "builtin", + ".val" : "builtin", + ".version" : "builtin", + ".vtable_entry" : "builtin", + ".vtable_inherit" : "builtin", + ".warning" : "builtin", + ".weak" : "builtin", + ".weakref" : "builtin", + ".word" : "builtin" + }; + + var registers = {}; + + function x86(_parserConfig) { + lineCommentStartSymbol = "#"; + + registers.al = "variable"; + registers.ah = "variable"; + registers.ax = "variable"; + registers.eax = "variable-2"; + registers.rax = "variable-3"; + + registers.bl = "variable"; + registers.bh = "variable"; + registers.bx = "variable"; + registers.ebx = "variable-2"; + registers.rbx = "variable-3"; + + registers.cl = "variable"; + registers.ch = "variable"; + registers.cx = "variable"; + registers.ecx = "variable-2"; + registers.rcx = "variable-3"; + + registers.dl = "variable"; + registers.dh = "variable"; + registers.dx = "variable"; + registers.edx = "variable-2"; + registers.rdx = "variable-3"; + + registers.si = "variable"; + registers.esi = "variable-2"; + registers.rsi = "variable-3"; + + registers.di = "variable"; + registers.edi = "variable-2"; + registers.rdi = "variable-3"; + + registers.sp = "variable"; + registers.esp = "variable-2"; + registers.rsp = "variable-3"; + + registers.bp = "variable"; + registers.ebp = "variable-2"; + registers.rbp = "variable-3"; + + registers.ip = "variable"; + registers.eip = "variable-2"; + registers.rip = "variable-3"; + + registers.cs = "keyword"; + registers.ds = "keyword"; + registers.ss = "keyword"; + registers.es = "keyword"; + registers.fs = "keyword"; + registers.gs = "keyword"; + } + + function armv6(_parserConfig) { + // Reference: + // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf + // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf + lineCommentStartSymbol = "@"; + directives.syntax = "builtin"; + + registers.r0 = "variable"; + registers.r1 = "variable"; + registers.r2 = "variable"; + registers.r3 = "variable"; + registers.r4 = "variable"; + registers.r5 = "variable"; + registers.r6 = "variable"; + registers.r7 = "variable"; + registers.r8 = "variable"; + registers.r9 = "variable"; + registers.r10 = "variable"; + registers.r11 = "variable"; + registers.r12 = "variable"; + + registers.sp = "variable-2"; + registers.lr = "variable-2"; + registers.pc = "variable-2"; + registers.r13 = registers.sp; + registers.r14 = registers.lr; + registers.r15 = registers.pc; + + custom.push(function(ch, stream) { + if (ch === '#') { + stream.eatWhile(/\w/); + return "number"; + } + }); + } + + var arch = (parserConfig.architecture || "x86").toLowerCase(); + if (arch === "x86") { + x86(parserConfig); + } else if (arch === "arm" || arch === "armv6") { + armv6(parserConfig); + } + + function nextUntilUnescaped(stream, end) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (next === end && !escaped) { + return false; + } + escaped = !escaped && next === "\\"; + } + return escaped; + } + + function clikeComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (ch === "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch === "*"); + } + return "comment"; + } + + return { + startState: function() { + return { + tokenize: null + }; + }, + + token: function(stream, state) { + if (state.tokenize) { + return state.tokenize(stream, state); + } + + if (stream.eatSpace()) { + return null; + } + + var style, cur, ch = stream.next(); + + if (ch === "/") { + if (stream.eat("*")) { + state.tokenize = clikeComment; + return clikeComment(stream, state); + } + } + + if (ch === lineCommentStartSymbol) { + stream.skipToEnd(); + return "comment"; + } + + if (ch === '"') { + nextUntilUnescaped(stream, '"'); + return "string"; + } + + if (ch === '.') { + stream.eatWhile(/\w/); + cur = stream.current().toLowerCase(); + style = directives[cur]; + return style || null; + } + + if (ch === '=') { + stream.eatWhile(/\w/); + return "tag"; + } + + if (ch === '{') { + return "bracket"; + } + + if (ch === '}') { + return "bracket"; + } + + if (/\d/.test(ch)) { + if (ch === "0" && stream.eat("x")) { + stream.eatWhile(/[0-9a-fA-F]/); + return "number"; + } + stream.eatWhile(/\d/); + return "number"; + } + + if (/\w/.test(ch)) { + stream.eatWhile(/\w/); + if (stream.eat(":")) { + return 'tag'; + } + cur = stream.current().toLowerCase(); + style = registers[cur]; + return style || null; + } + + for (var i = 0; i < custom.length; i++) { + style = custom[i](ch, stream, state); + if (style) { + return style; + } + } + }, + + lineComment: lineCommentStartSymbol, + blockCommentStart: "/*", + blockCommentEnd: "*/" + }; +}); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/gfm/gfm.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/gfm/gfm.js new file mode 100644 index 0000000000..492c9487a6 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/gfm/gfm.js @@ -0,0 +1,129 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../markdown/markdown"), require("../../addon/mode/overlay")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../markdown/markdown", "../../addon/mode/overlay"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +var urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i + +CodeMirror.defineMode("gfm", function(config, modeConfig) { + var codeDepth = 0; + function blankLine(state) { + state.code = false; + return null; + } + var gfmOverlay = { + startState: function() { + return { + code: false, + codeBlock: false, + ateSpace: false + }; + }, + copyState: function(s) { + return { + code: s.code, + codeBlock: s.codeBlock, + ateSpace: s.ateSpace + }; + }, + token: function(stream, state) { + state.combineTokens = null; + + // Hack to prevent formatting override inside code blocks (block and inline) + if (state.codeBlock) { + if (stream.match(/^```+/)) { + state.codeBlock = false; + return null; + } + stream.skipToEnd(); + return null; + } + if (stream.sol()) { + state.code = false; + } + if (stream.sol() && stream.match(/^```+/)) { + stream.skipToEnd(); + state.codeBlock = true; + return null; + } + // If this block is changed, it may need to be updated in Markdown mode + if (stream.peek() === '`') { + stream.next(); + var before = stream.pos; + stream.eatWhile('`'); + var difference = 1 + stream.pos - before; + if (!state.code) { + codeDepth = difference; + state.code = true; + } else { + if (difference === codeDepth) { // Must be exact + state.code = false; + } + } + return null; + } else if (state.code) { + stream.next(); + return null; + } + // Check if space. If so, links can be formatted later on + if (stream.eatSpace()) { + state.ateSpace = true; + return null; + } + if (stream.sol() || state.ateSpace) { + state.ateSpace = false; + if (modeConfig.gitHubSpice !== false) { + if(stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/)) { + // User/Project@SHA + // User@SHA + // SHA + state.combineTokens = true; + return "link"; + } else if (stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/)) { + // User/Project#Num + // User#Num + // #Num + state.combineTokens = true; + return "link"; + } + } + } + if (stream.match(urlRE) && + stream.string.slice(stream.start - 2, stream.start) != "](" && + (stream.start == 0 || /\W/.test(stream.string.charAt(stream.start - 1)))) { + // URLs + // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls + // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine + // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL + state.combineTokens = true; + return "link"; + } + stream.next(); + return null; + }, + blankLine: blankLine + }; + + var markdownConfig = { + taskLists: true, + strikethrough: true, + emoji: true + }; + for (var attr in modeConfig) { + markdownConfig[attr] = modeConfig[attr]; + } + markdownConfig.name = "markdown"; + return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay); + +}, "markdown"); + + CodeMirror.defineMIME("text/x-gfm", "gfm"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/gherkin/gherkin.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/gherkin/gherkin.js new file mode 100644 index 0000000000..1b438b9057 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/gherkin/gherkin.js @@ -0,0 +1,178 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/* +Gherkin mode - http://www.cukes.info/ +Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues +*/ + +// Following Objs from Brackets implementation: https://github.com/tregusti/brackets-gherkin/blob/master/main.js +//var Quotes = { +// SINGLE: 1, +// DOUBLE: 2 +//}; + +//var regex = { +// keywords: /(Feature| {2}(Scenario|In order to|As|I)| {4}(Given|When|Then|And))/ +//}; + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("gherkin", function () { + return { + startState: function () { + return { + lineNumber: 0, + tableHeaderLine: false, + allowFeature: true, + allowBackground: false, + allowScenario: false, + allowSteps: false, + allowPlaceholders: false, + allowMultilineArgument: false, + inMultilineString: false, + inMultilineTable: false, + inKeywordLine: false + }; + }, + token: function (stream, state) { + if (stream.sol()) { + state.lineNumber++; + state.inKeywordLine = false; + if (state.inMultilineTable) { + state.tableHeaderLine = false; + if (!stream.match(/\s*\|/, false)) { + state.allowMultilineArgument = false; + state.inMultilineTable = false; + } + } + } + + stream.eatSpace(); + + if (state.allowMultilineArgument) { + + // STRING + if (state.inMultilineString) { + if (stream.match('"""')) { + state.inMultilineString = false; + state.allowMultilineArgument = false; + } else { + stream.match(/.*/); + } + return "string"; + } + + // TABLE + if (state.inMultilineTable) { + if (stream.match(/\|\s*/)) { + return "bracket"; + } else { + stream.match(/[^\|]*/); + return state.tableHeaderLine ? "header" : "string"; + } + } + + // DETECT START + if (stream.match('"""')) { + // String + state.inMultilineString = true; + return "string"; + } else if (stream.match("|")) { + // Table + state.inMultilineTable = true; + state.tableHeaderLine = true; + return "bracket"; + } + + } + + // LINE COMMENT + if (stream.match(/#.*/)) { + return "comment"; + + // TAG + } else if (!state.inKeywordLine && stream.match(/@\S+/)) { + return "tag"; + + // FEATURE + } else if (!state.inKeywordLine && state.allowFeature && stream.match(/(機能|功能|フィーチャ|기능|โครงหลัก|ความสามารถ|ความต้องการทางธุรกิจ|ಹೆಚ್ಚಳ|గుణము|ਮੁਹਾਂਦਰਾ|ਨਕਸ਼ ਨੁਹਾਰ|ਖਾਸੀਅਤ|रूप लेख|وِیژگی|خاصية|תכונה|Функціонал|Функция|Функционалност|Функционал|Үзенчәлеклелек|Свойство|Особина|Мөмкинлек|Могућност|Λειτουργία|Δυνατότητα|Właściwość|Vlastnosť|Trajto|Tính năng|Savybė|Pretty much|Požiadavka|Požadavek|Potrzeba biznesowa|Özellik|Osobina|Ominaisuus|Omadus|OH HAI|Mogućnost|Mogucnost|Jellemző|Hwæt|Hwaet|Funzionalità|Funktionalitéit|Funktionalität|Funkcja|Funkcionalnost|Funkcionalitāte|Funkcia|Fungsi|Functionaliteit|Funcționalitate|Funcţionalitate|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|Fīča|Feature|Eiginleiki|Egenskap|Egenskab|Característica|Caracteristica|Business Need|Aspekt|Arwedd|Ahoy matey!|Ability):/)) { + state.allowScenario = true; + state.allowBackground = true; + state.allowPlaceholders = false; + state.allowSteps = false; + state.allowMultilineArgument = false; + state.inKeywordLine = true; + return "keyword"; + + // BACKGROUND + } else if (!state.inKeywordLine && state.allowBackground && stream.match(/(背景|배경|แนวคิด|ಹಿನ್ನೆಲೆ|నేపథ్యం|ਪਿਛੋਕੜ|पृष्ठभूमि|زمینه|الخلفية|רקע|Тарих|Предыстория|Предистория|Позадина|Передумова|Основа|Контекст|Кереш|Υπόβαθρο|Założenia|Yo\-ho\-ho|Tausta|Taust|Situācija|Rerefons|Pozadina|Pozadie|Pozadí|Osnova|Latar Belakang|Kontext|Konteksts|Kontekstas|Kontekst|Háttér|Hannergrond|Grundlage|Geçmiş|Fundo|Fono|First off|Dis is what went down|Dasar|Contexto|Contexte|Context|Contesto|Cenário de Fundo|Cenario de Fundo|Cefndir|Bối cảnh|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Antecedents|Antecedentes|Ær|Aer|Achtergrond):/)) { + state.allowPlaceholders = false; + state.allowSteps = true; + state.allowBackground = false; + state.allowMultilineArgument = false; + state.inKeywordLine = true; + return "keyword"; + + // SCENARIO OUTLINE + } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景大綱|场景大纲|劇本大綱|剧本大纲|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|시나리오 개요|สรุปเหตุการณ์|โครงสร้างของเหตุการณ์|ವಿವರಣೆ|కథనం|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਟਕਥਾ ਢਾਂਚਾ|परिदृश्य रूपरेखा|سيناريو مخطط|الگوی سناریو|תבנית תרחיש|Сценарийның төзелеше|Сценарий структураси|Структура сценарію|Структура сценария|Структура сценарија|Скица|Рамка на сценарий|Концепт|Περιγραφή Σεναρίου|Wharrimean is|Template Situai|Template Senario|Template Keadaan|Tapausaihio|Szenariogrundriss|Szablon scenariusza|Swa hwær swa|Swa hwaer swa|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario konsep|Shiver me timbers|Senaryo taslağı|Schema dello scenario|Scenariomall|Scenariomal|Scenario Template|Scenario Outline|Scenario Amlinellol|Scenārijs pēc parauga|Scenarijaus šablonas|Reckon it's like|Raamstsenaarium|Plang vum Szenario|Plan du Scénario|Plan du scénario|Osnova scénáře|Osnova Scenára|Náčrt Scenáru|Náčrt Scénáře|Náčrt Scenára|MISHUN SRSLY|Menggariskan Senario|Lýsing Dæma|Lýsing Atburðarásar|Konturo de la scenaro|Koncept|Khung tình huống|Khung kịch bản|Forgatókönyv vázlat|Esquema do Cenário|Esquema do Cenario|Esquema del escenario|Esquema de l'escenari|Esbozo do escenario|Delineação do Cenário|Delineacao do Cenario|All y'all|Abstrakt Scenario|Abstract Scenario):/)) { + state.allowPlaceholders = true; + state.allowSteps = true; + state.allowMultilineArgument = false; + state.inKeywordLine = true; + return "keyword"; + + // EXAMPLES + } else if (state.allowScenario && stream.match(/(例子|例|サンプル|예|ชุดของเหตุการณ์|ชุดของตัวอย่าง|ಉದಾಹರಣೆಗಳು|ఉదాహరణలు|ਉਦਾਹਰਨਾਂ|उदाहरण|نمونه ها|امثلة|דוגמאות|Үрнәкләр|Сценарији|Примеры|Примери|Приклади|Мисоллар|Мисаллар|Σενάρια|Παραδείγματα|You'll wanna|Voorbeelden|Variantai|Tapaukset|Se þe|Se the|Se ðe|Scenarios|Scenariji|Scenarijai|Przykłady|Primjeri|Primeri|Příklady|Príklady|Piemēri|Példák|Pavyzdžiai|Paraugs|Örnekler|Juhtumid|Exemplos|Exemples|Exemple|Exempel|EXAMPLZ|Examples|Esempi|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|Dữ liệu|Dead men tell no tales|Dæmi|Contoh|Cenários|Cenarios|Beispiller|Beispiele|Atburðarásir):/)) { + state.allowPlaceholders = false; + state.allowSteps = true; + state.allowBackground = false; + state.allowMultilineArgument = true; + return "keyword"; + + // SCENARIO + } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景|场景|劇本|剧本|シナリオ|시나리오|เหตุการณ์|ಕಥಾಸಾರಾಂಶ|సన్నివేశం|ਪਟਕਥਾ|परिदृश्य|سيناريو|سناریو|תרחיש|Сценарій|Сценарио|Сценарий|Пример|Σενάριο|Tình huống|The thing of it is|Tapaus|Szenario|Swa|Stsenaarium|Skenario|Situai|Senaryo|Senario|Scenaro|Scenariusz|Scenariu|Scénario|Scenario|Scenarijus|Scenārijs|Scenarij|Scenarie|Scénář|Scenár|Primer|MISHUN|Kịch bản|Keadaan|Heave to|Forgatókönyv|Escenario|Escenari|Cenário|Cenario|Awww, look mate|Atburðarás):/)) { + state.allowPlaceholders = false; + state.allowSteps = true; + state.allowBackground = false; + state.allowMultilineArgument = false; + state.inKeywordLine = true; + return "keyword"; + + // STEPS + } else if (!state.inKeywordLine && state.allowSteps && stream.match(/(那麼|那么|而且|當|当|并且|同時|同时|前提|假设|假設|假定|假如|但是|但し|並且|もし|ならば|ただし|しかし|かつ|하지만|조건|먼저|만일|만약|단|그리고|그러면|และ |เมื่อ |แต่ |ดังนั้น |กำหนดให้ |ಸ್ಥಿತಿಯನ್ನು |ಮತ್ತು |ನೀಡಿದ |ನಂತರ |ಆದರೆ |మరియు |చెప్పబడినది |కాని |ఈ పరిస్థితిలో |అప్పుడు |ਪਰ |ਤਦ |ਜੇਕਰ |ਜਿਵੇਂ ਕਿ |ਜਦੋਂ |ਅਤੇ |यदि |परन्तु |पर |तब |तदा |तथा |जब |चूंकि |किन्तु |कदा |और |अगर |و |هنگامی |متى |لكن |عندما |ثم |بفرض |با فرض |اما |اذاً |آنگاه |כאשר |וגם |בהינתן |אזי |אז |אבל |Якщо |Һәм |Унда |Тоді |Тогда |То |Также |Та |Пусть |Припустимо, що |Припустимо |Онда |Но |Нехай |Нәтиҗәдә |Лекин |Ләкин |Коли |Когда |Когато |Када |Кад |К тому же |І |И |Задато |Задати |Задате |Если |Допустим |Дано |Дадено |Вә |Ва |Бирок |Әмма |Әйтик |Әгәр |Аммо |Али |Але |Агар |А також |А |Τότε |Όταν |Και |Δεδομένου |Αλλά |Þurh |Þegar |Þa þe |Þá |Þa |Zatati |Zakładając |Zadato |Zadate |Zadano |Zadani |Zadan |Za předpokladu |Za predpokladu |Youse know when youse got |Youse know like when |Yna |Yeah nah |Y'know |Y |Wun |Wtedy |When y'all |When |Wenn |WEN |wann |Ve |Và |Und |Un |ugeholl |Too right |Thurh |Thì |Then y'all |Then |Tha the |Tha |Tetapi |Tapi |Tak |Tada |Tad |Stel |Soit |Siis |Și |Şi |Si |Sed |Se |Så |Quando |Quand |Quan |Pryd |Potom |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O zaman |Niin |Nhưng |När |Når |Mutta |Men |Mas |Maka |Majd |Mając |Mais |Maar |mä |Ma |Lorsque |Lorsqu'|Logo |Let go and haul |Kun |Kuid |Kui |Kiedy |Khi |Ketika |Kemudian |Keď |Když |Kaj |Kai |Kada |Kad |Jeżeli |Jeśli |Ja |It's just unbelievable |Ir |I CAN HAZ |I |Ha |Givun |Givet |Given y'all |Given |Gitt |Gegeven |Gegeben seien |Gegeben sei |Gdy |Gangway! |Fakat |Étant donnés |Etant donnés |Étant données |Etant données |Étant donnée |Etant donnée |Étant donné |Etant donné |Et |És |Entonces |Entón |Então |Entao |En |Eğer ki |Ef |Eeldades |E |Ðurh |Duota |Dun |Donitaĵo |Donat |Donada |Do |Diyelim ki |Diberi |Dengan |Den youse gotta |DEN |De |Dato |Dați fiind |Daţi fiind |Dati fiind |Dati |Date fiind |Date |Data |Dat fiind |Dar |Dann |dann |Dan |Dados |Dado |Dadas |Dada |Ða ðe |Ða |Cuando |Cho |Cando |Când |Cand |Cal |But y'all |But at the end of the day I reckon |BUT |But |Buh |Blimey! |Biết |Bet |Bagi |Aye |awer |Avast! |Atunci |Atesa |Atès |Apabila |Anrhegedig a |Angenommen |And y'all |And |AN |An |an |Amikor |Amennyiben |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Ak |Adott |Ac |Aber |A zároveň |A tiež |A taktiež |A také |A |a |7 |\* )/)) { + state.inStep = true; + state.allowPlaceholders = true; + state.allowMultilineArgument = true; + state.inKeywordLine = true; + return "keyword"; + + // INLINE STRING + } else if (stream.match(/"[^"]*"?/)) { + return "string"; + + // PLACEHOLDER + } else if (state.allowPlaceholders && stream.match(/<[^>]*>?/)) { + return "variable"; + + // Fall through + } else { + stream.next(); + stream.eatWhile(/[^@"<#]/); + return null; + } + } + }; +}); + +CodeMirror.defineMIME("text/x-feature", "gherkin"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/go/go.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/go/go.js new file mode 100644 index 0000000000..c005e42ddc --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/go/go.js @@ -0,0 +1,187 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("go", function(config) { + var indentUnit = config.indentUnit; + + var keywords = { + "break":true, "case":true, "chan":true, "const":true, "continue":true, + "default":true, "defer":true, "else":true, "fallthrough":true, "for":true, + "func":true, "go":true, "goto":true, "if":true, "import":true, + "interface":true, "map":true, "package":true, "range":true, "return":true, + "select":true, "struct":true, "switch":true, "type":true, "var":true, + "bool":true, "byte":true, "complex64":true, "complex128":true, + "float32":true, "float64":true, "int8":true, "int16":true, "int32":true, + "int64":true, "string":true, "uint8":true, "uint16":true, "uint32":true, + "uint64":true, "int":true, "uint":true, "uintptr":true, "error": true, + "rune":true + }; + + var atoms = { + "true":true, "false":true, "iota":true, "nil":true, "append":true, + "cap":true, "close":true, "complex":true, "copy":true, "delete":true, "imag":true, + "len":true, "make":true, "new":true, "panic":true, "print":true, + "println":true, "real":true, "recover":true + }; + + var isOperatorChar = /[+\-*&^%:=<>!|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'" || ch == "`") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\d\.]/.test(ch)) { + if (ch == ".") { + stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); + } else if (ch == "0") { + stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); + } else { + stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); + } + return "number"; + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) { + if (cur == "case" || cur == "default") curPunc = "case"; + return "keyword"; + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && quote != "`" && next == "\\"; + } + if (end || !(escaped || quote == "`")) + state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + function popContext(state) { + if (!state.context.prev) return; + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + if (ctx.type == "case") ctx.type = "}"; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "case") ctx.type = "case"; + else if (curPunc == "}" && ctx.type == "}") popContext(state); + else if (curPunc == ctx.type) popContext(state); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "case" && /^(?:case|default)\b/.test(textAfter)) { + state.context.type = "}"; + return ctx.indented; + } + var closing = firstChar == ctx.type; + if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}):", + closeBrackets: "()[]{}''\"\"``", + fold: "brace", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//" + }; +}); + +CodeMirror.defineMIME("text/x-go", "go"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/groovy/groovy.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/groovy/groovy.js new file mode 100644 index 0000000000..848a07719f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/groovy/groovy.js @@ -0,0 +1,247 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("groovy", function(config) { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var keywords = words( + "abstract as assert boolean break byte case catch char class const continue def default " + + "do double else enum extends final finally float for goto if implements import in " + + "instanceof int interface long native new package private protected public return " + + "short static strictfp super switch synchronized threadsafe throw throws trait transient " + + "try void volatile while"); + var blockKeywords = words("catch class def do else enum finally for if interface switch trait try while"); + var standaloneKeywords = words("return break continue"); + var atoms = words("null true false this"); + + var curPunc; + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + return startString(ch, stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + if (stream.eat(/eE/)) { stream.eat(/\+\-/); stream.eatWhile(/\d/); } + return "number"; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize.push(tokenComment); + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + if (expectExpression(state.lastToken, false)) { + return startString(ch, stream, state); + } + } + if (ch == "-" && stream.eat(">")) { + curPunc = "->"; + return null; + } + if (/[+\-*&%=<>!?|\/~]/.test(ch)) { + stream.eatWhile(/[+\-*&%=<>|~]/); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + if (ch == "@") { stream.eatWhile(/[\w\$_\.]/); return "meta"; } + if (state.lastToken == ".") return "property"; + if (stream.eat(":")) { curPunc = "proplabel"; return "property"; } + var cur = stream.current(); + if (atoms.propertyIsEnumerable(cur)) { return "atom"; } + if (keywords.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + else if (standaloneKeywords.propertyIsEnumerable(cur)) curPunc = "standalone"; + return "keyword"; + } + return "variable"; + } + tokenBase.isBase = true; + + function startString(quote, stream, state) { + var tripleQuoted = false; + if (quote != "/" && stream.eat(quote)) { + if (stream.eat(quote)) tripleQuoted = true; + else return "string"; + } + function t(stream, state) { + var escaped = false, next, end = !tripleQuoted; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + if (!tripleQuoted) { break; } + if (stream.match(quote + quote)) { end = true; break; } + } + if (quote == '"' && next == "$" && !escaped) { + if (stream.eat("{")) { + state.tokenize.push(tokenBaseUntilBrace()); + return "string"; + } else if (stream.match(/^\w/, false)) { + state.tokenize.push(tokenVariableDeref); + return "string"; + } + } + escaped = !escaped && next == "\\"; + } + if (end) state.tokenize.pop(); + return "string"; + } + state.tokenize.push(t); + return t(stream, state); + } + + function tokenBaseUntilBrace() { + var depth = 1; + function t(stream, state) { + if (stream.peek() == "}") { + depth--; + if (depth == 0) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } + } else if (stream.peek() == "{") { + depth++; + } + return tokenBase(stream, state); + } + t.isBase = true; + return t; + } + + function tokenVariableDeref(stream, state) { + var next = stream.match(/^(\.|[\w\$_]+)/) + if (!next) { + state.tokenize.pop() + return state.tokenize[state.tokenize.length-1](stream, state) + } + return next[0] == "." ? null : "variable" + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize.pop(); + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function expectExpression(last, newline) { + return !last || last == "operator" || last == "->" || /[\.\[\{\(,;:]/.test(last) || + last == "newstatement" || last == "keyword" || last == "proplabel" || + (last == "standalone" && !newline); + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + return state.context = new Context(state.indented, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: [tokenBase], + context: new Context((basecolumn || 0) - config.indentUnit, 0, "top", false), + indented: 0, + startOfLine: true, + lastToken: null + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + // Automatic semicolon insertion + if (ctx.type == "statement" && !expectExpression(state.lastToken, true)) { + popContext(state); ctx = state.context; + } + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = state.tokenize[state.tokenize.length-1](stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); + // Handle indentation for {x -> \n ... } + else if (curPunc == "->" && ctx.type == "statement" && ctx.prev.type == "}") { + popContext(state); + state.context.align = false; + } + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + state.lastToken = curPunc || style; + return style; + }, + + indent: function(state, textAfter) { + if (!state.tokenize[state.tokenize.length-1].isBase) return CodeMirror.Pass; + var firstChar = textAfter && textAfter.charAt(0), ctx = state.context; + if (ctx.type == "statement" && !expectExpression(state.lastToken, true)) ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : config.indentUnit); + else if (ctx.align) return ctx.column + (closing ? 0 : 1); + else return ctx.indented + (closing ? 0 : config.indentUnit); + }, + + electricChars: "{}", + closeBrackets: {triples: "'\""}, + fold: "brace", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//" + }; +}); + +CodeMirror.defineMIME("text/x-groovy", "groovy"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haml/haml.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haml/haml.js new file mode 100644 index 0000000000..d941d97433 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haml/haml.js @@ -0,0 +1,161 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../ruby/ruby")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + + // full haml mode. This handled embedded ruby and html fragments too + CodeMirror.defineMode("haml", function(config) { + var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); + var rubyMode = CodeMirror.getMode(config, "ruby"); + + function rubyInQuote(endQuote) { + return function(stream, state) { + var ch = stream.peek(); + if (ch == endQuote && state.rubyState.tokenize.length == 1) { + // step out of ruby context as it seems to complete processing all the braces + stream.next(); + state.tokenize = html; + return "closeAttributeTag"; + } else { + return ruby(stream, state); + } + }; + } + + function ruby(stream, state) { + if (stream.match("-#")) { + stream.skipToEnd(); + return "comment"; + } + return rubyMode.token(stream, state.rubyState); + } + + function html(stream, state) { + var ch = stream.peek(); + + // handle haml declarations. All declarations that cant be handled here + // will be passed to html mode + if (state.previousToken.style == "comment" ) { + if (state.indented > state.previousToken.indented) { + stream.skipToEnd(); + return "commentLine"; + } + } + + if (state.startOfLine) { + if (ch == "!" && stream.match("!!")) { + stream.skipToEnd(); + return "tag"; + } else if (stream.match(/^%[\w:#\.]+=/)) { + state.tokenize = ruby; + return "hamlTag"; + } else if (stream.match(/^%[\w:]+/)) { + return "hamlTag"; + } else if (ch == "/" ) { + stream.skipToEnd(); + return "comment"; + } + } + + if (state.startOfLine || state.previousToken.style == "hamlTag") { + if ( ch == "#" || ch == ".") { + stream.match(/[\w-#\.]*/); + return "hamlAttribute"; + } + } + + // do not handle --> as valid ruby, make it HTML close comment instead + if (state.startOfLine && !stream.match("-->", false) && (ch == "=" || ch == "-" )) { + state.tokenize = ruby; + return state.tokenize(stream, state); + } + + if (state.previousToken.style == "hamlTag" || + state.previousToken.style == "closeAttributeTag" || + state.previousToken.style == "hamlAttribute") { + if (ch == "(") { + state.tokenize = rubyInQuote(")"); + return state.tokenize(stream, state); + } else if (ch == "{") { + if (!stream.match(/^\{%.*/)) { + state.tokenize = rubyInQuote("}"); + return state.tokenize(stream, state); + } + } + } + + return htmlMode.token(stream, state.htmlState); + } + + return { + // default to html mode + startState: function() { + var htmlState = CodeMirror.startState(htmlMode); + var rubyState = CodeMirror.startState(rubyMode); + return { + htmlState: htmlState, + rubyState: rubyState, + indented: 0, + previousToken: { style: null, indented: 0}, + tokenize: html + }; + }, + + copyState: function(state) { + return { + htmlState : CodeMirror.copyState(htmlMode, state.htmlState), + rubyState: CodeMirror.copyState(rubyMode, state.rubyState), + indented: state.indented, + previousToken: state.previousToken, + tokenize: state.tokenize + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + state.startOfLine = false; + // dont record comment line as we only want to measure comment line with + // the opening comment block + if (style && style != "commentLine") { + state.previousToken = { style: style, indented: state.indented }; + } + // if current state is ruby and the previous token is not `,` reset the + // tokenize to html + if (stream.eol() && state.tokenize == ruby) { + stream.backUp(1); + var ch = stream.peek(); + stream.next(); + if (ch && ch != ",") { + state.tokenize = html; + } + } + // reprocess some of the specific style tag when finish setting previousToken + if (style == "hamlTag") { + style = "tag"; + } else if (style == "commentLine") { + style = "comment"; + } else if (style == "hamlAttribute") { + style = "attribute"; + } else if (style == "closeAttributeTag") { + style = null; + } + return style; + } + }; + }, "htmlmixed", "ruby"); + + CodeMirror.defineMIME("text/x-haml", "haml"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/handlebars/handlebars.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/handlebars/handlebars.js new file mode 100644 index 0000000000..359871a20d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/handlebars/handlebars.js @@ -0,0 +1,70 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple"), require("../../addon/mode/multiplex")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple", "../../addon/mode/multiplex"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineSimpleMode("handlebars-tags", { + start: [ + { regex: /\{\{\{/, push: "handlebars_raw", token: "tag" }, + { regex: /\{\{!--/, push: "dash_comment", token: "comment" }, + { regex: /\{\{!/, push: "comment", token: "comment" }, + { regex: /\{\{/, push: "handlebars", token: "tag" } + ], + handlebars_raw: [ + { regex: /\}\}\}/, pop: true, token: "tag" }, + ], + handlebars: [ + { regex: /\}\}/, pop: true, token: "tag" }, + + // Double and single quotes + { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, + { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, + + // Handlebars keywords + { regex: />|[#\/]([A-Za-z_]\w*)/, token: "keyword" }, + { regex: /(?:else|this)\b/, token: "keyword" }, + + // Numeral + { regex: /\d+/i, token: "number" }, + + // Atoms like = and . + { regex: /=|~|@|true|false/, token: "atom" }, + + // Paths + { regex: /(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/, token: "variable-2" } + ], + dash_comment: [ + { regex: /--\}\}/, pop: true, token: "comment" }, + + // Commented code + { regex: /./, token: "comment"} + ], + comment: [ + { regex: /\}\}/, pop: true, token: "comment" }, + { regex: /./, token: "comment" } + ], + meta: { + blockCommentStart: "{{--", + blockCommentEnd: "--}}" + } + }); + + CodeMirror.defineMode("handlebars", function(config, parserConfig) { + var handlebars = CodeMirror.getMode(config, "handlebars-tags"); + if (!parserConfig || !parserConfig.base) return handlebars; + return CodeMirror.multiplexingMode( + CodeMirror.getMode(config, parserConfig.base), + {open: "{{", close: /\}\}\}?/, mode: handlebars, parseDelimiters: true} + ); + }); + + CodeMirror.defineMIME("text/x-handlebars-template", "handlebars"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haskell-literate/haskell-literate.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haskell-literate/haskell-literate.js new file mode 100644 index 0000000000..4bb9268491 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haskell-literate/haskell-literate.js @@ -0,0 +1,43 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../haskell/haskell")) + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../haskell/haskell"], mod) + else // Plain browser env + mod(CodeMirror) +})(function (CodeMirror) { + "use strict" + + CodeMirror.defineMode("haskell-literate", function (config, parserConfig) { + var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell") + + return { + startState: function () { + return { + inCode: false, + baseState: CodeMirror.startState(baseMode) + } + }, + token: function (stream, state) { + if (stream.sol()) { + if (state.inCode = stream.eat(">")) + return "meta" + } + if (state.inCode) { + return baseMode.token(stream, state.baseState) + } else { + stream.skipToEnd() + return "comment" + } + }, + innerMode: function (state) { + return state.inCode ? {state: state.baseState, mode: baseMode} : null + } + } + }, "haskell") + + CodeMirror.defineMIME("text/x-literate-haskell", "haskell-literate") +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haskell/haskell.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haskell/haskell.js new file mode 100644 index 0000000000..2e882dc600 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haskell/haskell.js @@ -0,0 +1,268 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("haskell", function(_config, modeConfig) { + + function switchState(source, setState, f) { + setState(f); + return f(source, setState); + } + + // These should all be Unicode extended, as per the Haskell 2010 report + var smallRE = /[a-z_]/; + var largeRE = /[A-Z]/; + var digitRE = /\d/; + var hexitRE = /[0-9A-Fa-f]/; + var octitRE = /[0-7]/; + var idRE = /[a-z_A-Z0-9'\xa1-\uffff]/; + var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:]/; + var specialRE = /[(),;[\]`{}]/; + var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer + + function normal(source, setState) { + if (source.eatWhile(whiteCharRE)) { + return null; + } + + var ch = source.next(); + if (specialRE.test(ch)) { + if (ch == '{' && source.eat('-')) { + var t = "comment"; + if (source.eat('#')) { + t = "meta"; + } + return switchState(source, setState, ncomment(t, 1)); + } + return null; + } + + if (ch == '\'') { + if (source.eat('\\')) { + source.next(); // should handle other escapes here + } + else { + source.next(); + } + if (source.eat('\'')) { + return "string"; + } + return "string error"; + } + + if (ch == '"') { + return switchState(source, setState, stringLiteral); + } + + if (largeRE.test(ch)) { + source.eatWhile(idRE); + if (source.eat('.')) { + return "qualifier"; + } + return "variable-2"; + } + + if (smallRE.test(ch)) { + source.eatWhile(idRE); + return "variable"; + } + + if (digitRE.test(ch)) { + if (ch == '0') { + if (source.eat(/[xX]/)) { + source.eatWhile(hexitRE); // should require at least 1 + return "integer"; + } + if (source.eat(/[oO]/)) { + source.eatWhile(octitRE); // should require at least 1 + return "number"; + } + } + source.eatWhile(digitRE); + var t = "number"; + if (source.match(/^\.\d+/)) { + t = "number"; + } + if (source.eat(/[eE]/)) { + t = "number"; + source.eat(/[-+]/); + source.eatWhile(digitRE); // should require at least 1 + } + return t; + } + + if (ch == "." && source.eat(".")) + return "keyword"; + + if (symbolRE.test(ch)) { + if (ch == '-' && source.eat(/-/)) { + source.eatWhile(/-/); + if (!source.eat(symbolRE)) { + source.skipToEnd(); + return "comment"; + } + } + var t = "variable"; + if (ch == ':') { + t = "variable-2"; + } + source.eatWhile(symbolRE); + return t; + } + + return "error"; + } + + function ncomment(type, nest) { + if (nest == 0) { + return normal; + } + return function(source, setState) { + var currNest = nest; + while (!source.eol()) { + var ch = source.next(); + if (ch == '{' && source.eat('-')) { + ++currNest; + } + else if (ch == '-' && source.eat('}')) { + --currNest; + if (currNest == 0) { + setState(normal); + return type; + } + } + } + setState(ncomment(type, currNest)); + return type; + }; + } + + function stringLiteral(source, setState) { + while (!source.eol()) { + var ch = source.next(); + if (ch == '"') { + setState(normal); + return "string"; + } + if (ch == '\\') { + if (source.eol() || source.eat(whiteCharRE)) { + setState(stringGap); + return "string"; + } + if (source.eat('&')) { + } + else { + source.next(); // should handle other escapes here + } + } + } + setState(normal); + return "string error"; + } + + function stringGap(source, setState) { + if (source.eat('\\')) { + return switchState(source, setState, stringLiteral); + } + source.next(); + setState(normal); + return "error"; + } + + + var wellKnownWords = (function() { + var wkw = {}; + function setType(t) { + return function () { + for (var i = 0; i < arguments.length; i++) + wkw[arguments[i]] = t; + }; + } + + setType("keyword")( + "case", "class", "data", "default", "deriving", "do", "else", "foreign", + "if", "import", "in", "infix", "infixl", "infixr", "instance", "let", + "module", "newtype", "of", "then", "type", "where", "_"); + + setType("keyword")( + "\.\.", ":", "::", "=", "\\", "<-", "->", "@", "~", "=>"); + + setType("builtin")( + "!!", "$!", "$", "&&", "+", "++", "-", ".", "/", "/=", "<", "<*", "<=", + "<$>", "<*>", "=<<", "==", ">", ">=", ">>", ">>=", "^", "^^", "||", "*", + "*>", "**"); + + setType("builtin")( + "Applicative", "Bool", "Bounded", "Char", "Double", "EQ", "Either", "Enum", + "Eq", "False", "FilePath", "Float", "Floating", "Fractional", "Functor", + "GT", "IO", "IOError", "Int", "Integer", "Integral", "Just", "LT", "Left", + "Maybe", "Monad", "Nothing", "Num", "Ord", "Ordering", "Rational", "Read", + "ReadS", "Real", "RealFloat", "RealFrac", "Right", "Show", "ShowS", + "String", "True"); + + setType("builtin")( + "abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf", + "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling", + "compare", "concat", "concatMap", "const", "cos", "cosh", "curry", + "cycle", "decodeFloat", "div", "divMod", "drop", "dropWhile", "either", + "elem", "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo", + "enumFromTo", "error", "even", "exp", "exponent", "fail", "filter", + "flip", "floatDigits", "floatRadix", "floatRange", "floor", "fmap", + "foldl", "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger", + "fromIntegral", "fromRational", "fst", "gcd", "getChar", "getContents", + "getLine", "head", "id", "init", "interact", "ioError", "isDenormalized", + "isIEEE", "isInfinite", "isNaN", "isNegativeZero", "iterate", "last", + "lcm", "length", "lex", "lines", "log", "logBase", "lookup", "map", + "mapM", "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound", + "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or", + "otherwise", "pi", "pred", "print", "product", "properFraction", "pure", + "putChar", "putStr", "putStrLn", "quot", "quotRem", "read", "readFile", + "readIO", "readList", "readLn", "readParen", "reads", "readsPrec", + "realToFrac", "recip", "rem", "repeat", "replicate", "return", "reverse", + "round", "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq", + "sequence", "sequence_", "show", "showChar", "showList", "showParen", + "showString", "shows", "showsPrec", "significand", "signum", "sin", + "sinh", "snd", "span", "splitAt", "sqrt", "subtract", "succ", "sum", + "tail", "take", "takeWhile", "tan", "tanh", "toEnum", "toInteger", + "toRational", "truncate", "uncurry", "undefined", "unlines", "until", + "unwords", "unzip", "unzip3", "userError", "words", "writeFile", "zip", + "zip3", "zipWith", "zipWith3"); + + var override = modeConfig.overrideKeywords; + if (override) for (var word in override) if (override.hasOwnProperty(word)) + wkw[word] = override[word]; + + return wkw; + })(); + + + + return { + startState: function () { return { f: normal }; }, + copyState: function (s) { return { f: s.f }; }, + + token: function(stream, state) { + var t = state.f(stream, function(s) { state.f = s; }); + var w = stream.current(); + return wellKnownWords.hasOwnProperty(w) ? wellKnownWords[w] : t; + }, + + blockCommentStart: "{-", + blockCommentEnd: "-}", + lineComment: "--" + }; + +}); + +CodeMirror.defineMIME("text/x-haskell", "haskell"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haxe/haxe.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haxe/haxe.js new file mode 100644 index 0000000000..45376852a6 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/haxe/haxe.js @@ -0,0 +1,515 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("haxe", function(config, parserConfig) { + var indentUnit = config.indentUnit; + + // Tokenizer + + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}, attribute = {type:"attribute", style: "attribute"}; + var type = kw("typedef"); + var keywords = { + "if": A, "while": A, "else": B, "do": B, "try": B, + "return": C, "break": C, "continue": C, "new": C, "throw": C, + "var": kw("var"), "inline":attribute, "static": attribute, "using":kw("import"), + "public": attribute, "private": attribute, "cast": kw("cast"), "import": kw("import"), "macro": kw("macro"), + "function": kw("function"), "catch": kw("catch"), "untyped": kw("untyped"), "callback": kw("cb"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "never": kw("property_access"), "trace":kw("trace"), + "class": type, "abstract":type, "enum":type, "interface":type, "typedef":type, "extends":type, "implements":type, "dynamic":type, + "true": atom, "false": atom, "null": atom + }; + + var isOperatorChar = /[+\-*&%=<>!?|]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function toUnescaped(stream, end) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (next == end && !escaped) + return true; + escaped = !escaped && next == "\\"; + } + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + + function haxeTokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + return chain(stream, state, haxeTokenString(ch)); + } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return ret(ch); + } else if (ch == "0" && stream.eat(/x/i)) { + stream.eatWhile(/[\da-f]/i); + return ret("number", "number"); + } else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) { + stream.match(/^\d*(?:\.\d*(?!\.))?(?:[eE][+\-]?\d+)?/); + return ret("number", "number"); + } else if (state.reAllowed && (ch == "~" && stream.eat(/\//))) { + toUnescaped(stream, "/"); + stream.eatWhile(/[gimsu]/); + return ret("regexp", "string-2"); + } else if (ch == "/") { + if (stream.eat("*")) { + return chain(stream, state, haxeTokenComment); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else { + stream.eatWhile(isOperatorChar); + return ret("operator", null, stream.current()); + } + } else if (ch == "#") { + stream.skipToEnd(); + return ret("conditional", "meta"); + } else if (ch == "@") { + stream.eat(/:/); + stream.eatWhile(/[\w_]/); + return ret ("metadata", "meta"); + } else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return ret("operator", null, stream.current()); + } else { + var word; + if(/[A-Z]/.test(ch)) { + stream.eatWhile(/[\w_<>]/); + word = stream.current(); + return ret("type", "variable-3", word); + } else { + stream.eatWhile(/[\w_]/); + var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; + return (known && state.kwAllowed) ? ret(known.type, known.style, word) : + ret("variable", "variable", word); + } + } + } + + function haxeTokenString(quote) { + return function(stream, state) { + if (toUnescaped(stream, quote)) + state.tokenize = haxeTokenBase; + return ret("string", "string"); + }; + } + + function haxeTokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = haxeTokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true}; + + function HaxeLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + } + + function parseHaxe(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + if (type == "variable" && imported(state, content)) return "variable-3"; + return style; + } + } + } + + function imported(state, typename) { + if (/[a-z]/.test(typename.charAt(0))) + return false; + var len = state.importedtypes.length; + for (var i = 0; i= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function inList(name, list) { + for (var v = list; v; v = v.next) + if (v.name == name) return true; + return false; + } + function register(varname) { + var state = cx.state; + if (state.context) { + cx.marked = "def"; + if (inList(varname, state.localVars)) return; + state.localVars = {name: varname, next: state.localVars}; + } else if (state.globalVars) { + if (inList(varname, state.globalVars)) return; + state.globalVars = {name: varname, next: state.globalVars}; + } + } + + // Combinators + + var defaultVars = {name: "this", next: null}; + function pushcontext() { + if (!cx.state.context) cx.state.localVars = defaultVars; + cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; + } + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + popcontext.lex = true; + function pushlex(type, info) { + var result = function() { + var state = cx.state; + state.lexical = new HaxeLexical(state.indented, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + function f(type) { + if (type == wanted) return cont(); + else if (wanted == ";") return pass(); + else return cont(f); + } + return f; + } + + function statement(type) { + if (type == "@") return cont(metadef); + if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "{") return cont(pushlex("}"), pushcontext, block, poplex, popcontext); + if (type == ";") return cont(); + if (type == "attribute") return cont(maybeattribute); + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"), + poplex, statement, poplex); + if (type == "variable") return cont(pushlex("stat"), maybelabel); + if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), + block, poplex, poplex); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), + statement, poplex, popcontext); + if (type == "import") return cont(importdef, expect(";")); + if (type == "typedef") return cont(typedef); + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function expression(type) { + if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator); + if (type == "type" ) return cont(maybeoperator); + if (type == "function") return cont(functiondef); + if (type == "keyword c") return cont(maybeexpression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeoperator); + if (type == "operator") return cont(expression); + if (type == "[") return cont(pushlex("]"), commasep(maybeexpression, "]"), poplex, maybeoperator); + if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeoperator); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + + function maybeoperator(type, value) { + if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator); + if (type == "operator" || type == ":") return cont(expression); + if (type == ";") return; + if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator); + if (type == ".") return cont(property, maybeoperator); + if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, maybeoperator); + } + + function maybeattribute(type) { + if (type == "attribute") return cont(maybeattribute); + if (type == "function") return cont(functiondef); + if (type == "var") return cont(vardef1); + } + + function metadef(type) { + if(type == ":") return cont(metadef); + if(type == "variable") return cont(metadef); + if(type == "(") return cont(pushlex(")"), commasep(metaargs, ")"), poplex, statement); + } + function metaargs(type) { + if(type == "variable") return cont(); + } + + function importdef (type, value) { + if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } + else if(type == "variable" || type == "property" || type == "." || value == "*") return cont(importdef); + } + + function typedef (type, value) + { + if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } + else if (type == "type" && /[A-Z]/.test(value.charAt(0))) { return cont(); } + } + + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperator, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type) { + if (type == "variable") cx.marked = "property"; + if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expression); + } + function commasep(what, end) { + function proceed(type) { + if (type == ",") return cont(what, proceed); + if (type == end) return cont(); + return cont(expect(end)); + } + return function(type) { + if (type == end) return cont(); + else return pass(what, proceed); + }; + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function vardef1(type, value) { + if (type == "variable"){register(value); return cont(typeuse, vardef2);} + return cont(); + } + function vardef2(type, value) { + if (value == "=") return cont(expression, vardef2); + if (type == ",") return cont(vardef1); + } + function forspec1(type, value) { + if (type == "variable") { + register(value); + return cont(forin, expression) + } else { + return pass() + } + } + function forin(_type, value) { + if (value == "in") return cont(); + } + function functiondef(type, value) { + //function names starting with upper-case letters are recognised as types, so cludging them together here. + if (type == "variable" || type == "type") {register(value); return cont(functiondef);} + if (value == "new") return cont(functiondef); + if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, typeuse, statement, popcontext); + } + function typeuse(type) { + if(type == ":") return cont(typestring); + } + function typestring(type) { + if(type == "type") return cont(); + if(type == "variable") return cont(); + if(type == "{") return cont(pushlex("}"), commasep(typeprop, "}"), poplex); + } + function typeprop(type) { + if(type == "variable") return cont(typeuse); + } + function funarg(type, value) { + if (type == "variable") {register(value); return cont(typeuse);} + } + + // Interface + return { + startState: function(basecolumn) { + var defaulttypes = ["Int", "Float", "String", "Void", "Std", "Bool", "Dynamic", "Array"]; + var state = { + tokenize: haxeTokenBase, + reAllowed: true, + kwAllowed: true, + cc: [], + lexical: new HaxeLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + importedtypes: defaulttypes, + context: parserConfig.localVars && {vars: parserConfig.localVars}, + indented: 0 + }; + if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") + state.globalVars = parserConfig.globalVars; + return state; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.reAllowed = !!(type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/)); + state.kwAllowed = type != '.'; + return parseHaxe(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize != haxeTokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; + if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + if (type == "vardef") return lexical.indented + 4; + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "stat" || type == "form") return lexical.indented + indentUnit; + else if (lexical.info == "switch" && !closing) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//" + }; +}); + +CodeMirror.defineMIME("text/x-haxe", "haxe"); + +CodeMirror.defineMode("hxml", function () { + + return { + startState: function () { + return { + define: false, + inString: false + }; + }, + token: function (stream, state) { + var ch = stream.peek(); + var sol = stream.sol(); + + ///* comments */ + if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + if (sol && ch == "-") { + var style = "variable-2"; + + stream.eat(/-/); + + if (stream.peek() == "-") { + stream.eat(/-/); + style = "keyword a"; + } + + if (stream.peek() == "D") { + stream.eat(/[D]/); + style = "keyword c"; + state.define = true; + } + + stream.eatWhile(/[A-Z]/i); + return style; + } + + var ch = stream.peek(); + + if (state.inString == false && ch == "'") { + state.inString = true; + stream.next(); + } + + if (state.inString == true) { + if (stream.skipTo("'")) { + + } else { + stream.skipToEnd(); + } + + if (stream.peek() == "'") { + stream.next(); + state.inString = false; + } + + return "string"; + } + + stream.next(); + return null; + }, + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("text/x-hxml", "hxml"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/htmlembedded/htmlembedded.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/htmlembedded/htmlembedded.js new file mode 100644 index 0000000000..439e63a427 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/htmlembedded/htmlembedded.js @@ -0,0 +1,37 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), + require("../../addon/mode/multiplex")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", + "../../addon/mode/multiplex"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("htmlembedded", function(config, parserConfig) { + var closeComment = parserConfig.closeComment || "--%>" + return CodeMirror.multiplexingMode(CodeMirror.getMode(config, "htmlmixed"), { + open: parserConfig.openComment || "<%--", + close: closeComment, + delimStyle: "comment", + mode: {token: function(stream) { + stream.skipTo(closeComment) || stream.skipToEnd() + return "comment" + }} + }, { + open: parserConfig.open || parserConfig.scriptStartRegex || "<%", + close: parserConfig.close || parserConfig.scriptEndRegex || "%>", + mode: CodeMirror.getMode(config, parserConfig.scriptingModeSpec) + }); + }, "htmlmixed"); + + CodeMirror.defineMIME("application/x-ejs", {name: "htmlembedded", scriptingModeSpec:"javascript"}); + CodeMirror.defineMIME("application/x-aspx", {name: "htmlembedded", scriptingModeSpec:"text/x-csharp"}); + CodeMirror.defineMIME("application/x-jsp", {name: "htmlembedded", scriptingModeSpec:"text/x-java"}); + CodeMirror.defineMIME("application/x-erb", {name: "htmlembedded", scriptingModeSpec:"ruby"}); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/htmlmixed/htmlmixed.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/htmlmixed/htmlmixed.js new file mode 100644 index 0000000000..af3138179a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/htmlmixed/htmlmixed.js @@ -0,0 +1,153 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var defaultTags = { + script: [ + ["lang", /(javascript|babel)/i, "javascript"], + ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, "javascript"], + ["type", /./, "text/plain"], + [null, null, "javascript"] + ], + style: [ + ["lang", /^css$/i, "css"], + ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"], + ["type", /./, "text/plain"], + [null, null, "css"] + ] + }; + + function maybeBackup(stream, pat, style) { + var cur = stream.current(), close = cur.search(pat); + if (close > -1) { + stream.backUp(cur.length - close); + } else if (cur.match(/<\/?$/)) { + stream.backUp(cur.length); + if (!stream.match(pat, false)) stream.match(cur); + } + return style; + } + + var attrRegexpCache = {}; + function getAttrRegexp(attr) { + var regexp = attrRegexpCache[attr]; + if (regexp) return regexp; + return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"); + } + + function getAttrValue(text, attr) { + var match = text.match(getAttrRegexp(attr)) + return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : "" + } + + function getTagRegexp(tagName, anchored) { + return new RegExp((anchored ? "^" : "") + "<\/\\s*" + tagName + "\\s*>", "i"); + } + + function addTags(from, to) { + for (var tag in from) { + var dest = to[tag] || (to[tag] = []); + var source = from[tag]; + for (var i = source.length - 1; i >= 0; i--) + dest.unshift(source[i]) + } + } + + function findMatchingMode(tagInfo, tagText) { + for (var i = 0; i < tagInfo.length; i++) { + var spec = tagInfo[i]; + if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2]; + } + } + + CodeMirror.defineMode("htmlmixed", function (config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, { + name: "xml", + htmlMode: true, + multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, + multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag, + allowMissingTagName: parserConfig.allowMissingTagName, + }); + + var tags = {}; + var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes; + addTags(defaultTags, tags); + if (configTags) addTags(configTags, tags); + if (configScript) for (var i = configScript.length - 1; i >= 0; i--) + tags.script.unshift(["type", configScript[i].matches, configScript[i].mode]) + + function html(stream, state) { + var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName + if (tag && !/[<>\s\/]/.test(stream.current()) && + (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) && + tags.hasOwnProperty(tagName)) { + state.inTag = tagName + " " + } else if (state.inTag && tag && />$/.test(stream.current())) { + var inTag = /^([\S]+) (.*)/.exec(state.inTag) + state.inTag = null + var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2]) + var mode = CodeMirror.getMode(config, modeSpec) + var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false); + state.token = function (stream, state) { + if (stream.match(endTagA, false)) { + state.token = html; + state.localState = state.localMode = null; + return null; + } + return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState)); + }; + state.localMode = mode; + state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, "", "")); + } else if (state.inTag) { + state.inTag += stream.current() + if (stream.eol()) state.inTag += " " + } + return style; + }; + + return { + startState: function () { + var state = CodeMirror.startState(htmlMode); + return {token: html, inTag: null, localMode: null, localState: null, htmlState: state}; + }, + + copyState: function (state) { + var local; + if (state.localState) { + local = CodeMirror.copyState(state.localMode, state.localState); + } + return {token: state.token, inTag: state.inTag, + localMode: state.localMode, localState: local, + htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; + }, + + token: function (stream, state) { + return state.token(stream, state); + }, + + indent: function (state, textAfter, line) { + if (!state.localMode || /^\s*<\//.test(textAfter)) + return htmlMode.indent(state.htmlState, textAfter, line); + else if (state.localMode.indent) + return state.localMode.indent(state.localState, textAfter, line); + else + return CodeMirror.Pass; + }, + + innerMode: function (state) { + return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; + } + }; + }, "xml", "javascript", "css"); + + CodeMirror.defineMIME("text/html", "htmlmixed"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/http/http.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/http/http.js new file mode 100644 index 0000000000..092353259f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/http/http.js @@ -0,0 +1,113 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("http", function() { + function failFirstLine(stream, state) { + stream.skipToEnd(); + state.cur = header; + return "error"; + } + + function start(stream, state) { + if (stream.match(/^HTTP\/\d\.\d/)) { + state.cur = responseStatusCode; + return "keyword"; + } else if (stream.match(/^[A-Z]+/) && /[ \t]/.test(stream.peek())) { + state.cur = requestPath; + return "keyword"; + } else { + return failFirstLine(stream, state); + } + } + + function responseStatusCode(stream, state) { + var code = stream.match(/^\d+/); + if (!code) return failFirstLine(stream, state); + + state.cur = responseStatusText; + var status = Number(code[0]); + if (status >= 100 && status < 200) { + return "positive informational"; + } else if (status >= 200 && status < 300) { + return "positive success"; + } else if (status >= 300 && status < 400) { + return "positive redirect"; + } else if (status >= 400 && status < 500) { + return "negative client-error"; + } else if (status >= 500 && status < 600) { + return "negative server-error"; + } else { + return "error"; + } + } + + function responseStatusText(stream, state) { + stream.skipToEnd(); + state.cur = header; + return null; + } + + function requestPath(stream, state) { + stream.eatWhile(/\S/); + state.cur = requestProtocol; + return "string-2"; + } + + function requestProtocol(stream, state) { + if (stream.match(/^HTTP\/\d\.\d$/)) { + state.cur = header; + return "keyword"; + } else { + return failFirstLine(stream, state); + } + } + + function header(stream) { + if (stream.sol() && !stream.eat(/[ \t]/)) { + if (stream.match(/^.*?:/)) { + return "atom"; + } else { + stream.skipToEnd(); + return "error"; + } + } else { + stream.skipToEnd(); + return "string"; + } + } + + function body(stream) { + stream.skipToEnd(); + return null; + } + + return { + token: function(stream, state) { + var cur = state.cur; + if (cur != header && cur != body && stream.eatSpace()) return null; + return cur(stream, state); + }, + + blankLine: function(state) { + state.cur = body; + }, + + startState: function() { + return {cur: start}; + } + }; +}); + +CodeMirror.defineMIME("message/http", "http"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/idl/idl.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/idl/idl.js new file mode 100644 index 0000000000..37302bb90f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/idl/idl.js @@ -0,0 +1,290 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function wordRegexp(words) { + return new RegExp('^((' + words.join(')|(') + '))\\b', 'i'); + }; + + var builtinArray = [ + 'a_correlate', 'abs', 'acos', 'adapt_hist_equal', 'alog', + 'alog2', 'alog10', 'amoeba', 'annotate', 'app_user_dir', + 'app_user_dir_query', 'arg_present', 'array_equal', 'array_indices', + 'arrow', 'ascii_template', 'asin', 'assoc', 'atan', + 'axis', 'axis', 'bandpass_filter', 'bandreject_filter', 'barplot', + 'bar_plot', 'beseli', 'beselj', 'beselk', 'besely', + 'beta', 'biginteger', 'bilinear', 'bin_date', 'binary_template', + 'bindgen', 'binomial', 'bit_ffs', 'bit_population', 'blas_axpy', + 'blk_con', 'boolarr', 'boolean', 'boxplot', 'box_cursor', + 'breakpoint', 'broyden', 'bubbleplot', 'butterworth', 'bytarr', + 'byte', 'byteorder', 'bytscl', 'c_correlate', 'calendar', + 'caldat', 'call_external', 'call_function', 'call_method', + 'call_procedure', 'canny', 'catch', 'cd', 'cdf', 'ceil', + 'chebyshev', 'check_math', 'chisqr_cvf', 'chisqr_pdf', 'choldc', + 'cholsol', 'cindgen', 'cir_3pnt', 'clipboard', 'close', + 'clust_wts', 'cluster', 'cluster_tree', 'cmyk_convert', 'code_coverage', + 'color_convert', 'color_exchange', 'color_quan', 'color_range_map', + 'colorbar', 'colorize_sample', 'colormap_applicable', + 'colormap_gradient', 'colormap_rotation', 'colortable', + 'comfit', 'command_line_args', 'common', 'compile_opt', 'complex', + 'complexarr', 'complexround', 'compute_mesh_normals', 'cond', 'congrid', + 'conj', 'constrained_min', 'contour', 'contour', 'convert_coord', + 'convol', 'convol_fft', 'coord2to3', 'copy_lun', 'correlate', + 'cos', 'cosh', 'cpu', 'cramer', 'createboxplotdata', + 'create_cursor', 'create_struct', 'create_view', 'crossp', 'crvlength', + 'ct_luminance', 'cti_test', 'cursor', 'curvefit', 'cv_coord', + 'cvttobm', 'cw_animate', 'cw_animate_getp', 'cw_animate_load', + 'cw_animate_run', 'cw_arcball', 'cw_bgroup', 'cw_clr_index', + 'cw_colorsel', 'cw_defroi', 'cw_field', 'cw_filesel', 'cw_form', + 'cw_fslider', 'cw_light_editor', 'cw_light_editor_get', + 'cw_light_editor_set', 'cw_orient', 'cw_palette_editor', + 'cw_palette_editor_get', 'cw_palette_editor_set', 'cw_pdmenu', + 'cw_rgbslider', 'cw_tmpl', 'cw_zoom', 'db_exists', + 'dblarr', 'dcindgen', 'dcomplex', 'dcomplexarr', 'define_key', + 'define_msgblk', 'define_msgblk_from_file', 'defroi', 'defsysv', + 'delvar', 'dendro_plot', 'dendrogram', 'deriv', 'derivsig', + 'determ', 'device', 'dfpmin', 'diag_matrix', 'dialog_dbconnect', + 'dialog_message', 'dialog_pickfile', 'dialog_printersetup', + 'dialog_printjob', 'dialog_read_image', + 'dialog_write_image', 'dictionary', 'digital_filter', 'dilate', 'dindgen', + 'dissolve', 'dist', 'distance_measure', 'dlm_load', 'dlm_register', + 'doc_library', 'double', 'draw_roi', 'edge_dog', 'efont', + 'eigenql', 'eigenvec', 'ellipse', 'elmhes', 'emboss', + 'empty', 'enable_sysrtn', 'eof', 'eos', 'erase', + 'erf', 'erfc', 'erfcx', 'erode', 'errorplot', + 'errplot', 'estimator_filter', 'execute', 'exit', 'exp', + 'expand', 'expand_path', 'expint', 'extract', 'extract_slice', + 'f_cvf', 'f_pdf', 'factorial', 'fft', 'file_basename', + 'file_chmod', 'file_copy', 'file_delete', 'file_dirname', + 'file_expand_path', 'file_gunzip', 'file_gzip', 'file_info', + 'file_lines', 'file_link', 'file_mkdir', 'file_move', + 'file_poll_input', 'file_readlink', 'file_same', + 'file_search', 'file_tar', 'file_test', 'file_untar', 'file_unzip', + 'file_which', 'file_zip', 'filepath', 'findgen', 'finite', + 'fix', 'flick', 'float', 'floor', 'flow3', + 'fltarr', 'flush', 'format_axis_values', 'forward_function', 'free_lun', + 'fstat', 'fulstr', 'funct', 'function', 'fv_test', + 'fx_root', 'fz_roots', 'gamma', 'gamma_ct', 'gauss_cvf', + 'gauss_pdf', 'gauss_smooth', 'gauss2dfit', 'gaussfit', + 'gaussian_function', 'gaussint', 'get_drive_list', 'get_dxf_objects', + 'get_kbrd', 'get_login_info', + 'get_lun', 'get_screen_size', 'getenv', 'getwindows', 'greg2jul', + 'grib', 'grid_input', 'grid_tps', 'grid3', 'griddata', + 'gs_iter', 'h_eq_ct', 'h_eq_int', 'hanning', 'hash', + 'hdf', 'hdf5', 'heap_free', 'heap_gc', 'heap_nosave', + 'heap_refcount', 'heap_save', 'help', 'hilbert', 'hist_2d', + 'hist_equal', 'histogram', 'hls', 'hough', 'hqr', + 'hsv', 'i18n_multibytetoutf8', + 'i18n_multibytetowidechar', 'i18n_utf8tomultibyte', + 'i18n_widechartomultibyte', + 'ibeta', 'icontour', 'iconvertcoord', 'idelete', 'identity', + 'idl_base64', 'idl_container', 'idl_validname', + 'idlexbr_assistant', 'idlitsys_createtool', + 'idlunit', 'iellipse', 'igamma', 'igetcurrent', 'igetdata', + 'igetid', 'igetproperty', 'iimage', 'image', 'image_cont', + 'image_statistics', 'image_threshold', 'imaginary', 'imap', 'indgen', + 'int_2d', 'int_3d', 'int_tabulated', 'intarr', 'interpol', + 'interpolate', 'interval_volume', 'invert', 'ioctl', 'iopen', + 'ir_filter', 'iplot', 'ipolygon', 'ipolyline', 'iputdata', + 'iregister', 'ireset', 'iresolve', 'irotate', 'isa', + 'isave', 'iscale', 'isetcurrent', 'isetproperty', 'ishft', + 'isocontour', 'isosurface', 'isurface', 'itext', 'itranslate', + 'ivector', 'ivolume', 'izoom', 'journal', 'json_parse', + 'json_serialize', 'jul2greg', 'julday', 'keyword_set', 'krig2d', + 'kurtosis', 'kw_test', 'l64indgen', 'la_choldc', 'la_cholmprove', + 'la_cholsol', 'la_determ', 'la_eigenproblem', 'la_eigenql', 'la_eigenvec', + 'la_elmhes', 'la_gm_linear_model', 'la_hqr', 'la_invert', + 'la_least_square_equality', 'la_least_squares', 'la_linear_equation', + 'la_ludc', 'la_lumprove', 'la_lusol', + 'la_svd', 'la_tridc', 'la_trimprove', 'la_triql', 'la_trired', + 'la_trisol', 'label_date', 'label_region', 'ladfit', 'laguerre', + 'lambda', 'lambdap', 'lambertw', 'laplacian', 'least_squares_filter', + 'leefilt', 'legend', 'legendre', 'linbcg', 'lindgen', + 'linfit', 'linkimage', 'list', 'll_arc_distance', 'lmfit', + 'lmgr', 'lngamma', 'lnp_test', 'loadct', 'locale_get', + 'logical_and', 'logical_or', 'logical_true', 'lon64arr', 'lonarr', + 'long', 'long64', 'lsode', 'lu_complex', 'ludc', + 'lumprove', 'lusol', 'm_correlate', 'machar', 'make_array', + 'make_dll', 'make_rt', 'map', 'mapcontinents', 'mapgrid', + 'map_2points', 'map_continents', 'map_grid', 'map_image', 'map_patch', + 'map_proj_forward', 'map_proj_image', 'map_proj_info', + 'map_proj_init', 'map_proj_inverse', + 'map_set', 'matrix_multiply', 'matrix_power', 'max', 'md_test', + 'mean', 'meanabsdev', 'mean_filter', 'median', 'memory', + 'mesh_clip', 'mesh_decimate', 'mesh_issolid', + 'mesh_merge', 'mesh_numtriangles', + 'mesh_obj', 'mesh_smooth', 'mesh_surfacearea', + 'mesh_validate', 'mesh_volume', + 'message', 'min', 'min_curve_surf', 'mk_html_help', 'modifyct', + 'moment', 'morph_close', 'morph_distance', + 'morph_gradient', 'morph_hitormiss', + 'morph_open', 'morph_thin', 'morph_tophat', 'multi', 'n_elements', + 'n_params', 'n_tags', 'ncdf', 'newton', 'noise_hurl', + 'noise_pick', 'noise_scatter', 'noise_slur', 'norm', 'obj_class', + 'obj_destroy', 'obj_hasmethod', 'obj_isa', 'obj_new', 'obj_valid', + 'objarr', 'on_error', 'on_ioerror', 'online_help', 'openr', + 'openu', 'openw', 'oplot', 'oploterr', 'orderedhash', + 'p_correlate', 'parse_url', 'particle_trace', 'path_cache', 'path_sep', + 'pcomp', 'plot', 'plot3d', 'plot', 'plot_3dbox', + 'plot_field', 'ploterr', 'plots', 'polar_contour', 'polar_surface', + 'polyfill', 'polyshade', 'pnt_line', 'point_lun', 'polarplot', + 'poly', 'poly_2d', 'poly_area', 'poly_fit', 'polyfillv', + 'polygon', 'polyline', 'polywarp', 'popd', 'powell', + 'pref_commit', 'pref_get', 'pref_set', 'prewitt', 'primes', + 'print', 'printf', 'printd', 'pro', 'product', + 'profile', 'profiler', 'profiles', 'project_vol', 'ps_show_fonts', + 'psafm', 'pseudo', 'ptr_free', 'ptr_new', 'ptr_valid', + 'ptrarr', 'pushd', 'qgrid3', 'qhull', 'qromb', + 'qromo', 'qsimp', 'query_*', 'query_ascii', 'query_bmp', + 'query_csv', 'query_dicom', 'query_gif', 'query_image', 'query_jpeg', + 'query_jpeg2000', 'query_mrsid', 'query_pict', 'query_png', 'query_ppm', + 'query_srf', 'query_tiff', 'query_video', 'query_wav', 'r_correlate', + 'r_test', 'radon', 'randomn', 'randomu', 'ranks', + 'rdpix', 'read', 'readf', 'read_ascii', 'read_binary', + 'read_bmp', 'read_csv', 'read_dicom', 'read_gif', 'read_image', + 'read_interfile', 'read_jpeg', 'read_jpeg2000', 'read_mrsid', 'read_pict', + 'read_png', 'read_ppm', 'read_spr', 'read_srf', 'read_sylk', + 'read_tiff', 'read_video', 'read_wav', 'read_wave', 'read_x11_bitmap', + 'read_xwd', 'reads', 'readu', 'real_part', 'rebin', + 'recall_commands', 'recon3', 'reduce_colors', 'reform', 'region_grow', + 'register_cursor', 'regress', 'replicate', + 'replicate_inplace', 'resolve_all', + 'resolve_routine', 'restore', 'retall', 'return', 'reverse', + 'rk4', 'roberts', 'rot', 'rotate', 'round', + 'routine_filepath', 'routine_info', 'rs_test', 's_test', 'save', + 'savgol', 'scale3', 'scale3d', 'scatterplot', 'scatterplot3d', + 'scope_level', 'scope_traceback', 'scope_varfetch', + 'scope_varname', 'search2d', + 'search3d', 'sem_create', 'sem_delete', 'sem_lock', 'sem_release', + 'set_plot', 'set_shading', 'setenv', 'sfit', 'shade_surf', + 'shade_surf_irr', 'shade_volume', 'shift', 'shift_diff', 'shmdebug', + 'shmmap', 'shmunmap', 'shmvar', 'show3', 'showfont', + 'signum', 'simplex', 'sin', 'sindgen', 'sinh', + 'size', 'skewness', 'skip_lun', 'slicer3', 'slide_image', + 'smooth', 'sobel', 'socket', 'sort', 'spawn', + 'sph_4pnt', 'sph_scat', 'spher_harm', 'spl_init', 'spl_interp', + 'spline', 'spline_p', 'sprsab', 'sprsax', 'sprsin', + 'sprstp', 'sqrt', 'standardize', 'stddev', 'stop', + 'strarr', 'strcmp', 'strcompress', 'streamline', 'streamline', + 'stregex', 'stretch', 'string', 'strjoin', 'strlen', + 'strlowcase', 'strmatch', 'strmessage', 'strmid', 'strpos', + 'strput', 'strsplit', 'strtrim', 'struct_assign', 'struct_hide', + 'strupcase', 'surface', 'surface', 'surfr', 'svdc', + 'svdfit', 'svsol', 'swap_endian', 'swap_endian_inplace', 'symbol', + 'systime', 't_cvf', 't_pdf', 't3d', 'tag_names', + 'tan', 'tanh', 'tek_color', 'temporary', 'terminal_size', + 'tetra_clip', 'tetra_surface', 'tetra_volume', 'text', 'thin', + 'thread', 'threed', 'tic', 'time_test2', 'timegen', + 'timer', 'timestamp', 'timestamptovalues', 'tm_test', 'toc', + 'total', 'trace', 'transpose', 'tri_surf', 'triangulate', + 'trigrid', 'triql', 'trired', 'trisol', 'truncate_lun', + 'ts_coef', 'ts_diff', 'ts_fcast', 'ts_smooth', 'tv', + 'tvcrs', 'tvlct', 'tvrd', 'tvscl', 'typename', + 'uindgen', 'uint', 'uintarr', 'ul64indgen', 'ulindgen', + 'ulon64arr', 'ulonarr', 'ulong', 'ulong64', 'uniq', + 'unsharp_mask', 'usersym', 'value_locate', 'variance', 'vector', + 'vector_field', 'vel', 'velovect', 'vert_t3d', 'voigt', + 'volume', 'voronoi', 'voxel_proj', 'wait', 'warp_tri', + 'watershed', 'wdelete', 'wf_draw', 'where', 'widget_base', + 'widget_button', 'widget_combobox', 'widget_control', + 'widget_displaycontextmenu', 'widget_draw', + 'widget_droplist', 'widget_event', 'widget_info', + 'widget_label', 'widget_list', + 'widget_propertysheet', 'widget_slider', 'widget_tab', + 'widget_table', 'widget_text', + 'widget_tree', 'widget_tree_move', 'widget_window', + 'wiener_filter', 'window', + 'window', 'write_bmp', 'write_csv', 'write_gif', 'write_image', + 'write_jpeg', 'write_jpeg2000', 'write_nrif', 'write_pict', 'write_png', + 'write_ppm', 'write_spr', 'write_srf', 'write_sylk', 'write_tiff', + 'write_video', 'write_wav', 'write_wave', 'writeu', 'wset', + 'wshow', 'wtn', 'wv_applet', 'wv_cwt', 'wv_cw_wavelet', + 'wv_denoise', 'wv_dwt', 'wv_fn_coiflet', + 'wv_fn_daubechies', 'wv_fn_gaussian', + 'wv_fn_haar', 'wv_fn_morlet', 'wv_fn_paul', + 'wv_fn_symlet', 'wv_import_data', + 'wv_import_wavelet', 'wv_plot3d_wps', 'wv_plot_multires', + 'wv_pwt', 'wv_tool_denoise', + 'xbm_edit', 'xdisplayfile', 'xdxf', 'xfont', 'xinteranimate', + 'xloadct', 'xmanager', 'xmng_tmpl', 'xmtool', 'xobjview', + 'xobjview_rotate', 'xobjview_write_image', + 'xpalette', 'xpcolor', 'xplot3d', + 'xregistered', 'xroi', 'xsq_test', 'xsurface', 'xvaredit', + 'xvolume', 'xvolume_rotate', 'xvolume_write_image', + 'xyouts', 'zlib_compress', 'zlib_uncompress', 'zoom', 'zoom_24' + ]; + var builtins = wordRegexp(builtinArray); + + var keywordArray = [ + 'begin', 'end', 'endcase', 'endfor', + 'endwhile', 'endif', 'endrep', 'endforeach', + 'break', 'case', 'continue', 'for', + 'foreach', 'goto', 'if', 'then', 'else', + 'repeat', 'until', 'switch', 'while', + 'do', 'pro', 'function' + ]; + var keywords = wordRegexp(keywordArray); + + CodeMirror.registerHelper("hintWords", "idl", builtinArray.concat(keywordArray)); + + var identifiers = new RegExp('^[_a-z\xa1-\uffff][_a-z0-9\xa1-\uffff]*', 'i'); + + var singleOperators = /[+\-*&=<>\/@#~$]/; + var boolOperators = new RegExp('(and|or|eq|lt|le|gt|ge|ne|not)', 'i'); + + function tokenBase(stream) { + // whitespaces + if (stream.eatSpace()) return null; + + // Handle one line Comments + if (stream.match(';')) { + stream.skipToEnd(); + return 'comment'; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.+-]/, false)) { + if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) + return 'number'; + if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) + return 'number'; + if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) + return 'number'; + } + + // Handle Strings + if (stream.match(/^"([^"]|(""))*"/)) { return 'string'; } + if (stream.match(/^'([^']|(''))*'/)) { return 'string'; } + + // Handle words + if (stream.match(keywords)) { return 'keyword'; } + if (stream.match(builtins)) { return 'builtin'; } + if (stream.match(identifiers)) { return 'variable'; } + + if (stream.match(singleOperators) || stream.match(boolOperators)) { + return 'operator'; } + + // Handle non-detected items + stream.next(); + return null; + }; + + CodeMirror.defineMode('idl', function() { + return { + token: function(stream) { + return tokenBase(stream); + } + }; + }); + + CodeMirror.defineMIME('text/x-idl', 'idl'); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/javascript/javascript.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/javascript/javascript.js new file mode 100644 index 0000000000..7cfee313a3 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/javascript/javascript.js @@ -0,0 +1,960 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("javascript", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var statementIndent = parserConfig.statementIndent; + var jsonldMode = parserConfig.jsonld; + var jsonMode = parserConfig.json || jsonldMode; + var trackScope = parserConfig.trackScope !== false + var isTS = parserConfig.typescript; + var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; + + // Tokenizer + + var keywords = function(){ + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"), D = kw("keyword d"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}; + + return { + "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, + "return": D, "break": D, "continue": D, "new": kw("new"), "delete": C, "void": C, "throw": C, + "debugger": kw("debugger"), "var": kw("var"), "const": kw("var"), "let": kw("var"), + "function": kw("function"), "catch": kw("catch"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "typeof": operator, "instanceof": operator, + "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, + "this": kw("this"), "class": kw("class"), "super": kw("atom"), + "yield": C, "export": kw("export"), "import": kw("import"), "extends": C, + "await": C + }; + }(); + + var isOperatorChar = /[+\-*&%=<>!?|~^@]/; + var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; + + function readRegexp(stream) { + var escaped = false, next, inSet = false; + while ((next = stream.next()) != null) { + if (!escaped) { + if (next == "/" && !inSet) return; + if (next == "[") inSet = true; + else if (inSet && next == "]") inSet = false; + } + escaped = !escaped && next == "\\"; + } + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "." && stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) { + return ret("number", "number"); + } else if (ch == "." && stream.match("..")) { + return ret("spread", "meta"); + } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return ret(ch); + } else if (ch == "=" && stream.eat(">")) { + return ret("=>", "operator"); + } else if (ch == "0" && stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) { + return ret("number", "number"); + } else if (/\d/.test(ch)) { + stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/); + return ret("number", "number"); + } else if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else if (expressionAllowed(stream, state, 1)) { + readRegexp(stream); + stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/); + return ret("regexp", "string-2"); + } else { + stream.eat("="); + return ret("operator", "operator", stream.current()); + } + } else if (ch == "`") { + state.tokenize = tokenQuasi; + return tokenQuasi(stream, state); + } else if (ch == "#" && stream.peek() == "!") { + stream.skipToEnd(); + return ret("meta", "meta"); + } else if (ch == "#" && stream.eatWhile(wordRE)) { + return ret("variable", "property") + } else if (ch == "<" && stream.match("!--") || + (ch == "-" && stream.match("->") && !/\S/.test(stream.string.slice(0, stream.start)))) { + stream.skipToEnd() + return ret("comment", "comment") + } else if (isOperatorChar.test(ch)) { + if (ch != ">" || !state.lexical || state.lexical.type != ">") { + if (stream.eat("=")) { + if (ch == "!" || ch == "=") stream.eat("=") + } else if (/[<>*+\-|&?]/.test(ch)) { + stream.eat(ch) + if (ch == ">") stream.eat(ch) + } + } + if (ch == "?" && stream.eat(".")) return ret(".") + return ret("operator", "operator", stream.current()); + } else if (wordRE.test(ch)) { + stream.eatWhile(wordRE); + var word = stream.current() + if (state.lastType != ".") { + if (keywords.propertyIsEnumerable(word)) { + var kw = keywords[word] + return ret(kw.type, kw.style, word) + } + if (word == "async" && stream.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, false)) + return ret("async", "keyword", word) + } + return ret("variable", "variable", word) + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next; + if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ + state.tokenize = tokenBase; + return ret("jsonld-keyword", "meta"); + } + while ((next = stream.next()) != null) { + if (next == quote && !escaped) break; + escaped = !escaped && next == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenQuasi(stream, state) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && next == "\\"; + } + return ret("quasi", "string-2", stream.current()); + } + + var brackets = "([{}])"; + // This is a crude lookahead trick to try and notice that we're + // parsing the argument patterns for a fat-arrow function before we + // actually hit the arrow token. It only works if the arrow is on + // the same line as the arguments and there's no strange noise + // (comments) in between. Fallback is to only notice when we hit the + // arrow, and not declare the arguments as locals for the arrow + // body. + function findFatArrow(stream, state) { + if (state.fatArrowAt) state.fatArrowAt = null; + var arrow = stream.string.indexOf("=>", stream.start); + if (arrow < 0) return; + + if (isTS) { // Try to skip TypeScript return type declarations after the arguments + var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow)) + if (m) arrow = m.index + } + + var depth = 0, sawSomething = false; + for (var pos = arrow - 1; pos >= 0; --pos) { + var ch = stream.string.charAt(pos); + var bracket = brackets.indexOf(ch); + if (bracket >= 0 && bracket < 3) { + if (!depth) { ++pos; break; } + if (--depth == 0) { if (ch == "(") sawSomething = true; break; } + } else if (bracket >= 3 && bracket < 6) { + ++depth; + } else if (wordRE.test(ch)) { + sawSomething = true; + } else if (/["'\/`]/.test(ch)) { + for (;; --pos) { + if (pos == 0) return + var next = stream.string.charAt(pos - 1) + if (next == ch && stream.string.charAt(pos - 2) != "\\") { pos--; break } + } + } else if (sawSomething && !depth) { + ++pos; + break; + } + } + if (sawSomething && !depth) state.fatArrowAt = pos; + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, + "regexp": true, "this": true, "import": true, "jsonld-keyword": true}; + + function JSLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + if (!trackScope) return false + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + for (var cx = state.context; cx; cx = cx.prev) { + for (var v = cx.vars; v; v = v.next) + if (v.name == varname) return true; + } + } + + function parseJS(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + return style; + } + } + } + + // Combinator utils + + var cx = {state: null, column: null, marked: null, cc: null}; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function inList(name, list) { + for (var v = list; v; v = v.next) if (v.name == name) return true + return false; + } + function register(varname) { + var state = cx.state; + cx.marked = "def"; + if (!trackScope) return + if (state.context) { + if (state.lexical.info == "var" && state.context && state.context.block) { + // FIXME function decls are also not block scoped + var newContext = registerVarScoped(varname, state.context) + if (newContext != null) { + state.context = newContext + return + } + } else if (!inList(varname, state.localVars)) { + state.localVars = new Var(varname, state.localVars) + return + } + } + // Fall through means this is global + if (parserConfig.globalVars && !inList(varname, state.globalVars)) + state.globalVars = new Var(varname, state.globalVars) + } + function registerVarScoped(varname, context) { + if (!context) { + return null + } else if (context.block) { + var inner = registerVarScoped(varname, context.prev) + if (!inner) return null + if (inner == context.prev) return context + return new Context(inner, context.vars, true) + } else if (inList(varname, context.vars)) { + return context + } else { + return new Context(context.prev, new Var(varname, context.vars), false) + } + } + + function isModifier(name) { + return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly" + } + + // Combinators + + function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block } + function Var(name, next) { this.name = name; this.next = next } + + var defaultVars = new Var("this", new Var("arguments", null)) + function pushcontext() { + cx.state.context = new Context(cx.state.context, cx.state.localVars, false) + cx.state.localVars = defaultVars + } + function pushblockcontext() { + cx.state.context = new Context(cx.state.context, cx.state.localVars, true) + cx.state.localVars = null + } + pushcontext.lex = pushblockcontext.lex = true + function popcontext() { + cx.state.localVars = cx.state.context.vars + cx.state.context = cx.state.context.prev + } + popcontext.lex = true + function pushlex(type, info) { + var result = function() { + var state = cx.state, indent = state.indented; + if (state.lexical.type == "stat") indent = state.lexical.indented; + else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) + indent = outer.indented; + state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + function exp(type) { + if (type == wanted) return cont(); + else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass(); + else return cont(exp); + }; + return exp; + } + + function statement(type, value) { + if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex); + if (type == "debugger") return cont(expect(";")); + if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext); + if (type == ";") return cont(); + if (type == "if") { + if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) + cx.state.cc.pop()(); + return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse); + } + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), pushblockcontext, forspec, statement, popcontext, poplex); + if (type == "class" || (isTS && value == "interface")) { + cx.marked = "keyword" + return cont(pushlex("form", type == "class" ? type : value), className, poplex) + } + if (type == "variable") { + if (isTS && value == "declare") { + cx.marked = "keyword" + return cont(statement) + } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) { + cx.marked = "keyword" + if (value == "enum") return cont(enumdef); + else if (value == "type") return cont(typename, expect("operator"), typeexpr, expect(";")); + else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex) + } else if (isTS && value == "namespace") { + cx.marked = "keyword" + return cont(pushlex("form"), expression, statement, poplex) + } else if (isTS && value == "abstract") { + cx.marked = "keyword" + return cont(statement) + } else { + return cont(pushlex("stat"), maybelabel); + } + } + if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext, + block, poplex, poplex, popcontext); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext); + if (type == "export") return cont(pushlex("stat"), afterExport, poplex); + if (type == "import") return cont(pushlex("stat"), afterImport, poplex); + if (type == "async") return cont(statement) + if (value == "@") return cont(expression, statement) + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function maybeCatchBinding(type) { + if (type == "(") return cont(funarg, expect(")")) + } + function expression(type, value) { + return expressionInner(type, value, false); + } + function expressionNoComma(type, value) { + return expressionInner(type, value, true); + } + function parenExpr(type) { + if (type != "(") return pass() + return cont(pushlex(")"), maybeexpression, expect(")"), poplex) + } + function expressionInner(type, value, noComma) { + if (cx.state.fatArrowAt == cx.stream.start) { + var body = noComma ? arrowBodyNoComma : arrowBody; + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext); + else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); + } + + var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; + if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); + if (type == "function") return cont(functiondef, maybeop); + if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form"), classExpression, poplex); } + if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); + if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); + if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); + if (type == "{") return contCommasep(objprop, "}", null, maybeop); + if (type == "quasi") return pass(quasi, maybeop); + if (type == "new") return cont(maybeTarget(noComma)); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + + function maybeoperatorComma(type, value) { + if (type == ",") return cont(maybeexpression); + return maybeoperatorNoComma(type, value, false); + } + function maybeoperatorNoComma(type, value, noComma) { + var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; + var expr = noComma == false ? expression : expressionNoComma; + if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); + if (type == "operator") { + if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); + if (isTS && value == "<" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, false)) + return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me); + if (value == "?") return cont(expression, expect(":"), expr); + return cont(expr); + } + if (type == "quasi") { return pass(quasi, me); } + if (type == ";") return; + if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); + if (type == ".") return cont(property, me); + if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); + if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me) } + if (type == "regexp") { + cx.state.lastType = cx.marked = "operator" + cx.stream.backUp(cx.stream.pos - cx.stream.start - 1) + return cont(expr) + } + } + function quasi(type, value) { + if (type != "quasi") return pass(); + if (value.slice(value.length - 2) != "${") return cont(quasi); + return cont(maybeexpression, continueQuasi); + } + function continueQuasi(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(quasi); + } + } + function arrowBody(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expression); + } + function arrowBodyNoComma(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expressionNoComma); + } + function maybeTarget(noComma) { + return function(type) { + if (type == ".") return cont(noComma ? targetNoComma : target); + else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma) + else return pass(noComma ? expressionNoComma : expression); + }; + } + function target(_, value) { + if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); } + } + function targetNoComma(_, value) { + if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); } + } + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperatorComma, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type, value) { + if (type == "async") { + cx.marked = "property"; + return cont(objprop); + } else if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + if (value == "get" || value == "set") return cont(getterSetter); + var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params + if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) + cx.state.fatArrowAt = cx.stream.pos + m[0].length + return cont(afterprop); + } else if (type == "number" || type == "string") { + cx.marked = jsonldMode ? "property" : (cx.style + " property"); + return cont(afterprop); + } else if (type == "jsonld-keyword") { + return cont(afterprop); + } else if (isTS && isModifier(value)) { + cx.marked = "keyword" + return cont(objprop) + } else if (type == "[") { + return cont(expression, maybetype, expect("]"), afterprop); + } else if (type == "spread") { + return cont(expressionNoComma, afterprop); + } else if (value == "*") { + cx.marked = "keyword"; + return cont(objprop); + } else if (type == ":") { + return pass(afterprop) + } + } + function getterSetter(type) { + if (type != "variable") return pass(afterprop); + cx.marked = "property"; + return cont(functiondef); + } + function afterprop(type) { + if (type == ":") return cont(expressionNoComma); + if (type == "(") return pass(functiondef); + } + function commasep(what, end, sep) { + function proceed(type, value) { + if (sep ? sep.indexOf(type) > -1 : type == ",") { + var lex = cx.state.lexical; + if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; + return cont(function(type, value) { + if (type == end || value == end) return pass() + return pass(what) + }, proceed); + } + if (type == end || value == end) return cont(); + if (sep && sep.indexOf(";") > -1) return pass(what) + return cont(expect(end)); + } + return function(type, value) { + if (type == end || value == end) return cont(); + return pass(what, proceed); + }; + } + function contCommasep(what, end, info) { + for (var i = 3; i < arguments.length; i++) + cx.cc.push(arguments[i]); + return cont(pushlex(end, info), commasep(what, end), poplex); + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function maybetype(type, value) { + if (isTS) { + if (type == ":") return cont(typeexpr); + if (value == "?") return cont(maybetype); + } + } + function maybetypeOrIn(type, value) { + if (isTS && (type == ":" || value == "in")) return cont(typeexpr) + } + function mayberettype(type) { + if (isTS && type == ":") { + if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr) + else return cont(typeexpr) + } + } + function isKW(_, value) { + if (value == "is") { + cx.marked = "keyword" + return cont() + } + } + function typeexpr(type, value) { + if (value == "keyof" || value == "typeof" || value == "infer" || value == "readonly") { + cx.marked = "keyword" + return cont(value == "typeof" ? expressionNoComma : typeexpr) + } + if (type == "variable" || value == "void") { + cx.marked = "type" + return cont(afterType) + } + if (value == "|" || value == "&") return cont(typeexpr) + if (type == "string" || type == "number" || type == "atom") return cont(afterType); + if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType) + if (type == "{") return cont(pushlex("}"), typeprops, poplex, afterType) + if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType, afterType) + if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr) + if (type == "quasi") { return pass(quasiType, afterType); } + } + function maybeReturnType(type) { + if (type == "=>") return cont(typeexpr) + } + function typeprops(type) { + if (type.match(/[\}\)\]]/)) return cont() + if (type == "," || type == ";") return cont(typeprops) + return pass(typeprop, typeprops) + } + function typeprop(type, value) { + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property" + return cont(typeprop) + } else if (value == "?" || type == "number" || type == "string") { + return cont(typeprop) + } else if (type == ":") { + return cont(typeexpr) + } else if (type == "[") { + return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop) + } else if (type == "(") { + return pass(functiondecl, typeprop) + } else if (!type.match(/[;\}\)\],]/)) { + return cont() + } + } + function quasiType(type, value) { + if (type != "quasi") return pass(); + if (value.slice(value.length - 2) != "${") return cont(quasiType); + return cont(typeexpr, continueQuasiType); + } + function continueQuasiType(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(quasiType); + } + } + function typearg(type, value) { + if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg) + if (type == ":") return cont(typeexpr) + if (type == "spread") return cont(typearg) + return pass(typeexpr) + } + function afterType(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) + if (value == "|" || type == "." || value == "&") return cont(typeexpr) + if (type == "[") return cont(typeexpr, expect("]"), afterType) + if (value == "extends" || value == "implements") { cx.marked = "keyword"; return cont(typeexpr) } + if (value == "?") return cont(typeexpr, expect(":"), typeexpr) + } + function maybeTypeArgs(_, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) + } + function typeparam() { + return pass(typeexpr, maybeTypeDefault) + } + function maybeTypeDefault(_, value) { + if (value == "=") return cont(typeexpr) + } + function vardef(_, value) { + if (value == "enum") {cx.marked = "keyword"; return cont(enumdef)} + return pass(pattern, maybetype, maybeAssign, vardefCont); + } + function pattern(type, value) { + if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(pattern) } + if (type == "variable") { register(value); return cont(); } + if (type == "spread") return cont(pattern); + if (type == "[") return contCommasep(eltpattern, "]"); + if (type == "{") return contCommasep(proppattern, "}"); + } + function proppattern(type, value) { + if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { + register(value); + return cont(maybeAssign); + } + if (type == "variable") cx.marked = "property"; + if (type == "spread") return cont(pattern); + if (type == "}") return pass(); + if (type == "[") return cont(expression, expect(']'), expect(':'), proppattern); + return cont(expect(":"), pattern, maybeAssign); + } + function eltpattern() { + return pass(pattern, maybeAssign) + } + function maybeAssign(_type, value) { + if (value == "=") return cont(expressionNoComma); + } + function vardefCont(type) { + if (type == ",") return cont(vardef); + } + function maybeelse(type, value) { + if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); + } + function forspec(type, value) { + if (value == "await") return cont(forspec); + if (type == "(") return cont(pushlex(")"), forspec1, poplex); + } + function forspec1(type) { + if (type == "var") return cont(vardef, forspec2); + if (type == "variable") return cont(forspec2); + return pass(forspec2) + } + function forspec2(type, value) { + if (type == ")") return cont() + if (type == ";") return cont(forspec2) + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression, forspec2) } + return pass(expression, forspec2) + } + function functiondef(type, value) { + if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} + if (type == "variable") {register(value); return cont(functiondef);} + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext); + if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef) + } + function functiondecl(type, value) { + if (value == "*") {cx.marked = "keyword"; return cont(functiondecl);} + if (type == "variable") {register(value); return cont(functiondecl);} + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, popcontext); + if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondecl) + } + function typename(type, value) { + if (type == "keyword" || type == "variable") { + cx.marked = "type" + return cont(typename) + } else if (value == "<") { + return cont(pushlex(">"), commasep(typeparam, ">"), poplex) + } + } + function funarg(type, value) { + if (value == "@") cont(expression, funarg) + if (type == "spread") return cont(funarg); + if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(funarg); } + if (isTS && type == "this") return cont(maybetype, maybeAssign) + return pass(pattern, maybetype, maybeAssign); + } + function classExpression(type, value) { + // Class expressions may have an optional name. + if (type == "variable") return className(type, value); + return classNameAfter(type, value); + } + function className(type, value) { + if (type == "variable") {register(value); return cont(classNameAfter);} + } + function classNameAfter(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter) + if (value == "extends" || value == "implements" || (isTS && type == ",")) { + if (value == "implements") cx.marked = "keyword"; + return cont(isTS ? typeexpr : expression, classNameAfter); + } + if (type == "{") return cont(pushlex("}"), classBody, poplex); + } + function classBody(type, value) { + if (type == "async" || + (type == "variable" && + (value == "static" || value == "get" || value == "set" || (isTS && isModifier(value))) && + cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))) { + cx.marked = "keyword"; + return cont(classBody); + } + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + return cont(classfield, classBody); + } + if (type == "number" || type == "string") return cont(classfield, classBody); + if (type == "[") + return cont(expression, maybetype, expect("]"), classfield, classBody) + if (value == "*") { + cx.marked = "keyword"; + return cont(classBody); + } + if (isTS && type == "(") return pass(functiondecl, classBody) + if (type == ";" || type == ",") return cont(classBody); + if (type == "}") return cont(); + if (value == "@") return cont(expression, classBody) + } + function classfield(type, value) { + if (value == "!") return cont(classfield) + if (value == "?") return cont(classfield) + if (type == ":") return cont(typeexpr, maybeAssign) + if (value == "=") return cont(expressionNoComma) + var context = cx.state.lexical.prev, isInterface = context && context.info == "interface" + return pass(isInterface ? functiondecl : functiondef) + } + function afterExport(type, value) { + if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } + if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } + if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";")); + return pass(statement); + } + function exportField(type, value) { + if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); } + if (type == "variable") return pass(expressionNoComma, exportField); + } + function afterImport(type) { + if (type == "string") return cont(); + if (type == "(") return pass(expression); + if (type == ".") return pass(maybeoperatorComma); + return pass(importSpec, maybeMoreImports, maybeFrom); + } + function importSpec(type, value) { + if (type == "{") return contCommasep(importSpec, "}"); + if (type == "variable") register(value); + if (value == "*") cx.marked = "keyword"; + return cont(maybeAs); + } + function maybeMoreImports(type) { + if (type == ",") return cont(importSpec, maybeMoreImports) + } + function maybeAs(_type, value) { + if (value == "as") { cx.marked = "keyword"; return cont(importSpec); } + } + function maybeFrom(_type, value) { + if (value == "from") { cx.marked = "keyword"; return cont(expression); } + } + function arrayLiteral(type) { + if (type == "]") return cont(); + return pass(commasep(expressionNoComma, "]")); + } + function enumdef() { + return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex) + } + function enummember() { + return pass(pattern, maybeAssign); + } + + function isContinuedStatement(state, textAfter) { + return state.lastType == "operator" || state.lastType == "," || + isOperatorChar.test(textAfter.charAt(0)) || + /[,.]/.test(textAfter.charAt(0)); + } + + function expressionAllowed(stream, state, backUp) { + return state.tokenize == tokenBase && + /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) || + (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)))) + } + + // Interface + + return { + startState: function(basecolumn) { + var state = { + tokenize: tokenBase, + lastType: "sof", + cc: [], + lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + context: parserConfig.localVars && new Context(null, null, false), + indented: basecolumn || 0 + }; + if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") + state.globalVars = parserConfig.globalVars; + return state; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + findFatArrow(stream, state); + } + if (state.tokenize != tokenComment && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; + return parseJS(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror.Pass; + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top + // Kludge to prevent 'maybelse' from blocking lexical scope pops + if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { + var c = state.cc[i]; + if (c == poplex) lexical = lexical.prev; + else if (c != maybeelse && c != popcontext) break; + } + while ((lexical.type == "stat" || lexical.type == "form") && + (firstChar == "}" || ((top = state.cc[state.cc.length - 1]) && + (top == maybeoperatorComma || top == maybeoperatorNoComma) && + !/^[,\.=+\-*:?[\(]/.test(textAfter)))) + lexical = lexical.prev; + if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") + lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + + if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0); + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "form") return lexical.indented + indentUnit; + else if (type == "stat") + return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); + else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, + blockCommentStart: jsonMode ? null : "/*", + blockCommentEnd: jsonMode ? null : "*/", + blockCommentContinue: jsonMode ? null : " * ", + lineComment: jsonMode ? null : "//", + fold: "brace", + closeBrackets: "()[]{}''\"\"``", + + helperType: jsonMode ? "json" : "javascript", + jsonldMode: jsonldMode, + jsonMode: jsonMode, + + expressionAllowed: expressionAllowed, + + skipExpression: function(state) { + parseJS(state, "atom", "atom", "true", new CodeMirror.StringStream("", 2, null)) + } + }; +}); + +CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); + +CodeMirror.defineMIME("text/javascript", "javascript"); +CodeMirror.defineMIME("text/ecmascript", "javascript"); +CodeMirror.defineMIME("application/javascript", "javascript"); +CodeMirror.defineMIME("application/x-javascript", "javascript"); +CodeMirror.defineMIME("application/ecmascript", "javascript"); +CodeMirror.defineMIME("application/json", { name: "javascript", json: true }); +CodeMirror.defineMIME("application/x-json", { name: "javascript", json: true }); +CodeMirror.defineMIME("application/manifest+json", { name: "javascript", json: true }) +CodeMirror.defineMIME("application/ld+json", { name: "javascript", jsonld: true }); +CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); +CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/jinja2/jinja2.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/jinja2/jinja2.js new file mode 100644 index 0000000000..77c9b22cae --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/jinja2/jinja2.js @@ -0,0 +1,146 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("jinja2", function() { + var keywords = ["and", "as", "block", "endblock", "by", "cycle", "debug", "else", "elif", + "extends", "filter", "endfilter", "firstof", "for", + "endfor", "if", "endif", "ifchanged", "endifchanged", + "ifequal", "endifequal", "ifnotequal", + "endifnotequal", "in", "include", "load", "not", "now", "or", + "parsed", "regroup", "reversed", "spaceless", + "endspaceless", "ssi", "templatetag", "openblock", + "closeblock", "openvariable", "closevariable", + "openbrace", "closebrace", "opencomment", + "closecomment", "widthratio", "url", "with", "endwith", + "get_current_language", "trans", "endtrans", "noop", "blocktrans", + "endblocktrans", "get_available_languages", + "get_current_language_bidi", "plural"], + operator = /^[+\-*&%=<>!?|~^]/, + sign = /^[:\[\(\{]/, + atom = ["true", "false"], + number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; + + keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); + atom = new RegExp("((" + atom.join(")|(") + "))\\b"); + + function tokenBase (stream, state) { + var ch = stream.peek(); + + //Comment + if (state.incomment) { + if(!stream.skipTo("#}")) { + stream.skipToEnd(); + } else { + stream.eatWhile(/\#|}/); + state.incomment = false; + } + return "comment"; + //Tag + } else if (state.intag) { + //After operator + if(state.operator) { + state.operator = false; + if(stream.match(atom)) { + return "atom"; + } + if(stream.match(number)) { + return "number"; + } + } + //After sign + if(state.sign) { + state.sign = false; + if(stream.match(atom)) { + return "atom"; + } + if(stream.match(number)) { + return "number"; + } + } + + if(state.instring) { + if(ch == state.instring) { + state.instring = false; + } + stream.next(); + return "string"; + } else if(ch == "'" || ch == '"') { + state.instring = ch; + stream.next(); + return "string"; + } else if(stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { + state.intag = false; + return "tag"; + } else if(stream.match(operator)) { + state.operator = true; + return "operator"; + } else if(stream.match(sign)) { + state.sign = true; + } else { + if(stream.eat(" ") || stream.sol()) { + if(stream.match(keywords)) { + return "keyword"; + } + if(stream.match(atom)) { + return "atom"; + } + if(stream.match(number)) { + return "number"; + } + if(stream.sol()) { + stream.next(); + } + } else { + stream.next(); + } + + } + return "variable"; + } else if (stream.eat("{")) { + if (stream.eat("#")) { + state.incomment = true; + if(!stream.skipTo("#}")) { + stream.skipToEnd(); + } else { + stream.eatWhile(/\#|}/); + state.incomment = false; + } + return "comment"; + //Open tag + } else if (ch = stream.eat(/\{|%/)) { + //Cache close tag + state.intag = ch; + if(ch == "{") { + state.intag = "}"; + } + stream.eat("-"); + return "tag"; + } + } + stream.next(); + }; + + return { + startState: function () { + return {tokenize: tokenBase}; + }, + token: function (stream, state) { + return state.tokenize(stream, state); + }, + blockCommentStart: "{#", + blockCommentEnd: "#}" + }; + }); + + CodeMirror.defineMIME("text/jinja2", "jinja2"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/jsx/jsx.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/jsx/jsx.js new file mode 100644 index 0000000000..beea3b9139 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/jsx/jsx.js @@ -0,0 +1,148 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript")) + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript"], mod) + else // Plain browser env + mod(CodeMirror) +})(function(CodeMirror) { + "use strict" + + // Depth means the amount of open braces in JS context, in XML + // context 0 means not in tag, 1 means in tag, and 2 means in tag + // and js block comment. + function Context(state, mode, depth, prev) { + this.state = state; this.mode = mode; this.depth = depth; this.prev = prev + } + + function copyContext(context) { + return new Context(CodeMirror.copyState(context.mode, context.state), + context.mode, + context.depth, + context.prev && copyContext(context.prev)) + } + + CodeMirror.defineMode("jsx", function(config, modeConfig) { + var xmlMode = CodeMirror.getMode(config, {name: "xml", allowMissing: true, multilineTagIndentPastTag: false, allowMissingTagName: true}) + var jsMode = CodeMirror.getMode(config, modeConfig && modeConfig.base || "javascript") + + function flatXMLIndent(state) { + var tagName = state.tagName + state.tagName = null + var result = xmlMode.indent(state, "", "") + state.tagName = tagName + return result + } + + function token(stream, state) { + if (state.context.mode == xmlMode) + return xmlToken(stream, state, state.context) + else + return jsToken(stream, state, state.context) + } + + function xmlToken(stream, state, cx) { + if (cx.depth == 2) { // Inside a JS /* */ comment + if (stream.match(/^.*?\*\//)) cx.depth = 1 + else stream.skipToEnd() + return "comment" + } + + if (stream.peek() == "{") { + xmlMode.skipAttribute(cx.state) + + var indent = flatXMLIndent(cx.state), xmlContext = cx.state.context + // If JS starts on same line as tag + if (xmlContext && stream.match(/^[^>]*>\s*$/, false)) { + while (xmlContext.prev && !xmlContext.startOfLine) + xmlContext = xmlContext.prev + // If tag starts the line, use XML indentation level + if (xmlContext.startOfLine) indent -= config.indentUnit + // Else use JS indentation level + else if (cx.prev.state.lexical) indent = cx.prev.state.lexical.indented + // Else if inside of tag + } else if (cx.depth == 1) { + indent += config.indentUnit + } + + state.context = new Context(CodeMirror.startState(jsMode, indent), + jsMode, 0, state.context) + return null + } + + if (cx.depth == 1) { // Inside of tag + if (stream.peek() == "<") { // Tag inside of tag + xmlMode.skipAttribute(cx.state) + state.context = new Context(CodeMirror.startState(xmlMode, flatXMLIndent(cx.state)), + xmlMode, 0, state.context) + return null + } else if (stream.match("//")) { + stream.skipToEnd() + return "comment" + } else if (stream.match("/*")) { + cx.depth = 2 + return token(stream, state) + } + } + + var style = xmlMode.token(stream, cx.state), cur = stream.current(), stop + if (/\btag\b/.test(style)) { + if (/>$/.test(cur)) { + if (cx.state.context) cx.depth = 0 + else state.context = state.context.prev + } else if (/^ -1) { + stream.backUp(cur.length - stop) + } + return style + } + + function jsToken(stream, state, cx) { + if (stream.peek() == "<" && jsMode.expressionAllowed(stream, cx.state)) { + state.context = new Context(CodeMirror.startState(xmlMode, jsMode.indent(cx.state, "", "")), + xmlMode, 0, state.context) + jsMode.skipExpression(cx.state) + return null + } + + var style = jsMode.token(stream, cx.state) + if (!style && cx.depth != null) { + var cur = stream.current() + if (cur == "{") { + cx.depth++ + } else if (cur == "}") { + if (--cx.depth == 0) state.context = state.context.prev + } + } + return style + } + + return { + startState: function() { + return {context: new Context(CodeMirror.startState(jsMode), jsMode)} + }, + + copyState: function(state) { + return {context: copyContext(state.context)} + }, + + token: token, + + indent: function(state, textAfter, fullLine) { + return state.context.mode.indent(state.context.state, textAfter, fullLine) + }, + + innerMode: function(state) { + return state.context + } + } + }, "xml", "javascript") + + CodeMirror.defineMIME("text/jsx", "jsx") + CodeMirror.defineMIME("text/typescript-jsx", {name: "jsx", base: {name: "javascript", typescript: true}}) +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/julia/julia.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/julia/julia.js new file mode 100644 index 0000000000..cb0d69c8e2 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/julia/julia.js @@ -0,0 +1,390 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("julia", function(config, parserConf) { + function wordRegexp(words, end, pre) { + if (typeof pre === "undefined") { pre = ""; } + if (typeof end === "undefined") { end = "\\b"; } + return new RegExp("^" + pre + "((" + words.join(")|(") + "))" + end); + } + + var octChar = "\\\\[0-7]{1,3}"; + var hexChar = "\\\\x[A-Fa-f0-9]{1,2}"; + var sChar = "\\\\[abefnrtv0%?'\"\\\\]"; + var uChar = "([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])"; + + var asciiOperatorsList = [ + "[<>]:", "[<>=]=", "<<=?", ">>>?=?", "=>", "--?>", "<--[->]?", "\\/\\/", + "\\.{2,3}", "[\\.\\\\%*+\\-<>!\\/^|&]=?", "\\?", "\\$", "~", ":" + ]; + var operators = parserConf.operators || wordRegexp([ + "[<>]:", "[<>=]=", "<<=?", ">>>?=?", "=>", "--?>", "<--[->]?", "\\/\\/", + "[\\\\%*+\\-<>!\\/^|&\\u00F7\\u22BB]=?", "\\?", "\\$", "~", ":", + "\\u00D7", "\\u2208", "\\u2209", "\\u220B", "\\u220C", "\\u2218", + "\\u221A", "\\u221B", "\\u2229", "\\u222A", "\\u2260", "\\u2264", + "\\u2265", "\\u2286", "\\u2288", "\\u228A", "\\u22C5", + "\\b(in|isa)\\b(?!\.?\\()" + ], ""); + var delimiters = parserConf.delimiters || /^[;,()[\]{}]/; + var identifiers = parserConf.identifiers || + /^[_A-Za-z\u00A1-\u2217\u2219-\uFFFF][\w\u00A1-\u2217\u2219-\uFFFF]*!*/; + + var chars = wordRegexp([octChar, hexChar, sChar, uChar], "'"); + + var openersList = ["begin", "function", "type", "struct", "immutable", "let", + "macro", "for", "while", "quote", "if", "else", "elseif", "try", + "finally", "catch", "do"]; + + var closersList = ["end", "else", "elseif", "catch", "finally"]; + + var keywordsList = ["if", "else", "elseif", "while", "for", "begin", "let", + "end", "do", "try", "catch", "finally", "return", "break", "continue", + "global", "local", "const", "export", "import", "importall", "using", + "function", "where", "macro", "module", "baremodule", "struct", "type", + "mutable", "immutable", "quote", "typealias", "abstract", "primitive", + "bitstype"]; + + var builtinsList = ["true", "false", "nothing", "NaN", "Inf"]; + + CodeMirror.registerHelper("hintWords", "julia", keywordsList.concat(builtinsList)); + + var openers = wordRegexp(openersList); + var closers = wordRegexp(closersList); + var keywords = wordRegexp(keywordsList); + var builtins = wordRegexp(builtinsList); + + var macro = /^@[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; + var symbol = /^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/; + var stringPrefixes = /^(`|([_A-Za-z\u00A1-\uFFFF]*"("")?))/; + + var macroOperators = wordRegexp(asciiOperatorsList, "", "@"); + var symbolOperators = wordRegexp(asciiOperatorsList, "", ":"); + + function inArray(state) { + return (state.nestedArrays > 0); + } + + function inGenerator(state) { + return (state.nestedGenerators > 0); + } + + function currentScope(state, n) { + if (typeof(n) === "undefined") { n = 0; } + if (state.scopes.length <= n) { + return null; + } + return state.scopes[state.scopes.length - (n + 1)]; + } + + // tokenizers + function tokenBase(stream, state) { + // Handle multiline comments + if (stream.match('#=', false)) { + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } + + // Handle scope changes + var leavingExpr = state.leavingExpr; + if (stream.sol()) { + leavingExpr = false; + } + state.leavingExpr = false; + + if (leavingExpr) { + if (stream.match(/^'+/)) { + return "operator"; + } + } + + if (stream.match(/\.{4,}/)) { + return "error"; + } else if (stream.match(/\.{1,3}/)) { + return "operator"; + } + + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle single line comments + if (ch === '#') { + stream.skipToEnd(); + return "comment"; + } + + if (ch === '[') { + state.scopes.push('['); + state.nestedArrays++; + } + + if (ch === '(') { + state.scopes.push('('); + state.nestedGenerators++; + } + + if (inArray(state) && ch === ']') { + while (state.scopes.length && currentScope(state) !== "[") { state.scopes.pop(); } + state.scopes.pop(); + state.nestedArrays--; + state.leavingExpr = true; + } + + if (inGenerator(state) && ch === ')') { + while (state.scopes.length && currentScope(state) !== "(") { state.scopes.pop(); } + state.scopes.pop(); + state.nestedGenerators--; + state.leavingExpr = true; + } + + if (inArray(state)) { + if (state.lastToken == "end" && stream.match(':')) { + return "operator"; + } + if (stream.match('end')) { + return "number"; + } + } + + var match; + if (match = stream.match(openers, false)) { + state.scopes.push(match[0]); + } + + if (stream.match(closers, false)) { + state.scopes.pop(); + } + + // Handle type annotations + if (stream.match(/^::(?![:\$])/)) { + state.tokenize = tokenAnnotation; + return state.tokenize(stream, state); + } + + // Handle symbols + if (!leavingExpr && (stream.match(symbol) || stream.match(symbolOperators))) { + return "builtin"; + } + + // Handle parametric types + //if (stream.match(/^{[^}]*}(?=\()/)) { + // return "builtin"; + //} + + // Handle operators and Delimiters + if (stream.match(operators)) { + return "operator"; + } + + // Handle Number Literals + if (stream.match(/^\.?\d/, false)) { + var imMatcher = RegExp(/^im\b/); + var numberLiteral = false; + if (stream.match(/^0x\.[0-9a-f_]+p[\+\-]?[_\d]+/i)) { numberLiteral = true; } + // Integers + if (stream.match(/^0x[0-9a-f_]+/i)) { numberLiteral = true; } // Hex + if (stream.match(/^0b[01_]+/i)) { numberLiteral = true; } // Binary + if (stream.match(/^0o[0-7_]+/i)) { numberLiteral = true; } // Octal + // Floats + if (stream.match(/^(?:(?:\d[_\d]*)?\.(?!\.)(?:\d[_\d]*)?|\d[_\d]*\.(?!\.)(?:\d[_\d]*))?([Eef][\+\-]?[_\d]+)?/i)) { numberLiteral = true; } + if (stream.match(/^\d[_\d]*(e[\+\-]?\d+)?/i)) { numberLiteral = true; } // Decimal + if (numberLiteral) { + // Integer literals may be "long" + stream.match(imMatcher); + state.leavingExpr = true; + return "number"; + } + } + + // Handle Chars + if (stream.match('\'')) { + state.tokenize = tokenChar; + return state.tokenize(stream, state); + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + if (stream.match(macro) || stream.match(macroOperators)) { + return "meta"; + } + + if (stream.match(delimiters)) { + return null; + } + + if (stream.match(keywords)) { + return "keyword"; + } + + if (stream.match(builtins)) { + return "builtin"; + } + + var isDefinition = state.isDefinition || state.lastToken == "function" || + state.lastToken == "macro" || state.lastToken == "type" || + state.lastToken == "struct" || state.lastToken == "immutable"; + + if (stream.match(identifiers)) { + if (isDefinition) { + if (stream.peek() === '.') { + state.isDefinition = true; + return "variable"; + } + state.isDefinition = false; + return "def"; + } + state.leavingExpr = true; + return "variable"; + } + + // Handle non-detected items + stream.next(); + return "error"; + } + + function tokenAnnotation(stream, state) { + stream.match(/.*?(?=[,;{}()=\s]|$)/); + if (stream.match('{')) { + state.nestedParameters++; + } else if (stream.match('}') && state.nestedParameters > 0) { + state.nestedParameters--; + } + if (state.nestedParameters > 0) { + stream.match(/.*?(?={|})/) || stream.next(); + } else if (state.nestedParameters == 0) { + state.tokenize = tokenBase; + } + return "builtin"; + } + + function tokenComment(stream, state) { + if (stream.match('#=')) { + state.nestedComments++; + } + if (!stream.match(/.*?(?=(#=|=#))/)) { + stream.skipToEnd(); + } + if (stream.match('=#')) { + state.nestedComments--; + if (state.nestedComments == 0) + state.tokenize = tokenBase; + } + return "comment"; + } + + function tokenChar(stream, state) { + var isChar = false, match; + if (stream.match(chars)) { + isChar = true; + } else if (match = stream.match(/\\u([a-f0-9]{1,4})(?=')/i)) { + var value = parseInt(match[1], 16); + if (value <= 55295 || value >= 57344) { // (U+0,U+D7FF), (U+E000,U+FFFF) + isChar = true; + stream.next(); + } + } else if (match = stream.match(/\\U([A-Fa-f0-9]{5,8})(?=')/)) { + var value = parseInt(match[1], 16); + if (value <= 1114111) { // U+10FFFF + isChar = true; + stream.next(); + } + } + if (isChar) { + state.leavingExpr = true; + state.tokenize = tokenBase; + return "string"; + } + if (!stream.match(/^[^']+(?=')/)) { stream.skipToEnd(); } + if (stream.match('\'')) { state.tokenize = tokenBase; } + return "error"; + } + + function tokenStringFactory(delimiter) { + if (delimiter.substr(-3) === '"""') { + delimiter = '"""'; + } else if (delimiter.substr(-1) === '"') { + delimiter = '"'; + } + function tokenString(stream, state) { + if (stream.eat('\\')) { + stream.next(); + } else if (stream.match(delimiter)) { + state.tokenize = tokenBase; + state.leavingExpr = true; + return "string"; + } else { + stream.eat(/[`"]/); + } + stream.eatWhile(/[^\\`"]/); + return "string"; + } + return tokenString; + } + + var external = { + startState: function() { + return { + tokenize: tokenBase, + scopes: [], + lastToken: null, + leavingExpr: false, + isDefinition: false, + nestedArrays: 0, + nestedComments: 0, + nestedGenerators: 0, + nestedParameters: 0, + firstParenPos: -1 + }; + }, + + token: function(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + if (current && style) { + state.lastToken = current; + } + + return style; + }, + + indent: function(state, textAfter) { + var delta = 0; + if ( textAfter === ']' || textAfter === ')' || /^end\b/.test(textAfter) || + /^else/.test(textAfter) || /^catch\b/.test(textAfter) || /^elseif\b/.test(textAfter) || + /^finally/.test(textAfter) ) { + delta = -1; + } + return (state.scopes.length + delta) * config.indentUnit; + }, + + electricInput: /\b(end|else|catch|finally)\b/, + blockCommentStart: "#=", + blockCommentEnd: "=#", + lineComment: "#", + closeBrackets: "()[]{}\"\"", + fold: "indent" + }; + return external; +}); + + +CodeMirror.defineMIME("text/x-julia", "julia"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/livescript/livescript.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/livescript/livescript.js new file mode 100644 index 0000000000..595e067d16 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/livescript/livescript.js @@ -0,0 +1,280 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/** + * Link to the project's GitHub page: + * https://github.com/duralog/CodeMirror + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode('livescript', function(){ + var tokenBase = function(stream, state) { + var next_rule = state.next || "start"; + if (next_rule) { + state.next = state.next; + var nr = Rules[next_rule]; + if (nr.splice) { + for (var i$ = 0; i$ < nr.length; ++i$) { + var r = nr[i$]; + if (r.regex && stream.match(r.regex)) { + state.next = r.next || state.next; + return r.token; + } + } + stream.next(); + return 'error'; + } + if (stream.match(r = Rules[next_rule])) { + if (r.regex && stream.match(r.regex)) { + state.next = r.next; + return r.token; + } else { + stream.next(); + return 'error'; + } + } + } + stream.next(); + return 'error'; + }; + var external = { + startState: function(){ + return { + next: 'start', + lastToken: {style: null, indent: 0, content: ""} + }; + }, + token: function(stream, state){ + while (stream.pos == stream.start) + var style = tokenBase(stream, state); + state.lastToken = { + style: style, + indent: stream.indentation(), + content: stream.current() + }; + return style.replace(/\./g, ' '); + }, + indent: function(state){ + var indentation = state.lastToken.indent; + if (state.lastToken.content.match(indenter)) { + indentation += 2; + } + return indentation; + } + }; + return external; + }); + + var identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*'; + var indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$'); + var keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))'; + var stringfill = { + token: 'string', + regex: '.+' + }; + var Rules = { + start: [ + { + token: 'comment.doc', + regex: '/\\*', + next: 'comment' + }, { + token: 'comment', + regex: '#.*' + }, { + token: 'keyword', + regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend + }, { + token: 'constant.language', + regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend + }, { + token: 'invalid.illegal', + regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend + }, { + token: 'language.support.class', + regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend + }, { + token: 'language.support.function', + regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend + }, { + token: 'variable.language', + regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend + }, { + token: 'identifier', + regex: identifier + '\\s*:(?![:=])' + }, { + token: 'variable', + regex: identifier + }, { + token: 'keyword.operator', + regex: '(?:\\.{3}|\\s+\\?)' + }, { + token: 'keyword.variable', + regex: '(?:@+|::|\\.\\.)', + next: 'key' + }, { + token: 'keyword.operator', + regex: '\\.\\s*', + next: 'key' + }, { + token: 'string', + regex: '\\\\\\S[^\\s,;)}\\]]*' + }, { + token: 'string.doc', + regex: '\'\'\'', + next: 'qdoc' + }, { + token: 'string.doc', + regex: '"""', + next: 'qqdoc' + }, { + token: 'string', + regex: '\'', + next: 'qstring' + }, { + token: 'string', + regex: '"', + next: 'qqstring' + }, { + token: 'string', + regex: '`', + next: 'js' + }, { + token: 'string', + regex: '<\\[', + next: 'words' + }, { + token: 'string.regex', + regex: '//', + next: 'heregex' + }, { + token: 'string.regex', + regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}', + next: 'key' + }, { + token: 'constant.numeric', + regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)' + }, { + token: 'lparen', + regex: '[({[]' + }, { + token: 'rparen', + regex: '[)}\\]]', + next: 'key' + }, { + token: 'keyword.operator', + regex: '\\S+' + }, { + token: 'text', + regex: '\\s+' + } + ], + heregex: [ + { + token: 'string.regex', + regex: '.*?//[gimy$?]{0,4}', + next: 'start' + }, { + token: 'string.regex', + regex: '\\s*#{' + }, { + token: 'comment.regex', + regex: '\\s+(?:#.*)?' + }, { + token: 'string.regex', + regex: '\\S+' + } + ], + key: [ + { + token: 'keyword.operator', + regex: '[.?@!]+' + }, { + token: 'identifier', + regex: identifier, + next: 'start' + }, { + token: 'text', + regex: '', + next: 'start' + } + ], + comment: [ + { + token: 'comment.doc', + regex: '.*?\\*/', + next: 'start' + }, { + token: 'comment.doc', + regex: '.+' + } + ], + qdoc: [ + { + token: 'string', + regex: ".*?'''", + next: 'key' + }, stringfill + ], + qqdoc: [ + { + token: 'string', + regex: '.*?"""', + next: 'key' + }, stringfill + ], + qstring: [ + { + token: 'string', + regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'', + next: 'key' + }, stringfill + ], + qqstring: [ + { + token: 'string', + regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"', + next: 'key' + }, stringfill + ], + js: [ + { + token: 'string', + regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`', + next: 'key' + }, stringfill + ], + words: [ + { + token: 'string', + regex: '.*?\\]>', + next: 'key' + }, stringfill + ] + }; + for (var idx in Rules) { + var r = Rules[idx]; + if (r.splice) { + for (var i = 0, len = r.length; i < len; ++i) { + var rr = r[i]; + if (typeof rr.regex === 'string') { + Rules[idx][i].regex = new RegExp('^' + rr.regex); + } + } + } else if (typeof rr.regex === 'string') { + Rules[idx].regex = new RegExp('^' + r.regex); + } + } + + CodeMirror.defineMIME('text/x-livescript', 'livescript'); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/lua/lua.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/lua/lua.js new file mode 100644 index 0000000000..2fad0180ff --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/lua/lua.js @@ -0,0 +1,160 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// LUA mode. Ported to CodeMirror 2 from Franciszek Wawrzak's +// CodeMirror 1 mode. +// highlights keywords, strings, comments (no leveling supported! ("[==[")), tokens, basic indenting + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("lua", function(config, parserConfig) { + var indentUnit = config.indentUnit; + + function prefixRE(words) { + return new RegExp("^(?:" + words.join("|") + ")", "i"); + } + function wordRE(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + } + var specials = wordRE(parserConfig.specials || []); + + // long list of standard functions from lua manual + var builtins = wordRE([ + "_G","_VERSION","assert","collectgarbage","dofile","error","getfenv","getmetatable","ipairs","load", + "loadfile","loadstring","module","next","pairs","pcall","print","rawequal","rawget","rawset","require", + "select","setfenv","setmetatable","tonumber","tostring","type","unpack","xpcall", + + "coroutine.create","coroutine.resume","coroutine.running","coroutine.status","coroutine.wrap","coroutine.yield", + + "debug.debug","debug.getfenv","debug.gethook","debug.getinfo","debug.getlocal","debug.getmetatable", + "debug.getregistry","debug.getupvalue","debug.setfenv","debug.sethook","debug.setlocal","debug.setmetatable", + "debug.setupvalue","debug.traceback", + + "close","flush","lines","read","seek","setvbuf","write", + + "io.close","io.flush","io.input","io.lines","io.open","io.output","io.popen","io.read","io.stderr","io.stdin", + "io.stdout","io.tmpfile","io.type","io.write", + + "math.abs","math.acos","math.asin","math.atan","math.atan2","math.ceil","math.cos","math.cosh","math.deg", + "math.exp","math.floor","math.fmod","math.frexp","math.huge","math.ldexp","math.log","math.log10","math.max", + "math.min","math.modf","math.pi","math.pow","math.rad","math.random","math.randomseed","math.sin","math.sinh", + "math.sqrt","math.tan","math.tanh", + + "os.clock","os.date","os.difftime","os.execute","os.exit","os.getenv","os.remove","os.rename","os.setlocale", + "os.time","os.tmpname", + + "package.cpath","package.loaded","package.loaders","package.loadlib","package.path","package.preload", + "package.seeall", + + "string.byte","string.char","string.dump","string.find","string.format","string.gmatch","string.gsub", + "string.len","string.lower","string.match","string.rep","string.reverse","string.sub","string.upper", + + "table.concat","table.insert","table.maxn","table.remove","table.sort" + ]); + var keywords = wordRE(["and","break","elseif","false","nil","not","or","return", + "true","function", "end", "if", "then", "else", "do", + "while", "repeat", "until", "for", "in", "local" ]); + + var indentTokens = wordRE(["function", "if","repeat","do", "\\(", "{"]); + var dedentTokens = wordRE(["end", "until", "\\)", "}"]); + var dedentPartial = prefixRE(["end", "until", "\\)", "}", "else", "elseif"]); + + function readBracket(stream) { + var level = 0; + while (stream.eat("=")) ++level; + stream.eat("["); + return level; + } + + function normal(stream, state) { + var ch = stream.next(); + if (ch == "-" && stream.eat("-")) { + if (stream.eat("[") && stream.eat("[")) + return (state.cur = bracketed(readBracket(stream), "comment"))(stream, state); + stream.skipToEnd(); + return "comment"; + } + if (ch == "\"" || ch == "'") + return (state.cur = string(ch))(stream, state); + if (ch == "[" && /[\[=]/.test(stream.peek())) + return (state.cur = bracketed(readBracket(stream), "string"))(stream, state); + if (/\d/.test(ch)) { + stream.eatWhile(/[\w.%]/); + return "number"; + } + if (/[\w_]/.test(ch)) { + stream.eatWhile(/[\w\\\-_.]/); + return "variable"; + } + return null; + } + + function bracketed(level, style) { + return function(stream, state) { + var curlev = null, ch; + while ((ch = stream.next()) != null) { + if (curlev == null) {if (ch == "]") curlev = 0;} + else if (ch == "=") ++curlev; + else if (ch == "]" && curlev == level) { state.cur = normal; break; } + else curlev = null; + } + return style; + }; + } + + function string(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.cur = normal; + return "string"; + }; + } + + return { + startState: function(basecol) { + return {basecol: basecol || 0, indentDepth: 0, cur: normal}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = state.cur(stream, state); + var word = stream.current(); + if (style == "variable") { + if (keywords.test(word)) style = "keyword"; + else if (builtins.test(word)) style = "builtin"; + else if (specials.test(word)) style = "variable-2"; + } + if ((style != "comment") && (style != "string")){ + if (indentTokens.test(word)) ++state.indentDepth; + else if (dedentTokens.test(word)) --state.indentDepth; + } + return style; + }, + + indent: function(state, textAfter) { + var closing = dedentPartial.test(textAfter); + return state.basecol + indentUnit * (state.indentDepth - (closing ? 1 : 0)); + }, + + electricInput: /^\s*(?:end|until|else|\)|\})$/, + lineComment: "--", + blockCommentStart: "--[[", + blockCommentEnd: "]]" + }; +}); + +CodeMirror.defineMIME("text/x-lua", "lua"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/markdown/markdown.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/markdown/markdown.js new file mode 100644 index 0000000000..a9e272ea81 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/markdown/markdown.js @@ -0,0 +1,886 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../xml/xml"), require("../meta")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../xml/xml", "../meta"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) { + + var htmlMode = CodeMirror.getMode(cmCfg, "text/html"); + var htmlModeMissing = htmlMode.name == "null" + + function getMode(name) { + if (CodeMirror.findModeByName) { + var found = CodeMirror.findModeByName(name); + if (found) name = found.mime || found.mimes[0]; + } + var mode = CodeMirror.getMode(cmCfg, name); + return mode.name == "null" ? null : mode; + } + + // Should characters that affect highlighting be highlighted separate? + // Does not include characters that will be output (such as `1.` and `-` for lists) + if (modeCfg.highlightFormatting === undefined) + modeCfg.highlightFormatting = false; + + // Maximum number of nested blockquotes. Set to 0 for infinite nesting. + // Excess `>` will emit `error` token. + if (modeCfg.maxBlockquoteDepth === undefined) + modeCfg.maxBlockquoteDepth = 0; + + // Turn on task lists? ("- [ ] " and "- [x] ") + if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; + + // Turn on strikethrough syntax + if (modeCfg.strikethrough === undefined) + modeCfg.strikethrough = false; + + if (modeCfg.emoji === undefined) + modeCfg.emoji = false; + + if (modeCfg.fencedCodeBlockHighlighting === undefined) + modeCfg.fencedCodeBlockHighlighting = true; + + if (modeCfg.fencedCodeBlockDefaultMode === undefined) + modeCfg.fencedCodeBlockDefaultMode = 'text/plain'; + + if (modeCfg.xml === undefined) + modeCfg.xml = true; + + // Allow token types to be overridden by user-provided token types. + if (modeCfg.tokenTypeOverrides === undefined) + modeCfg.tokenTypeOverrides = {}; + + var tokenTypes = { + header: "header", + code: "comment", + quote: "quote", + list1: "variable-2", + list2: "variable-3", + list3: "keyword", + hr: "hr", + image: "image", + imageAltText: "image-alt-text", + imageMarker: "image-marker", + formatting: "formatting", + linkInline: "link", + linkEmail: "link", + linkText: "link", + linkHref: "string", + em: "em", + strong: "strong", + strikethrough: "strikethrough", + emoji: "builtin" + }; + + for (var tokenType in tokenTypes) { + if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) { + tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType]; + } + } + + var hrRE = /^([*\-_])(?:\s*\1){2,}\s*$/ + , listRE = /^(?:[*\-+]|^[0-9]+([.)]))\s+/ + , taskListRE = /^\[(x| )\](?=\s)/i // Must follow listRE + , atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/ + , setextHeaderRE = /^ {0,3}(?:\={1,}|-{2,})\s*$/ + , textRE = /^[^#!\[\]*_\\<>` "'(~:]+/ + , fencedCodeRE = /^(~~~+|```+)[ \t]*([\w\/+#-]*)[^\n`]*$/ + , linkDefRE = /^\s*\[[^\]]+?\]:.*$/ // naive link-definition + , punctuation = /[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/ + , expandedTab = " " // CommonMark specifies tab as 4 spaces + + function switchInline(stream, state, f) { + state.f = state.inline = f; + return f(stream, state); + } + + function switchBlock(stream, state, f) { + state.f = state.block = f; + return f(stream, state); + } + + function lineIsEmpty(line) { + return !line || !/\S/.test(line.string) + } + + // Blocks + + function blankLine(state) { + // Reset linkTitle state + state.linkTitle = false; + state.linkHref = false; + state.linkText = false; + // Reset EM state + state.em = false; + // Reset STRONG state + state.strong = false; + // Reset strikethrough state + state.strikethrough = false; + // Reset state.quote + state.quote = 0; + // Reset state.indentedCode + state.indentedCode = false; + if (state.f == htmlBlock) { + var exit = htmlModeMissing + if (!exit) { + var inner = CodeMirror.innerMode(htmlMode, state.htmlState) + exit = inner.mode.name == "xml" && inner.state.tagStart === null && + (!inner.state.context && inner.state.tokenize.isInText) + } + if (exit) { + state.f = inlineNormal; + state.block = blockNormal; + state.htmlState = null; + } + } + // Reset state.trailingSpace + state.trailingSpace = 0; + state.trailingSpaceNewLine = false; + // Mark this line as blank + state.prevLine = state.thisLine + state.thisLine = {stream: null} + return null; + } + + function blockNormal(stream, state) { + var firstTokenOnLine = stream.column() === state.indentation; + var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream); + var prevLineIsIndentedCode = state.indentedCode; + var prevLineIsHr = state.prevLine.hr; + var prevLineIsList = state.list !== false; + var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3; + + state.indentedCode = false; + + var lineIndentation = state.indentation; + // compute once per line (on first token) + if (state.indentationDiff === null) { + state.indentationDiff = state.indentation; + if (prevLineIsList) { + state.list = null; + // While this list item's marker's indentation is less than the deepest + // list item's content's indentation,pop the deepest list item + // indentation off the stack, and update block indentation state + while (lineIndentation < state.listStack[state.listStack.length - 1]) { + state.listStack.pop(); + if (state.listStack.length) { + state.indentation = state.listStack[state.listStack.length - 1]; + // less than the first list's indent -> the line is no longer a list + } else { + state.list = false; + } + } + if (state.list !== false) { + state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1] + } + } + } + + // not comprehensive (currently only for setext detection purposes) + var allowsInlineContinuation = ( + !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header && + (!prevLineIsList || !prevLineIsIndentedCode) && + !state.prevLine.fencedCodeEnd + ); + + var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) && + state.indentation <= maxNonCodeIndentation && stream.match(hrRE); + + var match = null; + if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd || + state.prevLine.header || prevLineLineIsEmpty)) { + stream.skipToEnd(); + state.indentedCode = true; + return tokenTypes.code; + } else if (stream.eatSpace()) { + return null; + } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) { + state.quote = 0; + state.header = match[1].length; + state.thisLine.header = true; + if (modeCfg.highlightFormatting) state.formatting = "header"; + state.f = state.inline; + return getType(state); + } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) { + state.quote = firstTokenOnLine ? 1 : state.quote + 1; + if (modeCfg.highlightFormatting) state.formatting = "quote"; + stream.eatSpace(); + return getType(state); + } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) { + var listType = match[1] ? "ol" : "ul"; + + state.indentation = lineIndentation + stream.current().length; + state.list = true; + state.quote = 0; + + // Add this list item's content's indentation to the stack + state.listStack.push(state.indentation); + // Reset inline styles which shouldn't propagate across list items + state.em = false; + state.strong = false; + state.code = false; + state.strikethrough = false; + + if (modeCfg.taskLists && stream.match(taskListRE, false)) { + state.taskList = true; + } + state.f = state.inline; + if (modeCfg.highlightFormatting) state.formatting = ["list", "list-" + listType]; + return getType(state); + } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) { + state.quote = 0; + state.fencedEndRE = new RegExp(match[1] + "+ *$"); + // try switching mode + state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode ); + if (state.localMode) state.localState = CodeMirror.startState(state.localMode); + state.f = state.block = local; + if (modeCfg.highlightFormatting) state.formatting = "code-block"; + state.code = -1 + return getType(state); + // SETEXT has lowest block-scope precedence after HR, so check it after + // the others (code, blockquote, list...) + } else if ( + // if setext set, indicates line after ---/=== + state.setext || ( + // line before ---/=== + (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false && + !state.code && !isHr && !linkDefRE.test(stream.string) && + (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE)) + ) + ) { + if ( !state.setext ) { + state.header = match[0].charAt(0) == '=' ? 1 : 2; + state.setext = state.header; + } else { + state.header = state.setext; + // has no effect on type so we can reset it now + state.setext = 0; + stream.skipToEnd(); + if (modeCfg.highlightFormatting) state.formatting = "header"; + } + state.thisLine.header = true; + state.f = state.inline; + return getType(state); + } else if (isHr) { + stream.skipToEnd(); + state.hr = true; + state.thisLine.hr = true; + return tokenTypes.hr; + } else if (stream.peek() === '[') { + return switchInline(stream, state, footnoteLink); + } + + return switchInline(stream, state, state.inline); + } + + function htmlBlock(stream, state) { + var style = htmlMode.token(stream, state.htmlState); + if (!htmlModeMissing) { + var inner = CodeMirror.innerMode(htmlMode, state.htmlState) + if ((inner.mode.name == "xml" && inner.state.tagStart === null && + (!inner.state.context && inner.state.tokenize.isInText)) || + (state.md_inside && stream.current().indexOf(">") > -1)) { + state.f = inlineNormal; + state.block = blockNormal; + state.htmlState = null; + } + } + return style; + } + + function local(stream, state) { + var currListInd = state.listStack[state.listStack.length - 1] || 0; + var hasExitedList = state.indentation < currListInd; + var maxFencedEndInd = currListInd + 3; + if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) { + if (modeCfg.highlightFormatting) state.formatting = "code-block"; + var returnType; + if (!hasExitedList) returnType = getType(state) + state.localMode = state.localState = null; + state.block = blockNormal; + state.f = inlineNormal; + state.fencedEndRE = null; + state.code = 0 + state.thisLine.fencedCodeEnd = true; + if (hasExitedList) return switchBlock(stream, state, state.block); + return returnType; + } else if (state.localMode) { + return state.localMode.token(stream, state.localState); + } else { + stream.skipToEnd(); + return tokenTypes.code; + } + } + + // Inline + function getType(state) { + var styles = []; + + if (state.formatting) { + styles.push(tokenTypes.formatting); + + if (typeof state.formatting === "string") state.formatting = [state.formatting]; + + for (var i = 0; i < state.formatting.length; i++) { + styles.push(tokenTypes.formatting + "-" + state.formatting[i]); + + if (state.formatting[i] === "header") { + styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.header); + } + + // Add `formatting-quote` and `formatting-quote-#` for blockquotes + // Add `error` instead if the maximum blockquote nesting depth is passed + if (state.formatting[i] === "quote") { + if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { + styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.quote); + } else { + styles.push("error"); + } + } + } + } + + if (state.taskOpen) { + styles.push("meta"); + return styles.length ? styles.join(' ') : null; + } + if (state.taskClosed) { + styles.push("property"); + return styles.length ? styles.join(' ') : null; + } + + if (state.linkHref) { + styles.push(tokenTypes.linkHref, "url"); + } else { // Only apply inline styles to non-url text + if (state.strong) { styles.push(tokenTypes.strong); } + if (state.em) { styles.push(tokenTypes.em); } + if (state.strikethrough) { styles.push(tokenTypes.strikethrough); } + if (state.emoji) { styles.push(tokenTypes.emoji); } + if (state.linkText) { styles.push(tokenTypes.linkText); } + if (state.code) { styles.push(tokenTypes.code); } + if (state.image) { styles.push(tokenTypes.image); } + if (state.imageAltText) { styles.push(tokenTypes.imageAltText, "link"); } + if (state.imageMarker) { styles.push(tokenTypes.imageMarker); } + } + + if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + "-" + state.header); } + + if (state.quote) { + styles.push(tokenTypes.quote); + + // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth + if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { + styles.push(tokenTypes.quote + "-" + state.quote); + } else { + styles.push(tokenTypes.quote + "-" + modeCfg.maxBlockquoteDepth); + } + } + + if (state.list !== false) { + var listMod = (state.listStack.length - 1) % 3; + if (!listMod) { + styles.push(tokenTypes.list1); + } else if (listMod === 1) { + styles.push(tokenTypes.list2); + } else { + styles.push(tokenTypes.list3); + } + } + + if (state.trailingSpaceNewLine) { + styles.push("trailing-space-new-line"); + } else if (state.trailingSpace) { + styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b")); + } + + return styles.length ? styles.join(' ') : null; + } + + function handleText(stream, state) { + if (stream.match(textRE, true)) { + return getType(state); + } + return undefined; + } + + function inlineNormal(stream, state) { + var style = state.text(stream, state); + if (typeof style !== 'undefined') + return style; + + if (state.list) { // List marker (*, +, -, 1., etc) + state.list = null; + return getType(state); + } + + if (state.taskList) { + var taskOpen = stream.match(taskListRE, true)[1] === " "; + if (taskOpen) state.taskOpen = true; + else state.taskClosed = true; + if (modeCfg.highlightFormatting) state.formatting = "task"; + state.taskList = false; + return getType(state); + } + + state.taskOpen = false; + state.taskClosed = false; + + if (state.header && stream.match(/^#+$/, true)) { + if (modeCfg.highlightFormatting) state.formatting = "header"; + return getType(state); + } + + var ch = stream.next(); + + // Matches link titles present on next line + if (state.linkTitle) { + state.linkTitle = false; + var matchCh = ch; + if (ch === '(') { + matchCh = ')'; + } + matchCh = (matchCh+'').replace(/([.?*+^\[\]\\(){}|-])/g, "\\$1"); + var regex = '^\\s*(?:[^' + matchCh + '\\\\]+|\\\\\\\\|\\\\.)' + matchCh; + if (stream.match(new RegExp(regex), true)) { + return tokenTypes.linkHref; + } + } + + // If this block is changed, it may need to be updated in GFM mode + if (ch === '`') { + var previousFormatting = state.formatting; + if (modeCfg.highlightFormatting) state.formatting = "code"; + stream.eatWhile('`'); + var count = stream.current().length + if (state.code == 0 && (!state.quote || count == 1)) { + state.code = count + return getType(state) + } else if (count == state.code) { // Must be exact + var t = getType(state) + state.code = 0 + return t + } else { + state.formatting = previousFormatting + return getType(state) + } + } else if (state.code) { + return getType(state); + } + + if (ch === '\\') { + stream.next(); + if (modeCfg.highlightFormatting) { + var type = getType(state); + var formattingEscape = tokenTypes.formatting + "-escape"; + return type ? type + " " + formattingEscape : formattingEscape; + } + } + + if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) { + state.imageMarker = true; + state.image = true; + if (modeCfg.highlightFormatting) state.formatting = "image"; + return getType(state); + } + + if (ch === '[' && state.imageMarker && stream.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/, false)) { + state.imageMarker = false; + state.imageAltText = true + if (modeCfg.highlightFormatting) state.formatting = "image"; + return getType(state); + } + + if (ch === ']' && state.imageAltText) { + if (modeCfg.highlightFormatting) state.formatting = "image"; + var type = getType(state); + state.imageAltText = false; + state.image = false; + state.inline = state.f = linkHref; + return type; + } + + if (ch === '[' && !state.image) { + if (state.linkText && stream.match(/^.*?\]/)) return getType(state) + state.linkText = true; + if (modeCfg.highlightFormatting) state.formatting = "link"; + return getType(state); + } + + if (ch === ']' && state.linkText) { + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + state.linkText = false; + state.inline = state.f = stream.match(/\(.*?\)| ?\[.*?\]/, false) ? linkHref : inlineNormal + return type; + } + + if (ch === '<' && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) { + state.f = state.inline = linkInline; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + if (type){ + type += " "; + } else { + type = ""; + } + return type + tokenTypes.linkInline; + } + + if (ch === '<' && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) { + state.f = state.inline = linkInline; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + if (type){ + type += " "; + } else { + type = ""; + } + return type + tokenTypes.linkEmail; + } + + if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i, false)) { + var end = stream.string.indexOf(">", stream.pos); + if (end != -1) { + var atts = stream.string.substring(stream.start, end); + if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) state.md_inside = true; + } + stream.backUp(1); + state.htmlState = CodeMirror.startState(htmlMode); + return switchBlock(stream, state, htmlBlock); + } + + if (modeCfg.xml && ch === '<' && stream.match(/^\/\w*?>/)) { + state.md_inside = false; + return "tag"; + } else if (ch === "*" || ch === "_") { + var len = 1, before = stream.pos == 1 ? " " : stream.string.charAt(stream.pos - 2) + while (len < 3 && stream.eat(ch)) len++ + var after = stream.peek() || " " + // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis + var leftFlanking = !/\s/.test(after) && (!punctuation.test(after) || /\s/.test(before) || punctuation.test(before)) + var rightFlanking = !/\s/.test(before) && (!punctuation.test(before) || /\s/.test(after) || punctuation.test(after)) + var setEm = null, setStrong = null + if (len % 2) { // Em + if (!state.em && leftFlanking && (ch === "*" || !rightFlanking || punctuation.test(before))) + setEm = true + else if (state.em == ch && rightFlanking && (ch === "*" || !leftFlanking || punctuation.test(after))) + setEm = false + } + if (len > 1) { // Strong + if (!state.strong && leftFlanking && (ch === "*" || !rightFlanking || punctuation.test(before))) + setStrong = true + else if (state.strong == ch && rightFlanking && (ch === "*" || !leftFlanking || punctuation.test(after))) + setStrong = false + } + if (setStrong != null || setEm != null) { + if (modeCfg.highlightFormatting) state.formatting = setEm == null ? "strong" : setStrong == null ? "em" : "strong em" + if (setEm === true) state.em = ch + if (setStrong === true) state.strong = ch + var t = getType(state) + if (setEm === false) state.em = false + if (setStrong === false) state.strong = false + return t + } + } else if (ch === ' ') { + if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces + if (stream.peek() === ' ') { // Surrounded by spaces, ignore + return getType(state); + } else { // Not surrounded by spaces, back up pointer + stream.backUp(1); + } + } + } + + if (modeCfg.strikethrough) { + if (ch === '~' && stream.eatWhile(ch)) { + if (state.strikethrough) {// Remove strikethrough + if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; + var t = getType(state); + state.strikethrough = false; + return t; + } else if (stream.match(/^[^\s]/, false)) {// Add strikethrough + state.strikethrough = true; + if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; + return getType(state); + } + } else if (ch === ' ') { + if (stream.match('~~', true)) { // Probably surrounded by space + if (stream.peek() === ' ') { // Surrounded by spaces, ignore + return getType(state); + } else { // Not surrounded by spaces, back up pointer + stream.backUp(2); + } + } + } + } + + if (modeCfg.emoji && ch === ":" && stream.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)) { + state.emoji = true; + if (modeCfg.highlightFormatting) state.formatting = "emoji"; + var retType = getType(state); + state.emoji = false; + return retType; + } + + if (ch === ' ') { + if (stream.match(/^ +$/, false)) { + state.trailingSpace++; + } else if (state.trailingSpace) { + state.trailingSpaceNewLine = true; + } + } + + return getType(state); + } + + function linkInline(stream, state) { + var ch = stream.next(); + + if (ch === ">") { + state.f = state.inline = inlineNormal; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + if (type){ + type += " "; + } else { + type = ""; + } + return type + tokenTypes.linkInline; + } + + stream.match(/^[^>]+/, true); + + return tokenTypes.linkInline; + } + + function linkHref(stream, state) { + // Check if space, and return NULL if so (to avoid marking the space) + if(stream.eatSpace()){ + return null; + } + var ch = stream.next(); + if (ch === '(' || ch === '[') { + state.f = state.inline = getLinkHrefInside(ch === "(" ? ")" : "]"); + if (modeCfg.highlightFormatting) state.formatting = "link-string"; + state.linkHref = true; + return getType(state); + } + return 'error'; + } + + var linkRE = { + ")": /^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/, + "]": /^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/ + } + + function getLinkHrefInside(endChar) { + return function(stream, state) { + var ch = stream.next(); + + if (ch === endChar) { + state.f = state.inline = inlineNormal; + if (modeCfg.highlightFormatting) state.formatting = "link-string"; + var returnState = getType(state); + state.linkHref = false; + return returnState; + } + + stream.match(linkRE[endChar]) + state.linkHref = true; + return getType(state); + }; + } + + function footnoteLink(stream, state) { + if (stream.match(/^([^\]\\]|\\.)*\]:/, false)) { + state.f = footnoteLinkInside; + stream.next(); // Consume [ + if (modeCfg.highlightFormatting) state.formatting = "link"; + state.linkText = true; + return getType(state); + } + return switchInline(stream, state, inlineNormal); + } + + function footnoteLinkInside(stream, state) { + if (stream.match(']:', true)) { + state.f = state.inline = footnoteUrl; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var returnType = getType(state); + state.linkText = false; + return returnType; + } + + stream.match(/^([^\]\\]|\\.)+/, true); + + return tokenTypes.linkText; + } + + function footnoteUrl(stream, state) { + // Check if space, and return NULL if so (to avoid marking the space) + if(stream.eatSpace()){ + return null; + } + // Match URL + stream.match(/^[^\s]+/, true); + // Check for link title + if (stream.peek() === undefined) { // End of line, set flag to check next line + state.linkTitle = true; + } else { // More content on line, check if link title + stream.match(/^(?:\s+(?:"(?:[^"\\]|\\.)+"|'(?:[^'\\]|\\.)+'|\((?:[^)\\]|\\.)+\)))?/, true); + } + state.f = state.inline = inlineNormal; + return tokenTypes.linkHref + " url"; + } + + var mode = { + startState: function() { + return { + f: blockNormal, + + prevLine: {stream: null}, + thisLine: {stream: null}, + + block: blockNormal, + htmlState: null, + indentation: 0, + + inline: inlineNormal, + text: handleText, + + formatting: false, + linkText: false, + linkHref: false, + linkTitle: false, + code: 0, + em: false, + strong: false, + header: 0, + setext: 0, + hr: false, + taskList: false, + list: false, + listStack: [], + quote: 0, + trailingSpace: 0, + trailingSpaceNewLine: false, + strikethrough: false, + emoji: false, + fencedEndRE: null + }; + }, + + copyState: function(s) { + return { + f: s.f, + + prevLine: s.prevLine, + thisLine: s.thisLine, + + block: s.block, + htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState), + indentation: s.indentation, + + localMode: s.localMode, + localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null, + + inline: s.inline, + text: s.text, + formatting: false, + linkText: s.linkText, + linkTitle: s.linkTitle, + linkHref: s.linkHref, + code: s.code, + em: s.em, + strong: s.strong, + strikethrough: s.strikethrough, + emoji: s.emoji, + header: s.header, + setext: s.setext, + hr: s.hr, + taskList: s.taskList, + list: s.list, + listStack: s.listStack.slice(0), + quote: s.quote, + indentedCode: s.indentedCode, + trailingSpace: s.trailingSpace, + trailingSpaceNewLine: s.trailingSpaceNewLine, + md_inside: s.md_inside, + fencedEndRE: s.fencedEndRE + }; + }, + + token: function(stream, state) { + + // Reset state.formatting + state.formatting = false; + + if (stream != state.thisLine.stream) { + state.header = 0; + state.hr = false; + + if (stream.match(/^\s*$/, true)) { + blankLine(state); + return null; + } + + state.prevLine = state.thisLine + state.thisLine = {stream: stream} + + // Reset state.taskList + state.taskList = false; + + // Reset state.trailingSpace + state.trailingSpace = 0; + state.trailingSpaceNewLine = false; + + if (!state.localState) { + state.f = state.block; + if (state.f != htmlBlock) { + var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, expandedTab).length; + state.indentation = indentation; + state.indentationDiff = null; + if (indentation > 0) return null; + } + } + } + return state.f(stream, state); + }, + + innerMode: function(state) { + if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode}; + if (state.localState) return {state: state.localState, mode: state.localMode}; + return {state: state, mode: mode}; + }, + + indent: function(state, textAfter, line) { + if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line) + if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line) + return CodeMirror.Pass + }, + + blankLine: blankLine, + + getType: getType, + + blockCommentStart: "", + closeBrackets: "()[]{}''\"\"``", + fold: "markdown" + }; + return mode; +}, "xml"); + +CodeMirror.defineMIME("text/markdown", "markdown"); + +CodeMirror.defineMIME("text/x-markdown", "markdown"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mathematica/mathematica.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mathematica/mathematica.js new file mode 100644 index 0000000000..72b3492101 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mathematica/mathematica.js @@ -0,0 +1,176 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Mathematica mode copyright (c) 2015 by Calin Barbat +// Based on code by Patrick Scheibe (halirutan) +// See: https://github.com/halirutan/Mathematica-Source-Highlighting/tree/master/src/lang-mma.js + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('mathematica', function(_config, _parserConfig) { + + // used pattern building blocks + var Identifier = '[a-zA-Z\\$][a-zA-Z0-9\\$]*'; + var pBase = "(?:\\d+)"; + var pFloat = "(?:\\.\\d+|\\d+\\.\\d*|\\d+)"; + var pFloatBase = "(?:\\.\\w+|\\w+\\.\\w*|\\w+)"; + var pPrecision = "(?:`(?:`?"+pFloat+")?)"; + + // regular expressions + var reBaseForm = new RegExp('(?:'+pBase+'(?:\\^\\^'+pFloatBase+pPrecision+'?(?:\\*\\^[+-]?\\d+)?))'); + var reFloatForm = new RegExp('(?:' + pFloat + pPrecision + '?(?:\\*\\^[+-]?\\d+)?)'); + var reIdInContext = new RegExp('(?:`?)(?:' + Identifier + ')(?:`(?:' + Identifier + '))*(?:`?)'); + + function tokenBase(stream, state) { + var ch; + + // get next character + ch = stream.next(); + + // string + if (ch === '"') { + state.tokenize = tokenString; + return state.tokenize(stream, state); + } + + // comment + if (ch === '(') { + if (stream.eat('*')) { + state.commentLevel++; + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } + } + + // go back one character + stream.backUp(1); + + // look for numbers + // Numbers in a baseform + if (stream.match(reBaseForm, true, false)) { + return 'number'; + } + + // Mathematica numbers. Floats (1.2, .2, 1.) can have optionally a precision (`float) or an accuracy definition + // (``float). Note: while 1.2` is possible 1.2`` is not. At the end an exponent (float*^+12) can follow. + if (stream.match(reFloatForm, true, false)) { + return 'number'; + } + + /* In[23] and Out[34] */ + if (stream.match(/(?:In|Out)\[[0-9]*\]/, true, false)) { + return 'atom'; + } + + // usage + if (stream.match(/([a-zA-Z\$][a-zA-Z0-9\$]*(?:`[a-zA-Z0-9\$]+)*::usage)/, true, false)) { + return 'meta'; + } + + // message + if (stream.match(/([a-zA-Z\$][a-zA-Z0-9\$]*(?:`[a-zA-Z0-9\$]+)*::[a-zA-Z\$][a-zA-Z0-9\$]*):?/, true, false)) { + return 'string-2'; + } + + // this makes a look-ahead match for something like variable:{_Integer} + // the match is then forwarded to the mma-patterns tokenizer. + if (stream.match(/([a-zA-Z\$][a-zA-Z0-9\$]*\s*:)(?:(?:[a-zA-Z\$][a-zA-Z0-9\$]*)|(?:[^:=>~@\^\&\*\)\[\]'\?,\|])).*/, true, false)) { + return 'variable-2'; + } + + // catch variables which are used together with Blank (_), BlankSequence (__) or BlankNullSequence (___) + // Cannot start with a number, but can have numbers at any other position. Examples + // blub__Integer, a1_, b34_Integer32 + if (stream.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+[a-zA-Z\$][a-zA-Z0-9\$]*/, true, false)) { + return 'variable-2'; + } + if (stream.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+/, true, false)) { + return 'variable-2'; + } + if (stream.match(/_+[a-zA-Z\$][a-zA-Z0-9\$]*/, true, false)) { + return 'variable-2'; + } + + // Named characters in Mathematica, like \[Gamma]. + if (stream.match(/\\\[[a-zA-Z\$][a-zA-Z0-9\$]*\]/, true, false)) { + return 'variable-3'; + } + + // Match all braces separately + if (stream.match(/(?:\[|\]|{|}|\(|\))/, true, false)) { + return 'bracket'; + } + + // Catch Slots (#, ##, #3, ##9 and the V10 named slots #name). I have never seen someone using more than one digit after #, so we match + // only one. + if (stream.match(/(?:#[a-zA-Z\$][a-zA-Z0-9\$]*|#+[0-9]?)/, true, false)) { + return 'variable-2'; + } + + // Literals like variables, keywords, functions + if (stream.match(reIdInContext, true, false)) { + return 'keyword'; + } + + // operators. Note that operators like @@ or /; are matched separately for each symbol. + if (stream.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%)/, true, false)) { + return 'operator'; + } + + // everything else is an error + stream.next(); // advance the stream. + return 'error'; + } + + function tokenString(stream, state) { + var next, end = false, escaped = false; + while ((next = stream.next()) != null) { + if (next === '"' && !escaped) { + end = true; + break; + } + escaped = !escaped && next === '\\'; + } + if (end && !escaped) { + state.tokenize = tokenBase; + } + return 'string'; + }; + + function tokenComment(stream, state) { + var prev, next; + while(state.commentLevel > 0 && (next = stream.next()) != null) { + if (prev === '(' && next === '*') state.commentLevel++; + if (prev === '*' && next === ')') state.commentLevel--; + prev = next; + } + if (state.commentLevel <= 0) { + state.tokenize = tokenBase; + } + return 'comment'; + } + + return { + startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + }, + blockCommentStart: "(*", + blockCommentEnd: "*)" + }; +}); + +CodeMirror.defineMIME('text/x-mathematica', { + name: 'mathematica' +}); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mbox/mbox.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mbox/mbox.js new file mode 100644 index 0000000000..640437ed64 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mbox/mbox.js @@ -0,0 +1,129 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +var rfc2822 = [ + "From", "Sender", "Reply-To", "To", "Cc", "Bcc", "Message-ID", + "In-Reply-To", "References", "Resent-From", "Resent-Sender", "Resent-To", + "Resent-Cc", "Resent-Bcc", "Resent-Message-ID", "Return-Path", "Received" +]; +var rfc2822NoEmail = [ + "Date", "Subject", "Comments", "Keywords", "Resent-Date" +]; + +CodeMirror.registerHelper("hintWords", "mbox", rfc2822.concat(rfc2822NoEmail)); + +var whitespace = /^[ \t]/; +var separator = /^From /; // See RFC 4155 +var rfc2822Header = new RegExp("^(" + rfc2822.join("|") + "): "); +var rfc2822HeaderNoEmail = new RegExp("^(" + rfc2822NoEmail.join("|") + "): "); +var header = /^[^:]+:/; // Optional fields defined in RFC 2822 +var email = /^[^ ]+@[^ ]+/; +var untilEmail = /^.*?(?=[^ ]+?@[^ ]+)/; +var bracketedEmail = /^<.*?>/; +var untilBracketedEmail = /^.*?(?=<.*>)/; + +function styleForHeader(header) { + if (header === "Subject") return "header"; + return "string"; +} + +function readToken(stream, state) { + if (stream.sol()) { + // From last line + state.inSeparator = false; + if (state.inHeader && stream.match(whitespace)) { + // Header folding + return null; + } else { + state.inHeader = false; + state.header = null; + } + + if (stream.match(separator)) { + state.inHeaders = true; + state.inSeparator = true; + return "atom"; + } + + var match; + var emailPermitted = false; + if ((match = stream.match(rfc2822HeaderNoEmail)) || + (emailPermitted = true) && (match = stream.match(rfc2822Header))) { + state.inHeaders = true; + state.inHeader = true; + state.emailPermitted = emailPermitted; + state.header = match[1]; + return "atom"; + } + + // Use vim's heuristics: recognize custom headers only if the line is in a + // block of legitimate headers. + if (state.inHeaders && (match = stream.match(header))) { + state.inHeader = true; + state.emailPermitted = true; + state.header = match[1]; + return "atom"; + } + + state.inHeaders = false; + stream.skipToEnd(); + return null; + } + + if (state.inSeparator) { + if (stream.match(email)) return "link"; + if (stream.match(untilEmail)) return "atom"; + stream.skipToEnd(); + return "atom"; + } + + if (state.inHeader) { + var style = styleForHeader(state.header); + + if (state.emailPermitted) { + if (stream.match(bracketedEmail)) return style + " link"; + if (stream.match(untilBracketedEmail)) return style; + } + stream.skipToEnd(); + return style; + } + + stream.skipToEnd(); + return null; +}; + +CodeMirror.defineMode("mbox", function() { + return { + startState: function() { + return { + // Is in a mbox separator + inSeparator: false, + // Is in a mail header + inHeader: false, + // If bracketed email is permitted. Only applicable when inHeader + emailPermitted: false, + // Name of current header + header: null, + // Is in a region of mail headers + inHeaders: false + }; + }, + token: readToken, + blankLine: function(state) { + state.inHeaders = state.inSeparator = state.inHeader = false; + } + }; +}); + +CodeMirror.defineMIME("application/mbox", "mbox"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/meta.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/meta.js new file mode 100644 index 0000000000..38d5e0131d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/meta.js @@ -0,0 +1,221 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.modeInfo = [ + {name: "APL", mime: "text/apl", mode: "apl", ext: ["dyalog", "apl"]}, + {name: "PGP", mimes: ["application/pgp", "application/pgp-encrypted", "application/pgp-keys", "application/pgp-signature"], mode: "asciiarmor", ext: ["asc", "pgp", "sig"]}, + {name: "ASN.1", mime: "text/x-ttcn-asn", mode: "asn.1", ext: ["asn", "asn1"]}, + {name: "Asterisk", mime: "text/x-asterisk", mode: "asterisk", file: /^extensions\.conf$/i}, + {name: "Brainfuck", mime: "text/x-brainfuck", mode: "brainfuck", ext: ["b", "bf"]}, + {name: "C", mime: "text/x-csrc", mode: "clike", ext: ["c", "h", "ino"]}, + {name: "C++", mime: "text/x-c++src", mode: "clike", ext: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"], alias: ["cpp"]}, + {name: "Cobol", mime: "text/x-cobol", mode: "cobol", ext: ["cob", "cpy", "cbl"]}, + {name: "C#", mime: "text/x-csharp", mode: "clike", ext: ["cs"], alias: ["csharp", "cs"]}, + {name: "Clojure", mime: "text/x-clojure", mode: "clojure", ext: ["clj", "cljc", "cljx"]}, + {name: "ClojureScript", mime: "text/x-clojurescript", mode: "clojure", ext: ["cljs"]}, + {name: "Closure Stylesheets (GSS)", mime: "text/x-gss", mode: "css", ext: ["gss"]}, + {name: "CMake", mime: "text/x-cmake", mode: "cmake", ext: ["cmake", "cmake.in"], file: /^CMakeLists\.txt$/}, + {name: "CoffeeScript", mimes: ["application/vnd.coffeescript", "text/coffeescript", "text/x-coffeescript"], mode: "coffeescript", ext: ["coffee"], alias: ["coffee", "coffee-script"]}, + {name: "Common Lisp", mime: "text/x-common-lisp", mode: "commonlisp", ext: ["cl", "lisp", "el"], alias: ["lisp"]}, + {name: "Cypher", mime: "application/x-cypher-query", mode: "cypher", ext: ["cyp", "cypher"]}, + {name: "Cython", mime: "text/x-cython", mode: "python", ext: ["pyx", "pxd", "pxi"]}, + {name: "Crystal", mime: "text/x-crystal", mode: "crystal", ext: ["cr"]}, + {name: "CSS", mime: "text/css", mode: "css", ext: ["css"]}, + {name: "CQL", mime: "text/x-cassandra", mode: "sql", ext: ["cql"]}, + {name: "D", mime: "text/x-d", mode: "d", ext: ["d"]}, + {name: "Dart", mimes: ["application/dart", "text/x-dart"], mode: "dart", ext: ["dart"]}, + {name: "diff", mime: "text/x-diff", mode: "diff", ext: ["diff", "patch"]}, + {name: "Django", mime: "text/x-django", mode: "django"}, + {name: "Dockerfile", mime: "text/x-dockerfile", mode: "dockerfile", file: /^Dockerfile$/}, + {name: "DTD", mime: "application/xml-dtd", mode: "dtd", ext: ["dtd"]}, + {name: "Dylan", mime: "text/x-dylan", mode: "dylan", ext: ["dylan", "dyl", "intr"]}, + {name: "EBNF", mime: "text/x-ebnf", mode: "ebnf"}, + {name: "ECL", mime: "text/x-ecl", mode: "ecl", ext: ["ecl"]}, + {name: "edn", mime: "application/edn", mode: "clojure", ext: ["edn"]}, + {name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"]}, + {name: "Elm", mime: "text/x-elm", mode: "elm", ext: ["elm"]}, + {name: "Embedded JavaScript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]}, + {name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]}, + {name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]}, + {name: "Esper", mime: "text/x-esper", mode: "sql"}, + {name: "Factor", mime: "text/x-factor", mode: "factor", ext: ["factor"]}, + {name: "FCL", mime: "text/x-fcl", mode: "fcl"}, + {name: "Forth", mime: "text/x-forth", mode: "forth", ext: ["forth", "fth", "4th"]}, + {name: "Fortran", mime: "text/x-fortran", mode: "fortran", ext: ["f", "for", "f77", "f90", "f95"]}, + {name: "F#", mime: "text/x-fsharp", mode: "mllike", ext: ["fs"], alias: ["fsharp"]}, + {name: "Gas", mime: "text/x-gas", mode: "gas", ext: ["s"]}, + {name: "Gherkin", mime: "text/x-feature", mode: "gherkin", ext: ["feature"]}, + {name: "GitHub Flavored Markdown", mime: "text/x-gfm", mode: "gfm", file: /^(readme|contributing|history)\.md$/i}, + {name: "Go", mime: "text/x-go", mode: "go", ext: ["go"]}, + {name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy", "gradle"], file: /^Jenkinsfile$/}, + {name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]}, + {name: "Haskell", mime: "text/x-haskell", mode: "haskell", ext: ["hs"]}, + {name: "Haskell (Literate)", mime: "text/x-literate-haskell", mode: "haskell-literate", ext: ["lhs"]}, + {name: "Haxe", mime: "text/x-haxe", mode: "haxe", ext: ["hx"]}, + {name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"]}, + {name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"]}, + {name: "HTML", mime: "text/html", mode: "htmlmixed", ext: ["html", "htm", "handlebars", "hbs"], alias: ["xhtml"]}, + {name: "HTTP", mime: "message/http", mode: "http"}, + {name: "IDL", mime: "text/x-idl", mode: "idl", ext: ["pro"]}, + {name: "Pug", mime: "text/x-pug", mode: "pug", ext: ["jade", "pug"], alias: ["jade"]}, + {name: "Java", mime: "text/x-java", mode: "clike", ext: ["java"]}, + {name: "Java Server Pages", mime: "application/x-jsp", mode: "htmlembedded", ext: ["jsp"], alias: ["jsp"]}, + {name: "JavaScript", mimes: ["text/javascript", "text/ecmascript", "application/javascript", "application/x-javascript", "application/ecmascript"], + mode: "javascript", ext: ["js"], alias: ["ecmascript", "js", "node"]}, + {name: "JSON", mimes: ["application/json", "application/x-json"], mode: "javascript", ext: ["json", "map"], alias: ["json5"]}, + {name: "JSON-LD", mime: "application/ld+json", mode: "javascript", ext: ["jsonld"], alias: ["jsonld"]}, + {name: "JSX", mime: "text/jsx", mode: "jsx", ext: ["jsx"]}, + {name: "Jinja2", mime: "text/jinja2", mode: "jinja2", ext: ["j2", "jinja", "jinja2"]}, + {name: "Julia", mime: "text/x-julia", mode: "julia", ext: ["jl"], alias: ["jl"]}, + {name: "Kotlin", mime: "text/x-kotlin", mode: "clike", ext: ["kt"]}, + {name: "LESS", mime: "text/x-less", mode: "css", ext: ["less"]}, + {name: "LiveScript", mime: "text/x-livescript", mode: "livescript", ext: ["ls"], alias: ["ls"]}, + {name: "Lua", mime: "text/x-lua", mode: "lua", ext: ["lua"]}, + {name: "Markdown", mime: "text/x-markdown", mode: "markdown", ext: ["markdown", "md", "mkd"]}, + {name: "mIRC", mime: "text/mirc", mode: "mirc"}, + {name: "MariaDB SQL", mime: "text/x-mariadb", mode: "sql"}, + {name: "Mathematica", mime: "text/x-mathematica", mode: "mathematica", ext: ["m", "nb", "wl", "wls"]}, + {name: "Modelica", mime: "text/x-modelica", mode: "modelica", ext: ["mo"]}, + {name: "MUMPS", mime: "text/x-mumps", mode: "mumps", ext: ["mps"]}, + {name: "MS SQL", mime: "text/x-mssql", mode: "sql"}, + {name: "mbox", mime: "application/mbox", mode: "mbox", ext: ["mbox"]}, + {name: "MySQL", mime: "text/x-mysql", mode: "sql"}, + {name: "Nginx", mime: "text/x-nginx-conf", mode: "nginx", file: /nginx.*\.conf$/i}, + {name: "NSIS", mime: "text/x-nsis", mode: "nsis", ext: ["nsh", "nsi"]}, + {name: "NTriples", mimes: ["application/n-triples", "application/n-quads", "text/n-triples"], + mode: "ntriples", ext: ["nt", "nq"]}, + {name: "Objective-C", mime: "text/x-objectivec", mode: "clike", ext: ["m"], alias: ["objective-c", "objc"]}, + {name: "Objective-C++", mime: "text/x-objectivec++", mode: "clike", ext: ["mm"], alias: ["objective-c++", "objc++"]}, + {name: "OCaml", mime: "text/x-ocaml", mode: "mllike", ext: ["ml", "mli", "mll", "mly"]}, + {name: "Octave", mime: "text/x-octave", mode: "octave", ext: ["m"]}, + {name: "Oz", mime: "text/x-oz", mode: "oz", ext: ["oz"]}, + {name: "Pascal", mime: "text/x-pascal", mode: "pascal", ext: ["p", "pas"]}, + {name: "PEG.js", mime: "null", mode: "pegjs", ext: ["jsonld"]}, + {name: "Perl", mime: "text/x-perl", mode: "perl", ext: ["pl", "pm"]}, + {name: "PHP", mimes: ["text/x-php", "application/x-httpd-php", "application/x-httpd-php-open"], mode: "php", ext: ["php", "php3", "php4", "php5", "php7", "phtml"]}, + {name: "Pig", mime: "text/x-pig", mode: "pig", ext: ["pig"]}, + {name: "Plain Text", mime: "text/plain", mode: "null", ext: ["txt", "text", "conf", "def", "list", "log"]}, + {name: "PLSQL", mime: "text/x-plsql", mode: "sql", ext: ["pls"]}, + {name: "PostgreSQL", mime: "text/x-pgsql", mode: "sql"}, + {name: "PowerShell", mime: "application/x-powershell", mode: "powershell", ext: ["ps1", "psd1", "psm1"]}, + {name: "Properties files", mime: "text/x-properties", mode: "properties", ext: ["properties", "ini", "in"], alias: ["ini", "properties"]}, + {name: "ProtoBuf", mime: "text/x-protobuf", mode: "protobuf", ext: ["proto"]}, + {name: "Python", mime: "text/x-python", mode: "python", ext: ["BUILD", "bzl", "py", "pyw"], file: /^(BUCK|BUILD)$/}, + {name: "Puppet", mime: "text/x-puppet", mode: "puppet", ext: ["pp"]}, + {name: "Q", mime: "text/x-q", mode: "q", ext: ["q"]}, + {name: "R", mime: "text/x-rsrc", mode: "r", ext: ["r", "R"], alias: ["rscript"]}, + {name: "reStructuredText", mime: "text/x-rst", mode: "rst", ext: ["rst"], alias: ["rst"]}, + {name: "RPM Changes", mime: "text/x-rpm-changes", mode: "rpm"}, + {name: "RPM Spec", mime: "text/x-rpm-spec", mode: "rpm", ext: ["spec"]}, + {name: "Ruby", mime: "text/x-ruby", mode: "ruby", ext: ["rb"], alias: ["jruby", "macruby", "rake", "rb", "rbx"]}, + {name: "Rust", mime: "text/x-rustsrc", mode: "rust", ext: ["rs"]}, + {name: "SAS", mime: "text/x-sas", mode: "sas", ext: ["sas"]}, + {name: "Sass", mime: "text/x-sass", mode: "sass", ext: ["sass"]}, + {name: "Scala", mime: "text/x-scala", mode: "clike", ext: ["scala"]}, + {name: "Scheme", mime: "text/x-scheme", mode: "scheme", ext: ["scm", "ss"]}, + {name: "SCSS", mime: "text/x-scss", mode: "css", ext: ["scss"]}, + {name: "Shell", mimes: ["text/x-sh", "application/x-sh"], mode: "shell", ext: ["sh", "ksh", "bash"], alias: ["bash", "sh", "zsh"], file: /^PKGBUILD$/}, + {name: "Sieve", mime: "application/sieve", mode: "sieve", ext: ["siv", "sieve"]}, + {name: "Slim", mimes: ["text/x-slim", "application/x-slim"], mode: "slim", ext: ["slim"]}, + {name: "Smalltalk", mime: "text/x-stsrc", mode: "smalltalk", ext: ["st"]}, + {name: "Smarty", mime: "text/x-smarty", mode: "smarty", ext: ["tpl"]}, + {name: "Solr", mime: "text/x-solr", mode: "solr"}, + {name: "SML", mime: "text/x-sml", mode: "mllike", ext: ["sml", "sig", "fun", "smackspec"]}, + {name: "Soy", mime: "text/x-soy", mode: "soy", ext: ["soy"], alias: ["closure template"]}, + {name: "SPARQL", mime: "application/sparql-query", mode: "sparql", ext: ["rq", "sparql"], alias: ["sparul"]}, + {name: "Spreadsheet", mime: "text/x-spreadsheet", mode: "spreadsheet", alias: ["excel", "formula"]}, + {name: "SQL", mime: "text/x-sql", mode: "sql", ext: ["sql"]}, + {name: "SQLite", mime: "text/x-sqlite", mode: "sql"}, + {name: "Squirrel", mime: "text/x-squirrel", mode: "clike", ext: ["nut"]}, + {name: "Stylus", mime: "text/x-styl", mode: "stylus", ext: ["styl"]}, + {name: "Swift", mime: "text/x-swift", mode: "swift", ext: ["swift"]}, + {name: "sTeX", mime: "text/x-stex", mode: "stex"}, + {name: "LaTeX", mime: "text/x-latex", mode: "stex", ext: ["text", "ltx", "tex"], alias: ["tex"]}, + {name: "SystemVerilog", mime: "text/x-systemverilog", mode: "verilog", ext: ["v", "sv", "svh"]}, + {name: "Tcl", mime: "text/x-tcl", mode: "tcl", ext: ["tcl"]}, + {name: "Textile", mime: "text/x-textile", mode: "textile", ext: ["textile"]}, + {name: "TiddlyWiki", mime: "text/x-tiddlywiki", mode: "tiddlywiki"}, + {name: "Tiki wiki", mime: "text/tiki", mode: "tiki"}, + {name: "TOML", mime: "text/x-toml", mode: "toml", ext: ["toml"]}, + {name: "Tornado", mime: "text/x-tornado", mode: "tornado"}, + {name: "troff", mime: "text/troff", mode: "troff", ext: ["1", "2", "3", "4", "5", "6", "7", "8", "9"]}, + {name: "TTCN", mime: "text/x-ttcn", mode: "ttcn", ext: ["ttcn", "ttcn3", "ttcnpp"]}, + {name: "TTCN_CFG", mime: "text/x-ttcn-cfg", mode: "ttcn-cfg", ext: ["cfg"]}, + {name: "Turtle", mime: "text/turtle", mode: "turtle", ext: ["ttl"]}, + {name: "TypeScript", mime: "application/typescript", mode: "javascript", ext: ["ts"], alias: ["ts"]}, + {name: "TypeScript-JSX", mime: "text/typescript-jsx", mode: "jsx", ext: ["tsx"], alias: ["tsx"]}, + {name: "Twig", mime: "text/x-twig", mode: "twig"}, + {name: "Web IDL", mime: "text/x-webidl", mode: "webidl", ext: ["webidl"]}, + {name: "VB.NET", mime: "text/x-vb", mode: "vb", ext: ["vb"]}, + {name: "VBScript", mime: "text/vbscript", mode: "vbscript", ext: ["vbs"]}, + {name: "Velocity", mime: "text/velocity", mode: "velocity", ext: ["vtl"]}, + {name: "Verilog", mime: "text/x-verilog", mode: "verilog", ext: ["v"]}, + {name: "VHDL", mime: "text/x-vhdl", mode: "vhdl", ext: ["vhd", "vhdl"]}, + {name: "Vue.js Component", mimes: ["script/x-vue", "text/x-vue"], mode: "vue", ext: ["vue"]}, + {name: "XML", mimes: ["application/xml", "text/xml"], mode: "xml", ext: ["xml", "xsl", "xsd", "svg"], alias: ["rss", "wsdl", "xsd"]}, + {name: "XQuery", mime: "application/xquery", mode: "xquery", ext: ["xy", "xquery"]}, + {name: "Yacas", mime: "text/x-yacas", mode: "yacas", ext: ["ys"]}, + {name: "YAML", mimes: ["text/x-yaml", "text/yaml"], mode: "yaml", ext: ["yaml", "yml"], alias: ["yml"]}, + {name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"]}, + {name: "mscgen", mime: "text/x-mscgen", mode: "mscgen", ext: ["mscgen", "mscin", "msc"]}, + {name: "xu", mime: "text/x-xu", mode: "mscgen", ext: ["xu"]}, + {name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"]}, + {name: "WebAssembly", mime: "text/webassembly", mode: "wast", ext: ["wat", "wast"]}, + ]; + // Ensure all modes have a mime property for backwards compatibility + for (var i = 0; i < CodeMirror.modeInfo.length; i++) { + var info = CodeMirror.modeInfo[i]; + if (info.mimes) info.mime = info.mimes[0]; + } + + CodeMirror.findModeByMIME = function(mime) { + mime = mime.toLowerCase(); + for (var i = 0; i < CodeMirror.modeInfo.length; i++) { + var info = CodeMirror.modeInfo[i]; + if (info.mime == mime) return info; + if (info.mimes) for (var j = 0; j < info.mimes.length; j++) + if (info.mimes[j] == mime) return info; + } + if (/\+xml$/.test(mime)) return CodeMirror.findModeByMIME("application/xml") + if (/\+json$/.test(mime)) return CodeMirror.findModeByMIME("application/json") + }; + + CodeMirror.findModeByExtension = function(ext) { + ext = ext.toLowerCase(); + for (var i = 0; i < CodeMirror.modeInfo.length; i++) { + var info = CodeMirror.modeInfo[i]; + if (info.ext) for (var j = 0; j < info.ext.length; j++) + if (info.ext[j] == ext) return info; + } + }; + + CodeMirror.findModeByFileName = function(filename) { + for (var i = 0; i < CodeMirror.modeInfo.length; i++) { + var info = CodeMirror.modeInfo[i]; + if (info.file && info.file.test(filename)) return info; + } + var dot = filename.lastIndexOf("."); + var ext = dot > -1 && filename.substring(dot + 1, filename.length); + if (ext) return CodeMirror.findModeByExtension(ext); + }; + + CodeMirror.findModeByName = function(name) { + name = name.toLowerCase(); + for (var i = 0; i < CodeMirror.modeInfo.length; i++) { + var info = CodeMirror.modeInfo[i]; + if (info.name.toLowerCase() == name) return info; + if (info.alias) for (var j = 0; j < info.alias.length; j++) + if (info.alias[j].toLowerCase() == name) return info; + } + }; +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mirc/mirc.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mirc/mirc.js new file mode 100644 index 0000000000..d27b0152e9 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mirc/mirc.js @@ -0,0 +1,193 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +//mIRC mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMIME("text/mirc", "mirc"); +CodeMirror.defineMode("mirc", function() { + function parseWords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var specials = parseWords("$! $$ $& $? $+ $abook $abs $active $activecid " + + "$activewid $address $addtok $agent $agentname $agentstat $agentver " + + "$alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime " + + "$asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind " + + "$binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes " + + "$chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color " + + "$com $comcall $comchan $comerr $compact $compress $comval $cos $count " + + "$cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight " + + "$dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress " + + "$deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll " + + "$dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error " + + "$eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir " + + "$finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve " + + "$fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt " + + "$group $halted $hash $height $hfind $hget $highlight $hnick $hotline " + + "$hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil " + + "$inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect " + + "$insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile " + + "$isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive " + + "$lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock " + + "$lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer " + + "$maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext " + + "$menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode " + + "$modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile " + + "$nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly " + + "$opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree " + + "$pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo " + + "$readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex " + + "$reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline " + + "$sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin " + + "$site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname " + + "$sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped " + + "$syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp " + + "$timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel " + + "$ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver " + + "$version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor"); + var keywords = parseWords("abook ajinvite alias aline ame amsg anick aop auser autojoin avoice " + + "away background ban bcopy beep bread break breplace bset btrunc bunset bwrite " + + "channel clear clearall cline clipboard close cnick color comclose comopen " + + "comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver " + + "debug dec describe dialog did didtok disable disconnect dlevel dline dll " + + "dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace " + + "drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable " + + "events exit fclose filter findtext finger firewall flash flist flood flush " + + "flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove " + + "gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd " + + "halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear " + + "ialmark identd if ignore iline inc invite iuser join kick linesep links list " + + "load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice " + + "notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice " + + "qme qmsg query queryn quit raw reload remini remote remove rename renwin " + + "reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini " + + "say scid scon server set showmirc signam sline sockaccept sockclose socklist " + + "socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite " + + "sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize " + + "toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho " + + "var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum " + + "isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower " + + "isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs " + + "elseif else goto menu nicklist status title icon size option text edit " + + "button check radio box scroll list combo link tab item"); + var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); + var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + function tokenBase(stream, state) { + var beforeParams = state.beforeParams; + state.beforeParams = false; + var ch = stream.next(); + if (/[\[\]{}\(\),\.]/.test(ch)) { + if (ch == "(" && beforeParams) state.inParams = true; + else if (ch == ")") state.inParams = false; + return null; + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + else if (ch == "\\") { + stream.eat("\\"); + stream.eat(/./); + return "number"; + } + else if (ch == "/" && stream.eat("*")) { + return chain(stream, state, tokenComment); + } + else if (ch == ";" && stream.match(/ *\( *\(/)) { + return chain(stream, state, tokenUnparsed); + } + else if (ch == ";" && !state.inParams) { + stream.skipToEnd(); + return "comment"; + } + else if (ch == '"') { + stream.eat(/"/); + return "keyword"; + } + else if (ch == "$") { + stream.eatWhile(/[$_a-z0-9A-Z\.:]/); + if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) { + return "keyword"; + } + else { + state.beforeParams = true; + return "builtin"; + } + } + else if (ch == "%") { + stream.eatWhile(/[^,\s()]/); + state.beforeParams = true; + return "string"; + } + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + else { + stream.eatWhile(/[\w\$_{}]/); + var word = stream.current().toLowerCase(); + if (keywords && keywords.propertyIsEnumerable(word)) + return "keyword"; + if (functions && functions.propertyIsEnumerable(word)) { + state.beforeParams = true; + return "keyword"; + } + return null; + } + } + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + function tokenUnparsed(stream, state) { + var maybeEnd = 0, ch; + while (ch = stream.next()) { + if (ch == ";" && maybeEnd == 2) { + state.tokenize = tokenBase; + break; + } + if (ch == ")") + maybeEnd++; + else if (ch != " ") + maybeEnd = 0; + } + return "meta"; + } + return { + startState: function() { + return { + tokenize: tokenBase, + beforeParams: false, + inParams: false + }; + }, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + } + }; +}); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mllike/mllike.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mllike/mllike.js new file mode 100644 index 0000000000..8f92372782 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mllike/mllike.js @@ -0,0 +1,359 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('mllike', function(_config, parserConfig) { + var words = { + 'as': 'keyword', + 'do': 'keyword', + 'else': 'keyword', + 'end': 'keyword', + 'exception': 'keyword', + 'fun': 'keyword', + 'functor': 'keyword', + 'if': 'keyword', + 'in': 'keyword', + 'include': 'keyword', + 'let': 'keyword', + 'of': 'keyword', + 'open': 'keyword', + 'rec': 'keyword', + 'struct': 'keyword', + 'then': 'keyword', + 'type': 'keyword', + 'val': 'keyword', + 'while': 'keyword', + 'with': 'keyword' + }; + + var extraWords = parserConfig.extraWords || {}; + for (var prop in extraWords) { + if (extraWords.hasOwnProperty(prop)) { + words[prop] = parserConfig.extraWords[prop]; + } + } + var hintWords = []; + for (var k in words) { hintWords.push(k); } + CodeMirror.registerHelper("hintWords", "mllike", hintWords); + + function tokenBase(stream, state) { + var ch = stream.next(); + + if (ch === '"') { + state.tokenize = tokenString; + return state.tokenize(stream, state); + } + if (ch === '{') { + if (stream.eat('|')) { + state.longString = true; + state.tokenize = tokenLongString; + return state.tokenize(stream, state); + } + } + if (ch === '(') { + if (stream.match(/^\*(?!\))/)) { + state.commentLevel++; + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } + } + if (ch === '~' || ch === '?') { + stream.eatWhile(/\w/); + return 'variable-2'; + } + if (ch === '`') { + stream.eatWhile(/\w/); + return 'quote'; + } + if (ch === '/' && parserConfig.slashComments && stream.eat('/')) { + stream.skipToEnd(); + return 'comment'; + } + if (/\d/.test(ch)) { + if (ch === '0' && stream.eat(/[bB]/)) { + stream.eatWhile(/[01]/); + } if (ch === '0' && stream.eat(/[xX]/)) { + stream.eatWhile(/[0-9a-fA-F]/) + } if (ch === '0' && stream.eat(/[oO]/)) { + stream.eatWhile(/[0-7]/); + } else { + stream.eatWhile(/[\d_]/); + if (stream.eat('.')) { + stream.eatWhile(/[\d]/); + } + if (stream.eat(/[eE]/)) { + stream.eatWhile(/[\d\-+]/); + } + } + return 'number'; + } + if ( /[+\-*&%=<>!?|@\.~:]/.test(ch)) { + return 'operator'; + } + if (/[\w\xa1-\uffff]/.test(ch)) { + stream.eatWhile(/[\w\xa1-\uffff]/); + var cur = stream.current(); + return words.hasOwnProperty(cur) ? words[cur] : 'variable'; + } + return null + } + + function tokenString(stream, state) { + var next, end = false, escaped = false; + while ((next = stream.next()) != null) { + if (next === '"' && !escaped) { + end = true; + break; + } + escaped = !escaped && next === '\\'; + } + if (end && !escaped) { + state.tokenize = tokenBase; + } + return 'string'; + }; + + function tokenComment(stream, state) { + var prev, next; + while(state.commentLevel > 0 && (next = stream.next()) != null) { + if (prev === '(' && next === '*') state.commentLevel++; + if (prev === '*' && next === ')') state.commentLevel--; + prev = next; + } + if (state.commentLevel <= 0) { + state.tokenize = tokenBase; + } + return 'comment'; + } + + function tokenLongString(stream, state) { + var prev, next; + while (state.longString && (next = stream.next()) != null) { + if (prev === '|' && next === '}') state.longString = false; + prev = next; + } + if (!state.longString) { + state.tokenize = tokenBase; + } + return 'string'; + } + + return { + startState: function() {return {tokenize: tokenBase, commentLevel: 0, longString: false};}, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + }, + + blockCommentStart: "(*", + blockCommentEnd: "*)", + lineComment: parserConfig.slashComments ? "//" : null + }; +}); + +CodeMirror.defineMIME('text/x-ocaml', { + name: 'mllike', + extraWords: { + 'and': 'keyword', + 'assert': 'keyword', + 'begin': 'keyword', + 'class': 'keyword', + 'constraint': 'keyword', + 'done': 'keyword', + 'downto': 'keyword', + 'external': 'keyword', + 'function': 'keyword', + 'initializer': 'keyword', + 'lazy': 'keyword', + 'match': 'keyword', + 'method': 'keyword', + 'module': 'keyword', + 'mutable': 'keyword', + 'new': 'keyword', + 'nonrec': 'keyword', + 'object': 'keyword', + 'private': 'keyword', + 'sig': 'keyword', + 'to': 'keyword', + 'try': 'keyword', + 'value': 'keyword', + 'virtual': 'keyword', + 'when': 'keyword', + + // builtins + 'raise': 'builtin', + 'failwith': 'builtin', + 'true': 'builtin', + 'false': 'builtin', + + // Pervasives builtins + 'asr': 'builtin', + 'land': 'builtin', + 'lor': 'builtin', + 'lsl': 'builtin', + 'lsr': 'builtin', + 'lxor': 'builtin', + 'mod': 'builtin', + 'or': 'builtin', + + // More Pervasives + 'raise_notrace': 'builtin', + 'trace': 'builtin', + 'exit': 'builtin', + 'print_string': 'builtin', + 'print_endline': 'builtin', + + 'int': 'type', + 'float': 'type', + 'bool': 'type', + 'char': 'type', + 'string': 'type', + 'unit': 'type', + + // Modules + 'List': 'builtin' + } +}); + +CodeMirror.defineMIME('text/x-fsharp', { + name: 'mllike', + extraWords: { + 'abstract': 'keyword', + 'assert': 'keyword', + 'base': 'keyword', + 'begin': 'keyword', + 'class': 'keyword', + 'default': 'keyword', + 'delegate': 'keyword', + 'do!': 'keyword', + 'done': 'keyword', + 'downcast': 'keyword', + 'downto': 'keyword', + 'elif': 'keyword', + 'extern': 'keyword', + 'finally': 'keyword', + 'for': 'keyword', + 'function': 'keyword', + 'global': 'keyword', + 'inherit': 'keyword', + 'inline': 'keyword', + 'interface': 'keyword', + 'internal': 'keyword', + 'lazy': 'keyword', + 'let!': 'keyword', + 'match': 'keyword', + 'member': 'keyword', + 'module': 'keyword', + 'mutable': 'keyword', + 'namespace': 'keyword', + 'new': 'keyword', + 'null': 'keyword', + 'override': 'keyword', + 'private': 'keyword', + 'public': 'keyword', + 'return!': 'keyword', + 'return': 'keyword', + 'select': 'keyword', + 'static': 'keyword', + 'to': 'keyword', + 'try': 'keyword', + 'upcast': 'keyword', + 'use!': 'keyword', + 'use': 'keyword', + 'void': 'keyword', + 'when': 'keyword', + 'yield!': 'keyword', + 'yield': 'keyword', + + // Reserved words + 'atomic': 'keyword', + 'break': 'keyword', + 'checked': 'keyword', + 'component': 'keyword', + 'const': 'keyword', + 'constraint': 'keyword', + 'constructor': 'keyword', + 'continue': 'keyword', + 'eager': 'keyword', + 'event': 'keyword', + 'external': 'keyword', + 'fixed': 'keyword', + 'method': 'keyword', + 'mixin': 'keyword', + 'object': 'keyword', + 'parallel': 'keyword', + 'process': 'keyword', + 'protected': 'keyword', + 'pure': 'keyword', + 'sealed': 'keyword', + 'tailcall': 'keyword', + 'trait': 'keyword', + 'virtual': 'keyword', + 'volatile': 'keyword', + + // builtins + 'List': 'builtin', + 'Seq': 'builtin', + 'Map': 'builtin', + 'Set': 'builtin', + 'Option': 'builtin', + 'int': 'builtin', + 'string': 'builtin', + 'not': 'builtin', + 'true': 'builtin', + 'false': 'builtin', + + 'raise': 'builtin', + 'failwith': 'builtin' + }, + slashComments: true +}); + + +CodeMirror.defineMIME('text/x-sml', { + name: 'mllike', + extraWords: { + 'abstype': 'keyword', + 'and': 'keyword', + 'andalso': 'keyword', + 'case': 'keyword', + 'datatype': 'keyword', + 'fn': 'keyword', + 'handle': 'keyword', + 'infix': 'keyword', + 'infixr': 'keyword', + 'local': 'keyword', + 'nonfix': 'keyword', + 'op': 'keyword', + 'orelse': 'keyword', + 'raise': 'keyword', + 'withtype': 'keyword', + 'eqtype': 'keyword', + 'sharing': 'keyword', + 'sig': 'keyword', + 'signature': 'keyword', + 'structure': 'keyword', + 'where': 'keyword', + 'true': 'keyword', + 'false': 'keyword', + + // types + 'int': 'builtin', + 'real': 'builtin', + 'string': 'builtin', + 'char': 'builtin', + 'bool': 'builtin' + }, + slashComments: true +}); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/modelica/modelica.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/modelica/modelica.js new file mode 100644 index 0000000000..2e9622f03f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/modelica/modelica.js @@ -0,0 +1,245 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Modelica support for CodeMirror, copyright (c) by Lennart Ochel + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +}) + +(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("modelica", function(config, parserConfig) { + + var indentUnit = config.indentUnit; + var keywords = parserConfig.keywords || {}; + var builtin = parserConfig.builtin || {}; + var atoms = parserConfig.atoms || {}; + + var isSingleOperatorChar = /[;=\(:\),{}.*<>+\-\/^\[\]]/; + var isDoubleOperatorChar = /(:=|<=|>=|==|<>|\.\+|\.\-|\.\*|\.\/|\.\^)/; + var isDigit = /[0-9]/; + var isNonDigit = /[_a-zA-Z]/; + + function tokenLineComment(stream, state) { + stream.skipToEnd(); + state.tokenize = null; + return "comment"; + } + + function tokenBlockComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenString(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == '"' && !escaped) { + state.tokenize = null; + state.sol = false; + break; + } + escaped = !escaped && ch == "\\"; + } + + return "string"; + } + + function tokenIdent(stream, state) { + stream.eatWhile(isDigit); + while (stream.eat(isDigit) || stream.eat(isNonDigit)) { } + + + var cur = stream.current(); + + if(state.sol && (cur == "package" || cur == "model" || cur == "when" || cur == "connector")) state.level++; + else if(state.sol && cur == "end" && state.level > 0) state.level--; + + state.tokenize = null; + state.sol = false; + + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + else if (builtin.propertyIsEnumerable(cur)) return "builtin"; + else if (atoms.propertyIsEnumerable(cur)) return "atom"; + else return "variable"; + } + + function tokenQIdent(stream, state) { + while (stream.eat(/[^']/)) { } + + state.tokenize = null; + state.sol = false; + + if(stream.eat("'")) + return "variable"; + else + return "error"; + } + + function tokenUnsignedNumber(stream, state) { + stream.eatWhile(isDigit); + if (stream.eat('.')) { + stream.eatWhile(isDigit); + } + if (stream.eat('e') || stream.eat('E')) { + if (!stream.eat('-')) + stream.eat('+'); + stream.eatWhile(isDigit); + } + + state.tokenize = null; + state.sol = false; + return "number"; + } + + // Interface + return { + startState: function() { + return { + tokenize: null, + level: 0, + sol: true + }; + }, + + token: function(stream, state) { + if(state.tokenize != null) { + return state.tokenize(stream, state); + } + + if(stream.sol()) { + state.sol = true; + } + + // WHITESPACE + if(stream.eatSpace()) { + state.tokenize = null; + return null; + } + + var ch = stream.next(); + + // LINECOMMENT + if(ch == '/' && stream.eat('/')) { + state.tokenize = tokenLineComment; + } + // BLOCKCOMMENT + else if(ch == '/' && stream.eat('*')) { + state.tokenize = tokenBlockComment; + } + // TWO SYMBOL TOKENS + else if(isDoubleOperatorChar.test(ch+stream.peek())) { + stream.next(); + state.tokenize = null; + return "operator"; + } + // SINGLE SYMBOL TOKENS + else if(isSingleOperatorChar.test(ch)) { + state.tokenize = null; + return "operator"; + } + // IDENT + else if(isNonDigit.test(ch)) { + state.tokenize = tokenIdent; + } + // Q-IDENT + else if(ch == "'" && stream.peek() && stream.peek() != "'") { + state.tokenize = tokenQIdent; + } + // STRING + else if(ch == '"') { + state.tokenize = tokenString; + } + // UNSIGNED_NUMBER + else if(isDigit.test(ch)) { + state.tokenize = tokenUnsignedNumber; + } + // ERROR + else { + state.tokenize = null; + return "error"; + } + + return state.tokenize(stream, state); + }, + + indent: function(state, textAfter) { + if (state.tokenize != null) return CodeMirror.Pass; + + var level = state.level; + if(/(algorithm)/.test(textAfter)) level--; + if(/(equation)/.test(textAfter)) level--; + if(/(initial algorithm)/.test(textAfter)) level--; + if(/(initial equation)/.test(textAfter)) level--; + if(/(end)/.test(textAfter)) level--; + + if(level > 0) + return indentUnit*level; + else + return 0; + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//" + }; + }); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i=0; i", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], + "singlecomment" : ["//", "#"], + "operators" : ["="] + }, + xu: { + "keywords" : ["msc", "xu"], + "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "wordwrapentities", "watermark"], + "constants" : ["true", "false", "on", "off", "auto"], + "attributes" : ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip", "title", "deactivate", "activate", "activation"], + "brackets" : ["\\{", "\\}"], // [ and ] are brackets too, but these get handled in with lists + "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"], + "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], + "singlecomment" : ["//", "#"], + "operators" : ["="] + }, + msgenny: { + "keywords" : null, + "options" : ["hscale", "width", "arcgradient", "wordwraparcs", "wordwrapentities", "watermark"], + "constants" : ["true", "false", "on", "off", "auto"], + "attributes" : null, + "brackets" : ["\\{", "\\}"], + "arcsWords" : ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"], + "arcsOthers" : ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"], + "singlecomment" : ["//", "#"], + "operators" : ["="] + } + } + + CodeMirror.defineMode("mscgen", function(_, modeConfig) { + var language = languages[modeConfig && modeConfig.language || "mscgen"] + return { + startState: startStateFn, + copyState: copyStateFn, + token: produceTokenFunction(language), + lineComment : "#", + blockCommentStart : "/*", + blockCommentEnd : "*/" + }; + }); + + CodeMirror.defineMIME("text/x-mscgen", "mscgen"); + CodeMirror.defineMIME("text/x-xu", {name: "mscgen", language: "xu"}); + CodeMirror.defineMIME("text/x-msgenny", {name: "mscgen", language: "msgenny"}); + + function wordRegexpBoundary(pWords) { + return new RegExp("^\\b(?:" + pWords.join("|") + ")\\b", "i"); + } + + function wordRegexp(pWords) { + return new RegExp("^(?:" + pWords.join("|") + ")", "i"); + } + + function startStateFn() { + return { + inComment : false, + inString : false, + inAttributeList : false, + inScript : false + }; + } + + function copyStateFn(pState) { + return { + inComment : pState.inComment, + inString : pState.inString, + inAttributeList : pState.inAttributeList, + inScript : pState.inScript + }; + } + + function produceTokenFunction(pConfig) { + + return function(pStream, pState) { + if (pStream.match(wordRegexp(pConfig.brackets), true, true)) { + return "bracket"; + } + /* comments */ + if (!pState.inComment) { + if (pStream.match(/\/\*[^\*\/]*/, true, true)) { + pState.inComment = true; + return "comment"; + } + if (pStream.match(wordRegexp(pConfig.singlecomment), true, true)) { + pStream.skipToEnd(); + return "comment"; + } + } + if (pState.inComment) { + if (pStream.match(/[^\*\/]*\*\//, true, true)) + pState.inComment = false; + else + pStream.skipToEnd(); + return "comment"; + } + /* strings */ + if (!pState.inString && pStream.match(/\"(\\\"|[^\"])*/, true, true)) { + pState.inString = true; + return "string"; + } + if (pState.inString) { + if (pStream.match(/[^\"]*\"/, true, true)) + pState.inString = false; + else + pStream.skipToEnd(); + return "string"; + } + /* keywords & operators */ + if (!!pConfig.keywords && pStream.match(wordRegexpBoundary(pConfig.keywords), true, true)) + return "keyword"; + + if (pStream.match(wordRegexpBoundary(pConfig.options), true, true)) + return "keyword"; + + if (pStream.match(wordRegexpBoundary(pConfig.arcsWords), true, true)) + return "keyword"; + + if (pStream.match(wordRegexp(pConfig.arcsOthers), true, true)) + return "keyword"; + + if (!!pConfig.operators && pStream.match(wordRegexp(pConfig.operators), true, true)) + return "operator"; + + if (!!pConfig.constants && pStream.match(wordRegexp(pConfig.constants), true, true)) + return "variable"; + + /* attribute lists */ + if (!pConfig.inAttributeList && !!pConfig.attributes && pStream.match('[', true, true)) { + pConfig.inAttributeList = true; + return "bracket"; + } + if (pConfig.inAttributeList) { + if (pConfig.attributes !== null && pStream.match(wordRegexpBoundary(pConfig.attributes), true, true)) { + return "attribute"; + } + if (pStream.match(']', true, true)) { + pConfig.inAttributeList = false; + return "bracket"; + } + } + + pStream.next(); + return "base"; + }; + } + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mumps/mumps.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mumps/mumps.js new file mode 100644 index 0000000000..c53b4bf3a2 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/mumps/mumps.js @@ -0,0 +1,148 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/* + This MUMPS Language script was constructed using vbscript.js as a template. +*/ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("mumps", function() { + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/&#!_?\\\\<>=\\'\\[\\]]"); + var doubleOperators = new RegExp("^(('=)|(<=)|(>=)|('>)|('<)|([[)|(]])|(^$))"); + var singleDelimiters = new RegExp("^[\\.,:]"); + var brackets = new RegExp("[()]"); + var identifiers = new RegExp("^[%A-Za-z][A-Za-z0-9]*"); + var commandKeywords = ["break","close","do","else","for","goto", "halt", "hang", "if", "job","kill","lock","merge","new","open", "quit", "read", "set", "tcommit", "trollback", "tstart", "use", "view", "write", "xecute", "b","c","d","e","f","g", "h", "i", "j","k","l","m","n","o", "q", "r", "s", "tc", "tro", "ts", "u", "v", "w", "x"]; + // The following list includes intrinsic functions _and_ special variables + var intrinsicFuncsWords = ["\\$ascii", "\\$char", "\\$data", "\\$ecode", "\\$estack", "\\$etrap", "\\$extract", "\\$find", "\\$fnumber", "\\$get", "\\$horolog", "\\$io", "\\$increment", "\\$job", "\\$justify", "\\$length", "\\$name", "\\$next", "\\$order", "\\$piece", "\\$qlength", "\\$qsubscript", "\\$query", "\\$quit", "\\$random", "\\$reverse", "\\$select", "\\$stack", "\\$test", "\\$text", "\\$translate", "\\$view", "\\$x", "\\$y", "\\$a", "\\$c", "\\$d", "\\$e", "\\$ec", "\\$es", "\\$et", "\\$f", "\\$fn", "\\$g", "\\$h", "\\$i", "\\$j", "\\$l", "\\$n", "\\$na", "\\$o", "\\$p", "\\$q", "\\$ql", "\\$qs", "\\$r", "\\$re", "\\$s", "\\$st", "\\$t", "\\$tr", "\\$v", "\\$z"]; + var intrinsicFuncs = wordRegexp(intrinsicFuncsWords); + var command = wordRegexp(commandKeywords); + + function tokenBase(stream, state) { + if (stream.sol()) { + state.label = true; + state.commandMode = 0; + } + + // The character has meaning in MUMPS. Ignoring consecutive + // spaces would interfere with interpreting whether the next non-space + // character belongs to the command or argument context. + + // Examine each character and update a mode variable whose interpretation is: + // >0 => command 0 => argument <0 => command post-conditional + var ch = stream.peek(); + + if (ch == " " || ch == "\t") { // Pre-process + state.label = false; + if (state.commandMode == 0) + state.commandMode = 1; + else if ((state.commandMode < 0) || (state.commandMode == 2)) + state.commandMode = 0; + } else if ((ch != ".") && (state.commandMode > 0)) { + if (ch == ":") + state.commandMode = -1; // SIS - Command post-conditional + else + state.commandMode = 2; + } + + // Do not color parameter list as line tag + if ((ch === "(") || (ch === "\u0009")) + state.label = false; + + // MUMPS comment starts with ";" + if (ch === ";") { + stream.skipToEnd(); + return "comment"; + } + + // Number Literals // SIS/RLM - MUMPS permits canonic number followed by concatenate operator + if (stream.match(/^[-+]?\d+(\.\d+)?([eE][-+]?\d+)?/)) + return "number"; + + // Handle Strings + if (ch == '"') { + if (stream.skipTo('"')) { + stream.next(); + return "string"; + } else { + stream.skipToEnd(); + return "error"; + } + } + + // Handle operators and Delimiters + if (stream.match(doubleOperators) || stream.match(singleOperators)) + return "operator"; + + // Prevents leading "." in DO block from falling through to error + if (stream.match(singleDelimiters)) + return null; + + if (brackets.test(ch)) { + stream.next(); + return "bracket"; + } + + if (state.commandMode > 0 && stream.match(command)) + return "variable-2"; + + if (stream.match(intrinsicFuncs)) + return "builtin"; + + if (stream.match(identifiers)) + return "variable"; + + // Detect dollar-sign when not a documented intrinsic function + // "^" may introduce a GVN or SSVN - Color same as function + if (ch === "$" || ch === "^") { + stream.next(); + return "builtin"; + } + + // MUMPS Indirection + if (ch === "@") { + stream.next(); + return "string-2"; + } + + if (/[\w%]/.test(ch)) { + stream.eatWhile(/[\w%]/); + return "variable"; + } + + // Handle non-detected items + stream.next(); + return "error"; + } + + return { + startState: function() { + return { + label: false, + commandMode: 0 + }; + }, + + token: function(stream, state) { + var style = tokenBase(stream, state); + if (state.label) return "tag"; + return style; + } + }; + }); + + CodeMirror.defineMIME("text/x-mumps", "mumps"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/nginx/nginx.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/nginx/nginx.js new file mode 100644 index 0000000000..a09f1501fa --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/nginx/nginx.js @@ -0,0 +1,178 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("nginx", function(config) { + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = words( + /* ngxDirectiveControl */ "break return rewrite set" + + /* ngxDirective */ " accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23" + ); + + var keywords_block = words( + /* ngxDirectiveBlock */ "http mail events server types location upstream charset_map limit_except if geo map" + ); + + var keywords_important = words( + /* ngxDirectiveImportant */ "include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files" + ); + + var indentUnit = config.indentUnit, type; + function ret(style, tp) {type = tp; return style;} + + function tokenBase(stream, state) { + + + stream.eatWhile(/[\w\$_]/); + + var cur = stream.current(); + + + if (keywords.propertyIsEnumerable(cur)) { + return "keyword"; + } + else if (keywords_block.propertyIsEnumerable(cur)) { + return "variable-2"; + } + else if (keywords_important.propertyIsEnumerable(cur)) { + return "string-2"; + } + /**/ + + var ch = stream.next(); + if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("meta", stream.current());} + else if (ch == "/" && stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + else if (ch == "<" && stream.eat("!")) { + state.tokenize = tokenSGMLComment; + return tokenSGMLComment(stream, state); + } + else if (ch == "=") ret(null, "compare"); + else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + else if (ch == "#") { + stream.skipToEnd(); + return ret("comment", "comment"); + } + else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } + else if (/[,.+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } + else if (/[;{}:\[\]]/.test(ch)) { + return ret(null, ch); + } + else { + stream.eatWhile(/[\w\\\-]/); + return ret("variable", "variable"); + } + } + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenSGMLComment(stream, state) { + var dashes = 0, ch; + while ((ch = stream.next()) != null) { + if (dashes >= 2 && ch == ">") { + state.tokenize = tokenBase; + break; + } + dashes = (ch == "-") ? dashes + 1 : 0; + } + return ret("comment", "comment"); + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) + break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + stack: []}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + type = null; + var style = state.tokenize(stream, state); + + var context = state.stack[state.stack.length-1]; + if (type == "hash" && context == "rule") style = "atom"; + else if (style == "variable") { + if (context == "rule") style = "number"; + else if (!context || context == "@media{") style = "tag"; + } + + if (context == "rule" && /^[\{\};]$/.test(type)) + state.stack.pop(); + if (type == "{") { + if (context == "@media") state.stack[state.stack.length-1] = "@media{"; + else state.stack.push("{"); + } + else if (type == "}") state.stack.pop(); + else if (type == "@media") state.stack.push("@media"); + else if (context == "{" && type != "comment") state.stack.push("rule"); + return style; + }, + + indent: function(state, textAfter) { + var n = state.stack.length; + if (/^\}/.test(textAfter)) + n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1; + return state.baseIndent + n * indentUnit; + }, + + electricChars: "}" + }; +}); + +CodeMirror.defineMIME("text/x-nginx-conf", "nginx"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/nsis/nsis.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/nsis/nsis.js new file mode 100644 index 0000000000..ebd3c8bf5c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/nsis/nsis.js @@ -0,0 +1,95 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Author: Jan T. Sott (http://github.com/idleberg) + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineSimpleMode("nsis",{ + start:[ + // Numbers + {regex: /(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/, token: "number"}, + + // Strings + { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, + { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, + { regex: /`(?:[^\\`]|\\.)*`?/, token: "string" }, + + // Compile Time Commands + {regex: /^\s*(?:\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|error|execute|finalize|getdllversion|gettlbversion|include|insertmacro|macro|macroend|makensis|packhdr|pragma|searchparse|searchreplace|system|tempfile|undef|uninstfinalize|verbose|warning))\b/i, token: "keyword"}, + + // Conditional Compilation + {regex: /^\s*(?:\!(if(?:n?def)?|ifmacron?def|macro))\b/i, token: "keyword", indent: true}, + {regex: /^\s*(?:\!(else|endif|macroend))\b/i, token: "keyword", dedent: true}, + + // Runtime Commands + {regex: /^\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetKnownFolderPath|GetLabelAddress|GetTempFileName|GetWinVer|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfRtlLanguage|IfShellVarContextAll|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|Int64Cmp|Int64CmpU|Int64Fmt|IntCmp|IntCmpU|IntFmt|IntOp|IntPtrCmp|IntPtrCmpU|IntPtrOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadAndSetImage|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestLongPathAware|ManifestMaxVersionTested|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|PEAddResource|PEDllCharacteristics|PERemoveResource|PESubsysVer|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\b/i, token: "keyword"}, + {regex: /^\s*(?:Function|PageEx|Section(?:Group)?)\b/i, token: "keyword", indent: true}, + {regex: /^\s*(?:(Function|PageEx|Section(?:Group)?)End)\b/i, token: "keyword", dedent: true}, + + // Command Options + {regex: /\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\b/i, token: "atom"}, + {regex: /\b(?:admin|all|auto|both|bottom|bzip2|components|current|custom|directory|false|force|hide|highest|ifdiff|ifnewer|instfiles|lastused|leave|left|license|listonly|lzma|nevershow|none|normal|notset|off|on|right|show|silent|silentlog|textonly|top|true|try|un\.components|un\.custom|un\.directory|un\.instfiles|un\.license|uninstConfirm|user|Win10|Win7|Win8|WinVista|zlib)\b/i, token: "builtin"}, + + // LogicLib.nsh + {regex: /\$\{(?:And(?:If(?:Not)?|Unless)|Break|Case(?:Else)?|Continue|Default|Do(?:Until|While)?|Else(?:If(?:Not)?|Unless)?|End(?:If|Select|Switch)|Exit(?:Do|For|While)|For(?:Each)?|If(?:Cmd|Not(?:Then)?|Then)?|Loop(?:Until|While)?|Or(?:If(?:Not)?|Unless)|Select|Switch|Unless|While)\}/i, token: "variable-2", indent: true}, + + // FileFunc.nsh + {regex: /\$\{(?:BannerTrimPath|DirState|DriveSpace|Get(BaseName|Drives|ExeName|ExePath|FileAttributes|FileExt|FileName|FileVersion|Options|OptionsS|Parameters|Parent|Root|Size|Time)|Locate|RefreshShellIcons)\}/i, token: "variable-2", dedent: true}, + + // Memento.nsh + {regex: /\$\{(?:Memento(?:Section(?:Done|End|Restore|Save)?|UnselectedSection))\}/i, token: "variable-2", dedent: true}, + + // TextFunc.nsh + {regex: /\$\{(?:Config(?:Read|ReadS|Write|WriteS)|File(?:Join|ReadFromEnd|Recode)|Line(?:Find|Read|Sum)|Text(?:Compare|CompareS)|TrimNewLines)\}/i, token: "variable-2", dedent: true}, + + // WinVer.nsh + {regex: /\$\{(?:(?:At(?:Least|Most)|Is)(?:ServicePack|Win(?:7|8|10|95|98|200(?:0|3|8(?:R2)?)|ME|NT4|Vista|XP))|Is(?:NT|Server))\}/i, token: "variable", dedent: true}, + + // WordFunc.nsh + {regex: /\$\{(?:StrFilterS?|Version(?:Compare|Convert)|Word(?:AddS?|Find(?:(?:2|3)X)?S?|InsertS?|ReplaceS?))\}/i, token: "variable-2", dedent: true}, + + // x64.nsh + {regex: /\$\{(?:RunningX64)\}/i, token: "variable", dedent: true}, + {regex: /\$\{(?:Disable|Enable)X64FSRedirection\}/i, token: "variable-2", dedent: true}, + + // Line Comment + {regex: /(#|;).*/, token: "comment"}, + + // Block Comment + {regex: /\/\*/, token: "comment", next: "comment"}, + + // Operator + {regex: /[-+\/*=<>!]+/, token: "operator"}, + + // Variable + {regex: /\$\w[\w\.]*/, token: "variable"}, + + // Constant + {regex: /\${[\!\w\.:-]+}/, token: "variable-2"}, + + // Language String + {regex: /\$\([\!\w\.:-]+\)/, token: "variable-3"} + ], + comment: [ + {regex: /.*?\*\//, token: "comment", next: "start"}, + {regex: /.*/, token: "comment"} + ], + meta: { + electricInput: /^\s*((Function|PageEx|Section|Section(Group)?)End|(\!(endif|macroend))|\$\{(End(If|Unless|While)|Loop(Until)|Next)\})$/i, + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: ["#", ";"] + } +}); + +CodeMirror.defineMIME("text/x-nsis", "nsis"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ntriples/ntriples.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ntriples/ntriples.js new file mode 100644 index 0000000000..5dd027286a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ntriples/ntriples.js @@ -0,0 +1,195 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/********************************************************** +* This script provides syntax highlighting support for +* the N-Triples format. +* N-Triples format specification: +* https://www.w3.org/TR/n-triples/ +***********************************************************/ + +/* + The following expression defines the defined ASF grammar transitions. + + pre_subject -> + { + ( writing_subject_uri | writing_bnode_uri ) + -> pre_predicate + -> writing_predicate_uri + -> pre_object + -> writing_object_uri | writing_object_bnode | + ( + writing_object_literal + -> writing_literal_lang | writing_literal_type + ) + -> post_object + -> BEGIN + } otherwise { + -> ERROR + } +*/ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("ntriples", function() { + + var Location = { + PRE_SUBJECT : 0, + WRITING_SUB_URI : 1, + WRITING_BNODE_URI : 2, + PRE_PRED : 3, + WRITING_PRED_URI : 4, + PRE_OBJ : 5, + WRITING_OBJ_URI : 6, + WRITING_OBJ_BNODE : 7, + WRITING_OBJ_LITERAL : 8, + WRITING_LIT_LANG : 9, + WRITING_LIT_TYPE : 10, + POST_OBJ : 11, + ERROR : 12 + }; + function transitState(currState, c) { + var currLocation = currState.location; + var ret; + + // Opening. + if (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI; + else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI; + else if(currLocation == Location.PRE_PRED && c == '<') ret = Location.WRITING_PRED_URI; + else if(currLocation == Location.PRE_OBJ && c == '<') ret = Location.WRITING_OBJ_URI; + else if(currLocation == Location.PRE_OBJ && c == '_') ret = Location.WRITING_OBJ_BNODE; + else if(currLocation == Location.PRE_OBJ && c == '"') ret = Location.WRITING_OBJ_LITERAL; + + // Closing. + else if(currLocation == Location.WRITING_SUB_URI && c == '>') ret = Location.PRE_PRED; + else if(currLocation == Location.WRITING_BNODE_URI && c == ' ') ret = Location.PRE_PRED; + else if(currLocation == Location.WRITING_PRED_URI && c == '>') ret = Location.PRE_OBJ; + else if(currLocation == Location.WRITING_OBJ_URI && c == '>') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_OBJ_BNODE && c == ' ') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ; + else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ; + + // Closing typed and language literal. + else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG; + else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE; + + // Spaces. + else if( c == ' ' && + ( + currLocation == Location.PRE_SUBJECT || + currLocation == Location.PRE_PRED || + currLocation == Location.PRE_OBJ || + currLocation == Location.POST_OBJ + ) + ) ret = currLocation; + + // Reset. + else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT; + + // Error + else ret = Location.ERROR; + + currState.location=ret; + } + + return { + startState: function() { + return { + location : Location.PRE_SUBJECT, + uris : [], + anchors : [], + bnodes : [], + langs : [], + types : [] + }; + }, + token: function(stream, state) { + var ch = stream.next(); + if(ch == '<') { + transitState(state, ch); + var parsedURI = ''; + stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} ); + state.uris.push(parsedURI); + if( stream.match('#', false) ) return 'variable'; + stream.next(); + transitState(state, '>'); + return 'variable'; + } + if(ch == '#') { + var parsedAnchor = ''; + stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;}); + state.anchors.push(parsedAnchor); + return 'variable-2'; + } + if(ch == '>') { + transitState(state, '>'); + return 'variable'; + } + if(ch == '_') { + transitState(state, ch); + var parsedBNode = ''; + stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;}); + state.bnodes.push(parsedBNode); + stream.next(); + transitState(state, ' '); + return 'builtin'; + } + if(ch == '"') { + transitState(state, ch); + stream.eatWhile( function(c) { return c != '"'; } ); + stream.next(); + if( stream.peek() != '@' && stream.peek() != '^' ) { + transitState(state, '"'); + } + return 'string'; + } + if( ch == '@' ) { + transitState(state, '@'); + var parsedLang = ''; + stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;}); + state.langs.push(parsedLang); + stream.next(); + transitState(state, ' '); + return 'string-2'; + } + if( ch == '^' ) { + stream.next(); + transitState(state, '^'); + var parsedType = ''; + stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} ); + state.types.push(parsedType); + stream.next(); + transitState(state, '>'); + return 'variable'; + } + if( ch == ' ' ) { + transitState(state, ch); + } + if( ch == '.' ) { + transitState(state, ch); + } + } + }; +}); + +// define the registered Media Type for n-triples: +// https://www.w3.org/TR/n-triples/#n-triples-mediatype +CodeMirror.defineMIME("application/n-triples", "ntriples"); + +// N-Quads is based on the N-Triples format (so same highlighting works) +// https://www.w3.org/TR/n-quads/ +CodeMirror.defineMIME("application/n-quads", "ntriples"); + +// previously used, though technically incorrect media type for n-triples +CodeMirror.defineMIME("text/n-triples", "ntriples"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/octave/octave.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/octave/octave.js new file mode 100644 index 0000000000..33a03368fa --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/octave/octave.js @@ -0,0 +1,139 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("octave", function() { + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/&|\\^~<>!@'\\\\]"); + var singleDelimiters = new RegExp('^[\\(\\[\\{\\},:=;\\.]'); + var doubleOperators = new RegExp("^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\.[\\+\\-\\*/\\^\\\\]))"); + var doubleDelimiters = new RegExp("^((!=)|(\\+=)|(\\-=)|(\\*=)|(/=)|(&=)|(\\|=)|(\\^=))"); + var tripleDelimiters = new RegExp("^((>>=)|(<<=))"); + var expressionEnd = new RegExp("^[\\]\\)]"); + var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*"); + + var builtins = wordRegexp([ + 'error', 'eval', 'function', 'abs', 'acos', 'atan', 'asin', 'cos', + 'cosh', 'exp', 'log', 'prod', 'sum', 'log10', 'max', 'min', 'sign', 'sin', 'sinh', + 'sqrt', 'tan', 'reshape', 'break', 'zeros', 'default', 'margin', 'round', 'ones', + 'rand', 'syn', 'ceil', 'floor', 'size', 'clear', 'zeros', 'eye', 'mean', 'std', 'cov', + 'det', 'eig', 'inv', 'norm', 'rank', 'trace', 'expm', 'logm', 'sqrtm', 'linspace', 'plot', + 'title', 'xlabel', 'ylabel', 'legend', 'text', 'grid', 'meshgrid', 'mesh', 'num2str', + 'fft', 'ifft', 'arrayfun', 'cellfun', 'input', 'fliplr', 'flipud', 'ismember' + ]); + + var keywords = wordRegexp([ + 'return', 'case', 'switch', 'else', 'elseif', 'end', 'endif', 'endfunction', + 'if', 'otherwise', 'do', 'for', 'while', 'try', 'catch', 'classdef', 'properties', 'events', + 'methods', 'global', 'persistent', 'endfor', 'endwhile', 'printf', 'sprintf', 'disp', 'until', + 'continue', 'pkg' + ]); + + + // tokenizers + function tokenTranspose(stream, state) { + if (!stream.sol() && stream.peek() === '\'') { + stream.next(); + state.tokenize = tokenBase; + return 'operator'; + } + state.tokenize = tokenBase; + return tokenBase(stream, state); + } + + + function tokenComment(stream, state) { + if (stream.match(/^.*%}/)) { + state.tokenize = tokenBase; + return 'comment'; + }; + stream.skipToEnd(); + return 'comment'; + } + + function tokenBase(stream, state) { + // whitespaces + if (stream.eatSpace()) return null; + + // Handle one line Comments + if (stream.match('%{')){ + state.tokenize = tokenComment; + stream.skipToEnd(); + return 'comment'; + } + + if (stream.match(/^[%#]/)){ + stream.skipToEnd(); + return 'comment'; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.+-]/, false)) { + if (stream.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/)) { + stream.tokenize = tokenBase; + return 'number'; }; + if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; }; + if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; }; + } + if (stream.match(wordRegexp(['nan','NaN','inf','Inf']))) { return 'number'; }; + + // Handle Strings + var m = stream.match(/^"(?:[^"]|"")*("|$)/) || stream.match(/^'(?:[^']|'')*('|$)/) + if (m) { return m[1] ? 'string' : "string error"; } + + // Handle words + if (stream.match(keywords)) { return 'keyword'; } ; + if (stream.match(builtins)) { return 'builtin'; } ; + if (stream.match(identifiers)) { return 'variable'; } ; + + if (stream.match(singleOperators) || stream.match(doubleOperators)) { return 'operator'; }; + if (stream.match(singleDelimiters) || stream.match(doubleDelimiters) || stream.match(tripleDelimiters)) { return null; }; + + if (stream.match(expressionEnd)) { + state.tokenize = tokenTranspose; + return null; + }; + + + // Handle non-detected items + stream.next(); + return 'error'; + }; + + + return { + startState: function() { + return { + tokenize: tokenBase + }; + }, + + token: function(stream, state) { + var style = state.tokenize(stream, state); + if (style === 'number' || style === 'variable'){ + state.tokenize = tokenTranspose; + } + return style; + }, + + lineComment: '%', + + fold: 'indent' + }; +}); + +CodeMirror.defineMIME("text/x-octave", "octave"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/oz/oz.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/oz/oz.js new file mode 100644 index 0000000000..73857e4c7e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/oz/oz.js @@ -0,0 +1,252 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("oz", function (conf) { + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var singleOperators = /[\^@!\|<>#~\.\*\-\+\\/,=]/; + var doubleOperators = /(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\=)|(\\=:)|(!!)|(==)|(::)/; + var tripleOperators = /(:::)|(\.\.\.)|(=<:)|(>=:)/; + + var middle = ["in", "then", "else", "of", "elseof", "elsecase", "elseif", "catch", + "finally", "with", "require", "prepare", "import", "export", "define", "do"]; + var end = ["end"]; + + var atoms = wordRegexp(["true", "false", "nil", "unit"]); + var commonKeywords = wordRegexp(["andthen", "at", "attr", "declare", "feat", "from", "lex", + "mod", "div", "mode", "orelse", "parser", "prod", "prop", "scanner", "self", "syn", "token"]); + var openingKeywords = wordRegexp(["local", "proc", "fun", "case", "class", "if", "cond", "or", "dis", + "choice", "not", "thread", "try", "raise", "lock", "for", "suchthat", "meth", "functor"]); + var middleKeywords = wordRegexp(middle); + var endKeywords = wordRegexp(end); + + // Tokenizers + function tokenBase(stream, state) { + if (stream.eatSpace()) { + return null; + } + + // Brackets + if(stream.match(/[{}]/)) { + return "bracket"; + } + + // Special [] keyword + if (stream.match('[]')) { + return "keyword" + } + + // Operators + if (stream.match(tripleOperators) || stream.match(doubleOperators)) { + return "operator"; + } + + // Atoms + if(stream.match(atoms)) { + return 'atom'; + } + + // Opening keywords + var matched = stream.match(openingKeywords); + if (matched) { + if (!state.doInCurrentLine) + state.currentIndent++; + else + state.doInCurrentLine = false; + + // Special matching for signatures + if(matched[0] == "proc" || matched[0] == "fun") + state.tokenize = tokenFunProc; + else if(matched[0] == "class") + state.tokenize = tokenClass; + else if(matched[0] == "meth") + state.tokenize = tokenMeth; + + return 'keyword'; + } + + // Middle and other keywords + if (stream.match(middleKeywords) || stream.match(commonKeywords)) { + return "keyword" + } + + // End keywords + if (stream.match(endKeywords)) { + state.currentIndent--; + return 'keyword'; + } + + // Eat the next char for next comparisons + var ch = stream.next(); + + // Strings + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + + // Numbers + if (/[~\d]/.test(ch)) { + if (ch == "~") { + if(! /^[0-9]/.test(stream.peek())) + return null; + else if (( stream.next() == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) + return "number"; + } + + if ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || stream.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) + return "number"; + + return null; + } + + // Comments + if (ch == "%") { + stream.skipToEnd(); + return 'comment'; + } + else if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + } + + // Single operators + if(singleOperators.test(ch)) { + return "operator"; + } + + // If nothing match, we skip the entire alphanumeric block + stream.eatWhile(/\w/); + + return "variable"; + } + + function tokenClass(stream, state) { + if (stream.eatSpace()) { + return null; + } + stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/); + state.tokenize = tokenBase; + return "variable-3" + } + + function tokenMeth(stream, state) { + if (stream.eatSpace()) { + return null; + } + stream.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/); + state.tokenize = tokenBase; + return "def" + } + + function tokenFunProc(stream, state) { + if (stream.eatSpace()) { + return null; + } + + if(!state.hasPassedFirstStage && stream.eat("{")) { + state.hasPassedFirstStage = true; + return "bracket"; + } + else if(state.hasPassedFirstStage) { + stream.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\$/); + state.hasPassedFirstStage = false; + state.tokenize = tokenBase; + return "def" + } + else { + state.tokenize = tokenBase; + return null; + } + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenString(quote) { + return function (stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end || !escaped) + state.tokenize = tokenBase; + return "string"; + }; + } + + function buildElectricInputRegEx() { + // Reindentation should occur on [] or on a match of any of + // the block closing keywords, at the end of a line. + var allClosings = middle.concat(end); + return new RegExp("[\\[\\]]|(" + allClosings.join("|") + ")$"); + } + + return { + + startState: function () { + return { + tokenize: tokenBase, + currentIndent: 0, + doInCurrentLine: false, + hasPassedFirstStage: false + }; + }, + + token: function (stream, state) { + if (stream.sol()) + state.doInCurrentLine = 0; + + return state.tokenize(stream, state); + }, + + indent: function (state, textAfter) { + var trueText = textAfter.replace(/^\s+|\s+$/g, ''); + + if (trueText.match(endKeywords) || trueText.match(middleKeywords) || trueText.match(/(\[])/)) + return conf.indentUnit * (state.currentIndent - 1); + + if (state.currentIndent < 0) + return 0; + + return state.currentIndent * conf.indentUnit; + }, + fold: "indent", + electricInput: buildElectricInputRegEx(), + lineComment: "%", + blockCommentStart: "/*", + blockCommentEnd: "*/" + }; +}); + +CodeMirror.defineMIME("text/x-oz", "oz"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pascal/pascal.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pascal/pascal.js new file mode 100644 index 0000000000..c48698bd70 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pascal/pascal.js @@ -0,0 +1,136 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("pascal", function() { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var keywords = words( + "absolute and array asm begin case const constructor destructor div do " + + "downto else end file for function goto if implementation in inherited " + + "inline interface label mod nil not object of operator or packed procedure " + + "program record reintroduce repeat self set shl shr string then to type " + + "unit until uses var while with xor as class dispinterface except exports " + + "finalization finally initialization inline is library on out packed " + + "property raise resourcestring threadvar try absolute abstract alias " + + "assembler bitpacked break cdecl continue cppdecl cvar default deprecated " + + "dynamic enumerator experimental export external far far16 forward generic " + + "helper implements index interrupt iocheck local message name near " + + "nodefault noreturn nostackframe oldfpccall otherwise overload override " + + "pascal platform private protected public published read register " + + "reintroduce result safecall saveregisters softfloat specialize static " + + "stdcall stored strict unaligned unimplemented varargs virtual write"); + var atoms = {"null": true}; + + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == "#" && state.startOfLine) { + stream.skipToEnd(); + return "meta"; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (ch == "(" && stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (ch == "{") { + state.tokenize = tokenCommentBraces; + return tokenCommentBraces(stream, state); + } + if (/[\[\]\(\),;\:\.]/.test(ch)) { + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !escaped) state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == ")" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenCommentBraces(stream, state) { + var ch; + while (ch = stream.next()) { + if (ch == "}") { + state.tokenize = null; + break; + } + } + return "comment"; + } + + // Interface + + return { + startState: function() { + return {tokenize: null}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + return style; + }, + + electricChars: "{}" + }; +}); + +CodeMirror.defineMIME("text/x-pascal", "pascal"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pegjs/pegjs.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pegjs/pegjs.js new file mode 100644 index 0000000000..ac011d3c8f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pegjs/pegjs.js @@ -0,0 +1,114 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../javascript/javascript")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../javascript/javascript"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("pegjs", function (config) { + var jsMode = CodeMirror.getMode(config, "javascript"); + + function identifier(stream) { + return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/); + } + + return { + startState: function () { + return { + inString: false, + stringType: null, + inComment: false, + inCharacterClass: false, + braced: 0, + lhs: true, + localState: null + }; + }, + token: function (stream, state) { + if (stream) + + //check for state changes + if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) { + state.stringType = stream.peek(); + stream.next(); // Skip quote + state.inString = true; // Update state + } + if (!state.inString && !state.inComment && stream.match('/*')) { + state.inComment = true; + } + + //return state + if (state.inString) { + while (state.inString && !stream.eol()) { + if (stream.peek() === state.stringType) { + stream.next(); // Skip quote + state.inString = false; // Clear flag + } else if (stream.peek() === '\\') { + stream.next(); + stream.next(); + } else { + stream.match(/^.[^\\\"\']*/); + } + } + return state.lhs ? "property string" : "string"; // Token style + } else if (state.inComment) { + while (state.inComment && !stream.eol()) { + if (stream.match('*/')) { + state.inComment = false; // Clear flag + } else { + stream.match(/^.[^\*]*/); + } + } + return "comment"; + } else if (state.inCharacterClass) { + while (state.inCharacterClass && !stream.eol()) { + if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { + state.inCharacterClass = false; + } + } + } else if (stream.peek() === '[') { + stream.next(); + state.inCharacterClass = true; + return 'bracket'; + } else if (stream.match('//')) { + stream.skipToEnd(); + return "comment"; + } else if (state.braced || stream.peek() === '{') { + if (state.localState === null) { + state.localState = CodeMirror.startState(jsMode); + } + var token = jsMode.token(stream, state.localState); + var text = stream.current(); + if (!token) { + for (var i = 0; i < text.length; i++) { + if (text[i] === '{') { + state.braced++; + } else if (text[i] === '}') { + state.braced--; + } + }; + } + return token; + } else if (identifier(stream)) { + if (stream.peek() === ':') { + return 'variable'; + } + return 'variable-2'; + } else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) { + stream.next(); + return 'bracket'; + } else if (!stream.eatSpace()) { + stream.next(); + } + return null; + } + }; +}, "javascript"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/perl/perl.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/perl/perl.js new file mode 100644 index 0000000000..41e7bc731c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/perl/perl.js @@ -0,0 +1,836 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08) +// This is a part of CodeMirror from https://github.com/sabaca/CodeMirror_mode_perl (mail@sabaca.com) + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("perl",function(){ + // http://perldoc.perl.org + var PERL={ // null - magic touch + // 1 - keyword + // 2 - def + // 3 - atom + // 4 - operator + // 5 - variable-2 (predefined) + // [x,y] - x=1,2,3; y=must be defined if x{...} + // PERL operators + '->' : 4, + '++' : 4, + '--' : 4, + '**' : 4, + // ! ~ \ and unary + and - + '=~' : 4, + '!~' : 4, + '*' : 4, + '/' : 4, + '%' : 4, + 'x' : 4, + '+' : 4, + '-' : 4, + '.' : 4, + '<<' : 4, + '>>' : 4, + // named unary operators + '<' : 4, + '>' : 4, + '<=' : 4, + '>=' : 4, + 'lt' : 4, + 'gt' : 4, + 'le' : 4, + 'ge' : 4, + '==' : 4, + '!=' : 4, + '<=>' : 4, + 'eq' : 4, + 'ne' : 4, + 'cmp' : 4, + '~~' : 4, + '&' : 4, + '|' : 4, + '^' : 4, + '&&' : 4, + '||' : 4, + '//' : 4, + '..' : 4, + '...' : 4, + '?' : 4, + ':' : 4, + '=' : 4, + '+=' : 4, + '-=' : 4, + '*=' : 4, // etc. ??? + ',' : 4, + '=>' : 4, + '::' : 4, + // list operators (rightward) + 'not' : 4, + 'and' : 4, + 'or' : 4, + 'xor' : 4, + // PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;) + 'BEGIN' : [5,1], + 'END' : [5,1], + 'PRINT' : [5,1], + 'PRINTF' : [5,1], + 'GETC' : [5,1], + 'READ' : [5,1], + 'READLINE' : [5,1], + 'DESTROY' : [5,1], + 'TIE' : [5,1], + 'TIEHANDLE' : [5,1], + 'UNTIE' : [5,1], + 'STDIN' : 5, + 'STDIN_TOP' : 5, + 'STDOUT' : 5, + 'STDOUT_TOP' : 5, + 'STDERR' : 5, + 'STDERR_TOP' : 5, + '$ARG' : 5, + '$_' : 5, + '@ARG' : 5, + '@_' : 5, + '$LIST_SEPARATOR' : 5, + '$"' : 5, + '$PROCESS_ID' : 5, + '$PID' : 5, + '$$' : 5, + '$REAL_GROUP_ID' : 5, + '$GID' : 5, + '$(' : 5, + '$EFFECTIVE_GROUP_ID' : 5, + '$EGID' : 5, + '$)' : 5, + '$PROGRAM_NAME' : 5, + '$0' : 5, + '$SUBSCRIPT_SEPARATOR' : 5, + '$SUBSEP' : 5, + '$;' : 5, + '$REAL_USER_ID' : 5, + '$UID' : 5, + '$<' : 5, + '$EFFECTIVE_USER_ID' : 5, + '$EUID' : 5, + '$>' : 5, + '$a' : 5, + '$b' : 5, + '$COMPILING' : 5, + '$^C' : 5, + '$DEBUGGING' : 5, + '$^D' : 5, + '${^ENCODING}' : 5, + '$ENV' : 5, + '%ENV' : 5, + '$SYSTEM_FD_MAX' : 5, + '$^F' : 5, + '@F' : 5, + '${^GLOBAL_PHASE}' : 5, + '$^H' : 5, + '%^H' : 5, + '@INC' : 5, + '%INC' : 5, + '$INPLACE_EDIT' : 5, + '$^I' : 5, + '$^M' : 5, + '$OSNAME' : 5, + '$^O' : 5, + '${^OPEN}' : 5, + '$PERLDB' : 5, + '$^P' : 5, + '$SIG' : 5, + '%SIG' : 5, + '$BASETIME' : 5, + '$^T' : 5, + '${^TAINT}' : 5, + '${^UNICODE}' : 5, + '${^UTF8CACHE}' : 5, + '${^UTF8LOCALE}' : 5, + '$PERL_VERSION' : 5, + '$^V' : 5, + '${^WIN32_SLOPPY_STAT}' : 5, + '$EXECUTABLE_NAME' : 5, + '$^X' : 5, + '$1' : 5, // - regexp $1, $2... + '$MATCH' : 5, + '$&' : 5, + '${^MATCH}' : 5, + '$PREMATCH' : 5, + '$`' : 5, + '${^PREMATCH}' : 5, + '$POSTMATCH' : 5, + "$'" : 5, + '${^POSTMATCH}' : 5, + '$LAST_PAREN_MATCH' : 5, + '$+' : 5, + '$LAST_SUBMATCH_RESULT' : 5, + '$^N' : 5, + '@LAST_MATCH_END' : 5, + '@+' : 5, + '%LAST_PAREN_MATCH' : 5, + '%+' : 5, + '@LAST_MATCH_START' : 5, + '@-' : 5, + '%LAST_MATCH_START' : 5, + '%-' : 5, + '$LAST_REGEXP_CODE_RESULT' : 5, + '$^R' : 5, + '${^RE_DEBUG_FLAGS}' : 5, + '${^RE_TRIE_MAXBUF}' : 5, + '$ARGV' : 5, + '@ARGV' : 5, + 'ARGV' : 5, + 'ARGVOUT' : 5, + '$OUTPUT_FIELD_SEPARATOR' : 5, + '$OFS' : 5, + '$,' : 5, + '$INPUT_LINE_NUMBER' : 5, + '$NR' : 5, + '$.' : 5, + '$INPUT_RECORD_SEPARATOR' : 5, + '$RS' : 5, + '$/' : 5, + '$OUTPUT_RECORD_SEPARATOR' : 5, + '$ORS' : 5, + '$\\' : 5, + '$OUTPUT_AUTOFLUSH' : 5, + '$|' : 5, + '$ACCUMULATOR' : 5, + '$^A' : 5, + '$FORMAT_FORMFEED' : 5, + '$^L' : 5, + '$FORMAT_PAGE_NUMBER' : 5, + '$%' : 5, + '$FORMAT_LINES_LEFT' : 5, + '$-' : 5, + '$FORMAT_LINE_BREAK_CHARACTERS' : 5, + '$:' : 5, + '$FORMAT_LINES_PER_PAGE' : 5, + '$=' : 5, + '$FORMAT_TOP_NAME' : 5, + '$^' : 5, + '$FORMAT_NAME' : 5, + '$~' : 5, + '${^CHILD_ERROR_NATIVE}' : 5, + '$EXTENDED_OS_ERROR' : 5, + '$^E' : 5, + '$EXCEPTIONS_BEING_CAUGHT' : 5, + '$^S' : 5, + '$WARNING' : 5, + '$^W' : 5, + '${^WARNING_BITS}' : 5, + '$OS_ERROR' : 5, + '$ERRNO' : 5, + '$!' : 5, + '%OS_ERROR' : 5, + '%ERRNO' : 5, + '%!' : 5, + '$CHILD_ERROR' : 5, + '$?' : 5, + '$EVAL_ERROR' : 5, + '$@' : 5, + '$OFMT' : 5, + '$#' : 5, + '$*' : 5, + '$ARRAY_BASE' : 5, + '$[' : 5, + '$OLD_PERL_VERSION' : 5, + '$]' : 5, + // PERL blocks + 'if' :[1,1], + elsif :[1,1], + 'else' :[1,1], + 'while' :[1,1], + unless :[1,1], + 'for' :[1,1], + foreach :[1,1], + // PERL functions + 'abs' :1, // - absolute value function + accept :1, // - accept an incoming socket connect + alarm :1, // - schedule a SIGALRM + 'atan2' :1, // - arctangent of Y/X in the range -PI to PI + bind :1, // - binds an address to a socket + binmode :1, // - prepare binary files for I/O + bless :1, // - create an object + bootstrap :1, // + 'break' :1, // - break out of a "given" block + caller :1, // - get context of the current subroutine call + chdir :1, // - change your current working directory + chmod :1, // - changes the permissions on a list of files + chomp :1, // - remove a trailing record separator from a string + chop :1, // - remove the last character from a string + chown :1, // - change the ownership on a list of files + chr :1, // - get character this number represents + chroot :1, // - make directory new root for path lookups + close :1, // - close file (or pipe or socket) handle + closedir :1, // - close directory handle + connect :1, // - connect to a remote socket + 'continue' :[1,1], // - optional trailing block in a while or foreach + 'cos' :1, // - cosine function + crypt :1, // - one-way passwd-style encryption + dbmclose :1, // - breaks binding on a tied dbm file + dbmopen :1, // - create binding on a tied dbm file + 'default' :1, // + defined :1, // - test whether a value, variable, or function is defined + 'delete' :1, // - deletes a value from a hash + die :1, // - raise an exception or bail out + 'do' :1, // - turn a BLOCK into a TERM + dump :1, // - create an immediate core dump + each :1, // - retrieve the next key/value pair from a hash + endgrent :1, // - be done using group file + endhostent :1, // - be done using hosts file + endnetent :1, // - be done using networks file + endprotoent :1, // - be done using protocols file + endpwent :1, // - be done using passwd file + endservent :1, // - be done using services file + eof :1, // - test a filehandle for its end + 'eval' :1, // - catch exceptions or compile and run code + 'exec' :1, // - abandon this program to run another + exists :1, // - test whether a hash key is present + exit :1, // - terminate this program + 'exp' :1, // - raise I to a power + fcntl :1, // - file control system call + fileno :1, // - return file descriptor from filehandle + flock :1, // - lock an entire file with an advisory lock + fork :1, // - create a new process just like this one + format :1, // - declare a picture format with use by the write() function + formline :1, // - internal function used for formats + getc :1, // - get the next character from the filehandle + getgrent :1, // - get next group record + getgrgid :1, // - get group record given group user ID + getgrnam :1, // - get group record given group name + gethostbyaddr :1, // - get host record given its address + gethostbyname :1, // - get host record given name + gethostent :1, // - get next hosts record + getlogin :1, // - return who logged in at this tty + getnetbyaddr :1, // - get network record given its address + getnetbyname :1, // - get networks record given name + getnetent :1, // - get next networks record + getpeername :1, // - find the other end of a socket connection + getpgrp :1, // - get process group + getppid :1, // - get parent process ID + getpriority :1, // - get current nice value + getprotobyname :1, // - get protocol record given name + getprotobynumber :1, // - get protocol record numeric protocol + getprotoent :1, // - get next protocols record + getpwent :1, // - get next passwd record + getpwnam :1, // - get passwd record given user login name + getpwuid :1, // - get passwd record given user ID + getservbyname :1, // - get services record given its name + getservbyport :1, // - get services record given numeric port + getservent :1, // - get next services record + getsockname :1, // - retrieve the sockaddr for a given socket + getsockopt :1, // - get socket options on a given socket + given :1, // + glob :1, // - expand filenames using wildcards + gmtime :1, // - convert UNIX time into record or string using Greenwich time + 'goto' :1, // - create spaghetti code + grep :1, // - locate elements in a list test true against a given criterion + hex :1, // - convert a string to a hexadecimal number + 'import' :1, // - patch a module's namespace into your own + index :1, // - find a substring within a string + 'int' :1, // - get the integer portion of a number + ioctl :1, // - system-dependent device control system call + 'join' :1, // - join a list into a string using a separator + keys :1, // - retrieve list of indices from a hash + kill :1, // - send a signal to a process or process group + last :1, // - exit a block prematurely + lc :1, // - return lower-case version of a string + lcfirst :1, // - return a string with just the next letter in lower case + length :1, // - return the number of bytes in a string + 'link' :1, // - create a hard link in the filesystem + listen :1, // - register your socket as a server + local : 2, // - create a temporary value for a global variable (dynamic scoping) + localtime :1, // - convert UNIX time into record or string using local time + lock :1, // - get a thread lock on a variable, subroutine, or method + 'log' :1, // - retrieve the natural logarithm for a number + lstat :1, // - stat a symbolic link + m :null, // - match a string with a regular expression pattern + map :1, // - apply a change to a list to get back a new list with the changes + mkdir :1, // - create a directory + msgctl :1, // - SysV IPC message control operations + msgget :1, // - get SysV IPC message queue + msgrcv :1, // - receive a SysV IPC message from a message queue + msgsnd :1, // - send a SysV IPC message to a message queue + my : 2, // - declare and assign a local variable (lexical scoping) + 'new' :1, // + next :1, // - iterate a block prematurely + no :1, // - unimport some module symbols or semantics at compile time + oct :1, // - convert a string to an octal number + open :1, // - open a file, pipe, or descriptor + opendir :1, // - open a directory + ord :1, // - find a character's numeric representation + our : 2, // - declare and assign a package variable (lexical scoping) + pack :1, // - convert a list into a binary representation + 'package' :1, // - declare a separate global namespace + pipe :1, // - open a pair of connected filehandles + pop :1, // - remove the last element from an array and return it + pos :1, // - find or set the offset for the last/next m//g search + print :1, // - output a list to a filehandle + printf :1, // - output a formatted list to a filehandle + prototype :1, // - get the prototype (if any) of a subroutine + push :1, // - append one or more elements to an array + q :null, // - singly quote a string + qq :null, // - doubly quote a string + qr :null, // - Compile pattern + quotemeta :null, // - quote regular expression magic characters + qw :null, // - quote a list of words + qx :null, // - backquote quote a string + rand :1, // - retrieve the next pseudorandom number + read :1, // - fixed-length buffered input from a filehandle + readdir :1, // - get a directory from a directory handle + readline :1, // - fetch a record from a file + readlink :1, // - determine where a symbolic link is pointing + readpipe :1, // - execute a system command and collect standard output + recv :1, // - receive a message over a Socket + redo :1, // - start this loop iteration over again + ref :1, // - find out the type of thing being referenced + rename :1, // - change a filename + require :1, // - load in external functions from a library at runtime + reset :1, // - clear all variables of a given name + 'return' :1, // - get out of a function early + reverse :1, // - flip a string or a list + rewinddir :1, // - reset directory handle + rindex :1, // - right-to-left substring search + rmdir :1, // - remove a directory + s :null, // - replace a pattern with a string + say :1, // - print with newline + scalar :1, // - force a scalar context + seek :1, // - reposition file pointer for random-access I/O + seekdir :1, // - reposition directory pointer + select :1, // - reset default output or do I/O multiplexing + semctl :1, // - SysV semaphore control operations + semget :1, // - get set of SysV semaphores + semop :1, // - SysV semaphore operations + send :1, // - send a message over a socket + setgrent :1, // - prepare group file for use + sethostent :1, // - prepare hosts file for use + setnetent :1, // - prepare networks file for use + setpgrp :1, // - set the process group of a process + setpriority :1, // - set a process's nice value + setprotoent :1, // - prepare protocols file for use + setpwent :1, // - prepare passwd file for use + setservent :1, // - prepare services file for use + setsockopt :1, // - set some socket options + shift :1, // - remove the first element of an array, and return it + shmctl :1, // - SysV shared memory operations + shmget :1, // - get SysV shared memory segment identifier + shmread :1, // - read SysV shared memory + shmwrite :1, // - write SysV shared memory + shutdown :1, // - close down just half of a socket connection + 'sin' :1, // - return the sine of a number + sleep :1, // - block for some number of seconds + socket :1, // - create a socket + socketpair :1, // - create a pair of sockets + 'sort' :1, // - sort a list of values + splice :1, // - add or remove elements anywhere in an array + 'split' :1, // - split up a string using a regexp delimiter + sprintf :1, // - formatted print into a string + 'sqrt' :1, // - square root function + srand :1, // - seed the random number generator + stat :1, // - get a file's status information + state :1, // - declare and assign a state variable (persistent lexical scoping) + study :1, // - optimize input data for repeated searches + 'sub' :1, // - declare a subroutine, possibly anonymously + 'substr' :1, // - get or alter a portion of a string + symlink :1, // - create a symbolic link to a file + syscall :1, // - execute an arbitrary system call + sysopen :1, // - open a file, pipe, or descriptor + sysread :1, // - fixed-length unbuffered input from a filehandle + sysseek :1, // - position I/O pointer on handle used with sysread and syswrite + system :1, // - run a separate program + syswrite :1, // - fixed-length unbuffered output to a filehandle + tell :1, // - get current seekpointer on a filehandle + telldir :1, // - get current seekpointer on a directory handle + tie :1, // - bind a variable to an object class + tied :1, // - get a reference to the object underlying a tied variable + time :1, // - return number of seconds since 1970 + times :1, // - return elapsed time for self and child processes + tr :null, // - transliterate a string + truncate :1, // - shorten a file + uc :1, // - return upper-case version of a string + ucfirst :1, // - return a string with just the next letter in upper case + umask :1, // - set file creation mode mask + undef :1, // - remove a variable or function definition + unlink :1, // - remove one link to a file + unpack :1, // - convert binary structure into normal perl variables + unshift :1, // - prepend more elements to the beginning of a list + untie :1, // - break a tie binding to a variable + use :1, // - load in a module at compile time + utime :1, // - set a file's last access and modify times + values :1, // - return a list of the values in a hash + vec :1, // - test or set particular bits in a string + wait :1, // - wait for any child process to die + waitpid :1, // - wait for a particular child process to die + wantarray :1, // - get void vs scalar vs list context of current subroutine call + warn :1, // - print debugging info + when :1, // + write :1, // - print a picture record + y :null}; // - transliterate a string + + var RXstyle="string-2"; + var RXmodifiers=/[goseximacplud]/; // NOTE: "m", "s", "y" and "tr" need to correct real modifiers for each regexp type + + function tokenChain(stream,state,chain,style,tail){ // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;) + state.chain=null; // 12 3tail + state.style=null; + state.tail=null; + state.tokenize=function(stream,state){ + var e=false,c,i=0; + while(c=stream.next()){ + if(c===chain[i]&&!e){ + if(chain[++i]!==undefined){ + state.chain=chain[i]; + state.style=style; + state.tail=tail;} + else if(tail) + stream.eatWhile(tail); + state.tokenize=tokenPerl; + return style;} + e=!e&&c=="\\";} + return style;}; + return state.tokenize(stream,state);} + + function tokenSOMETHING(stream,state,string){ + state.tokenize=function(stream,state){ + if(stream.string==string) + state.tokenize=tokenPerl; + stream.skipToEnd(); + return "string";}; + return state.tokenize(stream,state);} + + function tokenPerl(stream,state){ + if(stream.eatSpace()) + return null; + if(state.chain) + return tokenChain(stream,state,state.chain,state.style,state.tail); + if(stream.match(/^(\-?((\d[\d_]*)?\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F_]+|0b[01_]+|\d[\d_]*(e[+-]?\d+)?)/)) + return 'number'; + if(stream.match(/^<<(?=[_a-zA-Z])/)){ // NOTE: <"],RXstyle,RXmodifiers);} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} + else if(c=="q"){ + c=look(stream, 1); + if(c=="("){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[")"],"string");} + if(c=="["){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["]"],"string");} + if(c=="{"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["}"],"string");} + if(c=="<"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[">"],"string");} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],"string");}} + else if(c=="w"){ + c=look(stream, 1); + if(c=="("){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[")"],"bracket");} + if(c=="["){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["]"],"bracket");} + if(c=="{"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["}"],"bracket");} + if(c=="<"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[">"],"bracket");} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],"bracket");}} + else if(c=="r"){ + c=look(stream, 1); + if(c=="("){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} + if(c=="["){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} + if(c=="{"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} + if(c=="<"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} + else if(/[\^'"!~\/(\[{<]/.test(c)){ + if(c=="("){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[")"],"string");} + if(c=="["){ + eatSuffix(stream, 1); + return tokenChain(stream,state,["]"],"string");} + if(c=="{"){ + eatSuffix(stream, 1); + return tokenChain(stream,state,["}"],"string");} + if(c=="<"){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[">"],"string");} + if(/[\^'"!~\/]/.test(c)){ + return tokenChain(stream,state,[stream.eat(c)],"string");}}}} + if(ch=="m"){ + var c=look(stream, -2); + if(!(c&&/\w/.test(c))){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(/[\^'"!~\/]/.test(c)){ + return tokenChain(stream,state,[c],RXstyle,RXmodifiers);} + if(c=="("){ + return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} + if(c=="["){ + return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} + if(c=="{"){ + return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} + if(c=="<"){ + return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}}}} + if(ch=="s"){ + var c=/[\/>\]})\w]/.test(look(stream, -2)); + if(!c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} + if(ch=="y"){ + var c=/[\/>\]})\w]/.test(look(stream, -2)); + if(!c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} + if(ch=="t"){ + var c=/[\/>\]})\w]/.test(look(stream, -2)); + if(!c){ + c=stream.eat("r");if(c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}} + if(ch=="`"){ + return tokenChain(stream,state,[ch],"variable-2");} + if(ch=="/"){ + if(!/~\s*$/.test(prefix(stream))) + return "operator"; + else + return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);} + if(ch=="$"){ + var p=stream.pos; + if(stream.eatWhile(/\d/)||stream.eat("{")&&stream.eatWhile(/\d/)&&stream.eat("}")) + return "variable-2"; + else + stream.pos=p;} + if(/[$@%]/.test(ch)){ + var p=stream.pos; + if(stream.eat("^")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(look(stream, -2))&&stream.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){ + var c=stream.current(); + if(PERL[c]) + return "variable-2";} + stream.pos=p;} + if(/[$@%&]/.test(ch)){ + if(stream.eatWhile(/[\w$]/)||stream.eat("{")&&stream.eatWhile(/[\w$]/)&&stream.eat("}")){ + var c=stream.current(); + if(PERL[c]) + return "variable-2"; + else + return "variable";}} + if(ch=="#"){ + if(look(stream, -2)!="$"){ + stream.skipToEnd(); + return "comment";}} + if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(ch)){ + var p=stream.pos; + stream.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/); + if(PERL[stream.current()]) + return "operator"; + else + stream.pos=p;} + if(ch=="_"){ + if(stream.pos==1){ + if(suffix(stream, 6)=="_END__"){ + return tokenChain(stream,state,['\0'],"comment");} + else if(suffix(stream, 7)=="_DATA__"){ + return tokenChain(stream,state,['\0'],"variable-2");} + else if(suffix(stream, 7)=="_C__"){ + return tokenChain(stream,state,['\0'],"string");}}} + if(/\w/.test(ch)){ + var p=stream.pos; + if(look(stream, -2)=="{"&&(look(stream, 0)=="}"||stream.eatWhile(/\w/)&&look(stream, 0)=="}")) + return "string"; + else + stream.pos=p;} + if(/[A-Z]/.test(ch)){ + var l=look(stream, -2); + var p=stream.pos; + stream.eatWhile(/[A-Z_]/); + if(/[\da-z]/.test(look(stream, 0))){ + stream.pos=p;} + else{ + var c=PERL[stream.current()]; + if(!c) + return "meta"; + if(c[1]) + c=c[0]; + if(l!=":"){ + if(c==1) + return "keyword"; + else if(c==2) + return "def"; + else if(c==3) + return "atom"; + else if(c==4) + return "operator"; + else if(c==5) + return "variable-2"; + else + return "meta";} + else + return "meta";}} + if(/[a-zA-Z_]/.test(ch)){ + var l=look(stream, -2); + stream.eatWhile(/\w/); + var c=PERL[stream.current()]; + if(!c) + return "meta"; + if(c[1]) + c=c[0]; + if(l!=":"){ + if(c==1) + return "keyword"; + else if(c==2) + return "def"; + else if(c==3) + return "atom"; + else if(c==4) + return "operator"; + else if(c==5) + return "variable-2"; + else + return "meta";} + else + return "meta";} + return null;} + + return { + startState: function() { + return { + tokenize: tokenPerl, + chain: null, + style: null, + tail: null + }; + }, + token: function(stream, state) { + return (state.tokenize || tokenPerl)(stream, state); + }, + lineComment: '#' + }; +}); + +CodeMirror.registerHelper("wordChars", "perl", /[\w$]/); + +CodeMirror.defineMIME("text/x-perl", "perl"); + +// it's like "peek", but need for look-ahead or look-behind if index < 0 +function look(stream, c){ + return stream.string.charAt(stream.pos+(c||0)); +} + +// return a part of prefix of current stream from current position +function prefix(stream, c){ + if(c){ + var x=stream.pos-c; + return stream.string.substr((x>=0?x:0),c);} + else{ + return stream.string.substr(0,stream.pos-1); + } +} + +// return a part of suffix of current stream from current position +function suffix(stream, c){ + var y=stream.string.length; + var x=y-stream.pos+1; + return stream.string.substr(stream.pos,(c&&c=(y=stream.string.length-1)) + stream.pos=y; + else + stream.pos=x; +} + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/php/php.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/php/php.js new file mode 100644 index 0000000000..127b4a2382 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/php/php.js @@ -0,0 +1,234 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../clike/clike")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../clike/clike"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function keywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + // Helper for phpString + function matchSequence(list, end, escapes) { + if (list.length == 0) return phpString(end); + return function (stream, state) { + var patterns = list[0]; + for (var i = 0; i < patterns.length; i++) if (stream.match(patterns[i][0])) { + state.tokenize = matchSequence(list.slice(1), end); + return patterns[i][1]; + } + state.tokenize = phpString(end, escapes); + return "string"; + }; + } + function phpString(closing, escapes) { + return function(stream, state) { return phpString_(stream, state, closing, escapes); }; + } + function phpString_(stream, state, closing, escapes) { + // "Complex" syntax + if (escapes !== false && stream.match("${", false) || stream.match("{$", false)) { + state.tokenize = null; + return "string"; + } + + // Simple syntax + if (escapes !== false && stream.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/)) { + // After the variable name there may appear array or object operator. + if (stream.match("[", false)) { + // Match array operator + state.tokenize = matchSequence([ + [["[", null]], + [[/\d[\w\.]*/, "number"], + [/\$[a-zA-Z_][a-zA-Z0-9_]*/, "variable-2"], + [/[\w\$]+/, "variable"]], + [["]", null]] + ], closing, escapes); + } + if (stream.match(/^->\w/, false)) { + // Match object operator + state.tokenize = matchSequence([ + [["->", null]], + [[/[\w]+/, "variable"]] + ], closing, escapes); + } + return "variable-2"; + } + + var escaped = false; + // Normal string + while (!stream.eol() && + (escaped || escapes === false || + (!stream.match("{$", false) && + !stream.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/, false)))) { + if (!escaped && stream.match(closing)) { + state.tokenize = null; + state.tokStack.pop(); state.tokStack.pop(); + break; + } + escaped = stream.next() == "\\" && !escaped; + } + return "string"; + } + + var phpKeywords = "abstract and array as break case catch class clone const continue declare default " + + "do else elseif enddeclare endfor endforeach endif endswitch endwhile enum extends final " + + "for foreach function global goto if implements interface instanceof namespace " + + "new or private protected public static switch throw trait try use var while xor " + + "die echo empty exit eval include include_once isset list require require_once return " + + "print unset __halt_compiler self static parent yield insteadof finally readonly match"; + var phpAtoms = "true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__"; + var phpBuiltin = "func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage memory_get_peak_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count"; + CodeMirror.registerHelper("hintWords", "php", [phpKeywords, phpAtoms, phpBuiltin].join(" ").split(" ")); + CodeMirror.registerHelper("wordChars", "php", /[\w$]/); + + var phpConfig = { + name: "clike", + helperType: "php", + keywords: keywords(phpKeywords), + blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"), + defKeywords: keywords("class enum function interface namespace trait"), + atoms: keywords(phpAtoms), + builtin: keywords(phpBuiltin), + multiLineStrings: true, + hooks: { + "$": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "variable-2"; + }, + "<": function(stream, state) { + var before; + if (before = stream.match(/^<<\s*/)) { + var quoted = stream.eat(/['"]/); + stream.eatWhile(/[\w\.]/); + var delim = stream.current().slice(before[0].length + (quoted ? 2 : 1)); + if (quoted) stream.eat(quoted); + if (delim) { + (state.tokStack || (state.tokStack = [])).push(delim, 0); + state.tokenize = phpString(delim, quoted != "'"); + return "string"; + } + } + return false; + }, + "#": function(stream) { + while (!stream.eol() && !stream.match("?>", false)) stream.next(); + return "comment"; + }, + "/": function(stream) { + if (stream.eat("/")) { + while (!stream.eol() && !stream.match("?>", false)) stream.next(); + return "comment"; + } + return false; + }, + '"': function(_stream, state) { + (state.tokStack || (state.tokStack = [])).push('"', 0); + state.tokenize = phpString('"'); + return "string"; + }, + "{": function(_stream, state) { + if (state.tokStack && state.tokStack.length) + state.tokStack[state.tokStack.length - 1]++; + return false; + }, + "}": function(_stream, state) { + if (state.tokStack && state.tokStack.length > 0 && + !--state.tokStack[state.tokStack.length - 1]) { + state.tokenize = phpString(state.tokStack[state.tokStack.length - 2]); + } + return false; + } + } + }; + + CodeMirror.defineMode("php", function(config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, (parserConfig && parserConfig.htmlMode) || "text/html"); + var phpMode = CodeMirror.getMode(config, phpConfig); + + function dispatch(stream, state) { + var isPHP = state.curMode == phpMode; + if (stream.sol() && state.pending && state.pending != '"' && state.pending != "'") state.pending = null; + if (!isPHP) { + if (stream.match(/^<\?\w*/)) { + state.curMode = phpMode; + if (!state.php) state.php = CodeMirror.startState(phpMode, htmlMode.indent(state.html, "", "")) + state.curState = state.php; + return "meta"; + } + if (state.pending == '"' || state.pending == "'") { + while (!stream.eol() && stream.next() != state.pending) {} + var style = "string"; + } else if (state.pending && stream.pos < state.pending.end) { + stream.pos = state.pending.end; + var style = state.pending.style; + } else { + var style = htmlMode.token(stream, state.curState); + } + if (state.pending) state.pending = null; + var cur = stream.current(), openPHP = cur.search(/<\?/), m; + if (openPHP != -1) { + if (style == "string" && (m = cur.match(/[\'\"]$/)) && !/\?>/.test(cur)) state.pending = m[0]; + else state.pending = {end: stream.pos, style: style}; + stream.backUp(cur.length - openPHP); + } + return style; + } else if (isPHP && state.php.tokenize == null && stream.match("?>")) { + state.curMode = htmlMode; + state.curState = state.html; + if (!state.php.context.prev) state.php = null; + return "meta"; + } else { + return phpMode.token(stream, state.curState); + } + } + + return { + startState: function() { + var html = CodeMirror.startState(htmlMode) + var php = parserConfig.startOpen ? CodeMirror.startState(phpMode) : null + return {html: html, + php: php, + curMode: parserConfig.startOpen ? phpMode : htmlMode, + curState: parserConfig.startOpen ? php : html, + pending: null}; + }, + + copyState: function(state) { + var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html), + php = state.php, phpNew = php && CodeMirror.copyState(phpMode, php), cur; + if (state.curMode == htmlMode) cur = htmlNew; + else cur = phpNew; + return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur, + pending: state.pending}; + }, + + token: dispatch, + + indent: function(state, textAfter, line) { + if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) || + (state.curMode == phpMode && /^\?>/.test(textAfter))) + return htmlMode.indent(state.html, textAfter, line); + return state.curMode.indent(state.curState, textAfter, line); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + + innerMode: function(state) { return {state: state.curState, mode: state.curMode}; } + }; + }, "htmlmixed", "clike"); + + CodeMirror.defineMIME("application/x-httpd-php", "php"); + CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true}); + CodeMirror.defineMIME("text/x-php", phpConfig); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pig/pig.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pig/pig.js new file mode 100644 index 0000000000..3b9c7746bb --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pig/pig.js @@ -0,0 +1,178 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/* + * Pig Latin Mode for CodeMirror 2 + * @author Prasanth Jayachandran + * @link https://github.com/prasanthj/pig-codemirror-2 + * This implementation is adapted from PL/SQL mode in CodeMirror 2. + */ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("pig", function(_config, parserConfig) { + var keywords = parserConfig.keywords, + builtins = parserConfig.builtins, + types = parserConfig.types, + multiLineStrings = parserConfig.multiLineStrings; + + var isOperatorChar = /[*+\-%<>=&?:\/!|]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function tokenComment(stream, state) { + var isEnd = false; + var ch; + while(ch = stream.next()) { + if(ch == "/" && isEnd) { + state.tokenize = tokenBase; + break; + } + isEnd = (ch == "*"); + } + return "comment"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; break; + } + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = tokenBase; + return "error"; + }; + } + + + function tokenBase(stream, state) { + var ch = stream.next(); + + // is a start of string? + if (ch == '"' || ch == "'") + return chain(stream, state, tokenString(ch)); + // is it one of the special chars + else if(/[\[\]{}\(\),;\.]/.test(ch)) + return null; + // is it a number? + else if(/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + // multi line comment or operator + else if (ch == "/") { + if (stream.eat("*")) { + return chain(stream, state, tokenComment); + } + else { + stream.eatWhile(isOperatorChar); + return "operator"; + } + } + // single line comment or operator + else if (ch=="-") { + if(stream.eat("-")){ + stream.skipToEnd(); + return "comment"; + } + else { + stream.eatWhile(isOperatorChar); + return "operator"; + } + } + // is it an operator + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + else { + // get the while word + stream.eatWhile(/[\w\$_]/); + // is it one of the listed keywords? + if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { + //keywords can be used as variables like flatten(group), group.$0 etc.. + if (!stream.eat(")") && !stream.eat(".")) + return "keyword"; + } + // is it one of the builtin functions? + if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) + return "variable-2"; + // is it one of the listed types? + if (types && types.propertyIsEnumerable(stream.current().toUpperCase())) + return "variable-3"; + // default is a 'variable' + return "variable"; + } + } + + // Interface + return { + startState: function() { + return { + tokenize: tokenBase, + startOfLine: true + }; + }, + + token: function(stream, state) { + if(stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + return style; + } + }; +}); + +(function() { + function keywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + // builtin funcs taken from trunk revision 1303237 + var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL " + + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS " + + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG " + + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN " + + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER " + + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS " + + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA " + + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE " + + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG " + + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER "; + + // taken from QueryLexer.g + var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP " + + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL " + + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE " + + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE " + + "NEQ MATCHES TRUE FALSE DUMP"; + + // data types + var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP "; + + CodeMirror.defineMIME("text/x-pig", { + name: "pig", + builtins: keywords(pBuiltins), + keywords: keywords(pKeywords), + types: keywords(pTypes) + }); + + CodeMirror.registerHelper("hintWords", "pig", (pBuiltins + pTypes + pKeywords).split(" ")); +}()); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/powershell/powershell.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/powershell/powershell.js new file mode 100644 index 0000000000..4869ae7370 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/powershell/powershell.js @@ -0,0 +1,398 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + 'use strict'; + if (typeof exports == 'object' && typeof module == 'object') // CommonJS + mod(require('../../lib/codemirror')); + else if (typeof define == 'function' && define.amd) // AMD + define(['../../lib/codemirror'], mod); + else // Plain browser env + mod(window.CodeMirror); +})(function(CodeMirror) { +'use strict'; + +CodeMirror.defineMode('powershell', function() { + function buildRegexp(patterns, options) { + options = options || {}; + var prefix = options.prefix !== undefined ? options.prefix : '^'; + var suffix = options.suffix !== undefined ? options.suffix : '\\b'; + + for (var i = 0; i < patterns.length; i++) { + if (patterns[i] instanceof RegExp) { + patterns[i] = patterns[i].source; + } + else { + patterns[i] = patterns[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + } + + return new RegExp(prefix + '(' + patterns.join('|') + ')' + suffix, 'i'); + } + + var notCharacterOrDash = '(?=[^A-Za-z\\d\\-_]|$)'; + var varNames = /[\w\-:]/ + var keywords = buildRegexp([ + /begin|break|catch|continue|data|default|do|dynamicparam/, + /else|elseif|end|exit|filter|finally|for|foreach|from|function|if|in/, + /param|process|return|switch|throw|trap|try|until|where|while/ + ], { suffix: notCharacterOrDash }); + + var punctuation = /[\[\]{},;`\\\.]|@[({]/; + var wordOperators = buildRegexp([ + 'f', + /b?not/, + /[ic]?split/, 'join', + /is(not)?/, 'as', + /[ic]?(eq|ne|[gl][te])/, + /[ic]?(not)?(like|match|contains)/, + /[ic]?replace/, + /b?(and|or|xor)/ + ], { prefix: '-' }); + var symbolOperators = /[+\-*\/%]=|\+\+|--|\.\.|[+\-*&^%:=!|\/]|<(?!#)|(?!#)>/; + var operators = buildRegexp([wordOperators, symbolOperators], { suffix: '' }); + + var numbers = /^((0x[\da-f]+)|((\d+\.\d+|\d\.|\.\d+|\d+)(e[\+\-]?\d+)?))[ld]?([kmgtp]b)?/i; + + var identifiers = /^[A-Za-z\_][A-Za-z\-\_\d]*\b/; + + var symbolBuiltins = /[A-Z]:|%|\?/i; + var namedBuiltins = buildRegexp([ + /Add-(Computer|Content|History|Member|PSSnapin|Type)/, + /Checkpoint-Computer/, + /Clear-(Content|EventLog|History|Host|Item(Property)?|Variable)/, + /Compare-Object/, + /Complete-Transaction/, + /Connect-PSSession/, + /ConvertFrom-(Csv|Json|SecureString|StringData)/, + /Convert-Path/, + /ConvertTo-(Csv|Html|Json|SecureString|Xml)/, + /Copy-Item(Property)?/, + /Debug-Process/, + /Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/, + /Disconnect-PSSession/, + /Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/, + /(Enter|Exit)-PSSession/, + /Export-(Alias|Clixml|Console|Counter|Csv|FormatData|ModuleMember|PSSession)/, + /ForEach-Object/, + /Format-(Custom|List|Table|Wide)/, + new RegExp('Get-(Acl|Alias|AuthenticodeSignature|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Counter|Credential' + + '|Culture|Date|Event|EventLog|EventSubscriber|ExecutionPolicy|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job' + + '|Location|Member|Module|PfxCertificate|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration' + + '|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|Verb|WinEvent|WmiObject)'), + /Group-Object/, + /Import-(Alias|Clixml|Counter|Csv|LocalizedData|Module|PSSession)/, + /ImportSystemModules/, + /Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)/, + /Join-Path/, + /Limit-EventLog/, + /Measure-(Command|Object)/, + /Move-Item(Property)?/, + new RegExp('New-(Alias|Event|EventLog|Item(Property)?|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile' + + '|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy|WinEvent)'), + /Out-(Default|File|GridView|Host|Null|Printer|String)/, + /Pause/, + /(Pop|Push)-Location/, + /Read-Host/, + /Receive-(Job|PSSession)/, + /Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)/, + /Remove-(Computer|Event|EventLog|Item(Property)?|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)/, + /Rename-(Computer|Item(Property)?)/, + /Reset-ComputerMachinePassword/, + /Resolve-Path/, + /Restart-(Computer|Service)/, + /Restore-Computer/, + /Resume-(Job|Service)/, + /Save-Help/, + /Select-(Object|String|Xml)/, + /Send-MailMessage/, + new RegExp('Set-(Acl|Alias|AuthenticodeSignature|Content|Date|ExecutionPolicy|Item(Property)?|Location|PSBreakpoint|PSDebug' + + '|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)'), + /Show-(Command|ControlPanelItem|EventLog)/, + /Sort-Object/, + /Split-Path/, + /Start-(Job|Process|Service|Sleep|Transaction|Transcript)/, + /Stop-(Computer|Job|Process|Service|Transcript)/, + /Suspend-(Job|Service)/, + /TabExpansion2/, + /Tee-Object/, + /Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)/, + /Trace-Command/, + /Unblock-File/, + /Undo-Transaction/, + /Unregister-(Event|PSSessionConfiguration)/, + /Update-(FormatData|Help|List|TypeData)/, + /Use-Transaction/, + /Wait-(Event|Job|Process)/, + /Where-Object/, + /Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning)/, + /cd|help|mkdir|more|oss|prompt/, + /ac|asnp|cat|cd|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|dnsn|ebp/, + /echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps/, + /group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md/, + /measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri/, + /rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls/, + /sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|where|wjb|write/ + ], { prefix: '', suffix: '' }); + var variableBuiltins = buildRegexp([ + /[$?^_]|Args|ConfirmPreference|ConsoleFileName|DebugPreference|Error|ErrorActionPreference|ErrorView|ExecutionContext/, + /FormatEnumerationLimit|Home|Host|Input|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount/, + /MaximumHistoryCount|MaximumVariableCount|MyInvocation|NestedPromptLevel|OutputEncoding|Pid|Profile|ProgressPreference/, + /PSBoundParameters|PSCommandPath|PSCulture|PSDefaultParameterValues|PSEmailServer|PSHome|PSScriptRoot|PSSessionApplicationName/, + /PSSessionConfigurationName|PSSessionOption|PSUICulture|PSVersionTable|Pwd|ShellId|StackTrace|VerbosePreference/, + /WarningPreference|WhatIfPreference/, + + /Event|EventArgs|EventSubscriber|Sender/, + /Matches|Ofs|ForEach|LastExitCode|PSCmdlet|PSItem|PSSenderInfo|This/, + /true|false|null/ + ], { prefix: '\\$', suffix: '' }); + + var builtins = buildRegexp([symbolBuiltins, namedBuiltins, variableBuiltins], { suffix: notCharacterOrDash }); + + var grammar = { + keyword: keywords, + number: numbers, + operator: operators, + builtin: builtins, + punctuation: punctuation, + identifier: identifiers + }; + + // tokenizers + function tokenBase(stream, state) { + // Handle Comments + //var ch = stream.peek(); + + var parent = state.returnStack[state.returnStack.length - 1]; + if (parent && parent.shouldReturnFrom(state)) { + state.tokenize = parent.tokenize; + state.returnStack.pop(); + return state.tokenize(stream, state); + } + + if (stream.eatSpace()) { + return null; + } + + if (stream.eat('(')) { + state.bracketNesting += 1; + return 'punctuation'; + } + + if (stream.eat(')')) { + state.bracketNesting -= 1; + return 'punctuation'; + } + + for (var key in grammar) { + if (stream.match(grammar[key])) { + return key; + } + } + + var ch = stream.next(); + + // single-quote string + if (ch === "'") { + return tokenSingleQuoteString(stream, state); + } + + if (ch === '$') { + return tokenVariable(stream, state); + } + + // double-quote string + if (ch === '"') { + return tokenDoubleQuoteString(stream, state); + } + + if (ch === '<' && stream.eat('#')) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + + if (ch === '#') { + stream.skipToEnd(); + return 'comment'; + } + + if (ch === '@') { + var quoteMatch = stream.eat(/["']/); + if (quoteMatch && stream.eol()) { + state.tokenize = tokenMultiString; + state.startQuote = quoteMatch[0]; + return tokenMultiString(stream, state); + } else if (stream.eol()) { + return 'error'; + } else if (stream.peek().match(/[({]/)) { + return 'punctuation'; + } else if (stream.peek().match(varNames)) { + // splatted variable + return tokenVariable(stream, state); + } + } + return 'error'; + } + + function tokenSingleQuoteString(stream, state) { + var ch; + while ((ch = stream.peek()) != null) { + stream.next(); + + if (ch === "'" && !stream.eat("'")) { + state.tokenize = tokenBase; + return 'string'; + } + } + + return 'error'; + } + + function tokenDoubleQuoteString(stream, state) { + var ch; + while ((ch = stream.peek()) != null) { + if (ch === '$') { + state.tokenize = tokenStringInterpolation; + return 'string'; + } + + stream.next(); + if (ch === '`') { + stream.next(); + continue; + } + + if (ch === '"' && !stream.eat('"')) { + state.tokenize = tokenBase; + return 'string'; + } + } + + return 'error'; + } + + function tokenStringInterpolation(stream, state) { + return tokenInterpolation(stream, state, tokenDoubleQuoteString); + } + + function tokenMultiStringReturn(stream, state) { + state.tokenize = tokenMultiString; + state.startQuote = '"' + return tokenMultiString(stream, state); + } + + function tokenHereStringInterpolation(stream, state) { + return tokenInterpolation(stream, state, tokenMultiStringReturn); + } + + function tokenInterpolation(stream, state, parentTokenize) { + if (stream.match('$(')) { + var savedBracketNesting = state.bracketNesting; + state.returnStack.push({ + /*jshint loopfunc:true */ + shouldReturnFrom: function(state) { + return state.bracketNesting === savedBracketNesting; + }, + tokenize: parentTokenize + }); + state.tokenize = tokenBase; + state.bracketNesting += 1; + return 'punctuation'; + } else { + stream.next(); + state.returnStack.push({ + shouldReturnFrom: function() { return true; }, + tokenize: parentTokenize + }); + state.tokenize = tokenVariable; + return state.tokenize(stream, state); + } + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == '>') { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch === '#'); + } + return 'comment'; + } + + function tokenVariable(stream, state) { + var ch = stream.peek(); + if (stream.eat('{')) { + state.tokenize = tokenVariableWithBraces; + return tokenVariableWithBraces(stream, state); + } else if (ch != undefined && ch.match(varNames)) { + stream.eatWhile(varNames); + state.tokenize = tokenBase; + return 'variable-2'; + } else { + state.tokenize = tokenBase; + return 'error'; + } + } + + function tokenVariableWithBraces(stream, state) { + var ch; + while ((ch = stream.next()) != null) { + if (ch === '}') { + state.tokenize = tokenBase; + break; + } + } + return 'variable-2'; + } + + function tokenMultiString(stream, state) { + var quote = state.startQuote; + if (stream.sol() && stream.match(new RegExp(quote + '@'))) { + state.tokenize = tokenBase; + } + else if (quote === '"') { + while (!stream.eol()) { + var ch = stream.peek(); + if (ch === '$') { + state.tokenize = tokenHereStringInterpolation; + return 'string'; + } + + stream.next(); + if (ch === '`') { + stream.next(); + } + } + } + else { + stream.skipToEnd(); + } + + return 'string'; + } + + var external = { + startState: function() { + return { + returnStack: [], + bracketNesting: 0, + tokenize: tokenBase + }; + }, + + token: function(stream, state) { + return state.tokenize(stream, state); + }, + + blockCommentStart: '<#', + blockCommentEnd: '#>', + lineComment: '#', + fold: 'brace' + }; + return external; +}); + +CodeMirror.defineMIME('application/x-powershell', 'powershell'); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/properties/properties.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/properties/properties.js new file mode 100644 index 0000000000..02fd7fe5eb --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/properties/properties.js @@ -0,0 +1,78 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("properties", function() { + return { + token: function(stream, state) { + var sol = stream.sol() || state.afterSection; + var eol = stream.eol(); + + state.afterSection = false; + + if (sol) { + if (state.nextMultiline) { + state.inMultiline = true; + state.nextMultiline = false; + } else { + state.position = "def"; + } + } + + if (eol && ! state.nextMultiline) { + state.inMultiline = false; + state.position = "def"; + } + + if (sol) { + while(stream.eatSpace()) {} + } + + var ch = stream.next(); + + if (sol && (ch === "#" || ch === "!" || ch === ";")) { + state.position = "comment"; + stream.skipToEnd(); + return "comment"; + } else if (sol && ch === "[") { + state.afterSection = true; + stream.skipTo("]"); stream.eat("]"); + return "header"; + } else if (ch === "=" || ch === ":") { + state.position = "quote"; + return null; + } else if (ch === "\\" && state.position === "quote") { + if (stream.eol()) { // end of line? + // Multiline value + state.nextMultiline = true; + } + } + + return state.position; + }, + + startState: function() { + return { + position : "def", // Current position, "def", "quote" or "comment" + nextMultiline : false, // Is the next line multiline value + inMultiline : false, // Is the current line a multiline value + afterSection : false // Did we just open a section + }; + } + + }; +}); + +CodeMirror.defineMIME("text/x-properties", "properties"); +CodeMirror.defineMIME("text/x-ini", "properties"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/protobuf/protobuf.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/protobuf/protobuf.js new file mode 100644 index 0000000000..40b0842d47 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/protobuf/protobuf.js @@ -0,0 +1,72 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); + }; + + var keywordArray = [ + "package", "message", "import", "syntax", + "required", "optional", "repeated", "reserved", "default", "extensions", "packed", + "bool", "bytes", "double", "enum", "float", "string", + "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64", + "option", "service", "rpc", "returns" + ]; + var keywords = wordRegexp(keywordArray); + + CodeMirror.registerHelper("hintWords", "protobuf", keywordArray); + + var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*"); + + function tokenBase(stream) { + // whitespaces + if (stream.eatSpace()) return null; + + // Handle one line Comments + if (stream.match("//")) { + stream.skipToEnd(); + return "comment"; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.+-]/, false)) { + if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) + return "number"; + if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) + return "number"; + if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) + return "number"; + } + + // Handle Strings + if (stream.match(/^"([^"]|(""))*"/)) { return "string"; } + if (stream.match(/^'([^']|(''))*'/)) { return "string"; } + + // Handle words + if (stream.match(keywords)) { return "keyword"; } + if (stream.match(identifiers)) { return "variable"; } ; + + // Handle non-detected items + stream.next(); + return null; + }; + + CodeMirror.defineMode("protobuf", function() { + return { + token: tokenBase, + fold: "brace" + }; + }); + + CodeMirror.defineMIME("text/x-protobuf", "protobuf"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pug/pug.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pug/pug.js new file mode 100644 index 0000000000..73e9ae2fc8 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/pug/pug.js @@ -0,0 +1,591 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../javascript/javascript"), require("../css/css"), require("../htmlmixed/htmlmixed")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../javascript/javascript", "../css/css", "../htmlmixed/htmlmixed"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("pug", function (config) { + // token types + var KEYWORD = 'keyword'; + var DOCTYPE = 'meta'; + var ID = 'builtin'; + var CLASS = 'qualifier'; + + var ATTRS_NEST = { + '{': '}', + '(': ')', + '[': ']' + }; + + var jsMode = CodeMirror.getMode(config, 'javascript'); + + function State() { + this.javaScriptLine = false; + this.javaScriptLineExcludesColon = false; + + this.javaScriptArguments = false; + this.javaScriptArgumentsDepth = 0; + + this.isInterpolating = false; + this.interpolationNesting = 0; + + this.jsState = CodeMirror.startState(jsMode); + + this.restOfLine = ''; + + this.isIncludeFiltered = false; + this.isEach = false; + + this.lastTag = ''; + this.scriptType = ''; + + // Attributes Mode + this.isAttrs = false; + this.attrsNest = []; + this.inAttributeName = true; + this.attributeIsType = false; + this.attrValue = ''; + + // Indented Mode + this.indentOf = Infinity; + this.indentToken = ''; + + this.innerMode = null; + this.innerState = null; + + this.innerModeForLine = false; + } + /** + * Safely copy a state + * + * @return {State} + */ + State.prototype.copy = function () { + var res = new State(); + res.javaScriptLine = this.javaScriptLine; + res.javaScriptLineExcludesColon = this.javaScriptLineExcludesColon; + res.javaScriptArguments = this.javaScriptArguments; + res.javaScriptArgumentsDepth = this.javaScriptArgumentsDepth; + res.isInterpolating = this.isInterpolating; + res.interpolationNesting = this.interpolationNesting; + + res.jsState = CodeMirror.copyState(jsMode, this.jsState); + + res.innerMode = this.innerMode; + if (this.innerMode && this.innerState) { + res.innerState = CodeMirror.copyState(this.innerMode, this.innerState); + } + + res.restOfLine = this.restOfLine; + + res.isIncludeFiltered = this.isIncludeFiltered; + res.isEach = this.isEach; + res.lastTag = this.lastTag; + res.scriptType = this.scriptType; + res.isAttrs = this.isAttrs; + res.attrsNest = this.attrsNest.slice(); + res.inAttributeName = this.inAttributeName; + res.attributeIsType = this.attributeIsType; + res.attrValue = this.attrValue; + res.indentOf = this.indentOf; + res.indentToken = this.indentToken; + + res.innerModeForLine = this.innerModeForLine; + + return res; + }; + + function javaScript(stream, state) { + if (stream.sol()) { + // if javaScriptLine was set at end of line, ignore it + state.javaScriptLine = false; + state.javaScriptLineExcludesColon = false; + } + if (state.javaScriptLine) { + if (state.javaScriptLineExcludesColon && stream.peek() === ':') { + state.javaScriptLine = false; + state.javaScriptLineExcludesColon = false; + return; + } + var tok = jsMode.token(stream, state.jsState); + if (stream.eol()) state.javaScriptLine = false; + return tok || true; + } + } + function javaScriptArguments(stream, state) { + if (state.javaScriptArguments) { + if (state.javaScriptArgumentsDepth === 0 && stream.peek() !== '(') { + state.javaScriptArguments = false; + return; + } + if (stream.peek() === '(') { + state.javaScriptArgumentsDepth++; + } else if (stream.peek() === ')') { + state.javaScriptArgumentsDepth--; + } + if (state.javaScriptArgumentsDepth === 0) { + state.javaScriptArguments = false; + return; + } + + var tok = jsMode.token(stream, state.jsState); + return tok || true; + } + } + + function yieldStatement(stream) { + if (stream.match(/^yield\b/)) { + return 'keyword'; + } + } + + function doctype(stream) { + if (stream.match(/^(?:doctype) *([^\n]+)?/)) { + return DOCTYPE; + } + } + + function interpolation(stream, state) { + if (stream.match('#{')) { + state.isInterpolating = true; + state.interpolationNesting = 0; + return 'punctuation'; + } + } + + function interpolationContinued(stream, state) { + if (state.isInterpolating) { + if (stream.peek() === '}') { + state.interpolationNesting--; + if (state.interpolationNesting < 0) { + stream.next(); + state.isInterpolating = false; + return 'punctuation'; + } + } else if (stream.peek() === '{') { + state.interpolationNesting++; + } + return jsMode.token(stream, state.jsState) || true; + } + } + + function caseStatement(stream, state) { + if (stream.match(/^case\b/)) { + state.javaScriptLine = true; + return KEYWORD; + } + } + + function when(stream, state) { + if (stream.match(/^when\b/)) { + state.javaScriptLine = true; + state.javaScriptLineExcludesColon = true; + return KEYWORD; + } + } + + function defaultStatement(stream) { + if (stream.match(/^default\b/)) { + return KEYWORD; + } + } + + function extendsStatement(stream, state) { + if (stream.match(/^extends?\b/)) { + state.restOfLine = 'string'; + return KEYWORD; + } + } + + function append(stream, state) { + if (stream.match(/^append\b/)) { + state.restOfLine = 'variable'; + return KEYWORD; + } + } + function prepend(stream, state) { + if (stream.match(/^prepend\b/)) { + state.restOfLine = 'variable'; + return KEYWORD; + } + } + function block(stream, state) { + if (stream.match(/^block\b *(?:(prepend|append)\b)?/)) { + state.restOfLine = 'variable'; + return KEYWORD; + } + } + + function include(stream, state) { + if (stream.match(/^include\b/)) { + state.restOfLine = 'string'; + return KEYWORD; + } + } + + function includeFiltered(stream, state) { + if (stream.match(/^include:([a-zA-Z0-9\-]+)/, false) && stream.match('include')) { + state.isIncludeFiltered = true; + return KEYWORD; + } + } + + function includeFilteredContinued(stream, state) { + if (state.isIncludeFiltered) { + var tok = filter(stream, state); + state.isIncludeFiltered = false; + state.restOfLine = 'string'; + return tok; + } + } + + function mixin(stream, state) { + if (stream.match(/^mixin\b/)) { + state.javaScriptLine = true; + return KEYWORD; + } + } + + function call(stream, state) { + if (stream.match(/^\+([-\w]+)/)) { + if (!stream.match(/^\( *[-\w]+ *=/, false)) { + state.javaScriptArguments = true; + state.javaScriptArgumentsDepth = 0; + } + return 'variable'; + } + if (stream.match('+#{', false)) { + stream.next(); + state.mixinCallAfter = true; + return interpolation(stream, state); + } + } + function callArguments(stream, state) { + if (state.mixinCallAfter) { + state.mixinCallAfter = false; + if (!stream.match(/^\( *[-\w]+ *=/, false)) { + state.javaScriptArguments = true; + state.javaScriptArgumentsDepth = 0; + } + return true; + } + } + + function conditional(stream, state) { + if (stream.match(/^(if|unless|else if|else)\b/)) { + state.javaScriptLine = true; + return KEYWORD; + } + } + + function each(stream, state) { + if (stream.match(/^(- *)?(each|for)\b/)) { + state.isEach = true; + return KEYWORD; + } + } + function eachContinued(stream, state) { + if (state.isEach) { + if (stream.match(/^ in\b/)) { + state.javaScriptLine = true; + state.isEach = false; + return KEYWORD; + } else if (stream.sol() || stream.eol()) { + state.isEach = false; + } else if (stream.next()) { + while (!stream.match(/^ in\b/, false) && stream.next()); + return 'variable'; + } + } + } + + function whileStatement(stream, state) { + if (stream.match(/^while\b/)) { + state.javaScriptLine = true; + return KEYWORD; + } + } + + function tag(stream, state) { + var captures; + if (captures = stream.match(/^(\w(?:[-:\w]*\w)?)\/?/)) { + state.lastTag = captures[1].toLowerCase(); + if (state.lastTag === 'script') { + state.scriptType = 'application/javascript'; + } + return 'tag'; + } + } + + function filter(stream, state) { + if (stream.match(/^:([\w\-]+)/)) { + var innerMode; + if (config && config.innerModes) { + innerMode = config.innerModes(stream.current().substring(1)); + } + if (!innerMode) { + innerMode = stream.current().substring(1); + } + if (typeof innerMode === 'string') { + innerMode = CodeMirror.getMode(config, innerMode); + } + setInnerMode(stream, state, innerMode); + return 'atom'; + } + } + + function code(stream, state) { + if (stream.match(/^(!?=|-)/)) { + state.javaScriptLine = true; + return 'punctuation'; + } + } + + function id(stream) { + if (stream.match(/^#([\w-]+)/)) { + return ID; + } + } + + function className(stream) { + if (stream.match(/^\.([\w-]+)/)) { + return CLASS; + } + } + + function attrs(stream, state) { + if (stream.peek() == '(') { + stream.next(); + state.isAttrs = true; + state.attrsNest = []; + state.inAttributeName = true; + state.attrValue = ''; + state.attributeIsType = false; + return 'punctuation'; + } + } + + function attrsContinued(stream, state) { + if (state.isAttrs) { + if (ATTRS_NEST[stream.peek()]) { + state.attrsNest.push(ATTRS_NEST[stream.peek()]); + } + if (state.attrsNest[state.attrsNest.length - 1] === stream.peek()) { + state.attrsNest.pop(); + } else if (stream.eat(')')) { + state.isAttrs = false; + return 'punctuation'; + } + if (state.inAttributeName && stream.match(/^[^=,\)!]+/)) { + if (stream.peek() === '=' || stream.peek() === '!') { + state.inAttributeName = false; + state.jsState = CodeMirror.startState(jsMode); + if (state.lastTag === 'script' && stream.current().trim().toLowerCase() === 'type') { + state.attributeIsType = true; + } else { + state.attributeIsType = false; + } + } + return 'attribute'; + } + + var tok = jsMode.token(stream, state.jsState); + if (state.attributeIsType && tok === 'string') { + state.scriptType = stream.current().toString(); + } + if (state.attrsNest.length === 0 && (tok === 'string' || tok === 'variable' || tok === 'keyword')) { + try { + Function('', 'var x ' + state.attrValue.replace(/,\s*$/, '').replace(/^!/, '')); + state.inAttributeName = true; + state.attrValue = ''; + stream.backUp(stream.current().length); + return attrsContinued(stream, state); + } catch (ex) { + //not the end of an attribute + } + } + state.attrValue += stream.current(); + return tok || true; + } + } + + function attributesBlock(stream, state) { + if (stream.match(/^&attributes\b/)) { + state.javaScriptArguments = true; + state.javaScriptArgumentsDepth = 0; + return 'keyword'; + } + } + + function indent(stream) { + if (stream.sol() && stream.eatSpace()) { + return 'indent'; + } + } + + function comment(stream, state) { + if (stream.match(/^ *\/\/(-)?([^\n]*)/)) { + state.indentOf = stream.indentation(); + state.indentToken = 'comment'; + return 'comment'; + } + } + + function colon(stream) { + if (stream.match(/^: */)) { + return 'colon'; + } + } + + function text(stream, state) { + if (stream.match(/^(?:\| ?| )([^\n]+)/)) { + return 'string'; + } + if (stream.match(/^(<[^\n]*)/, false)) { + // html string + setInnerMode(stream, state, 'htmlmixed'); + state.innerModeForLine = true; + return innerMode(stream, state, true); + } + } + + function dot(stream, state) { + if (stream.eat('.')) { + var innerMode = null; + if (state.lastTag === 'script' && state.scriptType.toLowerCase().indexOf('javascript') != -1) { + innerMode = state.scriptType.toLowerCase().replace(/"|'/g, ''); + } else if (state.lastTag === 'style') { + innerMode = 'css'; + } + setInnerMode(stream, state, innerMode); + return 'dot'; + } + } + + function fail(stream) { + stream.next(); + return null; + } + + + function setInnerMode(stream, state, mode) { + mode = CodeMirror.mimeModes[mode] || mode; + mode = config.innerModes ? config.innerModes(mode) || mode : mode; + mode = CodeMirror.mimeModes[mode] || mode; + mode = CodeMirror.getMode(config, mode); + state.indentOf = stream.indentation(); + + if (mode && mode.name !== 'null') { + state.innerMode = mode; + } else { + state.indentToken = 'string'; + } + } + function innerMode(stream, state, force) { + if (stream.indentation() > state.indentOf || (state.innerModeForLine && !stream.sol()) || force) { + if (state.innerMode) { + if (!state.innerState) { + state.innerState = state.innerMode.startState ? CodeMirror.startState(state.innerMode, stream.indentation()) : {}; + } + return stream.hideFirstChars(state.indentOf + 2, function () { + return state.innerMode.token(stream, state.innerState) || true; + }); + } else { + stream.skipToEnd(); + return state.indentToken; + } + } else if (stream.sol()) { + state.indentOf = Infinity; + state.indentToken = null; + state.innerMode = null; + state.innerState = null; + } + } + function restOfLine(stream, state) { + if (stream.sol()) { + // if restOfLine was set at end of line, ignore it + state.restOfLine = ''; + } + if (state.restOfLine) { + stream.skipToEnd(); + var tok = state.restOfLine; + state.restOfLine = ''; + return tok; + } + } + + + function startState() { + return new State(); + } + function copyState(state) { + return state.copy(); + } + /** + * Get the next token in the stream + * + * @param {Stream} stream + * @param {State} state + */ + function nextToken(stream, state) { + var tok = innerMode(stream, state) + || restOfLine(stream, state) + || interpolationContinued(stream, state) + || includeFilteredContinued(stream, state) + || eachContinued(stream, state) + || attrsContinued(stream, state) + || javaScript(stream, state) + || javaScriptArguments(stream, state) + || callArguments(stream, state) + + || yieldStatement(stream) + || doctype(stream) + || interpolation(stream, state) + || caseStatement(stream, state) + || when(stream, state) + || defaultStatement(stream) + || extendsStatement(stream, state) + || append(stream, state) + || prepend(stream, state) + || block(stream, state) + || include(stream, state) + || includeFiltered(stream, state) + || mixin(stream, state) + || call(stream, state) + || conditional(stream, state) + || each(stream, state) + || whileStatement(stream, state) + || tag(stream, state) + || filter(stream, state) + || code(stream, state) + || id(stream) + || className(stream) + || attrs(stream, state) + || attributesBlock(stream, state) + || indent(stream) + || text(stream, state) + || comment(stream, state) + || colon(stream) + || dot(stream, state) + || fail(stream); + + return tok === true ? null : tok; + } + return { + startState: startState, + copyState: copyState, + token: nextToken + }; +}, 'javascript', 'css', 'htmlmixed'); + +CodeMirror.defineMIME('text/x-pug', 'pug'); +CodeMirror.defineMIME('text/x-jade', 'pug'); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/puppet/puppet.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/puppet/puppet.js new file mode 100644 index 0000000000..a92ca1107b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/puppet/puppet.js @@ -0,0 +1,220 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("puppet", function () { + // Stores the words from the define method + var words = {}; + // Taken, mostly, from the Puppet official variable standards regex + var variable_regex = /({)?([a-z][a-z0-9_]*)?((::[a-z][a-z0-9_]*)*::)?[a-zA-Z0-9_]+(})?/; + + // Takes a string of words separated by spaces and adds them as + // keys with the value of the first argument 'style' + function define(style, string) { + var split = string.split(' '); + for (var i = 0; i < split.length; i++) { + words[split[i]] = style; + } + } + + // Takes commonly known puppet types/words and classifies them to a style + define('keyword', 'class define site node include import inherits'); + define('keyword', 'case if else in and elsif default or'); + define('atom', 'false true running present absent file directory undef'); + define('builtin', 'action augeas burst chain computer cron destination dport exec ' + + 'file filebucket group host icmp iniface interface jump k5login limit log_level ' + + 'log_prefix macauthorization mailalias maillist mcx mount nagios_command ' + + 'nagios_contact nagios_contactgroup nagios_host nagios_hostdependency ' + + 'nagios_hostescalation nagios_hostextinfo nagios_hostgroup nagios_service ' + + 'nagios_servicedependency nagios_serviceescalation nagios_serviceextinfo ' + + 'nagios_servicegroup nagios_timeperiod name notify outiface package proto reject ' + + 'resources router schedule scheduled_task selboolean selmodule service source ' + + 'sport ssh_authorized_key sshkey stage state table tidy todest toports tosource ' + + 'user vlan yumrepo zfs zone zpool'); + + // After finding a start of a string ('|") this function attempts to find the end; + // If a variable is encountered along the way, we display it differently when it + // is encapsulated in a double-quoted string. + function tokenString(stream, state) { + var current, prev, found_var = false; + while (!stream.eol() && (current = stream.next()) != state.pending) { + if (current === '$' && prev != '\\' && state.pending == '"') { + found_var = true; + break; + } + prev = current; + } + if (found_var) { + stream.backUp(1); + } + if (current == state.pending) { + state.continueString = false; + } else { + state.continueString = true; + } + return "string"; + } + + // Main function + function tokenize(stream, state) { + // Matches one whole word + var word = stream.match(/[\w]+/, false); + // Matches attributes (i.e. ensure => present ; 'ensure' would be matched) + var attribute = stream.match(/(\s+)?\w+\s+=>.*/, false); + // Matches non-builtin resource declarations + // (i.e. "apache::vhost {" or "mycustomclasss {" would be matched) + var resource = stream.match(/(\s+)?[\w:_]+(\s+)?{/, false); + // Matches virtual and exported resources (i.e. @@user { ; and the like) + var special_resource = stream.match(/(\s+)?[@]{1,2}[\w:_]+(\s+)?{/, false); + + // Finally advance the stream + var ch = stream.next(); + + // Have we found a variable? + if (ch === '$') { + if (stream.match(variable_regex)) { + // If so, and its in a string, assign it a different color + return state.continueString ? 'variable-2' : 'variable'; + } + // Otherwise return an invalid variable + return "error"; + } + // Should we still be looking for the end of a string? + if (state.continueString) { + // If so, go through the loop again + stream.backUp(1); + return tokenString(stream, state); + } + // Are we in a definition (class, node, define)? + if (state.inDefinition) { + // If so, return def (i.e. for 'class myclass {' ; 'myclass' would be matched) + if (stream.match(/(\s+)?[\w:_]+(\s+)?/)) { + return 'def'; + } + // Match the rest it the next time around + stream.match(/\s+{/); + state.inDefinition = false; + } + // Are we in an 'include' statement? + if (state.inInclude) { + // Match and return the included class + stream.match(/(\s+)?\S+(\s+)?/); + state.inInclude = false; + return 'def'; + } + // Do we just have a function on our hands? + // In 'ensure_resource("myclass")', 'ensure_resource' is matched + if (stream.match(/(\s+)?\w+\(/)) { + stream.backUp(1); + return 'def'; + } + // Have we matched the prior attribute regex? + if (attribute) { + stream.match(/(\s+)?\w+/); + return 'tag'; + } + // Do we have Puppet specific words? + if (word && words.hasOwnProperty(word)) { + // Negates the initial next() + stream.backUp(1); + // rs move the stream + stream.match(/[\w]+/); + // We want to process these words differently + // do to the importance they have in Puppet + if (stream.match(/\s+\S+\s+{/, false)) { + state.inDefinition = true; + } + if (word == 'include') { + state.inInclude = true; + } + // Returns their value as state in the prior define methods + return words[word]; + } + // Is there a match on a reference? + if (/(^|\s+)[A-Z][\w:_]+/.test(word)) { + // Negate the next() + stream.backUp(1); + // Match the full reference + stream.match(/(^|\s+)[A-Z][\w:_]+/); + return 'def'; + } + // Have we matched the prior resource regex? + if (resource) { + stream.match(/(\s+)?[\w:_]+/); + return 'def'; + } + // Have we matched the prior special_resource regex? + if (special_resource) { + stream.match(/(\s+)?[@]{1,2}/); + return 'special'; + } + // Match all the comments. All of them. + if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + // Have we found a string? + if (ch == "'" || ch == '"') { + // Store the type (single or double) + state.pending = ch; + // Perform the looping function to find the end + return tokenString(stream, state); + } + // Match all the brackets + if (ch == '{' || ch == '}') { + return 'bracket'; + } + // Match characters that we are going to assume + // are trying to be regex + if (ch == '/') { + stream.match(/^[^\/]*\//); + return 'variable-3'; + } + // Match all the numbers + if (ch.match(/[0-9]/)) { + stream.eatWhile(/[0-9]+/); + return 'number'; + } + // Match the '=' and '=>' operators + if (ch == '=') { + if (stream.peek() == '>') { + stream.next(); + } + return "operator"; + } + // Keep advancing through all the rest + stream.eatWhile(/[\w-]/); + // Return a blank line for everything else + return null; + } + // Start it all + return { + startState: function () { + var state = {}; + state.inDefinition = false; + state.inInclude = false; + state.continueString = false; + state.pending = false; + return state; + }, + token: function (stream, state) { + // Strip the spaces, but regex will account for them eitherway + if (stream.eatSpace()) return null; + // Go through the main process + return tokenize(stream, state); + } + }; +}); + +CodeMirror.defineMIME("text/x-puppet", "puppet"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/python/python.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/python/python.js new file mode 100644 index 0000000000..9e532ea1b3 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/python/python.js @@ -0,0 +1,402 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var wordOperators = wordRegexp(["and", "or", "not", "is"]); + var commonKeywords = ["as", "assert", "break", "class", "continue", + "def", "del", "elif", "else", "except", "finally", + "for", "from", "global", "if", "import", + "lambda", "pass", "raise", "return", + "try", "while", "with", "yield", "in"]; + var commonBuiltins = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", + "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", + "enumerate", "eval", "filter", "float", "format", "frozenset", + "getattr", "globals", "hasattr", "hash", "help", "hex", "id", + "input", "int", "isinstance", "issubclass", "iter", "len", + "list", "locals", "map", "max", "memoryview", "min", "next", + "object", "oct", "open", "ord", "pow", "property", "range", + "repr", "reversed", "round", "set", "setattr", "slice", + "sorted", "staticmethod", "str", "sum", "super", "tuple", + "type", "vars", "zip", "__import__", "NotImplemented", + "Ellipsis", "__debug__"]; + CodeMirror.registerHelper("hintWords", "python", commonKeywords.concat(commonBuiltins)); + + function top(state) { + return state.scopes[state.scopes.length - 1]; + } + + CodeMirror.defineMode("python", function(conf, parserConf) { + var ERRORCLASS = "error"; + + var delimiters = parserConf.delimiters || parserConf.singleDelimiters || /^[\(\)\[\]\{\}@,:`=;\.\\]/; + // (Backwards-compatibility with old, cumbersome config system) + var operators = [parserConf.singleOperators, parserConf.doubleOperators, parserConf.doubleDelimiters, parserConf.tripleDelimiters, + parserConf.operators || /^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/] + for (var i = 0; i < operators.length; i++) if (!operators[i]) operators.splice(i--, 1) + + var hangingIndent = parserConf.hangingIndent || conf.indentUnit; + + var myKeywords = commonKeywords, myBuiltins = commonBuiltins; + if (parserConf.extra_keywords != undefined) + myKeywords = myKeywords.concat(parserConf.extra_keywords); + + if (parserConf.extra_builtins != undefined) + myBuiltins = myBuiltins.concat(parserConf.extra_builtins); + + var py3 = !(parserConf.version && Number(parserConf.version) < 3) + if (py3) { + // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator + var identifiers = parserConf.identifiers|| /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/; + myKeywords = myKeywords.concat(["nonlocal", "False", "True", "None", "async", "await"]); + myBuiltins = myBuiltins.concat(["ascii", "bytes", "exec", "print"]); + var stringPrefixes = new RegExp("^(([rbuf]|(br)|(rb)|(fr)|(rf))?('{3}|\"{3}|['\"]))", "i"); + } else { + var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/; + myKeywords = myKeywords.concat(["exec", "print"]); + myBuiltins = myBuiltins.concat(["apply", "basestring", "buffer", "cmp", "coerce", "execfile", + "file", "intern", "long", "raw_input", "reduce", "reload", + "unichr", "unicode", "xrange", "False", "True", "None"]); + var stringPrefixes = new RegExp("^(([rubf]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); + } + var keywords = wordRegexp(myKeywords); + var builtins = wordRegexp(myBuiltins); + + // tokenizers + function tokenBase(stream, state) { + var sol = stream.sol() && state.lastToken != "\\" + if (sol) state.indent = stream.indentation() + // Handle scope changes + if (sol && top(state).type == "py") { + var scopeOffset = top(state).offset; + if (stream.eatSpace()) { + var lineOffset = stream.indentation(); + if (lineOffset > scopeOffset) + pushPyScope(state); + else if (lineOffset < scopeOffset && dedent(stream, state) && stream.peek() != "#") + state.errorToken = true; + return null; + } else { + var style = tokenBaseInner(stream, state); + if (scopeOffset > 0 && dedent(stream, state)) + style += " " + ERRORCLASS; + return style; + } + } + return tokenBaseInner(stream, state); + } + + function tokenBaseInner(stream, state, inFormat) { + if (stream.eatSpace()) return null; + + // Handle Comments + if (!inFormat && stream.match(/^#.*/)) return "comment"; + + // Handle Number Literals + if (stream.match(/^[0-9\.]/, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } + if (stream.match(/^[\d_]+\.\d*/)) { floatLiteral = true; } + if (stream.match(/^\.\d+/)) { floatLiteral = true; } + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return "number"; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^0x[0-9a-f_]+/i)) intLiteral = true; + // Binary + if (stream.match(/^0b[01_]+/i)) intLiteral = true; + // Octal + if (stream.match(/^0o[0-7_]+/i)) intLiteral = true; + // Decimal + if (stream.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + if (stream.match(/^0(?![\dx])/i)) intLiteral = true; + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return "number"; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1; + if (!isFmtString) { + state.tokenize = tokenStringFactory(stream.current(), state.tokenize); + return state.tokenize(stream, state); + } else { + state.tokenize = formatStringFactory(stream.current(), state.tokenize); + return state.tokenize(stream, state); + } + } + + for (var i = 0; i < operators.length; i++) + if (stream.match(operators[i])) return "operator" + + if (stream.match(delimiters)) return "punctuation"; + + if (state.lastToken == "." && stream.match(identifiers)) + return "property"; + + if (stream.match(keywords) || stream.match(wordOperators)) + return "keyword"; + + if (stream.match(builtins)) + return "builtin"; + + if (stream.match(/^(self|cls)\b/)) + return "variable-2"; + + if (stream.match(identifiers)) { + if (state.lastToken == "def" || state.lastToken == "class") + return "def"; + return "variable"; + } + + // Handle non-detected items + stream.next(); + return inFormat ? null :ERRORCLASS; + } + + function formatStringFactory(delimiter, tokenOuter) { + while ("rubf".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) + delimiter = delimiter.substr(1); + + var singleline = delimiter.length == 1; + var OUTCLASS = "string"; + + function tokenNestedExpr(depth) { + return function(stream, state) { + var inner = tokenBaseInner(stream, state, true) + if (inner == "punctuation") { + if (stream.current() == "{") { + state.tokenize = tokenNestedExpr(depth + 1) + } else if (stream.current() == "}") { + if (depth > 1) state.tokenize = tokenNestedExpr(depth - 1) + else state.tokenize = tokenString + } + } + return inner + } + } + + function tokenString(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\{\}\\]/); + if (stream.eat("\\")) { + stream.next(); + if (singleline && stream.eol()) + return OUTCLASS; + } else if (stream.match(delimiter)) { + state.tokenize = tokenOuter; + return OUTCLASS; + } else if (stream.match('{{')) { + // ignore {{ in f-str + return OUTCLASS; + } else if (stream.match('{', false)) { + // switch to nested mode + state.tokenize = tokenNestedExpr(0) + if (stream.current()) return OUTCLASS; + else return state.tokenize(stream, state) + } else if (stream.match('}}')) { + return OUTCLASS; + } else if (stream.match('}')) { + // single } in f-string is an error + return ERRORCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) + return ERRORCLASS; + else + state.tokenize = tokenOuter; + } + return OUTCLASS; + } + tokenString.isString = true; + return tokenString; + } + + function tokenStringFactory(delimiter, tokenOuter) { + while ("rubf".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) + delimiter = delimiter.substr(1); + + var singleline = delimiter.length == 1; + var OUTCLASS = "string"; + + function tokenString(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\\]/); + if (stream.eat("\\")) { + stream.next(); + if (singleline && stream.eol()) + return OUTCLASS; + } else if (stream.match(delimiter)) { + state.tokenize = tokenOuter; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) + return ERRORCLASS; + else + state.tokenize = tokenOuter; + } + return OUTCLASS; + } + tokenString.isString = true; + return tokenString; + } + + function pushPyScope(state) { + while (top(state).type != "py") state.scopes.pop() + state.scopes.push({offset: top(state).offset + conf.indentUnit, + type: "py", + align: null}) + } + + function pushBracketScope(stream, state, type) { + var align = stream.match(/^[\s\[\{\(]*(?:#|$)/, false) ? null : stream.column() + 1 + state.scopes.push({offset: state.indent + hangingIndent, + type: type, + align: align}) + } + + function dedent(stream, state) { + var indented = stream.indentation(); + while (state.scopes.length > 1 && top(state).offset > indented) { + if (top(state).type != "py") return true; + state.scopes.pop(); + } + return top(state).offset != indented; + } + + function tokenLexer(stream, state) { + if (stream.sol()) { + state.beginningOfLine = true; + state.dedent = false; + } + + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle decorators + if (state.beginningOfLine && current == "@") + return stream.match(identifiers, false) ? "meta" : py3 ? "operator" : ERRORCLASS; + + if (/\S/.test(current)) state.beginningOfLine = false; + + if ((style == "variable" || style == "builtin") + && state.lastToken == "meta") + style = "meta"; + + // Handle scope changes. + if (current == "pass" || current == "return") + state.dedent = true; + + if (current == "lambda") state.lambda = true; + if (current == ":" && !state.lambda && top(state).type == "py" && stream.match(/^\s*(?:#|$)/, false)) + pushPyScope(state); + + if (current.length == 1 && !/string|comment/.test(style)) { + var delimiter_index = "[({".indexOf(current); + if (delimiter_index != -1) + pushBracketScope(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); + + delimiter_index = "])}".indexOf(current); + if (delimiter_index != -1) { + if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent + else return ERRORCLASS; + } + } + if (state.dedent && stream.eol() && top(state).type == "py" && state.scopes.length > 1) + state.scopes.pop(); + + return style; + } + + var external = { + startState: function(basecolumn) { + return { + tokenize: tokenBase, + scopes: [{offset: basecolumn || 0, type: "py", align: null}], + indent: basecolumn || 0, + lastToken: null, + lambda: false, + dedent: 0 + }; + }, + + token: function(stream, state) { + var addErr = state.errorToken; + if (addErr) state.errorToken = false; + var style = tokenLexer(stream, state); + + if (style && style != "comment") + state.lastToken = (style == "keyword" || style == "punctuation") ? stream.current() : style; + if (style == "punctuation") style = null; + + if (stream.eol() && state.lambda) + state.lambda = false; + return addErr ? style + " " + ERRORCLASS : style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase) + return state.tokenize.isString ? CodeMirror.Pass : 0; + + var scope = top(state) + var closing = scope.type == textAfter.charAt(0) || + scope.type == "py" && !state.dedent && /^(else:|elif |except |finally:)/.test(textAfter) + if (scope.align != null) + return scope.align - (closing ? 1 : 0) + else + return scope.offset - (closing ? hangingIndent : 0) + }, + + electricInput: /^\s*([\}\]\)]|else:|elif |except |finally:)$/, + closeBrackets: {triples: "'\""}, + lineComment: "#", + fold: "indent" + }; + return external; + }); + + CodeMirror.defineMIME("text/x-python", "python"); + + var words = function(str) { return str.split(" "); }; + + CodeMirror.defineMIME("text/x-cython", { + name: "python", + extra_keywords: words("by cdef cimport cpdef ctypedef enum except "+ + "extern gil include nogil property public "+ + "readonly struct union DEF IF ELIF ELSE") + }); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/q/q.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/q/q.js new file mode 100644 index 0000000000..c016a6aa65 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/q/q.js @@ -0,0 +1,139 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("q",function(config){ + var indentUnit=config.indentUnit, + curPunc, + keywords=buildRE(["abs","acos","aj","aj0","all","and","any","asc","asin","asof","atan","attr","avg","avgs","bin","by","ceiling","cols","cor","cos","count","cov","cross","csv","cut","delete","deltas","desc","dev","differ","distinct","div","do","each","ej","enlist","eval","except","exec","exit","exp","fby","fills","first","fkeys","flip","floor","from","get","getenv","group","gtime","hclose","hcount","hdel","hopen","hsym","iasc","idesc","if","ij","in","insert","inter","inv","key","keys","last","like","list","lj","load","log","lower","lsq","ltime","ltrim","mavg","max","maxs","mcount","md5","mdev","med","meta","min","mins","mmax","mmin","mmu","mod","msum","neg","next","not","null","or","over","parse","peach","pj","plist","prd","prds","prev","prior","rand","rank","ratios","raze","read0","read1","reciprocal","reverse","rload","rotate","rsave","rtrim","save","scan","select","set","setenv","show","signum","sin","sqrt","ss","ssr","string","sublist","sum","sums","sv","system","tables","tan","til","trim","txf","type","uj","ungroup","union","update","upper","upsert","value","var","view","views","vs","wavg","where","where","while","within","wj","wj1","wsum","xasc","xbar","xcol","xcols","xdesc","xexp","xgroup","xkey","xlog","xprev","xrank"]), + E=/[|/&^!+:\\\-*%$=~#;@><,?_\'\"\[\(\]\)\s{}]/; + function buildRE(w){return new RegExp("^("+w.join("|")+")$");} + function tokenBase(stream,state){ + var sol=stream.sol(),c=stream.next(); + curPunc=null; + if(sol) + if(c=="/") + return(state.tokenize=tokenLineComment)(stream,state); + else if(c=="\\"){ + if(stream.eol()||/\s/.test(stream.peek())) + return stream.skipToEnd(),/^\\\s*$/.test(stream.current())?(state.tokenize=tokenCommentToEOF)(stream):state.tokenize=tokenBase,"comment"; + else + return state.tokenize=tokenBase,"builtin"; + } + if(/\s/.test(c)) + return stream.peek()=="/"?(stream.skipToEnd(),"comment"):"whitespace"; + if(c=='"') + return(state.tokenize=tokenString)(stream,state); + if(c=='`') + return stream.eatWhile(/[A-Za-z\d_:\/.]/),"symbol"; + if(("."==c&&/\d/.test(stream.peek()))||/\d/.test(c)){ + var t=null; + stream.backUp(1); + if(stream.match(/^\d{4}\.\d{2}(m|\.\d{2}([DT](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/) + || stream.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/) + || stream.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/) + || stream.match(/^\d+[ptuv]{1}/)) + t="temporal"; + else if(stream.match(/^0[NwW]{1}/) + || stream.match(/^0x[\da-fA-F]*/) + || stream.match(/^[01]+[b]{1}/) + || stream.match(/^\d+[chijn]{1}/) + || stream.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/)) + t="number"; + return(t&&(!(c=stream.peek())||E.test(c)))?t:(stream.next(),"error"); + } + if(/[A-Za-z]|\./.test(c)) + return stream.eatWhile(/[A-Za-z._\d]/),keywords.test(stream.current())?"keyword":"variable"; + if(/[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(c)) + return null; + if(/[{}\(\[\]\)]/.test(c)) + return null; + return"error"; + } + function tokenLineComment(stream,state){ + return stream.skipToEnd(),/\/\s*$/.test(stream.current())?(state.tokenize=tokenBlockComment)(stream,state):(state.tokenize=tokenBase),"comment"; + } + function tokenBlockComment(stream,state){ + var f=stream.sol()&&stream.peek()=="\\"; + stream.skipToEnd(); + if(f&&/^\\\s*$/.test(stream.current())) + state.tokenize=tokenBase; + return"comment"; + } + function tokenCommentToEOF(stream){return stream.skipToEnd(),"comment";} + function tokenString(stream,state){ + var escaped=false,next,end=false; + while((next=stream.next())){ + if(next=="\""&&!escaped){end=true;break;} + escaped=!escaped&&next=="\\"; + } + if(end)state.tokenize=tokenBase; + return"string"; + } + function pushContext(state,type,col){state.context={prev:state.context,indent:state.indent,col:col,type:type};} + function popContext(state){state.indent=state.context.indent;state.context=state.context.prev;} + return{ + startState:function(){ + return{tokenize:tokenBase, + context:null, + indent:0, + col:0}; + }, + token:function(stream,state){ + if(stream.sol()){ + if(state.context&&state.context.align==null) + state.context.align=false; + state.indent=stream.indentation(); + } + //if (stream.eatSpace()) return null; + var style=state.tokenize(stream,state); + if(style!="comment"&&state.context&&state.context.align==null&&state.context.type!="pattern"){ + state.context.align=true; + } + if(curPunc=="(")pushContext(state,")",stream.column()); + else if(curPunc=="[")pushContext(state,"]",stream.column()); + else if(curPunc=="{")pushContext(state,"}",stream.column()); + else if(/[\]\}\)]/.test(curPunc)){ + while(state.context&&state.context.type=="pattern")popContext(state); + if(state.context&&curPunc==state.context.type)popContext(state); + } + else if(curPunc=="."&&state.context&&state.context.type=="pattern")popContext(state); + else if(/atom|string|variable/.test(style)&&state.context){ + if(/[\}\]]/.test(state.context.type)) + pushContext(state,"pattern",stream.column()); + else if(state.context.type=="pattern"&&!state.context.align){ + state.context.align=true; + state.context.col=stream.column(); + } + } + return style; + }, + indent:function(state,textAfter){ + var firstChar=textAfter&&textAfter.charAt(0); + var context=state.context; + if(/[\]\}]/.test(firstChar)) + while (context&&context.type=="pattern")context=context.prev; + var closing=context&&firstChar==context.type; + if(!context) + return 0; + else if(context.type=="pattern") + return context.col; + else if(context.align) + return context.col+(closing?0:1); + else + return context.indent+(closing?0:indentUnit); + } + }; +}); +CodeMirror.defineMIME("text/x-q","q"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/r/r.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/r/r.js new file mode 100644 index 0000000000..de34c201bd --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/r/r.js @@ -0,0 +1,190 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.registerHelper("wordChars", "r", /[\w.]/); + +CodeMirror.defineMode("r", function(config) { + function wordObj(words) { + var res = {}; + for (var i = 0; i < words.length; ++i) res[words[i]] = true; + return res; + } + var commonAtoms = ["NULL", "NA", "Inf", "NaN", "NA_integer_", "NA_real_", "NA_complex_", "NA_character_", "TRUE", "FALSE"]; + var commonBuiltins = ["list", "quote", "bquote", "eval", "return", "call", "parse", "deparse"]; + var commonKeywords = ["if", "else", "repeat", "while", "function", "for", "in", "next", "break"]; + var commonBlockKeywords = ["if", "else", "repeat", "while", "function", "for"]; + + CodeMirror.registerHelper("hintWords", "r", commonAtoms.concat(commonBuiltins, commonKeywords)); + + var atoms = wordObj(commonAtoms); + var builtins = wordObj(commonBuiltins); + var keywords = wordObj(commonKeywords); + var blockkeywords = wordObj(commonBlockKeywords); + var opChars = /[+\-*\/^<>=!&|~$:]/; + var curPunc; + + function tokenBase(stream, state) { + curPunc = null; + var ch = stream.next(); + if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } else if (ch == "0" && stream.eat("x")) { + stream.eatWhile(/[\da-f]/i); + return "number"; + } else if (ch == "." && stream.eat(/\d/)) { + stream.match(/\d*(?:e[+\-]?\d+)?/); + return "number"; + } else if (/\d/.test(ch)) { + stream.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/); + return "number"; + } else if (ch == "'" || ch == '"') { + state.tokenize = tokenString(ch); + return "string"; + } else if (ch == "`") { + stream.match(/[^`]+`/); + return "variable-3"; + } else if (ch == "." && stream.match(/.(?:[.]|\d+)/)) { + return "keyword"; + } else if (/[a-zA-Z\.]/.test(ch)) { + stream.eatWhile(/[\w\.]/); + var word = stream.current(); + if (atoms.propertyIsEnumerable(word)) return "atom"; + if (keywords.propertyIsEnumerable(word)) { + // Block keywords start new blocks, except 'else if', which only starts + // one new block for the 'if', no block for the 'else'. + if (blockkeywords.propertyIsEnumerable(word) && + !stream.match(/\s*if(\s+|$)/, false)) + curPunc = "block"; + return "keyword"; + } + if (builtins.propertyIsEnumerable(word)) return "builtin"; + return "variable"; + } else if (ch == "%") { + if (stream.skipTo("%")) stream.next(); + return "operator variable-2"; + } else if ( + (ch == "<" && stream.eat("-")) || + (ch == "<" && stream.match("<-")) || + (ch == "-" && stream.match(/>>?/)) + ) { + return "operator arrow"; + } else if (ch == "=" && state.ctx.argList) { + return "arg-is"; + } else if (opChars.test(ch)) { + if (ch == "$") return "operator dollar"; + stream.eatWhile(opChars); + return "operator"; + } else if (/[\(\){}\[\];]/.test(ch)) { + curPunc = ch; + if (ch == ";") return "semi"; + return null; + } else { + return null; + } + } + + function tokenString(quote) { + return function(stream, state) { + if (stream.eat("\\")) { + var ch = stream.next(); + if (ch == "x") stream.match(/^[a-f0-9]{2}/i); + else if ((ch == "u" || ch == "U") && stream.eat("{") && stream.skipTo("}")) stream.next(); + else if (ch == "u") stream.match(/^[a-f0-9]{4}/i); + else if (ch == "U") stream.match(/^[a-f0-9]{8}/i); + else if (/[0-7]/.test(ch)) stream.match(/^[0-7]{1,2}/); + return "string-2"; + } else { + var next; + while ((next = stream.next()) != null) { + if (next == quote) { state.tokenize = tokenBase; break; } + if (next == "\\") { stream.backUp(1); break; } + } + return "string"; + } + }; + } + + var ALIGN_YES = 1, ALIGN_NO = 2, BRACELESS = 4 + + function push(state, type, stream) { + state.ctx = {type: type, + indent: state.indent, + flags: 0, + column: stream.column(), + prev: state.ctx}; + } + function setFlag(state, flag) { + var ctx = state.ctx + state.ctx = {type: ctx.type, + indent: ctx.indent, + flags: ctx.flags | flag, + column: ctx.column, + prev: ctx.prev} + } + function pop(state) { + state.indent = state.ctx.indent; + state.ctx = state.ctx.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, + ctx: {type: "top", + indent: -config.indentUnit, + flags: ALIGN_NO}, + indent: 0, + afterIdent: false}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if ((state.ctx.flags & 3) == 0) state.ctx.flags |= ALIGN_NO + if (state.ctx.flags & BRACELESS) pop(state) + state.indent = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (style != "comment" && (state.ctx.flags & ALIGN_NO) == 0) setFlag(state, ALIGN_YES) + + if ((curPunc == ";" || curPunc == "{" || curPunc == "}") && state.ctx.type == "block") pop(state); + if (curPunc == "{") push(state, "}", stream); + else if (curPunc == "(") { + push(state, ")", stream); + if (state.afterIdent) state.ctx.argList = true; + } + else if (curPunc == "[") push(state, "]", stream); + else if (curPunc == "block") push(state, "block", stream); + else if (curPunc == state.ctx.type) pop(state); + else if (state.ctx.type == "block" && style != "comment") setFlag(state, BRACELESS) + state.afterIdent = style == "variable" || style == "keyword"; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), ctx = state.ctx, + closing = firstChar == ctx.type; + if (ctx.flags & BRACELESS) ctx = ctx.prev + if (ctx.type == "block") return ctx.indent + (firstChar == "{" ? 0 : config.indentUnit); + else if (ctx.flags & ALIGN_YES) return ctx.column + (closing ? 0 : 1); + else return ctx.indent + (closing ? 0 : config.indentUnit); + }, + + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("text/x-rsrc", "r"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rpm/changes/index.html b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rpm/changes/index.html new file mode 100644 index 0000000000..9d244ecc85 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rpm/changes/index.html @@ -0,0 +1,66 @@ + + +CodeMirror: RPM changes mode + + + + + + + + + + + +
    +

    RPM changes mode

    + +
    + + +

    MIME types defined: text/x-rpm-changes.

    +
    diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rpm/rpm.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rpm/rpm.js new file mode 100644 index 0000000000..bb9ec9ffad --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rpm/rpm.js @@ -0,0 +1,109 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("rpm-changes", function() { + var headerSeparator = /^-+$/; + var headerLine = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /; + var simpleEmail = /^[\w+.-]+@[\w.-]+/; + + return { + token: function(stream) { + if (stream.sol()) { + if (stream.match(headerSeparator)) { return 'tag'; } + if (stream.match(headerLine)) { return 'tag'; } + } + if (stream.match(simpleEmail)) { return 'string'; } + stream.next(); + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-rpm-changes", "rpm-changes"); + +// Quick and dirty spec file highlighting + +CodeMirror.defineMode("rpm-spec", function() { + var arch = /^(i386|i586|i686|x86_64|ppc64le|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/; + + var preamble = /^[a-zA-Z0-9()]+:/; + var section = /^%(debug_package|package|description|prep|build|install|files|clean|changelog|preinstall|preun|postinstall|postun|pretrans|posttrans|pre|post|triggerin|triggerun|verifyscript|check|triggerpostun|triggerprein|trigger)/; + var control_flow_complex = /^%(ifnarch|ifarch|if)/; // rpm control flow macros + var control_flow_simple = /^%(else|endif)/; // rpm control flow macros + var operators = /^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/; // operators in control flow macros + + return { + startState: function () { + return { + controlFlow: false, + macroParameters: false, + section: false + }; + }, + token: function (stream, state) { + var ch = stream.peek(); + if (ch == "#") { stream.skipToEnd(); return "comment"; } + + if (stream.sol()) { + if (stream.match(preamble)) { return "header"; } + if (stream.match(section)) { return "atom"; } + } + + if (stream.match(/^\$\w+/)) { return "def"; } // Variables like '$RPM_BUILD_ROOT' + if (stream.match(/^\$\{\w+\}/)) { return "def"; } // Variables like '${RPM_BUILD_ROOT}' + + if (stream.match(control_flow_simple)) { return "keyword"; } + if (stream.match(control_flow_complex)) { + state.controlFlow = true; + return "keyword"; + } + if (state.controlFlow) { + if (stream.match(operators)) { return "operator"; } + if (stream.match(/^(\d+)/)) { return "number"; } + if (stream.eol()) { state.controlFlow = false; } + } + + if (stream.match(arch)) { + if (stream.eol()) { state.controlFlow = false; } + return "number"; + } + + // Macros like '%make_install' or '%attr(0775,root,root)' + if (stream.match(/^%[\w]+/)) { + if (stream.match('(')) { state.macroParameters = true; } + return "keyword"; + } + if (state.macroParameters) { + if (stream.match(/^\d+/)) { return "number";} + if (stream.match(')')) { + state.macroParameters = false; + return "keyword"; + } + } + + // Macros like '%{defined fedora}' + if (stream.match(/^%\{\??[\w \-\:\!]+\}/)) { + if (stream.eol()) { state.controlFlow = false; } + return "def"; + } + + //TODO: Include bash script sub-parser (CodeMirror supports that) + stream.next(); + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-rpm-spec", "rpm-spec"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rst/rst.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rst/rst.js new file mode 100644 index 0000000000..f14eb270f9 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rst/rst.js @@ -0,0 +1,557 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../python/python"), require("../stex/stex"), require("../../addon/mode/overlay")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../python/python", "../stex/stex", "../../addon/mode/overlay"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('rst', function (config, options) { + + var rx_strong = /^\*\*[^\*\s](?:[^\*]*[^\*\s])?\*\*/; + var rx_emphasis = /^\*[^\*\s](?:[^\*]*[^\*\s])?\*/; + var rx_literal = /^``[^`\s](?:[^`]*[^`\s])``/; + + var rx_number = /^(?:[\d]+(?:[\.,]\d+)*)/; + var rx_positive = /^(?:\s\+[\d]+(?:[\.,]\d+)*)/; + var rx_negative = /^(?:\s\-[\d]+(?:[\.,]\d+)*)/; + + var rx_uri_protocol = "[Hh][Tt][Tt][Pp][Ss]?://"; + var rx_uri_domain = "(?:[\\d\\w.-]+)\\.(?:\\w{2,6})"; + var rx_uri_path = "(?:/[\\d\\w\\#\\%\\&\\-\\.\\,\\/\\:\\=\\?\\~]+)*"; + var rx_uri = new RegExp("^" + rx_uri_protocol + rx_uri_domain + rx_uri_path); + + var overlay = { + token: function (stream) { + + if (stream.match(rx_strong) && stream.match (/\W+|$/, false)) + return 'strong'; + if (stream.match(rx_emphasis) && stream.match (/\W+|$/, false)) + return 'em'; + if (stream.match(rx_literal) && stream.match (/\W+|$/, false)) + return 'string-2'; + if (stream.match(rx_number)) + return 'number'; + if (stream.match(rx_positive)) + return 'positive'; + if (stream.match(rx_negative)) + return 'negative'; + if (stream.match(rx_uri)) + return 'link'; + + while (stream.next() != null) { + if (stream.match(rx_strong, false)) break; + if (stream.match(rx_emphasis, false)) break; + if (stream.match(rx_literal, false)) break; + if (stream.match(rx_number, false)) break; + if (stream.match(rx_positive, false)) break; + if (stream.match(rx_negative, false)) break; + if (stream.match(rx_uri, false)) break; + } + + return null; + } + }; + + var mode = CodeMirror.getMode( + config, options.backdrop || 'rst-base' + ); + + return CodeMirror.overlayMode(mode, overlay, true); // combine +}, 'python', 'stex'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +CodeMirror.defineMode('rst-base', function (config) { + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function format(string) { + var args = Array.prototype.slice.call(arguments, 1); + return string.replace(/{(\d+)}/g, function (match, n) { + return typeof args[n] != 'undefined' ? args[n] : match; + }); + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + var mode_python = CodeMirror.getMode(config, 'python'); + var mode_stex = CodeMirror.getMode(config, 'stex'); + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + var SEPA = "\\s+"; + var TAIL = "(?:\\s*|\\W|$)", + rx_TAIL = new RegExp(format('^{0}', TAIL)); + + var NAME = + "(?:[^\\W\\d_](?:[\\w!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)", + rx_NAME = new RegExp(format('^{0}', NAME)); + var NAME_WWS = + "(?:[^\\W\\d_](?:[\\w\\s!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)"; + var REF_NAME = format('(?:{0}|`{1}`)', NAME, NAME_WWS); + + var TEXT1 = "(?:[^\\s\\|](?:[^\\|]*[^\\s\\|])?)"; + var TEXT2 = "(?:[^\\`]+)", + rx_TEXT2 = new RegExp(format('^{0}', TEXT2)); + + var rx_section = new RegExp( + "^([!'#$%&\"()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~])\\1{3,}\\s*$"); + var rx_explicit = new RegExp( + format('^\\.\\.{0}', SEPA)); + var rx_link = new RegExp( + format('^_{0}:{1}|^__:{1}', REF_NAME, TAIL)); + var rx_directive = new RegExp( + format('^{0}::{1}', REF_NAME, TAIL)); + var rx_substitution = new RegExp( + format('^\\|{0}\\|{1}{2}::{3}', TEXT1, SEPA, REF_NAME, TAIL)); + var rx_footnote = new RegExp( + format('^\\[(?:\\d+|#{0}?|\\*)]{1}', REF_NAME, TAIL)); + var rx_citation = new RegExp( + format('^\\[{0}\\]{1}', REF_NAME, TAIL)); + + var rx_substitution_ref = new RegExp( + format('^\\|{0}\\|', TEXT1)); + var rx_footnote_ref = new RegExp( + format('^\\[(?:\\d+|#{0}?|\\*)]_', REF_NAME)); + var rx_citation_ref = new RegExp( + format('^\\[{0}\\]_', REF_NAME)); + var rx_link_ref1 = new RegExp( + format('^{0}__?', REF_NAME)); + var rx_link_ref2 = new RegExp( + format('^`{0}`_', TEXT2)); + + var rx_role_pre = new RegExp( + format('^:{0}:`{1}`{2}', NAME, TEXT2, TAIL)); + var rx_role_suf = new RegExp( + format('^`{1}`:{0}:{2}', NAME, TEXT2, TAIL)); + var rx_role = new RegExp( + format('^:{0}:{1}', NAME, TAIL)); + + var rx_directive_name = new RegExp(format('^{0}', REF_NAME)); + var rx_directive_tail = new RegExp(format('^::{0}', TAIL)); + var rx_substitution_text = new RegExp(format('^\\|{0}\\|', TEXT1)); + var rx_substitution_sepa = new RegExp(format('^{0}', SEPA)); + var rx_substitution_name = new RegExp(format('^{0}', REF_NAME)); + var rx_substitution_tail = new RegExp(format('^::{0}', TAIL)); + var rx_link_head = new RegExp("^_"); + var rx_link_name = new RegExp(format('^{0}|_', REF_NAME)); + var rx_link_tail = new RegExp(format('^:{0}', TAIL)); + + var rx_verbatim = new RegExp('^::\\s*$'); + var rx_examples = new RegExp('^\\s+(?:>>>|In \\[\\d+\\]:)\\s'); + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_normal(stream, state) { + var token = null; + + if (stream.sol() && stream.match(rx_examples, false)) { + change(state, to_mode, { + mode: mode_python, local: CodeMirror.startState(mode_python) + }); + } else if (stream.sol() && stream.match(rx_explicit)) { + change(state, to_explicit); + token = 'meta'; + } else if (stream.sol() && stream.match(rx_section)) { + change(state, to_normal); + token = 'header'; + } else if (phase(state) == rx_role_pre || + stream.match(rx_role_pre, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role_pre, 1)); + stream.match(/^:/); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role_pre, 2)); + stream.match(rx_NAME); + token = 'keyword'; + + if (stream.current().match(/^(?:math|latex)/)) { + state.tmp_stex = true; + } + break; + case 2: + change(state, to_normal, context(rx_role_pre, 3)); + stream.match(/^:`/); + token = 'meta'; + break; + case 3: + if (state.tmp_stex) { + state.tmp_stex = undefined; state.tmp = { + mode: mode_stex, local: CodeMirror.startState(mode_stex) + }; + } + + if (state.tmp) { + if (stream.peek() == '`') { + change(state, to_normal, context(rx_role_pre, 4)); + state.tmp = undefined; + break; + } + + token = state.tmp.mode.token(stream, state.tmp.local); + break; + } + + change(state, to_normal, context(rx_role_pre, 4)); + stream.match(rx_TEXT2); + token = 'string'; + break; + case 4: + change(state, to_normal, context(rx_role_pre, 5)); + stream.match(/^`/); + token = 'meta'; + break; + case 5: + change(state, to_normal, context(rx_role_pre, 6)); + stream.match(rx_TAIL); + break; + default: + change(state, to_normal); + } + } else if (phase(state) == rx_role_suf || + stream.match(rx_role_suf, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role_suf, 1)); + stream.match(/^`/); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role_suf, 2)); + stream.match(rx_TEXT2); + token = 'string'; + break; + case 2: + change(state, to_normal, context(rx_role_suf, 3)); + stream.match(/^`:/); + token = 'meta'; + break; + case 3: + change(state, to_normal, context(rx_role_suf, 4)); + stream.match(rx_NAME); + token = 'keyword'; + break; + case 4: + change(state, to_normal, context(rx_role_suf, 5)); + stream.match(/^:/); + token = 'meta'; + break; + case 5: + change(state, to_normal, context(rx_role_suf, 6)); + stream.match(rx_TAIL); + break; + default: + change(state, to_normal); + } + } else if (phase(state) == rx_role || stream.match(rx_role, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role, 1)); + stream.match(/^:/); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role, 2)); + stream.match(rx_NAME); + token = 'keyword'; + break; + case 2: + change(state, to_normal, context(rx_role, 3)); + stream.match(/^:/); + token = 'meta'; + break; + case 3: + change(state, to_normal, context(rx_role, 4)); + stream.match(rx_TAIL); + break; + default: + change(state, to_normal); + } + } else if (phase(state) == rx_substitution_ref || + stream.match(rx_substitution_ref, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_substitution_ref, 1)); + stream.match(rx_substitution_text); + token = 'variable-2'; + break; + case 1: + change(state, to_normal, context(rx_substitution_ref, 2)); + if (stream.match(/^_?_?/)) token = 'link'; + break; + default: + change(state, to_normal); + } + } else if (stream.match(rx_footnote_ref)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_citation_ref)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_link_ref1)) { + change(state, to_normal); + if (!stream.peek() || stream.peek().match(/^\W$/)) { + token = 'link'; + } + } else if (phase(state) == rx_link_ref2 || + stream.match(rx_link_ref2, false)) { + + switch (stage(state)) { + case 0: + if (!stream.peek() || stream.peek().match(/^\W$/)) { + change(state, to_normal, context(rx_link_ref2, 1)); + } else { + stream.match(rx_link_ref2); + } + break; + case 1: + change(state, to_normal, context(rx_link_ref2, 2)); + stream.match(/^`/); + token = 'link'; + break; + case 2: + change(state, to_normal, context(rx_link_ref2, 3)); + stream.match(rx_TEXT2); + break; + case 3: + change(state, to_normal, context(rx_link_ref2, 4)); + stream.match(/^`_/); + token = 'link'; + break; + default: + change(state, to_normal); + } + } else if (stream.match(rx_verbatim)) { + change(state, to_verbatim); + } + + else { + if (stream.next()) change(state, to_normal); + } + + return token; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_explicit(stream, state) { + var token = null; + + if (phase(state) == rx_substitution || + stream.match(rx_substitution, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_substitution, 1)); + stream.match(rx_substitution_text); + token = 'variable-2'; + break; + case 1: + change(state, to_explicit, context(rx_substitution, 2)); + stream.match(rx_substitution_sepa); + break; + case 2: + change(state, to_explicit, context(rx_substitution, 3)); + stream.match(rx_substitution_name); + token = 'keyword'; + break; + case 3: + change(state, to_explicit, context(rx_substitution, 4)); + stream.match(rx_substitution_tail); + token = 'meta'; + break; + default: + change(state, to_normal); + } + } else if (phase(state) == rx_directive || + stream.match(rx_directive, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_directive, 1)); + stream.match(rx_directive_name); + token = 'keyword'; + + if (stream.current().match(/^(?:math|latex)/)) + state.tmp_stex = true; + else if (stream.current().match(/^python/)) + state.tmp_py = true; + break; + case 1: + change(state, to_explicit, context(rx_directive, 2)); + stream.match(rx_directive_tail); + token = 'meta'; + + if (stream.match(/^latex\s*$/) || state.tmp_stex) { + state.tmp_stex = undefined; change(state, to_mode, { + mode: mode_stex, local: CodeMirror.startState(mode_stex) + }); + } + break; + case 2: + change(state, to_explicit, context(rx_directive, 3)); + if (stream.match(/^python\s*$/) || state.tmp_py) { + state.tmp_py = undefined; change(state, to_mode, { + mode: mode_python, local: CodeMirror.startState(mode_python) + }); + } + break; + default: + change(state, to_normal); + } + } else if (phase(state) == rx_link || stream.match(rx_link, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_link, 1)); + stream.match(rx_link_head); + stream.match(rx_link_name); + token = 'link'; + break; + case 1: + change(state, to_explicit, context(rx_link, 2)); + stream.match(rx_link_tail); + token = 'meta'; + break; + default: + change(state, to_normal); + } + } else if (stream.match(rx_footnote)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_citation)) { + change(state, to_normal); + token = 'quote'; + } + + else { + stream.eatSpace(); + if (stream.eol()) { + change(state, to_normal); + } else { + stream.skipToEnd(); + change(state, to_comment); + token = 'comment'; + } + } + + return token; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_comment(stream, state) { + return as_block(stream, state, 'comment'); + } + + function to_verbatim(stream, state) { + return as_block(stream, state, 'meta'); + } + + function as_block(stream, state, token) { + if (stream.eol() || stream.eatSpace()) { + stream.skipToEnd(); + return token; + } else { + change(state, to_normal); + return null; + } + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_mode(stream, state) { + + if (state.ctx.mode && state.ctx.local) { + + if (stream.sol()) { + if (!stream.eatSpace()) change(state, to_normal); + return null; + } + + return state.ctx.mode.token(stream, state.ctx.local); + } + + change(state, to_normal); + return null; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function context(phase, stage, mode, local) { + return {phase: phase, stage: stage, mode: mode, local: local}; + } + + function change(state, tok, ctx) { + state.tok = tok; + state.ctx = ctx || {}; + } + + function stage(state) { + return state.ctx.stage || 0; + } + + function phase(state) { + return state.ctx.phase; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + return { + startState: function () { + return {tok: to_normal, ctx: context(undefined, 0)}; + }, + + copyState: function (state) { + var ctx = state.ctx, tmp = state.tmp; + if (ctx.local) + ctx = {mode: ctx.mode, local: CodeMirror.copyState(ctx.mode, ctx.local)}; + if (tmp) + tmp = {mode: tmp.mode, local: CodeMirror.copyState(tmp.mode, tmp.local)}; + return {tok: state.tok, ctx: ctx, tmp: tmp}; + }, + + innerMode: function (state) { + return state.tmp ? {state: state.tmp.local, mode: state.tmp.mode} + : state.ctx.mode ? {state: state.ctx.local, mode: state.ctx.mode} + : null; + }, + + token: function (stream, state) { + return state.tok(stream, state); + } + }; +}, 'python', 'stex'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +CodeMirror.defineMIME('text/x-rst', 'rst'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ruby/ruby.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ruby/ruby.js new file mode 100644 index 0000000000..85bbfc657f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ruby/ruby.js @@ -0,0 +1,303 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +function wordObj(words) { + var o = {}; + for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; + return o; +} + +var keywordList = [ + "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else", + "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or", + "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", + "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc", + "caller", "lambda", "proc", "public", "protected", "private", "require", "load", + "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__" +], keywords = wordObj(keywordList); + +var indentWords = wordObj(["def", "class", "case", "for", "while", "until", "module", "then", + "catch", "loop", "proc", "begin"]); +var dedentWords = wordObj(["end", "until"]); +var opening = {"[": "]", "{": "}", "(": ")"}; +var closing = {"]": "[", "}": "{", ")": "("}; + +CodeMirror.defineMode("ruby", function(config) { + var curPunc; + + function chain(newtok, stream, state) { + state.tokenize.push(newtok); + return newtok(stream, state); + } + + function tokenBase(stream, state) { + if (stream.sol() && stream.match("=begin") && stream.eol()) { + state.tokenize.push(readBlockComment); + return "comment"; + } + if (stream.eatSpace()) return null; + var ch = stream.next(), m; + if (ch == "`" || ch == "'" || ch == '"') { + return chain(readQuoted(ch, "string", ch == '"' || ch == "`"), stream, state); + } else if (ch == "/") { + if (regexpAhead(stream)) + return chain(readQuoted(ch, "string-2", true), stream, state); + else + return "operator"; + } else if (ch == "%") { + var style = "string", embed = true; + if (stream.eat("s")) style = "atom"; + else if (stream.eat(/[WQ]/)) style = "string"; + else if (stream.eat(/[r]/)) style = "string-2"; + else if (stream.eat(/[wxq]/)) { style = "string"; embed = false; } + var delim = stream.eat(/[^\w\s=]/); + if (!delim) return "operator"; + if (opening.propertyIsEnumerable(delim)) delim = opening[delim]; + return chain(readQuoted(delim, style, embed, true), stream, state); + } else if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } else if (ch == "<" && (m = stream.match(/^<([-~])[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/))) { + return chain(readHereDoc(m[2], m[1]), stream, state); + } else if (ch == "0") { + if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/); + else if (stream.eat("b")) stream.eatWhile(/[01]/); + else stream.eatWhile(/[0-7]/); + return "number"; + } else if (/\d/.test(ch)) { + stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/); + return "number"; + } else if (ch == "?") { + while (stream.match(/^\\[CM]-/)) {} + if (stream.eat("\\")) stream.eatWhile(/\w/); + else stream.next(); + return "string"; + } else if (ch == ":") { + if (stream.eat("'")) return chain(readQuoted("'", "atom", false), stream, state); + if (stream.eat('"')) return chain(readQuoted('"', "atom", true), stream, state); + + // :> :>> :< :<< are valid symbols + if (stream.eat(/[\<\>]/)) { + stream.eat(/[\<\>]/); + return "atom"; + } + + // :+ :- :/ :* :| :& :! are valid symbols + if (stream.eat(/[\+\-\*\/\&\|\:\!]/)) { + return "atom"; + } + + // Symbols can't start by a digit + if (stream.eat(/[a-zA-Z$@_\xa1-\uffff]/)) { + stream.eatWhile(/[\w$\xa1-\uffff]/); + // Only one ? ! = is allowed and only as the last character + stream.eat(/[\?\!\=]/); + return "atom"; + } + return "operator"; + } else if (ch == "@" && stream.match(/^@?[a-zA-Z_\xa1-\uffff]/)) { + stream.eat("@"); + stream.eatWhile(/[\w\xa1-\uffff]/); + return "variable-2"; + } else if (ch == "$") { + if (stream.eat(/[a-zA-Z_]/)) { + stream.eatWhile(/[\w]/); + } else if (stream.eat(/\d/)) { + stream.eat(/\d/); + } else { + stream.next(); // Must be a special global like $: or $! + } + return "variable-3"; + } else if (/[a-zA-Z_\xa1-\uffff]/.test(ch)) { + stream.eatWhile(/[\w\xa1-\uffff]/); + stream.eat(/[\?\!]/); + if (stream.eat(":")) return "atom"; + return "ident"; + } else if (ch == "|" && (state.varList || state.lastTok == "{" || state.lastTok == "do")) { + curPunc = "|"; + return null; + } else if (/[\(\)\[\]{}\\;]/.test(ch)) { + curPunc = ch; + return null; + } else if (ch == "-" && stream.eat(">")) { + return "arrow"; + } else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) { + var more = stream.eatWhile(/[=+\-\/*:\.^%<>~|]/); + if (ch == "." && !more) curPunc = "."; + return "operator"; + } else { + return null; + } + } + + function regexpAhead(stream) { + var start = stream.pos, depth = 0, next, found = false, escaped = false + while ((next = stream.next()) != null) { + if (!escaped) { + if ("[{(".indexOf(next) > -1) { + depth++ + } else if ("]})".indexOf(next) > -1) { + depth-- + if (depth < 0) break + } else if (next == "/" && depth == 0) { + found = true + break + } + escaped = next == "\\" + } else { + escaped = false + } + } + stream.backUp(stream.pos - start) + return found + } + + function tokenBaseUntilBrace(depth) { + if (!depth) depth = 1; + return function(stream, state) { + if (stream.peek() == "}") { + if (depth == 1) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } else { + state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth - 1); + } + } else if (stream.peek() == "{") { + state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth + 1); + } + return tokenBase(stream, state); + }; + } + function tokenBaseOnce() { + var alreadyCalled = false; + return function(stream, state) { + if (alreadyCalled) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } + alreadyCalled = true; + return tokenBase(stream, state); + }; + } + function readQuoted(quote, style, embed, unescaped) { + return function(stream, state) { + var escaped = false, ch; + + if (state.context.type === 'read-quoted-paused') { + state.context = state.context.prev; + stream.eat("}"); + } + + while ((ch = stream.next()) != null) { + if (ch == quote && (unescaped || !escaped)) { + state.tokenize.pop(); + break; + } + if (embed && ch == "#" && !escaped) { + if (stream.eat("{")) { + if (quote == "}") { + state.context = {prev: state.context, type: 'read-quoted-paused'}; + } + state.tokenize.push(tokenBaseUntilBrace()); + break; + } else if (/[@\$]/.test(stream.peek())) { + state.tokenize.push(tokenBaseOnce()); + break; + } + } + escaped = !escaped && ch == "\\"; + } + return style; + }; + } + function readHereDoc(phrase, mayIndent) { + return function(stream, state) { + if (mayIndent) stream.eatSpace() + if (stream.match(phrase)) state.tokenize.pop(); + else stream.skipToEnd(); + return "string"; + }; + } + function readBlockComment(stream, state) { + if (stream.sol() && stream.match("=end") && stream.eol()) + state.tokenize.pop(); + stream.skipToEnd(); + return "comment"; + } + + return { + startState: function() { + return {tokenize: [tokenBase], + indented: 0, + context: {type: "top", indented: -config.indentUnit}, + continuedLine: false, + lastTok: null, + varList: false}; + }, + + token: function(stream, state) { + curPunc = null; + if (stream.sol()) state.indented = stream.indentation(); + var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype; + var thisTok = curPunc; + if (style == "ident") { + var word = stream.current(); + style = state.lastTok == "." ? "property" + : keywords.propertyIsEnumerable(stream.current()) ? "keyword" + : /^[A-Z]/.test(word) ? "tag" + : (state.lastTok == "def" || state.lastTok == "class" || state.varList) ? "def" + : "variable"; + if (style == "keyword") { + thisTok = word; + if (indentWords.propertyIsEnumerable(word)) kwtype = "indent"; + else if (dedentWords.propertyIsEnumerable(word)) kwtype = "dedent"; + else if ((word == "if" || word == "unless") && stream.column() == stream.indentation()) + kwtype = "indent"; + else if (word == "do" && state.context.indented < state.indented) + kwtype = "indent"; + } + } + if (curPunc || (style && style != "comment")) state.lastTok = thisTok; + if (curPunc == "|") state.varList = !state.varList; + + if (kwtype == "indent" || /[\(\[\{]/.test(curPunc)) + state.context = {prev: state.context, type: curPunc || style, indented: state.indented}; + else if ((kwtype == "dedent" || /[\)\]\}]/.test(curPunc)) && state.context.prev) + state.context = state.context.prev; + + if (stream.eol()) + state.continuedLine = (curPunc == "\\" || style == "operator"); + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize[state.tokenize.length-1] != tokenBase) return CodeMirror.Pass; + var firstChar = textAfter && textAfter.charAt(0); + var ct = state.context; + var closed = ct.type == closing[firstChar] || + ct.type == "keyword" && /^(?:end|until|else|elsif|when|rescue)\b/.test(textAfter); + return ct.indented + (closed ? 0 : config.indentUnit) + + (state.continuedLine ? config.indentUnit : 0); + }, + + electricInput: /^\s*(?:end|rescue|elsif|else|\})$/, + lineComment: "#", + fold: "indent" + }; +}); + +CodeMirror.defineMIME("text/x-ruby", "ruby"); + +CodeMirror.registerHelper("hintWords", "ruby", keywordList); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rust/rust.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rust/rust.js new file mode 100644 index 0000000000..f95f320d08 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/rust/rust.js @@ -0,0 +1,72 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/simple"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineSimpleMode("rust",{ + start: [ + // string and byte string + {regex: /b?"/, token: "string", next: "string"}, + // raw string and raw byte string + {regex: /b?r"/, token: "string", next: "string_raw"}, + {regex: /b?r#+"/, token: "string", next: "string_raw_hash"}, + // character + {regex: /'(?:[^'\\]|\\(?:[nrt0'"]|x[\da-fA-F]{2}|u\{[\da-fA-F]{6}\}))'/, token: "string-2"}, + // byte + {regex: /b'(?:[^']|\\(?:['\\nrt0]|x[\da-fA-F]{2}))'/, token: "string-2"}, + + {regex: /(?:(?:[0-9][0-9_]*)(?:(?:[Ee][+-]?[0-9_]+)|\.[0-9_]+(?:[Ee][+-]?[0-9_]+)?)(?:f32|f64)?)|(?:0(?:b[01_]+|(?:o[0-7_]+)|(?:x[0-9a-fA-F_]+))|(?:[0-9][0-9_]*))(?:u8|u16|u32|u64|i8|i16|i32|i64|isize|usize)?/, + token: "number"}, + {regex: /(let(?:\s+mut)?|fn|enum|mod|struct|type|union)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/, token: ["keyword", null, "def"]}, + {regex: /(?:abstract|alignof|as|async|await|box|break|continue|const|crate|do|dyn|else|enum|extern|fn|for|final|if|impl|in|loop|macro|match|mod|move|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/, token: "keyword"}, + {regex: /\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|f16|f32|f64|i8|i16|i32|i64|str|Option)\b/, token: "atom"}, + {regex: /\b(?:true|false|Some|None|Ok|Err)\b/, token: "builtin"}, + {regex: /\b(fn)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/, + token: ["keyword", null ,"def"]}, + {regex: /#!?\[.*\]/, token: "meta"}, + {regex: /\/\/.*/, token: "comment"}, + {regex: /\/\*/, token: "comment", next: "comment"}, + {regex: /[-+\/*=<>!]+/, token: "operator"}, + {regex: /[a-zA-Z_]\w*!/,token: "variable-3"}, + {regex: /[a-zA-Z_]\w*/, token: "variable"}, + {regex: /[\{\[\(]/, indent: true}, + {regex: /[\}\]\)]/, dedent: true} + ], + string: [ + {regex: /"/, token: "string", next: "start"}, + {regex: /(?:[^\\"]|\\(?:.|$))*/, token: "string"} + ], + string_raw: [ + {regex: /"/, token: "string", next: "start"}, + {regex: /[^"]*/, token: "string"} + ], + string_raw_hash: [ + {regex: /"#+/, token: "string", next: "start"}, + {regex: /(?:[^"]|"(?!#))*/, token: "string"} + ], + comment: [ + {regex: /.*?\*\//, token: "comment", next: "start"}, + {regex: /.*/, token: "comment"} + ], + meta: { + dontIndentStates: ["comment"], + electricInput: /^\s*\}$/, + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "brace" + } +}); + + +CodeMirror.defineMIME("text/x-rustsrc", "rust"); +CodeMirror.defineMIME("text/rust", "rust"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sas/sas.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sas/sas.js new file mode 100644 index 0000000000..49b96b66de --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sas/sas.js @@ -0,0 +1,303 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + + +// SAS mode copyright (c) 2016 Jared Dean, SAS Institute +// Created by Jared Dean + +// TODO +// indent and de-indent +// identify macro variables + + +//Definitions +// comment -- text within * ; or /* */ +// keyword -- SAS language variable +// variable -- macro variables starts with '&' or variable formats +// variable-2 -- DATA Step, proc, or macro names +// string -- text within ' ' or " " +// operator -- numeric operator + / - * ** le eq ge ... and so on +// builtin -- proc %macro data run mend +// atom +// def + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("sas", function () { + var words = {}; + var isDoubleOperatorSym = { + eq: 'operator', + lt: 'operator', + le: 'operator', + gt: 'operator', + ge: 'operator', + "in": 'operator', + ne: 'operator', + or: 'operator' + }; + var isDoubleOperatorChar = /(<=|>=|!=|<>)/; + var isSingleOperatorChar = /[=\(:\),{}.*<>+\-\/^\[\]]/; + + // Takes a string of words separated by spaces and adds them as + // keys with the value of the first argument 'style' + function define(style, string, context) { + if (context) { + var split = string.split(' '); + for (var i = 0; i < split.length; i++) { + words[split[i]] = {style: style, state: context}; + } + } + } + //datastep + define('def', 'stack pgm view source debug nesting nolist', ['inDataStep']); + define('def', 'if while until for do do; end end; then else cancel', ['inDataStep']); + define('def', 'label format _n_ _error_', ['inDataStep']); + define('def', 'ALTER BUFNO BUFSIZE CNTLLEV COMPRESS DLDMGACTION ENCRYPT ENCRYPTKEY EXTENDOBSCOUNTER GENMAX GENNUM INDEX LABEL OBSBUF OUTREP PW PWREQ READ REPEMPTY REPLACE REUSE ROLE SORTEDBY SPILL TOBSNO TYPE WRITE FILECLOSE FIRSTOBS IN OBS POINTOBS WHERE WHEREUP IDXNAME IDXWHERE DROP KEEP RENAME', ['inDataStep']); + define('def', 'filevar finfo finv fipname fipnamel fipstate first firstobs floor', ['inDataStep']); + define('def', 'varfmt varinfmt varlabel varlen varname varnum varray varrayx vartype verify vformat vformatd vformatdx vformatn vformatnx vformatw vformatwx vformatx vinarray vinarrayx vinformat vinformatd vinformatdx vinformatn vinformatnx vinformatw vinformatwx vinformatx vlabel vlabelx vlength vlengthx vname vnamex vnferr vtype vtypex weekday', ['inDataStep']); + define('def', 'zipfips zipname zipnamel zipstate', ['inDataStep']); + define('def', 'put putc putn', ['inDataStep']); + define('builtin', 'data run', ['inDataStep']); + + + //proc + define('def', 'data', ['inProc']); + + // flow control for macros + define('def', '%if %end %end; %else %else; %do %do; %then', ['inMacro']); + + //everywhere + define('builtin', 'proc run; quit; libname filename %macro %mend option options', ['ALL']); + + define('def', 'footnote title libname ods', ['ALL']); + define('def', '%let %put %global %sysfunc %eval ', ['ALL']); + // automatic macro variables http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a003167023.htm + define('variable', '&sysbuffr &syscc &syscharwidth &syscmd &sysdate &sysdate9 &sysday &sysdevic &sysdmg &sysdsn &sysencoding &sysenv &syserr &syserrortext &sysfilrc &syshostname &sysindex &sysinfo &sysjobid &syslast &syslckrc &syslibrc &syslogapplname &sysmacroname &sysmenv &sysmsg &sysncpu &sysodspath &sysparm &syspbuff &sysprocessid &sysprocessname &sysprocname &sysrc &sysscp &sysscpl &sysscpl &syssite &sysstartid &sysstartname &systcpiphostname &systime &sysuserid &sysver &sysvlong &sysvlong4 &syswarningtext', ['ALL']); + + //footnote[1-9]? title[1-9]? + + //options statement + define('def', 'source2 nosource2 page pageno pagesize', ['ALL']); + + //proc and datastep + define('def', '_all_ _character_ _cmd_ _freq_ _i_ _infile_ _last_ _msg_ _null_ _numeric_ _temporary_ _type_ abort abs addr adjrsq airy alpha alter altlog altprint and arcos array arsin as atan attrc attrib attrn authserver autoexec awscontrol awsdef awsmenu awsmenumerge awstitle backward band base betainv between blocksize blshift bnot bor brshift bufno bufsize bxor by byerr byline byte calculated call cards cards4 catcache cbufno cdf ceil center cexist change chisq cinv class cleanup close cnonct cntllev coalesce codegen col collate collin column comamid comaux1 comaux2 comdef compbl compound compress config continue convert cos cosh cpuid create cross crosstab css curobs cv daccdb daccdbsl daccsl daccsyd dacctab dairy datalines datalines4 datejul datepart datetime day dbcslang dbcstype dclose ddfm ddm delete delimiter depdb depdbsl depsl depsyd deptab dequote descending descript design= device dflang dhms dif digamma dim dinfo display distinct dkricond dkrocond dlm dnum do dopen doptname doptnum dread drop dropnote dsname dsnferr echo else emaildlg emailid emailpw emailserver emailsys encrypt end endsas engine eof eov erf erfc error errorcheck errors exist exp fappend fclose fcol fdelete feedback fetch fetchobs fexist fget file fileclose fileexist filefmt filename fileref fmterr fmtsearch fnonct fnote font fontalias fopen foptname foptnum force formatted formchar formdelim formdlim forward fpoint fpos fput fread frewind frlen from fsep fuzz fwrite gaminv gamma getoption getvarc getvarn go goto group gwindow hbar hbound helpenv helploc hms honorappearance hosthelp hostprint hour hpct html hvar ibessel ibr id if index indexc indexw initcmd initstmt inner input inputc inputn inr insert int intck intnx into intrr invaliddata irr is jbessel join juldate keep kentb kurtosis label lag last lbound leave left length levels lgamma lib library libref line linesize link list log log10 log2 logpdf logpmf logsdf lostcard lowcase lrecl ls macro macrogen maps mautosource max maxdec maxr mdy mean measures median memtype merge merror min minute missing missover mlogic mod mode model modify month mopen mort mprint mrecall msglevel msymtabmax mvarsize myy n nest netpv new news nmiss no nobatch nobs nocaps nocardimage nocenter nocharcode nocmdmac nocol nocum nodate nodbcs nodetails nodmr nodms nodmsbatch nodup nodupkey noduplicates noechoauto noequals noerrorabend noexitwindows nofullstimer noicon noimplmac noint nolist noloadlist nomiss nomlogic nomprint nomrecall nomsgcase nomstored nomultenvappl nonotes nonumber noobs noovp nopad nopercent noprint noprintinit normal norow norsasuser nosetinit nosplash nosymbolgen note notes notitle notitles notsorted noverbose noxsync noxwait npv null number numkeys nummousekeys nway obs on open order ordinal otherwise out outer outp= output over ovp p(1 5 10 25 50 75 90 95 99) pad pad2 paired parm parmcards path pathdll pathname pdf peek peekc pfkey pmf point poisson poke position printer probbeta probbnml probchi probf probgam probhypr probit probnegb probnorm probsig probt procleave prt ps pw pwreq qtr quote r ranbin rancau random ranexp rangam range ranks rannor ranpoi rantbl rantri ranuni rcorr read recfm register regr remote remove rename repeat repeated replace resolve retain return reuse reverse rewind right round rsquare rtf rtrace rtraceloc s s2 samploc sasautos sascontrol sasfrscr sasmsg sasmstore sasscript sasuser saving scan sdf second select selection separated seq serror set setcomm setot sign simple sin sinh siteinfo skewness skip sle sls sortedby sortpgm sortseq sortsize soundex spedis splashlocation split spool sqrt start std stderr stdin stfips stimer stname stnamel stop stopover sub subgroup subpopn substr sum sumwgt symbol symbolgen symget symput sysget sysin sysleave sysmsg sysparm sysprint sysprintfont sysprod sysrc system t table tables tan tanh tapeclose tbufsize terminal test then timepart tinv tnonct to today tol tooldef totper transformout translate trantab tranwrd trigamma trim trimn trunc truncover type unformatted uniform union until upcase update user usericon uss validate value var weight when where while wincharset window work workinit workterm write wsum xsync xwait yearcutoff yes yyq min max', ['inDataStep', 'inProc']); + define('operator', 'and not ', ['inDataStep', 'inProc']); + + // Main function + function tokenize(stream, state) { + // Finally advance the stream + var ch = stream.next(); + + // BLOCKCOMMENT + if (ch === '/' && stream.eat('*')) { + state.continueComment = true; + return "comment"; + } else if (state.continueComment === true) { // in comment block + //comment ends at the beginning of the line + if (ch === '*' && stream.peek() === '/') { + stream.next(); + state.continueComment = false; + } else if (stream.skipTo('*')) { //comment is potentially later in line + stream.skipTo('*'); + stream.next(); + if (stream.eat('/')) + state.continueComment = false; + } else { + stream.skipToEnd(); + } + return "comment"; + } + + if (ch == "*" && stream.column() == stream.indentation()) { + stream.skipToEnd() + return "comment" + } + + // DoubleOperator match + var doubleOperator = ch + stream.peek(); + + if ((ch === '"' || ch === "'") && !state.continueString) { + state.continueString = ch + return "string" + } else if (state.continueString) { + if (state.continueString == ch) { + state.continueString = null; + } else if (stream.skipTo(state.continueString)) { + // quote found on this line + stream.next(); + state.continueString = null; + } else { + stream.skipToEnd(); + } + return "string"; + } else if (state.continueString !== null && stream.eol()) { + stream.skipTo(state.continueString) || stream.skipToEnd(); + return "string"; + } else if (/[\d\.]/.test(ch)) { //find numbers + if (ch === ".") + stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); + else if (ch === "0") + stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); + else + stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); + return "number"; + } else if (isDoubleOperatorChar.test(ch + stream.peek())) { // TWO SYMBOL TOKENS + stream.next(); + return "operator"; + } else if (isDoubleOperatorSym.hasOwnProperty(doubleOperator)) { + stream.next(); + if (stream.peek() === ' ') + return isDoubleOperatorSym[doubleOperator.toLowerCase()]; + } else if (isSingleOperatorChar.test(ch)) { // SINGLE SYMBOL TOKENS + return "operator"; + } + + // Matches one whole word -- even if the word is a character + var word; + if (stream.match(/[%&;\w]+/, false) != null) { + word = ch + stream.match(/[%&;\w]+/, true); + if (/&/.test(word)) return 'variable' + } else { + word = ch; + } + // the word after DATA PROC or MACRO + if (state.nextword) { + stream.match(/[\w]+/); + // match memname.libname + if (stream.peek() === '.') stream.skipTo(' '); + state.nextword = false; + return 'variable-2'; + } + + word = word.toLowerCase() + // Are we in a DATA Step? + if (state.inDataStep) { + if (word === 'run;' || stream.match(/run\s;/)) { + state.inDataStep = false; + return 'builtin'; + } + // variable formats + if ((word) && stream.next() === '.') { + //either a format or libname.memname + if (/\w/.test(stream.peek())) return 'variable-2'; + else return 'variable'; + } + // do we have a DATA Step keyword + if (word && words.hasOwnProperty(word) && + (words[word].state.indexOf("inDataStep") !== -1 || + words[word].state.indexOf("ALL") !== -1)) { + //backup to the start of the word + if (stream.start < stream.pos) + stream.backUp(stream.pos - stream.start); + //advance the length of the word and return + for (var i = 0; i < word.length; ++i) stream.next(); + return words[word].style; + } + } + // Are we in an Proc statement? + if (state.inProc) { + if (word === 'run;' || word === 'quit;') { + state.inProc = false; + return 'builtin'; + } + // do we have a proc keyword + if (word && words.hasOwnProperty(word) && + (words[word].state.indexOf("inProc") !== -1 || + words[word].state.indexOf("ALL") !== -1)) { + stream.match(/[\w]+/); + return words[word].style; + } + } + // Are we in a Macro statement? + if (state.inMacro) { + if (word === '%mend') { + if (stream.peek() === ';') stream.next(); + state.inMacro = false; + return 'builtin'; + } + if (word && words.hasOwnProperty(word) && + (words[word].state.indexOf("inMacro") !== -1 || + words[word].state.indexOf("ALL") !== -1)) { + stream.match(/[\w]+/); + return words[word].style; + } + + return 'atom'; + } + // Do we have Keywords specific words? + if (word && words.hasOwnProperty(word)) { + // Negates the initial next() + stream.backUp(1); + // Actually move the stream + stream.match(/[\w]+/); + if (word === 'data' && /=/.test(stream.peek()) === false) { + state.inDataStep = true; + state.nextword = true; + return 'builtin'; + } + if (word === 'proc') { + state.inProc = true; + state.nextword = true; + return 'builtin'; + } + if (word === '%macro') { + state.inMacro = true; + state.nextword = true; + return 'builtin'; + } + if (/title[1-9]/.test(word)) return 'def'; + + if (word === 'footnote') { + stream.eat(/[1-9]/); + return 'def'; + } + + // Returns their value as state in the prior define methods + if (state.inDataStep === true && words[word].state.indexOf("inDataStep") !== -1) + return words[word].style; + if (state.inProc === true && words[word].state.indexOf("inProc") !== -1) + return words[word].style; + if (state.inMacro === true && words[word].state.indexOf("inMacro") !== -1) + return words[word].style; + if (words[word].state.indexOf("ALL") !== -1) + return words[word].style; + return null; + } + // Unrecognized syntax + return null; + } + + return { + startState: function () { + return { + inDataStep: false, + inProc: false, + inMacro: false, + nextword: false, + continueString: null, + continueComment: false + }; + }, + token: function (stream, state) { + // Strip the spaces, but regex will account for them either way + if (stream.eatSpace()) return null; + // Go through the main process + return tokenize(stream, state); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/" + }; + + }); + + CodeMirror.defineMIME("text/x-sas", "sas"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sass/sass.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sass/sass.js new file mode 100644 index 0000000000..d8427bff57 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sass/sass.js @@ -0,0 +1,459 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../css/css")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../css/css"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sass", function(config) { + var cssMode = CodeMirror.mimeModes["text/css"]; + var propertyKeywords = cssMode.propertyKeywords || {}, + colorKeywords = cssMode.colorKeywords || {}, + valueKeywords = cssMode.valueKeywords || {}, + fontProperties = cssMode.fontProperties || {}; + + function tokenRegexp(words) { + return new RegExp("^" + words.join("|")); + } + + var keywords = ["true", "false", "null", "auto"]; + var keywordsRegexp = new RegExp("^" + keywords.join("|")); + + var operators = ["\\(", "\\)", "=", ">", "<", "==", ">=", "<=", "\\+", "-", + "\\!=", "/", "\\*", "%", "and", "or", "not", ";","\\{","\\}",":"]; + var opRegexp = tokenRegexp(operators); + + var pseudoElementsRegexp = /^::?[a-zA-Z_][\w\-]*/; + + var word; + + function isEndLine(stream) { + return !stream.peek() || stream.match(/\s+$/, false); + } + + function urlTokens(stream, state) { + var ch = stream.peek(); + + if (ch === ")") { + stream.next(); + state.tokenizer = tokenBase; + return "operator"; + } else if (ch === "(") { + stream.next(); + stream.eatSpace(); + + return "operator"; + } else if (ch === "'" || ch === '"') { + state.tokenizer = buildStringTokenizer(stream.next()); + return "string"; + } else { + state.tokenizer = buildStringTokenizer(")", false); + return "string"; + } + } + function comment(indentation, multiLine) { + return function(stream, state) { + if (stream.sol() && stream.indentation() <= indentation) { + state.tokenizer = tokenBase; + return tokenBase(stream, state); + } + + if (multiLine && stream.skipTo("*/")) { + stream.next(); + stream.next(); + state.tokenizer = tokenBase; + } else { + stream.skipToEnd(); + } + + return "comment"; + }; + } + + function buildStringTokenizer(quote, greedy) { + if (greedy == null) { greedy = true; } + + function stringTokenizer(stream, state) { + var nextChar = stream.next(); + var peekChar = stream.peek(); + var previousChar = stream.string.charAt(stream.pos-2); + + var endingString = ((nextChar !== "\\" && peekChar === quote) || (nextChar === quote && previousChar !== "\\")); + + if (endingString) { + if (nextChar !== quote && greedy) { stream.next(); } + if (isEndLine(stream)) { + state.cursorHalf = 0; + } + state.tokenizer = tokenBase; + return "string"; + } else if (nextChar === "#" && peekChar === "{") { + state.tokenizer = buildInterpolationTokenizer(stringTokenizer); + stream.next(); + return "operator"; + } else { + return "string"; + } + } + + return stringTokenizer; + } + + function buildInterpolationTokenizer(currentTokenizer) { + return function(stream, state) { + if (stream.peek() === "}") { + stream.next(); + state.tokenizer = currentTokenizer; + return "operator"; + } else { + return tokenBase(stream, state); + } + }; + } + + function indent(state) { + if (state.indentCount == 0) { + state.indentCount++; + var lastScopeOffset = state.scopes[0].offset; + var currentOffset = lastScopeOffset + config.indentUnit; + state.scopes.unshift({ offset:currentOffset }); + } + } + + function dedent(state) { + if (state.scopes.length == 1) return; + + state.scopes.shift(); + } + + function tokenBase(stream, state) { + var ch = stream.peek(); + + // Comment + if (stream.match("/*")) { + state.tokenizer = comment(stream.indentation(), true); + return state.tokenizer(stream, state); + } + if (stream.match("//")) { + state.tokenizer = comment(stream.indentation(), false); + return state.tokenizer(stream, state); + } + + // Interpolation + if (stream.match("#{")) { + state.tokenizer = buildInterpolationTokenizer(tokenBase); + return "operator"; + } + + // Strings + if (ch === '"' || ch === "'") { + stream.next(); + state.tokenizer = buildStringTokenizer(ch); + return "string"; + } + + if(!state.cursorHalf){// state.cursorHalf === 0 + // first half i.e. before : for key-value pairs + // including selectors + + if (ch === "-") { + if (stream.match(/^-\w+-/)) { + return "meta"; + } + } + + if (ch === ".") { + stream.next(); + if (stream.match(/^[\w-]+/)) { + indent(state); + return "qualifier"; + } else if (stream.peek() === "#") { + indent(state); + return "tag"; + } + } + + if (ch === "#") { + stream.next(); + // ID selectors + if (stream.match(/^[\w-]+/)) { + indent(state); + return "builtin"; + } + if (stream.peek() === "#") { + indent(state); + return "tag"; + } + } + + // Variables + if (ch === "$") { + stream.next(); + stream.eatWhile(/[\w-]/); + return "variable-2"; + } + + // Numbers + if (stream.match(/^-?[0-9\.]+/)) + return "number"; + + // Units + if (stream.match(/^(px|em|in)\b/)) + return "unit"; + + if (stream.match(keywordsRegexp)) + return "keyword"; + + if (stream.match(/^url/) && stream.peek() === "(") { + state.tokenizer = urlTokens; + return "atom"; + } + + if (ch === "=") { + // Match shortcut mixin definition + if (stream.match(/^=[\w-]+/)) { + indent(state); + return "meta"; + } + } + + if (ch === "+") { + // Match shortcut mixin definition + if (stream.match(/^\+[\w-]+/)){ + return "variable-3"; + } + } + + if(ch === "@"){ + if(stream.match('@extend')){ + if(!stream.match(/\s*[\w]/)) + dedent(state); + } + } + + + // Indent Directives + if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)) { + indent(state); + return "def"; + } + + // Other Directives + if (ch === "@") { + stream.next(); + stream.eatWhile(/[\w-]/); + return "def"; + } + + if (stream.eatWhile(/[\w-]/)){ + if(stream.match(/ *: *[\w-\+\$#!\("']/,false)){ + word = stream.current().toLowerCase(); + var prop = state.prevProp + "-" + word; + if (propertyKeywords.hasOwnProperty(prop)) { + return "property"; + } else if (propertyKeywords.hasOwnProperty(word)) { + state.prevProp = word; + return "property"; + } else if (fontProperties.hasOwnProperty(word)) { + return "property"; + } + return "tag"; + } + else if(stream.match(/ *:/,false)){ + indent(state); + state.cursorHalf = 1; + state.prevProp = stream.current().toLowerCase(); + return "property"; + } + else if(stream.match(/ *,/,false)){ + return "tag"; + } + else{ + indent(state); + return "tag"; + } + } + + if(ch === ":"){ + if (stream.match(pseudoElementsRegexp)){ // could be a pseudo-element + return "variable-3"; + } + stream.next(); + state.cursorHalf=1; + return "operator"; + } + + } // cursorHalf===0 ends here + else{ + + if (ch === "#") { + stream.next(); + // Hex numbers + if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){ + if (isEndLine(stream)) { + state.cursorHalf = 0; + } + return "number"; + } + } + + // Numbers + if (stream.match(/^-?[0-9\.]+/)){ + if (isEndLine(stream)) { + state.cursorHalf = 0; + } + return "number"; + } + + // Units + if (stream.match(/^(px|em|in)\b/)){ + if (isEndLine(stream)) { + state.cursorHalf = 0; + } + return "unit"; + } + + if (stream.match(keywordsRegexp)){ + if (isEndLine(stream)) { + state.cursorHalf = 0; + } + return "keyword"; + } + + if (stream.match(/^url/) && stream.peek() === "(") { + state.tokenizer = urlTokens; + if (isEndLine(stream)) { + state.cursorHalf = 0; + } + return "atom"; + } + + // Variables + if (ch === "$") { + stream.next(); + stream.eatWhile(/[\w-]/); + if (isEndLine(stream)) { + state.cursorHalf = 0; + } + return "variable-2"; + } + + // bang character for !important, !default, etc. + if (ch === "!") { + stream.next(); + state.cursorHalf = 0; + return stream.match(/^[\w]+/) ? "keyword": "operator"; + } + + if (stream.match(opRegexp)){ + if (isEndLine(stream)) { + state.cursorHalf = 0; + } + return "operator"; + } + + // attributes + if (stream.eatWhile(/[\w-]/)) { + if (isEndLine(stream)) { + state.cursorHalf = 0; + } + word = stream.current().toLowerCase(); + if (valueKeywords.hasOwnProperty(word)) { + return "atom"; + } else if (colorKeywords.hasOwnProperty(word)) { + return "keyword"; + } else if (propertyKeywords.hasOwnProperty(word)) { + state.prevProp = stream.current().toLowerCase(); + return "property"; + } else { + return "tag"; + } + } + + //stream.eatSpace(); + if (isEndLine(stream)) { + state.cursorHalf = 0; + return null; + } + + } // else ends here + + if (stream.match(opRegexp)) + return "operator"; + + // If we haven't returned by now, we move 1 character + // and return an error + stream.next(); + return null; + } + + function tokenLexer(stream, state) { + if (stream.sol()) state.indentCount = 0; + var style = state.tokenizer(stream, state); + var current = stream.current(); + + if (current === "@return" || current === "}"){ + dedent(state); + } + + if (style !== null) { + var startOfToken = stream.pos - current.length; + + var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount); + + var newScopes = []; + + for (var i = 0; i < state.scopes.length; i++) { + var scope = state.scopes[i]; + + if (scope.offset <= withCurrentIndent) + newScopes.push(scope); + } + + state.scopes = newScopes; + } + + + return style; + } + + return { + startState: function() { + return { + tokenizer: tokenBase, + scopes: [{offset: 0, type: "sass"}], + indentCount: 0, + cursorHalf: 0, // cursor half tells us if cursor lies after (1) + // or before (0) colon (well... more or less) + definedVars: [], + definedMixins: [] + }; + }, + token: function(stream, state) { + var style = tokenLexer(stream, state); + + state.lastToken = { style: style, content: stream.current() }; + + return style; + }, + + indent: function(state) { + return state.scopes[0].offset; + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "indent" + }; +}, "css"); + +CodeMirror.defineMIME("text/x-sass", "sass"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/scheme/scheme.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/scheme/scheme.js new file mode 100644 index 0000000000..d11a132df3 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/scheme/scheme.js @@ -0,0 +1,284 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/** + * Author: Koh Zi Han, based on implementation by Koh Zi Chun + * Improved by: Jakub T. Jankiewicz + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("scheme", function () { + var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", + SYMBOL = "symbol", ATOM = "atom", NUMBER = "number", BRACKET = "bracket"; + var INDENT_WORD_SKIP = 2; + + function makeKeywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = makeKeywords("λ case-lambda call/cc class cond-expand define-class define-values exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax define-macro defmacro delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"); + var indentKeys = makeKeywords("define let letrec let* lambda define-macro defmacro let-syntax letrec-syntax let-values let*-values define-syntax syntax-rules define-values when unless"); + + function stateStack(indent, type, prev) { // represents a state stack object + this.indent = indent; + this.type = type; + this.prev = prev; + } + + function pushStack(state, indent, type) { + state.indentStack = new stateStack(indent, type, state.indentStack); + } + + function popStack(state) { + state.indentStack = state.indentStack.prev; + } + + var binaryMatcher = new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i); + var octalMatcher = new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i); + var hexMatcher = new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i); + var decimalMatcher = new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i); + + function isBinaryNumber (stream) { + return stream.match(binaryMatcher); + } + + function isOctalNumber (stream) { + return stream.match(octalMatcher); + } + + function isDecimalNumber (stream, backup) { + if (backup === true) { + stream.backUp(1); + } + return stream.match(decimalMatcher); + } + + function isHexNumber (stream) { + return stream.match(hexMatcher); + } + + function processEscapedSequence(stream, options) { + var next, escaped = false; + while ((next = stream.next()) != null) { + if (next == options.token && !escaped) { + + options.state.mode = false; + break; + } + escaped = !escaped && next == "\\"; + } + } + + return { + startState: function () { + return { + indentStack: null, + indentation: 0, + mode: false, + sExprComment: false, + sExprQuote: false + }; + }, + + token: function (stream, state) { + if (state.indentStack == null && stream.sol()) { + // update indentation, but only if indentStack is empty + state.indentation = stream.indentation(); + } + + // skip spaces + if (stream.eatSpace()) { + return null; + } + var returnType = null; + + switch(state.mode){ + case "string": // multi-line string parsing mode + processEscapedSequence(stream, { + token: "\"", + state: state + }); + returnType = STRING; // continue on in scheme-string mode + break; + case "symbol": // escape symbol + processEscapedSequence(stream, { + token: "|", + state: state + }); + returnType = SYMBOL; // continue on in scheme-symbol mode + break; + case "comment": // comment parsing mode + var next, maybeEnd = false; + while ((next = stream.next()) != null) { + if (next == "#" && maybeEnd) { + + state.mode = false; + break; + } + maybeEnd = (next == "|"); + } + returnType = COMMENT; + break; + case "s-expr-comment": // s-expr commenting mode + state.mode = false; + if(stream.peek() == "(" || stream.peek() == "["){ + // actually start scheme s-expr commenting mode + state.sExprComment = 0; + }else{ + // if not we just comment the entire of the next token + stream.eatWhile(/[^\s\(\)\[\]]/); // eat symbol atom + returnType = COMMENT; + break; + } + default: // default parsing mode + var ch = stream.next(); + + if (ch == "\"") { + state.mode = "string"; + returnType = STRING; + + } else if (ch == "'") { + if (stream.peek() == "(" || stream.peek() == "["){ + if (typeof state.sExprQuote != "number") { + state.sExprQuote = 0; + } // else already in a quoted expression + returnType = ATOM; + } else { + stream.eatWhile(/[\w_\-!$%&*+\.\/:<=>?@\^~]/); + returnType = ATOM; + } + } else if (ch == '|') { + state.mode = "symbol"; + returnType = SYMBOL; + } else if (ch == '#') { + if (stream.eat("|")) { // Multi-line comment + state.mode = "comment"; // toggle to comment mode + returnType = COMMENT; + } else if (stream.eat(/[tf]/i)) { // #t/#f (atom) + returnType = ATOM; + } else if (stream.eat(';')) { // S-Expr comment + state.mode = "s-expr-comment"; + returnType = COMMENT; + } else { + var numTest = null, hasExactness = false, hasRadix = true; + if (stream.eat(/[ei]/i)) { + hasExactness = true; + } else { + stream.backUp(1); // must be radix specifier + } + if (stream.match(/^#b/i)) { + numTest = isBinaryNumber; + } else if (stream.match(/^#o/i)) { + numTest = isOctalNumber; + } else if (stream.match(/^#x/i)) { + numTest = isHexNumber; + } else if (stream.match(/^#d/i)) { + numTest = isDecimalNumber; + } else if (stream.match(/^[-+0-9.]/, false)) { + hasRadix = false; + numTest = isDecimalNumber; + // re-consume the initial # if all matches failed + } else if (!hasExactness) { + stream.eat('#'); + } + if (numTest != null) { + if (hasRadix && !hasExactness) { + // consume optional exactness after radix + stream.match(/^#[ei]/i); + } + if (numTest(stream)) + returnType = NUMBER; + } + } + } else if (/^[-+0-9.]/.test(ch) && isDecimalNumber(stream, true)) { // match non-prefixed number, must be decimal + returnType = NUMBER; + } else if (ch == ";") { // comment + stream.skipToEnd(); // rest of the line is a comment + returnType = COMMENT; + } else if (ch == "(" || ch == "[") { + var keyWord = ''; var indentTemp = stream.column(), letter; + /** + Either + (indent-word .. + (non-indent-word .. + (;something else, bracket, etc. + */ + + while ((letter = stream.eat(/[^\s\(\[\;\)\]]/)) != null) { + keyWord += letter; + } + + if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word + + pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); + } else { // non-indent word + // we continue eating the spaces + stream.eatSpace(); + if (stream.eol() || stream.peek() == ";") { + // nothing significant after + // we restart indentation 1 space after + pushStack(state, indentTemp + 1, ch); + } else { + pushStack(state, indentTemp + stream.current().length, ch); // else we match + } + } + stream.backUp(stream.current().length - 1); // undo all the eating + + if(typeof state.sExprComment == "number") state.sExprComment++; + if(typeof state.sExprQuote == "number") state.sExprQuote++; + + returnType = BRACKET; + } else if (ch == ")" || ch == "]") { + returnType = BRACKET; + if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : "[")) { + popStack(state); + + if(typeof state.sExprComment == "number"){ + if(--state.sExprComment == 0){ + returnType = COMMENT; // final closing bracket + state.sExprComment = false; // turn off s-expr commenting mode + } + } + if(typeof state.sExprQuote == "number"){ + if(--state.sExprQuote == 0){ + returnType = ATOM; // final closing bracket + state.sExprQuote = false; // turn off s-expr quote mode + } + } + } + } else { + stream.eatWhile(/[\w_\-!$%&*+\.\/:<=>?@\^~]/); + + if (keywords && keywords.propertyIsEnumerable(stream.current())) { + returnType = BUILTIN; + } else returnType = "variable"; + } + } + return (typeof state.sExprComment == "number") ? COMMENT : ((typeof state.sExprQuote == "number") ? ATOM : returnType); + }, + + indent: function (state) { + if (state.indentStack == null) return state.indentation; + return state.indentStack.indent; + }, + + fold: "brace-paren", + closeBrackets: {pairs: "()[]{}\"\""}, + lineComment: ";;" + }; +}); + +CodeMirror.defineMIME("text/x-scheme", "scheme"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/shell/shell.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/shell/shell.js new file mode 100644 index 0000000000..8271485f5f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/shell/shell.js @@ -0,0 +1,168 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('shell', function() { + + var words = {}; + function define(style, dict) { + for(var i = 0; i < dict.length; i++) { + words[dict[i]] = style; + } + }; + + var commonAtoms = ["true", "false"]; + var commonKeywords = ["if", "then", "do", "else", "elif", "while", "until", "for", "in", "esac", "fi", + "fin", "fil", "done", "exit", "set", "unset", "export", "function"]; + var commonCommands = ["ab", "awk", "bash", "beep", "cat", "cc", "cd", "chown", "chmod", "chroot", "clear", + "cp", "curl", "cut", "diff", "echo", "find", "gawk", "gcc", "get", "git", "grep", "hg", "kill", "killall", + "ln", "ls", "make", "mkdir", "openssl", "mv", "nc", "nl", "node", "npm", "ping", "ps", "restart", "rm", + "rmdir", "sed", "service", "sh", "shopt", "shred", "source", "sort", "sleep", "ssh", "start", "stop", + "su", "sudo", "svn", "tee", "telnet", "top", "touch", "vi", "vim", "wall", "wc", "wget", "who", "write", + "yes", "zsh"]; + + CodeMirror.registerHelper("hintWords", "shell", commonAtoms.concat(commonKeywords, commonCommands)); + + define('atom', commonAtoms); + define('keyword', commonKeywords); + define('builtin', commonCommands); + + function tokenBase(stream, state) { + if (stream.eatSpace()) return null; + + var sol = stream.sol(); + var ch = stream.next(); + + if (ch === '\\') { + stream.next(); + return null; + } + if (ch === '\'' || ch === '"' || ch === '`') { + state.tokens.unshift(tokenString(ch, ch === "`" ? "quote" : "string")); + return tokenize(stream, state); + } + if (ch === '#') { + if (sol && stream.eat('!')) { + stream.skipToEnd(); + return 'meta'; // 'comment'? + } + stream.skipToEnd(); + return 'comment'; + } + if (ch === '$') { + state.tokens.unshift(tokenDollar); + return tokenize(stream, state); + } + if (ch === '+' || ch === '=') { + return 'operator'; + } + if (ch === '-') { + stream.eat('-'); + stream.eatWhile(/\w/); + return 'attribute'; + } + if (ch == "<") { + if (stream.match("<<")) return "operator" + var heredoc = stream.match(/^<-?\s*['"]?([^'"]*)['"]?/) + if (heredoc) { + state.tokens.unshift(tokenHeredoc(heredoc[1])) + return 'string-2' + } + } + if (/\d/.test(ch)) { + stream.eatWhile(/\d/); + if(stream.eol() || !/\w/.test(stream.peek())) { + return 'number'; + } + } + stream.eatWhile(/[\w-]/); + var cur = stream.current(); + if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; + return words.hasOwnProperty(cur) ? words[cur] : null; + } + + function tokenString(quote, style) { + var close = quote == "(" ? ")" : quote == "{" ? "}" : quote + return function(stream, state) { + var next, escaped = false; + while ((next = stream.next()) != null) { + if (next === close && !escaped) { + state.tokens.shift(); + break; + } else if (next === '$' && !escaped && quote !== "'" && stream.peek() != close) { + escaped = true; + stream.backUp(1); + state.tokens.unshift(tokenDollar); + break; + } else if (!escaped && quote !== close && next === quote) { + state.tokens.unshift(tokenString(quote, style)) + return tokenize(stream, state) + } else if (!escaped && /['"]/.test(next) && !/['"]/.test(quote)) { + state.tokens.unshift(tokenStringStart(next, "string")); + stream.backUp(1); + break; + } + escaped = !escaped && next === '\\'; + } + return style; + }; + }; + + function tokenStringStart(quote, style) { + return function(stream, state) { + state.tokens[0] = tokenString(quote, style) + stream.next() + return tokenize(stream, state) + } + } + + var tokenDollar = function(stream, state) { + if (state.tokens.length > 1) stream.eat('$'); + var ch = stream.next() + if (/['"({]/.test(ch)) { + state.tokens[0] = tokenString(ch, ch == "(" ? "quote" : ch == "{" ? "def" : "string"); + return tokenize(stream, state); + } + if (!/\d/.test(ch)) stream.eatWhile(/\w/); + state.tokens.shift(); + return 'def'; + }; + + function tokenHeredoc(delim) { + return function(stream, state) { + if (stream.sol() && stream.string == delim) state.tokens.shift() + stream.skipToEnd() + return "string-2" + } + } + + function tokenize(stream, state) { + return (state.tokens[0] || tokenBase) (stream, state); + }; + + return { + startState: function() {return {tokens:[]};}, + token: function(stream, state) { + return tokenize(stream, state); + }, + closeBrackets: "()[]{}''\"\"``", + lineComment: '#', + fold: "brace" + }; +}); + +CodeMirror.defineMIME('text/x-sh', 'shell'); +// Apache uses a slightly different Media Type for Shell scripts +// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types +CodeMirror.defineMIME('application/x-sh', 'shell'); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sieve/sieve.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sieve/sieve.js new file mode 100644 index 0000000000..b7236401a7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sieve/sieve.js @@ -0,0 +1,193 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sieve", function(config) { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = words("if elsif else stop require"); + var atoms = words("true false not"); + var indentUnit = config.indentUnit; + + function tokenBase(stream, state) { + + var ch = stream.next(); + if (ch == "/" && stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + + if (ch === '#') { + stream.skipToEnd(); + return "comment"; + } + + if (ch == "\"") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + + if (ch == "(") { + state._indent.push("("); + // add virtual angel wings so that editor behaves... + // ...more sane in case of broken brackets + state._indent.push("{"); + return null; + } + + if (ch === "{") { + state._indent.push("{"); + return null; + } + + if (ch == ")") { + state._indent.pop(); + state._indent.pop(); + } + + if (ch === "}") { + state._indent.pop(); + return null; + } + + if (ch == ",") + return null; + + if (ch == ";") + return null; + + + if (/[{}\(\),;]/.test(ch)) + return null; + + // 1*DIGIT "K" / "M" / "G" + if (/\d/.test(ch)) { + stream.eatWhile(/[\d]/); + stream.eat(/[KkMmGg]/); + return "number"; + } + + // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_") + if (ch == ":") { + stream.eatWhile(/[a-zA-Z_]/); + stream.eatWhile(/[a-zA-Z0-9_]/); + + return "operator"; + } + + stream.eatWhile(/\w/); + var cur = stream.current(); + + // "text:" *(SP / HTAB) (hash-comment / CRLF) + // *(multiline-literal / multiline-dotstart) + // "." CRLF + if ((cur == "text") && stream.eat(":")) + { + state.tokenize = tokenMultiLineString; + return "string"; + } + + if (keywords.propertyIsEnumerable(cur)) + return "keyword"; + + if (atoms.propertyIsEnumerable(cur)) + return "atom"; + + return null; + } + + function tokenMultiLineString(stream, state) + { + state._multiLineString = true; + // the first line is special it may contain a comment + if (!stream.sol()) { + stream.eatSpace(); + + if (stream.peek() == "#") { + stream.skipToEnd(); + return "comment"; + } + + stream.skipToEnd(); + return "string"; + } + + if ((stream.next() == ".") && (stream.eol())) + { + state._multiLineString = false; + state.tokenize = tokenBase; + } + + return "string"; + } + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) + break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return "string"; + }; + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + _indent: []}; + }, + + token: function(stream, state) { + if (stream.eatSpace()) + return null; + + return (state.tokenize || tokenBase)(stream, state); + }, + + indent: function(state, _textAfter) { + var length = state._indent.length; + if (_textAfter && (_textAfter[0] == "}")) + length--; + + if (length <0) + length = 0; + + return length * indentUnit; + }, + + electricChars: "}" + }; +}); + +CodeMirror.defineMIME("application/sieve", "sieve"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/slim/slim.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/slim/slim.js new file mode 100644 index 0000000000..b8ccb1381f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/slim/slim.js @@ -0,0 +1,575 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../ruby/ruby")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + + CodeMirror.defineMode("slim", function(config) { + var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); + var rubyMode = CodeMirror.getMode(config, "ruby"); + var modes = { html: htmlMode, ruby: rubyMode }; + var embedded = { + ruby: "ruby", + javascript: "javascript", + css: "text/css", + sass: "text/x-sass", + scss: "text/x-scss", + less: "text/x-less", + styl: "text/x-styl", // no highlighting so far + coffee: "coffeescript", + asciidoc: "text/x-asciidoc", + markdown: "text/x-markdown", + textile: "text/x-textile", // no highlighting so far + creole: "text/x-creole", // no highlighting so far + wiki: "text/x-wiki", // no highlighting so far + mediawiki: "text/x-mediawiki", // no highlighting so far + rdoc: "text/x-rdoc", // no highlighting so far + builder: "text/x-builder", // no highlighting so far + nokogiri: "text/x-nokogiri", // no highlighting so far + erb: "application/x-erb" + }; + var embeddedRegexp = function(map){ + var arr = []; + for(var key in map) arr.push(key); + return new RegExp("^("+arr.join('|')+"):"); + }(embedded); + + var styleMap = { + "commentLine": "comment", + "slimSwitch": "operator special", + "slimTag": "tag", + "slimId": "attribute def", + "slimClass": "attribute qualifier", + "slimAttribute": "attribute", + "slimSubmode": "keyword special", + "closeAttributeTag": null, + "slimDoctype": null, + "lineContinuation": null + }; + var closing = { + "{": "}", + "[": "]", + "(": ")" + }; + + var nameStartChar = "_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD"; + var nameChar = nameStartChar + "\\-0-9\xB7\u0300-\u036F\u203F-\u2040"; + var nameRegexp = new RegExp("^[:"+nameStartChar+"](?::["+nameChar+"]|["+nameChar+"]*)"); + var attributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*(?=\\s*=)"); + var wrappedAttributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*"); + var classNameRegexp = /^\.-?[_a-zA-Z]+[\w\-]*/; + var classIdRegexp = /^#[_a-zA-Z]+[\w\-]*/; + + function backup(pos, tokenize, style) { + var restore = function(stream, state) { + state.tokenize = tokenize; + if (stream.pos < pos) { + stream.pos = pos; + return style; + } + return state.tokenize(stream, state); + }; + return function(stream, state) { + state.tokenize = restore; + return tokenize(stream, state); + }; + } + + function maybeBackup(stream, state, pat, offset, style) { + var cur = stream.current(); + var idx = cur.search(pat); + if (idx > -1) { + state.tokenize = backup(stream.pos, state.tokenize, style); + stream.backUp(cur.length - idx - offset); + } + return style; + } + + function continueLine(state, column) { + state.stack = { + parent: state.stack, + style: "continuation", + indented: column, + tokenize: state.line + }; + state.line = state.tokenize; + } + function finishContinue(state) { + if (state.line == state.tokenize) { + state.line = state.stack.tokenize; + state.stack = state.stack.parent; + } + } + + function lineContinuable(column, tokenize) { + return function(stream, state) { + finishContinue(state); + if (stream.match(/^\\$/)) { + continueLine(state, column); + return "lineContinuation"; + } + var style = tokenize(stream, state); + if (stream.eol() && stream.current().match(/(?:^|[^\\])(?:\\\\)*\\$/)) { + stream.backUp(1); + } + return style; + }; + } + function commaContinuable(column, tokenize) { + return function(stream, state) { + finishContinue(state); + var style = tokenize(stream, state); + if (stream.eol() && stream.current().match(/,$/)) { + continueLine(state, column); + } + return style; + }; + } + + function rubyInQuote(endQuote, tokenize) { + // TODO: add multi line support + return function(stream, state) { + var ch = stream.peek(); + if (ch == endQuote && state.rubyState.tokenize.length == 1) { + // step out of ruby context as it seems to complete processing all the braces + stream.next(); + state.tokenize = tokenize; + return "closeAttributeTag"; + } else { + return ruby(stream, state); + } + }; + } + function startRubySplat(tokenize) { + var rubyState; + var runSplat = function(stream, state) { + if (state.rubyState.tokenize.length == 1 && !state.rubyState.context.prev) { + stream.backUp(1); + if (stream.eatSpace()) { + state.rubyState = rubyState; + state.tokenize = tokenize; + return tokenize(stream, state); + } + stream.next(); + } + return ruby(stream, state); + }; + return function(stream, state) { + rubyState = state.rubyState; + state.rubyState = CodeMirror.startState(rubyMode); + state.tokenize = runSplat; + return ruby(stream, state); + }; + } + + function ruby(stream, state) { + return rubyMode.token(stream, state.rubyState); + } + + function htmlLine(stream, state) { + if (stream.match(/^\\$/)) { + return "lineContinuation"; + } + return html(stream, state); + } + function html(stream, state) { + if (stream.match(/^#\{/)) { + state.tokenize = rubyInQuote("}", state.tokenize); + return null; + } + return maybeBackup(stream, state, /[^\\]#\{/, 1, htmlMode.token(stream, state.htmlState)); + } + + function startHtmlLine(lastTokenize) { + return function(stream, state) { + var style = htmlLine(stream, state); + if (stream.eol()) state.tokenize = lastTokenize; + return style; + }; + } + + function startHtmlMode(stream, state, offset) { + state.stack = { + parent: state.stack, + style: "html", + indented: stream.column() + offset, // pipe + space + tokenize: state.line + }; + state.line = state.tokenize = html; + return null; + } + + function comment(stream, state) { + stream.skipToEnd(); + return state.stack.style; + } + + function commentMode(stream, state) { + state.stack = { + parent: state.stack, + style: "comment", + indented: state.indented + 1, + tokenize: state.line + }; + state.line = comment; + return comment(stream, state); + } + + function attributeWrapper(stream, state) { + if (stream.eat(state.stack.endQuote)) { + state.line = state.stack.line; + state.tokenize = state.stack.tokenize; + state.stack = state.stack.parent; + return null; + } + if (stream.match(wrappedAttributeNameRegexp)) { + state.tokenize = attributeWrapperAssign; + return "slimAttribute"; + } + stream.next(); + return null; + } + function attributeWrapperAssign(stream, state) { + if (stream.match(/^==?/)) { + state.tokenize = attributeWrapperValue; + return null; + } + return attributeWrapper(stream, state); + } + function attributeWrapperValue(stream, state) { + var ch = stream.peek(); + if (ch == '"' || ch == "\'") { + state.tokenize = readQuoted(ch, "string", true, false, attributeWrapper); + stream.next(); + return state.tokenize(stream, state); + } + if (ch == '[') { + return startRubySplat(attributeWrapper)(stream, state); + } + if (stream.match(/^(true|false|nil)\b/)) { + state.tokenize = attributeWrapper; + return "keyword"; + } + return startRubySplat(attributeWrapper)(stream, state); + } + + function startAttributeWrapperMode(state, endQuote, tokenize) { + state.stack = { + parent: state.stack, + style: "wrapper", + indented: state.indented + 1, + tokenize: tokenize, + line: state.line, + endQuote: endQuote + }; + state.line = state.tokenize = attributeWrapper; + return null; + } + + function sub(stream, state) { + if (stream.match(/^#\{/)) { + state.tokenize = rubyInQuote("}", state.tokenize); + return null; + } + var subStream = new CodeMirror.StringStream(stream.string.slice(state.stack.indented), stream.tabSize); + subStream.pos = stream.pos - state.stack.indented; + subStream.start = stream.start - state.stack.indented; + subStream.lastColumnPos = stream.lastColumnPos - state.stack.indented; + subStream.lastColumnValue = stream.lastColumnValue - state.stack.indented; + var style = state.subMode.token(subStream, state.subState); + stream.pos = subStream.pos + state.stack.indented; + return style; + } + function firstSub(stream, state) { + state.stack.indented = stream.column(); + state.line = state.tokenize = sub; + return state.tokenize(stream, state); + } + + function createMode(mode) { + var query = embedded[mode]; + var spec = CodeMirror.mimeModes[query]; + if (spec) { + return CodeMirror.getMode(config, spec); + } + var factory = CodeMirror.modes[query]; + if (factory) { + return factory(config, {name: query}); + } + return CodeMirror.getMode(config, "null"); + } + + function getMode(mode) { + if (!modes.hasOwnProperty(mode)) { + return modes[mode] = createMode(mode); + } + return modes[mode]; + } + + function startSubMode(mode, state) { + var subMode = getMode(mode); + var subState = CodeMirror.startState(subMode); + + state.subMode = subMode; + state.subState = subState; + + state.stack = { + parent: state.stack, + style: "sub", + indented: state.indented + 1, + tokenize: state.line + }; + state.line = state.tokenize = firstSub; + return "slimSubmode"; + } + + function doctypeLine(stream, _state) { + stream.skipToEnd(); + return "slimDoctype"; + } + + function startLine(stream, state) { + var ch = stream.peek(); + if (ch == '<') { + return (state.tokenize = startHtmlLine(state.tokenize))(stream, state); + } + if (stream.match(/^[|']/)) { + return startHtmlMode(stream, state, 1); + } + if (stream.match(/^\/(!|\[\w+])?/)) { + return commentMode(stream, state); + } + if (stream.match(/^(-|==?[<>]?)/)) { + state.tokenize = lineContinuable(stream.column(), commaContinuable(stream.column(), ruby)); + return "slimSwitch"; + } + if (stream.match(/^doctype\b/)) { + state.tokenize = doctypeLine; + return "keyword"; + } + + var m = stream.match(embeddedRegexp); + if (m) { + return startSubMode(m[1], state); + } + + return slimTag(stream, state); + } + + function slim(stream, state) { + if (state.startOfLine) { + return startLine(stream, state); + } + return slimTag(stream, state); + } + + function slimTag(stream, state) { + if (stream.eat('*')) { + state.tokenize = startRubySplat(slimTagExtras); + return null; + } + if (stream.match(nameRegexp)) { + state.tokenize = slimTagExtras; + return "slimTag"; + } + return slimClass(stream, state); + } + function slimTagExtras(stream, state) { + if (stream.match(/^(<>?|> state.indented && state.last != "slimSubmode") { + state.line = state.tokenize = state.stack.tokenize; + state.stack = state.stack.parent; + state.subMode = null; + state.subState = null; + } + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + state.startOfLine = false; + if (style) state.last = style; + return styleMap.hasOwnProperty(style) ? styleMap[style] : style; + }, + + blankLine: function(state) { + if (state.subMode && state.subMode.blankLine) { + return state.subMode.blankLine(state.subState); + } + }, + + innerMode: function(state) { + if (state.subMode) return {state: state.subState, mode: state.subMode}; + return {state: state, mode: mode}; + } + + //indent: function(state) { + // return state.indented; + //} + }; + return mode; + }, "htmlmixed", "ruby"); + + CodeMirror.defineMIME("text/x-slim", "slim"); + CodeMirror.defineMIME("application/x-slim", "slim"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/smalltalk/smalltalk.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/smalltalk/smalltalk.js new file mode 100644 index 0000000000..5039fe2d15 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/smalltalk/smalltalk.js @@ -0,0 +1,168 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('smalltalk', function(config) { + + var specialChars = /[+\-\/\\*~<>=@%|&?!.,:;^]/; + var keywords = /true|false|nil|self|super|thisContext/; + + var Context = function(tokenizer, parent) { + this.next = tokenizer; + this.parent = parent; + }; + + var Token = function(name, context, eos) { + this.name = name; + this.context = context; + this.eos = eos; + }; + + var State = function() { + this.context = new Context(next, null); + this.expectVariable = true; + this.indentation = 0; + this.userIndentationDelta = 0; + }; + + State.prototype.userIndent = function(indentation) { + this.userIndentationDelta = indentation > 0 ? (indentation / config.indentUnit - this.indentation) : 0; + }; + + var next = function(stream, context, state) { + var token = new Token(null, context, false); + var aChar = stream.next(); + + if (aChar === '"') { + token = nextComment(stream, new Context(nextComment, context)); + + } else if (aChar === '\'') { + token = nextString(stream, new Context(nextString, context)); + + } else if (aChar === '#') { + if (stream.peek() === '\'') { + stream.next(); + token = nextSymbol(stream, new Context(nextSymbol, context)); + } else { + if (stream.eatWhile(/[^\s.{}\[\]()]/)) + token.name = 'string-2'; + else + token.name = 'meta'; + } + + } else if (aChar === '$') { + if (stream.next() === '<') { + stream.eatWhile(/[^\s>]/); + stream.next(); + } + token.name = 'string-2'; + + } else if (aChar === '|' && state.expectVariable) { + token.context = new Context(nextTemporaries, context); + + } else if (/[\[\]{}()]/.test(aChar)) { + token.name = 'bracket'; + token.eos = /[\[{(]/.test(aChar); + + if (aChar === '[') { + state.indentation++; + } else if (aChar === ']') { + state.indentation = Math.max(0, state.indentation - 1); + } + + } else if (specialChars.test(aChar)) { + stream.eatWhile(specialChars); + token.name = 'operator'; + token.eos = aChar !== ';'; // ; cascaded message expression + + } else if (/\d/.test(aChar)) { + stream.eatWhile(/[\w\d]/); + token.name = 'number'; + + } else if (/[\w_]/.test(aChar)) { + stream.eatWhile(/[\w\d_]/); + token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null; + + } else { + token.eos = state.expectVariable; + } + + return token; + }; + + var nextComment = function(stream, context) { + stream.eatWhile(/[^"]/); + return new Token('comment', stream.eat('"') ? context.parent : context, true); + }; + + var nextString = function(stream, context) { + stream.eatWhile(/[^']/); + return new Token('string', stream.eat('\'') ? context.parent : context, false); + }; + + var nextSymbol = function(stream, context) { + stream.eatWhile(/[^']/); + return new Token('string-2', stream.eat('\'') ? context.parent : context, false); + }; + + var nextTemporaries = function(stream, context) { + var token = new Token(null, context, false); + var aChar = stream.next(); + + if (aChar === '|') { + token.context = context.parent; + token.eos = true; + + } else { + stream.eatWhile(/[^|]/); + token.name = 'variable'; + } + + return token; + }; + + return { + startState: function() { + return new State; + }, + + token: function(stream, state) { + state.userIndent(stream.indentation()); + + if (stream.eatSpace()) { + return null; + } + + var token = state.context.next(stream, state.context, state); + state.context = token.context; + state.expectVariable = token.eos; + + return token.name; + }, + + blankLine: function(state) { + state.userIndent(0); + }, + + indent: function(state, textAfter) { + var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta; + return (state.indentation + i) * config.indentUnit; + }, + + electricChars: ']' + }; + +}); + +CodeMirror.defineMIME('text/x-stsrc', {name: 'smalltalk'}); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/smarty/smarty.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/smarty/smarty.js new file mode 100644 index 0000000000..57852feb0e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/smarty/smarty.js @@ -0,0 +1,225 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/** + * Smarty 2 and 3 mode. + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("smarty", function(config, parserConf) { + var rightDelimiter = parserConf.rightDelimiter || "}"; + var leftDelimiter = parserConf.leftDelimiter || "{"; + var version = parserConf.version || 2; + var baseMode = CodeMirror.getMode(config, parserConf.baseMode || "null"); + + var keyFunctions = ["debug", "extends", "function", "include", "literal"]; + var regs = { + operatorChars: /[+\-*&%=<>!?]/, + validIdentifier: /[a-zA-Z0-9_]/, + stringChar: /['"]/ + }; + + var last; + function cont(style, lastType) { + last = lastType; + return style; + } + + function chain(stream, state, parser) { + state.tokenize = parser; + return parser(stream, state); + } + + // Smarty 3 allows { and } surrounded by whitespace to NOT slip into Smarty mode + function doesNotCount(stream, pos) { + if (pos == null) pos = stream.pos; + return version === 3 && leftDelimiter == "{" && + (pos == stream.string.length || /\s/.test(stream.string.charAt(pos))); + } + + function tokenTop(stream, state) { + var string = stream.string; + for (var scan = stream.pos;;) { + var nextMatch = string.indexOf(leftDelimiter, scan); + scan = nextMatch + leftDelimiter.length; + if (nextMatch == -1 || !doesNotCount(stream, nextMatch + leftDelimiter.length)) break; + } + if (nextMatch == stream.pos) { + stream.match(leftDelimiter); + if (stream.eat("*")) { + return chain(stream, state, tokenBlock("comment", "*" + rightDelimiter)); + } else { + state.depth++; + state.tokenize = tokenSmarty; + last = "startTag"; + return "tag"; + } + } + + if (nextMatch > -1) stream.string = string.slice(0, nextMatch); + var token = baseMode.token(stream, state.base); + if (nextMatch > -1) stream.string = string; + return token; + } + + // parsing Smarty content + function tokenSmarty(stream, state) { + if (stream.match(rightDelimiter, true)) { + if (version === 3) { + state.depth--; + if (state.depth <= 0) { + state.tokenize = tokenTop; + } + } else { + state.tokenize = tokenTop; + } + return cont("tag", null); + } + + if (stream.match(leftDelimiter, true)) { + state.depth++; + return cont("tag", "startTag"); + } + + var ch = stream.next(); + if (ch == "$") { + stream.eatWhile(regs.validIdentifier); + return cont("variable-2", "variable"); + } else if (ch == "|") { + return cont("operator", "pipe"); + } else if (ch == ".") { + return cont("operator", "property"); + } else if (regs.stringChar.test(ch)) { + state.tokenize = tokenAttribute(ch); + return cont("string", "string"); + } else if (regs.operatorChars.test(ch)) { + stream.eatWhile(regs.operatorChars); + return cont("operator", "operator"); + } else if (ch == "[" || ch == "]") { + return cont("bracket", "bracket"); + } else if (ch == "(" || ch == ")") { + return cont("bracket", "operator"); + } else if (/\d/.test(ch)) { + stream.eatWhile(/\d/); + return cont("number", "number"); + } else { + + if (state.last == "variable") { + if (ch == "@") { + stream.eatWhile(regs.validIdentifier); + return cont("property", "property"); + } else if (ch == "|") { + stream.eatWhile(regs.validIdentifier); + return cont("qualifier", "modifier"); + } + } else if (state.last == "pipe") { + stream.eatWhile(regs.validIdentifier); + return cont("qualifier", "modifier"); + } else if (state.last == "whitespace") { + stream.eatWhile(regs.validIdentifier); + return cont("attribute", "modifier"); + } if (state.last == "property") { + stream.eatWhile(regs.validIdentifier); + return cont("property", null); + } else if (/\s/.test(ch)) { + last = "whitespace"; + return null; + } + + var str = ""; + if (ch != "/") { + str += ch; + } + var c = null; + while (c = stream.eat(regs.validIdentifier)) { + str += c; + } + for (var i=0, j=keyFunctions.length; i]=?)/)) { + // Tokenize filter, binary, null propagator, and equality operators. + return "operator"; + } else if (match = stream.match(/^\$([\w]+)/)) { + return ref(state.variables, match[1], !state.lookupVariables); + } else if (match = stream.match(/^\w+/)) { + return /^(?:as|and|or|not|in|if)$/.test(match[0]) ? "keyword" : null; + } + + stream.next(); + return null; + } + + return { + startState: function() { + return { + soyState: [], + variables: prepend(null, 'ij'), + scopes: null, + indent: 0, + quoteKind: null, + context: null, + lookupVariables: true, // Is unknown variables considered an error + localStates: [{ + mode: modes.html, + state: CodeMirror.startState(modes.html) + }] + }; + }, + + copyState: function(state) { + return { + tag: state.tag, // Last seen Soy tag. + soyState: state.soyState.concat([]), + variables: state.variables, + context: state.context, + indent: state.indent, // Indentation of the following line. + quoteKind: state.quoteKind, + lookupVariables: state.lookupVariables, + localStates: state.localStates.map(function(localState) { + return { + mode: localState.mode, + state: CodeMirror.copyState(localState.mode, localState.state) + }; + }) + }; + }, + + token: function(stream, state) { + var match; + + switch (last(state.soyState)) { + case "comment": + if (stream.match(/^.*?\*\//)) { + state.soyState.pop(); + } else { + stream.skipToEnd(); + } + if (!state.context || !state.context.scope) { + var paramRe = /@param\??\s+(\S+)/g; + var current = stream.current(); + for (var match; (match = paramRe.exec(current)); ) { + state.variables = prepend(state.variables, match[1]); + } + } + return "comment"; + + case "string": + var match = stream.match(/^.*?(["']|\\[\s\S])/); + if (!match) { + stream.skipToEnd(); + } else if (match[1] == state.quoteKind) { + state.quoteKind = null; + state.soyState.pop(); + } + return "string"; + } + + if (!state.soyState.length || last(state.soyState) != "literal") { + if (stream.match(/^\/\*/)) { + state.soyState.push("comment"); + return "comment"; + } else if (stream.match(stream.sol() ? /^\s*\/\/.*/ : /^\s+\/\/.*/)) { + return "comment"; + } + } + + switch (last(state.soyState)) { + case "templ-def": + if (match = stream.match(/^\.?([\w]+(?!\.[\w]+)*)/)) { + state.soyState.pop(); + return "def"; + } + stream.next(); + return null; + + case "templ-ref": + if (match = stream.match(/(\.?[a-zA-Z_][a-zA-Z_0-9]+)+/)) { + state.soyState.pop(); + // If the first character is '.', it can only be a local template. + if (match[0][0] == '.') { + return "variable-2" + } + // Otherwise + return "variable"; + } + if (match = stream.match(/^\$([\w]+)/)) { + state.soyState.pop(); + return ref(state.variables, match[1], !state.lookupVariables); + } + + stream.next(); + return null; + + case "namespace-def": + if (match = stream.match(/^\.?([\w\.]+)/)) { + state.soyState.pop(); + return "variable"; + } + stream.next(); + return null; + + case "param-def": + if (match = stream.match(/^\*/)) { + state.soyState.pop(); + state.soyState.push("param-type"); + return "type"; + } + if (match = stream.match(/^\w+/)) { + state.variables = prepend(state.variables, match[0]); + state.soyState.pop(); + state.soyState.push("param-type"); + return "def"; + } + stream.next(); + return null; + + case "param-ref": + if (match = stream.match(/^\w+/)) { + state.soyState.pop(); + return "property"; + } + stream.next(); + return null; + + case "open-parentheses": + if (stream.match(/[)]/)) { + state.soyState.pop(); + return null; + } + return expression(stream, state); + + case "param-type": + var peekChar = stream.peek(); + if ("}]=>,".indexOf(peekChar) != -1) { + state.soyState.pop(); + return null; + } else if (peekChar == "[") { + state.soyState.push('param-type-record'); + return null; + } else if (peekChar == "(") { + state.soyState.push('param-type-template'); + return null; + } else if (peekChar == "<") { + state.soyState.push('param-type-parameter'); + return null; + } else if (match = stream.match(/^([\w]+|[?])/)) { + return "type"; + } + stream.next(); + return null; + + case "param-type-record": + var peekChar = stream.peek(); + if (peekChar == "]") { + state.soyState.pop(); + return null; + } + if (stream.match(/^\w+/)) { + state.soyState.push('param-type'); + return "property"; + } + stream.next(); + return null; + + case "param-type-parameter": + if (stream.match(/^[>]/)) { + state.soyState.pop(); + return null; + } + if (stream.match(/^[<,]/)) { + state.soyState.push('param-type'); + return null; + } + stream.next(); + return null; + + case "param-type-template": + if (stream.match(/[>]/)) { + state.soyState.pop(); + state.soyState.push('param-type'); + return null; + } + if (stream.match(/^\w+/)) { + state.soyState.push('param-type'); + return "def"; + } + stream.next(); + return null; + + case "var-def": + if (match = stream.match(/^\$([\w]+)/)) { + state.variables = prepend(state.variables, match[1]); + state.soyState.pop(); + return "def"; + } + stream.next(); + return null; + + case "for-loop": + if (stream.match(/\bin\b/)) { + state.soyState.pop(); + return "keyword"; + } + if (stream.peek() == "$") { + state.soyState.push('var-def'); + return null; + } + stream.next(); + return null; + + case "record-literal": + if (stream.match(/^[)]/)) { + state.soyState.pop(); + return null; + } + if (stream.match(/[(,]/)) { + state.soyState.push("map-value") + state.soyState.push("record-key") + return null; + } + stream.next() + return null; + + case "map-literal": + if (stream.match(/^[)]/)) { + state.soyState.pop(); + return null; + } + if (stream.match(/[(,]/)) { + state.soyState.push("map-value") + state.soyState.push("map-value") + return null; + } + stream.next() + return null; + + case "list-literal": + if (stream.match(']')) { + state.soyState.pop(); + state.lookupVariables = true; + popcontext(state); + return null; + } + if (stream.match(/\bfor\b/)) { + state.lookupVariables = true; + state.soyState.push('for-loop'); + return "keyword"; + } + return expression(stream, state); + + case "record-key": + if (stream.match(/[\w]+/)) { + return "property"; + } + if (stream.match(/^[:]/)) { + state.soyState.pop(); + return null; + } + stream.next(); + return null; + + case "map-value": + if (stream.peek() == ")" || stream.peek() == "," || stream.match(/^[:)]/)) { + state.soyState.pop(); + return null; + } + return expression(stream, state); + + case "import": + if (stream.eat(";")) { + state.soyState.pop(); + state.indent -= 2 * config.indentUnit; + return null; + } + if (stream.match(/\w+(?=\s+as\b)/)) { + return "variable"; + } + if (match = stream.match(/\w+/)) { + return /\b(from|as)\b/.test(match[0]) ? "keyword" : "def"; + } + if (match = stream.match(/^["']/)) { + state.soyState.push("string"); + state.quoteKind = match[0]; + return "string"; + } + stream.next(); + return null; + + case "tag": + var endTag; + var tagName; + if (state.tag === undefined) { + endTag = true; + tagName = ''; + } else { + endTag = state.tag[0] == "/"; + tagName = endTag ? state.tag.substring(1) : state.tag; + } + var tag = tags[tagName]; + if (stream.match(/^\/?}/)) { + var selfClosed = stream.current() == "/}"; + if (selfClosed && !endTag) { + popcontext(state); + } + if (state.tag == "/template" || state.tag == "/deltemplate") { + state.variables = prepend(null, 'ij'); + state.indent = 0; + } else { + state.indent -= config.indentUnit * + (selfClosed || indentingTags.indexOf(state.tag) == -1 ? 2 : 1); + } + state.soyState.pop(); + return "keyword"; + } else if (stream.match(/^([\w?]+)(?==)/)) { + if (state.context && state.context.tag == tagName && stream.current() == "kind" && (match = stream.match(/^="([^"]+)/, false))) { + var kind = match[1]; + state.context.kind = kind; + var mode = modes[kind] || modes.html; + var localState = last(state.localStates); + if (localState.mode.indent) { + state.indent += localState.mode.indent(localState.state, "", ""); + } + state.localStates.push({ + mode: mode, + state: CodeMirror.startState(mode) + }); + } + return "attribute"; + } + return expression(stream, state); + + case "template-call-expression": + if (stream.match(/^([\w-?]+)(?==)/)) { + return "attribute"; + } else if (stream.eat('>')) { + state.soyState.pop(); + return "keyword"; + } else if (stream.eat('/>')) { + state.soyState.pop(); + return "keyword"; + } + return expression(stream, state); + case "literal": + if (stream.match('{/literal}', false)) { + state.soyState.pop(); + return this.token(stream, state); + } + return tokenUntil(stream, state, /\{\/literal}/); + case "export": + if (match = stream.match(/\w+/)) { + state.soyState.pop(); + if (match == "const") { + state.soyState.push("const-def") + return "keyword"; + } else if (match == "extern") { + state.soyState.push("param-def") + return "keyword"; + } + } else { + stream.next(); + } + return null; + case "const-def": + if (stream.match(/^\w+/)) { + state.soyState.pop(); + return "def"; + } + stream.next(); + return null; + } + + if (stream.match('{literal}')) { + state.indent += config.indentUnit; + state.soyState.push("literal"); + state.context = new Context(state.context, "literal", state.variables); + return "keyword"; + + // A tag-keyword must be followed by whitespace, comment or a closing tag. + } else if (match = stream.match(/^\{([/@\\]?\w+\??)(?=$|[\s}]|\/[/*])/)) { + var prevTag = state.tag; + state.tag = match[1]; + var endTag = state.tag[0] == "/"; + var indentingTag = !!tags[state.tag]; + var tagName = endTag ? state.tag.substring(1) : state.tag; + var tag = tags[tagName]; + if (state.tag != "/switch") + state.indent += ((endTag || tag && tag.reduceIndent) && prevTag != "switch" ? 1 : 2) * config.indentUnit; + + state.soyState.push("tag"); + var tagError = false; + if (tag) { + if (!endTag) { + if (tag.soyState) state.soyState.push(tag.soyState); + } + // If a new tag, open a new context. + if (!tag.noEndTag && (indentingTag || !endTag)) { + state.context = new Context(state.context, state.tag, tag.variableScope ? state.variables : null); + // Otherwise close the current context. + } else if (endTag) { + var isBalancedForExtern = tagName == 'extern' && (state.context && state.context.tag == 'export'); + if (!state.context || ((state.context.tag != tagName) && !isBalancedForExtern)) { + tagError = true; + } else if (state.context) { + if (state.context.kind) { + state.localStates.pop(); + var localState = last(state.localStates); + if (localState.mode.indent) { + state.indent -= localState.mode.indent(localState.state, "", ""); + } + } + popcontext(state); + } + } + } else if (endTag) { + // Assume all tags with a closing tag are defined in the config. + tagError = true; + } + return (tagError ? "error " : "") + "keyword"; + + // Not a tag-keyword; it's an implicit print tag. + } else if (stream.eat('{')) { + state.tag = "print"; + state.indent += 2 * config.indentUnit; + state.soyState.push("tag"); + return "keyword"; + } else if (!state.context && stream.sol() && stream.match(/import\b/)) { + state.soyState.push("import"); + state.indent += 2 * config.indentUnit; + return "keyword"; + } else if (match = stream.match('<{')) { + state.soyState.push("template-call-expression"); + state.indent += 2 * config.indentUnit; + state.soyState.push("tag"); + return "keyword"; + } else if (match = stream.match('')) { + state.indent -= 1 * config.indentUnit; + return "keyword"; + } + + return tokenUntil(stream, state, /\{|\s+\/\/|\/\*/); + }, + + indent: function(state, textAfter, line) { + var indent = state.indent, top = last(state.soyState); + if (top == "comment") return CodeMirror.Pass; + + if (top == "literal") { + if (/^\{\/literal}/.test(textAfter)) indent -= config.indentUnit; + } else { + if (/^\s*\{\/(template|deltemplate)\b/.test(textAfter)) return 0; + if (/^\{(\/|(fallbackmsg|elseif|else|ifempty)\b)/.test(textAfter)) indent -= config.indentUnit; + if (state.tag != "switch" && /^\{(case|default)\b/.test(textAfter)) indent -= config.indentUnit; + if (/^\{\/switch\b/.test(textAfter)) indent -= config.indentUnit; + } + var localState = last(state.localStates); + if (indent && localState.mode.indent) { + indent += localState.mode.indent(localState.state, textAfter, line); + } + return indent; + }, + + innerMode: function(state) { + if (state.soyState.length && last(state.soyState) != "literal") return null; + else return last(state.localStates); + }, + + electricInput: /^\s*\{(\/|\/template|\/deltemplate|\/switch|fallbackmsg|elseif|else|case|default|ifempty|\/literal\})$/, + lineComment: "//", + blockCommentStart: "/*", + blockCommentEnd: "*/", + blockCommentContinue: " * ", + useInnerComments: false, + fold: "indent" + }; + }, "htmlmixed"); + + CodeMirror.registerHelper("wordChars", "soy", /[\w$]/); + + CodeMirror.registerHelper("hintWords", "soy", Object.keys(tags).concat( + ["css", "debugger"])); + + CodeMirror.defineMIME("text/x-soy", "soy"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sparql/sparql.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sparql/sparql.js new file mode 100644 index 0000000000..6d1d24464b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sparql/sparql.js @@ -0,0 +1,190 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sparql", function(config) { + var indentUnit = config.indentUnit; + var curPunc; + + function wordRegexp(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + } + var ops = wordRegexp(["str", "lang", "langmatches", "datatype", "bound", "sameterm", "isiri", "isuri", + "iri", "uri", "bnode", "count", "sum", "min", "max", "avg", "sample", + "group_concat", "rand", "abs", "ceil", "floor", "round", "concat", "substr", "strlen", + "replace", "ucase", "lcase", "encode_for_uri", "contains", "strstarts", "strends", + "strbefore", "strafter", "year", "month", "day", "hours", "minutes", "seconds", + "timezone", "tz", "now", "uuid", "struuid", "md5", "sha1", "sha256", "sha384", + "sha512", "coalesce", "if", "strlang", "strdt", "isnumeric", "regex", "exists", + "isblank", "isliteral", "a", "bind"]); + var keywords = wordRegexp(["base", "prefix", "select", "distinct", "reduced", "construct", "describe", + "ask", "from", "named", "where", "order", "limit", "offset", "filter", "optional", + "graph", "by", "asc", "desc", "as", "having", "undef", "values", "group", + "minus", "in", "not", "service", "silent", "using", "insert", "delete", "union", + "true", "false", "with", + "data", "copy", "to", "move", "add", "create", "drop", "clear", "load"]); + var operatorChars = /[*+\-<>=&|\^\/!\?]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + curPunc = null; + if (ch == "$" || ch == "?") { + if(ch == "?" && stream.match(/\s/, false)){ + return "operator"; + } + stream.match(/^[A-Za-z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][A-Za-z0-9_\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]*/); + return "variable-2"; + } + else if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { + stream.match(/^[^\s\u00a0>]*>?/); + return "atom"; + } + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } + else if (/[{}\(\),\.;\[\]]/.test(ch)) { + curPunc = ch; + return "bracket"; + } + else if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + else if (ch === "^") { + ch = stream.peek(); + if (ch === "^") stream.eat("^"); + else stream.eatWhile(operatorChars); + return "operator"; + } + else if (operatorChars.test(ch)) { + stream.eatWhile(operatorChars); + return "operator"; + } + else if (ch == ":") { + eatPnLocal(stream); + return "atom"; + } + else if (ch == "@") { + stream.eatWhile(/[a-z\d\-]/i); + return "meta"; + } + else { + stream.eatWhile(/[_\w\d]/); + if (stream.eat(":")) { + eatPnLocal(stream); + return "atom"; + } + var word = stream.current(); + if (ops.test(word)) + return "builtin"; + else if (keywords.test(word)) + return "keyword"; + else + return "variable"; + } + } + + function eatPnLocal(stream) { + stream.match(/(\.(?=[\w_\-\\%])|[:\w_-]|\\[-\\_~.!$&'()*+,;=/?#@%]|%[a-f\d][a-f\d])+/i); + } + + function tokenLiteral(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return "string"; + }; + } + + function pushContext(state, type, col) { + state.context = {prev: state.context, indent: state.indent, col: col, type: type}; + } + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, + context: null, + indent: 0, + col: 0}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) state.context.align = false; + state.indent = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + + if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { + state.context.align = true; + } + + if (curPunc == "(") pushContext(state, ")", stream.column()); + else if (curPunc == "[") pushContext(state, "]", stream.column()); + else if (curPunc == "{") pushContext(state, "}", stream.column()); + else if (/[\]\}\)]/.test(curPunc)) { + while (state.context && state.context.type == "pattern") popContext(state); + if (state.context && curPunc == state.context.type) { + popContext(state); + if (curPunc == "}" && state.context && state.context.type == "pattern") + popContext(state); + } + } + else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); + else if (/atom|string|variable/.test(style) && state.context) { + if (/[\}\]]/.test(state.context.type)) + pushContext(state, "pattern", stream.column()); + else if (state.context.type == "pattern" && !state.context.align) { + state.context.align = true; + state.context.col = stream.column(); + } + } + + return style; + }, + + indent: function(state, textAfter) { + var firstChar = textAfter && textAfter.charAt(0); + var context = state.context; + if (/[\]\}]/.test(firstChar)) + while (context && context.type == "pattern") context = context.prev; + + var closing = context && firstChar == context.type; + if (!context) + return 0; + else if (context.type == "pattern") + return context.col; + else if (context.align) + return context.col + (closing ? 0 : 1); + else + return context.indent + (closing ? 0 : indentUnit); + }, + + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("application/sparql-query", "sparql"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/spreadsheet/spreadsheet.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/spreadsheet/spreadsheet.js new file mode 100644 index 0000000000..d87f988d35 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/spreadsheet/spreadsheet.js @@ -0,0 +1,112 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("spreadsheet", function () { + return { + startState: function () { + return { + stringType: null, + stack: [] + }; + }, + token: function (stream, state) { + if (!stream) return; + + //check for state changes + if (state.stack.length === 0) { + //strings + if ((stream.peek() == '"') || (stream.peek() == "'")) { + state.stringType = stream.peek(); + stream.next(); // Skip quote + state.stack.unshift("string"); + } + } + + //return state + //stack has + switch (state.stack[0]) { + case "string": + while (state.stack[0] === "string" && !stream.eol()) { + if (stream.peek() === state.stringType) { + stream.next(); // Skip quote + state.stack.shift(); // Clear flag + } else if (stream.peek() === "\\") { + stream.next(); + stream.next(); + } else { + stream.match(/^.[^\\\"\']*/); + } + } + return "string"; + + case "characterClass": + while (state.stack[0] === "characterClass" && !stream.eol()) { + if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) + state.stack.shift(); + } + return "operator"; + } + + var peek = stream.peek(); + + //no stack + switch (peek) { + case "[": + stream.next(); + state.stack.unshift("characterClass"); + return "bracket"; + case ":": + stream.next(); + return "operator"; + case "\\": + if (stream.match(/\\[a-z]+/)) return "string-2"; + else { + stream.next(); + return "atom"; + } + case ".": + case ",": + case ";": + case "*": + case "-": + case "+": + case "^": + case "<": + case "/": + case "=": + stream.next(); + return "atom"; + case "$": + stream.next(); + return "builtin"; + } + + if (stream.match(/\d+/)) { + if (stream.match(/^\w+/)) return "error"; + return "number"; + } else if (stream.match(/^[a-zA-Z_]\w*/)) { + if (stream.match(/(?=[\(.])/, false)) return "keyword"; + return "variable-2"; + } else if (["[", "]", "(", ")", "{", "}"].indexOf(peek) != -1) { + stream.next(); + return "bracket"; + } else if (!stream.eatSpace()) { + stream.next(); + } + return null; + } + }; + }); + + CodeMirror.defineMIME("text/x-spreadsheet", "spreadsheet"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sql/sql.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sql/sql.js new file mode 100644 index 0000000000..cd8b757bb6 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/sql/sql.js @@ -0,0 +1,503 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sql", function(config, parserConfig) { + var client = parserConfig.client || {}, + atoms = parserConfig.atoms || {"false": true, "true": true, "null": true}, + builtin = parserConfig.builtin || set(defaultBuiltin), + keywords = parserConfig.keywords || set(sqlKeywords), + operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^\/]/, + support = parserConfig.support || {}, + hooks = parserConfig.hooks || {}, + dateSQL = parserConfig.dateSQL || {"date" : true, "time" : true, "timestamp" : true}, + backslashStringEscapes = parserConfig.backslashStringEscapes !== false, + brackets = parserConfig.brackets || /^[\{}\(\)\[\]]/, + punctuation = parserConfig.punctuation || /^[;.,:]/ + + function tokenBase(stream, state) { + var ch = stream.next(); + + // call hooks from the mime type + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + + if (support.hexNumber && + ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) + || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]+'/))) { + // hex + // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html + return "number"; + } else if (support.binaryNumber && + (((ch == "b" || ch == "B") && stream.match(/^'[01]+'/)) + || (ch == "0" && stream.match(/^b[01]+/)))) { + // bitstring + // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html + return "number"; + } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { + // numbers + // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html + stream.match(/^[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?/); + support.decimallessFloat && stream.match(/^\.(?!\.)/); + return "number"; + } else if (ch == "?" && (stream.eatSpace() || stream.eol() || stream.eat(";"))) { + // placeholders + return "variable-3"; + } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { + // strings + // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } else if ((((support.nCharCast && (ch == "n" || ch == "N")) + || (support.charsetCast && ch == "_" && stream.match(/[a-z][a-z0-9]*/i))) + && (stream.peek() == "'" || stream.peek() == '"'))) { + // charset casting: _utf8'str', N'str', n'str' + // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + return "keyword"; + } else if (support.escapeConstant && (ch == "e" || ch == "E") + && (stream.peek() == "'" || (stream.peek() == '"' && support.doubleQuote))) { + // escape constant: E'str', e'str' + // ref: https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-ESCAPE + state.tokenize = function(stream, state) { + return (state.tokenize = tokenLiteral(stream.next(), true))(stream, state); + } + return "keyword"; + } else if (support.commentSlashSlash && ch == "/" && stream.eat("/")) { + // 1-line comment + stream.skipToEnd(); + return "comment"; + } else if ((support.commentHash && ch == "#") + || (ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { + // 1-line comments + // ref: https://kb.askmonty.org/en/comment-syntax/ + stream.skipToEnd(); + return "comment"; + } else if (ch == "/" && stream.eat("*")) { + // multi-line comments + // ref: https://kb.askmonty.org/en/comment-syntax/ + state.tokenize = tokenComment(1); + return state.tokenize(stream, state); + } else if (ch == ".") { + // .1 for 0.1 + if (support.zerolessFloat && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) + return "number"; + if (stream.match(/^\.+/)) + return null + // .table_name (ODBC) + // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + if (support.ODBCdotTable && stream.match(/^[\w\d_$#]+/)) + return "variable-2"; + } else if (operatorChars.test(ch)) { + // operators + stream.eatWhile(operatorChars); + return "operator"; + } else if (brackets.test(ch)) { + // brackets + return "bracket"; + } else if (punctuation.test(ch)) { + // punctuation + stream.eatWhile(punctuation); + return "punctuation"; + } else if (ch == '{' && + (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) { + // dates (weird ODBC syntax) + // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + return "number"; + } else { + stream.eatWhile(/^[_\w\d]/); + var word = stream.current().toLowerCase(); + // dates (standard SQL syntax) + // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) + return "number"; + if (atoms.hasOwnProperty(word)) return "atom"; + if (builtin.hasOwnProperty(word)) return "type"; + if (keywords.hasOwnProperty(word)) return "keyword"; + if (client.hasOwnProperty(word)) return "builtin"; + return null; + } + } + + // 'string', with char specified in quote escaped by '\' + function tokenLiteral(quote, backslashEscapes) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = (backslashStringEscapes || backslashEscapes) && !escaped && ch == "\\"; + } + return "string"; + }; + } + function tokenComment(depth) { + return function(stream, state) { + var m = stream.match(/^.*?(\/\*|\*\/)/) + if (!m) stream.skipToEnd() + else if (m[1] == "/*") state.tokenize = tokenComment(depth + 1) + else if (depth > 1) state.tokenize = tokenComment(depth - 1) + else state.tokenize = tokenBase + return "comment" + } + } + + function pushContext(stream, state, type) { + state.context = { + prev: state.context, + indent: stream.indentation(), + col: stream.column(), + type: type + }; + } + + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, context: null}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) + state.context.align = false; + } + if (state.tokenize == tokenBase && stream.eatSpace()) return null; + + var style = state.tokenize(stream, state); + if (style == "comment") return style; + + if (state.context && state.context.align == null) + state.context.align = true; + + var tok = stream.current(); + if (tok == "(") + pushContext(stream, state, ")"); + else if (tok == "[") + pushContext(stream, state, "]"); + else if (state.context && state.context.type == tok) + popContext(state); + return style; + }, + + indent: function(state, textAfter) { + var cx = state.context; + if (!cx) return CodeMirror.Pass; + var closing = textAfter.charAt(0) == cx.type; + if (cx.align) return cx.col + (closing ? 0 : 1); + else return cx.indent + (closing ? 0 : config.indentUnit); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: support.commentSlashSlash ? "//" : support.commentHash ? "#" : "--", + closeBrackets: "()[]{}''\"\"``" + }; +}); + + // `identifier` + function hookIdentifier(stream) { + // MySQL/MariaDB identifiers + // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + var ch; + while ((ch = stream.next()) != null) { + if (ch == "`" && !stream.eat("`")) return "variable-2"; + } + stream.backUp(stream.current().length - 1); + return stream.eatWhile(/\w/) ? "variable-2" : null; + } + + // "identifier" + function hookIdentifierDoublequote(stream) { + // Standard SQL /SQLite identifiers + // ref: http://web.archive.org/web/20160813185132/http://savage.net.au/SQL/sql-99.bnf.html#delimited%20identifier + // ref: http://sqlite.org/lang_keywords.html + var ch; + while ((ch = stream.next()) != null) { + if (ch == "\"" && !stream.eat("\"")) return "variable-2"; + } + stream.backUp(stream.current().length - 1); + return stream.eatWhile(/\w/) ? "variable-2" : null; + } + + // variable token + function hookVar(stream) { + // variables + // @@prefix.varName @varName + // varName can be quoted with ` or ' or " + // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html + if (stream.eat("@")) { + stream.match('session.'); + stream.match('local.'); + stream.match('global.'); + } + + if (stream.eat("'")) { + stream.match(/^.*'/); + return "variable-2"; + } else if (stream.eat('"')) { + stream.match(/^.*"/); + return "variable-2"; + } else if (stream.eat("`")) { + stream.match(/^.*`/); + return "variable-2"; + } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { + return "variable-2"; + } + return null; + }; + + // short client keyword token + function hookClient(stream) { + // \N means NULL + // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html + if (stream.eat("N")) { + return "atom"; + } + // \g, etc + // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html + return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; + } + + // these keywords are used by all SQL dialects (however, a mode can still overwrite it) + var sqlKeywords = "alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit "; + + // turn a space-separated list into an array + function set(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var defaultBuiltin = "bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric" + + // A generic SQL Mode. It's not a standard, it just try to support what is generally supported + CodeMirror.defineMIME("text/x-sql", { + name: "sql", + keywords: set(sqlKeywords + "begin"), + builtin: set(defaultBuiltin), + atoms: set("false true null unknown"), + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") + }); + + CodeMirror.defineMIME("text/x-mssql", { + name: "sql", + client: set("$partition binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id"), + keywords: set(sqlKeywords + "begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx updlock with"), + builtin: set("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "), + atoms: set("is not null like and or in left right between inner outer join all any some cross unpivot pivot exists"), + operatorChars: /^[*+\-%<>!=^\&|\/]/, + brackets: /^[\{}\(\)]/, + punctuation: /^[;.,:/]/, + backslashStringEscapes: false, + dateSQL: set("date datetimeoffset datetime2 smalldatetime datetime time"), + hooks: { + "@": hookVar + } + }); + + CodeMirror.defineMIME("text/x-mysql", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), + builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), + hooks: { + "@": hookVar, + "`": hookIdentifier, + "\\": hookClient + } + }); + + CodeMirror.defineMIME("text/x-mariadb", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group group_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), + builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), + hooks: { + "@": hookVar, + "`": hookIdentifier, + "\\": hookClient + } + }); + + // provided by the phpLiteAdmin project - phpliteadmin.org + CodeMirror.defineMIME("text/x-sqlite", { + name: "sql", + // commands of the official SQLite client, ref: https://www.sqlite.org/cli.html#dotcmd + client: set("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"), + // ref: http://sqlite.org/lang_keywords.html + keywords: set(sqlKeywords + "abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"), + // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types. + builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"), + // ref: http://sqlite.org/syntax/literal-value.html + atoms: set("null current_date current_time current_timestamp"), + // ref: http://sqlite.org/lang_expr.html#binaryops + operatorChars: /^[*+\-%<>!=&|/~]/, + // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types. + dateSQL: set("date time timestamp datetime"), + support: set("decimallessFloat zerolessFloat"), + identifierQuote: "\"", //ref: http://sqlite.org/lang_keywords.html + hooks: { + // bind-parameters ref:http://sqlite.org/lang_expr.html#varparam + "@": hookVar, + ":": hookVar, + "?": hookVar, + "$": hookVar, + // The preferred way to escape Identifiers is using double quotes, ref: http://sqlite.org/lang_keywords.html + "\"": hookIdentifierDoublequote, + // there is also support for backticks, ref: http://sqlite.org/lang_keywords.html + "`": hookIdentifier + } + }); + + // the query language used by Apache Cassandra is called CQL, but this mime type + // is called Cassandra to avoid confusion with Contextual Query Language + CodeMirror.defineMIME("text/x-cassandra", { + name: "sql", + client: { }, + keywords: set("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"), + builtin: set("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"), + atoms: set("false true infinity NaN"), + operatorChars: /^[<>=]/, + dateSQL: { }, + support: set("commentSlashSlash decimallessFloat"), + hooks: { } + }); + + // this is based on Peter Raganitsch's 'plsql' mode + CodeMirror.defineMIME("text/x-plsql", { + name: "sql", + client: set("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"), + keywords: set("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"), + builtin: set("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"), + operatorChars: /^[*\/+\-%<>!=~]/, + dateSQL: set("date time timestamp"), + support: set("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber") + }); + + // Created to support specific hive keywords + CodeMirror.defineMIME("text/x-hive", { + name: "sql", + keywords: set("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year"), + builtin: set("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date timestamp"), + support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") + }); + + CodeMirror.defineMIME("text/x-pgsql", { + name: "sql", + client: set("source"), + // For PostgreSQL - https://www.postgresql.org/docs/11/sql-keywords-appendix.html + // For pl/pgsql lang - https://github.com/postgres/postgres/blob/REL_11_2/src/pl/plpgsql/src/pl_scanner.c + keywords: set(sqlKeywords + "a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone"), + // https://www.postgresql.org/docs/11/datatype.html + builtin: set("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"), + atoms: set("false true null unknown"), + operatorChars: /^[*\/+\-%<>!=&|^\/#@?~]/, + backslashStringEscapes: false, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant") + }); + + // Google's SQL-like query language, GQL + CodeMirror.defineMIME("text/x-gql", { + name: "sql", + keywords: set("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"), + atoms: set("false true"), + builtin: set("blob datetime first key __key__ string integer double boolean null"), + operatorChars: /^[*+\-%<>!=]/ + }); + + // Greenplum + CodeMirror.defineMIME("text/x-gpsql", { + name: "sql", + client: set("source"), + //https://github.com/greenplum-db/gpdb/blob/master/src/include/parser/kwlist.h + keywords: set("abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone"), + builtin: set("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^\/#@?~]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast") + }); + + // Spark SQL + CodeMirror.defineMIME("text/x-sparksql", { + name: "sql", + keywords: set("add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with"), + builtin: set("abs acos acosh add_months aggregate and any approx_count_distinct approx_percentile array array_contains array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_repeat array_sort array_union arrays_overlap arrays_zip ascii asin asinh assert_true atan atan2 atanh avg base64 between bigint bin binary bit_and bit_count bit_get bit_length bit_or bit_xor bool_and bool_or boolean bround btrim cardinality case cast cbrt ceil ceiling char char_length character_length chr coalesce collect_list collect_set concat concat_ws conv corr cos cosh cot count count_if count_min_sketch covar_pop covar_samp crc32 cume_dist current_catalog current_database current_date current_timestamp current_timezone current_user date date_add date_format date_from_unix_date date_part date_sub date_trunc datediff day dayofmonth dayofweek dayofyear decimal decode degrees delimited dense_rank div double e element_at elt encode every exists exp explode explode_outer expm1 extract factorial filter find_in_set first first_value flatten float floor forall format_number format_string from_csv from_json from_unixtime from_utc_timestamp get_json_object getbit greatest grouping grouping_id hash hex hour hypot if ifnull in initcap inline inline_outer input_file_block_length input_file_block_start input_file_name inputformat instr int isnan isnotnull isnull java_method json_array_length json_object_keys json_tuple kurtosis lag last last_day last_value lcase lead least left length levenshtein like ln locate log log10 log1p log2 lower lpad ltrim make_date make_dt_interval make_interval make_timestamp make_ym_interval map map_concat map_entries map_filter map_from_arrays map_from_entries map_keys map_values map_zip_with max max_by md5 mean min min_by minute mod monotonically_increasing_id month months_between named_struct nanvl negative next_day not now nth_value ntile nullif nvl nvl2 octet_length or outputformat overlay parse_url percent_rank percentile percentile_approx pi pmod posexplode posexplode_outer position positive pow power printf quarter radians raise_error rand randn random rank rcfile reflect regexp regexp_extract regexp_extract_all regexp_like regexp_replace repeat replace reverse right rint rlike round row_number rpad rtrim schema_of_csv schema_of_json second sentences sequence sequencefile serde session_window sha sha1 sha2 shiftleft shiftright shiftrightunsigned shuffle sign signum sin sinh size skewness slice smallint some sort_array soundex space spark_partition_id split sqrt stack std stddev stddev_pop stddev_samp str_to_map string struct substr substring substring_index sum tan tanh textfile timestamp timestamp_micros timestamp_millis timestamp_seconds tinyint to_csv to_date to_json to_timestamp to_unix_timestamp to_utc_timestamp transform transform_keys transform_values translate trim trunc try_add try_divide typeof ucase unbase64 unhex uniontype unix_date unix_micros unix_millis unix_seconds unix_timestamp upper uuid var_pop var_samp variance version weekday weekofyear when width_bucket window xpath xpath_boolean xpath_double xpath_float xpath_int xpath_long xpath_number xpath_short xpath_string xxhash64 year zip_with"), + atoms: set("false true null"), + operatorChars: /^[*\/+\-%<>!=~&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable doubleQuote zerolessFloat") + }); + + // Esper + CodeMirror.defineMIME("text/x-esper", { + name: "sql", + client: set("source"), + // http://www.espertech.com/esper/release-5.5.0/esper-reference/html/appendix_keywords.html + keywords: set("alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window"), + builtin: {}, + atoms: set("false true null"), + operatorChars: /^[*+\-%<>!=&|^\/#@?~]/, + dateSQL: set("time"), + support: set("decimallessFloat zerolessFloat binaryNumber hexNumber") + }); +}); + +/* + How Properties of Mime Types are used by SQL Mode + ================================================= + + keywords: + A list of keywords you want to be highlighted. + builtin: + A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). + operatorChars: + All characters that must be handled as operators. + client: + Commands parsed and executed by the client (not the server). + support: + A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. + * ODBCdotTable: .tableName + * zerolessFloat: .1 + * doubleQuote + * nCharCast: N'string' + * charsetCast: _utf8'string' + * commentHash: use # char for comments + * commentSlashSlash: use // for comments + * commentSpaceRequired: require a space after -- for comments + atoms: + Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: + UNKNOWN, INFINITY, UNDERFLOW, NaN... + dateSQL: + Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. +*/ diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/stex/stex.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/stex/stex.js new file mode 100644 index 0000000000..20c3bc7a18 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/stex/stex.js @@ -0,0 +1,264 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/* + * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de) + * Licence: MIT + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("stex", function(_config, parserConfig) { + "use strict"; + + function pushCommand(state, command) { + state.cmdState.push(command); + } + + function peekCommand(state) { + if (state.cmdState.length > 0) { + return state.cmdState[state.cmdState.length - 1]; + } else { + return null; + } + } + + function popCommand(state) { + var plug = state.cmdState.pop(); + if (plug) { + plug.closeBracket(); + } + } + + // returns the non-default plugin closest to the end of the list + function getMostPowerful(state) { + var context = state.cmdState; + for (var i = context.length - 1; i >= 0; i--) { + var plug = context[i]; + if (plug.name == "DEFAULT") { + continue; + } + return plug; + } + return { styleIdentifier: function() { return null; } }; + } + + function addPluginPattern(pluginName, cmdStyle, styles) { + return function () { + this.name = pluginName; + this.bracketNo = 0; + this.style = cmdStyle; + this.styles = styles; + this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin + + this.styleIdentifier = function() { + return this.styles[this.bracketNo - 1] || null; + }; + this.openBracket = function() { + this.bracketNo++; + return "bracket"; + }; + this.closeBracket = function() {}; + }; + } + + var plugins = {}; + + plugins["importmodule"] = addPluginPattern("importmodule", "tag", ["string", "builtin"]); + plugins["documentclass"] = addPluginPattern("documentclass", "tag", ["", "atom"]); + plugins["usepackage"] = addPluginPattern("usepackage", "tag", ["atom"]); + plugins["begin"] = addPluginPattern("begin", "tag", ["atom"]); + plugins["end"] = addPluginPattern("end", "tag", ["atom"]); + + plugins["label" ] = addPluginPattern("label" , "tag", ["atom"]); + plugins["ref" ] = addPluginPattern("ref" , "tag", ["atom"]); + plugins["eqref" ] = addPluginPattern("eqref" , "tag", ["atom"]); + plugins["cite" ] = addPluginPattern("cite" , "tag", ["atom"]); + plugins["bibitem" ] = addPluginPattern("bibitem" , "tag", ["atom"]); + plugins["Bibitem" ] = addPluginPattern("Bibitem" , "tag", ["atom"]); + plugins["RBibitem" ] = addPluginPattern("RBibitem" , "tag", ["atom"]); + + plugins["DEFAULT"] = function () { + this.name = "DEFAULT"; + this.style = "tag"; + + this.styleIdentifier = this.openBracket = this.closeBracket = function() {}; + }; + + function setState(state, f) { + state.f = f; + } + + // called when in a normal (no environment) context + function normal(source, state) { + var plug; + // Do we look like '\command' ? If so, attempt to apply the plugin 'command' + if (source.match(/^\\[a-zA-Z@]+/)) { + var cmdName = source.current().slice(1); + plug = plugins.hasOwnProperty(cmdName) ? plugins[cmdName] : plugins["DEFAULT"]; + plug = new plug(); + pushCommand(state, plug); + setState(state, beginParams); + return plug.style; + } + + // escape characters + if (source.match(/^\\[$&%#{}_]/)) { + return "tag"; + } + + // white space control characters + if (source.match(/^\\[,;!\/\\]/)) { + return "tag"; + } + + // find if we're starting various math modes + if (source.match("\\[")) { + setState(state, function(source, state){ return inMathMode(source, state, "\\]"); }); + return "keyword"; + } + if (source.match("\\(")) { + setState(state, function(source, state){ return inMathMode(source, state, "\\)"); }); + return "keyword"; + } + if (source.match("$$")) { + setState(state, function(source, state){ return inMathMode(source, state, "$$"); }); + return "keyword"; + } + if (source.match("$")) { + setState(state, function(source, state){ return inMathMode(source, state, "$"); }); + return "keyword"; + } + + var ch = source.next(); + if (ch == "%") { + source.skipToEnd(); + return "comment"; + } else if (ch == '}' || ch == ']') { + plug = peekCommand(state); + if (plug) { + plug.closeBracket(ch); + setState(state, beginParams); + } else { + return "error"; + } + return "bracket"; + } else if (ch == '{' || ch == '[') { + plug = plugins["DEFAULT"]; + plug = new plug(); + pushCommand(state, plug); + return "bracket"; + } else if (/\d/.test(ch)) { + source.eatWhile(/[\w.%]/); + return "atom"; + } else { + source.eatWhile(/[\w\-_]/); + plug = getMostPowerful(state); + if (plug.name == 'begin') { + plug.argument = source.current(); + } + return plug.styleIdentifier(); + } + } + + function inMathMode(source, state, endModeSeq) { + if (source.eatSpace()) { + return null; + } + if (endModeSeq && source.match(endModeSeq)) { + setState(state, normal); + return "keyword"; + } + if (source.match(/^\\[a-zA-Z@]+/)) { + return "tag"; + } + if (source.match(/^[a-zA-Z]+/)) { + return "variable-2"; + } + // escape characters + if (source.match(/^\\[$&%#{}_]/)) { + return "tag"; + } + // white space control characters + if (source.match(/^\\[,;!\/]/)) { + return "tag"; + } + // special math-mode characters + if (source.match(/^[\^_&]/)) { + return "tag"; + } + // non-special characters + if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) { + return null; + } + if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) { + return "number"; + } + var ch = source.next(); + if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") { + return "bracket"; + } + + if (ch == "%") { + source.skipToEnd(); + return "comment"; + } + return "error"; + } + + function beginParams(source, state) { + var ch = source.peek(), lastPlug; + if (ch == '{' || ch == '[') { + lastPlug = peekCommand(state); + lastPlug.openBracket(ch); + source.eat(ch); + setState(state, normal); + return "bracket"; + } + if (/[ \t\r]/.test(ch)) { + source.eat(ch); + return null; + } + setState(state, normal); + popCommand(state); + + return normal(source, state); + } + + return { + startState: function() { + var f = parserConfig.inMathMode ? function(source, state){ return inMathMode(source, state); } : normal; + return { + cmdState: [], + f: f + }; + }, + copyState: function(s) { + return { + cmdState: s.cmdState.slice(), + f: s.f + }; + }, + token: function(stream, state) { + return state.f(stream, state); + }, + blankLine: function(state) { + state.f = normal; + state.cmdState.length = 0; + }, + lineComment: "%" + }; + }); + + CodeMirror.defineMIME("text/x-stex", "stex"); + CodeMirror.defineMIME("text/x-latex", "stex"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/stylus/stylus.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/stylus/stylus.js new file mode 100644 index 0000000000..978696bddd --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/stylus/stylus.js @@ -0,0 +1,775 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Stylus mode created by Dmitry Kiselyov http://git.io/AaRB + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("stylus", function(config) { + var indentUnit = config.indentUnit, + indentUnitString = '', + tagKeywords = keySet(tagKeywords_), + tagVariablesRegexp = /^(a|b|i|s|col|em)$/i, + propertyKeywords = keySet(propertyKeywords_), + nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_), + valueKeywords = keySet(valueKeywords_), + colorKeywords = keySet(colorKeywords_), + documentTypes = keySet(documentTypes_), + documentTypesRegexp = wordRegexp(documentTypes_), + mediaFeatures = keySet(mediaFeatures_), + mediaTypes = keySet(mediaTypes_), + fontProperties = keySet(fontProperties_), + operatorsRegexp = /^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/, + wordOperatorKeywordsRegexp = wordRegexp(wordOperatorKeywords_), + blockKeywords = keySet(blockKeywords_), + vendorPrefixesRegexp = new RegExp(/^\-(moz|ms|o|webkit)-/i), + commonAtoms = keySet(commonAtoms_), + firstWordMatch = "", + states = {}, + ch, + style, + type, + override; + + while (indentUnitString.length < indentUnit) indentUnitString += ' '; + + /** + * Tokenizers + */ + function tokenBase(stream, state) { + firstWordMatch = stream.string.match(/(^[\w-]+\s*=\s*$)|(^\s*[\w-]+\s*=\s*[\w-])|(^\s*(\.|#|@|\$|\&|\[|\d|\+|::?|\{|\>|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/); + state.context.line.firstWord = firstWordMatch ? firstWordMatch[0].replace(/^\s*/, "") : ""; + state.context.line.indent = stream.indentation(); + ch = stream.peek(); + + // Line comment + if (stream.match("//")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } + // Block comment + if (stream.match("/*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + // String + if (ch == "\"" || ch == "'") { + stream.next(); + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + // Def + if (ch == "@") { + stream.next(); + stream.eatWhile(/[\w\\-]/); + return ["def", stream.current()]; + } + // ID selector or Hex color + if (ch == "#") { + stream.next(); + // Hex color + if (stream.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\b(?!-)/i)) { + return ["atom", "atom"]; + } + // ID selector + if (stream.match(/^[a-z][\w-]*/i)) { + return ["builtin", "hash"]; + } + } + // Vendor prefixes + if (stream.match(vendorPrefixesRegexp)) { + return ["meta", "vendor-prefixes"]; + } + // Numbers + if (stream.match(/^-?[0-9]?\.?[0-9]/)) { + stream.eatWhile(/[a-z%]/i); + return ["number", "unit"]; + } + // !important|optional + if (ch == "!") { + stream.next(); + return [stream.match(/^(important|optional)/i) ? "keyword": "operator", "important"]; + } + // Class + if (ch == "." && stream.match(/^\.[a-z][\w-]*/i)) { + return ["qualifier", "qualifier"]; + } + // url url-prefix domain regexp + if (stream.match(documentTypesRegexp)) { + if (stream.peek() == "(") state.tokenize = tokenParenthesized; + return ["property", "word"]; + } + // Mixins / Functions + if (stream.match(/^[a-z][\w-]*\(/i)) { + stream.backUp(1); + return ["keyword", "mixin"]; + } + // Block mixins + if (stream.match(/^(\+|-)[a-z][\w-]*\(/i)) { + stream.backUp(1); + return ["keyword", "block-mixin"]; + } + // Parent Reference BEM naming + if (stream.string.match(/^\s*&/) && stream.match(/^[-_]+[a-z][\w-]*/)) { + return ["qualifier", "qualifier"]; + } + // / Root Reference & Parent Reference + if (stream.match(/^(\/|&)(-|_|:|\.|#|[a-z])/)) { + stream.backUp(1); + return ["variable-3", "reference"]; + } + if (stream.match(/^&{1}\s*$/)) { + return ["variable-3", "reference"]; + } + // Word operator + if (stream.match(wordOperatorKeywordsRegexp)) { + return ["operator", "operator"]; + } + // Word + if (stream.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i)) { + // Variable + if (stream.match(/^(\.|\[)[\w-\'\"\]]+/i, false)) { + if (!wordIsTag(stream.current())) { + stream.match('.'); + return ["variable-2", "variable-name"]; + } + } + return ["variable-2", "word"]; + } + // Operators + if (stream.match(operatorsRegexp)) { + return ["operator", stream.current()]; + } + // Delimiters + if (/[:;,{}\[\]\(\)]/.test(ch)) { + stream.next(); + return [null, ch]; + } + // Non-detected items + stream.next(); + return [null, null]; + } + + /** + * Token comment + */ + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + /** + * Token string + */ + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + if (quote == ")") stream.backUp(1); + break; + } + escaped = !escaped && ch == "\\"; + } + if (ch == quote || !escaped && quote != ")") state.tokenize = null; + return ["string", "string"]; + }; + } + + /** + * Token parenthesized + */ + function tokenParenthesized(stream, state) { + stream.next(); // Must be "(" + if (!stream.match(/\s*[\"\')]/, false)) + state.tokenize = tokenString(")"); + else + state.tokenize = null; + return [null, "("]; + } + + /** + * Context management + */ + function Context(type, indent, prev, line) { + this.type = type; + this.indent = indent; + this.prev = prev; + this.line = line || {firstWord: "", indent: 0}; + } + + function pushContext(state, stream, type, indent) { + indent = indent >= 0 ? indent : indentUnit; + state.context = new Context(type, stream.indentation() + indent, state.context); + return type; + } + + function popContext(state, currentIndent) { + var contextIndent = state.context.indent - indentUnit; + currentIndent = currentIndent || false; + state.context = state.context.prev; + if (currentIndent) state.context.indent = contextIndent; + return state.context.type; + } + + function pass(type, stream, state) { + return states[state.context.type](type, stream, state); + } + + function popAndPass(type, stream, state, n) { + for (var i = n || 1; i > 0; i--) + state.context = state.context.prev; + return pass(type, stream, state); + } + + + /** + * Parser + */ + function wordIsTag(word) { + return word.toLowerCase() in tagKeywords; + } + + function wordIsProperty(word) { + word = word.toLowerCase(); + return word in propertyKeywords || word in fontProperties; + } + + function wordIsBlock(word) { + return word.toLowerCase() in blockKeywords; + } + + function wordIsVendorPrefix(word) { + return word.toLowerCase().match(vendorPrefixesRegexp); + } + + function wordAsValue(word) { + var wordLC = word.toLowerCase(); + var override = "variable-2"; + if (wordIsTag(word)) override = "tag"; + else if (wordIsBlock(word)) override = "block-keyword"; + else if (wordIsProperty(word)) override = "property"; + else if (wordLC in valueKeywords || wordLC in commonAtoms) override = "atom"; + else if (wordLC == "return" || wordLC in colorKeywords) override = "keyword"; + + // Font family + else if (word.match(/^[A-Z]/)) override = "string"; + return override; + } + + function typeIsBlock(type, stream) { + return ((endOfLine(stream) && (type == "{" || type == "]" || type == "hash" || type == "qualifier")) || type == "block-mixin"); + } + + function typeIsInterpolation(type, stream) { + return type == "{" && stream.match(/^\s*\$?[\w-]+/i, false); + } + + function typeIsPseudo(type, stream) { + return type == ":" && stream.match(/^[a-z-]+/, false); + } + + function startOfLine(stream) { + return stream.sol() || stream.string.match(new RegExp("^\\s*" + escapeRegExp(stream.current()))); + } + + function endOfLine(stream) { + return stream.eol() || stream.match(/^\s*$/, false); + } + + function firstWordOfLine(line) { + var re = /^\s*[-_]*[a-z0-9]+[\w-]*/i; + var result = typeof line == "string" ? line.match(re) : line.string.match(re); + return result ? result[0].replace(/^\s*/, "") : ""; + } + + + /** + * Block + */ + states.block = function(type, stream, state) { + if ((type == "comment" && startOfLine(stream)) || + (type == "," && endOfLine(stream)) || + type == "mixin") { + return pushContext(state, stream, "block", 0); + } + if (typeIsInterpolation(type, stream)) { + return pushContext(state, stream, "interpolation"); + } + if (endOfLine(stream) && type == "]") { + if (!/^\s*(\.|#|:|\[|\*|&)/.test(stream.string) && !wordIsTag(firstWordOfLine(stream))) { + return pushContext(state, stream, "block", 0); + } + } + if (typeIsBlock(type, stream)) { + return pushContext(state, stream, "block"); + } + if (type == "}" && endOfLine(stream)) { + return pushContext(state, stream, "block", 0); + } + if (type == "variable-name") { + if (stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/) || wordIsBlock(firstWordOfLine(stream))) { + return pushContext(state, stream, "variableName"); + } + else { + return pushContext(state, stream, "variableName", 0); + } + } + if (type == "=") { + if (!endOfLine(stream) && !wordIsBlock(firstWordOfLine(stream))) { + return pushContext(state, stream, "block", 0); + } + return pushContext(state, stream, "block"); + } + if (type == "*") { + if (endOfLine(stream) || stream.match(/\s*(,|\.|#|\[|:|{)/,false)) { + override = "tag"; + return pushContext(state, stream, "block"); + } + } + if (typeIsPseudo(type, stream)) { + return pushContext(state, stream, "pseudo"); + } + if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) { + return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); + } + if (/@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { + return pushContext(state, stream, "keyframes"); + } + if (/@extends?/.test(type)) { + return pushContext(state, stream, "extend", 0); + } + if (type && type.charAt(0) == "@") { + + // Property Lookup + if (stream.indentation() > 0 && wordIsProperty(stream.current().slice(1))) { + override = "variable-2"; + return "block"; + } + if (/(@import|@require|@charset)/.test(type)) { + return pushContext(state, stream, "block", 0); + } + return pushContext(state, stream, "block"); + } + if (type == "reference" && endOfLine(stream)) { + return pushContext(state, stream, "block"); + } + if (type == "(") { + return pushContext(state, stream, "parens"); + } + + if (type == "vendor-prefixes") { + return pushContext(state, stream, "vendorPrefixes"); + } + if (type == "word") { + var word = stream.current(); + override = wordAsValue(word); + + if (override == "property") { + if (startOfLine(stream)) { + return pushContext(state, stream, "block", 0); + } else { + override = "atom"; + return "block"; + } + } + + if (override == "tag") { + + // tag is a css value + if (/embed|menu|pre|progress|sub|table/.test(word)) { + if (wordIsProperty(firstWordOfLine(stream))) { + override = "atom"; + return "block"; + } + } + + // tag is an attribute + if (stream.string.match(new RegExp("\\[\\s*" + word + "|" + word +"\\s*\\]"))) { + override = "atom"; + return "block"; + } + + // tag is a variable + if (tagVariablesRegexp.test(word)) { + if ((startOfLine(stream) && stream.string.match(/=/)) || + (!startOfLine(stream) && + !stream.string.match(/^(\s*\.|#|\&|\[|\/|>|\*)/) && + !wordIsTag(firstWordOfLine(stream)))) { + override = "variable-2"; + if (wordIsBlock(firstWordOfLine(stream))) return "block"; + return pushContext(state, stream, "block", 0); + } + } + + if (endOfLine(stream)) return pushContext(state, stream, "block"); + } + if (override == "block-keyword") { + override = "keyword"; + + // Postfix conditionals + if (stream.current(/(if|unless)/) && !startOfLine(stream)) { + return "block"; + } + return pushContext(state, stream, "block"); + } + if (word == "return") return pushContext(state, stream, "block", 0); + + // Placeholder selector + if (override == "variable-2" && stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/)) { + return pushContext(state, stream, "block"); + } + } + return state.context.type; + }; + + + /** + * Parens + */ + states.parens = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "parens"); + if (type == ")") { + if (state.context.prev.type == "parens") { + return popContext(state); + } + if ((stream.string.match(/^[a-z][\w-]*\(/i) && endOfLine(stream)) || + wordIsBlock(firstWordOfLine(stream)) || + /(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(firstWordOfLine(stream)) || + (!stream.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/) && + wordIsTag(firstWordOfLine(stream)))) { + return pushContext(state, stream, "block"); + } + if (stream.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/) || + stream.string.match(/^\s*(\(|\)|[0-9])/) || + stream.string.match(/^\s+[a-z][\w-]*\(/i) || + stream.string.match(/^\s+[\$-]?[a-z]/i)) { + return pushContext(state, stream, "block", 0); + } + if (endOfLine(stream)) return pushContext(state, stream, "block"); + else return pushContext(state, stream, "block", 0); + } + if (type && type.charAt(0) == "@" && wordIsProperty(stream.current().slice(1))) { + override = "variable-2"; + } + if (type == "word") { + var word = stream.current(); + override = wordAsValue(word); + if (override == "tag" && tagVariablesRegexp.test(word)) { + override = "variable-2"; + } + if (override == "property" || word == "to") override = "atom"; + } + if (type == "variable-name") { + return pushContext(state, stream, "variableName"); + } + if (typeIsPseudo(type, stream)) { + return pushContext(state, stream, "pseudo"); + } + return state.context.type; + }; + + + /** + * Vendor prefixes + */ + states.vendorPrefixes = function(type, stream, state) { + if (type == "word") { + override = "property"; + return pushContext(state, stream, "block", 0); + } + return popContext(state); + }; + + + /** + * Pseudo + */ + states.pseudo = function(type, stream, state) { + if (!wordIsProperty(firstWordOfLine(stream.string))) { + stream.match(/^[a-z-]+/); + override = "variable-3"; + if (endOfLine(stream)) return pushContext(state, stream, "block"); + return popContext(state); + } + return popAndPass(type, stream, state); + }; + + + /** + * atBlock + */ + states.atBlock = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "atBlock_parens"); + if (typeIsBlock(type, stream)) { + return pushContext(state, stream, "block"); + } + if (typeIsInterpolation(type, stream)) { + return pushContext(state, stream, "interpolation"); + } + if (type == "word") { + var word = stream.current().toLowerCase(); + if (/^(only|not|and|or)$/.test(word)) + override = "keyword"; + else if (documentTypes.hasOwnProperty(word)) + override = "tag"; + else if (mediaTypes.hasOwnProperty(word)) + override = "attribute"; + else if (mediaFeatures.hasOwnProperty(word)) + override = "property"; + else if (nonStandardPropertyKeywords.hasOwnProperty(word)) + override = "string-2"; + else override = wordAsValue(stream.current()); + if (override == "tag" && endOfLine(stream)) { + return pushContext(state, stream, "block"); + } + } + if (type == "operator" && /^(not|and|or)$/.test(stream.current())) { + override = "keyword"; + } + return state.context.type; + }; + + states.atBlock_parens = function(type, stream, state) { + if (type == "{" || type == "}") return state.context.type; + if (type == ")") { + if (endOfLine(stream)) return pushContext(state, stream, "block"); + else return pushContext(state, stream, "atBlock"); + } + if (type == "word") { + var word = stream.current().toLowerCase(); + override = wordAsValue(word); + if (/^(max|min)/.test(word)) override = "property"; + if (override == "tag") { + tagVariablesRegexp.test(word) ? override = "variable-2" : override = "atom"; + } + return state.context.type; + } + return states.atBlock(type, stream, state); + }; + + + /** + * Keyframes + */ + states.keyframes = function(type, stream, state) { + if (stream.indentation() == "0" && ((type == "}" && startOfLine(stream)) || type == "]" || type == "hash" + || type == "qualifier" || wordIsTag(stream.current()))) { + return popAndPass(type, stream, state); + } + if (type == "{") return pushContext(state, stream, "keyframes"); + if (type == "}") { + if (startOfLine(stream)) return popContext(state, true); + else return pushContext(state, stream, "keyframes"); + } + if (type == "unit" && /^[0-9]+\%$/.test(stream.current())) { + return pushContext(state, stream, "keyframes"); + } + if (type == "word") { + override = wordAsValue(stream.current()); + if (override == "block-keyword") { + override = "keyword"; + return pushContext(state, stream, "keyframes"); + } + } + if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) { + return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); + } + if (type == "mixin") { + return pushContext(state, stream, "block", 0); + } + return state.context.type; + }; + + + /** + * Interpolation + */ + states.interpolation = function(type, stream, state) { + if (type == "{") popContext(state) && pushContext(state, stream, "block"); + if (type == "}") { + if (stream.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i) || + (stream.string.match(/^\s*[a-z]/i) && wordIsTag(firstWordOfLine(stream)))) { + return pushContext(state, stream, "block"); + } + if (!stream.string.match(/^(\{|\s*\&)/) || + stream.match(/\s*[\w-]/,false)) { + return pushContext(state, stream, "block", 0); + } + return pushContext(state, stream, "block"); + } + if (type == "variable-name") { + return pushContext(state, stream, "variableName", 0); + } + if (type == "word") { + override = wordAsValue(stream.current()); + if (override == "tag") override = "atom"; + } + return state.context.type; + }; + + + /** + * Extend/s + */ + states.extend = function(type, stream, state) { + if (type == "[" || type == "=") return "extend"; + if (type == "]") return popContext(state); + if (type == "word") { + override = wordAsValue(stream.current()); + return "extend"; + } + return popContext(state); + }; + + + /** + * Variable name + */ + states.variableName = function(type, stream, state) { + if (type == "string" || type == "[" || type == "]" || stream.current().match(/^(\.|\$)/)) { + if (stream.current().match(/^\.[\w-]+/i)) override = "variable-2"; + return "variableName"; + } + return popAndPass(type, stream, state); + }; + + + return { + startState: function(base) { + return { + tokenize: null, + state: "block", + context: new Context("block", base || 0, null) + }; + }, + token: function(stream, state) { + if (!state.tokenize && stream.eatSpace()) return null; + style = (state.tokenize || tokenBase)(stream, state); + if (style && typeof style == "object") { + type = style[1]; + style = style[0]; + } + override = style; + state.state = states[state.state](type, stream, state); + return override; + }, + indent: function(state, textAfter, line) { + + var cx = state.context, + ch = textAfter && textAfter.charAt(0), + indent = cx.indent, + lineFirstWord = firstWordOfLine(textAfter), + lineIndent = line.match(/^\s*/)[0].replace(/\t/g, indentUnitString).length, + prevLineFirstWord = state.context.prev ? state.context.prev.line.firstWord : "", + prevLineIndent = state.context.prev ? state.context.prev.line.indent : lineIndent; + + if (cx.prev && + (ch == "}" && (cx.type == "block" || cx.type == "atBlock" || cx.type == "keyframes") || + ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || + ch == "{" && (cx.type == "at"))) { + indent = cx.indent - indentUnit; + } else if (!(/(\})/.test(ch))) { + if (/@|\$|\d/.test(ch) || + /^\{/.test(textAfter) || +/^\s*\/(\/|\*)/.test(textAfter) || + /^\s*\/\*/.test(prevLineFirstWord) || + /^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(textAfter) || +/^(\+|-)?[a-z][\w-]*\(/i.test(textAfter) || +/^return/.test(textAfter) || + wordIsBlock(lineFirstWord)) { + indent = lineIndent; + } else if (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(ch) || wordIsTag(lineFirstWord)) { + if (/\,\s*$/.test(prevLineFirstWord)) { + indent = prevLineIndent; + } else if (/^\s+/.test(line) && (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord))) { + indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; + } else { + indent = lineIndent; + } + } else if (!/,\s*$/.test(line) && (wordIsVendorPrefix(lineFirstWord) || wordIsProperty(lineFirstWord))) { + if (wordIsBlock(prevLineFirstWord)) { + indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; + } else if (/^\{/.test(prevLineFirstWord)) { + indent = lineIndent <= prevLineIndent ? lineIndent : prevLineIndent + indentUnit; + } else if (wordIsVendorPrefix(prevLineFirstWord) || wordIsProperty(prevLineFirstWord)) { + indent = lineIndent >= prevLineIndent ? prevLineIndent : lineIndent; + } else if (/^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(prevLineFirstWord) || + /=\s*$/.test(prevLineFirstWord) || + wordIsTag(prevLineFirstWord) || + /^\$[\w-\.\[\]\'\"]/.test(prevLineFirstWord)) { + indent = prevLineIndent + indentUnit; + } else { + indent = lineIndent; + } + } + } + return indent; + }, + electricChars: "}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + blockCommentContinue: " * ", + lineComment: "//", + fold: "indent" + }; + }); + + // developer.mozilla.org/en-US/docs/Web/HTML/Element + var tagKeywords_ = ["a","abbr","address","area","article","aside","audio", "b", "base","bdi", "bdo","bgsound","blockquote","body","br","button","canvas","caption","cite", "code","col","colgroup","data","datalist","dd","del","details","dfn","div", "dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1", "h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe", "img","input","ins","kbd","keygen","label","legend","li","link","main","map", "mark","marquee","menu","menuitem","meta","meter","nav","nobr","noframes", "noscript","object","ol","optgroup","option","output","p","param","pre", "progress","q","rp","rt","ruby","s","samp","script","section","select", "small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track", "u","ul","var","video"]; + + // github.com/codemirror/CodeMirror/blob/master/mode/css/css.js + // Note, "url-prefix" should precede "url" in order to match correctly in documentTypesRegexp + var documentTypes_ = ["domain", "regexp", "url-prefix", "url"]; + var mediaTypes_ = ["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"]; + var mediaFeatures_ = ["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","dynamic-range","video-dynamic-range"]; + var propertyKeywords_ = ["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode","font-smoothing","osx-font-smoothing"]; + var nonStandardPropertyKeywords_ = ["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"]; + var fontProperties_ = ["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]; + var colorKeywords_ = ["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"]; + var valueKeywords_ = ["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","conic-gradient","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","high","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeating-conic-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scale","scale3d","scaleX","scaleY","scaleZ","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","spell-out","square","square-button","standard","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","x-large","x-small","xor","xx-large","xx-small","bicubic","optimizespeed","grayscale","row","row-reverse","wrap","wrap-reverse","column-reverse","flex-start","flex-end","space-between","space-around", "unset"]; + + var wordOperatorKeywords_ = ["in","and","or","not","is not","is a","is","isnt","defined","if unless"], + blockKeywords_ = ["for","if","else","unless", "from", "to"], + commonAtoms_ = ["null","true","false","href","title","type","not-allowed","readonly","disabled"], + commonDef_ = ["@font-face", "@keyframes", "@media", "@viewport", "@page", "@host", "@supports", "@block", "@css"]; + + var hintWords = tagKeywords_.concat(documentTypes_,mediaTypes_,mediaFeatures_, + propertyKeywords_,nonStandardPropertyKeywords_, + colorKeywords_,valueKeywords_,fontProperties_, + wordOperatorKeywords_,blockKeywords_, + commonAtoms_,commonDef_); + + function wordRegexp(words) { + words = words.sort(function(a,b){return b > a;}); + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) keys[array[i]] = true; + return keys; + } + + function escapeRegExp(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + } + + CodeMirror.registerHelper("hintWords", "stylus", hintWords); + CodeMirror.defineMIME("text/x-styl", "stylus"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/swift/swift.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/swift/swift.js new file mode 100644 index 0000000000..55e31e2708 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/swift/swift.js @@ -0,0 +1,223 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Swift mode created by Michael Kaminsky https://github.com/mkaminsky11 + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") + mod(require("../../lib/codemirror")) + else if (typeof define == "function" && define.amd) + define(["../../lib/codemirror"], mod) + else + mod(CodeMirror) +})(function(CodeMirror) { + "use strict" + + function wordSet(words) { + var set = {} + for (var i = 0; i < words.length; i++) set[words[i]] = true + return set + } + + var keywords = wordSet(["_","var","let","class","enum","extension","import","protocol","struct","func","typealias","associatedtype", + "open","public","internal","fileprivate","private","deinit","init","new","override","self","subscript","super", + "convenience","dynamic","final","indirect","lazy","required","static","unowned","unowned(safe)","unowned(unsafe)","weak","as","is", + "break","case","continue","default","else","fallthrough","for","guard","if","in","repeat","switch","where","while", + "defer","return","inout","mutating","nonmutating","catch","do","rethrows","throw","throws","try","didSet","get","set","willSet", + "assignment","associativity","infix","left","none","operator","postfix","precedence","precedencegroup","prefix","right", + "Any","AnyObject","Type","dynamicType","Self","Protocol","__COLUMN__","__FILE__","__FUNCTION__","__LINE__"]) + var definingKeywords = wordSet(["var","let","class","enum","extension","import","protocol","struct","func","typealias","associatedtype","for"]) + var atoms = wordSet(["true","false","nil","self","super","_"]) + var types = wordSet(["Array","Bool","Character","Dictionary","Double","Float","Int","Int8","Int16","Int32","Int64","Never","Optional","Set","String", + "UInt8","UInt16","UInt32","UInt64","Void"]) + var operators = "+-/*%=|&<>~^?!" + var punc = ":;,.(){}[]" + var binary = /^\-?0b[01][01_]*/ + var octal = /^\-?0o[0-7][0-7_]*/ + var hexadecimal = /^\-?0x[\dA-Fa-f][\dA-Fa-f_]*(?:(?:\.[\dA-Fa-f][\dA-Fa-f_]*)?[Pp]\-?\d[\d_]*)?/ + var decimal = /^\-?\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee]\-?\d[\d_]*)?/ + var identifier = /^\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1/ + var property = /^\.(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/ + var instruction = /^\#[A-Za-z]+/ + var attribute = /^@(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/ + //var regexp = /^\/(?!\s)(?:\/\/)?(?:\\.|[^\/])+\// + + function tokenBase(stream, state, prev) { + if (stream.sol()) state.indented = stream.indentation() + if (stream.eatSpace()) return null + + var ch = stream.peek() + if (ch == "/") { + if (stream.match("//")) { + stream.skipToEnd() + return "comment" + } + if (stream.match("/*")) { + state.tokenize.push(tokenComment) + return tokenComment(stream, state) + } + } + if (stream.match(instruction)) return "builtin" + if (stream.match(attribute)) return "attribute" + if (stream.match(binary)) return "number" + if (stream.match(octal)) return "number" + if (stream.match(hexadecimal)) return "number" + if (stream.match(decimal)) return "number" + if (stream.match(property)) return "property" + if (operators.indexOf(ch) > -1) { + stream.next() + return "operator" + } + if (punc.indexOf(ch) > -1) { + stream.next() + stream.match("..") + return "punctuation" + } + var stringMatch + if (stringMatch = stream.match(/("""|"|')/)) { + var tokenize = tokenString.bind(null, stringMatch[0]) + state.tokenize.push(tokenize) + return tokenize(stream, state) + } + + if (stream.match(identifier)) { + var ident = stream.current() + if (types.hasOwnProperty(ident)) return "variable-2" + if (atoms.hasOwnProperty(ident)) return "atom" + if (keywords.hasOwnProperty(ident)) { + if (definingKeywords.hasOwnProperty(ident)) + state.prev = "define" + return "keyword" + } + if (prev == "define") return "def" + return "variable" + } + + stream.next() + return null + } + + function tokenUntilClosingParen() { + var depth = 0 + return function(stream, state, prev) { + var inner = tokenBase(stream, state, prev) + if (inner == "punctuation") { + if (stream.current() == "(") ++depth + else if (stream.current() == ")") { + if (depth == 0) { + stream.backUp(1) + state.tokenize.pop() + return state.tokenize[state.tokenize.length - 1](stream, state) + } + else --depth + } + } + return inner + } + } + + function tokenString(openQuote, stream, state) { + var singleLine = openQuote.length == 1 + var ch, escaped = false + while (ch = stream.peek()) { + if (escaped) { + stream.next() + if (ch == "(") { + state.tokenize.push(tokenUntilClosingParen()) + return "string" + } + escaped = false + } else if (stream.match(openQuote)) { + state.tokenize.pop() + return "string" + } else { + stream.next() + escaped = ch == "\\" + } + } + if (singleLine) { + state.tokenize.pop() + } + return "string" + } + + function tokenComment(stream, state) { + var ch + while (true) { + stream.match(/^[^/*]+/, true) + ch = stream.next() + if (!ch) break + if (ch === "/" && stream.eat("*")) { + state.tokenize.push(tokenComment) + } else if (ch === "*" && stream.eat("/")) { + state.tokenize.pop() + } + } + return "comment" + } + + function Context(prev, align, indented) { + this.prev = prev + this.align = align + this.indented = indented + } + + function pushContext(state, stream) { + var align = stream.match(/^\s*($|\/[\/\*])/, false) ? null : stream.column() + 1 + state.context = new Context(state.context, align, state.indented) + } + + function popContext(state) { + if (state.context) { + state.indented = state.context.indented + state.context = state.context.prev + } + } + + CodeMirror.defineMode("swift", function(config) { + return { + startState: function() { + return { + prev: null, + context: null, + indented: 0, + tokenize: [] + } + }, + + token: function(stream, state) { + var prev = state.prev + state.prev = null + var tokenize = state.tokenize[state.tokenize.length - 1] || tokenBase + var style = tokenize(stream, state, prev) + if (!style || style == "comment") state.prev = prev + else if (!state.prev) state.prev = style + + if (style == "punctuation") { + var bracket = /[\(\[\{]|([\]\)\}])/.exec(stream.current()) + if (bracket) (bracket[1] ? popContext : pushContext)(state, stream) + } + + return style + }, + + indent: function(state, textAfter) { + var cx = state.context + if (!cx) return 0 + var closing = /^[\]\}\)]/.test(textAfter) + if (cx.align != null) return cx.align - (closing ? 1 : 0) + return cx.indented + (closing ? 0 : config.indentUnit) + }, + + electricInput: /^\s*[\)\}\]]$/, + + lineComment: "//", + blockCommentStart: "/*", + blockCommentEnd: "*/", + fold: "brace", + closeBrackets: "()[]{}''\"\"``" + } + }) + + CodeMirror.defineMIME("text/x-swift","swift") +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tcl/tcl.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tcl/tcl.js new file mode 100644 index 0000000000..dec0662a60 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tcl/tcl.js @@ -0,0 +1,140 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +//tcl mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("tcl", function() { + function parseWords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var keywords = parseWords("Tcl safe after append array auto_execok auto_import auto_load " + + "auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror " + + "binary break catch cd close concat continue dde eof encoding error " + + "eval exec exit expr fblocked fconfigure fcopy file fileevent filename " + + "filename flush for foreach format gets glob global history http if " + + "incr info interp join lappend lindex linsert list llength load lrange " + + "lreplace lsearch lset lsort memory msgcat namespace open package parray " + + "pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp " + + "registry regsub rename resource return scan seek set socket source split " + + "string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord " + + "tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest " + + "tclvars tell time trace unknown unset update uplevel upvar variable " + + "vwait"); + var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); + var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + function tokenBase(stream, state) { + var beforeParams = state.beforeParams; + state.beforeParams = false; + var ch = stream.next(); + if ((ch == '"' || ch == "'") && state.inParams) { + return chain(stream, state, tokenString(ch)); + } else if (/[\[\]{}\(\),;\.]/.test(ch)) { + if (ch == "(" && beforeParams) state.inParams = true; + else if (ch == ")") state.inParams = false; + return null; + } else if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } else if (ch == "#") { + if (stream.eat("*")) + return chain(stream, state, tokenComment); + if (ch == "#" && stream.match(/ *\[ *\[/)) + return chain(stream, state, tokenUnparsed); + stream.skipToEnd(); + return "comment"; + } else if (ch == '"') { + stream.skipTo(/"/); + return "comment"; + } else if (ch == "$") { + stream.eatWhile(/[$_a-z0-9A-Z\.{:]/); + stream.eatWhile(/}/); + state.beforeParams = true; + return "builtin"; + } else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "comment"; + } else { + stream.eatWhile(/[\w\$_{}\xa1-\uffff]/); + var word = stream.current().toLowerCase(); + if (keywords && keywords.propertyIsEnumerable(word)) + return "keyword"; + if (functions && functions.propertyIsEnumerable(word)) { + state.beforeParams = true; + return "keyword"; + } + return null; + } + } + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) { + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end) state.tokenize = tokenBase; + return "string"; + }; + } + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + function tokenUnparsed(stream, state) { + var maybeEnd = 0, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd == 2) { + state.tokenize = tokenBase; + break; + } + if (ch == "]") + maybeEnd++; + else if (ch != " ") + maybeEnd = 0; + } + return "meta"; + } + return { + startState: function() { + return { + tokenize: tokenBase, + beforeParams: false, + inParams: false + }; + }, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + }, + lineComment: "#" + }; +}); +CodeMirror.defineMIME("text/x-tcl", "tcl"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/textile/textile.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/textile/textile.js new file mode 100644 index 0000000000..b378fb61f5 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/textile/textile.js @@ -0,0 +1,469 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") { // CommonJS + mod(require("../../lib/codemirror")); + } else if (typeof define == "function" && define.amd) { // AMD + define(["../../lib/codemirror"], mod); + } else { // Plain browser env + mod(CodeMirror); + } +})(function(CodeMirror) { + "use strict"; + + var TOKEN_STYLES = { + addition: "positive", + attributes: "attribute", + bold: "strong", + cite: "keyword", + code: "atom", + definitionList: "number", + deletion: "negative", + div: "punctuation", + em: "em", + footnote: "variable", + footCite: "qualifier", + header: "header", + html: "comment", + image: "string", + italic: "em", + link: "link", + linkDefinition: "link", + list1: "variable-2", + list2: "variable-3", + list3: "keyword", + notextile: "string-2", + pre: "operator", + p: "property", + quote: "bracket", + span: "quote", + specialChar: "tag", + strong: "strong", + sub: "builtin", + sup: "builtin", + table: "variable-3", + tableHeading: "operator" + }; + + function startNewLine(stream, state) { + state.mode = Modes.newLayout; + state.tableHeading = false; + + if (state.layoutType === "definitionList" && state.spanningLayout && + stream.match(RE("definitionListEnd"), false)) + state.spanningLayout = false; + } + + function handlePhraseModifier(stream, state, ch) { + if (ch === "_") { + if (stream.eat("_")) + return togglePhraseModifier(stream, state, "italic", /__/, 2); + else + return togglePhraseModifier(stream, state, "em", /_/, 1); + } + + if (ch === "*") { + if (stream.eat("*")) { + return togglePhraseModifier(stream, state, "bold", /\*\*/, 2); + } + return togglePhraseModifier(stream, state, "strong", /\*/, 1); + } + + if (ch === "[") { + if (stream.match(/\d+\]/)) state.footCite = true; + return tokenStyles(state); + } + + if (ch === "(") { + var spec = stream.match(/^(r|tm|c)\)/); + if (spec) + return tokenStylesWith(state, TOKEN_STYLES.specialChar); + } + + if (ch === "<" && stream.match(/(\w+)[^>]+>[^<]+<\/\1>/)) + return tokenStylesWith(state, TOKEN_STYLES.html); + + if (ch === "?" && stream.eat("?")) + return togglePhraseModifier(stream, state, "cite", /\?\?/, 2); + + if (ch === "=" && stream.eat("=")) + return togglePhraseModifier(stream, state, "notextile", /==/, 2); + + if (ch === "-" && !stream.eat("-")) + return togglePhraseModifier(stream, state, "deletion", /-/, 1); + + if (ch === "+") + return togglePhraseModifier(stream, state, "addition", /\+/, 1); + + if (ch === "~") + return togglePhraseModifier(stream, state, "sub", /~/, 1); + + if (ch === "^") + return togglePhraseModifier(stream, state, "sup", /\^/, 1); + + if (ch === "%") + return togglePhraseModifier(stream, state, "span", /%/, 1); + + if (ch === "@") + return togglePhraseModifier(stream, state, "code", /@/, 1); + + if (ch === "!") { + var type = togglePhraseModifier(stream, state, "image", /(?:\([^\)]+\))?!/, 1); + stream.match(/^:\S+/); // optional Url portion + return type; + } + return tokenStyles(state); + } + + function togglePhraseModifier(stream, state, phraseModifier, closeRE, openSize) { + var charBefore = stream.pos > openSize ? stream.string.charAt(stream.pos - openSize - 1) : null; + var charAfter = stream.peek(); + if (state[phraseModifier]) { + if ((!charAfter || /\W/.test(charAfter)) && charBefore && /\S/.test(charBefore)) { + var type = tokenStyles(state); + state[phraseModifier] = false; + return type; + } + } else if ((!charBefore || /\W/.test(charBefore)) && charAfter && /\S/.test(charAfter) && + stream.match(new RegExp("^.*\\S" + closeRE.source + "(?:\\W|$)"), false)) { + state[phraseModifier] = true; + state.mode = Modes.attributes; + } + return tokenStyles(state); + }; + + function tokenStyles(state) { + var disabled = textileDisabled(state); + if (disabled) return disabled; + + var styles = []; + if (state.layoutType) styles.push(TOKEN_STYLES[state.layoutType]); + + styles = styles.concat(activeStyles( + state, "addition", "bold", "cite", "code", "deletion", "em", "footCite", + "image", "italic", "link", "span", "strong", "sub", "sup", "table", "tableHeading")); + + if (state.layoutType === "header") + styles.push(TOKEN_STYLES.header + "-" + state.header); + + return styles.length ? styles.join(" ") : null; + } + + function textileDisabled(state) { + var type = state.layoutType; + + switch(type) { + case "notextile": + case "code": + case "pre": + return TOKEN_STYLES[type]; + default: + if (state.notextile) + return TOKEN_STYLES.notextile + (type ? (" " + TOKEN_STYLES[type]) : ""); + return null; + } + } + + function tokenStylesWith(state, extraStyles) { + var disabled = textileDisabled(state); + if (disabled) return disabled; + + var type = tokenStyles(state); + if (extraStyles) + return type ? (type + " " + extraStyles) : extraStyles; + else + return type; + } + + function activeStyles(state) { + var styles = []; + for (var i = 1; i < arguments.length; ++i) { + if (state[arguments[i]]) + styles.push(TOKEN_STYLES[arguments[i]]); + } + return styles; + } + + function blankLine(state) { + var spanningLayout = state.spanningLayout, type = state.layoutType; + + for (var key in state) if (state.hasOwnProperty(key)) + delete state[key]; + + state.mode = Modes.newLayout; + if (spanningLayout) { + state.layoutType = type; + state.spanningLayout = true; + } + } + + var REs = { + cache: {}, + single: { + bc: "bc", + bq: "bq", + definitionList: /- .*?:=+/, + definitionListEnd: /.*=:\s*$/, + div: "div", + drawTable: /\|.*\|/, + foot: /fn\d+/, + header: /h[1-6]/, + html: /\s*<(?:\/)?(\w+)(?:[^>]+)?>(?:[^<]+<\/\1>)?/, + link: /[^"]+":\S/, + linkDefinition: /\[[^\s\]]+\]\S+/, + list: /(?:#+|\*+)/, + notextile: "notextile", + para: "p", + pre: "pre", + table: "table", + tableCellAttributes: /[\/\\]\d+/, + tableHeading: /\|_\./, + tableText: /[^"_\*\[\(\?\+~\^%@|-]+/, + text: /[^!"_=\*\[\(<\?\+~\^%@-]+/ + }, + attributes: { + align: /(?:<>|<|>|=)/, + selector: /\([^\(][^\)]+\)/, + lang: /\[[^\[\]]+\]/, + pad: /(?:\(+|\)+){1,2}/, + css: /\{[^\}]+\}/ + }, + createRe: function(name) { + switch (name) { + case "drawTable": + return REs.makeRe("^", REs.single.drawTable, "$"); + case "html": + return REs.makeRe("^", REs.single.html, "(?:", REs.single.html, ")*", "$"); + case "linkDefinition": + return REs.makeRe("^", REs.single.linkDefinition, "$"); + case "listLayout": + return REs.makeRe("^", REs.single.list, RE("allAttributes"), "*\\s+"); + case "tableCellAttributes": + return REs.makeRe("^", REs.choiceRe(REs.single.tableCellAttributes, + RE("allAttributes")), "+\\."); + case "type": + return REs.makeRe("^", RE("allTypes")); + case "typeLayout": + return REs.makeRe("^", RE("allTypes"), RE("allAttributes"), + "*\\.\\.?", "(\\s+|$)"); + case "attributes": + return REs.makeRe("^", RE("allAttributes"), "+"); + + case "allTypes": + return REs.choiceRe(REs.single.div, REs.single.foot, + REs.single.header, REs.single.bc, REs.single.bq, + REs.single.notextile, REs.single.pre, REs.single.table, + REs.single.para); + + case "allAttributes": + return REs.choiceRe(REs.attributes.selector, REs.attributes.css, + REs.attributes.lang, REs.attributes.align, REs.attributes.pad); + + default: + return REs.makeRe("^", REs.single[name]); + } + }, + makeRe: function() { + var pattern = ""; + for (var i = 0; i < arguments.length; ++i) { + var arg = arguments[i]; + pattern += (typeof arg === "string") ? arg : arg.source; + } + return new RegExp(pattern); + }, + choiceRe: function() { + var parts = [arguments[0]]; + for (var i = 1; i < arguments.length; ++i) { + parts[i * 2 - 1] = "|"; + parts[i * 2] = arguments[i]; + } + + parts.unshift("(?:"); + parts.push(")"); + return REs.makeRe.apply(null, parts); + } + }; + + function RE(name) { + return (REs.cache[name] || (REs.cache[name] = REs.createRe(name))); + } + + var Modes = { + newLayout: function(stream, state) { + if (stream.match(RE("typeLayout"), false)) { + state.spanningLayout = false; + return (state.mode = Modes.blockType)(stream, state); + } + var newMode; + if (!textileDisabled(state)) { + if (stream.match(RE("listLayout"), false)) + newMode = Modes.list; + else if (stream.match(RE("drawTable"), false)) + newMode = Modes.table; + else if (stream.match(RE("linkDefinition"), false)) + newMode = Modes.linkDefinition; + else if (stream.match(RE("definitionList"))) + newMode = Modes.definitionList; + else if (stream.match(RE("html"), false)) + newMode = Modes.html; + } + return (state.mode = (newMode || Modes.text))(stream, state); + }, + + blockType: function(stream, state) { + var match, type; + state.layoutType = null; + + if (match = stream.match(RE("type"))) + type = match[0]; + else + return (state.mode = Modes.text)(stream, state); + + if (match = type.match(RE("header"))) { + state.layoutType = "header"; + state.header = parseInt(match[0][1]); + } else if (type.match(RE("bq"))) { + state.layoutType = "quote"; + } else if (type.match(RE("bc"))) { + state.layoutType = "code"; + } else if (type.match(RE("foot"))) { + state.layoutType = "footnote"; + } else if (type.match(RE("notextile"))) { + state.layoutType = "notextile"; + } else if (type.match(RE("pre"))) { + state.layoutType = "pre"; + } else if (type.match(RE("div"))) { + state.layoutType = "div"; + } else if (type.match(RE("table"))) { + state.layoutType = "table"; + } + + state.mode = Modes.attributes; + return tokenStyles(state); + }, + + text: function(stream, state) { + if (stream.match(RE("text"))) return tokenStyles(state); + + var ch = stream.next(); + if (ch === '"') + return (state.mode = Modes.link)(stream, state); + return handlePhraseModifier(stream, state, ch); + }, + + attributes: function(stream, state) { + state.mode = Modes.layoutLength; + + if (stream.match(RE("attributes"))) + return tokenStylesWith(state, TOKEN_STYLES.attributes); + else + return tokenStyles(state); + }, + + layoutLength: function(stream, state) { + if (stream.eat(".") && stream.eat(".")) + state.spanningLayout = true; + + state.mode = Modes.text; + return tokenStyles(state); + }, + + list: function(stream, state) { + var match = stream.match(RE("list")); + state.listDepth = match[0].length; + var listMod = (state.listDepth - 1) % 3; + if (!listMod) + state.layoutType = "list1"; + else if (listMod === 1) + state.layoutType = "list2"; + else + state.layoutType = "list3"; + + state.mode = Modes.attributes; + return tokenStyles(state); + }, + + link: function(stream, state) { + state.mode = Modes.text; + if (stream.match(RE("link"))) { + stream.match(/\S+/); + return tokenStylesWith(state, TOKEN_STYLES.link); + } + return tokenStyles(state); + }, + + linkDefinition: function(stream, state) { + stream.skipToEnd(); + return tokenStylesWith(state, TOKEN_STYLES.linkDefinition); + }, + + definitionList: function(stream, state) { + stream.match(RE("definitionList")); + + state.layoutType = "definitionList"; + + if (stream.match(/\s*$/)) + state.spanningLayout = true; + else + state.mode = Modes.attributes; + + return tokenStyles(state); + }, + + html: function(stream, state) { + stream.skipToEnd(); + return tokenStylesWith(state, TOKEN_STYLES.html); + }, + + table: function(stream, state) { + state.layoutType = "table"; + return (state.mode = Modes.tableCell)(stream, state); + }, + + tableCell: function(stream, state) { + if (stream.match(RE("tableHeading"))) + state.tableHeading = true; + else + stream.eat("|"); + + state.mode = Modes.tableCellAttributes; + return tokenStyles(state); + }, + + tableCellAttributes: function(stream, state) { + state.mode = Modes.tableText; + + if (stream.match(RE("tableCellAttributes"))) + return tokenStylesWith(state, TOKEN_STYLES.attributes); + else + return tokenStyles(state); + }, + + tableText: function(stream, state) { + if (stream.match(RE("tableText"))) + return tokenStyles(state); + + if (stream.peek() === "|") { // end of cell + state.mode = Modes.tableCell; + return tokenStyles(state); + } + return handlePhraseModifier(stream, state, stream.next()); + } + }; + + CodeMirror.defineMode("textile", function() { + return { + startState: function() { + return { mode: Modes.newLayout }; + }, + token: function(stream, state) { + if (stream.sol()) startNewLine(stream, state); + return state.mode(stream, state); + }, + blankLine: blankLine + }; + }); + + CodeMirror.defineMIME("text/x-textile", "textile"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiddlywiki/tiddlywiki.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiddlywiki/tiddlywiki.css new file mode 100644 index 0000000000..9a69b639f8 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiddlywiki/tiddlywiki.css @@ -0,0 +1,14 @@ +span.cm-underlined { + text-decoration: underline; +} +span.cm-strikethrough { + text-decoration: line-through; +} +span.cm-brace { + color: #170; + font-weight: bold; +} +span.cm-table { + color: blue; + font-weight: bold; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiddlywiki/tiddlywiki.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiddlywiki/tiddlywiki.js new file mode 100644 index 0000000000..6a9ce447ba --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiddlywiki/tiddlywiki.js @@ -0,0 +1,308 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/*** + |''Name''|tiddlywiki.js| + |''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror| + |''Author''|PMario| + |''Version''|0.1.7| + |''Status''|''stable''| + |''Source''|[[GitHub|https://github.com/pmario/CodeMirror2/blob/tw-syntax/mode/tiddlywiki]]| + |''Documentation''|https://codemirror.tiddlyspace.com/| + |''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]| + |''CoreVersion''|2.5.0| + |''Requires''|codemirror.js| + |''Keywords''|syntax highlighting color code mirror codemirror| + ! Info + CoreVersion parameter is needed for TiddlyWiki only! +***/ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("tiddlywiki", function () { + // Tokenizer + var textwords = {}; + + var keywords = { + "allTags": true, "closeAll": true, "list": true, + "newJournal": true, "newTiddler": true, + "permaview": true, "saveChanges": true, + "search": true, "slider": true, "tabs": true, + "tag": true, "tagging": true, "tags": true, + "tiddler": true, "timeline": true, + "today": true, "version": true, "option": true, + "with": true, "filter": true + }; + + var isSpaceName = /[\w_\-]/i, + reHR = /^\-\-\-\-+$/, //
    + reWikiCommentStart = /^\/\*\*\*$/, // /*** + reWikiCommentStop = /^\*\*\*\/$/, // ***/ + reBlockQuote = /^<<<$/, + + reJsCodeStart = /^\/\/\{\{\{$/, // //{{{ js block start + reJsCodeStop = /^\/\/\}\}\}$/, // //}}} js stop + reXmlCodeStart = /^$/, // xml block start + reXmlCodeStop = /^$/, // xml stop + + reCodeBlockStart = /^\{\{\{$/, // {{{ TW text div block start + reCodeBlockStop = /^\}\}\}$/, // }}} TW text stop + + reUntilCodeStop = /.*?\}\}\}/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function tokenBase(stream, state) { + var sol = stream.sol(), ch = stream.peek(); + + state.block = false; // indicates the start of a code block. + + // check start of blocks + if (sol && /[<\/\*{}\-]/.test(ch)) { + if (stream.match(reCodeBlockStart)) { + state.block = true; + return chain(stream, state, twTokenCode); + } + if (stream.match(reBlockQuote)) + return 'quote'; + if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop)) + return 'comment'; + if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop)) + return 'comment'; + if (stream.match(reHR)) + return 'hr'; + } + + stream.next(); + if (sol && /[\/\*!#;:>|]/.test(ch)) { + if (ch == "!") { // tw header + stream.skipToEnd(); + return "header"; + } + if (ch == "*") { // tw list + stream.eatWhile('*'); + return "comment"; + } + if (ch == "#") { // tw numbered list + stream.eatWhile('#'); + return "comment"; + } + if (ch == ";") { // definition list, term + stream.eatWhile(';'); + return "comment"; + } + if (ch == ":") { // definition list, description + stream.eatWhile(':'); + return "comment"; + } + if (ch == ">") { // single line quote + stream.eatWhile(">"); + return "quote"; + } + if (ch == '|') + return 'header'; + } + + if (ch == '{' && stream.match('{{')) + return chain(stream, state, twTokenCode); + + // rudimentary html:// file:// link matching. TW knows much more ... + if (/[hf]/i.test(ch) && + /[ti]/i.test(stream.peek()) && + stream.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i)) + return "link"; + + // just a little string indicator, don't want to have the whole string covered + if (ch == '"') + return 'string'; + + if (ch == '~') // _no_ CamelCase indicator should be bold + return 'brace'; + + if (/[\[\]]/.test(ch) && stream.match(ch)) // check for [[..]] + return 'brace'; + + if (ch == "@") { // check for space link. TODO fix @@...@@ highlighting + stream.eatWhile(isSpaceName); + return "link"; + } + + if (/\d/.test(ch)) { // numbers + stream.eatWhile(/\d/); + return "number"; + } + + if (ch == "/") { // tw invisible comment + if (stream.eat("%")) { + return chain(stream, state, twTokenComment); + } else if (stream.eat("/")) { // + return chain(stream, state, twTokenEm); + } + } + + if (ch == "_" && stream.eat("_")) // tw underline + return chain(stream, state, twTokenUnderline); + + // strikethrough and mdash handling + if (ch == "-" && stream.eat("-")) { + // if strikethrough looks ugly, change CSS. + if (stream.peek() != ' ') + return chain(stream, state, twTokenStrike); + // mdash + if (stream.peek() == ' ') + return 'brace'; + } + + if (ch == "'" && stream.eat("'")) // tw bold + return chain(stream, state, twTokenStrong); + + if (ch == "<" && stream.eat("<")) // tw macro + return chain(stream, state, twTokenMacro); + + // core macro handling + stream.eatWhile(/[\w\$_]/); + return textwords.propertyIsEnumerable(stream.current()) ? "keyword" : null + } + + // tw invisible comment + function twTokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "%"); + } + return "comment"; + } + + // tw strong / bold + function twTokenStrong(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "'" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "'"); + } + return "strong"; + } + + // tw code + function twTokenCode(stream, state) { + var sb = state.block; + + if (sb && stream.current()) { + return "comment"; + } + + if (!sb && stream.match(reUntilCodeStop)) { + state.tokenize = tokenBase; + return "comment"; + } + + if (sb && stream.sol() && stream.match(reCodeBlockStop)) { + state.tokenize = tokenBase; + return "comment"; + } + + stream.next(); + return "comment"; + } + + // tw em / italic + function twTokenEm(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "/"); + } + return "em"; + } + + // tw underlined text + function twTokenUnderline(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "_" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "_"); + } + return "underlined"; + } + + // tw strike through text looks ugly + // change CSS if needed + function twTokenStrike(stream, state) { + var maybeEnd = false, ch; + + while (ch = stream.next()) { + if (ch == "-" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "-"); + } + return "strikethrough"; + } + + // macro + function twTokenMacro(stream, state) { + if (stream.current() == '<<') { + return 'macro'; + } + + var ch = stream.next(); + if (!ch) { + state.tokenize = tokenBase; + return null; + } + if (ch == ">") { + if (stream.peek() == '>') { + stream.next(); + state.tokenize = tokenBase; + return "macro"; + } + } + + stream.eatWhile(/[\w\$_]/); + return keywords.propertyIsEnumerable(stream.current()) ? "keyword" : null + } + + // Interface + return { + startState: function () { + return {tokenize: tokenBase}; + }, + + token: function (stream, state) { + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + return style; + } + }; +}); + +CodeMirror.defineMIME("text/x-tiddlywiki", "tiddlywiki"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiki/tiki.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiki/tiki.css new file mode 100644 index 0000000000..1d8704c780 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiki/tiki.css @@ -0,0 +1,26 @@ +.cm-tw-syntaxerror { + color: #FFF; + background-color: #900; +} + +.cm-tw-deleted { + text-decoration: line-through; +} + +.cm-tw-header5 { + font-weight: bold; +} +.cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ + padding-left: 10px; +} + +.cm-tw-box { + border-top-width: 0px !important; + border-style: solid; + border-width: 1px; + border-color: inherit; +} + +.cm-tw-underline { + text-decoration: underline; +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiki/tiki.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiki/tiki.js new file mode 100644 index 0000000000..092b859532 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tiki/tiki.js @@ -0,0 +1,312 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('tiki', function(config) { + function inBlock(style, terminator, returnTokenizer) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + + if (returnTokenizer) state.tokenize = returnTokenizer; + + return style; + }; + } + + function inLine(style) { + return function(stream, state) { + while(!stream.eol()) { + stream.next(); + } + state.tokenize = inText; + return style; + }; + } + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var sol = stream.sol(); + var ch = stream.next(); + + //non start of line + switch (ch) { //switch is generally much faster than if, so it is used here + case "{": //plugin + stream.eat("/"); + stream.eatSpace(); + stream.eatWhile(/[^\s\u00a0=\"\'\/?(}]/); + state.tokenize = inPlugin; + return "tag"; + case "_": //bold + if (stream.eat("_")) + return chain(inBlock("strong", "__", inText)); + break; + case "'": //italics + if (stream.eat("'")) + return chain(inBlock("em", "''", inText)); + break; + case "(":// Wiki Link + if (stream.eat("(")) + return chain(inBlock("variable-2", "))", inText)); + break; + case "[":// Weblink + return chain(inBlock("variable-3", "]", inText)); + break; + case "|": //table + if (stream.eat("|")) + return chain(inBlock("comment", "||")); + break; + case "-": + if (stream.eat("=")) {//titleBar + return chain(inBlock("header string", "=-", inText)); + } else if (stream.eat("-")) {//deleted + return chain(inBlock("error tw-deleted", "--", inText)); + } + break; + case "=": //underline + if (stream.match("==")) + return chain(inBlock("tw-underline", "===", inText)); + break; + case ":": + if (stream.eat(":")) + return chain(inBlock("comment", "::")); + break; + case "^": //box + return chain(inBlock("tw-box", "^")); + break; + case "~": //np + if (stream.match("np~")) + return chain(inBlock("meta", "~/np~")); + break; + } + + //start of line types + if (sol) { + switch (ch) { + case "!": //header at start of line + if (stream.match('!!!!!')) { + return chain(inLine("header string")); + } else if (stream.match('!!!!')) { + return chain(inLine("header string")); + } else if (stream.match('!!!')) { + return chain(inLine("header string")); + } else if (stream.match('!!')) { + return chain(inLine("header string")); + } else { + return chain(inLine("header string")); + } + break; + case "*": //unordered list line item, or
  • at start of line + case "#": //ordered list line item, or
  • at start of line + case "+": //ordered list line item, or
  • at start of line + return chain(inLine("tw-listitem bracket")); + break; + } + } + + //stream.eatWhile(/[&{]/); was eating up plugins, turned off to act less like html and more like tiki + return null; + } + + var indentUnit = config.indentUnit; + + // Return variables for tokenizers + var pluginName, type; + function inPlugin(stream, state) { + var ch = stream.next(); + var peek = stream.peek(); + + if (ch == "}") { + state.tokenize = inText; + //type = ch == ")" ? "endPlugin" : "selfclosePlugin"; inPlugin + return "tag"; + } else if (ch == "(" || ch == ")") { + return "bracket"; + } else if (ch == "=") { + type = "equals"; + + if (peek == ">") { + stream.next(); + peek = stream.peek(); + } + + //here we detect values directly after equal character with no quotes + if (!/[\'\"]/.test(peek)) { + state.tokenize = inAttributeNoQuote(); + } + //end detect values + + return "operator"; + } else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + return state.tokenize(stream, state); + } else { + stream.eatWhile(/[^\s\u00a0=\"\'\/?]/); + return "keyword"; + } + } + + function inAttribute(quote) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inPlugin; + break; + } + } + return "string"; + }; + } + + function inAttributeNoQuote() { + return function(stream, state) { + while (!stream.eol()) { + var ch = stream.next(); + var peek = stream.peek(); + if (ch == " " || ch == "," || /[ )}]/.test(peek)) { + state.tokenize = inPlugin; + break; + } + } + return "string"; +}; + } + +var curState, setStyle; +function pass() { + for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]); +} + +function cont() { + pass.apply(null, arguments); + return true; +} + +function pushContext(pluginName, startOfLine) { + var noIndent = curState.context && curState.context.noIndent; + curState.context = { + prev: curState.context, + pluginName: pluginName, + indent: curState.indented, + startOfLine: startOfLine, + noIndent: noIndent + }; +} + +function popContext() { + if (curState.context) curState.context = curState.context.prev; +} + +function element(type) { + if (type == "openPlugin") {curState.pluginName = pluginName; return cont(attributes, endplugin(curState.startOfLine));} + else if (type == "closePlugin") { + var err = false; + if (curState.context) { + err = curState.context.pluginName != pluginName; + popContext(); + } else { + err = true; + } + if (err) setStyle = "error"; + return cont(endcloseplugin(err)); + } + else if (type == "string") { + if (!curState.context || curState.context.name != "!cdata") pushContext("!cdata"); + if (curState.tokenize == inText) popContext(); + return cont(); + } + else return cont(); +} + +function endplugin(startOfLine) { + return function(type) { + if ( + type == "selfclosePlugin" || + type == "endPlugin" + ) + return cont(); + if (type == "endPlugin") {pushContext(curState.pluginName, startOfLine); return cont();} + return cont(); + }; +} + +function endcloseplugin(err) { + return function(type) { + if (err) setStyle = "error"; + if (type == "endPlugin") return cont(); + return pass(); + }; +} + +function attributes(type) { + if (type == "keyword") {setStyle = "attribute"; return cont(attributes);} + if (type == "equals") return cont(attvalue, attributes); + return pass(); +} +function attvalue(type) { + if (type == "keyword") {setStyle = "string"; return cont();} + if (type == "string") return cont(attvaluemaybe); + return pass(); +} +function attvaluemaybe(type) { + if (type == "string") return cont(attvaluemaybe); + else return pass(); +} +return { + startState: function() { + return {tokenize: inText, cc: [], indented: 0, startOfLine: true, pluginName: null, context: null}; + }, + token: function(stream, state) { + if (stream.sol()) { + state.startOfLine = true; + state.indented = stream.indentation(); + } + if (stream.eatSpace()) return null; + + setStyle = type = pluginName = null; + var style = state.tokenize(stream, state); + if ((style || type) && style != "comment") { + curState = state; + while (true) { + var comb = state.cc.pop() || element; + if (comb(type || style)) break; + } + } + state.startOfLine = false; + return setStyle || style; + }, + indent: function(state, textAfter) { + var context = state.context; + if (context && context.noIndent) return 0; + if (context && /^{\//.test(textAfter)) + context = context.prev; + while (context && !context.startOfLine) + context = context.prev; + if (context) return context.indent + indentUnit; + else return 0; + }, + electricChars: "/" +}; +}); + +CodeMirror.defineMIME("text/tiki", "tiki"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/toml/toml.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/toml/toml.js new file mode 100644 index 0000000000..891f384b5b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/toml/toml.js @@ -0,0 +1,88 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("toml", function () { + return { + startState: function () { + return { + inString: false, + stringType: "", + lhs: true, + inArray: 0 + }; + }, + token: function (stream, state) { + //check for state changes + if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) { + state.stringType = stream.peek(); + stream.next(); // Skip quote + state.inString = true; // Update state + } + if (stream.sol() && state.inArray === 0) { + state.lhs = true; + } + //return state + if (state.inString) { + while (state.inString && !stream.eol()) { + if (stream.peek() === state.stringType) { + stream.next(); // Skip quote + state.inString = false; // Clear flag + } else if (stream.peek() === '\\') { + stream.next(); + stream.next(); + } else { + stream.match(/^.[^\\\"\']*/); + } + } + return state.lhs ? "property string" : "string"; // Token style + } else if (state.inArray && stream.peek() === ']') { + stream.next(); + state.inArray--; + return 'bracket'; + } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) { + stream.next();//skip closing ] + // array of objects has an extra open & close [] + if (stream.peek() === ']') stream.next(); + return "atom"; + } else if (stream.peek() === "#") { + stream.skipToEnd(); + return "comment"; + } else if (stream.eatSpace()) { + return null; + } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) { + return "property"; + } else if (state.lhs && stream.peek() === "=") { + stream.next(); + state.lhs = false; + return null; + } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) { + return 'atom'; //date + } else if (!state.lhs && (stream.match('true') || stream.match('false'))) { + return 'atom'; + } else if (!state.lhs && stream.peek() === '[') { + state.inArray++; + stream.next(); + return 'bracket'; + } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) { + return 'number'; + } else if (!stream.eatSpace()) { + stream.next(); + } + return null; + } + }; +}); + +CodeMirror.defineMIME('text/x-toml', 'toml'); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tornado/tornado.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tornado/tornado.js new file mode 100644 index 0000000000..aa589a08c3 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/tornado/tornado.js @@ -0,0 +1,68 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), + require("../../addon/mode/overlay")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", + "../../addon/mode/overlay"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("tornado:inner", function() { + var keywords = ["and","as","assert","autoescape","block","break","class","comment","context", + "continue","datetime","def","del","elif","else","end","escape","except", + "exec","extends","false","finally","for","from","global","if","import","in", + "include","is","json_encode","lambda","length","linkify","load","module", + "none","not","or","pass","print","put","raise","raw","return","self","set", + "squeeze","super","true","try","url_escape","while","with","without","xhtml_escape","yield"]; + keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); + + function tokenBase (stream, state) { + stream.eatWhile(/[^\{]/); + var ch = stream.next(); + if (ch == "{") { + if (ch = stream.eat(/\{|%|#/)) { + state.tokenize = inTag(ch); + return "tag"; + } + } + } + function inTag (close) { + if (close == "{") { + close = "}"; + } + return function (stream, state) { + var ch = stream.next(); + if ((ch == close) && stream.eat("}")) { + state.tokenize = tokenBase; + return "tag"; + } + if (stream.match(keywords)) { + return "keyword"; + } + return close == "#" ? "comment" : "string"; + }; + } + return { + startState: function () { + return {tokenize: tokenBase}; + }, + token: function (stream, state) { + return state.tokenize(stream, state); + } + }; + }); + + CodeMirror.defineMode("tornado", function(config) { + var htmlBase = CodeMirror.getMode(config, "text/html"); + var tornadoInner = CodeMirror.getMode(config, "tornado:inner"); + return CodeMirror.overlayMode(htmlBase, tornadoInner); + }); + + CodeMirror.defineMIME("text/x-tornado", "tornado"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/troff/troff.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/troff/troff.js new file mode 100644 index 0000000000..0c2220d2cc --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/troff/troff.js @@ -0,0 +1,84 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) + define(["../../lib/codemirror"], mod); + else + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('troff', function() { + + var words = {}; + + function tokenBase(stream) { + if (stream.eatSpace()) return null; + + var sol = stream.sol(); + var ch = stream.next(); + + if (ch === '\\') { + if (stream.match('fB') || stream.match('fR') || stream.match('fI') || + stream.match('u') || stream.match('d') || + stream.match('%') || stream.match('&')) { + return 'string'; + } + if (stream.match('m[')) { + stream.skipTo(']'); + stream.next(); + return 'string'; + } + if (stream.match('s+') || stream.match('s-')) { + stream.eatWhile(/[\d-]/); + return 'string'; + } + if (stream.match('\(') || stream.match('*\(')) { + stream.eatWhile(/[\w-]/); + return 'string'; + } + return 'string'; + } + if (sol && (ch === '.' || ch === '\'')) { + if (stream.eat('\\') && stream.eat('\"')) { + stream.skipToEnd(); + return 'comment'; + } + } + if (sol && ch === '.') { + if (stream.match('B ') || stream.match('I ') || stream.match('R ')) { + return 'attribute'; + } + if (stream.match('TH ') || stream.match('SH ') || stream.match('SS ') || stream.match('HP ')) { + stream.skipToEnd(); + return 'quote'; + } + if ((stream.match(/[A-Z]/) && stream.match(/[A-Z]/)) || (stream.match(/[a-z]/) && stream.match(/[a-z]/))) { + return 'attribute'; + } + } + stream.eatWhile(/[\w-]/); + var cur = stream.current(); + return words.hasOwnProperty(cur) ? words[cur] : null; + } + + function tokenize(stream, state) { + return (state.tokens[0] || tokenBase) (stream, state); + }; + + return { + startState: function() {return {tokens:[]};}, + token: function(stream, state) { + return tokenize(stream, state); + } + }; +}); + +CodeMirror.defineMIME('text/troff', 'troff'); +CodeMirror.defineMIME('text/x-troff', 'troff'); +CodeMirror.defineMIME('application/x-troff', 'troff'); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ttcn-cfg/ttcn-cfg.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ttcn-cfg/ttcn-cfg.js new file mode 100644 index 0000000000..9d4b8405af --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ttcn-cfg/ttcn-cfg.js @@ -0,0 +1,214 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("ttcn-cfg", function(config, parserConfig) { + var indentUnit = config.indentUnit, + keywords = parserConfig.keywords || {}, + fileNCtrlMaskOptions = parserConfig.fileNCtrlMaskOptions || {}, + externalCommands = parserConfig.externalCommands || {}, + multiLineStrings = parserConfig.multiLineStrings, + indentStatements = parserConfig.indentStatements !== false; + var isOperatorChar = /[\|]/; + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[:=]/.test(ch)) { + curPunc = ch; + return "punctuation"; + } + if (ch == "#"){ + stream.skipToEnd(); + return "comment"; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + if (ch == "["){ + stream.eatWhile(/[\w_\]]/); + return "number sectionTitle"; + } + + stream.eatWhile(/[\w\$_]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + if (fileNCtrlMaskOptions.propertyIsEnumerable(cur)) + return "negative fileNCtrlMaskOptions"; + if (externalCommands.propertyIsEnumerable(cur)) return "negative externalCommands"; + + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped){ + var afterNext = stream.peek(); + //look if the character if the quote is like the B in '10100010'B + if (afterNext){ + afterNext = afterNext.toLowerCase(); + if(afterNext == "b" || afterNext == "h" || afterNext == "o") + stream.next(); + } + end = true; break; + } + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + //Interface + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") + && ctx.type == "statement"){ + popContext(state); + } + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") + && curPunc != ';') || (ctx.type == "statement" + && curPunc == "newstatement"))) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + return style; + }, + + electricChars: "{}", + lineComment: "#", + fold: "brace" + }; + }); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) + obj[words[i]] = true; + return obj; + } + + CodeMirror.defineMIME("text/x-ttcn-cfg", { + name: "ttcn-cfg", + keywords: words("Yes No LogFile FileMask ConsoleMask AppendFile" + + " TimeStampFormat LogEventTypes SourceInfoFormat" + + " LogEntityName LogSourceInfo DiskFullAction" + + " LogFileNumber LogFileSize MatchingHints Detailed" + + " Compact SubCategories Stack Single None Seconds" + + " DateTime Time Stop Error Retry Delete TCPPort KillTimer" + + " NumHCs UnixSocketsEnabled LocalAddress"), + fileNCtrlMaskOptions: words("TTCN_EXECUTOR TTCN_ERROR TTCN_WARNING" + + " TTCN_PORTEVENT TTCN_TIMEROP TTCN_VERDICTOP" + + " TTCN_DEFAULTOP TTCN_TESTCASE TTCN_ACTION" + + " TTCN_USER TTCN_FUNCTION TTCN_STATISTICS" + + " TTCN_PARALLEL TTCN_MATCHING TTCN_DEBUG" + + " EXECUTOR ERROR WARNING PORTEVENT TIMEROP" + + " VERDICTOP DEFAULTOP TESTCASE ACTION USER" + + " FUNCTION STATISTICS PARALLEL MATCHING DEBUG" + + " LOG_ALL LOG_NOTHING ACTION_UNQUALIFIED" + + " DEBUG_ENCDEC DEBUG_TESTPORT" + + " DEBUG_UNQUALIFIED DEFAULTOP_ACTIVATE" + + " DEFAULTOP_DEACTIVATE DEFAULTOP_EXIT" + + " DEFAULTOP_UNQUALIFIED ERROR_UNQUALIFIED" + + " EXECUTOR_COMPONENT EXECUTOR_CONFIGDATA" + + " EXECUTOR_EXTCOMMAND EXECUTOR_LOGOPTIONS" + + " EXECUTOR_RUNTIME EXECUTOR_UNQUALIFIED" + + " FUNCTION_RND FUNCTION_UNQUALIFIED" + + " MATCHING_DONE MATCHING_MCSUCCESS" + + " MATCHING_MCUNSUCC MATCHING_MMSUCCESS" + + " MATCHING_MMUNSUCC MATCHING_PCSUCCESS" + + " MATCHING_PCUNSUCC MATCHING_PMSUCCESS" + + " MATCHING_PMUNSUCC MATCHING_PROBLEM" + + " MATCHING_TIMEOUT MATCHING_UNQUALIFIED" + + " PARALLEL_PORTCONN PARALLEL_PORTMAP" + + " PARALLEL_PTC PARALLEL_UNQUALIFIED" + + " PORTEVENT_DUALRECV PORTEVENT_DUALSEND" + + " PORTEVENT_MCRECV PORTEVENT_MCSEND" + + " PORTEVENT_MMRECV PORTEVENT_MMSEND" + + " PORTEVENT_MQUEUE PORTEVENT_PCIN" + + " PORTEVENT_PCOUT PORTEVENT_PMIN" + + " PORTEVENT_PMOUT PORTEVENT_PQUEUE" + + " PORTEVENT_STATE PORTEVENT_UNQUALIFIED" + + " STATISTICS_UNQUALIFIED STATISTICS_VERDICT" + + " TESTCASE_FINISH TESTCASE_START" + + " TESTCASE_UNQUALIFIED TIMEROP_GUARD" + + " TIMEROP_READ TIMEROP_START TIMEROP_STOP" + + " TIMEROP_TIMEOUT TIMEROP_UNQUALIFIED" + + " USER_UNQUALIFIED VERDICTOP_FINAL" + + " VERDICTOP_GETVERDICT VERDICTOP_SETVERDICT" + + " VERDICTOP_UNQUALIFIED WARNING_UNQUALIFIED"), + externalCommands: words("BeginControlPart EndControlPart BeginTestCase" + + " EndTestCase"), + multiLineStrings: true + }); +}); \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ttcn/ttcn.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ttcn/ttcn.js new file mode 100644 index 0000000000..0304e7c53d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/ttcn/ttcn.js @@ -0,0 +1,283 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("ttcn", function(config, parserConfig) { + var indentUnit = config.indentUnit, + keywords = parserConfig.keywords || {}, + builtin = parserConfig.builtin || {}, + timerOps = parserConfig.timerOps || {}, + portOps = parserConfig.portOps || {}, + configOps = parserConfig.configOps || {}, + verdictOps = parserConfig.verdictOps || {}, + sutOps = parserConfig.sutOps || {}, + functionOps = parserConfig.functionOps || {}, + + verdictConsts = parserConfig.verdictConsts || {}, + booleanConsts = parserConfig.booleanConsts || {}, + otherConsts = parserConfig.otherConsts || {}, + + types = parserConfig.types || {}, + visibilityModifiers = parserConfig.visibilityModifiers || {}, + templateMatch = parserConfig.templateMatch || {}, + multiLineStrings = parserConfig.multiLineStrings, + indentStatements = parserConfig.indentStatements !== false; + var isOperatorChar = /[+\-*&@=<>!\/]/; + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]{}\(\),;\\:\?\.]/.test(ch)) { + curPunc = ch; + return "punctuation"; + } + if (ch == "#"){ + stream.skipToEnd(); + return "atom preprocessor"; + } + if (ch == "%"){ + stream.eatWhile(/\b/); + return "atom ttcn3Macros"; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + if(ch == "@"){ + if(stream.match("try") || stream.match("catch") + || stream.match("lazy")){ + return "keyword"; + } + } + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + var cur = stream.current(); + + if (keywords.propertyIsEnumerable(cur)) return "keyword"; + if (builtin.propertyIsEnumerable(cur)) return "builtin"; + + if (timerOps.propertyIsEnumerable(cur)) return "def timerOps"; + if (configOps.propertyIsEnumerable(cur)) return "def configOps"; + if (verdictOps.propertyIsEnumerable(cur)) return "def verdictOps"; + if (portOps.propertyIsEnumerable(cur)) return "def portOps"; + if (sutOps.propertyIsEnumerable(cur)) return "def sutOps"; + if (functionOps.propertyIsEnumerable(cur)) return "def functionOps"; + + if (verdictConsts.propertyIsEnumerable(cur)) return "string verdictConsts"; + if (booleanConsts.propertyIsEnumerable(cur)) return "string booleanConsts"; + if (otherConsts.propertyIsEnumerable(cur)) return "string otherConsts"; + + if (types.propertyIsEnumerable(cur)) return "builtin types"; + if (visibilityModifiers.propertyIsEnumerable(cur)) + return "builtin visibilityModifiers"; + if (templateMatch.propertyIsEnumerable(cur)) return "atom templateMatch"; + + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped){ + var afterQuote = stream.peek(); + //look if the character after the quote is like the B in '10100010'B + if (afterQuote){ + afterQuote = afterQuote.toLowerCase(); + if(afterQuote == "b" || afterQuote == "h" || afterQuote == "o") + stream.next(); + } + end = true; break; + } + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + //Interface + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") + && ctx.type == "statement"){ + popContext(state); + } + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (indentStatements && + (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || + (ctx.type == "statement" && curPunc == "newstatement"))) + pushContext(state, stream.column(), "statement"); + + state.startOfLine = false; + + return style; + }, + + electricChars: "{}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "brace" + }; + }); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + function def(mimes, mode) { + if (typeof mimes == "string") mimes = [mimes]; + var words = []; + function add(obj) { + if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) + words.push(prop); + } + + add(mode.keywords); + add(mode.builtin); + add(mode.timerOps); + add(mode.portOps); + + if (words.length) { + mode.helperType = mimes[0]; + CodeMirror.registerHelper("hintWords", mimes[0], words); + } + + for (var i = 0; i < mimes.length; ++i) + CodeMirror.defineMIME(mimes[i], mode); + } + + def(["text/x-ttcn", "text/x-ttcn3", "text/x-ttcnpp"], { + name: "ttcn", + keywords: words("activate address alive all alt altstep and and4b any" + + " break case component const continue control deactivate" + + " display do else encode enumerated except exception" + + " execute extends extension external for from function" + + " goto group if import in infinity inout interleave" + + " label language length log match message mixed mod" + + " modifies module modulepar mtc noblock not not4b nowait" + + " of on optional or or4b out override param pattern port" + + " procedure record recursive rem repeat return runs select" + + " self sender set signature system template testcase to" + + " type union value valueof var variant while with xor xor4b"), + builtin: words("bit2hex bit2int bit2oct bit2str char2int char2oct encvalue" + + " decomp decvalue float2int float2str hex2bit hex2int" + + " hex2oct hex2str int2bit int2char int2float int2hex" + + " int2oct int2str int2unichar isbound ischosen ispresent" + + " isvalue lengthof log2str oct2bit oct2char oct2hex oct2int" + + " oct2str regexp replace rnd sizeof str2bit str2float" + + " str2hex str2int str2oct substr unichar2int unichar2char" + + " enum2int"), + types: words("anytype bitstring boolean char charstring default float" + + " hexstring integer objid octetstring universal verdicttype timer"), + timerOps: words("read running start stop timeout"), + portOps: words("call catch check clear getcall getreply halt raise receive" + + " reply send trigger"), + configOps: words("create connect disconnect done kill killed map unmap"), + verdictOps: words("getverdict setverdict"), + sutOps: words("action"), + functionOps: words("apply derefers refers"), + + verdictConsts: words("error fail inconc none pass"), + booleanConsts: words("true false"), + otherConsts: words("null NULL omit"), + + visibilityModifiers: words("private public friend"), + templateMatch: words("complement ifpresent subset superset permutation"), + multiLineStrings: true + }); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/turtle/turtle.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/turtle/turtle.js new file mode 100644 index 0000000000..695239661f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/turtle/turtle.js @@ -0,0 +1,162 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("turtle", function(config) { + var indentUnit = config.indentUnit; + var curPunc; + + function wordRegexp(words) { + return new RegExp("^(?:" + words.join("|") + ")$", "i"); + } + var ops = wordRegexp([]); + var keywords = wordRegexp(["@prefix", "@base", "a"]); + var operatorChars = /[*+\-<>=&|]/; + + function tokenBase(stream, state) { + var ch = stream.next(); + curPunc = null; + if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { + stream.match(/^[^\s\u00a0>]*>?/); + return "atom"; + } + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } + else if (/[{}\(\),\.;\[\]]/.test(ch)) { + curPunc = ch; + return null; + } + else if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } + else if (operatorChars.test(ch)) { + stream.eatWhile(operatorChars); + return null; + } + else if (ch == ":") { + return "operator"; + } else { + stream.eatWhile(/[_\w\d]/); + if(stream.peek() == ":") { + return "variable-3"; + } else { + var word = stream.current(); + + if(keywords.test(word)) { + return "meta"; + } + + if(ch >= "A" && ch <= "Z") { + return "comment"; + } else { + return "keyword"; + } + } + var word = stream.current(); + if (ops.test(word)) + return null; + else if (keywords.test(word)) + return "meta"; + else + return "variable"; + } + } + + function tokenLiteral(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return "string"; + }; + } + + function pushContext(state, type, col) { + state.context = {prev: state.context, indent: state.indent, col: col, type: type}; + } + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, + context: null, + indent: 0, + col: 0}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) state.context.align = false; + state.indent = stream.indentation(); + } + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + + if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { + state.context.align = true; + } + + if (curPunc == "(") pushContext(state, ")", stream.column()); + else if (curPunc == "[") pushContext(state, "]", stream.column()); + else if (curPunc == "{") pushContext(state, "}", stream.column()); + else if (/[\]\}\)]/.test(curPunc)) { + while (state.context && state.context.type == "pattern") popContext(state); + if (state.context && curPunc == state.context.type) popContext(state); + } + else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); + else if (/atom|string|variable/.test(style) && state.context) { + if (/[\}\]]/.test(state.context.type)) + pushContext(state, "pattern", stream.column()); + else if (state.context.type == "pattern" && !state.context.align) { + state.context.align = true; + state.context.col = stream.column(); + } + } + + return style; + }, + + indent: function(state, textAfter) { + var firstChar = textAfter && textAfter.charAt(0); + var context = state.context; + if (/[\]\}]/.test(firstChar)) + while (context && context.type == "pattern") context = context.prev; + + var closing = context && firstChar == context.type; + if (!context) + return 0; + else if (context.type == "pattern") + return context.col; + else if (context.align) + return context.col + (closing ? 0 : 1); + else + return context.indent + (closing ? 0 : indentUnit); + }, + + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("text/turtle", "turtle"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/twig/twig.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/twig/twig.js new file mode 100644 index 0000000000..a6dd3f1a68 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/twig/twig.js @@ -0,0 +1,141 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../addon/mode/multiplex")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../addon/mode/multiplex"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineMode("twig:inner", function() { + var keywords = ["and", "as", "autoescape", "endautoescape", "block", "do", "endblock", "else", "elseif", "extends", "for", "endfor", "embed", "endembed", "filter", "endfilter", "flush", "from", "if", "endif", "in", "is", "include", "import", "not", "or", "set", "spaceless", "endspaceless", "with", "endwith", "trans", "endtrans", "blocktrans", "endblocktrans", "macro", "endmacro", "use", "verbatim", "endverbatim"], + operator = /^[+\-*&%=<>!?|~^]/, + sign = /^[:\[\(\{]/, + atom = ["true", "false", "null", "empty", "defined", "divisibleby", "divisible by", "even", "odd", "iterable", "sameas", "same as"], + number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; + + keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); + atom = new RegExp("((" + atom.join(")|(") + "))\\b"); + + function tokenBase (stream, state) { + var ch = stream.peek(); + + //Comment + if (state.incomment) { + if (!stream.skipTo("#}")) { + stream.skipToEnd(); + } else { + stream.eatWhile(/\#|}/); + state.incomment = false; + } + return "comment"; + //Tag + } else if (state.intag) { + //After operator + if (state.operator) { + state.operator = false; + if (stream.match(atom)) { + return "atom"; + } + if (stream.match(number)) { + return "number"; + } + } + //After sign + if (state.sign) { + state.sign = false; + if (stream.match(atom)) { + return "atom"; + } + if (stream.match(number)) { + return "number"; + } + } + + if (state.instring) { + if (ch == state.instring) { + state.instring = false; + } + stream.next(); + return "string"; + } else if (ch == "'" || ch == '"') { + state.instring = ch; + stream.next(); + return "string"; + } else if (stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { + state.intag = false; + return "tag"; + } else if (stream.match(operator)) { + state.operator = true; + return "operator"; + } else if (stream.match(sign)) { + state.sign = true; + } else { + if (stream.eat(" ") || stream.sol()) { + if (stream.match(keywords)) { + return "keyword"; + } + if (stream.match(atom)) { + return "atom"; + } + if (stream.match(number)) { + return "number"; + } + if (stream.sol()) { + stream.next(); + } + } else { + stream.next(); + } + + } + return "variable"; + } else if (stream.eat("{")) { + if (stream.eat("#")) { + state.incomment = true; + if (!stream.skipTo("#}")) { + stream.skipToEnd(); + } else { + stream.eatWhile(/\#|}/); + state.incomment = false; + } + return "comment"; + //Open tag + } else if (ch = stream.eat(/\{|%/)) { + //Cache close tag + state.intag = ch; + if (ch == "{") { + state.intag = "}"; + } + stream.eat("-"); + return "tag"; + } + } + stream.next(); + }; + + return { + startState: function () { + return {}; + }, + token: function (stream, state) { + return tokenBase(stream, state); + } + }; + }); + + CodeMirror.defineMode("twig", function(config, parserConfig) { + var twigInner = CodeMirror.getMode(config, "twig:inner"); + if (!parserConfig || !parserConfig.base) return twigInner; + return CodeMirror.multiplexingMode( + CodeMirror.getMode(config, parserConfig.base), { + open: /\{[{#%]/, close: /[}#%]\}/, mode: twigInner, parseDelimiters: true + } + ); + }); + CodeMirror.defineMIME("text/x-twig", "twig"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/vb/vb.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/vb/vb.js new file mode 100644 index 0000000000..6e4b476309 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/vb/vb.js @@ -0,0 +1,275 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("vb", function(conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"); + var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); + var doubleOperators = new RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); + var doubleDelimiters = new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); + var tripleDelimiters = new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); + var identifiers = new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); + + var openingKeywords = ['class','module', 'sub','enum','select','while','if','function', 'get','set','property', 'try', 'structure', 'synclock', 'using', 'with']; + var middleKeywords = ['else','elseif','case', 'catch', 'finally']; + var endKeywords = ['next','loop']; + + var operatorKeywords = ['and', "andalso", 'or', 'orelse', 'xor', 'in', 'not', 'is', 'isnot', 'like']; + var wordOperators = wordRegexp(operatorKeywords); + + var commonKeywords = ["#const", "#else", "#elseif", "#end", "#if", "#region", "addhandler", "addressof", "alias", "as", "byref", "byval", "cbool", "cbyte", "cchar", "cdate", "cdbl", "cdec", "cint", "clng", "cobj", "compare", "const", "continue", "csbyte", "cshort", "csng", "cstr", "cuint", "culng", "cushort", "declare", "default", "delegate", "dim", "directcast", "each", "erase", "error", "event", "exit", "explicit", "false", "for", "friend", "gettype", "goto", "handles", "implements", "imports", "infer", "inherits", "interface", "isfalse", "istrue", "lib", "me", "mod", "mustinherit", "mustoverride", "my", "mybase", "myclass", "namespace", "narrowing", "new", "nothing", "notinheritable", "notoverridable", "of", "off", "on", "operator", "option", "optional", "out", "overloads", "overridable", "overrides", "paramarray", "partial", "private", "protected", "public", "raiseevent", "readonly", "redim", "removehandler", "resume", "return", "shadows", "shared", "static", "step", "stop", "strict", "then", "throw", "to", "true", "trycast", "typeof", "until", "until", "when", "widening", "withevents", "writeonly"]; + + var commontypes = ['object', 'boolean', 'char', 'string', 'byte', 'sbyte', 'short', 'ushort', 'int16', 'uint16', 'integer', 'uinteger', 'int32', 'uint32', 'long', 'ulong', 'int64', 'uint64', 'decimal', 'single', 'double', 'float', 'date', 'datetime', 'intptr', 'uintptr']; + + var keywords = wordRegexp(commonKeywords); + var types = wordRegexp(commontypes); + var stringPrefixes = '"'; + + var opening = wordRegexp(openingKeywords); + var middle = wordRegexp(middleKeywords); + var closing = wordRegexp(endKeywords); + var doubleClosing = wordRegexp(['end']); + var doOpening = wordRegexp(['do']); + + var indentInfo = null; + + CodeMirror.registerHelper("hintWords", "vb", openingKeywords.concat(middleKeywords).concat(endKeywords) + .concat(operatorKeywords).concat(commonKeywords).concat(commontypes)); + + function indent(_stream, state) { + state.currentIndent++; + } + + function dedent(_stream, state) { + state.currentIndent--; + } + // tokenizers + function tokenBase(stream, state) { + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle Comments + if (ch === "'") { + stream.skipToEnd(); + return 'comment'; + } + + + // Handle Number Literals + if (stream.match(/^((&H)|(&O))?[0-9\.a-f]/i, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+F?/i)) { floatLiteral = true; } + else if (stream.match(/^\d+\.\d*F?/)) { floatLiteral = true; } + else if (stream.match(/^\.\d+F?/)) { floatLiteral = true; } + + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } + // Octal + else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } + // Decimal + else if (stream.match(/^[1-9]\d*F?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return 'number'; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { + return null; + } + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return null; + } + if (stream.match(doOpening)) { + indent(stream,state); + state.doInCurrentLine = true; + return 'keyword'; + } + if (stream.match(opening)) { + if (! state.doInCurrentLine) + indent(stream,state); + else + state.doInCurrentLine = false; + return 'keyword'; + } + if (stream.match(middle)) { + return 'keyword'; + } + + if (stream.match(doubleClosing)) { + dedent(stream,state); + dedent(stream,state); + return 'keyword'; + } + if (stream.match(closing)) { + dedent(stream,state); + return 'keyword'; + } + + if (stream.match(types)) { + return 'keyword'; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(identifiers)) { + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + var singleline = delimiter.length == 1; + var OUTCLASS = 'string'; + + return function(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"]/); + if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + return ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return OUTCLASS; + }; + } + + + function tokenLexer(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = state.tokenize(stream, state); + if (style === 'variable') { + return 'variable'; + } else { + return ERRORCLASS; + } + } + + + var delimiter_index = '[({'.indexOf(current); + if (delimiter_index !== -1) { + indent(stream, state ); + } + if (indentInfo === 'dedent') { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + delimiter_index = '])}'.indexOf(current); + if (delimiter_index !== -1) { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + + return style; + } + + var external = { + electricChars:"dDpPtTfFeE ", + startState: function() { + return { + tokenize: tokenBase, + lastToken: null, + currentIndent: 0, + nextLineIndent: 0, + doInCurrentLine: false + + + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + state.currentIndent += state.nextLineIndent; + state.nextLineIndent = 0; + state.doInCurrentLine = 0; + } + var style = tokenLexer(stream, state); + + state.lastToken = {style:style, content: stream.current()}; + + + + return style; + }, + + indent: function(state, textAfter) { + var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; + if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); + if(state.currentIndent < 0) return 0; + return state.currentIndent * conf.indentUnit; + }, + + lineComment: "'" + }; + return external; +}); + +CodeMirror.defineMIME("text/x-vb", "vb"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/vbscript/vbscript.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/vbscript/vbscript.js new file mode 100644 index 0000000000..4033948133 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/vbscript/vbscript.js @@ -0,0 +1,350 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +/* +For extra ASP classic objects, initialize CodeMirror instance with this option: + isASP: true + +E.G.: + var editor = CodeMirror.fromTextArea(document.getElementById("code"), { + lineNumbers: true, + isASP: true + }); +*/ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("vbscript", function(conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/&\\\\\\^<>=]"); + var doubleOperators = new RegExp("^((<>)|(<=)|(>=))"); + var singleDelimiters = new RegExp('^[\\.,]'); + var brackets = new RegExp('^[\\(\\)]'); + var identifiers = new RegExp("^[A-Za-z][_A-Za-z0-9]*"); + + var openingKeywords = ['class','sub','select','while','if','function', 'property', 'with', 'for']; + var middleKeywords = ['else','elseif','case']; + var endKeywords = ['next','loop','wend']; + + var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'is', 'mod', 'eqv', 'imp']); + var commonkeywords = ['dim', 'redim', 'then', 'until', 'randomize', + 'byval','byref','new','property', 'exit', 'in', + 'const','private', 'public', + 'get','set','let', 'stop', 'on error resume next', 'on error goto 0', 'option explicit', 'call', 'me']; + + //This list was from: http://msdn.microsoft.com/en-us/library/f8tbc79x(v=vs.84).aspx + var atomWords = ['true', 'false', 'nothing', 'empty', 'null']; + //This list was from: http://msdn.microsoft.com/en-us/library/3ca8tfek(v=vs.84).aspx + var builtinFuncsWords = ['abs', 'array', 'asc', 'atn', 'cbool', 'cbyte', 'ccur', 'cdate', 'cdbl', 'chr', 'cint', 'clng', 'cos', 'csng', 'cstr', 'date', 'dateadd', 'datediff', 'datepart', + 'dateserial', 'datevalue', 'day', 'escape', 'eval', 'execute', 'exp', 'filter', 'formatcurrency', 'formatdatetime', 'formatnumber', 'formatpercent', 'getlocale', 'getobject', + 'getref', 'hex', 'hour', 'inputbox', 'instr', 'instrrev', 'int', 'fix', 'isarray', 'isdate', 'isempty', 'isnull', 'isnumeric', 'isobject', 'join', 'lbound', 'lcase', 'left', + 'len', 'loadpicture', 'log', 'ltrim', 'rtrim', 'trim', 'maths', 'mid', 'minute', 'month', 'monthname', 'msgbox', 'now', 'oct', 'replace', 'rgb', 'right', 'rnd', 'round', + 'scriptengine', 'scriptenginebuildversion', 'scriptenginemajorversion', 'scriptengineminorversion', 'second', 'setlocale', 'sgn', 'sin', 'space', 'split', 'sqr', 'strcomp', + 'string', 'strreverse', 'tan', 'time', 'timer', 'timeserial', 'timevalue', 'typename', 'ubound', 'ucase', 'unescape', 'vartype', 'weekday', 'weekdayname', 'year']; + + //This list was from: http://msdn.microsoft.com/en-us/library/ydz4cfk3(v=vs.84).aspx + var builtinConsts = ['vbBlack', 'vbRed', 'vbGreen', 'vbYellow', 'vbBlue', 'vbMagenta', 'vbCyan', 'vbWhite', 'vbBinaryCompare', 'vbTextCompare', + 'vbSunday', 'vbMonday', 'vbTuesday', 'vbWednesday', 'vbThursday', 'vbFriday', 'vbSaturday', 'vbUseSystemDayOfWeek', 'vbFirstJan1', 'vbFirstFourDays', 'vbFirstFullWeek', + 'vbGeneralDate', 'vbLongDate', 'vbShortDate', 'vbLongTime', 'vbShortTime', 'vbObjectError', + 'vbOKOnly', 'vbOKCancel', 'vbAbortRetryIgnore', 'vbYesNoCancel', 'vbYesNo', 'vbRetryCancel', 'vbCritical', 'vbQuestion', 'vbExclamation', 'vbInformation', 'vbDefaultButton1', 'vbDefaultButton2', + 'vbDefaultButton3', 'vbDefaultButton4', 'vbApplicationModal', 'vbSystemModal', 'vbOK', 'vbCancel', 'vbAbort', 'vbRetry', 'vbIgnore', 'vbYes', 'vbNo', + 'vbCr', 'VbCrLf', 'vbFormFeed', 'vbLf', 'vbNewLine', 'vbNullChar', 'vbNullString', 'vbTab', 'vbVerticalTab', 'vbUseDefault', 'vbTrue', 'vbFalse', + 'vbEmpty', 'vbNull', 'vbInteger', 'vbLong', 'vbSingle', 'vbDouble', 'vbCurrency', 'vbDate', 'vbString', 'vbObject', 'vbError', 'vbBoolean', 'vbVariant', 'vbDataObject', 'vbDecimal', 'vbByte', 'vbArray']; + //This list was from: http://msdn.microsoft.com/en-us/library/hkc375ea(v=vs.84).aspx + var builtinObjsWords = ['WScript', 'err', 'debug', 'RegExp']; + var knownProperties = ['description', 'firstindex', 'global', 'helpcontext', 'helpfile', 'ignorecase', 'length', 'number', 'pattern', 'source', 'value', 'count']; + var knownMethods = ['clear', 'execute', 'raise', 'replace', 'test', 'write', 'writeline', 'close', 'open', 'state', 'eof', 'update', 'addnew', 'end', 'createobject', 'quit']; + + var aspBuiltinObjsWords = ['server', 'response', 'request', 'session', 'application']; + var aspKnownProperties = ['buffer', 'cachecontrol', 'charset', 'contenttype', 'expires', 'expiresabsolute', 'isclientconnected', 'pics', 'status', //response + 'clientcertificate', 'cookies', 'form', 'querystring', 'servervariables', 'totalbytes', //request + 'contents', 'staticobjects', //application + 'codepage', 'lcid', 'sessionid', 'timeout', //session + 'scripttimeout']; //server + var aspKnownMethods = ['addheader', 'appendtolog', 'binarywrite', 'end', 'flush', 'redirect', //response + 'binaryread', //request + 'remove', 'removeall', 'lock', 'unlock', //application + 'abandon', //session + 'getlasterror', 'htmlencode', 'mappath', 'transfer', 'urlencode']; //server + + var knownWords = knownMethods.concat(knownProperties); + + builtinObjsWords = builtinObjsWords.concat(builtinConsts); + + if (conf.isASP){ + builtinObjsWords = builtinObjsWords.concat(aspBuiltinObjsWords); + knownWords = knownWords.concat(aspKnownMethods, aspKnownProperties); + }; + + var keywords = wordRegexp(commonkeywords); + var atoms = wordRegexp(atomWords); + var builtinFuncs = wordRegexp(builtinFuncsWords); + var builtinObjs = wordRegexp(builtinObjsWords); + var known = wordRegexp(knownWords); + var stringPrefixes = '"'; + + var opening = wordRegexp(openingKeywords); + var middle = wordRegexp(middleKeywords); + var closing = wordRegexp(endKeywords); + var doubleClosing = wordRegexp(['end']); + var doOpening = wordRegexp(['do']); + var noIndentWords = wordRegexp(['on error resume next', 'exit']); + var comment = wordRegexp(['rem']); + + + function indent(_stream, state) { + state.currentIndent++; + } + + function dedent(_stream, state) { + state.currentIndent--; + } + // tokenizers + function tokenBase(stream, state) { + if (stream.eatSpace()) { + return 'space'; + //return null; + } + + var ch = stream.peek(); + + // Handle Comments + if (ch === "'") { + stream.skipToEnd(); + return 'comment'; + } + if (stream.match(comment)){ + stream.skipToEnd(); + return 'comment'; + } + + + // Handle Number Literals + if (stream.match(/^((&H)|(&O))?[0-9\.]/i, false) && !stream.match(/^((&H)|(&O))?[0-9\.]+[a-z_]/i, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+/i)) { floatLiteral = true; } + else if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } + else if (stream.match(/^\.\d+/)) { floatLiteral = true; } + + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } + // Octal + else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } + // Decimal + else if (stream.match(/^[1-9]\d*F?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return 'number'; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return null; + } + + if (stream.match(brackets)) { + return "bracket"; + } + + if (stream.match(noIndentWords)) { + state.doInCurrentLine = true; + + return 'keyword'; + } + + if (stream.match(doOpening)) { + indent(stream,state); + state.doInCurrentLine = true; + + return 'keyword'; + } + if (stream.match(opening)) { + if (! state.doInCurrentLine) + indent(stream,state); + else + state.doInCurrentLine = false; + + return 'keyword'; + } + if (stream.match(middle)) { + return 'keyword'; + } + + + if (stream.match(doubleClosing)) { + dedent(stream,state); + dedent(stream,state); + + return 'keyword'; + } + if (stream.match(closing)) { + if (! state.doInCurrentLine) + dedent(stream,state); + else + state.doInCurrentLine = false; + + return 'keyword'; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(atoms)) { + return 'atom'; + } + + if (stream.match(known)) { + return 'variable-2'; + } + + if (stream.match(builtinFuncs)) { + return 'builtin'; + } + + if (stream.match(builtinObjs)){ + return 'variable-2'; + } + + if (stream.match(identifiers)) { + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + var singleline = delimiter.length == 1; + var OUTCLASS = 'string'; + + return function(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"]/); + if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + return ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return OUTCLASS; + }; + } + + + function tokenLexer(stream, state) { + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = state.tokenize(stream, state); + + current = stream.current(); + if (style && (style.substr(0, 8) === 'variable' || style==='builtin' || style==='keyword')){//|| knownWords.indexOf(current.substring(1)) > -1) { + if (style === 'builtin' || style === 'keyword') style='variable'; + if (knownWords.indexOf(current.substr(1)) > -1) style='variable-2'; + + return style; + } else { + return ERRORCLASS; + } + } + + return style; + } + + var external = { + electricChars:"dDpPtTfFeE ", + startState: function() { + return { + tokenize: tokenBase, + lastToken: null, + currentIndent: 0, + nextLineIndent: 0, + doInCurrentLine: false, + ignoreKeyword: false + + + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + state.currentIndent += state.nextLineIndent; + state.nextLineIndent = 0; + state.doInCurrentLine = 0; + } + var style = tokenLexer(stream, state); + + state.lastToken = {style:style, content: stream.current()}; + + if (style==='space') style=null; + + return style; + }, + + indent: function(state, textAfter) { + var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; + if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); + if(state.currentIndent < 0) return 0; + return state.currentIndent * conf.indentUnit; + } + + }; + return external; +}); + +CodeMirror.defineMIME("text/vbscript", "vbscript"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/velocity/velocity.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/velocity/velocity.js new file mode 100644 index 0000000000..79a621a5b0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/velocity/velocity.js @@ -0,0 +1,202 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("velocity", function() { + function parseWords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var keywords = parseWords("#end #else #break #stop #[[ #]] " + + "#{end} #{else} #{break} #{stop}"); + var functions = parseWords("#if #elseif #foreach #set #include #parse #macro #define #evaluate " + + "#{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}"); + var specials = parseWords("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent.count $foreach.parent.hasNext $foreach.parent.first $foreach.parent.last $foreach.parent $velocityCount $!bodyContent $bodyContent"); + var isOperatorChar = /[+\-*&%=<>!?:\/|]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + function tokenBase(stream, state) { + var beforeParams = state.beforeParams; + state.beforeParams = false; + var ch = stream.next(); + // start of unparsed string? + if ((ch == "'") && !state.inString && state.inParams) { + state.lastTokenWasBuiltin = false; + return chain(stream, state, tokenString(ch)); + } + // start of parsed string? + else if ((ch == '"')) { + state.lastTokenWasBuiltin = false; + if (state.inString) { + state.inString = false; + return "string"; + } + else if (state.inParams) + return chain(stream, state, tokenString(ch)); + } + // is it one of the special signs []{}().,;? Separator? + else if (/[\[\]{}\(\),;\.]/.test(ch)) { + if (ch == "(" && beforeParams) + state.inParams = true; + else if (ch == ")") { + state.inParams = false; + state.lastTokenWasBuiltin = true; + } + return null; + } + // start of a number value? + else if (/\d/.test(ch)) { + state.lastTokenWasBuiltin = false; + stream.eatWhile(/[\w\.]/); + return "number"; + } + // multi line comment? + else if (ch == "#" && stream.eat("*")) { + state.lastTokenWasBuiltin = false; + return chain(stream, state, tokenComment); + } + // unparsed content? + else if (ch == "#" && stream.match(/ *\[ *\[/)) { + state.lastTokenWasBuiltin = false; + return chain(stream, state, tokenUnparsed); + } + // single line comment? + else if (ch == "#" && stream.eat("#")) { + state.lastTokenWasBuiltin = false; + stream.skipToEnd(); + return "comment"; + } + // variable? + else if (ch == "$") { + stream.eat("!"); + stream.eatWhile(/[\w\d\$_\.{}-]/); + // is it one of the specials? + if (specials && specials.propertyIsEnumerable(stream.current())) { + return "keyword"; + } + else { + state.lastTokenWasBuiltin = true; + state.beforeParams = true; + return "builtin"; + } + } + // is it a operator? + else if (isOperatorChar.test(ch)) { + state.lastTokenWasBuiltin = false; + stream.eatWhile(isOperatorChar); + return "operator"; + } + else { + // get the whole word + stream.eatWhile(/[\w\$_{}@]/); + var word = stream.current(); + // is it one of the listed keywords? + if (keywords && keywords.propertyIsEnumerable(word)) + return "keyword"; + // is it one of the listed functions? + if (functions && functions.propertyIsEnumerable(word) || + (stream.current().match(/^#@?[a-z0-9_]+ *$/i) && stream.peek()=="(") && + !(functions && functions.propertyIsEnumerable(word.toLowerCase()))) { + state.beforeParams = true; + state.lastTokenWasBuiltin = false; + return "keyword"; + } + if (state.inString) { + state.lastTokenWasBuiltin = false; + return "string"; + } + if (stream.pos > word.length && stream.string.charAt(stream.pos-word.length-1)=="." && state.lastTokenWasBuiltin) + return "builtin"; + // default: just a "word" + state.lastTokenWasBuiltin = false; + return null; + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if ((next == quote) && !escaped) { + end = true; + break; + } + if (quote=='"' && stream.peek() == '$' && !escaped) { + state.inString = true; + end = true; + break; + } + escaped = !escaped && next == "\\"; + } + if (end) state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function tokenUnparsed(stream, state) { + var maybeEnd = 0, ch; + while (ch = stream.next()) { + if (ch == "#" && maybeEnd == 2) { + state.tokenize = tokenBase; + break; + } + if (ch == "]") + maybeEnd++; + else if (ch != " ") + maybeEnd = 0; + } + return "meta"; + } + // Interface + + return { + startState: function() { + return { + tokenize: tokenBase, + beforeParams: false, + inParams: false, + inString: false, + lastTokenWasBuiltin: false + }; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + }, + blockCommentStart: "#*", + blockCommentEnd: "*#", + lineComment: "##", + fold: "velocity" + }; +}); + +CodeMirror.defineMIME("text/velocity", "velocity"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/verilog/verilog.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/verilog/verilog.js new file mode 100644 index 0000000000..6c799f298b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/verilog/verilog.js @@ -0,0 +1,781 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("verilog", function(config, parserConfig) { + + var indentUnit = config.indentUnit, + statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, + dontAlignCalls = parserConfig.dontAlignCalls, + // compilerDirectivesUseRegularIndentation - If set, Compiler directive + // indentation follows the same rules as everything else. Otherwise if + // false, compiler directives will track their own indentation. + // For example, `ifdef nested inside another `ifndef will be indented, + // but a `ifdef inside a function block may not be indented. + compilerDirectivesUseRegularIndentation = parserConfig.compilerDirectivesUseRegularIndentation, + noIndentKeywords = parserConfig.noIndentKeywords || [], + multiLineStrings = parserConfig.multiLineStrings, + hooks = parserConfig.hooks || {}; + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + /** + * Keywords from IEEE 1800-2012 + */ + var keywords = words( + "accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind " + + "bins binsof bit break buf bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config " + + "const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable " + + "dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup " + + "endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask " + + "enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin " + + "function generate genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import " + + "incdir include initial inout input inside instance int integer interconnect interface intersect join join_any " + + "join_none large let liblist library local localparam logic longint macromodule matches medium modport module " + + "nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 null or output package packed " + + "parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup " + + "pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg " + + "reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime " + + "s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify " + + "specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on " + + "table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior " + + "trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void " + + "wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor"); + + /** Operators from IEEE 1800-2012 + unary_operator ::= + + | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ + binary_operator ::= + + | - | * | / | % | == | != | === | !== | ==? | !=? | && | || | ** + | < | <= | > | >= | & | | | ^ | ^~ | ~^ | >> | << | >>> | <<< + | -> | <-> + inc_or_dec_operator ::= ++ | -- + unary_module_path_operator ::= + ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ + binary_module_path_operator ::= + == | != | && | || | & | | | ^ | ^~ | ~^ + */ + var isOperatorChar = /[\+\-\*\/!~&|^%=?:<>]/; + var isBracketChar = /[\[\]{}()]/; + + var unsignedNumber = /\d[0-9_]*/; + var decimalLiteral = /\d*\s*'s?d\s*\d[0-9_]*/i; + var binaryLiteral = /\d*\s*'s?b\s*[xz01][xz01_]*/i; + var octLiteral = /\d*\s*'s?o\s*[xz0-7][xz0-7_]*/i; + var hexLiteral = /\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i; + var realLiteral = /(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i; + + var closingBracketOrWord = /^((`?\w+)|[)}\]])/; + var closingBracket = /[)}\]]/; + var compilerDirectiveRegex = new RegExp( + "^(`(?:ifdef|ifndef|elsif|else|endif|undef|undefineall|define|include|begin_keywords|celldefine|default|" + + "nettype|end_keywords|endcelldefine|line|nounconnected_drive|pragma|resetall|timescale|unconnected_drive))\\b"); + var compilerDirectiveBeginRegex = /^(`(?:ifdef|ifndef|elsif|else))\b/; + var compilerDirectiveEndRegex = /^(`(?:elsif|else|endif))\b/; + + var curPunc; + var curKeyword; + + // Block openings which are closed by a matching keyword in the form of ("end" + keyword) + // E.g. "task" => "endtask" + var blockKeywords = words( + "case checker class clocking config function generate interface module package " + + "primitive program property specify sequence table task" + ); + + // Opening/closing pairs + var openClose = {}; + for (var keyword in blockKeywords) { + openClose[keyword] = "end" + keyword; + } + openClose["begin"] = "end"; + openClose["casex"] = "endcase"; + openClose["casez"] = "endcase"; + openClose["do" ] = "while"; + openClose["fork" ] = "join;join_any;join_none"; + openClose["covergroup"] = "endgroup"; + openClose["macro_begin"] = "macro_end"; + + for (var i in noIndentKeywords) { + var keyword = noIndentKeywords[i]; + if (openClose[keyword]) { + openClose[keyword] = undefined; + } + } + + // Keywords which open statements that are ended with a semi-colon + var statementKeywords = words("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while extern typedef"); + + function tokenBase(stream, state) { + var ch = stream.peek(), style; + if (hooks[ch] && (style = hooks[ch](stream, state)) != false) return style; + if (hooks.tokenBase && (style = hooks.tokenBase(stream, state)) != false) + return style; + + if (/[,;:\.]/.test(ch)) { + curPunc = stream.next(); + return null; + } + if (isBracketChar.test(ch)) { + curPunc = stream.next(); + return "bracket"; + } + // Macros (tick-defines) + if (ch == '`') { + stream.next(); + if (stream.eatWhile(/[\w\$_]/)) { + var cur = stream.current(); + curKeyword = cur; + // Macros that end in _begin, are start of block and end with _end + if (cur.startsWith("`uvm_") && cur.endsWith("_begin")) { + var keywordClose = curKeyword.substr(0,curKeyword.length - 5) + "end"; + openClose[cur] = keywordClose; + curPunc = "newblock"; + } else { + stream.eatSpace(); + if (stream.peek() == '(') { + // Check if this is a block + curPunc = "newmacro"; + } + var withSpace = stream.current(); + // Move the stream back before the spaces + stream.backUp(withSpace.length - cur.length); + } + return "def"; + } else { + return null; + } + } + // System calls + if (ch == '$') { + stream.next(); + if (stream.eatWhile(/[\w\$_]/)) { + return "meta"; + } else { + return null; + } + } + // Time literals + if (ch == '#') { + stream.next(); + stream.eatWhile(/[\d_.]/); + return "def"; + } + // Event + if (ch == '@') { + stream.next(); + stream.eatWhile(/[@]/); + return "def"; + } + // Strings + if (ch == '"') { + stream.next(); + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + // Comments + if (ch == "/") { + stream.next(); + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + stream.backUp(1); + } + + // Numeric literals + if (stream.match(realLiteral) || + stream.match(decimalLiteral) || + stream.match(binaryLiteral) || + stream.match(octLiteral) || + stream.match(hexLiteral) || + stream.match(unsignedNumber) || + stream.match(realLiteral)) { + return "number"; + } + + // Operators + if (stream.eatWhile(isOperatorChar)) { + curPunc = stream.current(); + return "meta"; + } + + // Keywords / plain variables + if (stream.eatWhile(/[\w\$_]/)) { + var cur = stream.current(); + if (keywords[cur]) { + if (openClose[cur]) { + curPunc = "newblock"; + if (cur === "fork") { + // Fork can be a statement instead of block in cases of: + // "disable fork;" and "wait fork;" (trailing semicolon) + stream.eatSpace() + if (stream.peek() == ';') { + curPunc = "newstatement"; + } + stream.backUp(stream.current().length - cur.length); + } + } + if (statementKeywords[cur]) { + curPunc = "newstatement"; + } + curKeyword = cur; + return "keyword"; + } + return "variable"; + } + + stream.next(); + return null; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = tokenBase; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, scopekind, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.scopekind = scopekind; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type, scopekind) { + var indent = state.indented; + var c = new Context(indent, col, type, scopekind ? scopekind : "", null, state.context); + return state.context = c; + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") { + state.indented = state.context.indented; + } + return state.context = state.context.prev; + } + + function isClosing(text, contextClosing) { + if (text == contextClosing) { + return true; + } else { + // contextClosing may be multiple keywords separated by ; + var closingKeywords = contextClosing.split(";"); + for (var i in closingKeywords) { + if (text == closingKeywords[i]) { + return true; + } + } + return false; + } + } + + function isInsideScopeKind(ctx, scopekind) { + if (ctx == null) { + return false; + } + if (ctx.scopekind === scopekind) { + return true; + } + return isInsideScopeKind(ctx.prev, scopekind); + } + + function buildElectricInputRegEx() { + // Reindentation should occur on any bracket char: {}()[] + // or on a match of any of the block closing keywords, at + // the end of a line + var allClosings = []; + for (var i in openClose) { + if (openClose[i]) { + var closings = openClose[i].split(";"); + for (var j in closings) { + allClosings.push(closings[j]); + } + } + } + var re = new RegExp("[{}()\\[\\]]|(" + allClosings.join("|") + ")$"); + return re; + } + + // Interface + return { + + // Regex to force current line to reindent + electricInput: buildElectricInputRegEx(), + + startState: function(basecolumn) { + var state = { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", "top", false), + indented: 0, + compilerDirectiveIndented: 0, + startOfLine: true + }; + if (hooks.startState) hooks.startState(state); + return state; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (hooks.token) { + // Call hook, with an optional return value of a style to override verilog styling. + var style = hooks.token(stream, state); + if (style !== undefined) { + return style; + } + } + if (stream.eatSpace()) return null; + curPunc = null; + curKeyword = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta" || style == "variable") { + if (((curPunc === "=") || (curPunc === "<=")) && !isInsideScopeKind(ctx, "assignment")) { + // '<=' could be nonblocking assignment or lessthan-equals (which shouldn't cause indent) + // Search through the context to see if we are already in an assignment. + // '=' could be inside port declaration with comma or ')' afterward, or inside for(;;) block. + pushContext(state, stream.column() + curPunc.length, "assignment", "assignment"); + if (ctx.align == null) ctx.align = true; + } + return style; + } + if (ctx.align == null) ctx.align = true; + + var isClosingAssignment = ctx.type == "assignment" && + closingBracket.test(curPunc) && ctx.prev && ctx.prev.type === curPunc; + if (curPunc == ctx.type || isClosingAssignment) { + if (isClosingAssignment) { + ctx = popContext(state); + } + ctx = popContext(state); + if (curPunc == ")") { + // Handle closing macros, assuming they could have a semicolon or begin/end block inside. + if (ctx && (ctx.type === "macro")) { + ctx = popContext(state); + while (ctx && (ctx.type == "statement" || ctx.type == "assignment")) ctx = popContext(state); + } + } else if (curPunc == "}") { + // Handle closing statements like constraint block: "foreach () {}" which + // do not have semicolon at end. + if (ctx && (ctx.type === "statement")) { + while (ctx && (ctx.type == "statement")) ctx = popContext(state); + } + } + } else if (((curPunc == ";" || curPunc == ",") && (ctx.type == "statement" || ctx.type == "assignment")) || + (ctx.type && isClosing(curKeyword, ctx.type))) { + ctx = popContext(state); + while (ctx && (ctx.type == "statement" || ctx.type == "assignment")) ctx = popContext(state); + } else if (curPunc == "{") { + pushContext(state, stream.column(), "}"); + } else if (curPunc == "[") { + pushContext(state, stream.column(), "]"); + } else if (curPunc == "(") { + pushContext(state, stream.column(), ")"); + } else if (ctx && ctx.type == "endcase" && curPunc == ":") { + pushContext(state, stream.column(), "statement", "case"); + } else if (curPunc == "newstatement") { + pushContext(state, stream.column(), "statement", curKeyword); + } else if (curPunc == "newblock") { + if (curKeyword == "function" && ctx && (ctx.type == "statement" || ctx.type == "endgroup")) { + // The 'function' keyword can appear in some other contexts where it actually does not + // indicate a function (import/export DPI and covergroup definitions). + // Do nothing in this case + } else if (curKeyword == "task" && ctx && ctx.type == "statement") { + // Same thing for task + } else if (curKeyword == "class" && ctx && ctx.type == "statement") { + // Same thing for class (e.g. typedef) + } else { + var close = openClose[curKeyword]; + pushContext(state, stream.column(), close, curKeyword); + } + } else if (curPunc == "newmacro" || (curKeyword && curKeyword.match(compilerDirectiveRegex))) { + if (curPunc == "newmacro") { + // Macros (especially if they have parenthesis) potentially have a semicolon + // or complete statement/block inside, and should be treated as such. + pushContext(state, stream.column(), "macro", "macro"); + } + if (curKeyword.match(compilerDirectiveEndRegex)) { + state.compilerDirectiveIndented -= statementIndentUnit; + } + if (curKeyword.match(compilerDirectiveBeginRegex)) { + state.compilerDirectiveIndented += statementIndentUnit; + } + } + + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; + if (hooks.indent) { + var fromHook = hooks.indent(state); + if (fromHook >= 0) return fromHook; + } + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + var closing = false; + var possibleClosing = textAfter.match(closingBracketOrWord); + if (possibleClosing) + closing = isClosing(possibleClosing[0], ctx.type); + if (!compilerDirectivesUseRegularIndentation && textAfter.match(compilerDirectiveRegex)) { + if (textAfter.match(compilerDirectiveEndRegex)) { + return state.compilerDirectiveIndented - statementIndentUnit; + } + return state.compilerDirectiveIndented; + } + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); + else if ((closingBracket.test(ctx.type) || ctx.type == "assignment") + && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1); + else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "indent" + }; +}); + + CodeMirror.defineMIME("text/x-verilog", { + name: "verilog" + }); + + CodeMirror.defineMIME("text/x-systemverilog", { + name: "verilog" + }); + + + + // TL-Verilog mode. + // See tl-x.org for language spec. + // See the mode in action at makerchip.com. + // Contact: steve.hoover@redwoodeda.com + + // TLV Identifier prefixes. + // Note that sign is not treated separately, so "+/-" versions of numeric identifiers + // are included. + var tlvIdentifierStyle = { + "|": "link", + ">": "property", // Should condition this off for > TLV 1c. + "$": "variable", + "$$": "variable", + "?$": "qualifier", + "?*": "qualifier", + "-": "hr", + "/": "property", + "/-": "property", + "@": "variable-3", + "@-": "variable-3", + "@++": "variable-3", + "@+=": "variable-3", + "@+=-": "variable-3", + "@--": "variable-3", + "@-=": "variable-3", + "%+": "tag", + "%-": "tag", + "%": "tag", + ">>": "tag", + "<<": "tag", + "<>": "tag", + "#": "tag", // Need to choose a style for this. + "^": "attribute", + "^^": "attribute", + "^!": "attribute", + "*": "variable-2", + "**": "variable-2", + "\\": "keyword", + "\"": "comment" + }; + + // Lines starting with these characters define scope (result in indentation). + var tlvScopePrefixChars = { + "/": "beh-hier", + ">": "beh-hier", + "-": "phys-hier", + "|": "pipe", + "?": "when", + "@": "stage", + "\\": "keyword" + }; + var tlvIndentUnit = 3; + var tlvTrackStatements = false; + var tlvIdentMatch = /^([~!@#\$%\^&\*-\+=\?\/\\\|'"<>]+)([\d\w_]*)/; // Matches an identifier. + // Note that ':' is excluded, because of it's use in [:]. + var tlvFirstLevelIndentMatch = /^[! ] /; + var tlvLineIndentationMatch = /^[! ] */; + var tlvCommentMatch = /^\/[\/\*]/; + + + // Returns a style specific to the scope at the given indentation column. + // Type is one of: "indent", "scope-ident", "before-scope-ident". + function tlvScopeStyle(state, indentation, type) { + // Begin scope. + var depth = indentation / tlvIndentUnit; // TODO: Pass this in instead. + return "tlv-" + state.tlvIndentationStyle[depth] + "-" + type; + } + + // Return true if the next thing in the stream is an identifier with a mnemonic. + function tlvIdentNext(stream) { + var match; + return (match = stream.match(tlvIdentMatch, false)) && match[2].length > 0; + } + + CodeMirror.defineMIME("text/x-tlv", { + name: "verilog", + + hooks: { + + electricInput: false, + + + // Return undefined for verilog tokenizing, or style for TLV token (null not used). + // Standard CM styles are used for most formatting, but some TL-Verilog-specific highlighting + // can be enabled with the definition of cm-tlv-* styles, including highlighting for: + // - M4 tokens + // - TLV scope indentation + // - Statement delimitation (enabled by tlvTrackStatements) + token: function(stream, state) { + var style = undefined; + var match; // Return value of pattern matches. + + // Set highlighting mode based on code region (TLV or SV). + if (stream.sol() && ! state.tlvInBlockComment) { + // Process region. + if (stream.peek() == '\\') { + style = "def"; + stream.skipToEnd(); + if (stream.string.match(/\\SV/)) { + state.tlvCodeActive = false; + } else if (stream.string.match(/\\TLV/)){ + state.tlvCodeActive = true; + } + } + // Correct indentation in the face of a line prefix char. + if (state.tlvCodeActive && stream.pos == 0 && + (state.indented == 0) && (match = stream.match(tlvLineIndentationMatch, false))) { + state.indented = match[0].length; + } + + // Compute indentation state: + // o Auto indentation on next line + // o Indentation scope styles + var indented = state.indented; + var depth = indented / tlvIndentUnit; + if (depth <= state.tlvIndentationStyle.length) { + // not deeper than current scope + + var blankline = stream.string.length == indented; + var chPos = depth * tlvIndentUnit; + if (chPos < stream.string.length) { + var bodyString = stream.string.slice(chPos); + var ch = bodyString[0]; + if (tlvScopePrefixChars[ch] && ((match = bodyString.match(tlvIdentMatch)) && + tlvIdentifierStyle[match[1]])) { + // This line begins scope. + // Next line gets indented one level. + indented += tlvIndentUnit; + // Style the next level of indentation (except non-region keyword identifiers, + // which are statements themselves) + if (!(ch == "\\" && chPos > 0)) { + state.tlvIndentationStyle[depth] = tlvScopePrefixChars[ch]; + if (tlvTrackStatements) {state.statementComment = false;} + depth++; + } + } + } + // Clear out deeper indentation levels unless line is blank. + if (!blankline) { + while (state.tlvIndentationStyle.length > depth) { + state.tlvIndentationStyle.pop(); + } + } + } + // Set next level of indentation. + state.tlvNextIndent = indented; + } + + if (state.tlvCodeActive) { + // Highlight as TLV. + + var beginStatement = false; + if (tlvTrackStatements) { + // This starts a statement if the position is at the scope level + // and we're not within a statement leading comment. + beginStatement = + (stream.peek() != " ") && // not a space + (style === undefined) && // not a region identifier + !state.tlvInBlockComment && // not in block comment + //!stream.match(tlvCommentMatch, false) && // not comment start + (stream.column() == state.tlvIndentationStyle.length * tlvIndentUnit); // at scope level + if (beginStatement) { + if (state.statementComment) { + // statement already started by comment + beginStatement = false; + } + state.statementComment = + stream.match(tlvCommentMatch, false); // comment start + } + } + + var match; + if (style !== undefined) { + // Region line. + style += " " + tlvScopeStyle(state, 0, "scope-ident") + } else if (((stream.pos / tlvIndentUnit) < state.tlvIndentationStyle.length) && + (match = stream.match(stream.sol() ? tlvFirstLevelIndentMatch : /^ /))) { + // Indentation + style = // make this style distinct from the previous one to prevent + // codemirror from combining spans + "tlv-indent-" + (((stream.pos % 2) == 0) ? "even" : "odd") + + // and style it + " " + tlvScopeStyle(state, stream.pos - tlvIndentUnit, "indent"); + // Style the line prefix character. + if (match[0].charAt(0) == "!") { + style += " tlv-alert-line-prefix"; + } + // Place a class before a scope identifier. + if (tlvIdentNext(stream)) { + style += " " + tlvScopeStyle(state, stream.pos, "before-scope-ident"); + } + } else if (state.tlvInBlockComment) { + // In a block comment. + if (stream.match(/^.*?\*\//)) { + // Exit block comment. + state.tlvInBlockComment = false; + if (tlvTrackStatements && !stream.eol()) { + // Anything after comment is assumed to be real statement content. + state.statementComment = false; + } + } else { + stream.skipToEnd(); + } + style = "comment"; + } else if ((match = stream.match(tlvCommentMatch)) && !state.tlvInBlockComment) { + // Start comment. + if (match[0] == "//") { + // Line comment. + stream.skipToEnd(); + } else { + // Block comment. + state.tlvInBlockComment = true; + } + style = "comment"; + } else if (match = stream.match(tlvIdentMatch)) { + // looks like an identifier (or identifier prefix) + var prefix = match[1]; + var mnemonic = match[2]; + if (// is identifier prefix + tlvIdentifierStyle.hasOwnProperty(prefix) && + // has mnemonic or we're at the end of the line (maybe it hasn't been typed yet) + (mnemonic.length > 0 || stream.eol())) { + style = tlvIdentifierStyle[prefix]; + if (stream.column() == state.indented) { + // Begin scope. + style += " " + tlvScopeStyle(state, stream.column(), "scope-ident") + } + } else { + // Just swallow one character and try again. + // This enables subsequent identifier match with preceding symbol character, which + // is legal within a statement. (E.g., !$reset). It also enables detection of + // comment start with preceding symbols. + stream.backUp(stream.current().length - 1); + style = "tlv-default"; + } + } else if (stream.match(/^\t+/)) { + // Highlight tabs, which are illegal. + style = "tlv-tab"; + } else if (stream.match(/^[\[\]{}\(\);\:]+/)) { + // [:], (), {}, ;. + style = "meta"; + } else if (match = stream.match(/^[mM]4([\+_])?[\w\d_]*/)) { + // m4 pre proc + style = (match[1] == "+") ? "tlv-m4-plus" : "tlv-m4"; + } else if (stream.match(/^ +/)){ + // Skip over spaces. + if (stream.eol()) { + // Trailing spaces. + style = "error"; + } else { + // Non-trailing spaces. + style = "tlv-default"; + } + } else if (stream.match(/^[\w\d_]+/)) { + // alpha-numeric token. + style = "number"; + } else { + // Eat the next char w/ no formatting. + stream.next(); + style = "tlv-default"; + } + if (beginStatement) { + style += " tlv-statement"; + } + } else { + if (stream.match(/^[mM]4([\w\d_]*)/)) { + // m4 pre proc + style = "tlv-m4"; + } + } + return style; + }, + + indent: function(state) { + return (state.tlvCodeActive == true) ? state.tlvNextIndent : -1; + }, + + startState: function(state) { + state.tlvIndentationStyle = []; // Styles to use for each level of indentation. + state.tlvCodeActive = true; // True when we're in a TLV region (and at beginning of file). + state.tlvNextIndent = -1; // The number of spaces to autoindent the next line if tlvCodeActive. + state.tlvInBlockComment = false; // True inside /**/ comment. + if (tlvTrackStatements) { + state.statementComment = false; // True inside a statement's header comment. + } + } + + } + }); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/vhdl/vhdl.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/vhdl/vhdl.js new file mode 100644 index 0000000000..133e67a268 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/vhdl/vhdl.js @@ -0,0 +1,189 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Originally written by Alf Nielsen, re-written by Michael Zhou +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +function words(str) { + var obj = {}, words = str.split(","); + for (var i = 0; i < words.length; ++i) { + var allCaps = words[i].toUpperCase(); + var firstCap = words[i].charAt(0).toUpperCase() + words[i].slice(1); + obj[words[i]] = true; + obj[allCaps] = true; + obj[firstCap] = true; + } + return obj; +} + +function metaHook(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; +} + +CodeMirror.defineMode("vhdl", function(config, parserConfig) { + var indentUnit = config.indentUnit, + atoms = parserConfig.atoms || words("null"), + hooks = parserConfig.hooks || {"`": metaHook, "$": metaHook}, + multiLineStrings = parserConfig.multiLineStrings; + + var keywords = words("abs,access,after,alias,all,and,architecture,array,assert,attribute,begin,block," + + "body,buffer,bus,case,component,configuration,constant,disconnect,downto,else,elsif,end,end block,end case," + + "end component,end for,end generate,end if,end loop,end process,end record,end units,entity,exit,file,for," + + "function,generate,generic,generic map,group,guarded,if,impure,in,inertial,inout,is,label,library,linkage," + + "literal,loop,map,mod,nand,new,next,nor,null,of,on,open,or,others,out,package,package body,port,port map," + + "postponed,procedure,process,pure,range,record,register,reject,rem,report,return,rol,ror,select,severity,signal," + + "sla,sll,sra,srl,subtype,then,to,transport,type,unaffected,units,until,use,variable,wait,when,while,with,xnor,xor"); + + var blockKeywords = words("architecture,entity,begin,case,port,else,elsif,end,for,function,if"); + + var isOperatorChar = /[&|~>!\?@#$%&|:\.]+)/, token: "variable-2"}, + {regex: /"(?:[^"\\\x00-\x1f\x7f]|\\[nt\\'"]|\\[0-9a-fA-F][0-9a-fA-F])*"/, token: "string"}, + {regex: /\(;.*?/, token: "comment", next: "comment"}, + {regex: /;;.*$/, token: "comment"}, + {regex: /\(/, indent: true}, + {regex: /\)/, dedent: true}, + ], + + comment: [ + {regex: /.*?;\)/, token: "comment", next: "start"}, + {regex: /.*/, token: "comment"}, + ], + + meta: { + dontIndentStates: ['comment'], + }, +}); + +// https://github.com/WebAssembly/design/issues/981 mentions text/webassembly, +// which seems like a reasonable choice, although it's not standard right now. +CodeMirror.defineMIME("text/webassembly", "wast"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/webidl/webidl.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/webidl/webidl.js new file mode 100644 index 0000000000..120de6bea7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/webidl/webidl.js @@ -0,0 +1,195 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); +}; + +var builtinArray = [ + "Clamp", + "Constructor", + "EnforceRange", + "Exposed", + "ImplicitThis", + "Global", "PrimaryGlobal", + "LegacyArrayClass", + "LegacyUnenumerableNamedProperties", + "LenientThis", + "NamedConstructor", + "NewObject", + "NoInterfaceObject", + "OverrideBuiltins", + "PutForwards", + "Replaceable", + "SameObject", + "TreatNonObjectAsNull", + "TreatNullAs", + "EmptyString", + "Unforgeable", + "Unscopeable" +]; +var builtins = wordRegexp(builtinArray); + +var typeArray = [ + "unsigned", "short", "long", // UnsignedIntegerType + "unrestricted", "float", "double", // UnrestrictedFloatType + "boolean", "byte", "octet", // Rest of PrimitiveType + "Promise", // PromiseType + "ArrayBuffer", "DataView", "Int8Array", "Int16Array", "Int32Array", + "Uint8Array", "Uint16Array", "Uint32Array", "Uint8ClampedArray", + "Float32Array", "Float64Array", // BufferRelatedType + "ByteString", "DOMString", "USVString", "sequence", "object", "RegExp", + "Error", "DOMException", "FrozenArray", // Rest of NonAnyType + "any", // Rest of SingleType + "void" // Rest of ReturnType +]; +var types = wordRegexp(typeArray); + +var keywordArray = [ + "attribute", "callback", "const", "deleter", "dictionary", "enum", "getter", + "implements", "inherit", "interface", "iterable", "legacycaller", "maplike", + "partial", "required", "serializer", "setlike", "setter", "static", + "stringifier", "typedef", // ArgumentNameKeyword except + // "unrestricted" + "optional", "readonly", "or" +]; +var keywords = wordRegexp(keywordArray); + +var atomArray = [ + "true", "false", // BooleanLiteral + "Infinity", "NaN", // FloatLiteral + "null" // Rest of ConstValue +]; +var atoms = wordRegexp(atomArray); + +CodeMirror.registerHelper("hintWords", "webidl", + builtinArray.concat(typeArray).concat(keywordArray).concat(atomArray)); + +var startDefArray = ["callback", "dictionary", "enum", "interface"]; +var startDefs = wordRegexp(startDefArray); + +var endDefArray = ["typedef"]; +var endDefs = wordRegexp(endDefArray); + +var singleOperators = /^[:<=>?]/; +var integers = /^-?([1-9][0-9]*|0[Xx][0-9A-Fa-f]+|0[0-7]*)/; +var floats = /^-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)/; +var identifiers = /^_?[A-Za-z][0-9A-Z_a-z-]*/; +var identifiersEnd = /^_?[A-Za-z][0-9A-Z_a-z-]*(?=\s*;)/; +var strings = /^"[^"]*"/; +var multilineComments = /^\/\*.*?\*\//; +var multilineCommentsStart = /^\/\*.*/; +var multilineCommentsEnd = /^.*?\*\//; + +function readToken(stream, state) { + // whitespace + if (stream.eatSpace()) return null; + + // comment + if (state.inComment) { + if (stream.match(multilineCommentsEnd)) { + state.inComment = false; + return "comment"; + } + stream.skipToEnd(); + return "comment"; + } + if (stream.match("//")) { + stream.skipToEnd(); + return "comment"; + } + if (stream.match(multilineComments)) return "comment"; + if (stream.match(multilineCommentsStart)) { + state.inComment = true; + return "comment"; + } + + // integer and float + if (stream.match(/^-?[0-9\.]/, false)) { + if (stream.match(integers) || stream.match(floats)) return "number"; + } + + // string + if (stream.match(strings)) return "string"; + + // identifier + if (state.startDef && stream.match(identifiers)) return "def"; + + if (state.endDef && stream.match(identifiersEnd)) { + state.endDef = false; + return "def"; + } + + if (stream.match(keywords)) return "keyword"; + + if (stream.match(types)) { + var lastToken = state.lastToken; + var nextToken = (stream.match(/^\s*(.+?)\b/, false) || [])[1]; + + if (lastToken === ":" || lastToken === "implements" || + nextToken === "implements" || nextToken === "=") { + // Used as identifier + return "builtin"; + } else { + // Used as type + return "variable-3"; + } + } + + if (stream.match(builtins)) return "builtin"; + if (stream.match(atoms)) return "atom"; + if (stream.match(identifiers)) return "variable"; + + // other + if (stream.match(singleOperators)) return "operator"; + + // unrecognized + stream.next(); + return null; +}; + +CodeMirror.defineMode("webidl", function() { + return { + startState: function() { + return { + // Is in multiline comment + inComment: false, + // Last non-whitespace, matched token + lastToken: "", + // Next token is a definition + startDef: false, + // Last token of the statement is a definition + endDef: false + }; + }, + token: function(stream, state) { + var style = readToken(stream, state); + + if (style) { + var cur = stream.current(); + state.lastToken = cur; + if (style === "keyword") { + state.startDef = startDefs.test(cur); + state.endDef = state.endDef || endDefs.test(cur); + } else { + state.startDef = false; + } + } + + return style; + } + }; +}); + +CodeMirror.defineMIME("text/x-webidl", "webidl"); +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/xml/xml.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/xml/xml.js new file mode 100644 index 0000000000..4e36106b49 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/xml/xml.js @@ -0,0 +1,417 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +var htmlConfig = { + autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, + 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, + 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, + 'track': true, 'wbr': true, 'menuitem': true}, + implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, + 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, + 'th': true, 'tr': true}, + contextGrabbers: { + 'dd': {'dd': true, 'dt': true}, + 'dt': {'dd': true, 'dt': true}, + 'li': {'li': true}, + 'option': {'option': true, 'optgroup': true}, + 'optgroup': {'optgroup': true}, + 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, + 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, + 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, + 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, + 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, + 'rp': {'rp': true, 'rt': true}, + 'rt': {'rp': true, 'rt': true}, + 'tbody': {'tbody': true, 'tfoot': true}, + 'td': {'td': true, 'th': true}, + 'tfoot': {'tbody': true}, + 'th': {'td': true, 'th': true}, + 'thead': {'tbody': true, 'tfoot': true}, + 'tr': {'tr': true} + }, + doNotIndent: {"pre": true}, + allowUnquoted: true, + allowMissing: true, + caseFold: true +} + +var xmlConfig = { + autoSelfClosers: {}, + implicitlyClosed: {}, + contextGrabbers: {}, + doNotIndent: {}, + allowUnquoted: false, + allowMissing: false, + allowMissingTagName: false, + caseFold: false +} + +CodeMirror.defineMode("xml", function(editorConf, config_) { + var indentUnit = editorConf.indentUnit + var config = {} + var defaults = config_.htmlMode ? htmlConfig : xmlConfig + for (var prop in defaults) config[prop] = defaults[prop] + for (var prop in config_) config[prop] = config_[prop] + + // Return variables for tokenizers + var type, setStyle; + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var ch = stream.next(); + if (ch == "<") { + if (stream.eat("!")) { + if (stream.eat("[")) { + if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); + else return null; + } else if (stream.match("--")) { + return chain(inBlock("comment", "-->")); + } else if (stream.match("DOCTYPE", true, true)) { + stream.eatWhile(/[\w\._\-]/); + return chain(doctype(1)); + } else { + return null; + } + } else if (stream.eat("?")) { + stream.eatWhile(/[\w\._\-]/); + state.tokenize = inBlock("meta", "?>"); + return "meta"; + } else { + type = stream.eat("/") ? "closeTag" : "openTag"; + state.tokenize = inTag; + return "tag bracket"; + } + } else if (ch == "&") { + var ok; + if (stream.eat("#")) { + if (stream.eat("x")) { + ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); + } else { + ok = stream.eatWhile(/[\d]/) && stream.eat(";"); + } + } else { + ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); + } + return ok ? "atom" : "error"; + } else { + stream.eatWhile(/[^&<]/); + return null; + } + } + inText.isInText = true; + + function inTag(stream, state) { + var ch = stream.next(); + if (ch == ">" || (ch == "/" && stream.eat(">"))) { + state.tokenize = inText; + type = ch == ">" ? "endTag" : "selfcloseTag"; + return "tag bracket"; + } else if (ch == "=") { + type = "equals"; + return null; + } else if (ch == "<") { + state.tokenize = inText; + state.state = baseState; + state.tagName = state.tagStart = null; + var next = state.tokenize(stream, state); + return next ? next + " tag error" : "tag error"; + } else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + state.stringStartCol = stream.column(); + return state.tokenize(stream, state); + } else { + stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/); + return "word"; + } + } + + function inAttribute(quote) { + var closure = function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inTag; + break; + } + } + return "string"; + }; + closure.isInAttribute = true; + return closure; + } + + function inBlock(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + return style; + } + } + + function doctype(depth) { + return function(stream, state) { + var ch; + while ((ch = stream.next()) != null) { + if (ch == "<") { + state.tokenize = doctype(depth + 1); + return state.tokenize(stream, state); + } else if (ch == ">") { + if (depth == 1) { + state.tokenize = inText; + break; + } else { + state.tokenize = doctype(depth - 1); + return state.tokenize(stream, state); + } + } + } + return "meta"; + }; + } + + function lower(tagName) { + return tagName && tagName.toLowerCase(); + } + + function Context(state, tagName, startOfLine) { + this.prev = state.context; + this.tagName = tagName || ""; + this.indent = state.indented; + this.startOfLine = startOfLine; + if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent)) + this.noIndent = true; + } + function popContext(state) { + if (state.context) state.context = state.context.prev; + } + function maybePopContext(state, nextTagName) { + var parentTagName; + while (true) { + if (!state.context) { + return; + } + parentTagName = state.context.tagName; + if (!config.contextGrabbers.hasOwnProperty(lower(parentTagName)) || + !config.contextGrabbers[lower(parentTagName)].hasOwnProperty(lower(nextTagName))) { + return; + } + popContext(state); + } + } + + function baseState(type, stream, state) { + if (type == "openTag") { + state.tagStart = stream.column(); + return tagNameState; + } else if (type == "closeTag") { + return closeTagNameState; + } else { + return baseState; + } + } + function tagNameState(type, stream, state) { + if (type == "word") { + state.tagName = stream.current(); + setStyle = "tag"; + return attrState; + } else if (config.allowMissingTagName && type == "endTag") { + setStyle = "tag bracket"; + return attrState(type, stream, state); + } else { + setStyle = "error"; + return tagNameState; + } + } + function closeTagNameState(type, stream, state) { + if (type == "word") { + var tagName = stream.current(); + if (state.context && state.context.tagName != tagName && + config.implicitlyClosed.hasOwnProperty(lower(state.context.tagName))) + popContext(state); + if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) { + setStyle = "tag"; + return closeState; + } else { + setStyle = "tag error"; + return closeStateErr; + } + } else if (config.allowMissingTagName && type == "endTag") { + setStyle = "tag bracket"; + return closeState(type, stream, state); + } else { + setStyle = "error"; + return closeStateErr; + } + } + + function closeState(type, _stream, state) { + if (type != "endTag") { + setStyle = "error"; + return closeState; + } + popContext(state); + return baseState; + } + function closeStateErr(type, stream, state) { + setStyle = "error"; + return closeState(type, stream, state); + } + + function attrState(type, _stream, state) { + if (type == "word") { + setStyle = "attribute"; + return attrEqState; + } else if (type == "endTag" || type == "selfcloseTag") { + var tagName = state.tagName, tagStart = state.tagStart; + state.tagName = state.tagStart = null; + if (type == "selfcloseTag" || + config.autoSelfClosers.hasOwnProperty(lower(tagName))) { + maybePopContext(state, tagName); + } else { + maybePopContext(state, tagName); + state.context = new Context(state, tagName, tagStart == state.indented); + } + return baseState; + } + setStyle = "error"; + return attrState; + } + function attrEqState(type, stream, state) { + if (type == "equals") return attrValueState; + if (!config.allowMissing) setStyle = "error"; + return attrState(type, stream, state); + } + function attrValueState(type, stream, state) { + if (type == "string") return attrContinuedState; + if (type == "word" && config.allowUnquoted) {setStyle = "string"; return attrState;} + setStyle = "error"; + return attrState(type, stream, state); + } + function attrContinuedState(type, stream, state) { + if (type == "string") return attrContinuedState; + return attrState(type, stream, state); + } + + return { + startState: function(baseIndent) { + var state = {tokenize: inText, + state: baseState, + indented: baseIndent || 0, + tagName: null, tagStart: null, + context: null} + if (baseIndent != null) state.baseIndent = baseIndent + return state + }, + + token: function(stream, state) { + if (!state.tagName && stream.sol()) + state.indented = stream.indentation(); + + if (stream.eatSpace()) return null; + type = null; + var style = state.tokenize(stream, state); + if ((style || type) && style != "comment") { + setStyle = null; + state.state = state.state(type || style, stream, state); + if (setStyle) + style = setStyle == "error" ? style + " error" : setStyle; + } + return style; + }, + + indent: function(state, textAfter, fullLine) { + var context = state.context; + // Indent multi-line strings (e.g. css). + if (state.tokenize.isInAttribute) { + if (state.tagStart == state.indented) + return state.stringStartCol + 1; + else + return state.indented + indentUnit; + } + if (context && context.noIndent) return CodeMirror.Pass; + if (state.tokenize != inTag && state.tokenize != inText) + return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; + // Indent the starts of attribute names. + if (state.tagName) { + if (config.multilineTagIndentPastTag !== false) + return state.tagStart + state.tagName.length + 2; + else + return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1); + } + if (config.alignCDATA && /$/, + blockCommentStart: "", + + configuration: config.htmlMode ? "html" : "xml", + helperType: config.htmlMode ? "html" : "xml", + + skipAttribute: function(state) { + if (state.state == attrValueState) + state.state = attrState + }, + + xmlCurrentTag: function(state) { + return state.tagName ? {name: state.tagName, close: state.type == "closeTag"} : null + }, + + xmlCurrentContext: function(state) { + var context = [] + for (var cx = state.context; cx; cx = cx.prev) + context.push(cx.tagName) + return context.reverse() + } + }; +}); + +CodeMirror.defineMIME("text/xml", "xml"); +CodeMirror.defineMIME("application/xml", "xml"); +if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) + CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/xquery/xquery.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/xquery/xquery.js new file mode 100644 index 0000000000..395b6a7014 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/xquery/xquery.js @@ -0,0 +1,448 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("xquery", function() { + + // The keywords object is set to the result of this self executing + // function. Each keyword is a property of the keywords object whose + // value is {type: atype, style: astyle} + var keywords = function(){ + // convenience functions used to build keywords object + function kw(type) {return {type: type, style: "keyword"};} + var operator = kw("operator") + , atom = {type: "atom", style: "atom"} + , punctuation = {type: "punctuation", style: null} + , qualifier = {type: "axis_specifier", style: "qualifier"}; + + // kwObj is what is return from this function at the end + var kwObj = { + ',': punctuation + }; + + // a list of 'basic' keywords. For each add a property to kwObj with the value of + // {type: basic[i], style: "keyword"} e.g. 'after' --> {type: "after", style: "keyword"} + var basic = ['after', 'all', 'allowing', 'ancestor', 'ancestor-or-self', 'any', 'array', 'as', + 'ascending', 'at', 'attribute', 'base-uri', 'before', 'boundary-space', 'by', 'case', 'cast', + 'castable', 'catch', 'child', 'collation', 'comment', 'construction', 'contains', 'content', + 'context', 'copy', 'copy-namespaces', 'count', 'decimal-format', 'declare', 'default', 'delete', + 'descendant', 'descendant-or-self', 'descending', 'diacritics', 'different', 'distance', + 'document', 'document-node', 'element', 'else', 'empty', 'empty-sequence', 'encoding', 'end', + 'entire', 'every', 'exactly', 'except', 'external', 'first', 'following', 'following-sibling', + 'for', 'from', 'ftand', 'ftnot', 'ft-option', 'ftor', 'function', 'fuzzy', 'greatest', 'group', + 'if', 'import', 'in', 'inherit', 'insensitive', 'insert', 'instance', 'intersect', 'into', + 'invoke', 'is', 'item', 'language', 'last', 'lax', 'least', 'let', 'levels', 'lowercase', 'map', + 'modify', 'module', 'most', 'namespace', 'next', 'no', 'node', 'nodes', 'no-inherit', + 'no-preserve', 'not', 'occurs', 'of', 'only', 'option', 'order', 'ordered', 'ordering', + 'paragraph', 'paragraphs', 'parent', 'phrase', 'preceding', 'preceding-sibling', 'preserve', + 'previous', 'processing-instruction', 'relationship', 'rename', 'replace', 'return', + 'revalidation', 'same', 'satisfies', 'schema', 'schema-attribute', 'schema-element', 'score', + 'self', 'sensitive', 'sentence', 'sentences', 'sequence', 'skip', 'sliding', 'some', 'stable', + 'start', 'stemming', 'stop', 'strict', 'strip', 'switch', 'text', 'then', 'thesaurus', 'times', + 'to', 'transform', 'treat', 'try', 'tumbling', 'type', 'typeswitch', 'union', 'unordered', + 'update', 'updating', 'uppercase', 'using', 'validate', 'value', 'variable', 'version', + 'weight', 'when', 'where', 'wildcards', 'window', 'with', 'without', 'word', 'words', 'xquery']; + for(var i=0, l=basic.length; i < l; i++) { kwObj[basic[i]] = kw(basic[i]);}; + + // a list of types. For each add a property to kwObj with the value of + // {type: "atom", style: "atom"} + var types = ['xs:anyAtomicType', 'xs:anySimpleType', 'xs:anyType', 'xs:anyURI', + 'xs:base64Binary', 'xs:boolean', 'xs:byte', 'xs:date', 'xs:dateTime', 'xs:dateTimeStamp', + 'xs:dayTimeDuration', 'xs:decimal', 'xs:double', 'xs:duration', 'xs:ENTITIES', 'xs:ENTITY', + 'xs:float', 'xs:gDay', 'xs:gMonth', 'xs:gMonthDay', 'xs:gYear', 'xs:gYearMonth', 'xs:hexBinary', + 'xs:ID', 'xs:IDREF', 'xs:IDREFS', 'xs:int', 'xs:integer', 'xs:item', 'xs:java', 'xs:language', + 'xs:long', 'xs:Name', 'xs:NCName', 'xs:negativeInteger', 'xs:NMTOKEN', 'xs:NMTOKENS', + 'xs:nonNegativeInteger', 'xs:nonPositiveInteger', 'xs:normalizedString', 'xs:NOTATION', + 'xs:numeric', 'xs:positiveInteger', 'xs:precisionDecimal', 'xs:QName', 'xs:short', 'xs:string', + 'xs:time', 'xs:token', 'xs:unsignedByte', 'xs:unsignedInt', 'xs:unsignedLong', + 'xs:unsignedShort', 'xs:untyped', 'xs:untypedAtomic', 'xs:yearMonthDuration']; + for(var i=0, l=types.length; i < l; i++) { kwObj[types[i]] = atom;}; + + // each operator will add a property to kwObj with value of {type: "operator", style: "keyword"} + var operators = ['eq', 'ne', 'lt', 'le', 'gt', 'ge', ':=', '=', '>', '>=', '<', '<=', '.', '|', '?', 'and', 'or', 'div', 'idiv', 'mod', '*', '/', '+', '-']; + for(var i=0, l=operators.length; i < l; i++) { kwObj[operators[i]] = operator;}; + + // each axis_specifiers will add a property to kwObj with value of {type: "axis_specifier", style: "qualifier"} + var axis_specifiers = ["self::", "attribute::", "child::", "descendant::", "descendant-or-self::", "parent::", + "ancestor::", "ancestor-or-self::", "following::", "preceding::", "following-sibling::", "preceding-sibling::"]; + for(var i=0, l=axis_specifiers.length; i < l; i++) { kwObj[axis_specifiers[i]] = qualifier; }; + + return kwObj; + }(); + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + // the primary mode tokenizer + function tokenBase(stream, state) { + var ch = stream.next(), + mightBeFunction = false, + isEQName = isEQNameAhead(stream); + + // an XML tag (if not in some sub, chained tokenizer) + if (ch == "<") { + if(stream.match("!--", true)) + return chain(stream, state, tokenXMLComment); + + if(stream.match("![CDATA", false)) { + state.tokenize = tokenCDATA; + return "tag"; + } + + if(stream.match("?", false)) { + return chain(stream, state, tokenPreProcessing); + } + + var isclose = stream.eat("/"); + stream.eatSpace(); + var tagName = "", c; + while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; + + return chain(stream, state, tokenTag(tagName, isclose)); + } + // start code block + else if(ch == "{") { + pushStateStack(state, { type: "codeblock"}); + return null; + } + // end code block + else if(ch == "}") { + popStateStack(state); + return null; + } + // if we're in an XML block + else if(isInXmlBlock(state)) { + if(ch == ">") + return "tag"; + else if(ch == "/" && stream.eat(">")) { + popStateStack(state); + return "tag"; + } + else + return "variable"; + } + // if a number + else if (/\d/.test(ch)) { + stream.match(/^\d*(?:\.\d*)?(?:E[+\-]?\d+)?/); + return "atom"; + } + // comment start + else if (ch === "(" && stream.eat(":")) { + pushStateStack(state, { type: "comment"}); + return chain(stream, state, tokenComment); + } + // quoted string + else if (!isEQName && (ch === '"' || ch === "'")) + return chain(stream, state, tokenString(ch)); + // variable + else if(ch === "$") { + return chain(stream, state, tokenVariable); + } + // assignment + else if(ch ===":" && stream.eat("=")) { + return "keyword"; + } + // open paren + else if(ch === "(") { + pushStateStack(state, { type: "paren"}); + return null; + } + // close paren + else if(ch === ")") { + popStateStack(state); + return null; + } + // open paren + else if(ch === "[") { + pushStateStack(state, { type: "bracket"}); + return null; + } + // close paren + else if(ch === "]") { + popStateStack(state); + return null; + } + else { + var known = keywords.propertyIsEnumerable(ch) && keywords[ch]; + + // if there's a EQName ahead, consume the rest of the string portion, it's likely a function + if(isEQName && ch === '\"') while(stream.next() !== '"'){} + if(isEQName && ch === '\'') while(stream.next() !== '\''){} + + // gobble up a word if the character is not known + if(!known) stream.eatWhile(/[\w\$_-]/); + + // gobble a colon in the case that is a lib func type call fn:doc + var foundColon = stream.eat(":"); + + // if there's not a second colon, gobble another word. Otherwise, it's probably an axis specifier + // which should get matched as a keyword + if(!stream.eat(":") && foundColon) { + stream.eatWhile(/[\w\$_-]/); + } + // if the next non whitespace character is an open paren, this is probably a function (if not a keyword of other sort) + if(stream.match(/^[ \t]*\(/, false)) { + mightBeFunction = true; + } + // is the word a keyword? + var word = stream.current(); + known = keywords.propertyIsEnumerable(word) && keywords[word]; + + // if we think it's a function call but not yet known, + // set style to variable for now for lack of something better + if(mightBeFunction && !known) known = {type: "function_call", style: "variable def"}; + + // if the previous word was element, attribute, axis specifier, this word should be the name of that + if(isInXmlConstructor(state)) { + popStateStack(state); + return "variable"; + } + // as previously checked, if the word is element,attribute, axis specifier, call it an "xmlconstructor" and + // push the stack so we know to look for it on the next word + if(word == "element" || word == "attribute" || known.type == "axis_specifier") pushStateStack(state, {type: "xmlconstructor"}); + + // if the word is known, return the details of that else just call this a generic 'word' + return known ? known.style : "variable"; + } + } + + // handle comments, including nested + function tokenComment(stream, state) { + var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; + while (ch = stream.next()) { + if (ch == ")" && maybeEnd) { + if(nestedCount > 0) + nestedCount--; + else { + popStateStack(state); + break; + } + } + else if(ch == ":" && maybeNested) { + nestedCount++; + } + maybeEnd = (ch == ":"); + maybeNested = (ch == "("); + } + + return "comment"; + } + + // tokenizer for string literals + // optionally pass a tokenizer function to set state.tokenize back to when finished + function tokenString(quote, f) { + return function(stream, state) { + var ch; + + if(isInString(state) && stream.current() == quote) { + popStateStack(state); + if(f) state.tokenize = f; + return "string"; + } + + pushStateStack(state, { type: "string", name: quote, tokenize: tokenString(quote, f) }); + + // if we're in a string and in an XML block, allow an embedded code block + if(stream.match("{", false) && isInXmlAttributeBlock(state)) { + state.tokenize = tokenBase; + return "string"; + } + + + while (ch = stream.next()) { + if (ch == quote) { + popStateStack(state); + if(f) state.tokenize = f; + break; + } + else { + // if we're in a string and in an XML block, allow an embedded code block in an attribute + if(stream.match("{", false) && isInXmlAttributeBlock(state)) { + state.tokenize = tokenBase; + return "string"; + } + + } + } + + return "string"; + }; + } + + // tokenizer for variables + function tokenVariable(stream, state) { + var isVariableChar = /[\w\$_-]/; + + // a variable may start with a quoted EQName so if the next character is quote, consume to the next quote + if(stream.eat("\"")) { + while(stream.next() !== '\"'){}; + stream.eat(":"); + } else { + stream.eatWhile(isVariableChar); + if(!stream.match(":=", false)) stream.eat(":"); + } + stream.eatWhile(isVariableChar); + state.tokenize = tokenBase; + return "variable"; + } + + // tokenizer for XML tags + function tokenTag(name, isclose) { + return function(stream, state) { + stream.eatSpace(); + if(isclose && stream.eat(">")) { + popStateStack(state); + state.tokenize = tokenBase; + return "tag"; + } + // self closing tag without attributes? + if(!stream.eat("/")) + pushStateStack(state, { type: "tag", name: name, tokenize: tokenBase}); + if(!stream.eat(">")) { + state.tokenize = tokenAttribute; + return "tag"; + } + else { + state.tokenize = tokenBase; + } + return "tag"; + }; + } + + // tokenizer for XML attributes + function tokenAttribute(stream, state) { + var ch = stream.next(); + + if(ch == "/" && stream.eat(">")) { + if(isInXmlAttributeBlock(state)) popStateStack(state); + if(isInXmlBlock(state)) popStateStack(state); + return "tag"; + } + if(ch == ">") { + if(isInXmlAttributeBlock(state)) popStateStack(state); + return "tag"; + } + if(ch == "=") + return null; + // quoted string + if (ch == '"' || ch == "'") + return chain(stream, state, tokenString(ch, tokenAttribute)); + + if(!isInXmlAttributeBlock(state)) + pushStateStack(state, { type: "attribute", tokenize: tokenAttribute}); + + stream.eat(/[a-zA-Z_:]/); + stream.eatWhile(/[-a-zA-Z0-9_:.]/); + stream.eatSpace(); + + // the case where the attribute has not value and the tag was closed + if(stream.match(">", false) || stream.match("/", false)) { + popStateStack(state); + state.tokenize = tokenBase; + } + + return "attribute"; + } + + // handle comments, including nested + function tokenXMLComment(stream, state) { + var ch; + while (ch = stream.next()) { + if (ch == "-" && stream.match("->", true)) { + state.tokenize = tokenBase; + return "comment"; + } + } + } + + + // handle CDATA + function tokenCDATA(stream, state) { + var ch; + while (ch = stream.next()) { + if (ch == "]" && stream.match("]", true)) { + state.tokenize = tokenBase; + return "comment"; + } + } + } + + // handle preprocessing instructions + function tokenPreProcessing(stream, state) { + var ch; + while (ch = stream.next()) { + if (ch == "?" && stream.match(">", true)) { + state.tokenize = tokenBase; + return "comment meta"; + } + } + } + + + // functions to test the current context of the state + function isInXmlBlock(state) { return isIn(state, "tag"); } + function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); } + function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"); } + function isInString(state) { return isIn(state, "string"); } + + function isEQNameAhead(stream) { + // assume we've already eaten a quote (") + if(stream.current() === '"') + return stream.match(/^[^\"]+\"\:/, false); + else if(stream.current() === '\'') + return stream.match(/^[^\"]+\'\:/, false); + else + return false; + } + + function isIn(state, type) { + return (state.stack.length && state.stack[state.stack.length - 1].type == type); + } + + function pushStateStack(state, newState) { + state.stack.push(newState); + } + + function popStateStack(state) { + state.stack.pop(); + var reinstateTokenize = state.stack.length && state.stack[state.stack.length-1].tokenize; + state.tokenize = reinstateTokenize || tokenBase; + } + + // the interface for the mode API + return { + startState: function() { + return { + tokenize: tokenBase, + cc: [], + stack: [] + }; + }, + + token: function(stream, state) { + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + return style; + }, + + blockCommentStart: "(:", + blockCommentEnd: ":)" + + }; + +}); + +CodeMirror.defineMIME("application/xquery", "xquery"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/yacas/yacas.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/yacas/yacas.js new file mode 100644 index 0000000000..b7ac96b71d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/yacas/yacas.js @@ -0,0 +1,204 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Yacas mode copyright (c) 2015 by Grzegorz Mazur +// Loosely based on mathematica mode by Calin Barbat + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('yacas', function(_config, _parserConfig) { + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + var bodiedOps = words("Assert BackQuote D Defun Deriv For ForEach FromFile " + + "FromString Function Integrate InverseTaylor Limit " + + "LocalSymbols Macro MacroRule MacroRulePattern " + + "NIntegrate Rule RulePattern Subst TD TExplicitSum " + + "TSum Taylor Taylor1 Taylor2 Taylor3 ToFile " + + "ToStdout ToString TraceRule Until While"); + + // patterns + var pFloatForm = "(?:(?:\\.\\d+|\\d+\\.\\d*|\\d+)(?:[eE][+-]?\\d+)?)"; + var pIdentifier = "(?:[a-zA-Z\\$'][a-zA-Z0-9\\$']*)"; + + // regular expressions + var reFloatForm = new RegExp(pFloatForm); + var reIdentifier = new RegExp(pIdentifier); + var rePattern = new RegExp(pIdentifier + "?_" + pIdentifier); + var reFunctionLike = new RegExp(pIdentifier + "\\s*\\("); + + function tokenBase(stream, state) { + var ch; + + // get next character + ch = stream.next(); + + // string + if (ch === '"') { + state.tokenize = tokenString; + return state.tokenize(stream, state); + } + + // comment + if (ch === '/') { + if (stream.eat('*')) { + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + + // go back one character + stream.backUp(1); + + // update scope info + var m = stream.match(/^(\w+)\s*\(/, false); + if (m !== null && bodiedOps.hasOwnProperty(m[1])) + state.scopes.push('bodied'); + + var scope = currentScope(state); + + if (scope === 'bodied' && ch === '[') + state.scopes.pop(); + + if (ch === '[' || ch === '{' || ch === '(') + state.scopes.push(ch); + + scope = currentScope(state); + + if (scope === '[' && ch === ']' || + scope === '{' && ch === '}' || + scope === '(' && ch === ')') + state.scopes.pop(); + + if (ch === ';') { + while (scope === 'bodied') { + state.scopes.pop(); + scope = currentScope(state); + } + } + + // look for ordered rules + if (stream.match(/\d+ *#/, true, false)) { + return 'qualifier'; + } + + // look for numbers + if (stream.match(reFloatForm, true, false)) { + return 'number'; + } + + // look for placeholders + if (stream.match(rePattern, true, false)) { + return 'variable-3'; + } + + // match all braces separately + if (stream.match(/(?:\[|\]|{|}|\(|\))/, true, false)) { + return 'bracket'; + } + + // literals looking like function calls + if (stream.match(reFunctionLike, true, false)) { + stream.backUp(1); + return 'variable'; + } + + // all other identifiers + if (stream.match(reIdentifier, true, false)) { + return 'variable-2'; + } + + // operators; note that operators like @@ or /; are matched separately for each symbol. + if (stream.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%|#)/, true, false)) { + return 'operator'; + } + + // everything else is an error + return 'error'; + } + + function tokenString(stream, state) { + var next, end = false, escaped = false; + while ((next = stream.next()) != null) { + if (next === '"' && !escaped) { + end = true; + break; + } + escaped = !escaped && next === '\\'; + } + if (end && !escaped) { + state.tokenize = tokenBase; + } + return 'string'; + }; + + function tokenComment(stream, state) { + var prev, next; + while((next = stream.next()) != null) { + if (prev === '*' && next === '/') { + state.tokenize = tokenBase; + break; + } + prev = next; + } + return 'comment'; + } + + function currentScope(state) { + var scope = null; + if (state.scopes.length > 0) + scope = state.scopes[state.scopes.length - 1]; + return scope; + } + + return { + startState: function() { + return { + tokenize: tokenBase, + scopes: [] + }; + }, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return state.tokenize(stream, state); + }, + indent: function(state, textAfter) { + if (state.tokenize !== tokenBase && state.tokenize !== null) + return CodeMirror.Pass; + + var delta = 0; + if (textAfter === ']' || textAfter === '];' || + textAfter === '}' || textAfter === '};' || + textAfter === ');') + delta = -1; + + return (state.scopes.length + delta) * _config.indentUnit; + }, + electricChars: "{}[]();", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//" + }; +}); + +CodeMirror.defineMIME('text/x-yacas', { + name: 'yacas' +}); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js new file mode 100644 index 0000000000..5c6175e4ec --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js @@ -0,0 +1,72 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../yaml/yaml")) + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../yaml/yaml"], mod) + else // Plain browser env + mod(CodeMirror) +})(function (CodeMirror) { + + var START = 0, FRONTMATTER = 1, BODY = 2 + + // a mixed mode for Markdown text with an optional YAML front matter + CodeMirror.defineMode("yaml-frontmatter", function (config, parserConfig) { + var yamlMode = CodeMirror.getMode(config, "yaml") + var innerMode = CodeMirror.getMode(config, parserConfig && parserConfig.base || "gfm") + + function localMode(state) { + return state.state == FRONTMATTER ? {mode: yamlMode, state: state.yaml} : {mode: innerMode, state: state.inner} + } + + return { + startState: function () { + return { + state: START, + yaml: null, + inner: CodeMirror.startState(innerMode) + } + }, + copyState: function (state) { + return { + state: state.state, + yaml: state.yaml && CodeMirror.copyState(yamlMode, state.yaml), + inner: CodeMirror.copyState(innerMode, state.inner) + } + }, + token: function (stream, state) { + if (state.state == START) { + if (stream.match('---', false)) { + state.state = FRONTMATTER + state.yaml = CodeMirror.startState(yamlMode) + return yamlMode.token(stream, state.yaml) + } else { + state.state = BODY + return innerMode.token(stream, state.inner) + } + } else if (state.state == FRONTMATTER) { + var end = stream.sol() && stream.match(/(---|\.\.\.)/, false) + var style = yamlMode.token(stream, state.yaml) + if (end) { + state.state = BODY + state.yaml = null + } + return style + } else { + return innerMode.token(stream, state.inner) + } + }, + innerMode: localMode, + indent: function(state, a, b) { + var m = localMode(state) + return m.mode.indent ? m.mode.indent(m.state, a, b) : CodeMirror.Pass + }, + blankLine: function (state) { + var m = localMode(state) + if (m.mode.blankLine) return m.mode.blankLine(m.state) + } + } + }) +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/yaml/yaml.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/yaml/yaml.js new file mode 100644 index 0000000000..d464941026 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/yaml/yaml.js @@ -0,0 +1,120 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("yaml", function() { + + var cons = ['true', 'false', 'on', 'off', 'yes', 'no']; + var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i'); + + return { + token: function(stream, state) { + var ch = stream.peek(); + var esc = state.escaped; + state.escaped = false; + /* comments */ + if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) { + stream.skipToEnd(); + return "comment"; + } + + if (stream.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)) + return "string"; + + if (state.literal && stream.indentation() > state.keyCol) { + stream.skipToEnd(); return "string"; + } else if (state.literal) { state.literal = false; } + if (stream.sol()) { + state.keyCol = 0; + state.pair = false; + state.pairStart = false; + /* document start */ + if(stream.match('---')) { return "def"; } + /* document end */ + if (stream.match('...')) { return "def"; } + /* array list item */ + if (stream.match(/\s*-\s+/)) { return 'meta'; } + } + /* inline pairs/lists */ + if (stream.match(/^(\{|\}|\[|\])/)) { + if (ch == '{') + state.inlinePairs++; + else if (ch == '}') + state.inlinePairs--; + else if (ch == '[') + state.inlineList++; + else + state.inlineList--; + return 'meta'; + } + + /* list separator */ + if (state.inlineList > 0 && !esc && ch == ',') { + stream.next(); + return 'meta'; + } + /* pairs separator */ + if (state.inlinePairs > 0 && !esc && ch == ',') { + state.keyCol = 0; + state.pair = false; + state.pairStart = false; + stream.next(); + return 'meta'; + } + + /* start of value of a pair */ + if (state.pairStart) { + /* block literals */ + if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; }; + /* references */ + if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; } + /* numbers */ + if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; } + if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; } + /* keywords */ + if (stream.match(keywordRegex)) { return 'keyword'; } + } + + /* pairs (associative arrays) -> key */ + if (!state.pair && stream.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)) { + state.pair = true; + state.keyCol = stream.indentation(); + return "atom"; + } + if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; } + + /* nothing found, continue */ + state.pairStart = false; + state.escaped = (ch == '\\'); + stream.next(); + return null; + }, + startState: function() { + return { + pair: false, + pairStart: false, + keyCol: 0, + inlinePairs: 0, + inlineList: 0, + literal: false, + escaped: false + }; + }, + lineComment: "#", + fold: "indent" + }; +}); + +CodeMirror.defineMIME("text/x-yaml", "yaml"); +CodeMirror.defineMIME("text/yaml", "yaml"); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/z80/z80.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/z80/z80.js new file mode 100644 index 0000000000..8cea4ff90c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/mode/z80/z80.js @@ -0,0 +1,116 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('z80', function(_config, parserConfig) { + var ez80 = parserConfig.ez80; + var keywords1, keywords2; + if (ez80) { + keywords1 = /^(exx?|(ld|cp)([di]r?)?|[lp]ea|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|[de]i|halt|im|in([di]mr?|ir?|irx|2r?)|ot(dmr?|[id]rx|imr?)|out(0?|[di]r?|[di]2r?)|tst(io)?|slp)(\.([sl]?i)?[sl])?\b/i; + keywords2 = /^(((call|j[pr]|rst|ret[in]?)(\.([sl]?i)?[sl])?)|(rs|st)mix)\b/i; + } else { + keywords1 = /^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\b/i; + keywords2 = /^(call|j[pr]|ret[in]?|b_?(call|jump))\b/i; + } + + var variables1 = /^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\b/i; + var variables2 = /^(n?[zc]|p[oe]?|m)\b/i; + var errors = /^([hl][xy]|i[xy][hl]|slia|sll)\b/i; + var numbers = /^([\da-f]+h|[0-7]+o|[01]+b|\d+d?)\b/i; + + return { + startState: function() { + return { + context: 0 + }; + }, + token: function(stream, state) { + if (!stream.column()) + state.context = 0; + + if (stream.eatSpace()) + return null; + + var w; + + if (stream.eatWhile(/\w/)) { + if (ez80 && stream.eat('.')) { + stream.eatWhile(/\w/); + } + w = stream.current(); + + if (stream.indentation()) { + if ((state.context == 1 || state.context == 4) && variables1.test(w)) { + state.context = 4; + return 'var2'; + } + + if (state.context == 2 && variables2.test(w)) { + state.context = 4; + return 'var3'; + } + + if (keywords1.test(w)) { + state.context = 1; + return 'keyword'; + } else if (keywords2.test(w)) { + state.context = 2; + return 'keyword'; + } else if (state.context == 4 && numbers.test(w)) { + return 'number'; + } + + if (errors.test(w)) + return 'error'; + } else if (stream.match(numbers)) { + return 'number'; + } else { + return null; + } + } else if (stream.eat(';')) { + stream.skipToEnd(); + return 'comment'; + } else if (stream.eat('"')) { + while (w = stream.next()) { + if (w == '"') + break; + + if (w == '\\') + stream.next(); + } + return 'string'; + } else if (stream.eat('\'')) { + if (stream.match(/\\?.'/)) + return 'number'; + } else if (stream.eat('.') || stream.sol() && stream.eat('#')) { + state.context = 5; + + if (stream.eatWhile(/\w/)) + return 'def'; + } else if (stream.eat('$')) { + if (stream.eatWhile(/[\da-f]/i)) + return 'number'; + } else if (stream.eat('%')) { + if (stream.eatWhile(/[01]/)) + return 'number'; + } else { + stream.next(); + } + return null; + } + }; +}); + +CodeMirror.defineMIME("text/x-z80", "z80"); +CodeMirror.defineMIME("text/x-ez80", { name: "z80", ez80: true }); + +}); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/3024-day.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/3024-day.css new file mode 100644 index 0000000000..7132655306 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/3024-day.css @@ -0,0 +1,41 @@ +/* + + Name: 3024 day + Author: Jan T. Sott (http://github.com/idleberg) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-3024-day.CodeMirror { background: #f7f7f7; color: #3a3432; } +.cm-s-3024-day div.CodeMirror-selected { background: #d6d5d4; } + +.cm-s-3024-day .CodeMirror-line::selection, .cm-s-3024-day .CodeMirror-line > span::selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d6d5d4; } +.cm-s-3024-day .CodeMirror-line::-moz-selection, .cm-s-3024-day .CodeMirror-line > span::-moz-selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d9d9d9; } + +.cm-s-3024-day .CodeMirror-gutters { background: #f7f7f7; border-right: 0px; } +.cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; } +.cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; } +.cm-s-3024-day .CodeMirror-linenumber { color: #807d7c; } + +.cm-s-3024-day .CodeMirror-cursor { border-left: 1px solid #5c5855; } + +.cm-s-3024-day span.cm-comment { color: #cdab53; } +.cm-s-3024-day span.cm-atom { color: #a16a94; } +.cm-s-3024-day span.cm-number { color: #a16a94; } + +.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute { color: #01a252; } +.cm-s-3024-day span.cm-keyword { color: #db2d20; } +.cm-s-3024-day span.cm-string { color: #fded02; } + +.cm-s-3024-day span.cm-variable { color: #01a252; } +.cm-s-3024-day span.cm-variable-2 { color: #01a0e4; } +.cm-s-3024-day span.cm-def { color: #e8bbd0; } +.cm-s-3024-day span.cm-bracket { color: #3a3432; } +.cm-s-3024-day span.cm-tag { color: #db2d20; } +.cm-s-3024-day span.cm-link { color: #a16a94; } +.cm-s-3024-day span.cm-error { background: #db2d20; color: #5c5855; } + +.cm-s-3024-day .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/3024-night.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/3024-night.css new file mode 100644 index 0000000000..adc5900ad1 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/3024-night.css @@ -0,0 +1,39 @@ +/* + + Name: 3024 night + Author: Jan T. Sott (http://github.com/idleberg) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-3024-night.CodeMirror { background: #090300; color: #d6d5d4; } +.cm-s-3024-night div.CodeMirror-selected { background: #3a3432; } +.cm-s-3024-night .CodeMirror-line::selection, .cm-s-3024-night .CodeMirror-line > span::selection, .cm-s-3024-night .CodeMirror-line > span > span::selection { background: rgba(58, 52, 50, .99); } +.cm-s-3024-night .CodeMirror-line::-moz-selection, .cm-s-3024-night .CodeMirror-line > span::-moz-selection, .cm-s-3024-night .CodeMirror-line > span > span::-moz-selection { background: rgba(58, 52, 50, .99); } +.cm-s-3024-night .CodeMirror-gutters { background: #090300; border-right: 0px; } +.cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; } +.cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; } +.cm-s-3024-night .CodeMirror-linenumber { color: #5c5855; } + +.cm-s-3024-night .CodeMirror-cursor { border-left: 1px solid #807d7c; } + +.cm-s-3024-night span.cm-comment { color: #cdab53; } +.cm-s-3024-night span.cm-atom { color: #a16a94; } +.cm-s-3024-night span.cm-number { color: #a16a94; } + +.cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute { color: #01a252; } +.cm-s-3024-night span.cm-keyword { color: #db2d20; } +.cm-s-3024-night span.cm-string { color: #fded02; } + +.cm-s-3024-night span.cm-variable { color: #01a252; } +.cm-s-3024-night span.cm-variable-2 { color: #01a0e4; } +.cm-s-3024-night span.cm-def { color: #e8bbd0; } +.cm-s-3024-night span.cm-bracket { color: #d6d5d4; } +.cm-s-3024-night span.cm-tag { color: #db2d20; } +.cm-s-3024-night span.cm-link { color: #a16a94; } +.cm-s-3024-night span.cm-error { background: #db2d20; color: #807d7c; } + +.cm-s-3024-night .CodeMirror-activeline-background { background: #2F2F2F; } +.cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/abbott.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/abbott.css new file mode 100644 index 0000000000..3e516a67f9 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/abbott.css @@ -0,0 +1,268 @@ +/* + * abbott.css + * A warm, dark theme for prose and code, with pastels and pretty greens. + * + * Ported from abbott.vim (https://github.com/bcat/abbott.vim) version 2.1. + * Original design and CodeMirror port by Jonathan Rascher. + * + * This theme shares the following color palette with the Vim color scheme. + * + * Brown shades: + * bistre: #231c14 + * chocolate: #3c3022 + * cocoa: #745d42 + * vanilla_cream: #fef3b4 + * + * Red shades: + * crimson: #d80450 + * cinnabar: #f63f05 + * + * Green shades: + * dark_olive: #273900 + * forest_green: #24a507 + * chartreuse: #a0ea00 + * pastel_chartreuse: #d8ff84 + * + * Yellow shades: + * marigold: #fbb32f + * lemon_meringue: #fbec5d + * + * Blue shades: + * cornflower_blue: #3f91f1 + * periwinkle_blue: #8ccdf0 + * + * Magenta shades: + * french_pink: #ec6c99 + * lavender: #e6a2f3 + * + * Cyan shades: + * zomp: #39a78d + * seafoam_green: #00ff7f + */ + +/* Style the UI: */ + +/* Equivalent to Vim's Normal group. */ +.cm-s-abbott.CodeMirror { + background: #231c14 /* bistre */; + color: #d8ff84 /* pastel_chartreuse */; +} + +/* Roughly equivalent to Vim's LineNr group. */ +.cm-s-abbott .CodeMirror-gutters { + background: #231c14 /* bistre */; + border: none; +} +.cm-s-abbott .CodeMirror-linenumber { color: #fbec5d /* lemon_meringue */; } + +.cm-s-abbott .CodeMirror-guttermarker { color: #f63f05 /* cinnabar */; } + +/* Roughly equivalent to Vim's FoldColumn group. */ +.cm-s-abbott .CodeMirror-guttermarker-subtle { color: #fbb32f /* marigold */; } + +/* + * Roughly equivalent to Vim's CursorColumn group. (We use a brighter color + * since Vim's cursorcolumn option highlights a whole column, whereas + * CodeMirror's rule just highlights a thin line.) + */ +.cm-s-abbott .CodeMirror-ruler { border-color: #745d42 /* cocoa */; } + +/* Equivalent to Vim's Cursor group in insert mode. */ +.cm-s-abbott .CodeMirror-cursor { border-color: #a0ea00 /* chartreuse */; } + +/* Equivalent to Vim's Cursor group in normal mode. */ +.cm-s-abbott.cm-fat-cursor .CodeMirror-cursor, +.cm-s-abbott .cm-animate-fat-cursor { + /* + * CodeMirror doesn't allow changing the foreground color of the character + * under the cursor, so we can't use a reverse video effect for the cursor. + * Instead, make it semitransparent. + */ + background: rgba(160, 234, 0, 0.5) /* chartreuse */; +} +.cm-s-abbott.cm-fat-cursor .CodeMirror-cursors { + /* + * Boost the z-index so the fat cursor shows up on top of text and + * matchingbracket/matchingtag highlights. + */ + z-index: 3; +} + +/* Equivalent to Vim's Cursor group in replace mode. */ +.cm-s-abbott .CodeMirror-overwrite .CodeMirror-cursor { + border-bottom: 1px solid #a0ea00 /* chartreuse */; + border-left: none; + width: auto; +} + +/* Roughly equivalent to Vim's CursorIM group. */ +.cm-s-abbott .CodeMirror-secondarycursor { + border-color: #00ff7f /* seafoam_green */; +} + +/* Roughly equivalent to Vim's Visual group. */ +.cm-s-abbott .CodeMirror-selected, +.cm-s-abbott.CodeMirror-focused .CodeMirror-selected { + background: #273900 /* dark_olive */; +} +.cm-s-abbott .CodeMirror-line::selection, +.cm-s-abbott .CodeMirror-line > span::selection, +.cm-s-abbott .CodeMirror-line > span > span::selection { + background: #273900 /* dark_olive */; +} +.cm-s-abbott .CodeMirror-line::-moz-selection, +.cm-s-abbott .CodeMirror-line > span::-moz-selection, +.cm-s-abbott .CodeMirror-line > span > span::-moz-selection { + background: #273900 /* dark_olive */; +} + +/* Roughly equivalent to Vim's SpecialKey group. */ +.cm-s-abbott .cm-tab { color: #00ff7f /* seafoam_green */; } + +/* Equivalent to Vim's Search group. */ +.cm-s-abbott .cm-searching { + background: #fef3b4 /* vanilla_cream */ !important; + color: #231c14 /* bistre */ !important; +} + +/* Style syntax highlighting modes: */ + +/* Equivalent to Vim's Comment group. */ +.cm-s-abbott span.cm-comment { + color: #fbb32f /* marigold */; + font-style: italic; +} + +/* Equivalent to Vim's String group. */ +.cm-s-abbott span.cm-string, +.cm-s-abbott span.cm-string-2 { + color: #e6a2f3 /* lavender */; +} + +/* Equivalent to Vim's Constant group. */ +.cm-s-abbott span.cm-number, +.cm-s-abbott span.cm-string.cm-url { color: #f63f05 /* cinnabar */; } + +/* Roughly equivalent to Vim's SpecialKey group. */ +.cm-s-abbott span.cm-invalidchar { color: #00ff7f /* seafoam_green */; } + +/* Equivalent to Vim's Special group. */ +.cm-s-abbott span.cm-atom { color: #fef3b4 /* vanilla_cream */; } + +/* Equivalent to Vim's Delimiter group. */ +.cm-s-abbott span.cm-bracket, +.cm-s-abbott span.cm-punctuation { + color: #fef3b4 /* vanilla_cream */; +} + +/* Equivalent Vim's Operator group. */ +.cm-s-abbott span.cm-operator { font-weight: bold; } + +/* Roughly equivalent to Vim's Identifier group. */ +.cm-s-abbott span.cm-def, +.cm-s-abbott span.cm-variable, +.cm-s-abbott span.cm-variable-2, +.cm-s-abbott span.cm-variable-3 { + color: #8ccdf0 /* periwinkle_blue */; +} + +/* Roughly equivalent to Vim's Function group. */ +.cm-s-abbott span.cm-builtin, +.cm-s-abbott span.cm-property, +.cm-s-abbott span.cm-qualifier { + color: #3f91f1 /* cornflower_blue */; +} + +/* Equivalent to Vim's Type group. */ +.cm-s-abbott span.cm-type { color: #24a507 /* forest_green */; } + +/* Equivalent to Vim's Keyword group. */ +.cm-s-abbott span.cm-keyword { + color: #d80450 /* crimson */; + font-weight: bold; +} + +/* Equivalent to Vim's PreProc group. */ +.cm-s-abbott span.cm-meta { color: #ec6c99 /* french_pink */; } + +/* Equivalent to Vim's htmlTagName group (linked to Statement). */ +.cm-s-abbott span.cm-tag { + color: #d80450 /* crimson */; + font-weight: bold; +} + +/* Equivalent to Vim's htmlArg group (linked to Type). */ +.cm-s-abbott span.cm-attribute { color: #24a507 /* forest_green */; } + +/* Equivalent to Vim's htmlH1, markdownH1, etc. groups (linked to Title). */ +.cm-s-abbott span.cm-header { + color: #d80450 /* crimson */; + font-weight: bold; +} + +/* Equivalent to Vim's markdownRule group (linked to PreProc). */ +.cm-s-abbott span.cm-hr { color: #ec6c99 /* french_pink */; } + +/* Roughly equivalent to Vim's Underlined group. */ +.cm-s-abbott span.cm-link { color: #e6a2f3 /* lavender */; } + +/* Equivalent to Vim's diffRemoved group. */ +.cm-s-abbott span.cm-negative { + background: #d80450 /* crimson */; + color: #231c14 /* bistre */; +} + +/* Equivalent to Vim's diffAdded group. */ +.cm-s-abbott span.cm-positive { + background: #a0ea00 /* chartreuse */; + color: #231c14 /* bistre */; + font-weight: bold; +} + +/* Equivalent to Vim's Error group. */ +.cm-s-abbott span.cm-error { + background: #d80450 /* crimson */; + color: #231c14 /* bistre */; +} + +/* Style addons: */ + +/* Equivalent to Vim's MatchParen group. */ +.cm-s-abbott span.CodeMirror-matchingbracket { + background: #745d42 /* cocoa */ !important; + color: #231c14 /* bistre */ !important; + font-weight: bold; +} + +/* + * Roughly equivalent to Vim's Error group. (Vim doesn't seem to have a direct + * equivalent in its own matchparen plugin, but many syntax highlighting plugins + * mark mismatched brackets as Error.) + */ +.cm-s-abbott span.CodeMirror-nonmatchingbracket { + background: #d80450 /* crimson */ !important; + color: #231c14 /* bistre */ !important; +} + +.cm-s-abbott .CodeMirror-matchingtag, +.cm-s-abbott .cm-matchhighlight { + outline: 1px solid #39a78d /* zomp */; +} + +/* Equivalent to Vim's CursorLine group. */ +.cm-s-abbott .CodeMirror-activeline-background, +.cm-s-abbott .CodeMirror-activeline-gutter { + background: #3c3022 /* chocolate */; +} + +/* Equivalent to Vim's CursorLineNr group. */ +.cm-s-abbott .CodeMirror-activeline-gutter .CodeMirror-linenumber { + color: #d8ff84 /* pastel_chartreuse */; + font-weight: bold; +} + +/* Roughly equivalent to Vim's Folded group. */ +.cm-s-abbott .CodeMirror-foldmarker { + color: #f63f05 /* cinnabar */; + text-shadow: none; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/abcdef.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/abcdef.css new file mode 100644 index 0000000000..cf93530946 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/abcdef.css @@ -0,0 +1,32 @@ +.cm-s-abcdef.CodeMirror { background: #0f0f0f; color: #defdef; } +.cm-s-abcdef div.CodeMirror-selected { background: #515151; } +.cm-s-abcdef .CodeMirror-line::selection, .cm-s-abcdef .CodeMirror-line > span::selection, .cm-s-abcdef .CodeMirror-line > span > span::selection { background: rgba(56, 56, 56, 0.99); } +.cm-s-abcdef .CodeMirror-line::-moz-selection, .cm-s-abcdef .CodeMirror-line > span::-moz-selection, .cm-s-abcdef .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 56, 56, 0.99); } +.cm-s-abcdef .CodeMirror-gutters { background: #555; border-right: 2px solid #314151; } +.cm-s-abcdef .CodeMirror-guttermarker { color: #222; } +.cm-s-abcdef .CodeMirror-guttermarker-subtle { color: azure; } +.cm-s-abcdef .CodeMirror-linenumber { color: #FFFFFF; } +.cm-s-abcdef .CodeMirror-cursor { border-left: 1px solid #00FF00; } + +.cm-s-abcdef span.cm-keyword { color: darkgoldenrod; font-weight: bold; } +.cm-s-abcdef span.cm-atom { color: #77F; } +.cm-s-abcdef span.cm-number { color: violet; } +.cm-s-abcdef span.cm-def { color: #fffabc; } +.cm-s-abcdef span.cm-variable { color: #abcdef; } +.cm-s-abcdef span.cm-variable-2 { color: #cacbcc; } +.cm-s-abcdef span.cm-variable-3, .cm-s-abcdef span.cm-type { color: #def; } +.cm-s-abcdef span.cm-property { color: #fedcba; } +.cm-s-abcdef span.cm-operator { color: #ff0; } +.cm-s-abcdef span.cm-comment { color: #7a7b7c; font-style: italic;} +.cm-s-abcdef span.cm-string { color: #2b4; } +.cm-s-abcdef span.cm-meta { color: #C9F; } +.cm-s-abcdef span.cm-qualifier { color: #FFF700; } +.cm-s-abcdef span.cm-builtin { color: #30aabc; } +.cm-s-abcdef span.cm-bracket { color: #8a8a8a; } +.cm-s-abcdef span.cm-tag { color: #FFDD44; } +.cm-s-abcdef span.cm-attribute { color: #DDFF00; } +.cm-s-abcdef span.cm-error { color: #FF0000; } +.cm-s-abcdef span.cm-header { color: aquamarine; font-weight: bold; } +.cm-s-abcdef span.cm-link { color: blueviolet; } + +.cm-s-abcdef .CodeMirror-activeline-background { background: #314151; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ambiance-mobile.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ambiance-mobile.css new file mode 100644 index 0000000000..88d332e1a7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ambiance-mobile.css @@ -0,0 +1,5 @@ +.cm-s-ambiance.CodeMirror { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ambiance.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ambiance.css new file mode 100644 index 0000000000..782fca43f5 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ambiance.css @@ -0,0 +1,74 @@ +/* ambiance theme for codemirror */ + +/* Color scheme */ + +.cm-s-ambiance .cm-header { color: blue; } +.cm-s-ambiance .cm-quote { color: #24C2C7; } + +.cm-s-ambiance .cm-keyword { color: #cda869; } +.cm-s-ambiance .cm-atom { color: #CF7EA9; } +.cm-s-ambiance .cm-number { color: #78CF8A; } +.cm-s-ambiance .cm-def { color: #aac6e3; } +.cm-s-ambiance .cm-variable { color: #ffb795; } +.cm-s-ambiance .cm-variable-2 { color: #eed1b3; } +.cm-s-ambiance .cm-variable-3, .cm-s-ambiance .cm-type { color: #faded3; } +.cm-s-ambiance .cm-property { color: #eed1b3; } +.cm-s-ambiance .cm-operator { color: #fa8d6a; } +.cm-s-ambiance .cm-comment { color: #555; font-style:italic; } +.cm-s-ambiance .cm-string { color: #8f9d6a; } +.cm-s-ambiance .cm-string-2 { color: #9d937c; } +.cm-s-ambiance .cm-meta { color: #D2A8A1; } +.cm-s-ambiance .cm-qualifier { color: yellow; } +.cm-s-ambiance .cm-builtin { color: #9999cc; } +.cm-s-ambiance .cm-bracket { color: #24C2C7; } +.cm-s-ambiance .cm-tag { color: #fee4ff; } +.cm-s-ambiance .cm-attribute { color: #9B859D; } +.cm-s-ambiance .cm-hr { color: pink; } +.cm-s-ambiance .cm-link { color: #F4C20B; } +.cm-s-ambiance .cm-special { color: #FF9D00; } +.cm-s-ambiance .cm-error { color: #AF2018; } + +.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; } +.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; } + +.cm-s-ambiance div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); } +.cm-s-ambiance.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-ambiance .CodeMirror-line::selection, .cm-s-ambiance .CodeMirror-line > span::selection, .cm-s-ambiance .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-ambiance .CodeMirror-line::-moz-selection, .cm-s-ambiance .CodeMirror-line > span::-moz-selection, .cm-s-ambiance .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } + +/* Editor styling */ + +.cm-s-ambiance.CodeMirror { + line-height: 1.40em; + color: #E6E1DC; + background-color: #202020; + -webkit-box-shadow: inset 0 0 10px black; + -moz-box-shadow: inset 0 0 10px black; + box-shadow: inset 0 0 10px black; +} + +.cm-s-ambiance .CodeMirror-gutters { + background: #3D3D3D; + border-right: 1px solid #4D4D4D; + box-shadow: 0 10px 20px black; +} + +.cm-s-ambiance .CodeMirror-linenumber { + text-shadow: 0px 1px 1px #4d4d4d; + color: #111; + padding: 0 5px; +} + +.cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; } +.cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; } + +.cm-s-ambiance .CodeMirror-cursor { border-left: 1px solid #7991E8; } + +.cm-s-ambiance .CodeMirror-activeline-background { + background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031); +} + +.cm-s-ambiance.CodeMirror, +.cm-s-ambiance .CodeMirror-gutters { + background-image: url("data:image/png;base64,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"); +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ayu-dark.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ayu-dark.css new file mode 100644 index 0000000000..13656b94bb --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ayu-dark.css @@ -0,0 +1,44 @@ +/* Based on https://github.com/dempfi/ayu */ + +.cm-s-ayu-dark.CodeMirror { background: #0a0e14; color: #b3b1ad; } +.cm-s-ayu-dark div.CodeMirror-selected { background: #273747; } +.cm-s-ayu-dark .CodeMirror-line::selection, .cm-s-ayu-dark .CodeMirror-line > span::selection, .cm-s-ayu-dark .CodeMirror-line > span > span::selection { background: rgba(39, 55, 71, 99); } +.cm-s-ayu-dark .CodeMirror-line::-moz-selection, .cm-s-ayu-dark .CodeMirror-line > span::-moz-selection, .cm-s-ayu-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(39, 55, 71, 99); } +.cm-s-ayu-dark .CodeMirror-gutters { background: #0a0e14; border-right: 0px; } +.cm-s-ayu-dark .CodeMirror-guttermarker { color: white; } +.cm-s-ayu-dark .CodeMirror-guttermarker-subtle { color: #3d424d; } +.cm-s-ayu-dark .CodeMirror-linenumber { color: #3d424d; } +.cm-s-ayu-dark .CodeMirror-cursor { border-left: 1px solid #e6b450; } +.cm-s-ayu-dark.cm-fat-cursor .CodeMirror-cursor { background-color: #a2a8a175 !important; } +.cm-s-ayu-dark .cm-animate-fat-cursor { background-color: #a2a8a175 !important; } + +.cm-s-ayu-dark span.cm-comment { color: #626a73; } +.cm-s-ayu-dark span.cm-atom { color: #ae81ff; } +.cm-s-ayu-dark span.cm-number { color: #e6b450; } + +.cm-s-ayu-dark span.cm-comment.cm-attribute { color: #ffb454; } +.cm-s-ayu-dark span.cm-comment.cm-def { color: rgba(57, 186, 230, 80); } +.cm-s-ayu-dark span.cm-comment.cm-tag { color: #39bae6; } +.cm-s-ayu-dark span.cm-comment.cm-type { color: #5998a6; } + +.cm-s-ayu-dark span.cm-property, .cm-s-ayu-dark span.cm-attribute { color: #ffb454; } +.cm-s-ayu-dark span.cm-keyword { color: #ff8f40; } +.cm-s-ayu-dark span.cm-builtin { color: #e6b450; } +.cm-s-ayu-dark span.cm-string { color: #c2d94c; } + +.cm-s-ayu-dark span.cm-variable { color: #b3b1ad; } +.cm-s-ayu-dark span.cm-variable-2 { color: #f07178; } +.cm-s-ayu-dark span.cm-variable-3 { color: #39bae6; } +.cm-s-ayu-dark span.cm-type { color: #ff8f40; } +.cm-s-ayu-dark span.cm-def { color: #ffee99; } +.cm-s-ayu-dark span.cm-bracket { color: #f8f8f2; } +.cm-s-ayu-dark span.cm-tag { color: rgba(57, 186, 230, 80); } +.cm-s-ayu-dark span.cm-header { color: #c2d94c; } +.cm-s-ayu-dark span.cm-link { color: #39bae6; } +.cm-s-ayu-dark span.cm-error { color: #ff3333; } + +.cm-s-ayu-dark .CodeMirror-activeline-background { background: #01060e; } +.cm-s-ayu-dark .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ayu-mirage.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ayu-mirage.css new file mode 100644 index 0000000000..19403cefb5 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ayu-mirage.css @@ -0,0 +1,45 @@ +/* Based on https://github.com/dempfi/ayu */ + +.cm-s-ayu-mirage.CodeMirror { background: #1f2430; color: #cbccc6; } +.cm-s-ayu-mirage div.CodeMirror-selected { background: #34455a; } +.cm-s-ayu-mirage .CodeMirror-line::selection, .cm-s-ayu-mirage .CodeMirror-line > span::selection, .cm-s-ayu-mirage .CodeMirror-line > span > span::selection { background: #34455a; } +.cm-s-ayu-mirage .CodeMirror-line::-moz-selection, .cm-s-ayu-mirage .CodeMirror-line > span::-moz-selection, .cm-s-ayu-mirage .CodeMirror-line > span > span::-moz-selection { background: rgba(25, 30, 42, 99); } +.cm-s-ayu-mirage .CodeMirror-gutters { background: #1f2430; border-right: 0px; } +.cm-s-ayu-mirage .CodeMirror-guttermarker { color: white; } +.cm-s-ayu-mirage .CodeMirror-guttermarker-subtle { color: rgba(112, 122, 140, 66); } +.cm-s-ayu-mirage .CodeMirror-linenumber { color: rgba(61, 66, 77, 99); } +.cm-s-ayu-mirage .CodeMirror-cursor { border-left: 1px solid #ffcc66; } +.cm-s-ayu-mirage.cm-fat-cursor .CodeMirror-cursor {background-color: #a2a8a175 !important;} +.cm-s-ayu-mirage .cm-animate-fat-cursor { background-color: #a2a8a175 !important; } + +.cm-s-ayu-mirage span.cm-comment { color: #5c6773; font-style:italic; } +.cm-s-ayu-mirage span.cm-atom { color: #ae81ff; } +.cm-s-ayu-mirage span.cm-number { color: #ffcc66; } + +.cm-s-ayu-mirage span.cm-comment.cm-attribute { color: #ffd580; } +.cm-s-ayu-mirage span.cm-comment.cm-def { color: #d4bfff; } +.cm-s-ayu-mirage span.cm-comment.cm-tag { color: #5ccfe6; } +.cm-s-ayu-mirage span.cm-comment.cm-type { color: #5998a6; } + +.cm-s-ayu-mirage span.cm-property { color: #f29e74; } +.cm-s-ayu-mirage span.cm-attribute { color: #ffd580; } +.cm-s-ayu-mirage span.cm-keyword { color: #ffa759; } +.cm-s-ayu-mirage span.cm-builtin { color: #ffcc66; } +.cm-s-ayu-mirage span.cm-string { color: #bae67e; } + +.cm-s-ayu-mirage span.cm-variable { color: #cbccc6; } +.cm-s-ayu-mirage span.cm-variable-2 { color: #f28779; } +.cm-s-ayu-mirage span.cm-variable-3 { color: #5ccfe6; } +.cm-s-ayu-mirage span.cm-type { color: #ffa759; } +.cm-s-ayu-mirage span.cm-def { color: #ffd580; } +.cm-s-ayu-mirage span.cm-bracket { color: rgba(92, 207, 230, 80); } +.cm-s-ayu-mirage span.cm-tag { color: #5ccfe6; } +.cm-s-ayu-mirage span.cm-header { color: #bae67e; } +.cm-s-ayu-mirage span.cm-link { color: #5ccfe6; } +.cm-s-ayu-mirage span.cm-error { color: #ff3333; } + +.cm-s-ayu-mirage .CodeMirror-activeline-background { background: #191e2a; } +.cm-s-ayu-mirage .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/base16-dark.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/base16-dark.css new file mode 100644 index 0000000000..b3c31aba20 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/base16-dark.css @@ -0,0 +1,40 @@ +/* + + Name: Base16 Default Dark + Author: Chris Kempson (http://chriskempson.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-base16-dark.CodeMirror { background: #151515; color: #e0e0e0; } +.cm-s-base16-dark div.CodeMirror-selected { background: #303030; } +.cm-s-base16-dark .CodeMirror-line::selection, .cm-s-base16-dark .CodeMirror-line > span::selection, .cm-s-base16-dark .CodeMirror-line > span > span::selection { background: rgba(48, 48, 48, .99); } +.cm-s-base16-dark .CodeMirror-line::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(48, 48, 48, .99); } +.cm-s-base16-dark .CodeMirror-gutters { background: #151515; border-right: 0px; } +.cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; } +.cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; } +.cm-s-base16-dark .CodeMirror-linenumber { color: #505050; } +.cm-s-base16-dark .CodeMirror-cursor { border-left: 1px solid #b0b0b0; } +.cm-s-base16-dark.cm-fat-cursor .CodeMirror-cursor { background-color: #8e8d8875 !important; } +.cm-s-base16-dark .cm-animate-fat-cursor { background-color: #8e8d8875 !important; } + +.cm-s-base16-dark span.cm-comment { color: #8f5536; } +.cm-s-base16-dark span.cm-atom { color: #aa759f; } +.cm-s-base16-dark span.cm-number { color: #aa759f; } + +.cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute { color: #90a959; } +.cm-s-base16-dark span.cm-keyword { color: #ac4142; } +.cm-s-base16-dark span.cm-string { color: #f4bf75; } + +.cm-s-base16-dark span.cm-variable { color: #90a959; } +.cm-s-base16-dark span.cm-variable-2 { color: #6a9fb5; } +.cm-s-base16-dark span.cm-def { color: #d28445; } +.cm-s-base16-dark span.cm-bracket { color: #e0e0e0; } +.cm-s-base16-dark span.cm-tag { color: #ac4142; } +.cm-s-base16-dark span.cm-link { color: #aa759f; } +.cm-s-base16-dark span.cm-error { background: #ac4142; color: #b0b0b0; } + +.cm-s-base16-dark .CodeMirror-activeline-background { background: #202020; } +.cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/base16-light.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/base16-light.css new file mode 100644 index 0000000000..1d5f582f6a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/base16-light.css @@ -0,0 +1,38 @@ +/* + + Name: Base16 Default Light + Author: Chris Kempson (http://chriskempson.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-base16-light.CodeMirror { background: #f5f5f5; color: #202020; } +.cm-s-base16-light div.CodeMirror-selected { background: #e0e0e0; } +.cm-s-base16-light .CodeMirror-line::selection, .cm-s-base16-light .CodeMirror-line > span::selection, .cm-s-base16-light .CodeMirror-line > span > span::selection { background: #e0e0e0; } +.cm-s-base16-light .CodeMirror-line::-moz-selection, .cm-s-base16-light .CodeMirror-line > span::-moz-selection, .cm-s-base16-light .CodeMirror-line > span > span::-moz-selection { background: #e0e0e0; } +.cm-s-base16-light .CodeMirror-gutters { background: #f5f5f5; border-right: 0px; } +.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; } +.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; } +.cm-s-base16-light .CodeMirror-linenumber { color: #b0b0b0; } +.cm-s-base16-light .CodeMirror-cursor { border-left: 1px solid #505050; } + +.cm-s-base16-light span.cm-comment { color: #8f5536; } +.cm-s-base16-light span.cm-atom { color: #aa759f; } +.cm-s-base16-light span.cm-number { color: #aa759f; } + +.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute { color: #90a959; } +.cm-s-base16-light span.cm-keyword { color: #ac4142; } +.cm-s-base16-light span.cm-string { color: #f4bf75; } + +.cm-s-base16-light span.cm-variable { color: #90a959; } +.cm-s-base16-light span.cm-variable-2 { color: #6a9fb5; } +.cm-s-base16-light span.cm-def { color: #d28445; } +.cm-s-base16-light span.cm-bracket { color: #202020; } +.cm-s-base16-light span.cm-tag { color: #ac4142; } +.cm-s-base16-light span.cm-link { color: #aa759f; } +.cm-s-base16-light span.cm-error { background: #ac4142; color: #505050; } + +.cm-s-base16-light .CodeMirror-activeline-background { background: #DDDCDC; } +.cm-s-base16-light .CodeMirror-matchingbracket { color: #f5f5f5 !important; background-color: #6A9FB5 !important} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/bespin.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/bespin.css new file mode 100644 index 0000000000..60913ba938 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/bespin.css @@ -0,0 +1,34 @@ +/* + + Name: Bespin + Author: Mozilla / Jan T. Sott + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-bespin.CodeMirror {background: #28211c; color: #9d9b97;} +.cm-s-bespin div.CodeMirror-selected {background: #36312e !important;} +.cm-s-bespin .CodeMirror-gutters {background: #28211c; border-right: 0px;} +.cm-s-bespin .CodeMirror-linenumber {color: #666666;} +.cm-s-bespin .CodeMirror-cursor {border-left: 1px solid #797977 !important;} + +.cm-s-bespin span.cm-comment {color: #937121;} +.cm-s-bespin span.cm-atom {color: #9b859d;} +.cm-s-bespin span.cm-number {color: #9b859d;} + +.cm-s-bespin span.cm-property, .cm-s-bespin span.cm-attribute {color: #54be0d;} +.cm-s-bespin span.cm-keyword {color: #cf6a4c;} +.cm-s-bespin span.cm-string {color: #f9ee98;} + +.cm-s-bespin span.cm-variable {color: #54be0d;} +.cm-s-bespin span.cm-variable-2 {color: #5ea6ea;} +.cm-s-bespin span.cm-def {color: #cf7d34;} +.cm-s-bespin span.cm-error {background: #cf6a4c; color: #797977;} +.cm-s-bespin span.cm-bracket {color: #9d9b97;} +.cm-s-bespin span.cm-tag {color: #cf6a4c;} +.cm-s-bespin span.cm-link {color: #9b859d;} + +.cm-s-bespin .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-bespin .CodeMirror-activeline-background { background: #404040; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/blackboard.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/blackboard.css new file mode 100644 index 0000000000..b6eaedb180 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/blackboard.css @@ -0,0 +1,32 @@ +/* Port of TextMate's Blackboard theme */ + +.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } +.cm-s-blackboard div.CodeMirror-selected { background: #253B76; } +.cm-s-blackboard .CodeMirror-line::selection, .cm-s-blackboard .CodeMirror-line > span::selection, .cm-s-blackboard .CodeMirror-line > span > span::selection { background: rgba(37, 59, 118, .99); } +.cm-s-blackboard .CodeMirror-line::-moz-selection, .cm-s-blackboard .CodeMirror-line > span::-moz-selection, .cm-s-blackboard .CodeMirror-line > span > span::-moz-selection { background: rgba(37, 59, 118, .99); } +.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } +.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; } +.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; } +.cm-s-blackboard .CodeMirror-linenumber { color: #888; } +.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7; } + +.cm-s-blackboard .cm-keyword { color: #FBDE2D; } +.cm-s-blackboard .cm-atom { color: #D8FA3C; } +.cm-s-blackboard .cm-number { color: #D8FA3C; } +.cm-s-blackboard .cm-def { color: #8DA6CE; } +.cm-s-blackboard .cm-variable { color: #FF6400; } +.cm-s-blackboard .cm-operator { color: #FBDE2D; } +.cm-s-blackboard .cm-comment { color: #AEAEAE; } +.cm-s-blackboard .cm-string { color: #61CE3C; } +.cm-s-blackboard .cm-string-2 { color: #61CE3C; } +.cm-s-blackboard .cm-meta { color: #D8FA3C; } +.cm-s-blackboard .cm-builtin { color: #8DA6CE; } +.cm-s-blackboard .cm-tag { color: #8DA6CE; } +.cm-s-blackboard .cm-attribute { color: #8DA6CE; } +.cm-s-blackboard .cm-header { color: #FF6400; } +.cm-s-blackboard .cm-hr { color: #AEAEAE; } +.cm-s-blackboard .cm-link { color: #8DA6CE; } +.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } + +.cm-s-blackboard .CodeMirror-activeline-background { background: #3C3636; } +.cm-s-blackboard .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/cobalt.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/cobalt.css new file mode 100644 index 0000000000..bbbda3b543 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/cobalt.css @@ -0,0 +1,25 @@ +.cm-s-cobalt.CodeMirror { background: #002240; color: white; } +.cm-s-cobalt div.CodeMirror-selected { background: #b36539; } +.cm-s-cobalt .CodeMirror-line::selection, .cm-s-cobalt .CodeMirror-line > span::selection, .cm-s-cobalt .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); } +.cm-s-cobalt .CodeMirror-line::-moz-selection, .cm-s-cobalt .CodeMirror-line > span::-moz-selection, .cm-s-cobalt .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); } +.cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; } +.cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-cobalt span.cm-comment { color: #08f; } +.cm-s-cobalt span.cm-atom { color: #845dc4; } +.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; } +.cm-s-cobalt span.cm-keyword { color: #ffee80; } +.cm-s-cobalt span.cm-string { color: #3ad900; } +.cm-s-cobalt span.cm-meta { color: #ff9d00; } +.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } +.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def, .cm-s-cobalt .cm-type { color: white; } +.cm-s-cobalt span.cm-bracket { color: #d8d8d8; } +.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } +.cm-s-cobalt span.cm-link { color: #845dc4; } +.cm-s-cobalt span.cm-error { color: #9d1e15; } + +.cm-s-cobalt .CodeMirror-activeline-background { background: #002D57; } +.cm-s-cobalt .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/colorforth.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/colorforth.css new file mode 100644 index 0000000000..19095e41d9 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/colorforth.css @@ -0,0 +1,33 @@ +.cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; } +.cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; } +.cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; } +.cm-s-colorforth .CodeMirror-linenumber { color: #bababa; } +.cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-colorforth span.cm-comment { color: #ededed; } +.cm-s-colorforth span.cm-def { color: #ff1c1c; font-weight:bold; } +.cm-s-colorforth span.cm-keyword { color: #ffd900; } +.cm-s-colorforth span.cm-builtin { color: #00d95a; } +.cm-s-colorforth span.cm-variable { color: #73ff00; } +.cm-s-colorforth span.cm-string { color: #007bff; } +.cm-s-colorforth span.cm-number { color: #00c4ff; } +.cm-s-colorforth span.cm-atom { color: #606060; } + +.cm-s-colorforth span.cm-variable-2 { color: #EEE; } +.cm-s-colorforth span.cm-variable-3, .cm-s-colorforth span.cm-type { color: #DDD; } +.cm-s-colorforth span.cm-property {} +.cm-s-colorforth span.cm-operator {} + +.cm-s-colorforth span.cm-meta { color: yellow; } +.cm-s-colorforth span.cm-qualifier { color: #FFF700; } +.cm-s-colorforth span.cm-bracket { color: #cc7; } +.cm-s-colorforth span.cm-tag { color: #FFBD40; } +.cm-s-colorforth span.cm-attribute { color: #FFF700; } +.cm-s-colorforth span.cm-error { color: #f00; } + +.cm-s-colorforth div.CodeMirror-selected { background: #333d53; } + +.cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); } + +.cm-s-colorforth .CodeMirror-activeline-background { background: #253540; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/darcula.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/darcula.css new file mode 100644 index 0000000000..2ec81a3557 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/darcula.css @@ -0,0 +1,53 @@ +/** + Name: IntelliJ IDEA darcula theme + From IntelliJ IDEA by JetBrains + */ + +.cm-s-darcula { font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;} +.cm-s-darcula.CodeMirror { background: #2B2B2B; color: #A9B7C6; } + +.cm-s-darcula span.cm-meta { color: #BBB529; } +.cm-s-darcula span.cm-number { color: #6897BB; } +.cm-s-darcula span.cm-keyword { color: #CC7832; line-height: 1em; font-weight: bold; } +.cm-s-darcula span.cm-def { color: #A9B7C6; font-style: italic; } +.cm-s-darcula span.cm-variable { color: #A9B7C6; } +.cm-s-darcula span.cm-variable-2 { color: #A9B7C6; } +.cm-s-darcula span.cm-variable-3 { color: #9876AA; } +.cm-s-darcula span.cm-type { color: #AABBCC; font-weight: bold; } +.cm-s-darcula span.cm-property { color: #FFC66D; } +.cm-s-darcula span.cm-operator { color: #A9B7C6; } +.cm-s-darcula span.cm-string { color: #6A8759; } +.cm-s-darcula span.cm-string-2 { color: #6A8759; } +.cm-s-darcula span.cm-comment { color: #61A151; font-style: italic; } +.cm-s-darcula span.cm-link { color: #CC7832; } +.cm-s-darcula span.cm-atom { color: #CC7832; } +.cm-s-darcula span.cm-error { color: #BC3F3C; } +.cm-s-darcula span.cm-tag { color: #629755; font-weight: bold; font-style: italic; text-decoration: underline; } +.cm-s-darcula span.cm-attribute { color: #6897bb; } +.cm-s-darcula span.cm-qualifier { color: #6A8759; } +.cm-s-darcula span.cm-bracket { color: #A9B7C6; } +.cm-s-darcula span.cm-builtin { color: #FF9E59; } +.cm-s-darcula span.cm-special { color: #FF9E59; } +.cm-s-darcula span.cm-matchhighlight { color: #FFFFFF; background-color: rgba(50, 89, 48, .7); font-weight: normal;} +.cm-s-darcula span.cm-searching { color: #FFFFFF; background-color: rgba(61, 115, 59, .7); font-weight: normal;} + +.cm-s-darcula .CodeMirror-cursor { border-left: 1px solid #A9B7C6; } +.cm-s-darcula .CodeMirror-activeline-background { background: #323232; } +.cm-s-darcula .CodeMirror-gutters { background: #313335; border-right: 1px solid #313335; } +.cm-s-darcula .CodeMirror-guttermarker { color: #FFEE80; } +.cm-s-darcula .CodeMirror-guttermarker-subtle { color: #D0D0D0; } +.cm-s-darcula .CodeMirrir-linenumber { color: #606366; } +.cm-s-darcula .CodeMirror-matchingbracket { background-color: #3B514D; color: #FFEF28 !important; font-weight: bold; } + +.cm-s-darcula div.CodeMirror-selected { background: #214283; } + +.CodeMirror-hints.darcula { + font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; + color: #9C9E9E; + background-color: #3B3E3F !important; +} + +.CodeMirror-hints.darcula .CodeMirror-hint-active { + background-color: #494D4E !important; + color: #9C9E9E !important; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/dracula.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/dracula.css new file mode 100644 index 0000000000..253133efe7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/dracula.css @@ -0,0 +1,40 @@ +/* + + Name: dracula + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme) + +*/ + + +.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters { + background-color: #282a36 !important; + color: #f8f8f2 !important; + border: none; +} +.cm-s-dracula .CodeMirror-gutters { color: #282a36; } +.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; } +.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; } +.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-dracula span.cm-comment { color: #6272a4; } +.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; } +.cm-s-dracula span.cm-number { color: #bd93f9; } +.cm-s-dracula span.cm-variable { color: #50fa7b; } +.cm-s-dracula span.cm-variable-2 { color: white; } +.cm-s-dracula span.cm-def { color: #50fa7b; } +.cm-s-dracula span.cm-operator { color: #ff79c6; } +.cm-s-dracula span.cm-keyword { color: #ff79c6; } +.cm-s-dracula span.cm-atom { color: #bd93f9; } +.cm-s-dracula span.cm-meta { color: #f8f8f2; } +.cm-s-dracula span.cm-tag { color: #ff79c6; } +.cm-s-dracula span.cm-attribute { color: #50fa7b; } +.cm-s-dracula span.cm-qualifier { color: #50fa7b; } +.cm-s-dracula span.cm-property { color: #66d9ef; } +.cm-s-dracula span.cm-builtin { color: #50fa7b; } +.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; } + +.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); } +.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/duotone-dark.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/duotone-dark.css new file mode 100644 index 0000000000..88fdc76c8e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/duotone-dark.css @@ -0,0 +1,35 @@ +/* +Name: DuoTone-Dark +Author: by Bram de Haan, adapted from DuoTone themes by Simurai (http://simurai.com/projects/2016/01/01/duotone-themes) + +CodeMirror template by Jan T. Sott (https://github.com/idleberg), adapted by Bram de Haan (https://github.com/atelierbram/) +*/ + +.cm-s-duotone-dark.CodeMirror { background: #2a2734; color: #6c6783; } +.cm-s-duotone-dark div.CodeMirror-selected { background: #545167!important; } +.cm-s-duotone-dark .CodeMirror-gutters { background: #2a2734; border-right: 0px; } +.cm-s-duotone-dark .CodeMirror-linenumber { color: #545167; } + +/* begin cursor */ +.cm-s-duotone-dark .CodeMirror-cursor { border-left: 1px solid #ffad5c; /* border-left: 1px solid #ffad5c80; */ border-right: .5em solid #ffad5c; /* border-right: .5em solid #ffad5c80; */ opacity: .5; } +.cm-s-duotone-dark .CodeMirror-activeline-background { background: #363342; /* background: #36334280; */ opacity: .5;} +.cm-s-duotone-dark .cm-fat-cursor .CodeMirror-cursor { background: #ffad5c; /* background: #ffad5c80; */ opacity: .5;} +/* end cursor */ + +.cm-s-duotone-dark span.cm-atom, .cm-s-duotone-dark span.cm-number, .cm-s-duotone-dark span.cm-keyword, .cm-s-duotone-dark span.cm-variable, .cm-s-duotone-dark span.cm-attribute, .cm-s-duotone-dark span.cm-quote, .cm-s-duotone-dark span.cm-hr, .cm-s-duotone-dark span.cm-link { color: #ffcc99; } + +.cm-s-duotone-dark span.cm-property { color: #9a86fd; } +.cm-s-duotone-dark span.cm-punctuation, .cm-s-duotone-dark span.cm-unit, .cm-s-duotone-dark span.cm-negative { color: #e09142; } +.cm-s-duotone-dark span.cm-string { color: #ffb870; } +.cm-s-duotone-dark span.cm-operator { color: #ffad5c; } +.cm-s-duotone-dark span.cm-positive { color: #6a51e6; } + +.cm-s-duotone-dark span.cm-variable-2, .cm-s-duotone-dark span.cm-variable-3, .cm-s-duotone-dark span.cm-type, .cm-s-duotone-dark span.cm-string-2, .cm-s-duotone-dark span.cm-url { color: #7a63ee; } +.cm-s-duotone-dark span.cm-def, .cm-s-duotone-dark span.cm-tag, .cm-s-duotone-dark span.cm-builtin, .cm-s-duotone-dark span.cm-qualifier, .cm-s-duotone-dark span.cm-header, .cm-s-duotone-dark span.cm-em { color: #eeebff; } +.cm-s-duotone-dark span.cm-bracket, .cm-s-duotone-dark span.cm-comment { color: #6c6783; } + +/* using #f00 red for errors, don't think any of the colorscheme variables will stand out enough, ... maybe by giving it a background-color ... */ +.cm-s-duotone-dark span.cm-error, .cm-s-duotone-dark span.cm-invalidchar { color: #f00; } + +.cm-s-duotone-dark span.cm-header { font-weight: normal; } +.cm-s-duotone-dark .CodeMirror-matchingbracket { text-decoration: underline; color: #eeebff !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/duotone-light.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/duotone-light.css new file mode 100644 index 0000000000..d99480f7c4 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/duotone-light.css @@ -0,0 +1,36 @@ +/* +Name: DuoTone-Light +Author: by Bram de Haan, adapted from DuoTone themes by Simurai (http://simurai.com/projects/2016/01/01/duotone-themes) + +CodeMirror template by Jan T. Sott (https://github.com/idleberg), adapted by Bram de Haan (https://github.com/atelierbram/) +*/ + +.cm-s-duotone-light.CodeMirror { background: #faf8f5; color: #b29762; } +.cm-s-duotone-light div.CodeMirror-selected { background: #e3dcce !important; } +.cm-s-duotone-light .CodeMirror-gutters { background: #faf8f5; border-right: 0px; } +.cm-s-duotone-light .CodeMirror-linenumber { color: #cdc4b1; } + +/* begin cursor */ +.cm-s-duotone-light .CodeMirror-cursor { border-left: 1px solid #93abdc; /* border-left: 1px solid #93abdc80; */ border-right: .5em solid #93abdc; /* border-right: .5em solid #93abdc80; */ opacity: .5; } +.cm-s-duotone-light .CodeMirror-activeline-background { background: #e3dcce; /* background: #e3dcce80; */ opacity: .5; } +.cm-s-duotone-light .cm-fat-cursor .CodeMirror-cursor { background: #93abdc; /* #93abdc80; */ opacity: .5; } +/* end cursor */ + +.cm-s-duotone-light span.cm-atom, .cm-s-duotone-light span.cm-number, .cm-s-duotone-light span.cm-keyword, .cm-s-duotone-light span.cm-variable, .cm-s-duotone-light span.cm-attribute, .cm-s-duotone-light span.cm-quote, .cm-s-duotone-light-light span.cm-hr, .cm-s-duotone-light-light span.cm-link { color: #063289; } + +.cm-s-duotone-light span.cm-property { color: #b29762; } +.cm-s-duotone-light span.cm-punctuation, .cm-s-duotone-light span.cm-unit, .cm-s-duotone-light span.cm-negative { color: #063289; } +.cm-s-duotone-light span.cm-string, .cm-s-duotone-light span.cm-operator { color: #1659df; } +.cm-s-duotone-light span.cm-positive { color: #896724; } + +.cm-s-duotone-light span.cm-variable-2, .cm-s-duotone-light span.cm-variable-3, .cm-s-duotone-light span.cm-type, .cm-s-duotone-light span.cm-string-2, .cm-s-duotone-light span.cm-url { color: #896724; } +.cm-s-duotone-light span.cm-def, .cm-s-duotone-light span.cm-tag, .cm-s-duotone-light span.cm-builtin, .cm-s-duotone-light span.cm-qualifier, .cm-s-duotone-light span.cm-header, .cm-s-duotone-light span.cm-em { color: #2d2006; } +.cm-s-duotone-light span.cm-bracket, .cm-s-duotone-light span.cm-comment { color: #b6ad9a; } + +/* using #f00 red for errors, don't think any of the colorscheme variables will stand out enough, ... maybe by giving it a background-color ... */ +/* .cm-s-duotone-light span.cm-error { background: #896724; color: #728fcb; } */ +.cm-s-duotone-light span.cm-error, .cm-s-duotone-light span.cm-invalidchar { color: #f00; } + +.cm-s-duotone-light span.cm-header { font-weight: normal; } +.cm-s-duotone-light .CodeMirror-matchingbracket { text-decoration: underline; color: #faf8f5 !important; } + diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/eclipse.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/eclipse.css new file mode 100644 index 0000000000..800d603f6d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/eclipse.css @@ -0,0 +1,23 @@ +.cm-s-eclipse span.cm-meta { color: #FF1717; } +.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } +.cm-s-eclipse span.cm-atom { color: #219; } +.cm-s-eclipse span.cm-number { color: #164; } +.cm-s-eclipse span.cm-def { color: #00f; } +.cm-s-eclipse span.cm-variable { color: black; } +.cm-s-eclipse span.cm-variable-2 { color: #0000C0; } +.cm-s-eclipse span.cm-variable-3, .cm-s-eclipse span.cm-type { color: #0000C0; } +.cm-s-eclipse span.cm-property { color: black; } +.cm-s-eclipse span.cm-operator { color: black; } +.cm-s-eclipse span.cm-comment { color: #3F7F5F; } +.cm-s-eclipse span.cm-string { color: #2A00FF; } +.cm-s-eclipse span.cm-string-2 { color: #f50; } +.cm-s-eclipse span.cm-qualifier { color: #555; } +.cm-s-eclipse span.cm-builtin { color: #30a; } +.cm-s-eclipse span.cm-bracket { color: #cc7; } +.cm-s-eclipse span.cm-tag { color: #170; } +.cm-s-eclipse span.cm-attribute { color: #00c; } +.cm-s-eclipse span.cm-link { color: #219; } +.cm-s-eclipse span.cm-error { color: #f00; } + +.cm-s-eclipse .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-eclipse .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/elegant.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/elegant.css new file mode 100644 index 0000000000..45b3ea655e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/elegant.css @@ -0,0 +1,13 @@ +.cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom { color: #762; } +.cm-s-elegant span.cm-comment { color: #262; font-style: italic; line-height: 1em; } +.cm-s-elegant span.cm-meta { color: #555; font-style: italic; line-height: 1em; } +.cm-s-elegant span.cm-variable { color: black; } +.cm-s-elegant span.cm-variable-2 { color: #b11; } +.cm-s-elegant span.cm-qualifier { color: #555; } +.cm-s-elegant span.cm-keyword { color: #730; } +.cm-s-elegant span.cm-builtin { color: #30a; } +.cm-s-elegant span.cm-link { color: #762; } +.cm-s-elegant span.cm-error { background-color: #fdd; } + +.cm-s-elegant .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-elegant .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/erlang-dark.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/erlang-dark.css new file mode 100644 index 0000000000..8c8a4171a6 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/erlang-dark.css @@ -0,0 +1,34 @@ +.cm-s-erlang-dark.CodeMirror { background: #002240; color: white; } +.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539; } +.cm-s-erlang-dark .CodeMirror-line::selection, .cm-s-erlang-dark .CodeMirror-line > span::selection, .cm-s-erlang-dark .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); } +.cm-s-erlang-dark .CodeMirror-line::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); } +.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-erlang-dark .CodeMirror-guttermarker { color: white; } +.cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-erlang-dark span.cm-quote { color: #ccc; } +.cm-s-erlang-dark span.cm-atom { color: #f133f1; } +.cm-s-erlang-dark span.cm-attribute { color: #ff80e1; } +.cm-s-erlang-dark span.cm-bracket { color: #ff9d00; } +.cm-s-erlang-dark span.cm-builtin { color: #eaa; } +.cm-s-erlang-dark span.cm-comment { color: #77f; } +.cm-s-erlang-dark span.cm-def { color: #e7a; } +.cm-s-erlang-dark span.cm-keyword { color: #ffee80; } +.cm-s-erlang-dark span.cm-meta { color: #50fefe; } +.cm-s-erlang-dark span.cm-number { color: #ffd0d0; } +.cm-s-erlang-dark span.cm-operator { color: #d55; } +.cm-s-erlang-dark span.cm-property { color: #ccc; } +.cm-s-erlang-dark span.cm-qualifier { color: #ccc; } +.cm-s-erlang-dark span.cm-special { color: #ffbbbb; } +.cm-s-erlang-dark span.cm-string { color: #3ad900; } +.cm-s-erlang-dark span.cm-string-2 { color: #ccc; } +.cm-s-erlang-dark span.cm-tag { color: #9effff; } +.cm-s-erlang-dark span.cm-variable { color: #50fe50; } +.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; } +.cm-s-erlang-dark span.cm-variable-3, .cm-s-erlang-dark span.cm-type { color: #ccc; } +.cm-s-erlang-dark span.cm-error { color: #9d1e15; } + +.cm-s-erlang-dark .CodeMirror-activeline-background { background: #013461; } +.cm-s-erlang-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/gruvbox-dark.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/gruvbox-dark.css new file mode 100644 index 0000000000..d712dda08d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/gruvbox-dark.css @@ -0,0 +1,39 @@ +/* + + Name: gruvbox-dark + Author: kRkk (https://github.com/krkk) + + Original gruvbox color scheme by Pavel Pertsev (https://github.com/morhetz/gruvbox) + +*/ + +.cm-s-gruvbox-dark.CodeMirror, .cm-s-gruvbox-dark .CodeMirror-gutters { background-color: #282828; color: #bdae93; } +.cm-s-gruvbox-dark .CodeMirror-gutters {background: #282828; border-right: 0px;} +.cm-s-gruvbox-dark .CodeMirror-linenumber {color: #7c6f64;} +.cm-s-gruvbox-dark .CodeMirror-cursor { border-left: 1px solid #ebdbb2; } +.cm-s-gruvbox-dark.cm-fat-cursor .CodeMirror-cursor { background-color: #8e8d8875 !important; } +.cm-s-gruvbox-dark .cm-animate-fat-cursor { background-color: #8e8d8875 !important; } +.cm-s-gruvbox-dark div.CodeMirror-selected { background: #928374; } +.cm-s-gruvbox-dark span.cm-meta { color: #83a598; } + +.cm-s-gruvbox-dark span.cm-comment { color: #928374; } +.cm-s-gruvbox-dark span.cm-number, span.cm-atom { color: #d3869b; } +.cm-s-gruvbox-dark span.cm-keyword { color: #f84934; } + +.cm-s-gruvbox-dark span.cm-variable { color: #ebdbb2; } +.cm-s-gruvbox-dark span.cm-variable-2 { color: #ebdbb2; } +.cm-s-gruvbox-dark span.cm-variable-3, .cm-s-gruvbox-dark span.cm-type { color: #fabd2f; } +.cm-s-gruvbox-dark span.cm-operator { color: #ebdbb2; } +.cm-s-gruvbox-dark span.cm-callee { color: #ebdbb2; } +.cm-s-gruvbox-dark span.cm-def { color: #ebdbb2; } +.cm-s-gruvbox-dark span.cm-property { color: #ebdbb2; } +.cm-s-gruvbox-dark span.cm-string { color: #b8bb26; } +.cm-s-gruvbox-dark span.cm-string-2 { color: #8ec07c; } +.cm-s-gruvbox-dark span.cm-qualifier { color: #8ec07c; } +.cm-s-gruvbox-dark span.cm-attribute { color: #8ec07c; } + +.cm-s-gruvbox-dark .CodeMirror-activeline-background { background: #3c3836; } +.cm-s-gruvbox-dark .CodeMirror-matchingbracket { background: #928374; color:#282828 !important; } + +.cm-s-gruvbox-dark span.cm-builtin { color: #fe8019; } +.cm-s-gruvbox-dark span.cm-tag { color: #fe8019; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/hopscotch.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/hopscotch.css new file mode 100644 index 0000000000..7d05431bdc --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/hopscotch.css @@ -0,0 +1,34 @@ +/* + + Name: Hopscotch + Author: Jan T. Sott + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-hopscotch.CodeMirror {background: #322931; color: #d5d3d5;} +.cm-s-hopscotch div.CodeMirror-selected {background: #433b42 !important;} +.cm-s-hopscotch .CodeMirror-gutters {background: #322931; border-right: 0px;} +.cm-s-hopscotch .CodeMirror-linenumber {color: #797379;} +.cm-s-hopscotch .CodeMirror-cursor {border-left: 1px solid #989498 !important;} + +.cm-s-hopscotch span.cm-comment {color: #b33508;} +.cm-s-hopscotch span.cm-atom {color: #c85e7c;} +.cm-s-hopscotch span.cm-number {color: #c85e7c;} + +.cm-s-hopscotch span.cm-property, .cm-s-hopscotch span.cm-attribute {color: #8fc13e;} +.cm-s-hopscotch span.cm-keyword {color: #dd464c;} +.cm-s-hopscotch span.cm-string {color: #fdcc59;} + +.cm-s-hopscotch span.cm-variable {color: #8fc13e;} +.cm-s-hopscotch span.cm-variable-2 {color: #1290bf;} +.cm-s-hopscotch span.cm-def {color: #fd8b19;} +.cm-s-hopscotch span.cm-error {background: #dd464c; color: #989498;} +.cm-s-hopscotch span.cm-bracket {color: #d5d3d5;} +.cm-s-hopscotch span.cm-tag {color: #dd464c;} +.cm-s-hopscotch span.cm-link {color: #c85e7c;} + +.cm-s-hopscotch .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-hopscotch .CodeMirror-activeline-background { background: #302020; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/icecoder.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/icecoder.css new file mode 100644 index 0000000000..5440fbe27c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/icecoder.css @@ -0,0 +1,43 @@ +/* +ICEcoder default theme by Matt Pass, used in code editor available at https://icecoder.net +*/ + +.cm-s-icecoder { color: #666; background: #1d1d1b; } + +.cm-s-icecoder span.cm-keyword { color: #eee; font-weight:bold; } /* off-white 1 */ +.cm-s-icecoder span.cm-atom { color: #e1c76e; } /* yellow */ +.cm-s-icecoder span.cm-number { color: #6cb5d9; } /* blue */ +.cm-s-icecoder span.cm-def { color: #b9ca4a; } /* green */ + +.cm-s-icecoder span.cm-variable { color: #6cb5d9; } /* blue */ +.cm-s-icecoder span.cm-variable-2 { color: #cc1e5c; } /* pink */ +.cm-s-icecoder span.cm-variable-3, .cm-s-icecoder span.cm-type { color: #f9602c; } /* orange */ + +.cm-s-icecoder span.cm-property { color: #eee; } /* off-white 1 */ +.cm-s-icecoder span.cm-operator { color: #9179bb; } /* purple */ +.cm-s-icecoder span.cm-comment { color: #97a3aa; } /* grey-blue */ + +.cm-s-icecoder span.cm-string { color: #b9ca4a; } /* green */ +.cm-s-icecoder span.cm-string-2 { color: #6cb5d9; } /* blue */ + +.cm-s-icecoder span.cm-meta { color: #555; } /* grey */ + +.cm-s-icecoder span.cm-qualifier { color: #555; } /* grey */ +.cm-s-icecoder span.cm-builtin { color: #214e7b; } /* bright blue */ +.cm-s-icecoder span.cm-bracket { color: #cc7; } /* grey-yellow */ + +.cm-s-icecoder span.cm-tag { color: #e8e8e8; } /* off-white 2 */ +.cm-s-icecoder span.cm-attribute { color: #099; } /* teal */ + +.cm-s-icecoder span.cm-header { color: #6a0d6a; } /* purple-pink */ +.cm-s-icecoder span.cm-quote { color: #186718; } /* dark green */ +.cm-s-icecoder span.cm-hr { color: #888; } /* mid-grey */ +.cm-s-icecoder span.cm-link { color: #e1c76e; } /* yellow */ +.cm-s-icecoder span.cm-error { color: #d00; } /* red */ + +.cm-s-icecoder .CodeMirror-cursor { border-left: 1px solid white; } +.cm-s-icecoder div.CodeMirror-selected { color: #fff; background: #037; } +.cm-s-icecoder .CodeMirror-gutters { background: #1d1d1b; min-width: 41px; border-right: 0; } +.cm-s-icecoder .CodeMirror-linenumber { color: #555; cursor: default; } +.cm-s-icecoder .CodeMirror-matchingbracket { color: #fff !important; background: #555 !important; } +.cm-s-icecoder .CodeMirror-activeline-background { background: #000; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/idea.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/idea.css new file mode 100644 index 0000000000..eab36717ad --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/idea.css @@ -0,0 +1,42 @@ +/** + Name: IDEA default theme + From IntelliJ IDEA by JetBrains + */ + +.cm-s-idea span.cm-meta { color: #808000; } +.cm-s-idea span.cm-number { color: #0000FF; } +.cm-s-idea span.cm-keyword { line-height: 1em; font-weight: bold; color: #000080; } +.cm-s-idea span.cm-atom { font-weight: bold; color: #000080; } +.cm-s-idea span.cm-def { color: #000000; } +.cm-s-idea span.cm-variable { color: black; } +.cm-s-idea span.cm-variable-2 { color: black; } +.cm-s-idea span.cm-variable-3, .cm-s-idea span.cm-type { color: black; } +.cm-s-idea span.cm-property { color: black; } +.cm-s-idea span.cm-operator { color: black; } +.cm-s-idea span.cm-comment { color: #808080; } +.cm-s-idea span.cm-string { color: #008000; } +.cm-s-idea span.cm-string-2 { color: #008000; } +.cm-s-idea span.cm-qualifier { color: #555; } +.cm-s-idea span.cm-error { color: #FF0000; } +.cm-s-idea span.cm-attribute { color: #0000FF; } +.cm-s-idea span.cm-tag { color: #000080; } +.cm-s-idea span.cm-link { color: #0000FF; } +.cm-s-idea .CodeMirror-activeline-background { background: #FFFAE3; } + +.cm-s-idea span.cm-builtin { color: #30a; } +.cm-s-idea span.cm-bracket { color: #cc7; } +.cm-s-idea { font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;} + + +.cm-s-idea .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } + +.CodeMirror-hints.idea { + font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; + color: #616569; + background-color: #ebf3fd !important; +} + +.CodeMirror-hints.idea .CodeMirror-hint-active { + background-color: #a2b8c9 !important; + color: #5c6065 !important; +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/isotope.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/isotope.css new file mode 100644 index 0000000000..d0d6263cf4 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/isotope.css @@ -0,0 +1,34 @@ +/* + + Name: Isotope + Author: David Desandro / Jan T. Sott + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-isotope.CodeMirror {background: #000000; color: #e0e0e0;} +.cm-s-isotope div.CodeMirror-selected {background: #404040 !important;} +.cm-s-isotope .CodeMirror-gutters {background: #000000; border-right: 0px;} +.cm-s-isotope .CodeMirror-linenumber {color: #808080;} +.cm-s-isotope .CodeMirror-cursor {border-left: 1px solid #c0c0c0 !important;} + +.cm-s-isotope span.cm-comment {color: #3300ff;} +.cm-s-isotope span.cm-atom {color: #cc00ff;} +.cm-s-isotope span.cm-number {color: #cc00ff;} + +.cm-s-isotope span.cm-property, .cm-s-isotope span.cm-attribute {color: #33ff00;} +.cm-s-isotope span.cm-keyword {color: #ff0000;} +.cm-s-isotope span.cm-string {color: #ff0099;} + +.cm-s-isotope span.cm-variable {color: #33ff00;} +.cm-s-isotope span.cm-variable-2 {color: #0066ff;} +.cm-s-isotope span.cm-def {color: #ff9900;} +.cm-s-isotope span.cm-error {background: #ff0000; color: #c0c0c0;} +.cm-s-isotope span.cm-bracket {color: #e0e0e0;} +.cm-s-isotope span.cm-tag {color: #ff0000;} +.cm-s-isotope span.cm-link {color: #cc00ff;} + +.cm-s-isotope .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-isotope .CodeMirror-activeline-background { background: #202020; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/juejin.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/juejin.css new file mode 100644 index 0000000000..38cf7fe373 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/juejin.css @@ -0,0 +1,30 @@ +.cm-s-juejin.CodeMirror { + background: #f8f9fa; +} +.cm-s-juejin .cm-header, +.cm-s-juejin .cm-def { + color: #1ba2f0; +} +.cm-s-juejin .cm-comment { + color: #009e9d; +} +.cm-s-juejin .cm-quote, +.cm-s-juejin .cm-link, +.cm-s-juejin .cm-strong, +.cm-s-juejin .cm-attribute { + color: #fd7741; +} +.cm-s-juejin .cm-url, +.cm-s-juejin .cm-keyword, +.cm-s-juejin .cm-builtin { + color: #bb51b8; +} +.cm-s-juejin .cm-hr { + color: #909090; +} +.cm-s-juejin .cm-tag { + color: #107000; +} +.cm-s-juejin .cm-variable-2 { + color: #0050a0; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/lesser-dark.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/lesser-dark.css new file mode 100644 index 0000000000..f96bf430c2 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/lesser-dark.css @@ -0,0 +1,47 @@ +/* +http://lesscss.org/ dark theme +Ported to CodeMirror by Peter Kroon +*/ +.cm-s-lesser-dark { + line-height: 1.3em; +} +.cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; } +.cm-s-lesser-dark div.CodeMirror-selected { background: #45443B; } /* 33322B*/ +.cm-s-lesser-dark .CodeMirror-line::selection, .cm-s-lesser-dark .CodeMirror-line > span::selection, .cm-s-lesser-dark .CodeMirror-line > span > span::selection { background: rgba(69, 68, 59, .99); } +.cm-s-lesser-dark .CodeMirror-line::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(69, 68, 59, .99); } +.cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white; } +.cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/ + +.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/ + +.cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; } +.cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; } +.cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-lesser-dark .CodeMirror-linenumber { color: #777; } + +.cm-s-lesser-dark span.cm-header { color: #a0a; } +.cm-s-lesser-dark span.cm-quote { color: #090; } +.cm-s-lesser-dark span.cm-keyword { color: #599eff; } +.cm-s-lesser-dark span.cm-atom { color: #C2B470; } +.cm-s-lesser-dark span.cm-number { color: #B35E4D; } +.cm-s-lesser-dark span.cm-def { color: white; } +.cm-s-lesser-dark span.cm-variable { color:#D9BF8C; } +.cm-s-lesser-dark span.cm-variable-2 { color: #669199; } +.cm-s-lesser-dark span.cm-variable-3, .cm-s-lesser-dark span.cm-type { color: white; } +.cm-s-lesser-dark span.cm-property { color: #92A75C; } +.cm-s-lesser-dark span.cm-operator { color: #92A75C; } +.cm-s-lesser-dark span.cm-comment { color: #666; } +.cm-s-lesser-dark span.cm-string { color: #BCD279; } +.cm-s-lesser-dark span.cm-string-2 { color: #f50; } +.cm-s-lesser-dark span.cm-meta { color: #738C73; } +.cm-s-lesser-dark span.cm-qualifier { color: #555; } +.cm-s-lesser-dark span.cm-builtin { color: #ff9e59; } +.cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; } +.cm-s-lesser-dark span.cm-tag { color: #669199; } +.cm-s-lesser-dark span.cm-attribute { color: #81a4d5; } +.cm-s-lesser-dark span.cm-hr { color: #999; } +.cm-s-lesser-dark span.cm-link { color: #7070E6; } +.cm-s-lesser-dark span.cm-error { color: #9d1e15; } + +.cm-s-lesser-dark .CodeMirror-activeline-background { background: #3C3A3A; } +.cm-s-lesser-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/liquibyte.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/liquibyte.css new file mode 100644 index 0000000000..393825e029 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/liquibyte.css @@ -0,0 +1,95 @@ +.cm-s-liquibyte.CodeMirror { + background-color: #000; + color: #fff; + line-height: 1.2em; + font-size: 1em; +} +.cm-s-liquibyte .CodeMirror-focused .cm-matchhighlight { + text-decoration: underline; + text-decoration-color: #0f0; + text-decoration-style: wavy; +} +.cm-s-liquibyte .cm-trailingspace { + text-decoration: line-through; + text-decoration-color: #f00; + text-decoration-style: dotted; +} +.cm-s-liquibyte .cm-tab { + text-decoration: line-through; + text-decoration-color: #404040; + text-decoration-style: dotted; +} +.cm-s-liquibyte .CodeMirror-gutters { background-color: #262626; border-right: 1px solid #505050; padding-right: 0.8em; } +.cm-s-liquibyte .CodeMirror-gutter-elt div { font-size: 1.2em; } +.cm-s-liquibyte .CodeMirror-guttermarker { } +.cm-s-liquibyte .CodeMirror-guttermarker-subtle { } +.cm-s-liquibyte .CodeMirror-linenumber { color: #606060; padding-left: 0; } +.cm-s-liquibyte .CodeMirror-cursor { border-left: 1px solid #eee; } + +.cm-s-liquibyte span.cm-comment { color: #008000; } +.cm-s-liquibyte span.cm-def { color: #ffaf40; font-weight: bold; } +.cm-s-liquibyte span.cm-keyword { color: #c080ff; font-weight: bold; } +.cm-s-liquibyte span.cm-builtin { color: #ffaf40; font-weight: bold; } +.cm-s-liquibyte span.cm-variable { color: #5967ff; font-weight: bold; } +.cm-s-liquibyte span.cm-string { color: #ff8000; } +.cm-s-liquibyte span.cm-number { color: #0f0; font-weight: bold; } +.cm-s-liquibyte span.cm-atom { color: #bf3030; font-weight: bold; } + +.cm-s-liquibyte span.cm-variable-2 { color: #007f7f; font-weight: bold; } +.cm-s-liquibyte span.cm-variable-3, .cm-s-liquibyte span.cm-type { color: #c080ff; font-weight: bold; } +.cm-s-liquibyte span.cm-property { color: #999; font-weight: bold; } +.cm-s-liquibyte span.cm-operator { color: #fff; } + +.cm-s-liquibyte span.cm-meta { color: #0f0; } +.cm-s-liquibyte span.cm-qualifier { color: #fff700; font-weight: bold; } +.cm-s-liquibyte span.cm-bracket { color: #cc7; } +.cm-s-liquibyte span.cm-tag { color: #ff0; font-weight: bold; } +.cm-s-liquibyte span.cm-attribute { color: #c080ff; font-weight: bold; } +.cm-s-liquibyte span.cm-error { color: #f00; } + +.cm-s-liquibyte div.CodeMirror-selected { background-color: rgba(255, 0, 0, 0.25); } + +.cm-s-liquibyte span.cm-compilation { background-color: rgba(255, 255, 255, 0.12); } + +.cm-s-liquibyte .CodeMirror-activeline-background { background-color: rgba(0, 255, 0, 0.15); } + +/* Default styles for common addons */ +.cm-s-liquibyte .CodeMirror span.CodeMirror-matchingbracket { color: #0f0; font-weight: bold; } +.cm-s-liquibyte .CodeMirror span.CodeMirror-nonmatchingbracket { color: #f00; font-weight: bold; } +.CodeMirror-matchingtag { background-color: rgba(150, 255, 0, .3); } +/* Scrollbars */ +/* Simple */ +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div:hover, .cm-s-liquibyte div.CodeMirror-simplescroll-vertical div:hover { + background-color: rgba(80, 80, 80, .7); +} +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div, .cm-s-liquibyte div.CodeMirror-simplescroll-vertical div { + background-color: rgba(80, 80, 80, .3); + border: 1px solid #404040; + border-radius: 5px; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-vertical div { + border-top: 1px solid #404040; + border-bottom: 1px solid #404040; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div { + border-left: 1px solid #404040; + border-right: 1px solid #404040; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-vertical { + background-color: #262626; +} +.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal { + background-color: #262626; + border-top: 1px solid #404040; +} +/* Overlay */ +.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div, div.CodeMirror-overlayscroll-vertical div { + background-color: #404040; + border-radius: 5px; +} +.cm-s-liquibyte div.CodeMirror-overlayscroll-vertical div { + border: 1px solid #404040; +} +.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div { + border: 1px solid #404040; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/lucario.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/lucario.css new file mode 100644 index 0000000000..17a1551032 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/lucario.css @@ -0,0 +1,37 @@ +/* + Name: lucario + Author: Raphael Amorim + + Original Lucario color scheme (https://github.com/raphamorim/lucario) +*/ + +.cm-s-lucario.CodeMirror, .cm-s-lucario .CodeMirror-gutters { + background-color: #2b3e50 !important; + color: #f8f8f2 !important; + border: none; +} +.cm-s-lucario .CodeMirror-gutters { color: #2b3e50; } +.cm-s-lucario .CodeMirror-cursor { border-left: solid thin #E6C845; } +.cm-s-lucario .CodeMirror-linenumber { color: #f8f8f2; } +.cm-s-lucario .CodeMirror-selected { background: #243443; } +.cm-s-lucario .CodeMirror-line::selection, .cm-s-lucario .CodeMirror-line > span::selection, .cm-s-lucario .CodeMirror-line > span > span::selection { background: #243443; } +.cm-s-lucario .CodeMirror-line::-moz-selection, .cm-s-lucario .CodeMirror-line > span::-moz-selection, .cm-s-lucario .CodeMirror-line > span > span::-moz-selection { background: #243443; } +.cm-s-lucario span.cm-comment { color: #5c98cd; } +.cm-s-lucario span.cm-string, .cm-s-lucario span.cm-string-2 { color: #E6DB74; } +.cm-s-lucario span.cm-number { color: #ca94ff; } +.cm-s-lucario span.cm-variable { color: #f8f8f2; } +.cm-s-lucario span.cm-variable-2 { color: #f8f8f2; } +.cm-s-lucario span.cm-def { color: #72C05D; } +.cm-s-lucario span.cm-operator { color: #66D9EF; } +.cm-s-lucario span.cm-keyword { color: #ff6541; } +.cm-s-lucario span.cm-atom { color: #bd93f9; } +.cm-s-lucario span.cm-meta { color: #f8f8f2; } +.cm-s-lucario span.cm-tag { color: #ff6541; } +.cm-s-lucario span.cm-attribute { color: #66D9EF; } +.cm-s-lucario span.cm-qualifier { color: #72C05D; } +.cm-s-lucario span.cm-property { color: #f8f8f2; } +.cm-s-lucario span.cm-builtin { color: #72C05D; } +.cm-s-lucario span.cm-variable-3, .cm-s-lucario span.cm-type { color: #ffb86c; } + +.cm-s-lucario .CodeMirror-activeline-background { background: #243443; } +.cm-s-lucario .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material-darker.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material-darker.css new file mode 100644 index 0000000000..45b64efb25 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material-darker.css @@ -0,0 +1,135 @@ +/* + Name: material + Author: Mattia Astorino (http://github.com/equinusocio) + Website: https://material-theme.site/ +*/ + +.cm-s-material-darker.CodeMirror { + background-color: #212121; + color: #EEFFFF; +} + +.cm-s-material-darker .CodeMirror-gutters { + background: #212121; + color: #545454; + border: none; +} + +.cm-s-material-darker .CodeMirror-guttermarker, +.cm-s-material-darker .CodeMirror-guttermarker-subtle, +.cm-s-material-darker .CodeMirror-linenumber { + color: #545454; +} + +.cm-s-material-darker .CodeMirror-cursor { + border-left: 1px solid #FFCC00; +} + +.cm-s-material-darker div.CodeMirror-selected { + background: rgba(97, 97, 97, 0.2); +} + +.cm-s-material-darker.CodeMirror-focused div.CodeMirror-selected { + background: rgba(97, 97, 97, 0.2); +} + +.cm-s-material-darker .CodeMirror-line::selection, +.cm-s-material-darker .CodeMirror-line>span::selection, +.cm-s-material-darker .CodeMirror-line>span>span::selection { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-material-darker .CodeMirror-line::-moz-selection, +.cm-s-material-darker .CodeMirror-line>span::-moz-selection, +.cm-s-material-darker .CodeMirror-line>span>span::-moz-selection { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-material-darker .CodeMirror-activeline-background { + background: rgba(0, 0, 0, 0.5); +} + +.cm-s-material-darker .cm-keyword { + color: #C792EA; +} + +.cm-s-material-darker .cm-operator { + color: #89DDFF; +} + +.cm-s-material-darker .cm-variable-2 { + color: #EEFFFF; +} + +.cm-s-material-darker .cm-variable-3, +.cm-s-material-darker .cm-type { + color: #f07178; +} + +.cm-s-material-darker .cm-builtin { + color: #FFCB6B; +} + +.cm-s-material-darker .cm-atom { + color: #F78C6C; +} + +.cm-s-material-darker .cm-number { + color: #FF5370; +} + +.cm-s-material-darker .cm-def { + color: #82AAFF; +} + +.cm-s-material-darker .cm-string { + color: #C3E88D; +} + +.cm-s-material-darker .cm-string-2 { + color: #f07178; +} + +.cm-s-material-darker .cm-comment { + color: #545454; +} + +.cm-s-material-darker .cm-variable { + color: #f07178; +} + +.cm-s-material-darker .cm-tag { + color: #FF5370; +} + +.cm-s-material-darker .cm-meta { + color: #FFCB6B; +} + +.cm-s-material-darker .cm-attribute { + color: #C792EA; +} + +.cm-s-material-darker .cm-property { + color: #C792EA; +} + +.cm-s-material-darker .cm-qualifier { + color: #DECB6B; +} + +.cm-s-material-darker .cm-variable-3, +.cm-s-material-darker .cm-type { + color: #DECB6B; +} + + +.cm-s-material-darker .cm-error { + color: rgba(255, 255, 255, 1.0); + background-color: #FF5370; +} + +.cm-s-material-darker .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material-ocean.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material-ocean.css new file mode 100644 index 0000000000..404178de22 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material-ocean.css @@ -0,0 +1,141 @@ +/* + Name: material + Author: Mattia Astorino (http://github.com/equinusocio) + Website: https://material-theme.site/ +*/ + +.cm-s-material-ocean.CodeMirror { + background-color: #0F111A; + color: #8F93A2; +} + +.cm-s-material-ocean .CodeMirror-gutters { + background: #0F111A; + color: #464B5D; + border: none; +} + +.cm-s-material-ocean .CodeMirror-guttermarker, +.cm-s-material-ocean .CodeMirror-guttermarker-subtle, +.cm-s-material-ocean .CodeMirror-linenumber { + color: #464B5D; +} + +.cm-s-material-ocean .CodeMirror-cursor { + border-left: 1px solid #FFCC00; +} +.cm-s-material-ocean.cm-fat-cursor .CodeMirror-cursor { + background-color: #a2a8a175 !important; +} +.cm-s-material-ocean .cm-animate-fat-cursor { + background-color: #a2a8a175 !important; +} + +.cm-s-material-ocean div.CodeMirror-selected { + background: rgba(113, 124, 180, 0.2); +} + +.cm-s-material-ocean.CodeMirror-focused div.CodeMirror-selected { + background: rgba(113, 124, 180, 0.2); +} + +.cm-s-material-ocean .CodeMirror-line::selection, +.cm-s-material-ocean .CodeMirror-line>span::selection, +.cm-s-material-ocean .CodeMirror-line>span>span::selection { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-material-ocean .CodeMirror-line::-moz-selection, +.cm-s-material-ocean .CodeMirror-line>span::-moz-selection, +.cm-s-material-ocean .CodeMirror-line>span>span::-moz-selection { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-material-ocean .CodeMirror-activeline-background { + background: rgba(0, 0, 0, 0.5); +} + +.cm-s-material-ocean .cm-keyword { + color: #C792EA; +} + +.cm-s-material-ocean .cm-operator { + color: #89DDFF; +} + +.cm-s-material-ocean .cm-variable-2 { + color: #EEFFFF; +} + +.cm-s-material-ocean .cm-variable-3, +.cm-s-material-ocean .cm-type { + color: #f07178; +} + +.cm-s-material-ocean .cm-builtin { + color: #FFCB6B; +} + +.cm-s-material-ocean .cm-atom { + color: #F78C6C; +} + +.cm-s-material-ocean .cm-number { + color: #FF5370; +} + +.cm-s-material-ocean .cm-def { + color: #82AAFF; +} + +.cm-s-material-ocean .cm-string { + color: #C3E88D; +} + +.cm-s-material-ocean .cm-string-2 { + color: #f07178; +} + +.cm-s-material-ocean .cm-comment { + color: #464B5D; +} + +.cm-s-material-ocean .cm-variable { + color: #f07178; +} + +.cm-s-material-ocean .cm-tag { + color: #FF5370; +} + +.cm-s-material-ocean .cm-meta { + color: #FFCB6B; +} + +.cm-s-material-ocean .cm-attribute { + color: #C792EA; +} + +.cm-s-material-ocean .cm-property { + color: #C792EA; +} + +.cm-s-material-ocean .cm-qualifier { + color: #DECB6B; +} + +.cm-s-material-ocean .cm-variable-3, +.cm-s-material-ocean .cm-type { + color: #DECB6B; +} + + +.cm-s-material-ocean .cm-error { + color: rgba(255, 255, 255, 1.0); + background-color: #FF5370; +} + +.cm-s-material-ocean .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material-palenight.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material-palenight.css new file mode 100644 index 0000000000..6712c43a0e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material-palenight.css @@ -0,0 +1,141 @@ +/* + Name: material + Author: Mattia Astorino (http://github.com/equinusocio) + Website: https://material-theme.site/ +*/ + +.cm-s-material-palenight.CodeMirror { + background-color: #292D3E; + color: #A6ACCD; +} + +.cm-s-material-palenight .CodeMirror-gutters { + background: #292D3E; + color: #676E95; + border: none; +} + +.cm-s-material-palenight .CodeMirror-guttermarker, +.cm-s-material-palenight .CodeMirror-guttermarker-subtle, +.cm-s-material-palenight .CodeMirror-linenumber { + color: #676E95; +} + +.cm-s-material-palenight .CodeMirror-cursor { + border-left: 1px solid #FFCC00; +} +.cm-s-material-palenight.cm-fat-cursor .CodeMirror-cursor { + background-color: #607c8b80 !important; +} +.cm-s-material-palenight .cm-animate-fat-cursor { + background-color: #607c8b80 !important; +} + +.cm-s-material-palenight div.CodeMirror-selected { + background: rgba(113, 124, 180, 0.2); +} + +.cm-s-material-palenight.CodeMirror-focused div.CodeMirror-selected { + background: rgba(113, 124, 180, 0.2); +} + +.cm-s-material-palenight .CodeMirror-line::selection, +.cm-s-material-palenight .CodeMirror-line>span::selection, +.cm-s-material-palenight .CodeMirror-line>span>span::selection { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-material-palenight .CodeMirror-line::-moz-selection, +.cm-s-material-palenight .CodeMirror-line>span::-moz-selection, +.cm-s-material-palenight .CodeMirror-line>span>span::-moz-selection { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-material-palenight .CodeMirror-activeline-background { + background: rgba(0, 0, 0, 0.5); +} + +.cm-s-material-palenight .cm-keyword { + color: #C792EA; +} + +.cm-s-material-palenight .cm-operator { + color: #89DDFF; +} + +.cm-s-material-palenight .cm-variable-2 { + color: #EEFFFF; +} + +.cm-s-material-palenight .cm-variable-3, +.cm-s-material-palenight .cm-type { + color: #f07178; +} + +.cm-s-material-palenight .cm-builtin { + color: #FFCB6B; +} + +.cm-s-material-palenight .cm-atom { + color: #F78C6C; +} + +.cm-s-material-palenight .cm-number { + color: #FF5370; +} + +.cm-s-material-palenight .cm-def { + color: #82AAFF; +} + +.cm-s-material-palenight .cm-string { + color: #C3E88D; +} + +.cm-s-material-palenight .cm-string-2 { + color: #f07178; +} + +.cm-s-material-palenight .cm-comment { + color: #676E95; +} + +.cm-s-material-palenight .cm-variable { + color: #f07178; +} + +.cm-s-material-palenight .cm-tag { + color: #FF5370; +} + +.cm-s-material-palenight .cm-meta { + color: #FFCB6B; +} + +.cm-s-material-palenight .cm-attribute { + color: #C792EA; +} + +.cm-s-material-palenight .cm-property { + color: #C792EA; +} + +.cm-s-material-palenight .cm-qualifier { + color: #DECB6B; +} + +.cm-s-material-palenight .cm-variable-3, +.cm-s-material-palenight .cm-type { + color: #DECB6B; +} + + +.cm-s-material-palenight .cm-error { + color: rgba(255, 255, 255, 1.0); + background-color: #FF5370; +} + +.cm-s-material-palenight .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material.css new file mode 100644 index 0000000000..a7848499a7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/material.css @@ -0,0 +1,141 @@ +/* + Name: material + Author: Mattia Astorino (http://github.com/equinusocio) + Website: https://material-theme.site/ +*/ + +.cm-s-material.CodeMirror { + background-color: #263238; + color: #EEFFFF; +} + +.cm-s-material .CodeMirror-gutters { + background: #263238; + color: #546E7A; + border: none; +} + +.cm-s-material .CodeMirror-guttermarker, +.cm-s-material .CodeMirror-guttermarker-subtle, +.cm-s-material .CodeMirror-linenumber { + color: #546E7A; +} + +.cm-s-material .CodeMirror-cursor { + border-left: 1px solid #FFCC00; +} +.cm-s-material.cm-fat-cursor .CodeMirror-cursor { + background-color: #5d6d5c80 !important; +} +.cm-s-material .cm-animate-fat-cursor { + background-color: #5d6d5c80 !important; +} + +.cm-s-material div.CodeMirror-selected { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-material.CodeMirror-focused div.CodeMirror-selected { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-material .CodeMirror-line::selection, +.cm-s-material .CodeMirror-line>span::selection, +.cm-s-material .CodeMirror-line>span>span::selection { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-material .CodeMirror-line::-moz-selection, +.cm-s-material .CodeMirror-line>span::-moz-selection, +.cm-s-material .CodeMirror-line>span>span::-moz-selection { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-material .CodeMirror-activeline-background { + background: rgba(0, 0, 0, 0.5); +} + +.cm-s-material .cm-keyword { + color: #C792EA; +} + +.cm-s-material .cm-operator { + color: #89DDFF; +} + +.cm-s-material .cm-variable-2 { + color: #EEFFFF; +} + +.cm-s-material .cm-variable-3, +.cm-s-material .cm-type { + color: #f07178; +} + +.cm-s-material .cm-builtin { + color: #FFCB6B; +} + +.cm-s-material .cm-atom { + color: #F78C6C; +} + +.cm-s-material .cm-number { + color: #FF5370; +} + +.cm-s-material .cm-def { + color: #82AAFF; +} + +.cm-s-material .cm-string { + color: #C3E88D; +} + +.cm-s-material .cm-string-2 { + color: #f07178; +} + +.cm-s-material .cm-comment { + color: #546E7A; +} + +.cm-s-material .cm-variable { + color: #f07178; +} + +.cm-s-material .cm-tag { + color: #FF5370; +} + +.cm-s-material .cm-meta { + color: #FFCB6B; +} + +.cm-s-material .cm-attribute { + color: #C792EA; +} + +.cm-s-material .cm-property { + color: #C792EA; +} + +.cm-s-material .cm-qualifier { + color: #DECB6B; +} + +.cm-s-material .cm-variable-3, +.cm-s-material .cm-type { + color: #DECB6B; +} + + +.cm-s-material .cm-error { + color: rgba(255, 255, 255, 1.0); + background-color: #FF5370; +} + +.cm-s-material .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/mbo.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/mbo.css new file mode 100644 index 0000000000..e164fcf42a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/mbo.css @@ -0,0 +1,37 @@ +/****************************************************************/ +/* Based on mbonaci's Brackets mbo theme */ +/* https://github.com/mbonaci/global/blob/master/Mbo.tmTheme */ +/* Create your own: http://tmtheme-editor.herokuapp.com */ +/****************************************************************/ + +.cm-s-mbo.CodeMirror { background: #2c2c2c; color: #ffffec; } +.cm-s-mbo div.CodeMirror-selected { background: #716C62; } +.cm-s-mbo .CodeMirror-line::selection, .cm-s-mbo .CodeMirror-line > span::selection, .cm-s-mbo .CodeMirror-line > span > span::selection { background: rgba(113, 108, 98, .99); } +.cm-s-mbo .CodeMirror-line::-moz-selection, .cm-s-mbo .CodeMirror-line > span::-moz-selection, .cm-s-mbo .CodeMirror-line > span > span::-moz-selection { background: rgba(113, 108, 98, .99); } +.cm-s-mbo .CodeMirror-gutters { background: #4e4e4e; border-right: 0px; } +.cm-s-mbo .CodeMirror-guttermarker { color: white; } +.cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; } +.cm-s-mbo .CodeMirror-linenumber { color: #dadada; } +.cm-s-mbo .CodeMirror-cursor { border-left: 1px solid #ffffec; } + +.cm-s-mbo span.cm-comment { color: #95958a; } +.cm-s-mbo span.cm-atom { color: #00a8c6; } +.cm-s-mbo span.cm-number { color: #00a8c6; } + +.cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute { color: #9ddfe9; } +.cm-s-mbo span.cm-keyword { color: #ffb928; } +.cm-s-mbo span.cm-string { color: #ffcf6c; } +.cm-s-mbo span.cm-string.cm-property { color: #ffffec; } + +.cm-s-mbo span.cm-variable { color: #ffffec; } +.cm-s-mbo span.cm-variable-2 { color: #00a8c6; } +.cm-s-mbo span.cm-def { color: #ffffec; } +.cm-s-mbo span.cm-bracket { color: #fffffc; font-weight: bold; } +.cm-s-mbo span.cm-tag { color: #9ddfe9; } +.cm-s-mbo span.cm-link { color: #f54b07; } +.cm-s-mbo span.cm-error { border-bottom: #636363; color: #ffffec; } +.cm-s-mbo span.cm-qualifier { color: #ffffec; } + +.cm-s-mbo .CodeMirror-activeline-background { background: #494b41; } +.cm-s-mbo .CodeMirror-matchingbracket { color: #ffb928 !important; } +.cm-s-mbo .CodeMirror-matchingtag { background: rgba(255, 255, 255, .37); } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/mdn-like.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/mdn-like.css new file mode 100644 index 0000000000..622ed3efb7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/mdn-like.css @@ -0,0 +1,46 @@ +/* + MDN-LIKE Theme - Mozilla + Ported to CodeMirror by Peter Kroon + Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues + GitHub: @peterkroon + + The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation + +*/ +.cm-s-mdn-like.CodeMirror { color: #999; background-color: #fff; } +.cm-s-mdn-like div.CodeMirror-selected { background: #cfc; } +.cm-s-mdn-like .CodeMirror-line::selection, .cm-s-mdn-like .CodeMirror-line > span::selection, .cm-s-mdn-like .CodeMirror-line > span > span::selection { background: #cfc; } +.cm-s-mdn-like .CodeMirror-line::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span > span::-moz-selection { background: #cfc; } + +.cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; } +.cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; padding-left: 8px; } +.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; } + +.cm-s-mdn-like .cm-keyword { color: #6262FF; } +.cm-s-mdn-like .cm-atom { color: #F90; } +.cm-s-mdn-like .cm-number { color: #ca7841; } +.cm-s-mdn-like .cm-def { color: #8DA6CE; } +.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; } +.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def, .cm-s-mdn-like span.cm-type { color: #07a; } + +.cm-s-mdn-like .cm-variable { color: #07a; } +.cm-s-mdn-like .cm-property { color: #905; } +.cm-s-mdn-like .cm-qualifier { color: #690; } + +.cm-s-mdn-like .cm-operator { color: #cda869; } +.cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; } +.cm-s-mdn-like .cm-string { color:#07a; font-style:italic; } +.cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/ +.cm-s-mdn-like .cm-meta { color: #000; } /*?*/ +.cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/ +.cm-s-mdn-like .cm-tag { color: #997643; } +.cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/ +.cm-s-mdn-like .cm-header { color: #FF6400; } +.cm-s-mdn-like .cm-hr { color: #AEAEAE; } +.cm-s-mdn-like .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } +.cm-s-mdn-like .cm-error { border-bottom: 1px solid red; } + +div.cm-s-mdn-like .CodeMirror-activeline-background { background: #efefff; } +div.cm-s-mdn-like span.CodeMirror-matchingbracket { outline:1px solid grey; color: inherit; } + +.cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,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); } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/midnight.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/midnight.css new file mode 100644 index 0000000000..fc26474a4a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/midnight.css @@ -0,0 +1,39 @@ +/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ + +/**/ +.cm-s-midnight .CodeMirror-activeline-background { background: #253540; } + +.cm-s-midnight.CodeMirror { + background: #0F192A; + color: #D1EDFF; +} + +.cm-s-midnight div.CodeMirror-selected { background: #314D67; } +.cm-s-midnight .CodeMirror-line::selection, .cm-s-midnight .CodeMirror-line > span::selection, .cm-s-midnight .CodeMirror-line > span > span::selection { background: rgba(49, 77, 103, .99); } +.cm-s-midnight .CodeMirror-line::-moz-selection, .cm-s-midnight .CodeMirror-line > span::-moz-selection, .cm-s-midnight .CodeMirror-line > span > span::-moz-selection { background: rgba(49, 77, 103, .99); } +.cm-s-midnight .CodeMirror-gutters { background: #0F192A; border-right: 1px solid; } +.cm-s-midnight .CodeMirror-guttermarker { color: white; } +.cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-midnight .CodeMirror-linenumber { color: #D0D0D0; } +.cm-s-midnight .CodeMirror-cursor { border-left: 1px solid #F8F8F0; } + +.cm-s-midnight span.cm-comment { color: #428BDD; } +.cm-s-midnight span.cm-atom { color: #AE81FF; } +.cm-s-midnight span.cm-number { color: #D1EDFF; } + +.cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute { color: #A6E22E; } +.cm-s-midnight span.cm-keyword { color: #E83737; } +.cm-s-midnight span.cm-string { color: #1DC116; } + +.cm-s-midnight span.cm-variable { color: #FFAA3E; } +.cm-s-midnight span.cm-variable-2 { color: #FFAA3E; } +.cm-s-midnight span.cm-def { color: #4DD; } +.cm-s-midnight span.cm-bracket { color: #D1EDFF; } +.cm-s-midnight span.cm-tag { color: #449; } +.cm-s-midnight span.cm-link { color: #AE81FF; } +.cm-s-midnight span.cm-error { background: #F92672; color: #F8F8F0; } + +.cm-s-midnight .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/monokai.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/monokai.css new file mode 100644 index 0000000000..cd4cd55720 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/monokai.css @@ -0,0 +1,41 @@ +/* Based on Sublime Text's Monokai theme */ + +.cm-s-monokai.CodeMirror { background: #272822; color: #f8f8f2; } +.cm-s-monokai div.CodeMirror-selected { background: #49483E; } +.cm-s-monokai .CodeMirror-line::selection, .cm-s-monokai .CodeMirror-line > span::selection, .cm-s-monokai .CodeMirror-line > span > span::selection { background: rgba(73, 72, 62, .99); } +.cm-s-monokai .CodeMirror-line::-moz-selection, .cm-s-monokai .CodeMirror-line > span::-moz-selection, .cm-s-monokai .CodeMirror-line > span > span::-moz-selection { background: rgba(73, 72, 62, .99); } +.cm-s-monokai .CodeMirror-gutters { background: #272822; border-right: 0px; } +.cm-s-monokai .CodeMirror-guttermarker { color: white; } +.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-monokai .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-monokai .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } + +.cm-s-monokai span.cm-comment { color: #75715e; } +.cm-s-monokai span.cm-atom { color: #ae81ff; } +.cm-s-monokai span.cm-number { color: #ae81ff; } + +.cm-s-monokai span.cm-comment.cm-attribute { color: #97b757; } +.cm-s-monokai span.cm-comment.cm-def { color: #bc9262; } +.cm-s-monokai span.cm-comment.cm-tag { color: #bc6283; } +.cm-s-monokai span.cm-comment.cm-type { color: #5998a6; } + +.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute { color: #a6e22e; } +.cm-s-monokai span.cm-keyword { color: #f92672; } +.cm-s-monokai span.cm-builtin { color: #66d9ef; } +.cm-s-monokai span.cm-string { color: #e6db74; } + +.cm-s-monokai span.cm-variable { color: #f8f8f2; } +.cm-s-monokai span.cm-variable-2 { color: #9effff; } +.cm-s-monokai span.cm-variable-3, .cm-s-monokai span.cm-type { color: #66d9ef; } +.cm-s-monokai span.cm-def { color: #fd971f; } +.cm-s-monokai span.cm-bracket { color: #f8f8f2; } +.cm-s-monokai span.cm-tag { color: #f92672; } +.cm-s-monokai span.cm-header { color: #ae81ff; } +.cm-s-monokai span.cm-link { color: #ae81ff; } +.cm-s-monokai span.cm-error { background: #f92672; color: #f8f8f0; } + +.cm-s-monokai .CodeMirror-activeline-background { background: #373831; } +.cm-s-monokai .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/moxer.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/moxer.css new file mode 100644 index 0000000000..b3ca35e385 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/moxer.css @@ -0,0 +1,143 @@ +/* + Name: Moxer Theme + Author: Mattia Astorino (http://github.com/equinusocio) + Website: https://github.com/moxer-theme/moxer-code +*/ + +.cm-s-moxer.CodeMirror { + background-color: #090A0F; + color: #8E95B4; + line-height: 1.8; +} + +.cm-s-moxer .CodeMirror-gutters { + background: #090A0F; + color: #35394B; + border: none; +} + +.cm-s-moxer .CodeMirror-guttermarker, +.cm-s-moxer .CodeMirror-guttermarker-subtle, +.cm-s-moxer .CodeMirror-linenumber { + color: #35394B; +} + + +.cm-s-moxer .CodeMirror-cursor { + border-left: 1px solid #FFCC00; +} + +.cm-s-moxer div.CodeMirror-selected { + background: rgba(128, 203, 196, 0.2); +} + +.cm-s-moxer.CodeMirror-focused div.CodeMirror-selected { + background: #212431; +} + +.cm-s-moxer .CodeMirror-line::selection, +.cm-s-moxer .CodeMirror-line>span::selection, +.cm-s-moxer .CodeMirror-line>span>span::selection { + background: #212431; +} + +.cm-s-moxer .CodeMirror-line::-moz-selection, +.cm-s-moxer .CodeMirror-line>span::-moz-selection, +.cm-s-moxer .CodeMirror-line>span>span::-moz-selection { + background: #212431; +} + +.cm-s-moxer .CodeMirror-activeline-background, +.cm-s-moxer .CodeMirror-activeline-gutter .CodeMirror-linenumber { + background: rgba(33, 36, 49, 0.5); +} + +.cm-s-moxer .cm-keyword { + color: #D46C6C; +} + +.cm-s-moxer .cm-operator { + color: #D46C6C; +} + +.cm-s-moxer .cm-variable-2 { + color: #81C5DA; +} + + +.cm-s-moxer .cm-variable-3, +.cm-s-moxer .cm-type { + color: #f07178; +} + +.cm-s-moxer .cm-builtin { + color: #FFCB6B; +} + +.cm-s-moxer .cm-atom { + color: #A99BE2; +} + +.cm-s-moxer .cm-number { + color: #7CA4C0; +} + +.cm-s-moxer .cm-def { + color: #F5DFA5; +} + +.cm-s-moxer .CodeMirror-line .cm-def ~ .cm-def { + color: #81C5DA; +} + +.cm-s-moxer .cm-string { + color: #B2E4AE; +} + +.cm-s-moxer .cm-string-2 { + color: #f07178; +} + +.cm-s-moxer .cm-comment { + color: #3F445A; +} + +.cm-s-moxer .cm-variable { + color: #8E95B4; +} + +.cm-s-moxer .cm-tag { + color: #FF5370; +} + +.cm-s-moxer .cm-meta { + color: #FFCB6B; +} + +.cm-s-moxer .cm-attribute { + color: #C792EA; +} + +.cm-s-moxer .cm-property { + color: #81C5DA; +} + +.cm-s-moxer .cm-qualifier { + color: #DECB6B; +} + +.cm-s-moxer .cm-variable-3, +.cm-s-moxer .cm-type { + color: #DECB6B; +} + + +.cm-s-moxer .cm-error { + color: rgba(255, 255, 255, 1.0); + background-color: #FF5370; +} + +.cm-s-moxer .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/neat.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/neat.css new file mode 100644 index 0000000000..4267b1a37d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/neat.css @@ -0,0 +1,12 @@ +.cm-s-neat span.cm-comment { color: #a86; } +.cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } +.cm-s-neat span.cm-string { color: #a22; } +.cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } +.cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } +.cm-s-neat span.cm-variable { color: black; } +.cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } +.cm-s-neat span.cm-meta { color: #555; } +.cm-s-neat span.cm-link { color: #3a3; } + +.cm-s-neat .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-neat .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/neo.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/neo.css new file mode 100644 index 0000000000..b28d5c65fa --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/neo.css @@ -0,0 +1,43 @@ +/* neo theme for codemirror */ + +/* Color scheme */ + +.cm-s-neo.CodeMirror { + background-color:#ffffff; + color:#2e383c; + line-height:1.4375; +} +.cm-s-neo .cm-comment { color:#75787b; } +.cm-s-neo .cm-keyword, .cm-s-neo .cm-property { color:#1d75b3; } +.cm-s-neo .cm-atom,.cm-s-neo .cm-number { color:#75438a; } +.cm-s-neo .cm-node,.cm-s-neo .cm-tag { color:#9c3328; } +.cm-s-neo .cm-string { color:#b35e14; } +.cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier { color:#047d65; } + + +/* Editor styling */ + +.cm-s-neo pre { + padding:0; +} + +.cm-s-neo .CodeMirror-gutters { + border:none; + border-right:10px solid transparent; + background-color:transparent; +} + +.cm-s-neo .CodeMirror-linenumber { + padding:0; + color:#e0e2e5; +} + +.cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } +.cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } + +.cm-s-neo .CodeMirror-cursor { + width: auto; + border: 0; + background: rgba(155,157,162,0.37); + z-index: 1; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/night.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/night.css new file mode 100644 index 0000000000..f631bf42c7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/night.css @@ -0,0 +1,27 @@ +/* Loosely based on the Midnight Textmate theme */ + +.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; } +.cm-s-night div.CodeMirror-selected { background: #447; } +.cm-s-night .CodeMirror-line::selection, .cm-s-night .CodeMirror-line > span::selection, .cm-s-night .CodeMirror-line > span > span::selection { background: rgba(68, 68, 119, .99); } +.cm-s-night .CodeMirror-line::-moz-selection, .cm-s-night .CodeMirror-line > span::-moz-selection, .cm-s-night .CodeMirror-line > span > span::-moz-selection { background: rgba(68, 68, 119, .99); } +.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-night .CodeMirror-guttermarker { color: white; } +.cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; } +.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; } +.cm-s-night .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-night span.cm-comment { color: #8900d1; } +.cm-s-night span.cm-atom { color: #845dc4; } +.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; } +.cm-s-night span.cm-keyword { color: #599eff; } +.cm-s-night span.cm-string { color: #37f14a; } +.cm-s-night span.cm-meta { color: #7678e2; } +.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; } +.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def, .cm-s-night span.cm-type { color: white; } +.cm-s-night span.cm-bracket { color: #8da6ce; } +.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; } +.cm-s-night span.cm-link { color: #845dc4; } +.cm-s-night span.cm-error { color: #9d1e15; } + +.cm-s-night .CodeMirror-activeline-background { background: #1C005A; } +.cm-s-night .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/nord.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/nord.css new file mode 100644 index 0000000000..41a8ad7782 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/nord.css @@ -0,0 +1,42 @@ +/* Based on arcticicestudio's Nord theme */ +/* https://github.com/arcticicestudio/nord */ + +.cm-s-nord.CodeMirror { background: #2e3440; color: #d8dee9; } +.cm-s-nord div.CodeMirror-selected { background: #434c5e; } +.cm-s-nord .CodeMirror-line::selection, .cm-s-nord .CodeMirror-line > span::selection, .cm-s-nord .CodeMirror-line > span > span::selection { background: #3b4252; } +.cm-s-nord .CodeMirror-line::-moz-selection, .cm-s-nord .CodeMirror-line > span::-moz-selection, .cm-s-nord .CodeMirror-line > span > span::-moz-selection { background: #3b4252; } +.cm-s-nord .CodeMirror-gutters { background: #2e3440; border-right: 0px; } +.cm-s-nord .CodeMirror-guttermarker { color: #4c566a; } +.cm-s-nord .CodeMirror-guttermarker-subtle { color: #4c566a; } +.cm-s-nord .CodeMirror-linenumber { color: #4c566a; } +.cm-s-nord .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } + +.cm-s-nord span.cm-comment { color: #4c566a; } +.cm-s-nord span.cm-atom { color: #b48ead; } +.cm-s-nord span.cm-number { color: #b48ead; } + +.cm-s-nord span.cm-comment.cm-attribute { color: #97b757; } +.cm-s-nord span.cm-comment.cm-def { color: #bc9262; } +.cm-s-nord span.cm-comment.cm-tag { color: #bc6283; } +.cm-s-nord span.cm-comment.cm-type { color: #5998a6; } + +.cm-s-nord span.cm-property, .cm-s-nord span.cm-attribute { color: #8FBCBB; } +.cm-s-nord span.cm-keyword { color: #81A1C1; } +.cm-s-nord span.cm-builtin { color: #81A1C1; } +.cm-s-nord span.cm-string { color: #A3BE8C; } + +.cm-s-nord span.cm-variable { color: #d8dee9; } +.cm-s-nord span.cm-variable-2 { color: #d8dee9; } +.cm-s-nord span.cm-variable-3, .cm-s-nord span.cm-type { color: #d8dee9; } +.cm-s-nord span.cm-def { color: #8FBCBB; } +.cm-s-nord span.cm-bracket { color: #81A1C1; } +.cm-s-nord span.cm-tag { color: #bf616a; } +.cm-s-nord span.cm-header { color: #b48ead; } +.cm-s-nord span.cm-link { color: #b48ead; } +.cm-s-nord span.cm-error { background: #bf616a; color: #f8f8f0; } + +.cm-s-nord .CodeMirror-activeline-background { background: #3b4252; } +.cm-s-nord .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/oceanic-next.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/oceanic-next.css new file mode 100644 index 0000000000..f3d0d08acb --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/oceanic-next.css @@ -0,0 +1,46 @@ +/* + + Name: oceanic-next + Author: Filype Pereira (https://github.com/fpereira1) + + Original oceanic-next color scheme by Dmitri Voronianski (https://github.com/voronianski/oceanic-next-color-scheme) + +*/ + +.cm-s-oceanic-next.CodeMirror { background: #304148; color: #f8f8f2; } +.cm-s-oceanic-next div.CodeMirror-selected { background: rgba(101, 115, 126, 0.33); } +.cm-s-oceanic-next .CodeMirror-line::selection, .cm-s-oceanic-next .CodeMirror-line > span::selection, .cm-s-oceanic-next .CodeMirror-line > span > span::selection { background: rgba(101, 115, 126, 0.33); } +.cm-s-oceanic-next .CodeMirror-line::-moz-selection, .cm-s-oceanic-next .CodeMirror-line > span::-moz-selection, .cm-s-oceanic-next .CodeMirror-line > span > span::-moz-selection { background: rgba(101, 115, 126, 0.33); } +.cm-s-oceanic-next .CodeMirror-gutters { background: #304148; border-right: 10px; } +.cm-s-oceanic-next .CodeMirror-guttermarker { color: white; } +.cm-s-oceanic-next .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-oceanic-next .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-oceanic-next .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } +.cm-s-oceanic-next.cm-fat-cursor .CodeMirror-cursor { background-color: #a2a8a175 !important; } +.cm-s-oceanic-next .cm-animate-fat-cursor { background-color: #a2a8a175 !important; } + +.cm-s-oceanic-next span.cm-comment { color: #65737E; } +.cm-s-oceanic-next span.cm-atom { color: #C594C5; } +.cm-s-oceanic-next span.cm-number { color: #F99157; } + +.cm-s-oceanic-next span.cm-property { color: #99C794; } +.cm-s-oceanic-next span.cm-attribute, +.cm-s-oceanic-next span.cm-keyword { color: #C594C5; } +.cm-s-oceanic-next span.cm-builtin { color: #66d9ef; } +.cm-s-oceanic-next span.cm-string { color: #99C794; } + +.cm-s-oceanic-next span.cm-variable, +.cm-s-oceanic-next span.cm-variable-2, +.cm-s-oceanic-next span.cm-variable-3 { color: #f8f8f2; } +.cm-s-oceanic-next span.cm-def { color: #6699CC; } +.cm-s-oceanic-next span.cm-bracket { color: #5FB3B3; } +.cm-s-oceanic-next span.cm-tag { color: #C594C5; } +.cm-s-oceanic-next span.cm-header { color: #C594C5; } +.cm-s-oceanic-next span.cm-link { color: #C594C5; } +.cm-s-oceanic-next span.cm-error { background: #C594C5; color: #f8f8f0; } + +.cm-s-oceanic-next .CodeMirror-activeline-background { background: rgba(101, 115, 126, 0.33); } +.cm-s-oceanic-next .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/panda-syntax.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/panda-syntax.css new file mode 100644 index 0000000000..de14e91124 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/panda-syntax.css @@ -0,0 +1,85 @@ +/* + Name: Panda Syntax + Author: Siamak Mokhtari (http://github.com/siamak/) + CodeMirror template by Siamak Mokhtari (https://github.com/siamak/atom-panda-syntax) +*/ +.cm-s-panda-syntax { + background: #292A2B; + color: #E6E6E6; + line-height: 1.5; + font-family: 'Operator Mono', 'Source Code Pro', Menlo, Monaco, Consolas, Courier New, monospace; +} +.cm-s-panda-syntax .CodeMirror-cursor { border-color: #ff2c6d; } +.cm-s-panda-syntax .CodeMirror-activeline-background { + background: rgba(99, 123, 156, 0.1); +} +.cm-s-panda-syntax .CodeMirror-selected { + background: #FFF; +} +.cm-s-panda-syntax .cm-comment { + font-style: italic; + color: #676B79; +} +.cm-s-panda-syntax .cm-operator { + color: #f3f3f3; +} +.cm-s-panda-syntax .cm-string { + color: #19F9D8; +} +.cm-s-panda-syntax .cm-string-2 { + color: #FFB86C; +} + +.cm-s-panda-syntax .cm-tag { + color: #ff2c6d; +} +.cm-s-panda-syntax .cm-meta { + color: #b084eb; +} + +.cm-s-panda-syntax .cm-number { + color: #FFB86C; +} +.cm-s-panda-syntax .cm-atom { + color: #ff2c6d; +} +.cm-s-panda-syntax .cm-keyword { + color: #FF75B5; +} +.cm-s-panda-syntax .cm-variable { + color: #ffb86c; +} +.cm-s-panda-syntax .cm-variable-2 { + color: #ff9ac1; +} +.cm-s-panda-syntax .cm-variable-3, .cm-s-panda-syntax .cm-type { + color: #ff9ac1; +} + +.cm-s-panda-syntax .cm-def { + color: #e6e6e6; +} +.cm-s-panda-syntax .cm-property { + color: #f3f3f3; +} +.cm-s-panda-syntax .cm-unit { + color: #ffb86c; +} + +.cm-s-panda-syntax .cm-attribute { + color: #ffb86c; +} + +.cm-s-panda-syntax .CodeMirror-matchingbracket { + border-bottom: 1px dotted #19F9D8; + padding-bottom: 2px; + color: #e6e6e6; +} +.cm-s-panda-syntax .CodeMirror-gutters { + background: #292a2b; + border-right-color: rgba(255, 255, 255, 0.1); +} +.cm-s-panda-syntax .CodeMirror-linenumber { + color: #e6e6e6; + opacity: 0.6; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/paraiso-dark.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/paraiso-dark.css new file mode 100644 index 0000000000..aa9d207e6d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/paraiso-dark.css @@ -0,0 +1,38 @@ +/* + + Name: Paraíso (Dark) + Author: Jan T. Sott + + Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) + +*/ + +.cm-s-paraiso-dark.CodeMirror { background: #2f1e2e; color: #b9b6b0; } +.cm-s-paraiso-dark div.CodeMirror-selected { background: #41323f; } +.cm-s-paraiso-dark .CodeMirror-line::selection, .cm-s-paraiso-dark .CodeMirror-line > span::selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::selection { background: rgba(65, 50, 63, .99); } +.cm-s-paraiso-dark .CodeMirror-line::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(65, 50, 63, .99); } +.cm-s-paraiso-dark .CodeMirror-gutters { background: #2f1e2e; border-right: 0px; } +.cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; } +.cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; } +.cm-s-paraiso-dark .CodeMirror-linenumber { color: #776e71; } +.cm-s-paraiso-dark .CodeMirror-cursor { border-left: 1px solid #8d8687; } + +.cm-s-paraiso-dark span.cm-comment { color: #e96ba8; } +.cm-s-paraiso-dark span.cm-atom { color: #815ba4; } +.cm-s-paraiso-dark span.cm-number { color: #815ba4; } + +.cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute { color: #48b685; } +.cm-s-paraiso-dark span.cm-keyword { color: #ef6155; } +.cm-s-paraiso-dark span.cm-string { color: #fec418; } + +.cm-s-paraiso-dark span.cm-variable { color: #48b685; } +.cm-s-paraiso-dark span.cm-variable-2 { color: #06b6ef; } +.cm-s-paraiso-dark span.cm-def { color: #f99b15; } +.cm-s-paraiso-dark span.cm-bracket { color: #b9b6b0; } +.cm-s-paraiso-dark span.cm-tag { color: #ef6155; } +.cm-s-paraiso-dark span.cm-link { color: #815ba4; } +.cm-s-paraiso-dark span.cm-error { background: #ef6155; color: #8d8687; } + +.cm-s-paraiso-dark .CodeMirror-activeline-background { background: #4D344A; } +.cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/paraiso-light.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/paraiso-light.css new file mode 100644 index 0000000000..ae0c755f89 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/paraiso-light.css @@ -0,0 +1,38 @@ +/* + + Name: Paraíso (Light) + Author: Jan T. Sott + + Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) + +*/ + +.cm-s-paraiso-light.CodeMirror { background: #e7e9db; color: #41323f; } +.cm-s-paraiso-light div.CodeMirror-selected { background: #b9b6b0; } +.cm-s-paraiso-light .CodeMirror-line::selection, .cm-s-paraiso-light .CodeMirror-line > span::selection, .cm-s-paraiso-light .CodeMirror-line > span > span::selection { background: #b9b6b0; } +.cm-s-paraiso-light .CodeMirror-line::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span > span::-moz-selection { background: #b9b6b0; } +.cm-s-paraiso-light .CodeMirror-gutters { background: #e7e9db; border-right: 0px; } +.cm-s-paraiso-light .CodeMirror-guttermarker { color: black; } +.cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; } +.cm-s-paraiso-light .CodeMirror-linenumber { color: #8d8687; } +.cm-s-paraiso-light .CodeMirror-cursor { border-left: 1px solid #776e71; } + +.cm-s-paraiso-light span.cm-comment { color: #e96ba8; } +.cm-s-paraiso-light span.cm-atom { color: #815ba4; } +.cm-s-paraiso-light span.cm-number { color: #815ba4; } + +.cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute { color: #48b685; } +.cm-s-paraiso-light span.cm-keyword { color: #ef6155; } +.cm-s-paraiso-light span.cm-string { color: #fec418; } + +.cm-s-paraiso-light span.cm-variable { color: #48b685; } +.cm-s-paraiso-light span.cm-variable-2 { color: #06b6ef; } +.cm-s-paraiso-light span.cm-def { color: #f99b15; } +.cm-s-paraiso-light span.cm-bracket { color: #41323f; } +.cm-s-paraiso-light span.cm-tag { color: #ef6155; } +.cm-s-paraiso-light span.cm-link { color: #815ba4; } +.cm-s-paraiso-light span.cm-error { background: #ef6155; color: #776e71; } + +.cm-s-paraiso-light .CodeMirror-activeline-background { background: #CFD1C4; } +.cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/pastel-on-dark.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/pastel-on-dark.css new file mode 100644 index 0000000000..60435dd15e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/pastel-on-dark.css @@ -0,0 +1,52 @@ +/** + * Pastel On Dark theme ported from ACE editor + * @license MIT + * @copyright AtomicPages LLC 2014 + * @author Dennis Thompson, AtomicPages LLC + * @version 1.1 + * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme + */ + +.cm-s-pastel-on-dark.CodeMirror { + background: #2c2827; + color: #8F938F; + line-height: 1.5; +} +.cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2); } +.cm-s-pastel-on-dark .CodeMirror-line::selection, .cm-s-pastel-on-dark .CodeMirror-line > span::selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::selection { background: rgba(221,240,255,0.2); } +.cm-s-pastel-on-dark .CodeMirror-line::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(221,240,255,0.2); } + +.cm-s-pastel-on-dark .CodeMirror-gutters { + background: #34302f; + border-right: 0px; + padding: 0 3px; +} +.cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; } +.cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; } +.cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; } +.cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7; } +.cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; } +.cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; } +.cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; } +.cm-s-pastel-on-dark span.cm-property { color: #8F938F; } +.cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; } +.cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; } +.cm-s-pastel-on-dark span.cm-string { color: #66A968; } +.cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; } +.cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; } +.cm-s-pastel-on-dark span.cm-variable-3, .cm-s-pastel-on-dark span.cm-type { color: #DE8E30; } +.cm-s-pastel-on-dark span.cm-def { color: #757aD8; } +.cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; } +.cm-s-pastel-on-dark span.cm-tag { color: #C1C144; } +.cm-s-pastel-on-dark span.cm-link { color: #ae81ff; } +.cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; } +.cm-s-pastel-on-dark span.cm-error { + background: #757aD8; + color: #f8f8f0; +} +.cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031); } +.cm-s-pastel-on-dark .CodeMirror-matchingbracket { + border: 1px solid rgba(255,255,255,0.25); + color: #8F938F !important; + margin: -1px -1px 0 -1px; +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/railscasts.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/railscasts.css new file mode 100644 index 0000000000..aeff0449d5 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/railscasts.css @@ -0,0 +1,34 @@ +/* + + Name: Railscasts + Author: Ryan Bates (http://railscasts.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-railscasts.CodeMirror {background: #2b2b2b; color: #f4f1ed;} +.cm-s-railscasts div.CodeMirror-selected {background: #272935 !important;} +.cm-s-railscasts .CodeMirror-gutters {background: #2b2b2b; border-right: 0px;} +.cm-s-railscasts .CodeMirror-linenumber {color: #5a647e;} +.cm-s-railscasts .CodeMirror-cursor {border-left: 1px solid #d4cfc9 !important;} + +.cm-s-railscasts span.cm-comment {color: #bc9458;} +.cm-s-railscasts span.cm-atom {color: #b6b3eb;} +.cm-s-railscasts span.cm-number {color: #b6b3eb;} + +.cm-s-railscasts span.cm-property, .cm-s-railscasts span.cm-attribute {color: #a5c261;} +.cm-s-railscasts span.cm-keyword {color: #da4939;} +.cm-s-railscasts span.cm-string {color: #ffc66d;} + +.cm-s-railscasts span.cm-variable {color: #a5c261;} +.cm-s-railscasts span.cm-variable-2 {color: #6d9cbe;} +.cm-s-railscasts span.cm-def {color: #cc7833;} +.cm-s-railscasts span.cm-error {background: #da4939; color: #d4cfc9;} +.cm-s-railscasts span.cm-bracket {color: #f4f1ed;} +.cm-s-railscasts span.cm-tag {color: #da4939;} +.cm-s-railscasts span.cm-link {color: #b6b3eb;} + +.cm-s-railscasts .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} +.cm-s-railscasts .CodeMirror-activeline-background { background: #303040; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/rubyblue.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/rubyblue.css new file mode 100644 index 0000000000..1f181b06ec --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/rubyblue.css @@ -0,0 +1,25 @@ +.cm-s-rubyblue.CodeMirror { background: #112435; color: white; } +.cm-s-rubyblue div.CodeMirror-selected { background: #38566F; } +.cm-s-rubyblue .CodeMirror-line::selection, .cm-s-rubyblue .CodeMirror-line > span::selection, .cm-s-rubyblue .CodeMirror-line > span > span::selection { background: rgba(56, 86, 111, 0.99); } +.cm-s-rubyblue .CodeMirror-line::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 86, 111, 0.99); } +.cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } +.cm-s-rubyblue .CodeMirror-guttermarker { color: white; } +.cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; } +.cm-s-rubyblue .CodeMirror-linenumber { color: white; } +.cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; } +.cm-s-rubyblue span.cm-atom { color: #F4C20B; } +.cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; } +.cm-s-rubyblue span.cm-keyword { color: #F0F; } +.cm-s-rubyblue span.cm-string { color: #F08047; } +.cm-s-rubyblue span.cm-meta { color: #F0F; } +.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; } +.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def, .cm-s-rubyblue span.cm-type { color: white; } +.cm-s-rubyblue span.cm-bracket { color: #F0F; } +.cm-s-rubyblue span.cm-link { color: #F4C20B; } +.cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; } +.cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; } +.cm-s-rubyblue span.cm-error { color: #AF2018; } + +.cm-s-rubyblue .CodeMirror-activeline-background { background: #173047; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/seti.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/seti.css new file mode 100644 index 0000000000..814f76f7de --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/seti.css @@ -0,0 +1,44 @@ +/* + + Name: seti + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original seti color scheme by Jesse Weed (https://github.com/jesseweed/seti-syntax) + +*/ + + +.cm-s-seti.CodeMirror { + background-color: #151718 !important; + color: #CFD2D1 !important; + border: none; +} +.cm-s-seti .CodeMirror-gutters { + color: #404b53; + background-color: #0E1112; + border: none; +} +.cm-s-seti .CodeMirror-cursor { border-left: solid thin #f8f8f0; } +.cm-s-seti .CodeMirror-linenumber { color: #6D8A88; } +.cm-s-seti.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } +.cm-s-seti .CodeMirror-line::selection, .cm-s-seti .CodeMirror-line > span::selection, .cm-s-seti .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-seti .CodeMirror-line::-moz-selection, .cm-s-seti .CodeMirror-line > span::-moz-selection, .cm-s-seti .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); } +.cm-s-seti span.cm-comment { color: #41535b; } +.cm-s-seti span.cm-string, .cm-s-seti span.cm-string-2 { color: #55b5db; } +.cm-s-seti span.cm-number { color: #cd3f45; } +.cm-s-seti span.cm-variable { color: #55b5db; } +.cm-s-seti span.cm-variable-2 { color: #a074c4; } +.cm-s-seti span.cm-def { color: #55b5db; } +.cm-s-seti span.cm-keyword { color: #ff79c6; } +.cm-s-seti span.cm-operator { color: #9fca56; } +.cm-s-seti span.cm-keyword { color: #e6cd69; } +.cm-s-seti span.cm-atom { color: #cd3f45; } +.cm-s-seti span.cm-meta { color: #55b5db; } +.cm-s-seti span.cm-tag { color: #55b5db; } +.cm-s-seti span.cm-attribute { color: #9fca56; } +.cm-s-seti span.cm-qualifier { color: #9fca56; } +.cm-s-seti span.cm-property { color: #a074c4; } +.cm-s-seti span.cm-variable-3, .cm-s-seti span.cm-type { color: #9fca56; } +.cm-s-seti span.cm-builtin { color: #9fca56; } +.cm-s-seti .CodeMirror-activeline-background { background: #101213; } +.cm-s-seti .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/shadowfox.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/shadowfox.css new file mode 100644 index 0000000000..32d59b139a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/shadowfox.css @@ -0,0 +1,52 @@ +/* + + Name: shadowfox + Author: overdodactyl (http://github.com/overdodactyl) + + Original shadowfox color scheme by Firefox + +*/ + +.cm-s-shadowfox.CodeMirror { background: #2a2a2e; color: #b1b1b3; } +.cm-s-shadowfox div.CodeMirror-selected { background: #353B48; } +.cm-s-shadowfox .CodeMirror-line::selection, .cm-s-shadowfox .CodeMirror-line > span::selection, .cm-s-shadowfox .CodeMirror-line > span > span::selection { background: #353B48; } +.cm-s-shadowfox .CodeMirror-line::-moz-selection, .cm-s-shadowfox .CodeMirror-line > span::-moz-selection, .cm-s-shadowfox .CodeMirror-line > span > span::-moz-selection { background: #353B48; } +.cm-s-shadowfox .CodeMirror-gutters { background: #0c0c0d ; border-right: 1px solid #0c0c0d; } +.cm-s-shadowfox .CodeMirror-guttermarker { color: #555; } +.cm-s-shadowfox .CodeMirror-linenumber { color: #939393; } +.cm-s-shadowfox .CodeMirror-cursor { border-left: 1px solid #fff; } + +.cm-s-shadowfox span.cm-comment { color: #939393; } +.cm-s-shadowfox span.cm-atom { color: #FF7DE9; } +.cm-s-shadowfox span.cm-quote { color: #FF7DE9; } +.cm-s-shadowfox span.cm-builtin { color: #FF7DE9; } +.cm-s-shadowfox span.cm-attribute { color: #FF7DE9; } +.cm-s-shadowfox span.cm-keyword { color: #FF7DE9; } +.cm-s-shadowfox span.cm-error { color: #FF7DE9; } + +.cm-s-shadowfox span.cm-number { color: #6B89FF; } +.cm-s-shadowfox span.cm-string { color: #6B89FF; } +.cm-s-shadowfox span.cm-string-2 { color: #6B89FF; } + +.cm-s-shadowfox span.cm-meta { color: #939393; } +.cm-s-shadowfox span.cm-hr { color: #939393; } + +.cm-s-shadowfox span.cm-header { color: #75BFFF; } +.cm-s-shadowfox span.cm-qualifier { color: #75BFFF; } +.cm-s-shadowfox span.cm-variable-2 { color: #75BFFF; } + +.cm-s-shadowfox span.cm-property { color: #86DE74; } + +.cm-s-shadowfox span.cm-def { color: #75BFFF; } +.cm-s-shadowfox span.cm-bracket { color: #75BFFF; } +.cm-s-shadowfox span.cm-tag { color: #75BFFF; } +.cm-s-shadowfox span.cm-link:visited { color: #75BFFF; } + +.cm-s-shadowfox span.cm-variable { color: #B98EFF; } +.cm-s-shadowfox span.cm-variable-3 { color: #d7d7db; } +.cm-s-shadowfox span.cm-link { color: #737373; } +.cm-s-shadowfox span.cm-operator { color: #b1b1b3; } +.cm-s-shadowfox span.cm-special { color: #d7d7db; } + +.cm-s-shadowfox .CodeMirror-activeline-background { background: rgba(185, 215, 253, .15) } +.cm-s-shadowfox .CodeMirror-matchingbracket { outline: solid 1px rgba(255, 255, 255, .25); color: white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/solarized.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/solarized.css new file mode 100644 index 0000000000..e978fec9b0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/solarized.css @@ -0,0 +1,165 @@ +/* +Solarized theme for code-mirror +http://ethanschoonover.com/solarized +*/ + +/* +Solarized color palette +http://ethanschoonover.com/solarized/img/solarized-palette.png +*/ + +.solarized.base03 { color: #002b36; } +.solarized.base02 { color: #073642; } +.solarized.base01 { color: #586e75; } +.solarized.base00 { color: #657b83; } +.solarized.base0 { color: #839496; } +.solarized.base1 { color: #93a1a1; } +.solarized.base2 { color: #eee8d5; } +.solarized.base3 { color: #fdf6e3; } +.solarized.solar-yellow { color: #b58900; } +.solarized.solar-orange { color: #cb4b16; } +.solarized.solar-red { color: #dc322f; } +.solarized.solar-magenta { color: #d33682; } +.solarized.solar-violet { color: #6c71c4; } +.solarized.solar-blue { color: #268bd2; } +.solarized.solar-cyan { color: #2aa198; } +.solarized.solar-green { color: #859900; } + +/* Color scheme for code-mirror */ + +.cm-s-solarized { + line-height: 1.45em; + color-profile: sRGB; + rendering-intent: auto; +} +.cm-s-solarized.cm-s-dark { + color: #839496; + background-color: #002b36; +} +.cm-s-solarized.cm-s-light { + background-color: #fdf6e3; + color: #657b83; +} + +.cm-s-solarized .CodeMirror-widget { + text-shadow: none; +} + +.cm-s-solarized .cm-header { color: #586e75; } +.cm-s-solarized .cm-quote { color: #93a1a1; } + +.cm-s-solarized .cm-keyword { color: #cb4b16; } +.cm-s-solarized .cm-atom { color: #d33682; } +.cm-s-solarized .cm-number { color: #d33682; } +.cm-s-solarized .cm-def { color: #2aa198; } + +.cm-s-solarized .cm-variable { color: #839496; } +.cm-s-solarized .cm-variable-2 { color: #b58900; } +.cm-s-solarized .cm-variable-3, .cm-s-solarized .cm-type { color: #6c71c4; } + +.cm-s-solarized .cm-property { color: #2aa198; } +.cm-s-solarized .cm-operator { color: #6c71c4; } + +.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; } + +.cm-s-solarized .cm-string { color: #859900; } +.cm-s-solarized .cm-string-2 { color: #b58900; } + +.cm-s-solarized .cm-meta { color: #859900; } +.cm-s-solarized .cm-qualifier { color: #b58900; } +.cm-s-solarized .cm-builtin { color: #d33682; } +.cm-s-solarized .cm-bracket { color: #cb4b16; } +.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; } +.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; } +.cm-s-solarized .cm-tag { color: #93a1a1; } +.cm-s-solarized .cm-attribute { color: #2aa198; } +.cm-s-solarized .cm-hr { + color: transparent; + border-top: 1px solid #586e75; + display: block; +} +.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; } +.cm-s-solarized .cm-special { color: #6c71c4; } +.cm-s-solarized .cm-em { + color: #999; + text-decoration: underline; + text-decoration-style: dotted; +} +.cm-s-solarized .cm-error, +.cm-s-solarized .cm-invalidchar { + color: #586e75; + border-bottom: 1px dotted #dc322f; +} + +.cm-s-solarized.cm-s-dark div.CodeMirror-selected { background: #073642; } +.cm-s-solarized.cm-s-dark.CodeMirror ::selection { background: rgba(7, 54, 66, 0.99); } +.cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection, .cm-s-dark .CodeMirror-line > span::-moz-selection, .cm-s-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(7, 54, 66, 0.99); } + +.cm-s-solarized.cm-s-light div.CodeMirror-selected { background: #eee8d5; } +.cm-s-solarized.cm-s-light .CodeMirror-line::selection, .cm-s-light .CodeMirror-line > span::selection, .cm-s-light .CodeMirror-line > span > span::selection { background: #eee8d5; } +.cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection, .cm-s-light .CodeMirror-line > span::-moz-selection, .cm-s-light .CodeMirror-line > span > span::-moz-selection { background: #eee8d5; } + +/* Editor styling */ + + + +/* Little shadow on the view-port of the buffer view */ +.cm-s-solarized.CodeMirror { + -moz-box-shadow: inset 7px 0 12px -6px #000; + -webkit-box-shadow: inset 7px 0 12px -6px #000; + box-shadow: inset 7px 0 12px -6px #000; +} + +/* Remove gutter border */ +.cm-s-solarized .CodeMirror-gutters { + border-right: 0; +} + +/* Gutter colors and line number styling based of color scheme (dark / light) */ + +/* Dark */ +.cm-s-solarized.cm-s-dark .CodeMirror-gutters { + background-color: #073642; +} + +.cm-s-solarized.cm-s-dark .CodeMirror-linenumber { + color: #586e75; +} + +/* Light */ +.cm-s-solarized.cm-s-light .CodeMirror-gutters { + background-color: #eee8d5; +} + +.cm-s-solarized.cm-s-light .CodeMirror-linenumber { + color: #839496; +} + +/* Common */ +.cm-s-solarized .CodeMirror-linenumber { + padding: 0 5px; +} +.cm-s-solarized .CodeMirror-guttermarker-subtle { color: #586e75; } +.cm-s-solarized.cm-s-dark .CodeMirror-guttermarker { color: #ddd; } +.cm-s-solarized.cm-s-light .CodeMirror-guttermarker { color: #cb4b16; } + +.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text { + color: #586e75; +} + +/* Cursor */ +.cm-s-solarized .CodeMirror-cursor { border-left: 1px solid #819090; } + +/* Fat cursor */ +.cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor { background: #77ee77; } +.cm-s-solarized.cm-s-light .cm-animate-fat-cursor { background-color: #77ee77; } +.cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor { background: #586e75; } +.cm-s-solarized.cm-s-dark .cm-animate-fat-cursor { background-color: #586e75; } + +/* Active line */ +.cm-s-solarized.cm-s-dark .CodeMirror-activeline-background { + background: rgba(255, 255, 255, 0.06); +} +.cm-s-solarized.cm-s-light .CodeMirror-activeline-background { + background: rgba(0, 0, 0, 0.06); +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ssms.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ssms.css new file mode 100644 index 0000000000..9494c14c20 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ssms.css @@ -0,0 +1,16 @@ +.cm-s-ssms span.cm-keyword { color: blue; } +.cm-s-ssms span.cm-comment { color: darkgreen; } +.cm-s-ssms span.cm-string { color: red; } +.cm-s-ssms span.cm-def { color: black; } +.cm-s-ssms span.cm-variable { color: black; } +.cm-s-ssms span.cm-variable-2 { color: black; } +.cm-s-ssms span.cm-atom { color: darkgray; } +.cm-s-ssms .CodeMirror-linenumber { color: teal; } +.cm-s-ssms .CodeMirror-activeline-background { background: #ffffff; } +.cm-s-ssms span.cm-string-2 { color: #FF00FF; } +.cm-s-ssms span.cm-operator, +.cm-s-ssms span.cm-bracket, +.cm-s-ssms span.cm-punctuation { color: darkgray; } +.cm-s-ssms .CodeMirror-gutters { border-right: 3px solid #ffee62; background-color: #ffffff; } +.cm-s-ssms div.CodeMirror-selected { background: #ADD6FF; } + diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/the-matrix.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/the-matrix.css new file mode 100644 index 0000000000..c4c93c11ea --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/the-matrix.css @@ -0,0 +1,30 @@ +.cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; } +.cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D; } +.cm-s-the-matrix .CodeMirror-line::selection, .cm-s-the-matrix .CodeMirror-line > span::selection, .cm-s-the-matrix .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-the-matrix .CodeMirror-line::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; } +.cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; } +.cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; } +.cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; } +.cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00; } + +.cm-s-the-matrix span.cm-keyword { color: #008803; font-weight: bold; } +.cm-s-the-matrix span.cm-atom { color: #3FF; } +.cm-s-the-matrix span.cm-number { color: #FFB94F; } +.cm-s-the-matrix span.cm-def { color: #99C; } +.cm-s-the-matrix span.cm-variable { color: #F6C; } +.cm-s-the-matrix span.cm-variable-2 { color: #C6F; } +.cm-s-the-matrix span.cm-variable-3, .cm-s-the-matrix span.cm-type { color: #96F; } +.cm-s-the-matrix span.cm-property { color: #62FFA0; } +.cm-s-the-matrix span.cm-operator { color: #999; } +.cm-s-the-matrix span.cm-comment { color: #CCCCCC; } +.cm-s-the-matrix span.cm-string { color: #39C; } +.cm-s-the-matrix span.cm-meta { color: #C9F; } +.cm-s-the-matrix span.cm-qualifier { color: #FFF700; } +.cm-s-the-matrix span.cm-builtin { color: #30a; } +.cm-s-the-matrix span.cm-bracket { color: #cc7; } +.cm-s-the-matrix span.cm-tag { color: #FFBD40; } +.cm-s-the-matrix span.cm-attribute { color: #FFF700; } +.cm-s-the-matrix span.cm-error { color: #FF0000; } + +.cm-s-the-matrix .CodeMirror-activeline-background { background: #040; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/tomorrow-night-bright.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/tomorrow-night-bright.css new file mode 100644 index 0000000000..b6dd4a9278 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/tomorrow-night-bright.css @@ -0,0 +1,35 @@ +/* + + Name: Tomorrow Night - Bright + Author: Chris Kempson + + Port done by Gerard Braad + +*/ + +.cm-s-tomorrow-night-bright.CodeMirror { background: #000000; color: #eaeaea; } +.cm-s-tomorrow-night-bright div.CodeMirror-selected { background: #424242; } +.cm-s-tomorrow-night-bright .CodeMirror-gutters { background: #000000; border-right: 0px; } +.cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; } +.cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-tomorrow-night-bright .CodeMirror-linenumber { color: #424242; } +.cm-s-tomorrow-night-bright .CodeMirror-cursor { border-left: 1px solid #6A6A6A; } + +.cm-s-tomorrow-night-bright span.cm-comment { color: #d27b53; } +.cm-s-tomorrow-night-bright span.cm-atom { color: #a16a94; } +.cm-s-tomorrow-night-bright span.cm-number { color: #a16a94; } + +.cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute { color: #99cc99; } +.cm-s-tomorrow-night-bright span.cm-keyword { color: #d54e53; } +.cm-s-tomorrow-night-bright span.cm-string { color: #e7c547; } + +.cm-s-tomorrow-night-bright span.cm-variable { color: #b9ca4a; } +.cm-s-tomorrow-night-bright span.cm-variable-2 { color: #7aa6da; } +.cm-s-tomorrow-night-bright span.cm-def { color: #e78c45; } +.cm-s-tomorrow-night-bright span.cm-bracket { color: #eaeaea; } +.cm-s-tomorrow-night-bright span.cm-tag { color: #d54e53; } +.cm-s-tomorrow-night-bright span.cm-link { color: #a16a94; } +.cm-s-tomorrow-night-bright span.cm-error { background: #d54e53; color: #6A6A6A; } + +.cm-s-tomorrow-night-bright .CodeMirror-activeline-background { background: #2a2a2a; } +.cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/tomorrow-night-eighties.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/tomorrow-night-eighties.css new file mode 100644 index 0000000000..2a9debc327 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/tomorrow-night-eighties.css @@ -0,0 +1,38 @@ +/* + + Name: Tomorrow Night - Eighties + Author: Chris Kempson + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-tomorrow-night-eighties.CodeMirror { background: #000000; color: #CCCCCC; } +.cm-s-tomorrow-night-eighties div.CodeMirror-selected { background: #2D2D2D; } +.cm-s-tomorrow-night-eighties .CodeMirror-line::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-tomorrow-night-eighties .CodeMirror-line::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); } +.cm-s-tomorrow-night-eighties .CodeMirror-gutters { background: #000000; border-right: 0px; } +.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; } +.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-tomorrow-night-eighties .CodeMirror-linenumber { color: #515151; } +.cm-s-tomorrow-night-eighties .CodeMirror-cursor { border-left: 1px solid #6A6A6A; } + +.cm-s-tomorrow-night-eighties span.cm-comment { color: #d27b53; } +.cm-s-tomorrow-night-eighties span.cm-atom { color: #a16a94; } +.cm-s-tomorrow-night-eighties span.cm-number { color: #a16a94; } + +.cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute { color: #99cc99; } +.cm-s-tomorrow-night-eighties span.cm-keyword { color: #f2777a; } +.cm-s-tomorrow-night-eighties span.cm-string { color: #ffcc66; } + +.cm-s-tomorrow-night-eighties span.cm-variable { color: #99cc99; } +.cm-s-tomorrow-night-eighties span.cm-variable-2 { color: #6699cc; } +.cm-s-tomorrow-night-eighties span.cm-def { color: #f99157; } +.cm-s-tomorrow-night-eighties span.cm-bracket { color: #CCCCCC; } +.cm-s-tomorrow-night-eighties span.cm-tag { color: #f2777a; } +.cm-s-tomorrow-night-eighties span.cm-link { color: #a16a94; } +.cm-s-tomorrow-night-eighties span.cm-error { background: #f2777a; color: #6A6A6A; } + +.cm-s-tomorrow-night-eighties .CodeMirror-activeline-background { background: #343600; } +.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ttcn.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ttcn.css new file mode 100644 index 0000000000..0b14ac35d6 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/ttcn.css @@ -0,0 +1,64 @@ +.cm-s-ttcn .cm-quote { color: #090; } +.cm-s-ttcn .cm-negative { color: #d44; } +.cm-s-ttcn .cm-positive { color: #292; } +.cm-s-ttcn .cm-header, .cm-strong { font-weight: bold; } +.cm-s-ttcn .cm-em { font-style: italic; } +.cm-s-ttcn .cm-link { text-decoration: underline; } +.cm-s-ttcn .cm-strikethrough { text-decoration: line-through; } +.cm-s-ttcn .cm-header { color: #00f; font-weight: bold; } + +.cm-s-ttcn .cm-atom { color: #219; } +.cm-s-ttcn .cm-attribute { color: #00c; } +.cm-s-ttcn .cm-bracket { color: #997; } +.cm-s-ttcn .cm-comment { color: #333333; } +.cm-s-ttcn .cm-def { color: #00f; } +.cm-s-ttcn .cm-em { font-style: italic; } +.cm-s-ttcn .cm-error { color: #f00; } +.cm-s-ttcn .cm-hr { color: #999; } +.cm-s-ttcn .cm-invalidchar { color: #f00; } +.cm-s-ttcn .cm-keyword { font-weight:bold; } +.cm-s-ttcn .cm-link { color: #00c; text-decoration: underline; } +.cm-s-ttcn .cm-meta { color: #555; } +.cm-s-ttcn .cm-negative { color: #d44; } +.cm-s-ttcn .cm-positive { color: #292; } +.cm-s-ttcn .cm-qualifier { color: #555; } +.cm-s-ttcn .cm-strikethrough { text-decoration: line-through; } +.cm-s-ttcn .cm-string { color: #006400; } +.cm-s-ttcn .cm-string-2 { color: #f50; } +.cm-s-ttcn .cm-strong { font-weight: bold; } +.cm-s-ttcn .cm-tag { color: #170; } +.cm-s-ttcn .cm-variable { color: #8B2252; } +.cm-s-ttcn .cm-variable-2 { color: #05a; } +.cm-s-ttcn .cm-variable-3, .cm-s-ttcn .cm-type { color: #085; } + +.cm-s-ttcn .cm-invalidchar { color: #f00; } + +/* ASN */ +.cm-s-ttcn .cm-accessTypes, +.cm-s-ttcn .cm-compareTypes { color: #27408B; } +.cm-s-ttcn .cm-cmipVerbs { color: #8B2252; } +.cm-s-ttcn .cm-modifier { color:#D2691E; } +.cm-s-ttcn .cm-status { color:#8B4545; } +.cm-s-ttcn .cm-storage { color:#A020F0; } +.cm-s-ttcn .cm-tags { color:#006400; } + +/* CFG */ +.cm-s-ttcn .cm-externalCommands { color: #8B4545; font-weight:bold; } +.cm-s-ttcn .cm-fileNCtrlMaskOptions, +.cm-s-ttcn .cm-sectionTitle { color: #2E8B57; font-weight:bold; } + +/* TTCN */ +.cm-s-ttcn .cm-booleanConsts, +.cm-s-ttcn .cm-otherConsts, +.cm-s-ttcn .cm-verdictConsts { color: #006400; } +.cm-s-ttcn .cm-configOps, +.cm-s-ttcn .cm-functionOps, +.cm-s-ttcn .cm-portOps, +.cm-s-ttcn .cm-sutOps, +.cm-s-ttcn .cm-timerOps, +.cm-s-ttcn .cm-verdictOps { color: #0000FF; } +.cm-s-ttcn .cm-preprocessor, +.cm-s-ttcn .cm-templateMatch, +.cm-s-ttcn .cm-ttcn3Macros { color: #27408B; } +.cm-s-ttcn .cm-types { color: #A52A2A; font-weight:bold; } +.cm-s-ttcn .cm-visibilityModifiers { font-weight:bold; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/twilight.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/twilight.css new file mode 100644 index 0000000000..b2b1b2aa93 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/twilight.css @@ -0,0 +1,32 @@ +.cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/ +.cm-s-twilight div.CodeMirror-selected { background: #323232; } /**/ +.cm-s-twilight .CodeMirror-line::selection, .cm-s-twilight .CodeMirror-line > span::selection, .cm-s-twilight .CodeMirror-line > span > span::selection { background: rgba(50, 50, 50, 0.99); } +.cm-s-twilight .CodeMirror-line::-moz-selection, .cm-s-twilight .CodeMirror-line > span::-moz-selection, .cm-s-twilight .CodeMirror-line > span > span::-moz-selection { background: rgba(50, 50, 50, 0.99); } + +.cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; } +.cm-s-twilight .CodeMirror-guttermarker { color: white; } +.cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; } +.cm-s-twilight .CodeMirror-linenumber { color: #aaa; } +.cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-twilight .cm-keyword { color: #f9ee98; } /**/ +.cm-s-twilight .cm-atom { color: #FC0; } +.cm-s-twilight .cm-number { color: #ca7841; } /**/ +.cm-s-twilight .cm-def { color: #8DA6CE; } +.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/ +.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def, .cm-s-twilight span.cm-type { color: #607392; } /**/ +.cm-s-twilight .cm-operator { color: #cda869; } /**/ +.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/ +.cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/ +.cm-s-twilight .cm-string-2 { color:#bd6b18; } /*?*/ +.cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/ +.cm-s-twilight .cm-builtin { color: #cda869; } /*?*/ +.cm-s-twilight .cm-tag { color: #997643; } /**/ +.cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/ +.cm-s-twilight .cm-header { color: #FF6400; } +.cm-s-twilight .cm-hr { color: #AEAEAE; } +.cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/ +.cm-s-twilight .cm-error { border-bottom: 1px solid red; } + +.cm-s-twilight .CodeMirror-activeline-background { background: #27282E; } +.cm-s-twilight .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/vibrant-ink.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/vibrant-ink.css new file mode 100644 index 0000000000..6358ad3655 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/vibrant-ink.css @@ -0,0 +1,34 @@ +/* Taken from the popular Visual Studio Vibrant Ink Schema */ + +.cm-s-vibrant-ink.CodeMirror { background: black; color: white; } +.cm-s-vibrant-ink div.CodeMirror-selected { background: #35493c; } +.cm-s-vibrant-ink .CodeMirror-line::selection, .cm-s-vibrant-ink .CodeMirror-line > span::selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::selection { background: rgba(53, 73, 60, 0.99); } +.cm-s-vibrant-ink .CodeMirror-line::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::-moz-selection { background: rgba(53, 73, 60, 0.99); } + +.cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; } +.cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-vibrant-ink .cm-keyword { color: #CC7832; } +.cm-s-vibrant-ink .cm-atom { color: #FC0; } +.cm-s-vibrant-ink .cm-number { color: #FFEE98; } +.cm-s-vibrant-ink .cm-def { color: #8DA6CE; } +.cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D; } +.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def, .cm-s-vibrant span.cm-type { color: #FFC66D; } +.cm-s-vibrant-ink .cm-operator { color: #888; } +.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; } +.cm-s-vibrant-ink .cm-string { color: #A5C25C; } +.cm-s-vibrant-ink .cm-string-2 { color: red; } +.cm-s-vibrant-ink .cm-meta { color: #D8FA3C; } +.cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-tag { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; } +.cm-s-vibrant-ink .cm-header { color: #FF6400; } +.cm-s-vibrant-ink .cm-hr { color: #AEAEAE; } +.cm-s-vibrant-ink .cm-link { color: #5656F3; } +.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; } + +.cm-s-vibrant-ink .CodeMirror-activeline-background { background: #27282E; } +.cm-s-vibrant-ink .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/xq-dark.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/xq-dark.css new file mode 100644 index 0000000000..7da1a0f705 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/xq-dark.css @@ -0,0 +1,53 @@ +/* +Copyright (C) 2011 by MarkLogic Corporation +Author: Mike Brevoort + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +.cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; } +.cm-s-xq-dark div.CodeMirror-selected { background: #27007A; } +.cm-s-xq-dark .CodeMirror-line::selection, .cm-s-xq-dark .CodeMirror-line > span::selection, .cm-s-xq-dark .CodeMirror-line > span > span::selection { background: rgba(39, 0, 122, 0.99); } +.cm-s-xq-dark .CodeMirror-line::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(39, 0, 122, 0.99); } +.cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; } +.cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; } +.cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; } +.cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white; } + +.cm-s-xq-dark span.cm-keyword { color: #FFBD40; } +.cm-s-xq-dark span.cm-atom { color: #6C8CD5; } +.cm-s-xq-dark span.cm-number { color: #164; } +.cm-s-xq-dark span.cm-def { color: #FFF; text-decoration:underline; } +.cm-s-xq-dark span.cm-variable { color: #FFF; } +.cm-s-xq-dark span.cm-variable-2 { color: #EEE; } +.cm-s-xq-dark span.cm-variable-3, .cm-s-xq-dark span.cm-type { color: #DDD; } +.cm-s-xq-dark span.cm-property {} +.cm-s-xq-dark span.cm-operator {} +.cm-s-xq-dark span.cm-comment { color: gray; } +.cm-s-xq-dark span.cm-string { color: #9FEE00; } +.cm-s-xq-dark span.cm-meta { color: yellow; } +.cm-s-xq-dark span.cm-qualifier { color: #FFF700; } +.cm-s-xq-dark span.cm-builtin { color: #30a; } +.cm-s-xq-dark span.cm-bracket { color: #cc7; } +.cm-s-xq-dark span.cm-tag { color: #FFBD40; } +.cm-s-xq-dark span.cm-attribute { color: #FFF700; } +.cm-s-xq-dark span.cm-error { color: #f00; } + +.cm-s-xq-dark .CodeMirror-activeline-background { background: #27282E; } +.cm-s-xq-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/xq-light.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/xq-light.css new file mode 100644 index 0000000000..7b182ea997 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/xq-light.css @@ -0,0 +1,43 @@ +/* +Copyright (C) 2011 by MarkLogic Corporation +Author: Mike Brevoort + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +.cm-s-xq-light span.cm-keyword { line-height: 1em; font-weight: bold; color: #5A5CAD; } +.cm-s-xq-light span.cm-atom { color: #6C8CD5; } +.cm-s-xq-light span.cm-number { color: #164; } +.cm-s-xq-light span.cm-def { text-decoration:underline; } +.cm-s-xq-light span.cm-variable { color: black; } +.cm-s-xq-light span.cm-variable-2 { color:black; } +.cm-s-xq-light span.cm-variable-3, .cm-s-xq-light span.cm-type { color: black; } +.cm-s-xq-light span.cm-property {} +.cm-s-xq-light span.cm-operator {} +.cm-s-xq-light span.cm-comment { color: #0080FF; font-style: italic; } +.cm-s-xq-light span.cm-string { color: red; } +.cm-s-xq-light span.cm-meta { color: yellow; } +.cm-s-xq-light span.cm-qualifier { color: grey; } +.cm-s-xq-light span.cm-builtin { color: #7EA656; } +.cm-s-xq-light span.cm-bracket { color: #cc7; } +.cm-s-xq-light span.cm-tag { color: #3F7F7F; } +.cm-s-xq-light span.cm-attribute { color: #7F007F; } +.cm-s-xq-light span.cm-error { color: #f00; } + +.cm-s-xq-light .CodeMirror-activeline-background { background: #e8f2ff; } +.cm-s-xq-light .CodeMirror-matchingbracket { outline:1px solid grey;color:black !important;background:yellow; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/yeti.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/yeti.css new file mode 100644 index 0000000000..d085f72497 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/yeti.css @@ -0,0 +1,44 @@ +/* + + Name: yeti + Author: Michael Kaminsky (http://github.com/mkaminsky11) + + Original yeti color scheme by Jesse Weed (https://github.com/jesseweed/yeti-syntax) + +*/ + + +.cm-s-yeti.CodeMirror { + background-color: #ECEAE8 !important; + color: #d1c9c0 !important; + border: none; +} + +.cm-s-yeti .CodeMirror-gutters { + color: #adaba6; + background-color: #E5E1DB; + border: none; +} +.cm-s-yeti .CodeMirror-cursor { border-left: solid thin #d1c9c0; } +.cm-s-yeti .CodeMirror-linenumber { color: #adaba6; } +.cm-s-yeti.CodeMirror-focused div.CodeMirror-selected { background: #DCD8D2; } +.cm-s-yeti .CodeMirror-line::selection, .cm-s-yeti .CodeMirror-line > span::selection, .cm-s-yeti .CodeMirror-line > span > span::selection { background: #DCD8D2; } +.cm-s-yeti .CodeMirror-line::-moz-selection, .cm-s-yeti .CodeMirror-line > span::-moz-selection, .cm-s-yeti .CodeMirror-line > span > span::-moz-selection { background: #DCD8D2; } +.cm-s-yeti span.cm-comment { color: #d4c8be; } +.cm-s-yeti span.cm-string, .cm-s-yeti span.cm-string-2 { color: #96c0d8; } +.cm-s-yeti span.cm-number { color: #a074c4; } +.cm-s-yeti span.cm-variable { color: #55b5db; } +.cm-s-yeti span.cm-variable-2 { color: #a074c4; } +.cm-s-yeti span.cm-def { color: #55b5db; } +.cm-s-yeti span.cm-operator { color: #9fb96e; } +.cm-s-yeti span.cm-keyword { color: #9fb96e; } +.cm-s-yeti span.cm-atom { color: #a074c4; } +.cm-s-yeti span.cm-meta { color: #96c0d8; } +.cm-s-yeti span.cm-tag { color: #96c0d8; } +.cm-s-yeti span.cm-attribute { color: #9fb96e; } +.cm-s-yeti span.cm-qualifier { color: #96c0d8; } +.cm-s-yeti span.cm-property { color: #a074c4; } +.cm-s-yeti span.cm-builtin { color: #a074c4; } +.cm-s-yeti span.cm-variable-3, .cm-s-yeti span.cm-type { color: #96c0d8; } +.cm-s-yeti .CodeMirror-activeline-background { background: #E7E4E0; } +.cm-s-yeti .CodeMirror-matchingbracket { text-decoration: underline; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/yonce.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/yonce.css new file mode 100644 index 0000000000..975f0788a2 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/yonce.css @@ -0,0 +1,59 @@ +/* + + Name: yoncé + Author: Thomas MacLean (http://github.com/thomasmaclean) + + Original yoncé color scheme by Mina Markham (https://github.com/minamarkham) + +*/ + +.cm-s-yonce.CodeMirror { background: #1C1C1C; color: #d4d4d4; } /**/ +.cm-s-yonce div.CodeMirror-selected { background: rgba(252, 69, 133, 0.478); } /**/ +.cm-s-yonce .CodeMirror-selectedtext, +.cm-s-yonce .CodeMirror-selected, +.cm-s-yonce .CodeMirror-line::selection, +.cm-s-yonce .CodeMirror-line > span::selection, +.cm-s-yonce .CodeMirror-line > span > span::selection, +.cm-s-yonce .CodeMirror-line::-moz-selection, +.cm-s-yonce .CodeMirror-line > span::-moz-selection, +.cm-s-yonce .CodeMirror-line > span > span::-moz-selection { background: rgba(252, 67, 132, 0.47); } + +.cm-s-yonce.CodeMirror pre { padding-left: 0px; } +.cm-s-yonce .CodeMirror-gutters {background: #1C1C1C; border-right: 0px;} +.cm-s-yonce .CodeMirror-linenumber {color: #777777; padding-right: 10px; } +.cm-s-yonce .CodeMirror-activeline .CodeMirror-linenumber.CodeMirror-gutter-elt { background: #1C1C1C; color: #fc4384; } +.cm-s-yonce .CodeMirror-linenumber { color: #777; } +.cm-s-yonce .CodeMirror-cursor { border-left: 2px solid #FC4384; } +.cm-s-yonce .cm-searching { background: rgba(243, 155, 53, .3) !important; outline: 1px solid #F39B35; } +.cm-s-yonce .cm-searching.CodeMirror-selectedtext { background: rgba(243, 155, 53, .7) !important; color: white; } + +.cm-s-yonce .cm-keyword { color: #00A7AA; } /**/ +.cm-s-yonce .cm-atom { color: #F39B35; } +.cm-s-yonce .cm-number, .cm-s-yonce span.cm-type { color: #A06FCA; } /**/ +.cm-s-yonce .cm-def { color: #98E342; } +.cm-s-yonce .cm-property, +.cm-s-yonce span.cm-variable { color: #D4D4D4; font-style: italic; } +.cm-s-yonce span.cm-variable-2 { color: #da7dae; font-style: italic; } +.cm-s-yonce span.cm-variable-3 { color: #A06FCA; } +.cm-s-yonce .cm-type.cm-def { color: #FC4384; font-style: normal; text-decoration: underline; } +.cm-s-yonce .cm-property.cm-def { color: #FC4384; font-style: normal; } +.cm-s-yonce .cm-callee { color: #FC4384; font-style: normal; } +.cm-s-yonce .cm-operator { color: #FC4384; } /**/ +.cm-s-yonce .cm-qualifier, +.cm-s-yonce .cm-tag { color: #FC4384; } +.cm-s-yonce .cm-tag.cm-bracket { color: #D4D4D4; } +.cm-s-yonce .cm-attribute { color: #A06FCA; } +.cm-s-yonce .cm-comment { color:#696d70; font-style:italic; font-weight:normal; } /**/ +.cm-s-yonce .cm-comment.cm-tag { color: #FC4384 } +.cm-s-yonce .cm-comment.cm-attribute { color: #D4D4D4; } +.cm-s-yonce .cm-string { color:#E6DB74; } /**/ +.cm-s-yonce .cm-string-2 { color:#F39B35; } /*?*/ +.cm-s-yonce .cm-meta { color: #D4D4D4; background: inherit; } +.cm-s-yonce .cm-builtin { color: #FC4384; } /*?*/ +.cm-s-yonce .cm-header { color: #da7dae; } +.cm-s-yonce .cm-hr { color: #98E342; } +.cm-s-yonce .cm-link { color:#696d70; font-style:italic; text-decoration:none; } /**/ +.cm-s-yonce .cm-error { border-bottom: 1px solid #C42412; } + +.cm-s-yonce .CodeMirror-activeline-background { background: #272727; } +.cm-s-yonce .CodeMirror-matchingbracket { outline:1px solid grey; color:#D4D4D4 !important; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/zenburn.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/zenburn.css new file mode 100644 index 0000000000..4eb4247c92 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/codemirror/theme/zenburn.css @@ -0,0 +1,37 @@ +/** + * " + * Using Zenburn color palette from the Emacs Zenburn Theme + * https://github.com/bbatsov/zenburn-emacs/blob/master/zenburn-theme.el + * + * Also using parts of https://github.com/xavi/coderay-lighttable-theme + * " + * From: https://github.com/wisenomad/zenburn-lighttable-theme/blob/master/zenburn.css + */ + +.cm-s-zenburn .CodeMirror-gutters { background: #3f3f3f !important; } +.cm-s-zenburn .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { color: #999; } +.cm-s-zenburn .CodeMirror-cursor { border-left: 1px solid white; } +.cm-s-zenburn.CodeMirror { background-color: #3f3f3f; color: #dcdccc; } +.cm-s-zenburn span.cm-builtin { color: #dcdccc; font-weight: bold; } +.cm-s-zenburn span.cm-comment { color: #7f9f7f; } +.cm-s-zenburn span.cm-keyword { color: #f0dfaf; font-weight: bold; } +.cm-s-zenburn span.cm-atom { color: #bfebbf; } +.cm-s-zenburn span.cm-def { color: #dcdccc; } +.cm-s-zenburn span.cm-variable { color: #dfaf8f; } +.cm-s-zenburn span.cm-variable-2 { color: #dcdccc; } +.cm-s-zenburn span.cm-string { color: #cc9393; } +.cm-s-zenburn span.cm-string-2 { color: #cc9393; } +.cm-s-zenburn span.cm-number { color: #dcdccc; } +.cm-s-zenburn span.cm-tag { color: #93e0e3; } +.cm-s-zenburn span.cm-property { color: #dfaf8f; } +.cm-s-zenburn span.cm-attribute { color: #dfaf8f; } +.cm-s-zenburn span.cm-qualifier { color: #7cb8bb; } +.cm-s-zenburn span.cm-meta { color: #f0dfaf; } +.cm-s-zenburn span.cm-header { color: #f0efd0; } +.cm-s-zenburn span.cm-operator { color: #f0efd0; } +.cm-s-zenburn span.CodeMirror-matchingbracket { box-sizing: border-box; background: transparent; border-bottom: 1px solid; } +.cm-s-zenburn span.CodeMirror-nonmatchingbracket { border-bottom: 1px solid; background: none; } +.cm-s-zenburn .CodeMirror-activeline { background: #000000; } +.cm-s-zenburn .CodeMirror-activeline-background { background: #000000; } +.cm-s-zenburn div.CodeMirror-selected { background: #545454; } +.cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected { background: #4f4f4f; } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index cedf508cc2..92b8cbcfbd 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz#25bd7116b9b0e72ba45f0f5246343343de8561b2" - integrity sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44" - integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~5.2.1" - "@abp/bootstrap" "~5.2.1" - "@abp/bootstrap-datepicker" "~5.2.1" - "@abp/datatables.net-bs5" "~5.2.1" - "@abp/font-awesome" "~5.2.1" - "@abp/jquery-form" "~5.2.1" - "@abp/jquery-validation-unobtrusive" "~5.2.1" - "@abp/lodash" "~5.2.1" - "@abp/luxon" "~5.2.1" - "@abp/malihu-custom-scrollbar-plugin" "~5.2.1" - "@abp/select2" "~5.2.1" - "@abp/sweetalert2" "~5.2.1" - "@abp/timeago" "~5.2.1" - "@abp/toastr" "~5.2.1" - -"@abp/aspnetcore.mvc.ui@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3" - integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg== +"@abp/aspnetcore.mvc.ui.theme.basic@^5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.3.0-rc.1.tgz#dc27eb79ba7353eb6b16e4a2f50d17c3cfc9157d" + integrity sha512-TEbz/ISsGhfTec66XSeivQjCOCpTidufdpZmj8JRyrbQvhXOYohJs3ImrGJOIxUwo6nuzagGpotqXryjIF+jrg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~5.3.0-rc.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.3.0-rc.1.tgz#ed993befe99682baee55ea8771f983980ba8f93f" + integrity sha512-kL4CXe0YoZ4wJ4XvutqLPkv4fMuFeRJFzdix6lx4dPAArnPu69n3P4qFhokPkcoGpB2KTRqyn9fHQs8g2FCGQw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~5.3.0-rc.1" + "@abp/bootstrap" "~5.3.0-rc.1" + "@abp/bootstrap-datepicker" "~5.3.0-rc.1" + "@abp/datatables.net-bs5" "~5.3.0-rc.1" + "@abp/font-awesome" "~5.3.0-rc.1" + "@abp/jquery-form" "~5.3.0-rc.1" + "@abp/jquery-validation-unobtrusive" "~5.3.0-rc.1" + "@abp/lodash" "~5.3.0-rc.1" + "@abp/luxon" "~5.3.0-rc.1" + "@abp/malihu-custom-scrollbar-plugin" "~5.3.0-rc.1" + "@abp/select2" "~5.3.0-rc.1" + "@abp/sweetalert2" "~5.3.0-rc.1" + "@abp/timeago" "~5.3.0-rc.1" + "@abp/toastr" "~5.3.0-rc.1" + +"@abp/aspnetcore.mvc.ui@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.3.0-rc.1.tgz#5205d3a5ea500ff3b8d525dcc11a2ce4cfccdfd3" + integrity sha512-mIefq3QSVtP7heNl0ocHiSKLU+DwN5/TDvvPj2L3IZkCzuOrDxoBUIBIciea4k10HIQzqo6gmm1YOw0CEfzNHg== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,234 +41,243 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd" - integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww== +"@abp/bootstrap-datepicker@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.3.0-rc.1.tgz#1a5a29d7f9904e8d99c7085bc4545ad2665195cb" + integrity sha512-Y5QLLNd2UpbzbWSh+5nKdpAdz2i3V8+feTHTpAxnPgYRabPGqAFiOrty8KZ1MJEgjQFWC1ypGHYII7GWVyIS6Q== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9" - integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A== +"@abp/bootstrap@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.3.0-rc.1.tgz#977d579f59e18b1eb2c9b43612d525a859a575a4" + integrity sha512-dpY0bPHdhUI5yL23+EsR6w/KjoPyehaEgHLLKQDERdubX1Zk/SDWrhrYXnXxtJ0fvxG2aRVOEBMULmHD3m/PoA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" bootstrap "^5.1.3" -"@abp/clipboard@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.2.1.tgz#c6bddd279b37e9b2bd27b027d5686411c9ae942b" - integrity sha512-aouNTDz8t+8M4O2a+UsEdtABRsyhvzGpXqCG2+LYE1vA3I+CKhglkvEFp+GyIgWsipEHY1U1w6V3qZtcRINn+A== +"@abp/clipboard@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.3.0-rc.1.tgz#da893847d2d86f53f99dfefc8898d14410d45600" + integrity sha512-Eqkgd3ZJXHE5xovfb+2SzGxzISCjzLsGYSV/uZs2BYVfyIZ0+D2Jx0jOT8j8oVPAlRTCCMAbvoxMKZJZr/WC0Q== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" clipboard "^2.0.8" -"@abp/cms-kit.admin@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-5.2.1.tgz#f685e8533366fa7a7db9641a61681f664af6d979" - integrity sha512-KkT3eJMR0XCzlIY3KXNId3KfN8rQmGuThTZIPo5cifGg0mpW/HdkCfI4Dmv6v2xkUnZ/o5dOf+cXkvFrt6zzfg== +"@abp/cms-kit.admin@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-5.3.0-rc.1.tgz#741350a9669532d3bd8e703c2a8cde5e693b1b9d" + integrity sha512-xmdfrlAOBDB1Fi/aBjpkNEG5m4OBiSOo1xt88fG1KJiKxfDYsH84XB+V7rJ/3IWtlaQJDzdnYFrqoex/5h0S/A== dependencies: - "@abp/jstree" "~5.2.1" - "@abp/slugify" "~5.2.1" - "@abp/tui-editor" "~5.2.1" - "@abp/uppy" "~5.2.1" + "@abp/codemirror" "~5.3.0-rc.1" + "@abp/jstree" "~5.3.0-rc.1" + "@abp/slugify" "~5.3.0-rc.1" + "@abp/tui-editor" "~5.3.0-rc.1" + "@abp/uppy" "~5.3.0-rc.1" -"@abp/cms-kit.public@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-5.2.1.tgz#8f4860b17470f57fce3bbd732a7954031a244d14" - integrity sha512-dOhzJjWuXO74GFUg78JRhLOJCaUXjwOHuQMbzpWHnMyrj88nEJkEtHwYs1vxf9GWvyhhES6h7ZyusxJhy+Ybww== +"@abp/cms-kit.public@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-5.3.0-rc.1.tgz#4f0fe30a5c6f5450dfde265162d68239e00e2f9b" + integrity sha512-B9FX1bq9Ki9bouatcY9MJRbOo8/QLFmq24Ua3ASgmMhMwwSpUUu+GBUtxpUkRepWcpPze4m3rWIn5Ff8ZVnOEw== dependencies: - "@abp/highlight.js" "~5.2.1" - "@abp/star-rating-svg" "~5.2.1" + "@abp/highlight.js" "~5.3.0-rc.1" + "@abp/star-rating-svg" "~5.3.0-rc.1" -"@abp/cms-kit@5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-5.2.1.tgz#2cab9de4bb4e14ec39f8a2086b16fc38556af6bb" - integrity sha512-SuIJYj8LAdYeATYrpLxRGg7gMQ52Wq2gApriv7c7pC45mPQosi57wjEMvsI2MKAurEwQqTf7J38R3UJNRgmQbQ== +"@abp/cms-kit@5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-5.3.0-rc.1.tgz#da749badac6681d8049a4d6c522c172fdb72f02b" + integrity sha512-ACKZf69dGti9W8M0ZZWn0UiZA+LlGqQtEx9rkTnzrzma4uePsDvIFvbMGyK8UZLSVGHOVVhE2kN1OGTioeqgGw== dependencies: - "@abp/cms-kit.admin" "~5.2.1" - "@abp/cms-kit.public" "~5.2.1" + "@abp/cms-kit.admin" "~5.3.0-rc.1" + "@abp/cms-kit.public" "~5.3.0-rc.1" -"@abp/core@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a" - integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ== +"@abp/codemirror@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-5.3.0-rc.1.tgz#20386caeffa7f0a65030a635532935d669fc5295" + integrity sha512-46AeZEeHEvOKjA6KS/SkhiizoLqQUB9cRJfOgT7NKP18OKx5ra4+Cj2CGtoq2N+FjuA7hgdnbbjX8E1GkfHAPg== dependencies: - "@abp/utils" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" + codemirror "^5.65.1" -"@abp/datatables.net-bs5@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe" - integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA== +"@abp/core@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.3.0-rc.1.tgz#4ede309ccfab440deb66fecb091273027483676a" + integrity sha512-cTw9xaWMkRDQjXRtkB5zx4Za0CPx7yvCRnTngIJs7xO86lRMVnuiwVGjP66vYTmiiu2ulGFgCeuw1AaK5t+g4Q== dependencies: - "@abp/datatables.net" "~5.2.1" + "@abp/utils" "~5.3.0-rc.1" + +"@abp/datatables.net-bs5@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.3.0-rc.1.tgz#ca624d788acdcc547d0bdf1f76ba3ffc105dfd52" + integrity sha512-uyFBkD9rM3wGve0ZKrr7bEbC0Z/ywi8S/EYL6GwLzGNtogSsVj5HGtSvifKjCBn7KmAvo54skKoVgVEn77dlWQ== + dependencies: + "@abp/datatables.net" "~5.3.0-rc.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6" - integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w== +"@abp/datatables.net@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.3.0-rc.1.tgz#38c0f6323f7e6305a50f7de9885b8a3f440cdf15" + integrity sha512-lecJ9Yelgey/nfSscsUHET0gyB6pZgkhnJXu3u8d9XhV2M5sc/WSnnCO3bgVBqMDImprR4GFPFw2cUlWkb8QBg== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" datatables.net "^1.11.4" -"@abp/font-awesome@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb" - integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ== +"@abp/font-awesome@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.3.0-rc.1.tgz#de14dca2b33fdc098d2325c5047e030a3927bfa9" + integrity sha512-tIuDwo+L5CuLpQ+ARsaTYmxuqpSJLqcaXuoFfk6JAC20bw881t7y8w4xWy1PUs0+SEQwTT7diZjQrcA/xxlMUQ== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/highlight.js@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-5.2.1.tgz#345e826047b2e87861d08b5ca2a9e5a313c22bda" - integrity sha512-Pi/pMWqdvdBr0E63UrhapuUtNNoY9Jt3R1Py52JQ0r90r53k5fmYOIaSwmaFlVZ8T/JApJt2D9i0Z4k8Tcn7Vg== +"@abp/highlight.js@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-5.3.0-rc.1.tgz#a6dad18c759ff4c1488b6aef4898d88d55e0ce1a" + integrity sha512-z4vvoETKcciumaED4hnpgrUnjWhtRejG+nW/er+X1dxrUJk58oh6ReFs0/xb+xlrKc/ALOYTh0VY5LBU2KU5Qw== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" "@highlightjs/cdn-assets" "~11.4.0" -"@abp/jquery-form@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790" - integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ== +"@abp/jquery-form@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.3.0-rc.1.tgz#0a363d8e4814651e0c46e2109d19dcc84fc884b0" + integrity sha512-IWazO6BW5rHJ+ODk4haEqWzfzHvbxtW2+T1o534Lr7d+LI9yabNiQmRZ24yzNDb6SmRvDUVsumZ+lxPn2WBhIw== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093" - integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg== +"@abp/jquery-validation-unobtrusive@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.3.0-rc.1.tgz#0aa2a5535acd79b5288ef04a0dc1b83a7a57b4b9" + integrity sha512-Qv/+nrd+ZeUs/2mCMahpQFqEguMOcmHrLg7hcw0LgcHr+MmEcG4WDcijTY6suFyekaf0DZD6vsFZjdvZmhsVYQ== dependencies: - "@abp/jquery-validation" "~5.2.1" + "@abp/jquery-validation" "~5.3.0-rc.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244" - integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw== +"@abp/jquery-validation@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.3.0-rc.1.tgz#d05afbe0209c0815afe3a7cb0cf811256e9905fc" + integrity sha512-3DoRX6c8duRx1/g7MFuPAO/qesJCFqbVbw+x0+QnKmCkVZmz5VFAqdO9yFMxDFRbBAtyp7faaarc0lOtAcBsoA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" jquery-validation "^1.19.3" -"@abp/jquery@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228" - integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg== +"@abp/jquery@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.3.0-rc.1.tgz#26e5d5761f2629d02b2534ad964080221d536308" + integrity sha512-//bqInarV6XOs8+I5GW1q/c05sjnCq/Z0vuzFW1i1NDrQ2Q5kqF5leMV9hhGEZmfR+yG1T0MsbVvueieRkV/cA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" jquery "~3.6.0" -"@abp/jstree@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-5.2.1.tgz#27f8c80053fbd7f5b242cc144b3ebdc33a668b9d" - integrity sha512-KYcdkjm33OEOBH/HHgOvIoVX8Bg/KlTJ4muyWYzPK0JK8T61rjrAw8cnlvMl5fqnuzdUUWFgfpuZq7HhgU30NQ== +"@abp/jstree@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-5.3.0-rc.1.tgz#e6c4a3ed1afe23ba3029674833c3135ac37dceda" + integrity sha512-MKJX2IXtTijjNfGNoy486/XdQ7nncIaoUSAZUcah0NXP1cyBC+PMl+zI9y1G/nJsAjX7zSpmWh8TXkbP20HZBQ== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" jstree "^3.3.12" -"@abp/lodash@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d" - integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA== +"@abp/lodash@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.3.0-rc.1.tgz#c53304fbd9b1c885a9a812c681c3698dd8ecea47" + integrity sha512-yBvUB05z/SSEEbZ79nFfb0cKwWVFbrt9OtUkQHy9ER7ip0R9escG2n1djFtAA33yZr/NLzSUh+vVBYsEhk8MOA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" lodash "^4.17.21" -"@abp/luxon@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17" - integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A== +"@abp/luxon@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.3.0-rc.1.tgz#bcb4de01b20a8e4da8db186e88fdebfcde47fb8f" + integrity sha512-SLozcDvCL/2jyvG2ZU+DHjzbfHYdmwiRjWu7gWyNjaY2e6D3NraHHjpMQ7ubObXZRlhhvfcp0i6eeKKoZNJtEQ== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09" - integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ== +"@abp/malihu-custom-scrollbar-plugin@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.3.0-rc.1.tgz#398181c7c6cc1805544e7a1ccd0423ed96005e0b" + integrity sha512-KZar881wtotKc+1bqDlBWo2vLUEeeqEpMBg8+BiXsGofp5ovudifVPM6mHZ9Gi29U9LAMyI0VEGwLJctgB/UoA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/prismjs@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.2.1.tgz#86aae6ee4529401da75744f1e43c7cd3c0b494a0" - integrity sha512-YNgcM7Kvmu3hGXJh4B8gl7rLzC28VuZYYP7AVptVSbTz/n6usCo21evG/st8L3vXixuQkvnNpBFgacJnHdSJZQ== +"@abp/prismjs@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.3.0-rc.1.tgz#ee1a49b8bd0af2a29aa7bfb93d22ce07a4edbe70" + integrity sha512-oOnzwUtI6q2u7iE/YWQEULm1I+f7Bo+0tQ9rYlzIoalBRnqN57Zw0VMf5AHq8qjn6GiInehPtU9wsaVTPqXmtw== dependencies: - "@abp/clipboard" "~5.2.1" - "@abp/core" "~5.2.1" + "@abp/clipboard" "~5.3.0-rc.1" + "@abp/core" "~5.3.0-rc.1" prismjs "^1.26.0" -"@abp/select2@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332" - integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ== +"@abp/select2@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.3.0-rc.1.tgz#b2ce00b6545674d6bccc10fdfe4626a4598a0cdc" + integrity sha512-frE5jia7bBdZinW4LqD5JR+wknWu2ARX3L3pPiQ080ulB+P58gRj07ZPd1BWgRcvutnuANYyP9rZtDA18Ls+9Q== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" select2 "^4.0.13" -"@abp/slugify@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-5.2.1.tgz#97c8b54fcfc271e7fb2f1697fafa3dff30ba6891" - integrity sha512-e/QxzbeOJYgKdYJQSCeP7QnnraLEafxB/AAzQDDJH2hKid9lNDeUxjggw/xCSiiRCG9Qz8OYuei6bNaYDHcxbQ== +"@abp/slugify@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-5.3.0-rc.1.tgz#dfebf924365d8627a6dae770394396ffa383a960" + integrity sha512-gPHLGVfrXSiuUMxEdPpZm6ie+ZkOVk2SXb9B2/+ndL+Wy8FYJiP6v2xn0SJ3ENqGL4nvuZdDOfAGKbrICpb/Pg== dependencies: slugify "^1.6.5" -"@abp/star-rating-svg@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-5.2.1.tgz#f8cd6a965079acfa3633731eacf653e142886c1e" - integrity sha512-QofOzA0kjpXEm80tkxBptKYTUZa4uolHRy4KNTzDFdcf8TyC6hT8I6kmUS9ym7F3HKLjLhDWfRsd1kKaDwxzQw== +"@abp/star-rating-svg@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-5.3.0-rc.1.tgz#1589d7407932c6113312a6dbc43be32363363314" + integrity sha512-o7fP05qMm7OP9A1TPf5ysSqnujC6WWMQEUceIqRdp2UWiLKd8c/3GrtLbA+NDDN7ddES8JPrU98ENdfRxqb6CA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" star-rating-svg "^3.5.0" -"@abp/sweetalert2@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51" - integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg== +"@abp/sweetalert2@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.3.0-rc.1.tgz#6eb10b257e7f256da64ff6fe248a370671a26920" + integrity sha512-g9nddGcDGaG6EmjX7qpRcLzy3F38BTtFc0RBWApH7Da1o/LMYFYa6xGfS7ouIynZBM9j/BRP12CVTR+Y9qqbGg== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" sweetalert2 "^11.3.6" -"@abp/timeago@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de" - integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA== +"@abp/timeago@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.3.0-rc.1.tgz#2702a0f22db52dbf4c0717e4abcd317c56d10563" + integrity sha512-XRc4D98FIZR0YTXIoV0+OxVJTdixtNDiwatZRffopHT4Kpptmpj6O9KMcB4SngCH99/TrUFdEUnA2CgszxiEOA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" timeago "^1.6.7" -"@abp/toastr@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4" - integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA== +"@abp/toastr@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.3.0-rc.1.tgz#ec3a3d302ac91d5393c3caeb8b4884ad811b6edb" + integrity sha512-InZweYuBkrNZNBQKp6A+6gxGdO/lB0XsrXaa+CIVe55p8aNJPzE0mnvSfKWhN5G273wR08AD9RjR22kYS+bgFA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" toastr "^2.1.4" -"@abp/tui-editor@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-5.2.1.tgz#06be1a029de754868fa11ce3479be3fbc90ba103" - integrity sha512-Mi3preBkGEU1hrtSNCkOjeXPc9c74DFt8BL82sPIVDglYcVrVLXbnNTWE/CHP0spmKWh33ek4FoH1Pt0TePMuw== +"@abp/tui-editor@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-5.3.0-rc.1.tgz#d5b6e46c922e9743216395bc055ed8208c2ead0b" + integrity sha512-wMEph23kwGJyAGweivKn2EDTRQQD0UG0X23qMd4Cv285qdu4AoYL2/shBDFKiXfhN0Q7EZ06mhOyTuhJmTnNUg== dependencies: - "@abp/jquery" "~5.2.1" - "@abp/prismjs" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" + "@abp/prismjs" "~5.3.0-rc.1" -"@abp/uppy@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-5.2.1.tgz#560bbb363a0b0b493cc2f1c20f4f7b51e95cb331" - integrity sha512-cLqeGHrfwuOgPKjIBTq7H/l3P494sEgmrdH3UW9wVIjD5OAIbK/2AeZ2xTIIg0Mn+ALm+rqfsw0+qBoBug1WHQ== +"@abp/uppy@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-5.3.0-rc.1.tgz#19f2e09eb6a34e70e08f7d79189624012ab265dd" + integrity sha512-a4V1MzvLdCfI4va8U7nxvUfsh/+h4UG+Utu/HFJ2iHPpH/cj/xIBbCWljDt4uToHUIiZ2kXVCE+0TfWiYV+JJQ== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" uppy "^1.16.1" -"@abp/utils@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064" - integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ== +"@abp/utils@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.3.0-rc.1.tgz#3fa758944e7325e7b3f528141e03bb71f8e04d24" + integrity sha512-/8BTYZomNMdy+RpYXWLp5dg0lRhmfiguciZEVWo4qRw1lCXm/JR+0842XT1XYE1dQ4orNNJ3/H86eRX8Ab6Yfg== dependencies: just-compare "^1.3.0" @@ -999,6 +1008,11 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +codemirror@^5.65.1: + version "5.65.3" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.3.tgz#2d029930d5a293bc5fb96ceea64654803c0d4ac7" + integrity sha512-kCC0iwGZOVZXHEKW3NDTObvM7pTIyowjty4BUqeREROc/3I6bWbgZDA3fGDwlA+rbgRjvnRnfqs9SfXynel1AQ== + collection-map@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" diff --git a/modules/docs/app/VoloDocs.Web/package.json b/modules/docs/app/VoloDocs.Web/package.json index 2ec4d524e2..bfd84f86a8 100644 --- a/modules/docs/app/VoloDocs.Web/package.json +++ b/modules/docs/app/VoloDocs.Web/package.json @@ -3,7 +3,7 @@ "name": "volo.docstestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1", - "@abp/docs": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1", + "@abp/docs": "^5.3.0-rc.1" } } diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/CHANGELOG.md b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/CHANGELOG.md index 6329ab4686..2d792fe64d 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/CHANGELOG.md +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/CHANGELOG.md @@ -1,40 +1,129 @@ # Prism Changelog +## 1.28.0 (2022-04-17) + +### New components + +* __Ado__ & __Mata__ (Stata) ([#3383](https://github.com/PrismJS/prism/issues/3383)) [`63806d57`](https://github.com/PrismJS/prism/commit/63806d57) +* __ARM Assembly__ ([#3376](https://github.com/PrismJS/prism/issues/3376)) [`554ff324`](https://github.com/PrismJS/prism/commit/554ff324) +* __Arturo__ ([#3403](https://github.com/PrismJS/prism/issues/3403)) [`e2fe1f79`](https://github.com/PrismJS/prism/commit/e2fe1f79) +* __AWK__ & __GAWK__ ([#3374](https://github.com/PrismJS/prism/issues/3374)) [`ea8a0f40`](https://github.com/PrismJS/prism/commit/ea8a0f40) +* __Cooklang__ ([#3337](https://github.com/PrismJS/prism/issues/3337)) [`4eb928c3`](https://github.com/PrismJS/prism/commit/4eb928c3) +* __CUE__ ([#3375](https://github.com/PrismJS/prism/issues/3375)) [`a1340666`](https://github.com/PrismJS/prism/commit/a1340666) +* __gettext__ ([#3369](https://github.com/PrismJS/prism/issues/3369)) [`dfef9b61`](https://github.com/PrismJS/prism/commit/dfef9b61) +* __GNU Linker Script__ ([#3373](https://github.com/PrismJS/prism/issues/3373)) [`33f2cf95`](https://github.com/PrismJS/prism/commit/33f2cf95) +* __Odin__ ([#3424](https://github.com/PrismJS/prism/issues/3424)) [`8a3fef6d`](https://github.com/PrismJS/prism/commit/8a3fef6d) +* __PlantUML__ ([#3372](https://github.com/PrismJS/prism/issues/3372)) [`0d49553c`](https://github.com/PrismJS/prism/commit/0d49553c) +* __ReScript__ ([#3435](https://github.com/PrismJS/prism/issues/3435)) [`cbef9af7`](https://github.com/PrismJS/prism/commit/cbef9af7) +* __SuperCollider__ ([#3371](https://github.com/PrismJS/prism/issues/3371)) [`1b1d6731`](https://github.com/PrismJS/prism/commit/1b1d6731) + +### Updated components + +* __.properties__ + * Use `key`, `value` for token names; `attr-name`, `attr-value` as aliases ([#3377](https://github.com/PrismJS/prism/issues/3377)) [`b94a664d`](https://github.com/PrismJS/prism/commit/b94a664d) +* __ABAP__ + * Sorted keyword list ([#3368](https://github.com/PrismJS/prism/issues/3368)) [`7bda2bf1`](https://github.com/PrismJS/prism/commit/7bda2bf1) +* __Ada__ + * Changed `attr-name` to `attribute`; Use `attr-name` as alias ([#3381](https://github.com/PrismJS/prism/issues/3381)) [`cde0b5b2`](https://github.com/PrismJS/prism/commit/cde0b5b2) + * Added `or` keyword ([#3380](https://github.com/PrismJS/prism/issues/3380)) [`c30b736f`](https://github.com/PrismJS/prism/commit/c30b736f) +* __Atmel AVR Assembly__ + * Fixed `&=` and `|=` operators ([#3395](https://github.com/PrismJS/prism/issues/3395)) [`8c4ae5a5`](https://github.com/PrismJS/prism/commit/8c4ae5a5) +* __AutoHotkey__ + * Use standard tokens ([#3385](https://github.com/PrismJS/prism/issues/3385)) [`61c460e8`](https://github.com/PrismJS/prism/commit/61c460e8) + * Use general pattern instead of name list for directives ([#3384](https://github.com/PrismJS/prism/issues/3384)) [`7ac84dda`](https://github.com/PrismJS/prism/commit/7ac84dda) +* __CFScript__ + * Simplified operator regex ([#3396](https://github.com/PrismJS/prism/issues/3396)) [`6a215fe0`](https://github.com/PrismJS/prism/commit/6a215fe0) +* __CMake__ + * Simplified `variable` and `operator` regexes ([#3398](https://github.com/PrismJS/prism/issues/3398)) [`8e59744b`](https://github.com/PrismJS/prism/commit/8e59744b) +* __Erlang__ + * Added `begin` keyword ([#3387](https://github.com/PrismJS/prism/issues/3387)) [`cf38d059`](https://github.com/PrismJS/prism/commit/cf38d059) +* __Excel Formula__ + * Use more fitting aliases for `function-name`, `range`, and `cell` ([#3391](https://github.com/PrismJS/prism/issues/3391)) [`ef0ec02a`](https://github.com/PrismJS/prism/commit/ef0ec02a) +* __Flow__ + * Changed alias of `type` to `class-name` ([#3390](https://github.com/PrismJS/prism/issues/3390)) [`ce41434d`](https://github.com/PrismJS/prism/commit/ce41434d) + * Recognise `[Ss]ymbol` as a type ([#3388](https://github.com/PrismJS/prism/issues/3388)) [`3916883a`](https://github.com/PrismJS/prism/commit/3916883a) +* __GEDCOM__ + * Update `tag` to `record` ([#3386](https://github.com/PrismJS/prism/issues/3386)) [`f8f95340`](https://github.com/PrismJS/prism/commit/f8f95340) +* __Groovy__ + * Added string interpolation without hook ([#3366](https://github.com/PrismJS/prism/issues/3366)) [`5617765f`](https://github.com/PrismJS/prism/commit/5617765f) +* __Handlebars__ + * Added Mustache alias ([#3422](https://github.com/PrismJS/prism/issues/3422)) [`cb5229af`](https://github.com/PrismJS/prism/commit/cb5229af) +* __Java__ + * Improved class name detection ([#3351](https://github.com/PrismJS/prism/issues/3351)) [`4cb3d038`](https://github.com/PrismJS/prism/commit/4cb3d038) + * Fixed `record` false positives ([#3348](https://github.com/PrismJS/prism/issues/3348)) [`3bd8fdb1`](https://github.com/PrismJS/prism/commit/3bd8fdb1) +* __JavaScript__ + * Added support for new regex syntax ([#3399](https://github.com/PrismJS/prism/issues/3399)) [`ca78cde6`](https://github.com/PrismJS/prism/commit/ca78cde6) +* __Keyman__ + * Added new keywords ([#3401](https://github.com/PrismJS/prism/issues/3401)) [`bac36827`](https://github.com/PrismJS/prism/commit/bac36827) +* __MEL__ + * Improved functions, code, and comments ([#3393](https://github.com/PrismJS/prism/issues/3393)) [`8e648dab`](https://github.com/PrismJS/prism/commit/8e648dab) +* __NEON__ + * Change alias of `key` to `property` ([#3394](https://github.com/PrismJS/prism/issues/3394)) [`1c533f4a`](https://github.com/PrismJS/prism/commit/1c533f4a) +* __PHP__ + * Added `never` return type + minor fix of named arguments ([#3421](https://github.com/PrismJS/prism/issues/3421)) [`4ffab525`](https://github.com/PrismJS/prism/commit/4ffab525) + * Added `readonly` keyword ([#3349](https://github.com/PrismJS/prism/issues/3349)) [`4c3f1969`](https://github.com/PrismJS/prism/commit/4c3f1969) +* __PureBasic__ + * Added support for pointer to string operator ([#3362](https://github.com/PrismJS/prism/issues/3362)) [`499b1fa0`](https://github.com/PrismJS/prism/commit/499b1fa0) +* __Razor C#__ + * Added support for `@helper` and inline C# inside attribute values ([#3355](https://github.com/PrismJS/prism/issues/3355)) [`31a38d0c`](https://github.com/PrismJS/prism/commit/31a38d0c) +* __VHDL__ + * Add `private`, `view` keywords; Distinguish `attribute` from `keyword` ([#3389](https://github.com/PrismJS/prism/issues/3389)) [`d1a5ce30`](https://github.com/PrismJS/prism/commit/d1a5ce30) +* __Wolfram language__ + * Simplified `operator` regex ([#3397](https://github.com/PrismJS/prism/issues/3397)) [`10ae6da3`](https://github.com/PrismJS/prism/commit/10ae6da3) + +### Updated plugins + +* __Autolinker__ + * Fixed URL regex to match more valid URLs ([#3358](https://github.com/PrismJS/prism/issues/3358)) [`17ed9160`](https://github.com/PrismJS/prism/commit/17ed9160) +* __Command Line__ + * Add support for command continuation prefix ([#3344](https://github.com/PrismJS/prism/issues/3344)) [`b53832cd`](https://github.com/PrismJS/prism/commit/b53832cd) + * Increased prompt opacity ([#3352](https://github.com/PrismJS/prism/issues/3352)) [`f95dd190`](https://github.com/PrismJS/prism/commit/f95dd190) +* __Keep Markup__ + * Use original nodes instead of clones ([#3365](https://github.com/PrismJS/prism/issues/3365)) [`8a843a17`](https://github.com/PrismJS/prism/commit/8a843a17) + +### Other + +* __Infrastructure__ + * Use terser ([#3407](https://github.com/PrismJS/prism/issues/3407)) [`11c54624`](https://github.com/PrismJS/prism/commit/11c54624) + * Tests: Cache results for exp backtracking check ([#3356](https://github.com/PrismJS/prism/issues/3356)) [`ead22e1e`](https://github.com/PrismJS/prism/commit/ead22e1e) +* __Website__ + * More documentation for language definitons ([#3427](https://github.com/PrismJS/prism/issues/3427)) [`333bd590`](https://github.com/PrismJS/prism/commit/333bd590) + ## 1.27.0 (2022-02-17) ### New components -* __UO Razor Script__ (#3309) [`3f8cc5a0`](https://github.com/PrismJS/prism/commit/3f8cc5a0) +* __UO Razor Script__ ([#3309](https://github.com/PrismJS/prism/issues/3309)) [`3f8cc5a0`](https://github.com/PrismJS/prism/commit/3f8cc5a0) ### Updated components * __AutoIt__ - * Allow hyphen in directive (#3308) [`bcb2e2c8`](https://github.com/PrismJS/prism/commit/bcb2e2c8) + * Allow hyphen in directive ([#3308](https://github.com/PrismJS/prism/issues/3308)) [`bcb2e2c8`](https://github.com/PrismJS/prism/commit/bcb2e2c8) * __EditorConfig__ - * Change alias of `section` from `keyword` to `selector` (#3305) [`e46501b9`](https://github.com/PrismJS/prism/commit/e46501b9) + * Change alias of `section` from `keyword` to `selector` ([#3305](https://github.com/PrismJS/prism/issues/3305)) [`e46501b9`](https://github.com/PrismJS/prism/commit/e46501b9) * __Ini__ - * Swap out `header` for `section` (#3304) [`deb3a97f`](https://github.com/PrismJS/prism/commit/deb3a97f) + * Swap out `header` for `section` ([#3304](https://github.com/PrismJS/prism/issues/3304)) [`deb3a97f`](https://github.com/PrismJS/prism/commit/deb3a97f) * __MongoDB__ - * Added v5 support (#3297) [`8458c41f`](https://github.com/PrismJS/prism/commit/8458c41f) + * Added v5 support ([#3297](https://github.com/PrismJS/prism/issues/3297)) [`8458c41f`](https://github.com/PrismJS/prism/commit/8458c41f) * __PureBasic__ - * Added missing keyword and fixed constants ending with `$` (#3320) [`d6c53726`](https://github.com/PrismJS/prism/commit/d6c53726) + * Added missing keyword and fixed constants ending with `$` ([#3320](https://github.com/PrismJS/prism/issues/3320)) [`d6c53726`](https://github.com/PrismJS/prism/commit/d6c53726) * __Scala__ - * Added support for interpolated strings (#3293) [`441a1422`](https://github.com/PrismJS/prism/commit/441a1422) + * Added support for interpolated strings ([#3293](https://github.com/PrismJS/prism/issues/3293)) [`441a1422`](https://github.com/PrismJS/prism/commit/441a1422) * __Systemd configuration file__ - * Swap out `operator` for `punctuation` (#3306) [`2eb89e15`](https://github.com/PrismJS/prism/commit/2eb89e15) + * Swap out `operator` for `punctuation` ([#3306](https://github.com/PrismJS/prism/issues/3306)) [`2eb89e15`](https://github.com/PrismJS/prism/commit/2eb89e15) ### Updated plugins * __Command Line__ - * Escape markup in command line output (#3341) [`e002e78c`](https://github.com/PrismJS/prism/commit/e002e78c) - * Add support for line continuation and improved colors (#3326) [`1784b175`](https://github.com/PrismJS/prism/commit/1784b175) - * Added span around command and output (#3312) [`82d0ca15`](https://github.com/PrismJS/prism/commit/82d0ca15) + * Escape markup in command line output ([#3341](https://github.com/PrismJS/prism/issues/3341)) [`e002e78c`](https://github.com/PrismJS/prism/commit/e002e78c) + * Add support for line continuation and improved colors ([#3326](https://github.com/PrismJS/prism/issues/3326)) [`1784b175`](https://github.com/PrismJS/prism/commit/1784b175) + * Added span around command and output ([#3312](https://github.com/PrismJS/prism/issues/3312)) [`82d0ca15`](https://github.com/PrismJS/prism/commit/82d0ca15) ### Other * __Core__ - * Added better error message for missing grammars (#3311) [`2cc4660b`](https://github.com/PrismJS/prism/commit/2cc4660b) + * Added better error message for missing grammars ([#3311](https://github.com/PrismJS/prism/issues/3311)) [`2cc4660b`](https://github.com/PrismJS/prism/commit/2cc4660b) ## 1.26.0 (2022-01-06) diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components.js index 6d3c1562e0..d58ff9037b 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components.js @@ -1,2 +1,2 @@ -var components = {"core":{"meta":{"path":"components/prism-core.js","option":"mandatory"},"core":"Core"},"themes":{"meta":{"path":"themes/{id}.css","link":"index.html?theme={id}","exclusive":true},"prism":{"title":"Default","option":"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{"title":"Okaidia","owner":"ocodia"},"prism-twilight":{"title":"Twilight","owner":"remybach"},"prism-coy":{"title":"Coy","owner":"tshedor"},"prism-solarizedlight":{"title":"Solarized Light","owner":"hectormatos2011 "},"prism-tomorrow":{"title":"Tomorrow Night","owner":"Rosey"}},"languages":{"meta":{"path":"components/prism-{id}","noCSS":true,"examplesPath":"examples/prism-{id}","addCheckAll":true},"markup":{"title":"Markup","alias":["html","xml","svg","mathml","ssml","atom","rss"],"aliasTitles":{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","ssml":"SSML","atom":"Atom","rss":"RSS"},"option":"default"},"css":{"title":"CSS","option":"default","modify":"markup"},"clike":{"title":"C-like","option":"default"},"javascript":{"title":"JavaScript","require":"clike","modify":"markup","optional":"regex","alias":"js","option":"default"},"abap":{"title":"ABAP","owner":"dellagustin"},"abnf":{"title":"ABNF","owner":"RunDevelopment"},"actionscript":{"title":"ActionScript","require":"javascript","modify":"markup","owner":"Golmote"},"ada":{"title":"Ada","owner":"Lucretia"},"agda":{"title":"Agda","owner":"xy-ren"},"al":{"title":"AL","owner":"RunDevelopment"},"antlr4":{"title":"ANTLR4","alias":"g4","owner":"RunDevelopment"},"apacheconf":{"title":"Apache Configuration","owner":"GuiTeK"},"apex":{"title":"Apex","require":["clike","sql"],"owner":"RunDevelopment"},"apl":{"title":"APL","owner":"ngn"},"applescript":{"title":"AppleScript","owner":"Golmote"},"aql":{"title":"AQL","owner":"RunDevelopment"},"arduino":{"title":"Arduino","require":"cpp","alias":"ino","owner":"dkern"},"arff":{"title":"ARFF","owner":"Golmote"},"asciidoc":{"alias":"adoc","title":"AsciiDoc","owner":"Golmote"},"aspnet":{"title":"ASP.NET (C#)","require":["markup","csharp"],"owner":"nauzilus"},"asm6502":{"title":"6502 Assembly","owner":"kzurawel"},"asmatmel":{"title":"Atmel AVR Assembly","owner":"cerkit"},"autohotkey":{"title":"AutoHotkey","owner":"aviaryan"},"autoit":{"title":"AutoIt","owner":"Golmote"},"avisynth":{"title":"AviSynth","alias":"avs","owner":"Zinfidel"},"avro-idl":{"title":"Avro IDL","alias":"avdl","owner":"RunDevelopment"},"bash":{"title":"Bash","alias":"shell","aliasTitles":{"shell":"Shell"},"owner":"zeitgeist87"},"basic":{"title":"BASIC","owner":"Golmote"},"batch":{"title":"Batch","owner":"Golmote"},"bbcode":{"title":"BBcode","alias":"shortcode","aliasTitles":{"shortcode":"Shortcode"},"owner":"RunDevelopment"},"bicep":{"title":"Bicep","owner":"johnnyreilly"},"birb":{"title":"Birb","require":"clike","owner":"Calamity210"},"bison":{"title":"Bison","require":"c","owner":"Golmote"},"bnf":{"title":"BNF","alias":"rbnf","aliasTitles":{"rbnf":"RBNF"},"owner":"RunDevelopment"},"brainfuck":{"title":"Brainfuck","owner":"Golmote"},"brightscript":{"title":"BrightScript","owner":"RunDevelopment"},"bro":{"title":"Bro","owner":"wayward710"},"bsl":{"title":"BSL (1C:Enterprise)","alias":"oscript","aliasTitles":{"oscript":"OneScript"},"owner":"Diversus23"},"c":{"title":"C","require":"clike","owner":"zeitgeist87"},"csharp":{"title":"C#","require":"clike","alias":["cs","dotnet"],"owner":"mvalipour"},"cpp":{"title":"C++","require":"c","owner":"zeitgeist87"},"cfscript":{"title":"CFScript","require":"clike","alias":"cfc","owner":"mjclemente"},"chaiscript":{"title":"ChaiScript","require":["clike","cpp"],"owner":"RunDevelopment"},"cil":{"title":"CIL","owner":"sbrl"},"clojure":{"title":"Clojure","owner":"troglotit"},"cmake":{"title":"CMake","owner":"mjrogozinski"},"cobol":{"title":"COBOL","owner":"RunDevelopment"},"coffeescript":{"title":"CoffeeScript","require":"javascript","alias":"coffee","owner":"R-osey"},"concurnas":{"title":"Concurnas","alias":"conc","owner":"jasontatton"},"csp":{"title":"Content-Security-Policy","owner":"ScottHelme"},"coq":{"title":"Coq","owner":"RunDevelopment"},"crystal":{"title":"Crystal","require":"ruby","owner":"MakeNowJust"},"css-extras":{"title":"CSS Extras","require":"css","modify":"css","owner":"milesj"},"csv":{"title":"CSV","owner":"RunDevelopment"},"cypher":{"title":"Cypher","owner":"RunDevelopment"},"d":{"title":"D","require":"clike","owner":"Golmote"},"dart":{"title":"Dart","require":"clike","owner":"Golmote"},"dataweave":{"title":"DataWeave","owner":"machaval"},"dax":{"title":"DAX","owner":"peterbud"},"dhall":{"title":"Dhall","owner":"RunDevelopment"},"diff":{"title":"Diff","owner":"uranusjr"},"django":{"title":"Django/Jinja2","require":"markup-templating","alias":"jinja2","owner":"romanvm"},"dns-zone-file":{"title":"DNS zone file","owner":"RunDevelopment","alias":"dns-zone"},"docker":{"title":"Docker","alias":"dockerfile","owner":"JustinBeckwith"},"dot":{"title":"DOT (Graphviz)","alias":"gv","optional":"markup","owner":"RunDevelopment"},"ebnf":{"title":"EBNF","owner":"RunDevelopment"},"editorconfig":{"title":"EditorConfig","owner":"osipxd"},"eiffel":{"title":"Eiffel","owner":"Conaclos"},"ejs":{"title":"EJS","require":["javascript","markup-templating"],"owner":"RunDevelopment","alias":"eta","aliasTitles":{"eta":"Eta"}},"elixir":{"title":"Elixir","owner":"Golmote"},"elm":{"title":"Elm","owner":"zwilias"},"etlua":{"title":"Embedded Lua templating","require":["lua","markup-templating"],"owner":"RunDevelopment"},"erb":{"title":"ERB","require":["ruby","markup-templating"],"owner":"Golmote"},"erlang":{"title":"Erlang","owner":"Golmote"},"excel-formula":{"title":"Excel Formula","alias":["xlsx","xls"],"owner":"RunDevelopment"},"fsharp":{"title":"F#","require":"clike","owner":"simonreynolds7"},"factor":{"title":"Factor","owner":"catb0t"},"false":{"title":"False","owner":"edukisto"},"firestore-security-rules":{"title":"Firestore security rules","require":"clike","owner":"RunDevelopment"},"flow":{"title":"Flow","require":"javascript","owner":"Golmote"},"fortran":{"title":"Fortran","owner":"Golmote"},"ftl":{"title":"FreeMarker Template Language","require":"markup-templating","owner":"RunDevelopment"},"gml":{"title":"GameMaker Language","alias":"gamemakerlanguage","require":"clike","owner":"LiarOnce"},"gap":{"title":"GAP (CAS)","owner":"RunDevelopment"},"gcode":{"title":"G-code","owner":"RunDevelopment"},"gdscript":{"title":"GDScript","owner":"RunDevelopment"},"gedcom":{"title":"GEDCOM","owner":"Golmote"},"gherkin":{"title":"Gherkin","owner":"hason"},"git":{"title":"Git","owner":"lgiraudel"},"glsl":{"title":"GLSL","require":"c","owner":"Golmote"},"gn":{"title":"GN","alias":"gni","owner":"RunDevelopment"},"go":{"title":"Go","require":"clike","owner":"arnehormann"},"go-module":{"title":"Go module","alias":"go-mod","owner":"RunDevelopment"},"graphql":{"title":"GraphQL","optional":"markdown","owner":"Golmote"},"groovy":{"title":"Groovy","require":"clike","owner":"robfletcher"},"haml":{"title":"Haml","require":"ruby","optional":["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],"owner":"Golmote"},"handlebars":{"title":"Handlebars","require":"markup-templating","alias":"hbs","owner":"Golmote"},"haskell":{"title":"Haskell","alias":"hs","owner":"bholst"},"haxe":{"title":"Haxe","require":"clike","optional":"regex","owner":"Golmote"},"hcl":{"title":"HCL","owner":"outsideris"},"hlsl":{"title":"HLSL","require":"c","owner":"RunDevelopment"},"hoon":{"title":"Hoon","owner":"matildepark"},"http":{"title":"HTTP","optional":["csp","css","hpkp","hsts","javascript","json","markup","uri"],"owner":"danielgtaylor"},"hpkp":{"title":"HTTP Public-Key-Pins","owner":"ScottHelme"},"hsts":{"title":"HTTP Strict-Transport-Security","owner":"ScottHelme"},"ichigojam":{"title":"IchigoJam","owner":"BlueCocoa"},"icon":{"title":"Icon","owner":"Golmote"},"icu-message-format":{"title":"ICU Message Format","owner":"RunDevelopment"},"idris":{"title":"Idris","alias":"idr","owner":"KeenS","require":"haskell"},"ignore":{"title":".ignore","owner":"osipxd","alias":["gitignore","hgignore","npmignore"],"aliasTitles":{"gitignore":".gitignore","hgignore":".hgignore","npmignore":".npmignore"}},"inform7":{"title":"Inform 7","owner":"Golmote"},"ini":{"title":"Ini","owner":"aviaryan"},"io":{"title":"Io","owner":"AlesTsurko"},"j":{"title":"J","owner":"Golmote"},"java":{"title":"Java","require":"clike","owner":"sherblot"},"javadoc":{"title":"JavaDoc","require":["markup","java","javadoclike"],"modify":"java","optional":"scala","owner":"RunDevelopment"},"javadoclike":{"title":"JavaDoc-like","modify":["java","javascript","php"],"owner":"RunDevelopment"},"javastacktrace":{"title":"Java stack trace","owner":"RunDevelopment"},"jexl":{"title":"Jexl","owner":"czosel"},"jolie":{"title":"Jolie","require":"clike","owner":"thesave"},"jq":{"title":"JQ","owner":"RunDevelopment"},"jsdoc":{"title":"JSDoc","require":["javascript","javadoclike","typescript"],"modify":"javascript","optional":["actionscript","coffeescript"],"owner":"RunDevelopment"},"js-extras":{"title":"JS Extras","require":"javascript","modify":"javascript","optional":["actionscript","coffeescript","flow","n4js","typescript"],"owner":"RunDevelopment"},"json":{"title":"JSON","alias":"webmanifest","aliasTitles":{"webmanifest":"Web App Manifest"},"owner":"CupOfTea696"},"json5":{"title":"JSON5","require":"json","owner":"RunDevelopment"},"jsonp":{"title":"JSONP","require":"json","owner":"RunDevelopment"},"jsstacktrace":{"title":"JS stack trace","owner":"sbrl"},"js-templates":{"title":"JS Templates","require":"javascript","modify":"javascript","optional":["css","css-extras","graphql","markdown","markup","sql"],"owner":"RunDevelopment"},"julia":{"title":"Julia","owner":"cdagnino"},"keepalived":{"title":"Keepalived Configure","owner":"dev-itsheng"},"keyman":{"title":"Keyman","owner":"mcdurdin"},"kotlin":{"title":"Kotlin","alias":["kt","kts"],"aliasTitles":{"kts":"Kotlin Script"},"require":"clike","owner":"Golmote"},"kumir":{"title":"KuMir (КуМир)","alias":"kum","owner":"edukisto"},"kusto":{"title":"Kusto","owner":"RunDevelopment"},"latex":{"title":"LaTeX","alias":["tex","context"],"aliasTitles":{"tex":"TeX","context":"ConTeXt"},"owner":"japborst"},"latte":{"title":"Latte","require":["clike","markup-templating","php"],"owner":"nette"},"less":{"title":"Less","require":"css","optional":"css-extras","owner":"Golmote"},"lilypond":{"title":"LilyPond","require":"scheme","alias":"ly","owner":"RunDevelopment"},"liquid":{"title":"Liquid","require":"markup-templating","owner":"cinhtau"},"lisp":{"title":"Lisp","alias":["emacs","elisp","emacs-lisp"],"owner":"JuanCaicedo"},"livescript":{"title":"LiveScript","owner":"Golmote"},"llvm":{"title":"LLVM IR","owner":"porglezomp"},"log":{"title":"Log file","optional":"javastacktrace","owner":"RunDevelopment"},"lolcode":{"title":"LOLCODE","owner":"Golmote"},"lua":{"title":"Lua","owner":"Golmote"},"magma":{"title":"Magma (CAS)","owner":"RunDevelopment"},"makefile":{"title":"Makefile","owner":"Golmote"},"markdown":{"title":"Markdown","require":"markup","optional":"yaml","alias":"md","owner":"Golmote"},"markup-templating":{"title":"Markup templating","require":"markup","owner":"Golmote"},"matlab":{"title":"MATLAB","owner":"Golmote"},"maxscript":{"title":"MAXScript","owner":"RunDevelopment"},"mel":{"title":"MEL","owner":"Golmote"},"mermaid":{"title":"Mermaid","owner":"RunDevelopment"},"mizar":{"title":"Mizar","owner":"Golmote"},"mongodb":{"title":"MongoDB","owner":"airs0urce","require":"javascript"},"monkey":{"title":"Monkey","owner":"Golmote"},"moonscript":{"title":"MoonScript","alias":"moon","owner":"RunDevelopment"},"n1ql":{"title":"N1QL","owner":"TMWilds"},"n4js":{"title":"N4JS","require":"javascript","optional":"jsdoc","alias":"n4jsd","owner":"bsmith-n4"},"nand2tetris-hdl":{"title":"Nand To Tetris HDL","owner":"stephanmax"},"naniscript":{"title":"Naninovel Script","owner":"Elringus","alias":"nani"},"nasm":{"title":"NASM","owner":"rbmj"},"neon":{"title":"NEON","owner":"nette"},"nevod":{"title":"Nevod","owner":"nezaboodka"},"nginx":{"title":"nginx","owner":"volado"},"nim":{"title":"Nim","owner":"Golmote"},"nix":{"title":"Nix","owner":"Golmote"},"nsis":{"title":"NSIS","owner":"idleberg"},"objectivec":{"title":"Objective-C","require":"c","alias":"objc","owner":"uranusjr"},"ocaml":{"title":"OCaml","owner":"Golmote"},"opencl":{"title":"OpenCL","require":"c","modify":["c","cpp"],"owner":"Milania1"},"openqasm":{"title":"OpenQasm","alias":"qasm","owner":"RunDevelopment"},"oz":{"title":"Oz","owner":"Golmote"},"parigp":{"title":"PARI/GP","owner":"Golmote"},"parser":{"title":"Parser","require":"markup","owner":"Golmote"},"pascal":{"title":"Pascal","alias":"objectpascal","aliasTitles":{"objectpascal":"Object Pascal"},"owner":"Golmote"},"pascaligo":{"title":"Pascaligo","owner":"DefinitelyNotAGoat"},"psl":{"title":"PATROL Scripting Language","owner":"bertysentry"},"pcaxis":{"title":"PC-Axis","alias":"px","owner":"RunDevelopment"},"peoplecode":{"title":"PeopleCode","alias":"pcode","owner":"RunDevelopment"},"perl":{"title":"Perl","owner":"Golmote"},"php":{"title":"PHP","require":"markup-templating","owner":"milesj"},"phpdoc":{"title":"PHPDoc","require":["php","javadoclike"],"modify":"php","owner":"RunDevelopment"},"php-extras":{"title":"PHP Extras","require":"php","modify":"php","owner":"milesj"},"plsql":{"title":"PL/SQL","require":"sql","owner":"Golmote"},"powerquery":{"title":"PowerQuery","alias":["pq","mscript"],"owner":"peterbud"},"powershell":{"title":"PowerShell","owner":"nauzilus"},"processing":{"title":"Processing","require":"clike","owner":"Golmote"},"prolog":{"title":"Prolog","owner":"Golmote"},"promql":{"title":"PromQL","owner":"arendjr"},"properties":{"title":".properties","owner":"Golmote"},"protobuf":{"title":"Protocol Buffers","require":"clike","owner":"just-boris"},"pug":{"title":"Pug","require":["markup","javascript"],"optional":["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],"owner":"Golmote"},"puppet":{"title":"Puppet","owner":"Golmote"},"pure":{"title":"Pure","optional":["c","cpp","fortran"],"owner":"Golmote"},"purebasic":{"title":"PureBasic","require":"clike","alias":"pbfasm","owner":"HeX0R101"},"purescript":{"title":"PureScript","require":"haskell","alias":"purs","owner":"sriharshachilakapati"},"python":{"title":"Python","alias":"py","owner":"multipetros"},"qsharp":{"title":"Q#","require":"clike","alias":"qs","owner":"fedonman"},"q":{"title":"Q (kdb+ database)","owner":"Golmote"},"qml":{"title":"QML","require":"javascript","owner":"RunDevelopment"},"qore":{"title":"Qore","require":"clike","owner":"temnroegg"},"r":{"title":"R","owner":"Golmote"},"racket":{"title":"Racket","require":"scheme","alias":"rkt","owner":"RunDevelopment"},"cshtml":{"title":"Razor C#","alias":"razor","require":["markup","csharp"],"optional":["css","css-extras","javascript","js-extras"],"owner":"RunDevelopment"},"jsx":{"title":"React JSX","require":["markup","javascript"],"optional":["jsdoc","js-extras","js-templates"],"owner":"vkbansal"},"tsx":{"title":"React TSX","require":["jsx","typescript"]},"reason":{"title":"Reason","require":"clike","owner":"Golmote"},"regex":{"title":"Regex","owner":"RunDevelopment"},"rego":{"title":"Rego","owner":"JordanSh"},"renpy":{"title":"Ren'py","alias":"rpy","owner":"HyuchiaDiego"},"rest":{"title":"reST (reStructuredText)","owner":"Golmote"},"rip":{"title":"Rip","owner":"ravinggenius"},"roboconf":{"title":"Roboconf","owner":"Golmote"},"robotframework":{"title":"Robot Framework","alias":"robot","owner":"RunDevelopment"},"ruby":{"title":"Ruby","require":"clike","alias":"rb","owner":"samflores"},"rust":{"title":"Rust","owner":"Golmote"},"sas":{"title":"SAS","optional":["groovy","lua","sql"],"owner":"Golmote"},"sass":{"title":"Sass (Sass)","require":"css","optional":"css-extras","owner":"Golmote"},"scss":{"title":"Sass (Scss)","require":"css","optional":"css-extras","owner":"MoOx"},"scala":{"title":"Scala","require":"java","owner":"jozic"},"scheme":{"title":"Scheme","owner":"bacchus123"},"shell-session":{"title":"Shell session","require":"bash","alias":["sh-session","shellsession"],"owner":"RunDevelopment"},"smali":{"title":"Smali","owner":"RunDevelopment"},"smalltalk":{"title":"Smalltalk","owner":"Golmote"},"smarty":{"title":"Smarty","require":"markup-templating","optional":"php","owner":"Golmote"},"sml":{"title":"SML","alias":"smlnj","aliasTitles":{"smlnj":"SML/NJ"},"owner":"RunDevelopment"},"solidity":{"title":"Solidity (Ethereum)","alias":"sol","require":"clike","owner":"glachaud"},"solution-file":{"title":"Solution file","alias":"sln","owner":"RunDevelopment"},"soy":{"title":"Soy (Closure Template)","require":"markup-templating","owner":"Golmote"},"sparql":{"title":"SPARQL","require":"turtle","owner":"Triply-Dev","alias":"rq"},"splunk-spl":{"title":"Splunk SPL","owner":"RunDevelopment"},"sqf":{"title":"SQF: Status Quo Function (Arma 3)","require":"clike","owner":"RunDevelopment"},"sql":{"title":"SQL","owner":"multipetros"},"squirrel":{"title":"Squirrel","require":"clike","owner":"RunDevelopment"},"stan":{"title":"Stan","owner":"RunDevelopment"},"iecst":{"title":"Structured Text (IEC 61131-3)","owner":"serhioromano"},"stylus":{"title":"Stylus","owner":"vkbansal"},"swift":{"title":"Swift","owner":"chrischares"},"systemd":{"title":"Systemd configuration file","owner":"RunDevelopment"},"t4-templating":{"title":"T4 templating","owner":"RunDevelopment"},"t4-cs":{"title":"T4 Text Templates (C#)","require":["t4-templating","csharp"],"alias":"t4","owner":"RunDevelopment"},"t4-vb":{"title":"T4 Text Templates (VB)","require":["t4-templating","vbnet"],"owner":"RunDevelopment"},"tap":{"title":"TAP","owner":"isaacs","require":"yaml"},"tcl":{"title":"Tcl","owner":"PeterChaplin"},"tt2":{"title":"Template Toolkit 2","require":["clike","markup-templating"],"owner":"gflohr"},"textile":{"title":"Textile","require":"markup","optional":"css","owner":"Golmote"},"toml":{"title":"TOML","owner":"RunDevelopment"},"tremor":{"title":"Tremor","alias":["trickle","troy"],"owner":"darach","aliasTitles":{"trickle":"trickle","troy":"troy"}},"turtle":{"title":"Turtle","alias":"trig","aliasTitles":{"trig":"TriG"},"owner":"jakubklimek"},"twig":{"title":"Twig","require":"markup-templating","owner":"brandonkelly"},"typescript":{"title":"TypeScript","require":"javascript","optional":"js-templates","alias":"ts","owner":"vkbansal"},"typoscript":{"title":"TypoScript","alias":"tsconfig","aliasTitles":{"tsconfig":"TSConfig"},"owner":"dkern"},"unrealscript":{"title":"UnrealScript","alias":["uscript","uc"],"owner":"RunDevelopment"},"uorazor":{"title":"UO Razor Script","owner":"jaseowns"},"uri":{"title":"URI","alias":"url","aliasTitles":{"url":"URL"},"owner":"RunDevelopment"},"v":{"title":"V","require":"clike","owner":"taggon"},"vala":{"title":"Vala","require":"clike","optional":"regex","owner":"TemplarVolk"},"vbnet":{"title":"VB.Net","require":"basic","owner":"Bigsby"},"velocity":{"title":"Velocity","require":"markup","owner":"Golmote"},"verilog":{"title":"Verilog","owner":"a-rey"},"vhdl":{"title":"VHDL","owner":"a-rey"},"vim":{"title":"vim","owner":"westonganger"},"visual-basic":{"title":"Visual Basic","alias":["vb","vba"],"aliasTitles":{"vba":"VBA"},"owner":"Golmote"},"warpscript":{"title":"WarpScript","owner":"RunDevelopment"},"wasm":{"title":"WebAssembly","owner":"Golmote"},"web-idl":{"title":"Web IDL","alias":"webidl","owner":"RunDevelopment"},"wiki":{"title":"Wiki markup","require":"markup","owner":"Golmote"},"wolfram":{"title":"Wolfram language","alias":["mathematica","nb","wl"],"aliasTitles":{"mathematica":"Mathematica","nb":"Mathematica Notebook"},"owner":"msollami"},"wren":{"title":"Wren","owner":"clsource"},"xeora":{"title":"Xeora","require":"markup","alias":"xeoracube","aliasTitles":{"xeoracube":"XeoraCube"},"owner":"freakmaxi"},"xml-doc":{"title":"XML doc (.net)","require":"markup","modify":["csharp","fsharp","vbnet"],"owner":"RunDevelopment"},"xojo":{"title":"Xojo (REALbasic)","owner":"Golmote"},"xquery":{"title":"XQuery","require":"markup","owner":"Golmote"},"yaml":{"title":"YAML","alias":"yml","owner":"hason"},"yang":{"title":"YANG","owner":"RunDevelopment"},"zig":{"title":"Zig","owner":"RunDevelopment"}},"plugins":{"meta":{"path":"plugins/{id}/prism-{id}","link":"plugins/{id}/"},"line-highlight":{"title":"Line Highlight","description":"Highlights specific lines and/or line ranges."},"line-numbers":{"title":"Line Numbers","description":"Line number at the beginning of code lines.","owner":"kuba-kubula"},"show-invisibles":{"title":"Show Invisibles","description":"Show hidden characters such as tabs and line breaks.","optional":["autolinker","data-uri-highlight"]},"autolinker":{"title":"Autolinker","description":"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},"wpd":{"title":"WebPlatform Docs","description":"Makes tokens link to WebPlatform.org documentation. The links open in a new tab."},"custom-class":{"title":"Custom Class","description":"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.","owner":"dvkndn","noCSS":true},"file-highlight":{"title":"File Highlight","description":"Fetch external files and highlight them with Prism. Used on the Prism website itself.","noCSS":true},"show-language":{"title":"Show Language","description":"Display the highlighted language in code blocks (inline code does not show the label).","owner":"nauzilus","noCSS":true,"require":"toolbar"},"jsonp-highlight":{"title":"JSONP Highlight","description":"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).","noCSS":true,"owner":"nauzilus"},"highlight-keywords":{"title":"Highlight Keywords","description":"Adds special CSS classes for each keyword for fine-grained highlighting.","owner":"vkbansal","noCSS":true},"remove-initial-line-feed":{"title":"Remove initial line feed","description":"Removes the initial line feed in code blocks.","owner":"Golmote","noCSS":true},"inline-color":{"title":"Inline color","description":"Adds a small inline preview for colors in style sheets.","require":"css-extras","owner":"RunDevelopment"},"previewers":{"title":"Previewers","description":"Previewers for angles, colors, gradients, easing and time.","require":"css-extras","owner":"Golmote"},"autoloader":{"title":"Autoloader","description":"Automatically loads the needed languages to highlight the code blocks.","owner":"Golmote","noCSS":true},"keep-markup":{"title":"Keep Markup","description":"Prevents custom markup from being dropped out during highlighting.","owner":"Golmote","optional":"normalize-whitespace","noCSS":true},"command-line":{"title":"Command Line","description":"Display a command line with a prompt and, optionally, the output/response from the commands.","owner":"chriswells0"},"unescaped-markup":{"title":"Unescaped Markup","description":"Write markup without having to escape anything."},"normalize-whitespace":{"title":"Normalize Whitespace","description":"Supports multiple operations to normalize whitespace in code blocks.","owner":"zeitgeist87","optional":"unescaped-markup","noCSS":true},"data-uri-highlight":{"title":"Data-URI Highlight","description":"Highlights data-URI contents.","owner":"Golmote","noCSS":true},"toolbar":{"title":"Toolbar","description":"Attach a toolbar for plugins to easily register buttons on the top of a code block.","owner":"mAAdhaTTah"},"copy-to-clipboard":{"title":"Copy to Clipboard Button","description":"Add a button that copies the code block to the clipboard when clicked.","owner":"mAAdhaTTah","require":"toolbar","noCSS":true},"download-button":{"title":"Download Button","description":"A button in the toolbar of a code block adding a convenient way to download a code file.","owner":"Golmote","require":"toolbar","noCSS":true},"match-braces":{"title":"Match braces","description":"Highlights matching braces.","owner":"RunDevelopment"},"diff-highlight":{"title":"Diff Highlight","description":"Highlights the code inside diff blocks.","owner":"RunDevelopment","require":"diff"},"filter-highlight-all":{"title":"Filter highlightAll","description":"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.","owner":"RunDevelopment","noCSS":true},"treeview":{"title":"Treeview","description":"A language with special styles to highlight file system tree structures.","owner":"Golmote"}}}; +var components = {"core":{"meta":{"path":"components/prism-core.js","option":"mandatory"},"core":"Core"},"themes":{"meta":{"path":"themes/{id}.css","link":"index.html?theme={id}","exclusive":true},"prism":{"title":"Default","option":"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{"title":"Okaidia","owner":"ocodia"},"prism-twilight":{"title":"Twilight","owner":"remybach"},"prism-coy":{"title":"Coy","owner":"tshedor"},"prism-solarizedlight":{"title":"Solarized Light","owner":"hectormatos2011 "},"prism-tomorrow":{"title":"Tomorrow Night","owner":"Rosey"}},"languages":{"meta":{"path":"components/prism-{id}","noCSS":true,"examplesPath":"examples/prism-{id}","addCheckAll":true},"markup":{"title":"Markup","alias":["html","xml","svg","mathml","ssml","atom","rss"],"aliasTitles":{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","ssml":"SSML","atom":"Atom","rss":"RSS"},"option":"default"},"css":{"title":"CSS","option":"default","modify":"markup"},"clike":{"title":"C-like","option":"default"},"javascript":{"title":"JavaScript","require":"clike","modify":"markup","optional":"regex","alias":"js","option":"default"},"abap":{"title":"ABAP","owner":"dellagustin"},"abnf":{"title":"ABNF","owner":"RunDevelopment"},"actionscript":{"title":"ActionScript","require":"javascript","modify":"markup","owner":"Golmote"},"ada":{"title":"Ada","owner":"Lucretia"},"agda":{"title":"Agda","owner":"xy-ren"},"al":{"title":"AL","owner":"RunDevelopment"},"antlr4":{"title":"ANTLR4","alias":"g4","owner":"RunDevelopment"},"apacheconf":{"title":"Apache Configuration","owner":"GuiTeK"},"apex":{"title":"Apex","require":["clike","sql"],"owner":"RunDevelopment"},"apl":{"title":"APL","owner":"ngn"},"applescript":{"title":"AppleScript","owner":"Golmote"},"aql":{"title":"AQL","owner":"RunDevelopment"},"arduino":{"title":"Arduino","require":"cpp","alias":"ino","owner":"dkern"},"arff":{"title":"ARFF","owner":"Golmote"},"armasm":{"title":"ARM Assembly","alias":"arm-asm","owner":"RunDevelopment"},"arturo":{"title":"Arturo","alias":"art","optional":["bash","css","javascript","markup","markdown","sql"],"owner":"drkameleon"},"asciidoc":{"alias":"adoc","title":"AsciiDoc","owner":"Golmote"},"aspnet":{"title":"ASP.NET (C#)","require":["markup","csharp"],"owner":"nauzilus"},"asm6502":{"title":"6502 Assembly","owner":"kzurawel"},"asmatmel":{"title":"Atmel AVR Assembly","owner":"cerkit"},"autohotkey":{"title":"AutoHotkey","owner":"aviaryan"},"autoit":{"title":"AutoIt","owner":"Golmote"},"avisynth":{"title":"AviSynth","alias":"avs","owner":"Zinfidel"},"avro-idl":{"title":"Avro IDL","alias":"avdl","owner":"RunDevelopment"},"awk":{"title":"AWK","alias":"gawk","aliasTitles":{"gawk":"GAWK"},"owner":"RunDevelopment"},"bash":{"title":"Bash","alias":"shell","aliasTitles":{"shell":"Shell"},"owner":"zeitgeist87"},"basic":{"title":"BASIC","owner":"Golmote"},"batch":{"title":"Batch","owner":"Golmote"},"bbcode":{"title":"BBcode","alias":"shortcode","aliasTitles":{"shortcode":"Shortcode"},"owner":"RunDevelopment"},"bicep":{"title":"Bicep","owner":"johnnyreilly"},"birb":{"title":"Birb","require":"clike","owner":"Calamity210"},"bison":{"title":"Bison","require":"c","owner":"Golmote"},"bnf":{"title":"BNF","alias":"rbnf","aliasTitles":{"rbnf":"RBNF"},"owner":"RunDevelopment"},"brainfuck":{"title":"Brainfuck","owner":"Golmote"},"brightscript":{"title":"BrightScript","owner":"RunDevelopment"},"bro":{"title":"Bro","owner":"wayward710"},"bsl":{"title":"BSL (1C:Enterprise)","alias":"oscript","aliasTitles":{"oscript":"OneScript"},"owner":"Diversus23"},"c":{"title":"C","require":"clike","owner":"zeitgeist87"},"csharp":{"title":"C#","require":"clike","alias":["cs","dotnet"],"owner":"mvalipour"},"cpp":{"title":"C++","require":"c","owner":"zeitgeist87"},"cfscript":{"title":"CFScript","require":"clike","alias":"cfc","owner":"mjclemente"},"chaiscript":{"title":"ChaiScript","require":["clike","cpp"],"owner":"RunDevelopment"},"cil":{"title":"CIL","owner":"sbrl"},"clojure":{"title":"Clojure","owner":"troglotit"},"cmake":{"title":"CMake","owner":"mjrogozinski"},"cobol":{"title":"COBOL","owner":"RunDevelopment"},"coffeescript":{"title":"CoffeeScript","require":"javascript","alias":"coffee","owner":"R-osey"},"concurnas":{"title":"Concurnas","alias":"conc","owner":"jasontatton"},"csp":{"title":"Content-Security-Policy","owner":"ScottHelme"},"cooklang":{"title":"Cooklang","owner":"ahue"},"coq":{"title":"Coq","owner":"RunDevelopment"},"crystal":{"title":"Crystal","require":"ruby","owner":"MakeNowJust"},"css-extras":{"title":"CSS Extras","require":"css","modify":"css","owner":"milesj"},"csv":{"title":"CSV","owner":"RunDevelopment"},"cue":{"title":"CUE","owner":"RunDevelopment"},"cypher":{"title":"Cypher","owner":"RunDevelopment"},"d":{"title":"D","require":"clike","owner":"Golmote"},"dart":{"title":"Dart","require":"clike","owner":"Golmote"},"dataweave":{"title":"DataWeave","owner":"machaval"},"dax":{"title":"DAX","owner":"peterbud"},"dhall":{"title":"Dhall","owner":"RunDevelopment"},"diff":{"title":"Diff","owner":"uranusjr"},"django":{"title":"Django/Jinja2","require":"markup-templating","alias":"jinja2","owner":"romanvm"},"dns-zone-file":{"title":"DNS zone file","owner":"RunDevelopment","alias":"dns-zone"},"docker":{"title":"Docker","alias":"dockerfile","owner":"JustinBeckwith"},"dot":{"title":"DOT (Graphviz)","alias":"gv","optional":"markup","owner":"RunDevelopment"},"ebnf":{"title":"EBNF","owner":"RunDevelopment"},"editorconfig":{"title":"EditorConfig","owner":"osipxd"},"eiffel":{"title":"Eiffel","owner":"Conaclos"},"ejs":{"title":"EJS","require":["javascript","markup-templating"],"owner":"RunDevelopment","alias":"eta","aliasTitles":{"eta":"Eta"}},"elixir":{"title":"Elixir","owner":"Golmote"},"elm":{"title":"Elm","owner":"zwilias"},"etlua":{"title":"Embedded Lua templating","require":["lua","markup-templating"],"owner":"RunDevelopment"},"erb":{"title":"ERB","require":["ruby","markup-templating"],"owner":"Golmote"},"erlang":{"title":"Erlang","owner":"Golmote"},"excel-formula":{"title":"Excel Formula","alias":["xlsx","xls"],"owner":"RunDevelopment"},"fsharp":{"title":"F#","require":"clike","owner":"simonreynolds7"},"factor":{"title":"Factor","owner":"catb0t"},"false":{"title":"False","owner":"edukisto"},"firestore-security-rules":{"title":"Firestore security rules","require":"clike","owner":"RunDevelopment"},"flow":{"title":"Flow","require":"javascript","owner":"Golmote"},"fortran":{"title":"Fortran","owner":"Golmote"},"ftl":{"title":"FreeMarker Template Language","require":"markup-templating","owner":"RunDevelopment"},"gml":{"title":"GameMaker Language","alias":"gamemakerlanguage","require":"clike","owner":"LiarOnce"},"gap":{"title":"GAP (CAS)","owner":"RunDevelopment"},"gcode":{"title":"G-code","owner":"RunDevelopment"},"gdscript":{"title":"GDScript","owner":"RunDevelopment"},"gedcom":{"title":"GEDCOM","owner":"Golmote"},"gettext":{"title":"gettext","alias":"po","owner":"RunDevelopment"},"gherkin":{"title":"Gherkin","owner":"hason"},"git":{"title":"Git","owner":"lgiraudel"},"glsl":{"title":"GLSL","require":"c","owner":"Golmote"},"gn":{"title":"GN","alias":"gni","owner":"RunDevelopment"},"linker-script":{"title":"GNU Linker Script","alias":"ld","owner":"RunDevelopment"},"go":{"title":"Go","require":"clike","owner":"arnehormann"},"go-module":{"title":"Go module","alias":"go-mod","owner":"RunDevelopment"},"graphql":{"title":"GraphQL","optional":"markdown","owner":"Golmote"},"groovy":{"title":"Groovy","require":"clike","owner":"robfletcher"},"haml":{"title":"Haml","require":"ruby","optional":["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],"owner":"Golmote"},"handlebars":{"title":"Handlebars","require":"markup-templating","alias":["hbs","mustache"],"aliasTitles":{"mustache":"Mustache"},"owner":"Golmote"},"haskell":{"title":"Haskell","alias":"hs","owner":"bholst"},"haxe":{"title":"Haxe","require":"clike","optional":"regex","owner":"Golmote"},"hcl":{"title":"HCL","owner":"outsideris"},"hlsl":{"title":"HLSL","require":"c","owner":"RunDevelopment"},"hoon":{"title":"Hoon","owner":"matildepark"},"http":{"title":"HTTP","optional":["csp","css","hpkp","hsts","javascript","json","markup","uri"],"owner":"danielgtaylor"},"hpkp":{"title":"HTTP Public-Key-Pins","owner":"ScottHelme"},"hsts":{"title":"HTTP Strict-Transport-Security","owner":"ScottHelme"},"ichigojam":{"title":"IchigoJam","owner":"BlueCocoa"},"icon":{"title":"Icon","owner":"Golmote"},"icu-message-format":{"title":"ICU Message Format","owner":"RunDevelopment"},"idris":{"title":"Idris","alias":"idr","owner":"KeenS","require":"haskell"},"ignore":{"title":".ignore","owner":"osipxd","alias":["gitignore","hgignore","npmignore"],"aliasTitles":{"gitignore":".gitignore","hgignore":".hgignore","npmignore":".npmignore"}},"inform7":{"title":"Inform 7","owner":"Golmote"},"ini":{"title":"Ini","owner":"aviaryan"},"io":{"title":"Io","owner":"AlesTsurko"},"j":{"title":"J","owner":"Golmote"},"java":{"title":"Java","require":"clike","owner":"sherblot"},"javadoc":{"title":"JavaDoc","require":["markup","java","javadoclike"],"modify":"java","optional":"scala","owner":"RunDevelopment"},"javadoclike":{"title":"JavaDoc-like","modify":["java","javascript","php"],"owner":"RunDevelopment"},"javastacktrace":{"title":"Java stack trace","owner":"RunDevelopment"},"jexl":{"title":"Jexl","owner":"czosel"},"jolie":{"title":"Jolie","require":"clike","owner":"thesave"},"jq":{"title":"JQ","owner":"RunDevelopment"},"jsdoc":{"title":"JSDoc","require":["javascript","javadoclike","typescript"],"modify":"javascript","optional":["actionscript","coffeescript"],"owner":"RunDevelopment"},"js-extras":{"title":"JS Extras","require":"javascript","modify":"javascript","optional":["actionscript","coffeescript","flow","n4js","typescript"],"owner":"RunDevelopment"},"json":{"title":"JSON","alias":"webmanifest","aliasTitles":{"webmanifest":"Web App Manifest"},"owner":"CupOfTea696"},"json5":{"title":"JSON5","require":"json","owner":"RunDevelopment"},"jsonp":{"title":"JSONP","require":"json","owner":"RunDevelopment"},"jsstacktrace":{"title":"JS stack trace","owner":"sbrl"},"js-templates":{"title":"JS Templates","require":"javascript","modify":"javascript","optional":["css","css-extras","graphql","markdown","markup","sql"],"owner":"RunDevelopment"},"julia":{"title":"Julia","owner":"cdagnino"},"keepalived":{"title":"Keepalived Configure","owner":"dev-itsheng"},"keyman":{"title":"Keyman","owner":"mcdurdin"},"kotlin":{"title":"Kotlin","alias":["kt","kts"],"aliasTitles":{"kts":"Kotlin Script"},"require":"clike","owner":"Golmote"},"kumir":{"title":"KuMir (КуМир)","alias":"kum","owner":"edukisto"},"kusto":{"title":"Kusto","owner":"RunDevelopment"},"latex":{"title":"LaTeX","alias":["tex","context"],"aliasTitles":{"tex":"TeX","context":"ConTeXt"},"owner":"japborst"},"latte":{"title":"Latte","require":["clike","markup-templating","php"],"owner":"nette"},"less":{"title":"Less","require":"css","optional":"css-extras","owner":"Golmote"},"lilypond":{"title":"LilyPond","require":"scheme","alias":"ly","owner":"RunDevelopment"},"liquid":{"title":"Liquid","require":"markup-templating","owner":"cinhtau"},"lisp":{"title":"Lisp","alias":["emacs","elisp","emacs-lisp"],"owner":"JuanCaicedo"},"livescript":{"title":"LiveScript","owner":"Golmote"},"llvm":{"title":"LLVM IR","owner":"porglezomp"},"log":{"title":"Log file","optional":"javastacktrace","owner":"RunDevelopment"},"lolcode":{"title":"LOLCODE","owner":"Golmote"},"lua":{"title":"Lua","owner":"Golmote"},"magma":{"title":"Magma (CAS)","owner":"RunDevelopment"},"makefile":{"title":"Makefile","owner":"Golmote"},"markdown":{"title":"Markdown","require":"markup","optional":"yaml","alias":"md","owner":"Golmote"},"markup-templating":{"title":"Markup templating","require":"markup","owner":"Golmote"},"mata":{"title":"Mata","owner":"RunDevelopment"},"matlab":{"title":"MATLAB","owner":"Golmote"},"maxscript":{"title":"MAXScript","owner":"RunDevelopment"},"mel":{"title":"MEL","owner":"Golmote"},"mermaid":{"title":"Mermaid","owner":"RunDevelopment"},"mizar":{"title":"Mizar","owner":"Golmote"},"mongodb":{"title":"MongoDB","owner":"airs0urce","require":"javascript"},"monkey":{"title":"Monkey","owner":"Golmote"},"moonscript":{"title":"MoonScript","alias":"moon","owner":"RunDevelopment"},"n1ql":{"title":"N1QL","owner":"TMWilds"},"n4js":{"title":"N4JS","require":"javascript","optional":"jsdoc","alias":"n4jsd","owner":"bsmith-n4"},"nand2tetris-hdl":{"title":"Nand To Tetris HDL","owner":"stephanmax"},"naniscript":{"title":"Naninovel Script","owner":"Elringus","alias":"nani"},"nasm":{"title":"NASM","owner":"rbmj"},"neon":{"title":"NEON","owner":"nette"},"nevod":{"title":"Nevod","owner":"nezaboodka"},"nginx":{"title":"nginx","owner":"volado"},"nim":{"title":"Nim","owner":"Golmote"},"nix":{"title":"Nix","owner":"Golmote"},"nsis":{"title":"NSIS","owner":"idleberg"},"objectivec":{"title":"Objective-C","require":"c","alias":"objc","owner":"uranusjr"},"ocaml":{"title":"OCaml","owner":"Golmote"},"odin":{"title":"Odin","owner":"edukisto"},"opencl":{"title":"OpenCL","require":"c","modify":["c","cpp"],"owner":"Milania1"},"openqasm":{"title":"OpenQasm","alias":"qasm","owner":"RunDevelopment"},"oz":{"title":"Oz","owner":"Golmote"},"parigp":{"title":"PARI/GP","owner":"Golmote"},"parser":{"title":"Parser","require":"markup","owner":"Golmote"},"pascal":{"title":"Pascal","alias":"objectpascal","aliasTitles":{"objectpascal":"Object Pascal"},"owner":"Golmote"},"pascaligo":{"title":"Pascaligo","owner":"DefinitelyNotAGoat"},"psl":{"title":"PATROL Scripting Language","owner":"bertysentry"},"pcaxis":{"title":"PC-Axis","alias":"px","owner":"RunDevelopment"},"peoplecode":{"title":"PeopleCode","alias":"pcode","owner":"RunDevelopment"},"perl":{"title":"Perl","owner":"Golmote"},"php":{"title":"PHP","require":"markup-templating","owner":"milesj"},"phpdoc":{"title":"PHPDoc","require":["php","javadoclike"],"modify":"php","owner":"RunDevelopment"},"php-extras":{"title":"PHP Extras","require":"php","modify":"php","owner":"milesj"},"plant-uml":{"title":"PlantUML","alias":"plantuml","owner":"RunDevelopment"},"plsql":{"title":"PL/SQL","require":"sql","owner":"Golmote"},"powerquery":{"title":"PowerQuery","alias":["pq","mscript"],"owner":"peterbud"},"powershell":{"title":"PowerShell","owner":"nauzilus"},"processing":{"title":"Processing","require":"clike","owner":"Golmote"},"prolog":{"title":"Prolog","owner":"Golmote"},"promql":{"title":"PromQL","owner":"arendjr"},"properties":{"title":".properties","owner":"Golmote"},"protobuf":{"title":"Protocol Buffers","require":"clike","owner":"just-boris"},"pug":{"title":"Pug","require":["markup","javascript"],"optional":["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],"owner":"Golmote"},"puppet":{"title":"Puppet","owner":"Golmote"},"pure":{"title":"Pure","optional":["c","cpp","fortran"],"owner":"Golmote"},"purebasic":{"title":"PureBasic","require":"clike","alias":"pbfasm","owner":"HeX0R101"},"purescript":{"title":"PureScript","require":"haskell","alias":"purs","owner":"sriharshachilakapati"},"python":{"title":"Python","alias":"py","owner":"multipetros"},"qsharp":{"title":"Q#","require":"clike","alias":"qs","owner":"fedonman"},"q":{"title":"Q (kdb+ database)","owner":"Golmote"},"qml":{"title":"QML","require":"javascript","owner":"RunDevelopment"},"qore":{"title":"Qore","require":"clike","owner":"temnroegg"},"r":{"title":"R","owner":"Golmote"},"racket":{"title":"Racket","require":"scheme","alias":"rkt","owner":"RunDevelopment"},"cshtml":{"title":"Razor C#","alias":"razor","require":["markup","csharp"],"optional":["css","css-extras","javascript","js-extras"],"owner":"RunDevelopment"},"jsx":{"title":"React JSX","require":["markup","javascript"],"optional":["jsdoc","js-extras","js-templates"],"owner":"vkbansal"},"tsx":{"title":"React TSX","require":["jsx","typescript"]},"reason":{"title":"Reason","require":"clike","owner":"Golmote"},"regex":{"title":"Regex","owner":"RunDevelopment"},"rego":{"title":"Rego","owner":"JordanSh"},"renpy":{"title":"Ren'py","alias":"rpy","owner":"HyuchiaDiego"},"rescript":{"title":"ReScript","alias":"res","owner":"vmarcosp"},"rest":{"title":"reST (reStructuredText)","owner":"Golmote"},"rip":{"title":"Rip","owner":"ravinggenius"},"roboconf":{"title":"Roboconf","owner":"Golmote"},"robotframework":{"title":"Robot Framework","alias":"robot","owner":"RunDevelopment"},"ruby":{"title":"Ruby","require":"clike","alias":"rb","owner":"samflores"},"rust":{"title":"Rust","owner":"Golmote"},"sas":{"title":"SAS","optional":["groovy","lua","sql"],"owner":"Golmote"},"sass":{"title":"Sass (Sass)","require":"css","optional":"css-extras","owner":"Golmote"},"scss":{"title":"Sass (Scss)","require":"css","optional":"css-extras","owner":"MoOx"},"scala":{"title":"Scala","require":"java","owner":"jozic"},"scheme":{"title":"Scheme","owner":"bacchus123"},"shell-session":{"title":"Shell session","require":"bash","alias":["sh-session","shellsession"],"owner":"RunDevelopment"},"smali":{"title":"Smali","owner":"RunDevelopment"},"smalltalk":{"title":"Smalltalk","owner":"Golmote"},"smarty":{"title":"Smarty","require":"markup-templating","optional":"php","owner":"Golmote"},"sml":{"title":"SML","alias":"smlnj","aliasTitles":{"smlnj":"SML/NJ"},"owner":"RunDevelopment"},"solidity":{"title":"Solidity (Ethereum)","alias":"sol","require":"clike","owner":"glachaud"},"solution-file":{"title":"Solution file","alias":"sln","owner":"RunDevelopment"},"soy":{"title":"Soy (Closure Template)","require":"markup-templating","owner":"Golmote"},"sparql":{"title":"SPARQL","require":"turtle","owner":"Triply-Dev","alias":"rq"},"splunk-spl":{"title":"Splunk SPL","owner":"RunDevelopment"},"sqf":{"title":"SQF: Status Quo Function (Arma 3)","require":"clike","owner":"RunDevelopment"},"sql":{"title":"SQL","owner":"multipetros"},"squirrel":{"title":"Squirrel","require":"clike","owner":"RunDevelopment"},"stan":{"title":"Stan","owner":"RunDevelopment"},"stata":{"title":"Stata Ado","require":["mata","java","python"],"owner":"RunDevelopment"},"iecst":{"title":"Structured Text (IEC 61131-3)","owner":"serhioromano"},"stylus":{"title":"Stylus","owner":"vkbansal"},"supercollider":{"title":"SuperCollider","alias":"sclang","owner":"RunDevelopment"},"swift":{"title":"Swift","owner":"chrischares"},"systemd":{"title":"Systemd configuration file","owner":"RunDevelopment"},"t4-templating":{"title":"T4 templating","owner":"RunDevelopment"},"t4-cs":{"title":"T4 Text Templates (C#)","require":["t4-templating","csharp"],"alias":"t4","owner":"RunDevelopment"},"t4-vb":{"title":"T4 Text Templates (VB)","require":["t4-templating","vbnet"],"owner":"RunDevelopment"},"tap":{"title":"TAP","owner":"isaacs","require":"yaml"},"tcl":{"title":"Tcl","owner":"PeterChaplin"},"tt2":{"title":"Template Toolkit 2","require":["clike","markup-templating"],"owner":"gflohr"},"textile":{"title":"Textile","require":"markup","optional":"css","owner":"Golmote"},"toml":{"title":"TOML","owner":"RunDevelopment"},"tremor":{"title":"Tremor","alias":["trickle","troy"],"owner":"darach","aliasTitles":{"trickle":"trickle","troy":"troy"}},"turtle":{"title":"Turtle","alias":"trig","aliasTitles":{"trig":"TriG"},"owner":"jakubklimek"},"twig":{"title":"Twig","require":"markup-templating","owner":"brandonkelly"},"typescript":{"title":"TypeScript","require":"javascript","optional":"js-templates","alias":"ts","owner":"vkbansal"},"typoscript":{"title":"TypoScript","alias":"tsconfig","aliasTitles":{"tsconfig":"TSConfig"},"owner":"dkern"},"unrealscript":{"title":"UnrealScript","alias":["uscript","uc"],"owner":"RunDevelopment"},"uorazor":{"title":"UO Razor Script","owner":"jaseowns"},"uri":{"title":"URI","alias":"url","aliasTitles":{"url":"URL"},"owner":"RunDevelopment"},"v":{"title":"V","require":"clike","owner":"taggon"},"vala":{"title":"Vala","require":"clike","optional":"regex","owner":"TemplarVolk"},"vbnet":{"title":"VB.Net","require":"basic","owner":"Bigsby"},"velocity":{"title":"Velocity","require":"markup","owner":"Golmote"},"verilog":{"title":"Verilog","owner":"a-rey"},"vhdl":{"title":"VHDL","owner":"a-rey"},"vim":{"title":"vim","owner":"westonganger"},"visual-basic":{"title":"Visual Basic","alias":["vb","vba"],"aliasTitles":{"vba":"VBA"},"owner":"Golmote"},"warpscript":{"title":"WarpScript","owner":"RunDevelopment"},"wasm":{"title":"WebAssembly","owner":"Golmote"},"web-idl":{"title":"Web IDL","alias":"webidl","owner":"RunDevelopment"},"wiki":{"title":"Wiki markup","require":"markup","owner":"Golmote"},"wolfram":{"title":"Wolfram language","alias":["mathematica","nb","wl"],"aliasTitles":{"mathematica":"Mathematica","nb":"Mathematica Notebook"},"owner":"msollami"},"wren":{"title":"Wren","owner":"clsource"},"xeora":{"title":"Xeora","require":"markup","alias":"xeoracube","aliasTitles":{"xeoracube":"XeoraCube"},"owner":"freakmaxi"},"xml-doc":{"title":"XML doc (.net)","require":"markup","modify":["csharp","fsharp","vbnet"],"owner":"RunDevelopment"},"xojo":{"title":"Xojo (REALbasic)","owner":"Golmote"},"xquery":{"title":"XQuery","require":"markup","owner":"Golmote"},"yaml":{"title":"YAML","alias":"yml","owner":"hason"},"yang":{"title":"YANG","owner":"RunDevelopment"},"zig":{"title":"Zig","owner":"RunDevelopment"}},"plugins":{"meta":{"path":"plugins/{id}/prism-{id}","link":"plugins/{id}/"},"line-highlight":{"title":"Line Highlight","description":"Highlights specific lines and/or line ranges."},"line-numbers":{"title":"Line Numbers","description":"Line number at the beginning of code lines.","owner":"kuba-kubula"},"show-invisibles":{"title":"Show Invisibles","description":"Show hidden characters such as tabs and line breaks.","optional":["autolinker","data-uri-highlight"]},"autolinker":{"title":"Autolinker","description":"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},"wpd":{"title":"WebPlatform Docs","description":"Makes tokens link to WebPlatform.org documentation. The links open in a new tab."},"custom-class":{"title":"Custom Class","description":"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.","owner":"dvkndn","noCSS":true},"file-highlight":{"title":"File Highlight","description":"Fetch external files and highlight them with Prism. Used on the Prism website itself.","noCSS":true},"show-language":{"title":"Show Language","description":"Display the highlighted language in code blocks (inline code does not show the label).","owner":"nauzilus","noCSS":true,"require":"toolbar"},"jsonp-highlight":{"title":"JSONP Highlight","description":"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).","noCSS":true,"owner":"nauzilus"},"highlight-keywords":{"title":"Highlight Keywords","description":"Adds special CSS classes for each keyword for fine-grained highlighting.","owner":"vkbansal","noCSS":true},"remove-initial-line-feed":{"title":"Remove initial line feed","description":"Removes the initial line feed in code blocks.","owner":"Golmote","noCSS":true},"inline-color":{"title":"Inline color","description":"Adds a small inline preview for colors in style sheets.","require":"css-extras","owner":"RunDevelopment"},"previewers":{"title":"Previewers","description":"Previewers for angles, colors, gradients, easing and time.","require":"css-extras","owner":"Golmote"},"autoloader":{"title":"Autoloader","description":"Automatically loads the needed languages to highlight the code blocks.","owner":"Golmote","noCSS":true},"keep-markup":{"title":"Keep Markup","description":"Prevents custom markup from being dropped out during highlighting.","owner":"Golmote","optional":"normalize-whitespace","noCSS":true},"command-line":{"title":"Command Line","description":"Display a command line with a prompt and, optionally, the output/response from the commands.","owner":"chriswells0"},"unescaped-markup":{"title":"Unescaped Markup","description":"Write markup without having to escape anything."},"normalize-whitespace":{"title":"Normalize Whitespace","description":"Supports multiple operations to normalize whitespace in code blocks.","owner":"zeitgeist87","optional":"unescaped-markup","noCSS":true},"data-uri-highlight":{"title":"Data-URI Highlight","description":"Highlights data-URI contents.","owner":"Golmote","noCSS":true},"toolbar":{"title":"Toolbar","description":"Attach a toolbar for plugins to easily register buttons on the top of a code block.","owner":"mAAdhaTTah"},"copy-to-clipboard":{"title":"Copy to Clipboard Button","description":"Add a button that copies the code block to the clipboard when clicked.","owner":"mAAdhaTTah","require":"toolbar","noCSS":true},"download-button":{"title":"Download Button","description":"A button in the toolbar of a code block adding a convenient way to download a code file.","owner":"Golmote","require":"toolbar","noCSS":true},"match-braces":{"title":"Match braces","description":"Highlights matching braces.","owner":"RunDevelopment"},"diff-highlight":{"title":"Diff Highlight","description":"Highlights the code inside diff blocks.","owner":"RunDevelopment","require":"diff"},"filter-highlight-all":{"title":"Filter highlightAll","description":"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.","owner":"RunDevelopment","noCSS":true},"treeview":{"title":"Treeview","description":"A language with special styles to highlight file system tree structures.","owner":"Golmote"}}}; if (typeof module !== 'undefined' && module.exports) { module.exports = components; } \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components.json b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components.json index 903e4cfbc1..9c58e568ba 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components.json +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components.json @@ -139,6 +139,24 @@ "title": "ARFF", "owner": "Golmote" }, + "armasm": { + "title": "ARM Assembly", + "alias": "arm-asm", + "owner": "RunDevelopment" + }, + "arturo": { + "title": "Arturo", + "alias": "art", + "optional": [ + "bash", + "css", + "javascript", + "markup", + "markdown", + "sql" + ], + "owner": "drkameleon" + }, "asciidoc": { "alias": "adoc", "title": "AsciiDoc", @@ -175,6 +193,14 @@ "alias": "avdl", "owner": "RunDevelopment" }, + "awk": { + "title": "AWK", + "alias": "gawk", + "aliasTitles": { + "gawk": "GAWK" + }, + "owner": "RunDevelopment" + }, "bash": { "title": "Bash", "alias": "shell", @@ -299,6 +325,10 @@ "title": "Content-Security-Policy", "owner": "ScottHelme" }, + "cooklang": { + "title": "Cooklang", + "owner": "ahue" + }, "coq": { "title": "Coq", "owner": "RunDevelopment" @@ -318,6 +348,10 @@ "title": "CSV", "owner": "RunDevelopment" }, + "cue": { + "title": "CUE", + "owner": "RunDevelopment" + }, "cypher": { "title": "Cypher", "owner": "RunDevelopment" @@ -472,6 +506,11 @@ "title": "GEDCOM", "owner": "Golmote" }, + "gettext": { + "title": "gettext", + "alias": "po", + "owner": "RunDevelopment" + }, "gherkin": { "title": "Gherkin", "owner": "hason" @@ -490,6 +529,11 @@ "alias": "gni", "owner": "RunDevelopment" }, + "linker-script": { + "title": "GNU Linker Script", + "alias": "ld", + "owner": "RunDevelopment" + }, "go": { "title": "Go", "require": "clike", @@ -529,7 +573,10 @@ "handlebars": { "title": "Handlebars", "require": "markup-templating", - "alias": "hbs", + "alias": ["hbs", "mustache"], + "aliasTitles": { + "mustache": "Mustache" + }, "owner": "Golmote" }, "haskell": { @@ -830,6 +877,10 @@ "require": "markup", "owner": "Golmote" }, + "mata": { + "title": "Mata", + "owner": "RunDevelopment" + }, "matlab": { "title": "MATLAB", "owner": "Golmote" @@ -922,6 +973,10 @@ "title": "OCaml", "owner": "Golmote" }, + "odin": { + "title": "Odin", + "owner": "edukisto" + }, "opencl": { "title": "OpenCL", "require": "c", @@ -996,6 +1051,11 @@ "modify": "php", "owner": "milesj" }, + "plant-uml": { + "title": "PlantUML", + "alias": "plantuml", + "owner": "RunDevelopment" + }, "plsql": { "title": "PL/SQL", "require": "sql", @@ -1152,6 +1212,11 @@ "alias": "rpy", "owner": "HyuchiaDiego" }, + "rescript": { + "title": "ReScript", + "alias": "res", + "owner": "vmarcosp" + }, "rest": { "title": "reST (reStructuredText)", "owner": "Golmote" @@ -1277,6 +1342,11 @@ "title": "Stan", "owner": "RunDevelopment" }, + "stata": { + "title": "Stata Ado", + "require": ["mata", "java", "python"], + "owner": "RunDevelopment" + }, "iecst": { "title": "Structured Text (IEC 61131-3)", "owner": "serhioromano" @@ -1285,6 +1355,11 @@ "title": "Stylus", "owner": "vkbansal" }, + "supercollider": { + "title": "SuperCollider", + "alias": "sclang", + "owner": "RunDevelopment" + }, "swift": { "title": "Swift", "owner": "chrischares" diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abap.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abap.js index ba7c4acbbe..f086acd788 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abap.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abap.js @@ -16,7 +16,7 @@ Prism.languages.abap = { alias: 'comment' }, 'keyword': { - pattern: /(\s|\.|^)(?:SCIENTIFIC_WITH_LEADING_ZERO|SCALE_PRESERVING_SCIENTIFIC|RMC_COMMUNICATION_FAILURE|END-ENHANCEMENT-SECTION|MULTIPLY-CORRESPONDING|SUBTRACT-CORRESPONDING|VERIFICATION-MESSAGE|DIVIDE-CORRESPONDING|ENHANCEMENT-SECTION|CURRENCY_CONVERSION|RMC_SYSTEM_FAILURE|START-OF-SELECTION|MOVE-CORRESPONDING|RMC_INVALID_STATUS|CUSTOMER-FUNCTION|END-OF-DEFINITION|ENHANCEMENT-POINT|SYSTEM-EXCEPTIONS|ADD-CORRESPONDING|SCALE_PRESERVING|SELECTION-SCREEN|CURSOR-SELECTION|END-OF-SELECTION|LOAD-OF-PROGRAM|SCROLL-BOUNDARY|SELECTION-TABLE|EXCEPTION-TABLE|IMPLEMENTATIONS|PARAMETER-TABLE|RIGHT-JUSTIFIED|UNIT_CONVERSION|AUTHORITY-CHECK|LIST-PROCESSING|SIGN_AS_POSTFIX|COL_BACKGROUND|IMPLEMENTATION|INTERFACE-POOL|TRANSFORMATION|IDENTIFICATION|ENDENHANCEMENT|LINE-SELECTION|INITIALIZATION|LEFT-JUSTIFIED|SELECT-OPTIONS|SELECTION-SETS|COMMUNICATION|CORRESPONDING|DECIMAL_SHIFT|PRINT-CONTROL|VALUE-REQUEST|CHAIN-REQUEST|FUNCTION-POOL|FIELD-SYMBOLS|FUNCTIONALITY|INVERTED-DATE|SELECTION-SET|CLASS-METHODS|OUTPUT-LENGTH|CLASS-CODING|COL_NEGATIVE|ERRORMESSAGE|FIELD-GROUPS|HELP-REQUEST|NO-EXTENSION|NO-TOPOFPAGE|REDEFINITION|DISPLAY-MODE|ENDINTERFACE|EXIT-COMMAND|FIELD-SYMBOL|NO-SCROLLING|SHORTDUMP-ID|ACCESSPOLICY|CLASS-EVENTS|COL_POSITIVE|DECLARATIONS|ENHANCEMENTS|FILTER-TABLE|SWITCHSTATES|SYNTAX-CHECK|TRANSPORTING|ASYNCHRONOUS|SYNTAX-TRACE|TOKENIZATION|USER-COMMAND|WITH-HEADING|ABAP-SOURCE|BREAK-POINT|CHAIN-INPUT|COMPRESSION|FIXED-POINT|NEW-SECTION|NON-UNICODE|OCCURRENCES|RESPONSIBLE|SYSTEM-CALL|TRACE-TABLE|ABBREVIATED|CHAR-TO-HEX|END-OF-FILE|ENDFUNCTION|ENVIRONMENT|ASSOCIATION|COL_HEADING|EDITOR-CALL|END-OF-PAGE|ENGINEERING|IMPLEMENTED|INTENSIFIED|RADIOBUTTON|SYSTEM-EXIT|TOP-OF-PAGE|TRANSACTION|APPLICATION|CONCATENATE|DESTINATION|ENHANCEMENT|IMMEDIATELY|NO-GROUPING|PRECOMPILED|REPLACEMENT|TITLE-LINES|ACTIVATION|BYTE-ORDER|CLASS-POOL|CONNECTION|CONVERSION|DEFINITION|DEPARTMENT|EXPIRATION|INHERITING|MESSAGE-ID|NO-HEADING|PERFORMING|QUEUE-ONLY|RIGHTSPACE|SCIENTIFIC|STATUSINFO|STRUCTURES|SYNCPOINTS|WITH-TITLE|ATTRIBUTES|BOUNDARIES|CLASS-DATA|COL_NORMAL|DD\/MM\/YYYY|DESCENDING|INTERFACES|LINE-COUNT|MM\/DD\/YYYY|NON-UNIQUE|PRESERVING|SELECTIONS|STATEMENTS|SUBROUTINE|TRUNCATION|TYPE-POOLS|ARITHMETIC|BACKGROUND|ENDPROVIDE|EXCEPTIONS|IDENTIFIER|INDEX-LINE|OBLIGATORY|PARAMETERS|PERCENTAGE|PUSHBUTTON|RESOLUTION|COMPONENTS|DEALLOCATE|DISCONNECT|DUPLICATES|FIRST-LINE|HEAD-LINES|NO-DISPLAY|OCCURRENCE|RESPECTING|RETURNCODE|SUBMATCHES|TRACE-FILE|ASCENDING|BYPASSING|ENDMODULE|EXCEPTION|EXCLUDING|EXPORTING|INCREMENT|MATCHCODE|PARAMETER|PARTIALLY|PREFERRED|REFERENCE|REPLACING|RETURNING|SELECTION|SEPARATED|SPECIFIED|STATEMENT|TIMESTAMP|TYPE-POOL|ACCEPTING|APPENDAGE|ASSIGNING|COL_GROUP|COMPARING|CONSTANTS|DANGEROUS|IMPORTING|INSTANCES|LEFTSPACE|LOG-POINT|QUICKINFO|READ-ONLY|SCROLLING|SQLSCRIPT|STEP-LOOP|TOP-LINES|TRANSLATE|APPENDING|AUTHORITY|CHARACTER|COMPONENT|CONDITION|DIRECTORY|DUPLICATE|MESSAGING|RECEIVING|SUBSCREEN|ACCORDING|COL_TOTAL|END-LINES|ENDMETHOD|ENDSELECT|EXPANDING|EXTENSION|INCLUDING|INFOTYPES|INTERFACE|INTERVALS|LINE-SIZE|PF-STATUS|PROCEDURE|PROTECTED|REQUESTED|RESUMABLE|RIGHTPLUS|SAP-SPOOL|SECONDARY|STRUCTURE|SUBSTRING|TABLEVIEW|NUMOFCHAR|ADJACENT|ANALYSIS|ASSIGNED|BACKWARD|CHANNELS|CHECKBOX|CONTINUE|CRITICAL|DATAINFO|DD\/MM\/YY|DURATION|ENCODING|ENDCLASS|FUNCTION|LEFTPLUS|LINEFEED|MM\/DD\/YY|OVERFLOW|RECEIVED|SKIPPING|SORTABLE|STANDARD|SUBTRACT|SUPPRESS|TABSTRIP|TITLEBAR|TRUNCATE|UNASSIGN|WHENEVER|ANALYZER|COALESCE|COMMENTS|CONDENSE|DECIMALS|DEFERRED|ENDWHILE|EXPLICIT|KEYWORDS|MESSAGES|POSITION|PRIORITY|RECEIVER|RENAMING|TIMEZONE|TRAILING|ALLOCATE|CENTERED|CIRCULAR|CONTROLS|CURRENCY|DELETING|DESCRIBE|DISTANCE|ENDCATCH|EXPONENT|EXTENDED|GENERATE|IGNORING|INCLUDES|INTERNAL|MAJOR-ID|MODIFIER|NEW-LINE|OPTIONAL|PROPERTY|ROLLBACK|STARTING|SUPPLIED|ABSTRACT|CHANGING|CONTEXTS|CREATING|CUSTOMER|DATABASE|DAYLIGHT|DEFINING|DISTINCT|DIVISION|ENABLING|ENDCHAIN|ESCAPING|HARMLESS|IMPLICIT|INACTIVE|LANGUAGE|MINOR-ID|MULTIPLY|NEW-PAGE|NO-TITLE|POS_HIGH|SEPARATE|TEXTPOOL|TRANSFER|SELECTOR|DBMAXLEN|ITERATOR|ARCHIVE|BIT-XOR|BYTE-CO|COLLECT|COMMENT|CURRENT|DEFAULT|DISPLAY|ENDFORM|EXTRACT|LEADING|LISTBOX|LOCATOR|MEMBERS|METHODS|NESTING|POS_LOW|PROCESS|PROVIDE|RAISING|RESERVE|SECONDS|SUMMARY|VISIBLE|BETWEEN|BIT-AND|BYTE-CS|CLEANUP|COMPUTE|CONTROL|CONVERT|DATASET|ENDCASE|FORWARD|HEADERS|HOTSPOT|INCLUDE|INVERSE|KEEPING|NO-ZERO|OBJECTS|OVERLAY|PADDING|PATTERN|PROGRAM|REFRESH|SECTION|SUMMING|TESTING|VERSION|WINDOWS|WITHOUT|BIT-NOT|BYTE-CA|BYTE-NA|CASTING|CONTEXT|COUNTRY|DYNAMIC|ENABLED|ENDLOOP|EXECUTE|FRIENDS|HANDLER|HEADING|INITIAL|\*-INPUT|LOGFILE|MAXIMUM|MINIMUM|NO-GAPS|NO-SIGN|PRAGMAS|PRIMARY|PRIVATE|REDUCED|REPLACE|REQUEST|RESULTS|UNICODE|WARNING|ALIASES|BYTE-CN|BYTE-NS|CALLING|COL_KEY|COLUMNS|CONNECT|ENDEXEC|ENTRIES|EXCLUDE|FILTERS|FURTHER|HELP-ID|LOGICAL|MAPPING|MESSAGE|NAMETAB|OPTIONS|PACKAGE|PERFORM|RECEIVE|STATICS|VARYING|BINDING|CHARLEN|GREATER|XSTRLEN|ACCEPT|APPEND|DETAIL|ELSEIF|ENDING|ENDTRY|FORMAT|FRAMES|GIVING|HASHED|HEADER|IMPORT|INSERT|MARGIN|MODULE|NATIVE|OBJECT|OFFSET|REMOTE|RESUME|SAVING|SIMPLE|SUBMIT|TABBED|TOKENS|UNIQUE|UNPACK|UPDATE|WINDOW|YELLOW|ACTUAL|ASPECT|CENTER|CURSOR|DELETE|DIALOG|DIVIDE|DURING|ERRORS|EVENTS|EXTEND|FILTER|HANDLE|HAVING|IGNORE|LITTLE|MEMORY|NO-GAP|OCCURS|OPTION|PERSON|PLACES|PUBLIC|REDUCE|REPORT|RESULT|SINGLE|SORTED|SWITCH|SYNTAX|TARGET|VALUES|WRITER|ASSERT|BLOCKS|BOUNDS|BUFFER|CHANGE|COLUMN|COMMIT|CONCAT|COPIES|CREATE|DDMMYY|DEFINE|ENDIAN|ESCAPE|EXPAND|KERNEL|LAYOUT|LEGACY|LEVELS|MMDDYY|NUMBER|OUTPUT|RANGES|READER|RETURN|SCREEN|SEARCH|SELECT|SHARED|SOURCE|STABLE|STATIC|SUBKEY|SUFFIX|TABLES|UNWIND|YYMMDD|ASSIGN|BACKUP|BEFORE|BINARY|BIT-OR|BLANKS|CLIENT|CODING|COMMON|DEMAND|DYNPRO|EXCEPT|EXISTS|EXPORT|FIELDS|GLOBAL|GROUPS|LENGTH|LOCALE|MEDIUM|METHOD|MODIFY|NESTED|OTHERS|REJECT|SCROLL|SUPPLY|SYMBOL|ENDFOR|STRLEN|ALIGN|BEGIN|BOUND|ENDAT|ENTRY|EVENT|FINAL|FLUSH|GRANT|INNER|SHORT|USING|WRITE|AFTER|BLACK|BLOCK|CLOCK|COLOR|COUNT|DUMMY|EMPTY|ENDDO|ENDON|GREEN|INDEX|INOUT|LEAVE|LEVEL|LINES|MODIF|ORDER|OUTER|RANGE|RESET|RETRY|RIGHT|SMART|SPLIT|STYLE|TABLE|THROW|UNDER|UNTIL|UPPER|UTF-8|WHERE|ALIAS|BLANK|CLEAR|CLOSE|EXACT|FETCH|FIRST|FOUND|GROUP|LLANG|LOCAL|OTHER|REGEX|SPOOL|TITLE|TYPES|VALID|WHILE|ALPHA|BOXED|CATCH|CHAIN|CHECK|CLASS|COVER|ENDIF|EQUIV|FIELD|FLOOR|FRAME|INPUT|LOWER|MATCH|NODES|PAGES|PRINT|RAISE|ROUND|SHIFT|SPACE|SPOTS|STAMP|STATE|TASKS|TIMES|TRMAC|ULINE|UNION|VALUE|WIDTH|EQUAL|LOG10|TRUNC|BLOB|CASE|CEIL|CLOB|COND|EXIT|FILE|GAPS|HOLD|INCL|INTO|KEEP|KEYS|LAST|LINE|LONG|LPAD|MAIL|MODE|OPEN|PINK|READ|ROWS|TEST|THEN|ZERO|AREA|BACK|BADI|BYTE|CAST|EDIT|EXEC|FAIL|FIND|FKEQ|FONT|FREE|GKEQ|HIDE|INIT|ITNO|LATE|LOOP|MAIN|MARK|MOVE|NEXT|NULL|RISK|ROLE|UNIT|WAIT|ZONE|BASE|CALL|CODE|DATA|DATE|FKGE|GKGE|HIGH|KIND|LEFT|LIST|MASK|MESH|NAME|NODE|PACK|PAGE|POOL|SEND|SIGN|SIZE|SOME|STOP|TASK|TEXT|TIME|USER|VARY|WITH|WORD|BLUE|CONV|COPY|DEEP|ELSE|FORM|FROM|HINT|ICON|JOIN|LIKE|LOAD|ONLY|PART|SCAN|SKIP|SORT|TYPE|UNIX|VIEW|WHEN|WORK|ACOS|ASIN|ATAN|COSH|EACH|FRAC|LESS|RTTI|SINH|SQRT|TANH|AVG|BIT|DIV|ISO|LET|OUT|PAD|SQL|ALL|CI_|CPI|END|LOB|LPI|MAX|MIN|NEW|OLE|RUN|SET|\?TO|YES|ABS|ADD|AND|BIG|FOR|HDB|JOB|LOW|NOT|SAP|TRY|VIA|XML|ANY|GET|IDS|KEY|MOD|OFF|PUT|RAW|RED|REF|SUM|TAB|XSD|CNT|COS|EXP|LOG|SIN|TAN|XOR|AT|CO|CP|DO|GT|ID|IF|NS|OR|BT|CA|CS|GE|NA|NB|EQ|IN|LT|NE|NO|OF|ON|PF|TO|AS|BY|CN|IS|LE|NP|UP|E|I|M|O|Z|C|X)\b/i, + pattern: /(\s|\.|^)(?:\*-INPUT|\?TO|ABAP-SOURCE|ABBREVIATED|ABS|ABSTRACT|ACCEPT|ACCEPTING|ACCESSPOLICY|ACCORDING|ACOS|ACTIVATION|ACTUAL|ADD|ADD-CORRESPONDING|ADJACENT|AFTER|ALIAS|ALIASES|ALIGN|ALL|ALLOCATE|ALPHA|ANALYSIS|ANALYZER|AND|ANY|APPEND|APPENDAGE|APPENDING|APPLICATION|ARCHIVE|AREA|ARITHMETIC|AS|ASCENDING|ASIN|ASPECT|ASSERT|ASSIGN|ASSIGNED|ASSIGNING|ASSOCIATION|ASYNCHRONOUS|AT|ATAN|ATTRIBUTES|AUTHORITY|AUTHORITY-CHECK|AVG|BACK|BACKGROUND|BACKUP|BACKWARD|BADI|BASE|BEFORE|BEGIN|BETWEEN|BIG|BINARY|BINDING|BIT|BIT-AND|BIT-NOT|BIT-OR|BIT-XOR|BLACK|BLANK|BLANKS|BLOB|BLOCK|BLOCKS|BLUE|BOUND|BOUNDARIES|BOUNDS|BOXED|BREAK-POINT|BT|BUFFER|BY|BYPASSING|BYTE|BYTE-CA|BYTE-CN|BYTE-CO|BYTE-CS|BYTE-NA|BYTE-NS|BYTE-ORDER|C|CA|CALL|CALLING|CASE|CAST|CASTING|CATCH|CEIL|CENTER|CENTERED|CHAIN|CHAIN-INPUT|CHAIN-REQUEST|CHANGE|CHANGING|CHANNELS|CHAR-TO-HEX|CHARACTER|CHARLEN|CHECK|CHECKBOX|CIRCULAR|CI_|CLASS|CLASS-CODING|CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|CLEANUP|CLEAR|CLIENT|CLOB|CLOCK|CLOSE|CN|CNT|CO|COALESCE|CODE|CODING|COLLECT|COLOR|COLUMN|COLUMNS|COL_BACKGROUND|COL_GROUP|COL_HEADING|COL_KEY|COL_NEGATIVE|COL_NORMAL|COL_POSITIVE|COL_TOTAL|COMMENT|COMMENTS|COMMIT|COMMON|COMMUNICATION|COMPARING|COMPONENT|COMPONENTS|COMPRESSION|COMPUTE|CONCAT|CONCATENATE|COND|CONDENSE|CONDITION|CONNECT|CONNECTION|CONSTANTS|CONTEXT|CONTEXTS|CONTINUE|CONTROL|CONTROLS|CONV|CONVERSION|CONVERT|COPIES|COPY|CORRESPONDING|COS|COSH|COUNT|COUNTRY|COVER|CP|CPI|CREATE|CREATING|CRITICAL|CS|CURRENCY|CURRENCY_CONVERSION|CURRENT|CURSOR|CURSOR-SELECTION|CUSTOMER|CUSTOMER-FUNCTION|DANGEROUS|DATA|DATABASE|DATAINFO|DATASET|DATE|DAYLIGHT|DBMAXLEN|DD\/MM\/YY|DD\/MM\/YYYY|DDMMYY|DEALLOCATE|DECIMALS|DECIMAL_SHIFT|DECLARATIONS|DEEP|DEFAULT|DEFERRED|DEFINE|DEFINING|DEFINITION|DELETE|DELETING|DEMAND|DEPARTMENT|DESCENDING|DESCRIBE|DESTINATION|DETAIL|DIALOG|DIRECTORY|DISCONNECT|DISPLAY|DISPLAY-MODE|DISTANCE|DISTINCT|DIV|DIVIDE|DIVIDE-CORRESPONDING|DIVISION|DO|DUMMY|DUPLICATE|DUPLICATES|DURATION|DURING|DYNAMIC|DYNPRO|E|EACH|EDIT|EDITOR-CALL|ELSE|ELSEIF|EMPTY|ENABLED|ENABLING|ENCODING|END|END-ENHANCEMENT-SECTION|END-LINES|END-OF-DEFINITION|END-OF-FILE|END-OF-PAGE|END-OF-SELECTION|ENDAT|ENDCASE|ENDCATCH|ENDCHAIN|ENDCLASS|ENDDO|ENDENHANCEMENT|ENDEXEC|ENDFOR|ENDFORM|ENDFUNCTION|ENDIAN|ENDIF|ENDING|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDON|ENDPROVIDE|ENDSELECT|ENDTRY|ENDWHILE|ENGINEERING|ENHANCEMENT|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|ENHANCEMENTS|ENTRIES|ENTRY|ENVIRONMENT|EQ|EQUAL|EQUIV|ERRORMESSAGE|ERRORS|ESCAPE|ESCAPING|EVENT|EVENTS|EXACT|EXCEPT|EXCEPTION|EXCEPTION-TABLE|EXCEPTIONS|EXCLUDE|EXCLUDING|EXEC|EXECUTE|EXISTS|EXIT|EXIT-COMMAND|EXP|EXPAND|EXPANDING|EXPIRATION|EXPLICIT|EXPONENT|EXPORT|EXPORTING|EXTEND|EXTENDED|EXTENSION|EXTRACT|FAIL|FETCH|FIELD|FIELD-GROUPS|FIELD-SYMBOL|FIELD-SYMBOLS|FIELDS|FILE|FILTER|FILTER-TABLE|FILTERS|FINAL|FIND|FIRST|FIRST-LINE|FIXED-POINT|FKEQ|FKGE|FLOOR|FLUSH|FONT|FOR|FORM|FORMAT|FORWARD|FOUND|FRAC|FRAME|FRAMES|FREE|FRIENDS|FROM|FUNCTION|FUNCTION-POOL|FUNCTIONALITY|FURTHER|GAPS|GE|GENERATE|GET|GIVING|GKEQ|GKGE|GLOBAL|GRANT|GREATER|GREEN|GROUP|GROUPS|GT|HANDLE|HANDLER|HARMLESS|HASHED|HAVING|HDB|HEAD-LINES|HEADER|HEADERS|HEADING|HELP-ID|HELP-REQUEST|HIDE|HIGH|HINT|HOLD|HOTSPOT|I|ICON|ID|IDENTIFICATION|IDENTIFIER|IDS|IF|IGNORE|IGNORING|IMMEDIATELY|IMPLEMENTATION|IMPLEMENTATIONS|IMPLEMENTED|IMPLICIT|IMPORT|IMPORTING|IN|INACTIVE|INCL|INCLUDE|INCLUDES|INCLUDING|INCREMENT|INDEX|INDEX-LINE|INFOTYPES|INHERITING|INIT|INITIAL|INITIALIZATION|INNER|INOUT|INPUT|INSERT|INSTANCES|INTENSIFIED|INTERFACE|INTERFACE-POOL|INTERFACES|INTERNAL|INTERVALS|INTO|INVERSE|INVERTED-DATE|IS|ISO|ITERATOR|ITNO|JOB|JOIN|KEEP|KEEPING|KERNEL|KEY|KEYS|KEYWORDS|KIND|LANGUAGE|LAST|LATE|LAYOUT|LE|LEADING|LEAVE|LEFT|LEFT-JUSTIFIED|LEFTPLUS|LEFTSPACE|LEGACY|LENGTH|LESS|LET|LEVEL|LEVELS|LIKE|LINE|LINE-COUNT|LINE-SELECTION|LINE-SIZE|LINEFEED|LINES|LIST|LIST-PROCESSING|LISTBOX|LITTLE|LLANG|LOAD|LOAD-OF-PROGRAM|LOB|LOCAL|LOCALE|LOCATOR|LOG|LOG-POINT|LOG10|LOGFILE|LOGICAL|LONG|LOOP|LOW|LOWER|LPAD|LPI|LT|M|MAIL|MAIN|MAJOR-ID|MAPPING|MARGIN|MARK|MASK|MATCH|MATCHCODE|MAX|MAXIMUM|MEDIUM|MEMBERS|MEMORY|MESH|MESSAGE|MESSAGE-ID|MESSAGES|MESSAGING|METHOD|METHODS|MIN|MINIMUM|MINOR-ID|MM\/DD\/YY|MM\/DD\/YYYY|MMDDYY|MOD|MODE|MODIF|MODIFIER|MODIFY|MODULE|MOVE|MOVE-CORRESPONDING|MULTIPLY|MULTIPLY-CORRESPONDING|NA|NAME|NAMETAB|NATIVE|NB|NE|NESTED|NESTING|NEW|NEW-LINE|NEW-PAGE|NEW-SECTION|NEXT|NO|NO-DISPLAY|NO-EXTENSION|NO-GAP|NO-GAPS|NO-GROUPING|NO-HEADING|NO-SCROLLING|NO-SIGN|NO-TITLE|NO-TOPOFPAGE|NO-ZERO|NODE|NODES|NON-UNICODE|NON-UNIQUE|NOT|NP|NS|NULL|NUMBER|NUMOFCHAR|O|OBJECT|OBJECTS|OBLIGATORY|OCCURRENCE|OCCURRENCES|OCCURS|OF|OFF|OFFSET|OLE|ON|ONLY|OPEN|OPTION|OPTIONAL|OPTIONS|OR|ORDER|OTHER|OTHERS|OUT|OUTER|OUTPUT|OUTPUT-LENGTH|OVERFLOW|OVERLAY|PACK|PACKAGE|PAD|PADDING|PAGE|PAGES|PARAMETER|PARAMETER-TABLE|PARAMETERS|PART|PARTIALLY|PATTERN|PERCENTAGE|PERFORM|PERFORMING|PERSON|PF|PF-STATUS|PINK|PLACES|POOL|POSITION|POS_HIGH|POS_LOW|PRAGMAS|PRECOMPILED|PREFERRED|PRESERVING|PRIMARY|PRINT|PRINT-CONTROL|PRIORITY|PRIVATE|PROCEDURE|PROCESS|PROGRAM|PROPERTY|PROTECTED|PROVIDE|PUBLIC|PUSHBUTTON|PUT|QUEUE-ONLY|QUICKINFO|RADIOBUTTON|RAISE|RAISING|RANGE|RANGES|RAW|READ|READ-ONLY|READER|RECEIVE|RECEIVED|RECEIVER|RECEIVING|RED|REDEFINITION|REDUCE|REDUCED|REF|REFERENCE|REFRESH|REGEX|REJECT|REMOTE|RENAMING|REPLACE|REPLACEMENT|REPLACING|REPORT|REQUEST|REQUESTED|RESERVE|RESET|RESOLUTION|RESPECTING|RESPONSIBLE|RESULT|RESULTS|RESUMABLE|RESUME|RETRY|RETURN|RETURNCODE|RETURNING|RIGHT|RIGHT-JUSTIFIED|RIGHTPLUS|RIGHTSPACE|RISK|RMC_COMMUNICATION_FAILURE|RMC_INVALID_STATUS|RMC_SYSTEM_FAILURE|ROLE|ROLLBACK|ROUND|ROWS|RTTI|RUN|SAP|SAP-SPOOL|SAVING|SCALE_PRESERVING|SCALE_PRESERVING_SCIENTIFIC|SCAN|SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO|SCREEN|SCROLL|SCROLL-BOUNDARY|SCROLLING|SEARCH|SECONDARY|SECONDS|SECTION|SELECT|SELECT-OPTIONS|SELECTION|SELECTION-SCREEN|SELECTION-SET|SELECTION-SETS|SELECTION-TABLE|SELECTIONS|SELECTOR|SEND|SEPARATE|SEPARATED|SET|SHARED|SHIFT|SHORT|SHORTDUMP-ID|SIGN|SIGN_AS_POSTFIX|SIMPLE|SIN|SINGLE|SINH|SIZE|SKIP|SKIPPING|SMART|SOME|SORT|SORTABLE|SORTED|SOURCE|SPACE|SPECIFIED|SPLIT|SPOOL|SPOTS|SQL|SQLSCRIPT|SQRT|STABLE|STAMP|STANDARD|START-OF-SELECTION|STARTING|STATE|STATEMENT|STATEMENTS|STATIC|STATICS|STATUSINFO|STEP-LOOP|STOP|STRLEN|STRUCTURE|STRUCTURES|STYLE|SUBKEY|SUBMATCHES|SUBMIT|SUBROUTINE|SUBSCREEN|SUBSTRING|SUBTRACT|SUBTRACT-CORRESPONDING|SUFFIX|SUM|SUMMARY|SUMMING|SUPPLIED|SUPPLY|SUPPRESS|SWITCH|SWITCHSTATES|SYMBOL|SYNCPOINTS|SYNTAX|SYNTAX-CHECK|SYNTAX-TRACE|SYSTEM-CALL|SYSTEM-EXCEPTIONS|SYSTEM-EXIT|TAB|TABBED|TABLE|TABLES|TABLEVIEW|TABSTRIP|TAN|TANH|TARGET|TASK|TASKS|TEST|TESTING|TEXT|TEXTPOOL|THEN|THROW|TIME|TIMES|TIMESTAMP|TIMEZONE|TITLE|TITLE-LINES|TITLEBAR|TO|TOKENIZATION|TOKENS|TOP-LINES|TOP-OF-PAGE|TRACE-FILE|TRACE-TABLE|TRAILING|TRANSACTION|TRANSFER|TRANSFORMATION|TRANSLATE|TRANSPORTING|TRMAC|TRUNC|TRUNCATE|TRUNCATION|TRY|TYPE|TYPE-POOL|TYPE-POOLS|TYPES|ULINE|UNASSIGN|UNDER|UNICODE|UNION|UNIQUE|UNIT|UNIT_CONVERSION|UNIX|UNPACK|UNTIL|UNWIND|UP|UPDATE|UPPER|USER|USER-COMMAND|USING|UTF-8|VALID|VALUE|VALUE-REQUEST|VALUES|VARY|VARYING|VERIFICATION-MESSAGE|VERSION|VIA|VIEW|VISIBLE|WAIT|WARNING|WHEN|WHENEVER|WHERE|WHILE|WIDTH|WINDOW|WINDOWS|WITH|WITH-HEADING|WITH-TITLE|WITHOUT|WORD|WORK|WRITE|WRITER|X|XML|XOR|XSD|XSTRLEN|YELLOW|YES|YYMMDD|Z|ZERO|ZONE)(?![\w-])/i, lookbehind: true }, /* Numbers can be only integers. Decimal or Hex appear only as strings */ diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abap.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abap.min.js index dd3bf65eea..d803a51ba0 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abap.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abap.min.js @@ -1 +1 @@ -Prism.languages.abap={comment:/^\*.*/m,string:/(`|')(?:\\.|(?!\1)[^\\\r\n])*\1/,"string-template":{pattern:/([|}])(?:\\.|[^\\|{\r\n])*(?=[|{])/,lookbehind:!0,alias:"string"},"eol-comment":{pattern:/(^|\s)".*/m,lookbehind:!0,alias:"comment"},keyword:{pattern:/(\s|\.|^)(?:SCIENTIFIC_WITH_LEADING_ZERO|SCALE_PRESERVING_SCIENTIFIC|RMC_COMMUNICATION_FAILURE|END-ENHANCEMENT-SECTION|MULTIPLY-CORRESPONDING|SUBTRACT-CORRESPONDING|VERIFICATION-MESSAGE|DIVIDE-CORRESPONDING|ENHANCEMENT-SECTION|CURRENCY_CONVERSION|RMC_SYSTEM_FAILURE|START-OF-SELECTION|MOVE-CORRESPONDING|RMC_INVALID_STATUS|CUSTOMER-FUNCTION|END-OF-DEFINITION|ENHANCEMENT-POINT|SYSTEM-EXCEPTIONS|ADD-CORRESPONDING|SCALE_PRESERVING|SELECTION-SCREEN|CURSOR-SELECTION|END-OF-SELECTION|LOAD-OF-PROGRAM|SCROLL-BOUNDARY|SELECTION-TABLE|EXCEPTION-TABLE|IMPLEMENTATIONS|PARAMETER-TABLE|RIGHT-JUSTIFIED|UNIT_CONVERSION|AUTHORITY-CHECK|LIST-PROCESSING|SIGN_AS_POSTFIX|COL_BACKGROUND|IMPLEMENTATION|INTERFACE-POOL|TRANSFORMATION|IDENTIFICATION|ENDENHANCEMENT|LINE-SELECTION|INITIALIZATION|LEFT-JUSTIFIED|SELECT-OPTIONS|SELECTION-SETS|COMMUNICATION|CORRESPONDING|DECIMAL_SHIFT|PRINT-CONTROL|VALUE-REQUEST|CHAIN-REQUEST|FUNCTION-POOL|FIELD-SYMBOLS|FUNCTIONALITY|INVERTED-DATE|SELECTION-SET|CLASS-METHODS|OUTPUT-LENGTH|CLASS-CODING|COL_NEGATIVE|ERRORMESSAGE|FIELD-GROUPS|HELP-REQUEST|NO-EXTENSION|NO-TOPOFPAGE|REDEFINITION|DISPLAY-MODE|ENDINTERFACE|EXIT-COMMAND|FIELD-SYMBOL|NO-SCROLLING|SHORTDUMP-ID|ACCESSPOLICY|CLASS-EVENTS|COL_POSITIVE|DECLARATIONS|ENHANCEMENTS|FILTER-TABLE|SWITCHSTATES|SYNTAX-CHECK|TRANSPORTING|ASYNCHRONOUS|SYNTAX-TRACE|TOKENIZATION|USER-COMMAND|WITH-HEADING|ABAP-SOURCE|BREAK-POINT|CHAIN-INPUT|COMPRESSION|FIXED-POINT|NEW-SECTION|NON-UNICODE|OCCURRENCES|RESPONSIBLE|SYSTEM-CALL|TRACE-TABLE|ABBREVIATED|CHAR-TO-HEX|END-OF-FILE|ENDFUNCTION|ENVIRONMENT|ASSOCIATION|COL_HEADING|EDITOR-CALL|END-OF-PAGE|ENGINEERING|IMPLEMENTED|INTENSIFIED|RADIOBUTTON|SYSTEM-EXIT|TOP-OF-PAGE|TRANSACTION|APPLICATION|CONCATENATE|DESTINATION|ENHANCEMENT|IMMEDIATELY|NO-GROUPING|PRECOMPILED|REPLACEMENT|TITLE-LINES|ACTIVATION|BYTE-ORDER|CLASS-POOL|CONNECTION|CONVERSION|DEFINITION|DEPARTMENT|EXPIRATION|INHERITING|MESSAGE-ID|NO-HEADING|PERFORMING|QUEUE-ONLY|RIGHTSPACE|SCIENTIFIC|STATUSINFO|STRUCTURES|SYNCPOINTS|WITH-TITLE|ATTRIBUTES|BOUNDARIES|CLASS-DATA|COL_NORMAL|DD\/MM\/YYYY|DESCENDING|INTERFACES|LINE-COUNT|MM\/DD\/YYYY|NON-UNIQUE|PRESERVING|SELECTIONS|STATEMENTS|SUBROUTINE|TRUNCATION|TYPE-POOLS|ARITHMETIC|BACKGROUND|ENDPROVIDE|EXCEPTIONS|IDENTIFIER|INDEX-LINE|OBLIGATORY|PARAMETERS|PERCENTAGE|PUSHBUTTON|RESOLUTION|COMPONENTS|DEALLOCATE|DISCONNECT|DUPLICATES|FIRST-LINE|HEAD-LINES|NO-DISPLAY|OCCURRENCE|RESPECTING|RETURNCODE|SUBMATCHES|TRACE-FILE|ASCENDING|BYPASSING|ENDMODULE|EXCEPTION|EXCLUDING|EXPORTING|INCREMENT|MATCHCODE|PARAMETER|PARTIALLY|PREFERRED|REFERENCE|REPLACING|RETURNING|SELECTION|SEPARATED|SPECIFIED|STATEMENT|TIMESTAMP|TYPE-POOL|ACCEPTING|APPENDAGE|ASSIGNING|COL_GROUP|COMPARING|CONSTANTS|DANGEROUS|IMPORTING|INSTANCES|LEFTSPACE|LOG-POINT|QUICKINFO|READ-ONLY|SCROLLING|SQLSCRIPT|STEP-LOOP|TOP-LINES|TRANSLATE|APPENDING|AUTHORITY|CHARACTER|COMPONENT|CONDITION|DIRECTORY|DUPLICATE|MESSAGING|RECEIVING|SUBSCREEN|ACCORDING|COL_TOTAL|END-LINES|ENDMETHOD|ENDSELECT|EXPANDING|EXTENSION|INCLUDING|INFOTYPES|INTERFACE|INTERVALS|LINE-SIZE|PF-STATUS|PROCEDURE|PROTECTED|REQUESTED|RESUMABLE|RIGHTPLUS|SAP-SPOOL|SECONDARY|STRUCTURE|SUBSTRING|TABLEVIEW|NUMOFCHAR|ADJACENT|ANALYSIS|ASSIGNED|BACKWARD|CHANNELS|CHECKBOX|CONTINUE|CRITICAL|DATAINFO|DD\/MM\/YY|DURATION|ENCODING|ENDCLASS|FUNCTION|LEFTPLUS|LINEFEED|MM\/DD\/YY|OVERFLOW|RECEIVED|SKIPPING|SORTABLE|STANDARD|SUBTRACT|SUPPRESS|TABSTRIP|TITLEBAR|TRUNCATE|UNASSIGN|WHENEVER|ANALYZER|COALESCE|COMMENTS|CONDENSE|DECIMALS|DEFERRED|ENDWHILE|EXPLICIT|KEYWORDS|MESSAGES|POSITION|PRIORITY|RECEIVER|RENAMING|TIMEZONE|TRAILING|ALLOCATE|CENTERED|CIRCULAR|CONTROLS|CURRENCY|DELETING|DESCRIBE|DISTANCE|ENDCATCH|EXPONENT|EXTENDED|GENERATE|IGNORING|INCLUDES|INTERNAL|MAJOR-ID|MODIFIER|NEW-LINE|OPTIONAL|PROPERTY|ROLLBACK|STARTING|SUPPLIED|ABSTRACT|CHANGING|CONTEXTS|CREATING|CUSTOMER|DATABASE|DAYLIGHT|DEFINING|DISTINCT|DIVISION|ENABLING|ENDCHAIN|ESCAPING|HARMLESS|IMPLICIT|INACTIVE|LANGUAGE|MINOR-ID|MULTIPLY|NEW-PAGE|NO-TITLE|POS_HIGH|SEPARATE|TEXTPOOL|TRANSFER|SELECTOR|DBMAXLEN|ITERATOR|ARCHIVE|BIT-XOR|BYTE-CO|COLLECT|COMMENT|CURRENT|DEFAULT|DISPLAY|ENDFORM|EXTRACT|LEADING|LISTBOX|LOCATOR|MEMBERS|METHODS|NESTING|POS_LOW|PROCESS|PROVIDE|RAISING|RESERVE|SECONDS|SUMMARY|VISIBLE|BETWEEN|BIT-AND|BYTE-CS|CLEANUP|COMPUTE|CONTROL|CONVERT|DATASET|ENDCASE|FORWARD|HEADERS|HOTSPOT|INCLUDE|INVERSE|KEEPING|NO-ZERO|OBJECTS|OVERLAY|PADDING|PATTERN|PROGRAM|REFRESH|SECTION|SUMMING|TESTING|VERSION|WINDOWS|WITHOUT|BIT-NOT|BYTE-CA|BYTE-NA|CASTING|CONTEXT|COUNTRY|DYNAMIC|ENABLED|ENDLOOP|EXECUTE|FRIENDS|HANDLER|HEADING|INITIAL|\*-INPUT|LOGFILE|MAXIMUM|MINIMUM|NO-GAPS|NO-SIGN|PRAGMAS|PRIMARY|PRIVATE|REDUCED|REPLACE|REQUEST|RESULTS|UNICODE|WARNING|ALIASES|BYTE-CN|BYTE-NS|CALLING|COL_KEY|COLUMNS|CONNECT|ENDEXEC|ENTRIES|EXCLUDE|FILTERS|FURTHER|HELP-ID|LOGICAL|MAPPING|MESSAGE|NAMETAB|OPTIONS|PACKAGE|PERFORM|RECEIVE|STATICS|VARYING|BINDING|CHARLEN|GREATER|XSTRLEN|ACCEPT|APPEND|DETAIL|ELSEIF|ENDING|ENDTRY|FORMAT|FRAMES|GIVING|HASHED|HEADER|IMPORT|INSERT|MARGIN|MODULE|NATIVE|OBJECT|OFFSET|REMOTE|RESUME|SAVING|SIMPLE|SUBMIT|TABBED|TOKENS|UNIQUE|UNPACK|UPDATE|WINDOW|YELLOW|ACTUAL|ASPECT|CENTER|CURSOR|DELETE|DIALOG|DIVIDE|DURING|ERRORS|EVENTS|EXTEND|FILTER|HANDLE|HAVING|IGNORE|LITTLE|MEMORY|NO-GAP|OCCURS|OPTION|PERSON|PLACES|PUBLIC|REDUCE|REPORT|RESULT|SINGLE|SORTED|SWITCH|SYNTAX|TARGET|VALUES|WRITER|ASSERT|BLOCKS|BOUNDS|BUFFER|CHANGE|COLUMN|COMMIT|CONCAT|COPIES|CREATE|DDMMYY|DEFINE|ENDIAN|ESCAPE|EXPAND|KERNEL|LAYOUT|LEGACY|LEVELS|MMDDYY|NUMBER|OUTPUT|RANGES|READER|RETURN|SCREEN|SEARCH|SELECT|SHARED|SOURCE|STABLE|STATIC|SUBKEY|SUFFIX|TABLES|UNWIND|YYMMDD|ASSIGN|BACKUP|BEFORE|BINARY|BIT-OR|BLANKS|CLIENT|CODING|COMMON|DEMAND|DYNPRO|EXCEPT|EXISTS|EXPORT|FIELDS|GLOBAL|GROUPS|LENGTH|LOCALE|MEDIUM|METHOD|MODIFY|NESTED|OTHERS|REJECT|SCROLL|SUPPLY|SYMBOL|ENDFOR|STRLEN|ALIGN|BEGIN|BOUND|ENDAT|ENTRY|EVENT|FINAL|FLUSH|GRANT|INNER|SHORT|USING|WRITE|AFTER|BLACK|BLOCK|CLOCK|COLOR|COUNT|DUMMY|EMPTY|ENDDO|ENDON|GREEN|INDEX|INOUT|LEAVE|LEVEL|LINES|MODIF|ORDER|OUTER|RANGE|RESET|RETRY|RIGHT|SMART|SPLIT|STYLE|TABLE|THROW|UNDER|UNTIL|UPPER|UTF-8|WHERE|ALIAS|BLANK|CLEAR|CLOSE|EXACT|FETCH|FIRST|FOUND|GROUP|LLANG|LOCAL|OTHER|REGEX|SPOOL|TITLE|TYPES|VALID|WHILE|ALPHA|BOXED|CATCH|CHAIN|CHECK|CLASS|COVER|ENDIF|EQUIV|FIELD|FLOOR|FRAME|INPUT|LOWER|MATCH|NODES|PAGES|PRINT|RAISE|ROUND|SHIFT|SPACE|SPOTS|STAMP|STATE|TASKS|TIMES|TRMAC|ULINE|UNION|VALUE|WIDTH|EQUAL|LOG10|TRUNC|BLOB|CASE|CEIL|CLOB|COND|EXIT|FILE|GAPS|HOLD|INCL|INTO|KEEP|KEYS|LAST|LINE|LONG|LPAD|MAIL|MODE|OPEN|PINK|READ|ROWS|TEST|THEN|ZERO|AREA|BACK|BADI|BYTE|CAST|EDIT|EXEC|FAIL|FIND|FKEQ|FONT|FREE|GKEQ|HIDE|INIT|ITNO|LATE|LOOP|MAIN|MARK|MOVE|NEXT|NULL|RISK|ROLE|UNIT|WAIT|ZONE|BASE|CALL|CODE|DATA|DATE|FKGE|GKGE|HIGH|KIND|LEFT|LIST|MASK|MESH|NAME|NODE|PACK|PAGE|POOL|SEND|SIGN|SIZE|SOME|STOP|TASK|TEXT|TIME|USER|VARY|WITH|WORD|BLUE|CONV|COPY|DEEP|ELSE|FORM|FROM|HINT|ICON|JOIN|LIKE|LOAD|ONLY|PART|SCAN|SKIP|SORT|TYPE|UNIX|VIEW|WHEN|WORK|ACOS|ASIN|ATAN|COSH|EACH|FRAC|LESS|RTTI|SINH|SQRT|TANH|AVG|BIT|DIV|ISO|LET|OUT|PAD|SQL|ALL|CI_|CPI|END|LOB|LPI|MAX|MIN|NEW|OLE|RUN|SET|\?TO|YES|ABS|ADD|AND|BIG|FOR|HDB|JOB|LOW|NOT|SAP|TRY|VIA|XML|ANY|GET|IDS|KEY|MOD|OFF|PUT|RAW|RED|REF|SUM|TAB|XSD|CNT|COS|EXP|LOG|SIN|TAN|XOR|AT|CO|CP|DO|GT|ID|IF|NS|OR|BT|CA|CS|GE|NA|NB|EQ|IN|LT|NE|NO|OF|ON|PF|TO|AS|BY|CN|IS|LE|NP|UP|E|I|M|O|Z|C|X)\b/i,lookbehind:!0},number:/\b\d+\b/,operator:{pattern:/(\s)(?:\*\*?|<[=>]?|>=?|\?=|[-+\/=])(?=\s)/,lookbehind:!0},"string-operator":{pattern:/(\s)&&?(?=\s)/,lookbehind:!0,alias:"keyword"},"token-operator":[{pattern:/(\w)(?:->?|=>|[~|{}])(?=\w)/,lookbehind:!0,alias:"punctuation"},{pattern:/[|{}]/,alias:"punctuation"}],punctuation:/[,.:()]/}; \ No newline at end of file +Prism.languages.abap={comment:/^\*.*/m,string:/(`|')(?:\\.|(?!\1)[^\\\r\n])*\1/,"string-template":{pattern:/([|}])(?:\\.|[^\\|{\r\n])*(?=[|{])/,lookbehind:!0,alias:"string"},"eol-comment":{pattern:/(^|\s)".*/m,lookbehind:!0,alias:"comment"},keyword:{pattern:/(\s|\.|^)(?:\*-INPUT|\?TO|ABAP-SOURCE|ABBREVIATED|ABS|ABSTRACT|ACCEPT|ACCEPTING|ACCESSPOLICY|ACCORDING|ACOS|ACTIVATION|ACTUAL|ADD|ADD-CORRESPONDING|ADJACENT|AFTER|ALIAS|ALIASES|ALIGN|ALL|ALLOCATE|ALPHA|ANALYSIS|ANALYZER|AND|ANY|APPEND|APPENDAGE|APPENDING|APPLICATION|ARCHIVE|AREA|ARITHMETIC|AS|ASCENDING|ASIN|ASPECT|ASSERT|ASSIGN|ASSIGNED|ASSIGNING|ASSOCIATION|ASYNCHRONOUS|AT|ATAN|ATTRIBUTES|AUTHORITY|AUTHORITY-CHECK|AVG|BACK|BACKGROUND|BACKUP|BACKWARD|BADI|BASE|BEFORE|BEGIN|BETWEEN|BIG|BINARY|BINDING|BIT|BIT-AND|BIT-NOT|BIT-OR|BIT-XOR|BLACK|BLANK|BLANKS|BLOB|BLOCK|BLOCKS|BLUE|BOUND|BOUNDARIES|BOUNDS|BOXED|BREAK-POINT|BT|BUFFER|BY|BYPASSING|BYTE|BYTE-CA|BYTE-CN|BYTE-CO|BYTE-CS|BYTE-NA|BYTE-NS|BYTE-ORDER|C|CA|CALL|CALLING|CASE|CAST|CASTING|CATCH|CEIL|CENTER|CENTERED|CHAIN|CHAIN-INPUT|CHAIN-REQUEST|CHANGE|CHANGING|CHANNELS|CHAR-TO-HEX|CHARACTER|CHARLEN|CHECK|CHECKBOX|CIRCULAR|CI_|CLASS|CLASS-CODING|CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|CLEANUP|CLEAR|CLIENT|CLOB|CLOCK|CLOSE|CN|CNT|CO|COALESCE|CODE|CODING|COLLECT|COLOR|COLUMN|COLUMNS|COL_BACKGROUND|COL_GROUP|COL_HEADING|COL_KEY|COL_NEGATIVE|COL_NORMAL|COL_POSITIVE|COL_TOTAL|COMMENT|COMMENTS|COMMIT|COMMON|COMMUNICATION|COMPARING|COMPONENT|COMPONENTS|COMPRESSION|COMPUTE|CONCAT|CONCATENATE|COND|CONDENSE|CONDITION|CONNECT|CONNECTION|CONSTANTS|CONTEXT|CONTEXTS|CONTINUE|CONTROL|CONTROLS|CONV|CONVERSION|CONVERT|COPIES|COPY|CORRESPONDING|COS|COSH|COUNT|COUNTRY|COVER|CP|CPI|CREATE|CREATING|CRITICAL|CS|CURRENCY|CURRENCY_CONVERSION|CURRENT|CURSOR|CURSOR-SELECTION|CUSTOMER|CUSTOMER-FUNCTION|DANGEROUS|DATA|DATABASE|DATAINFO|DATASET|DATE|DAYLIGHT|DBMAXLEN|DD\/MM\/YY|DD\/MM\/YYYY|DDMMYY|DEALLOCATE|DECIMALS|DECIMAL_SHIFT|DECLARATIONS|DEEP|DEFAULT|DEFERRED|DEFINE|DEFINING|DEFINITION|DELETE|DELETING|DEMAND|DEPARTMENT|DESCENDING|DESCRIBE|DESTINATION|DETAIL|DIALOG|DIRECTORY|DISCONNECT|DISPLAY|DISPLAY-MODE|DISTANCE|DISTINCT|DIV|DIVIDE|DIVIDE-CORRESPONDING|DIVISION|DO|DUMMY|DUPLICATE|DUPLICATES|DURATION|DURING|DYNAMIC|DYNPRO|E|EACH|EDIT|EDITOR-CALL|ELSE|ELSEIF|EMPTY|ENABLED|ENABLING|ENCODING|END|END-ENHANCEMENT-SECTION|END-LINES|END-OF-DEFINITION|END-OF-FILE|END-OF-PAGE|END-OF-SELECTION|ENDAT|ENDCASE|ENDCATCH|ENDCHAIN|ENDCLASS|ENDDO|ENDENHANCEMENT|ENDEXEC|ENDFOR|ENDFORM|ENDFUNCTION|ENDIAN|ENDIF|ENDING|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDON|ENDPROVIDE|ENDSELECT|ENDTRY|ENDWHILE|ENGINEERING|ENHANCEMENT|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|ENHANCEMENTS|ENTRIES|ENTRY|ENVIRONMENT|EQ|EQUAL|EQUIV|ERRORMESSAGE|ERRORS|ESCAPE|ESCAPING|EVENT|EVENTS|EXACT|EXCEPT|EXCEPTION|EXCEPTION-TABLE|EXCEPTIONS|EXCLUDE|EXCLUDING|EXEC|EXECUTE|EXISTS|EXIT|EXIT-COMMAND|EXP|EXPAND|EXPANDING|EXPIRATION|EXPLICIT|EXPONENT|EXPORT|EXPORTING|EXTEND|EXTENDED|EXTENSION|EXTRACT|FAIL|FETCH|FIELD|FIELD-GROUPS|FIELD-SYMBOL|FIELD-SYMBOLS|FIELDS|FILE|FILTER|FILTER-TABLE|FILTERS|FINAL|FIND|FIRST|FIRST-LINE|FIXED-POINT|FKEQ|FKGE|FLOOR|FLUSH|FONT|FOR|FORM|FORMAT|FORWARD|FOUND|FRAC|FRAME|FRAMES|FREE|FRIENDS|FROM|FUNCTION|FUNCTION-POOL|FUNCTIONALITY|FURTHER|GAPS|GE|GENERATE|GET|GIVING|GKEQ|GKGE|GLOBAL|GRANT|GREATER|GREEN|GROUP|GROUPS|GT|HANDLE|HANDLER|HARMLESS|HASHED|HAVING|HDB|HEAD-LINES|HEADER|HEADERS|HEADING|HELP-ID|HELP-REQUEST|HIDE|HIGH|HINT|HOLD|HOTSPOT|I|ICON|ID|IDENTIFICATION|IDENTIFIER|IDS|IF|IGNORE|IGNORING|IMMEDIATELY|IMPLEMENTATION|IMPLEMENTATIONS|IMPLEMENTED|IMPLICIT|IMPORT|IMPORTING|IN|INACTIVE|INCL|INCLUDE|INCLUDES|INCLUDING|INCREMENT|INDEX|INDEX-LINE|INFOTYPES|INHERITING|INIT|INITIAL|INITIALIZATION|INNER|INOUT|INPUT|INSERT|INSTANCES|INTENSIFIED|INTERFACE|INTERFACE-POOL|INTERFACES|INTERNAL|INTERVALS|INTO|INVERSE|INVERTED-DATE|IS|ISO|ITERATOR|ITNO|JOB|JOIN|KEEP|KEEPING|KERNEL|KEY|KEYS|KEYWORDS|KIND|LANGUAGE|LAST|LATE|LAYOUT|LE|LEADING|LEAVE|LEFT|LEFT-JUSTIFIED|LEFTPLUS|LEFTSPACE|LEGACY|LENGTH|LESS|LET|LEVEL|LEVELS|LIKE|LINE|LINE-COUNT|LINE-SELECTION|LINE-SIZE|LINEFEED|LINES|LIST|LIST-PROCESSING|LISTBOX|LITTLE|LLANG|LOAD|LOAD-OF-PROGRAM|LOB|LOCAL|LOCALE|LOCATOR|LOG|LOG-POINT|LOG10|LOGFILE|LOGICAL|LONG|LOOP|LOW|LOWER|LPAD|LPI|LT|M|MAIL|MAIN|MAJOR-ID|MAPPING|MARGIN|MARK|MASK|MATCH|MATCHCODE|MAX|MAXIMUM|MEDIUM|MEMBERS|MEMORY|MESH|MESSAGE|MESSAGE-ID|MESSAGES|MESSAGING|METHOD|METHODS|MIN|MINIMUM|MINOR-ID|MM\/DD\/YY|MM\/DD\/YYYY|MMDDYY|MOD|MODE|MODIF|MODIFIER|MODIFY|MODULE|MOVE|MOVE-CORRESPONDING|MULTIPLY|MULTIPLY-CORRESPONDING|NA|NAME|NAMETAB|NATIVE|NB|NE|NESTED|NESTING|NEW|NEW-LINE|NEW-PAGE|NEW-SECTION|NEXT|NO|NO-DISPLAY|NO-EXTENSION|NO-GAP|NO-GAPS|NO-GROUPING|NO-HEADING|NO-SCROLLING|NO-SIGN|NO-TITLE|NO-TOPOFPAGE|NO-ZERO|NODE|NODES|NON-UNICODE|NON-UNIQUE|NOT|NP|NS|NULL|NUMBER|NUMOFCHAR|O|OBJECT|OBJECTS|OBLIGATORY|OCCURRENCE|OCCURRENCES|OCCURS|OF|OFF|OFFSET|OLE|ON|ONLY|OPEN|OPTION|OPTIONAL|OPTIONS|OR|ORDER|OTHER|OTHERS|OUT|OUTER|OUTPUT|OUTPUT-LENGTH|OVERFLOW|OVERLAY|PACK|PACKAGE|PAD|PADDING|PAGE|PAGES|PARAMETER|PARAMETER-TABLE|PARAMETERS|PART|PARTIALLY|PATTERN|PERCENTAGE|PERFORM|PERFORMING|PERSON|PF|PF-STATUS|PINK|PLACES|POOL|POSITION|POS_HIGH|POS_LOW|PRAGMAS|PRECOMPILED|PREFERRED|PRESERVING|PRIMARY|PRINT|PRINT-CONTROL|PRIORITY|PRIVATE|PROCEDURE|PROCESS|PROGRAM|PROPERTY|PROTECTED|PROVIDE|PUBLIC|PUSHBUTTON|PUT|QUEUE-ONLY|QUICKINFO|RADIOBUTTON|RAISE|RAISING|RANGE|RANGES|RAW|READ|READ-ONLY|READER|RECEIVE|RECEIVED|RECEIVER|RECEIVING|RED|REDEFINITION|REDUCE|REDUCED|REF|REFERENCE|REFRESH|REGEX|REJECT|REMOTE|RENAMING|REPLACE|REPLACEMENT|REPLACING|REPORT|REQUEST|REQUESTED|RESERVE|RESET|RESOLUTION|RESPECTING|RESPONSIBLE|RESULT|RESULTS|RESUMABLE|RESUME|RETRY|RETURN|RETURNCODE|RETURNING|RIGHT|RIGHT-JUSTIFIED|RIGHTPLUS|RIGHTSPACE|RISK|RMC_COMMUNICATION_FAILURE|RMC_INVALID_STATUS|RMC_SYSTEM_FAILURE|ROLE|ROLLBACK|ROUND|ROWS|RTTI|RUN|SAP|SAP-SPOOL|SAVING|SCALE_PRESERVING|SCALE_PRESERVING_SCIENTIFIC|SCAN|SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO|SCREEN|SCROLL|SCROLL-BOUNDARY|SCROLLING|SEARCH|SECONDARY|SECONDS|SECTION|SELECT|SELECT-OPTIONS|SELECTION|SELECTION-SCREEN|SELECTION-SET|SELECTION-SETS|SELECTION-TABLE|SELECTIONS|SELECTOR|SEND|SEPARATE|SEPARATED|SET|SHARED|SHIFT|SHORT|SHORTDUMP-ID|SIGN|SIGN_AS_POSTFIX|SIMPLE|SIN|SINGLE|SINH|SIZE|SKIP|SKIPPING|SMART|SOME|SORT|SORTABLE|SORTED|SOURCE|SPACE|SPECIFIED|SPLIT|SPOOL|SPOTS|SQL|SQLSCRIPT|SQRT|STABLE|STAMP|STANDARD|START-OF-SELECTION|STARTING|STATE|STATEMENT|STATEMENTS|STATIC|STATICS|STATUSINFO|STEP-LOOP|STOP|STRLEN|STRUCTURE|STRUCTURES|STYLE|SUBKEY|SUBMATCHES|SUBMIT|SUBROUTINE|SUBSCREEN|SUBSTRING|SUBTRACT|SUBTRACT-CORRESPONDING|SUFFIX|SUM|SUMMARY|SUMMING|SUPPLIED|SUPPLY|SUPPRESS|SWITCH|SWITCHSTATES|SYMBOL|SYNCPOINTS|SYNTAX|SYNTAX-CHECK|SYNTAX-TRACE|SYSTEM-CALL|SYSTEM-EXCEPTIONS|SYSTEM-EXIT|TAB|TABBED|TABLE|TABLES|TABLEVIEW|TABSTRIP|TAN|TANH|TARGET|TASK|TASKS|TEST|TESTING|TEXT|TEXTPOOL|THEN|THROW|TIME|TIMES|TIMESTAMP|TIMEZONE|TITLE|TITLE-LINES|TITLEBAR|TO|TOKENIZATION|TOKENS|TOP-LINES|TOP-OF-PAGE|TRACE-FILE|TRACE-TABLE|TRAILING|TRANSACTION|TRANSFER|TRANSFORMATION|TRANSLATE|TRANSPORTING|TRMAC|TRUNC|TRUNCATE|TRUNCATION|TRY|TYPE|TYPE-POOL|TYPE-POOLS|TYPES|ULINE|UNASSIGN|UNDER|UNICODE|UNION|UNIQUE|UNIT|UNIT_CONVERSION|UNIX|UNPACK|UNTIL|UNWIND|UP|UPDATE|UPPER|USER|USER-COMMAND|USING|UTF-8|VALID|VALUE|VALUE-REQUEST|VALUES|VARY|VARYING|VERIFICATION-MESSAGE|VERSION|VIA|VIEW|VISIBLE|WAIT|WARNING|WHEN|WHENEVER|WHERE|WHILE|WIDTH|WINDOW|WINDOWS|WITH|WITH-HEADING|WITH-TITLE|WITHOUT|WORD|WORK|WRITE|WRITER|X|XML|XOR|XSD|XSTRLEN|YELLOW|YES|YYMMDD|Z|ZERO|ZONE)(?![\w-])/i,lookbehind:!0},number:/\b\d+\b/,operator:{pattern:/(\s)(?:\*\*?|<[=>]?|>=?|\?=|[-+\/=])(?=\s)/,lookbehind:!0},"string-operator":{pattern:/(\s)&&?(?=\s)/,lookbehind:!0,alias:"keyword"},"token-operator":[{pattern:/(\w)(?:->?|=>|[~|{}])(?=\w)/,lookbehind:!0,alias:"punctuation"},{pattern:/[|{}]/,alias:"punctuation"}],punctuation:/[,.:()]/}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abnf.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abnf.min.js index bc021e1f49..a57731024c 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abnf.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-abnf.min.js @@ -1 +1 @@ -!function(n){var i="(?:ALPHA|BIT|CHAR|CR|CRLF|CTL|DIGIT|DQUOTE|HEXDIG|HTAB|LF|LWSP|OCTET|SP|VCHAR|WSP)";Prism.languages.abnf={comment:/;.*/,string:{pattern:/(?:%[is])?"[^"\n\r]*"/,greedy:!0,inside:{punctuation:/^%[is]/}},range:{pattern:/%(?:b[01]+-[01]+|d\d+-\d+|x[A-F\d]+-[A-F\d]+)/i,alias:"number"},terminal:{pattern:/%(?:b[01]+(?:\.[01]+)*|d\d+(?:\.\d+)*|x[A-F\d]+(?:\.[A-F\d]+)*)/i,alias:"number"},repetition:{pattern:/(^|[^\w-])(?:\d*\*\d*|\d+)/,lookbehind:!0,alias:"operator"},definition:{pattern:/(^[ \t]*)(?:[a-z][\w-]*|<[^<>\r\n]*>)(?=\s*=)/m,lookbehind:!0,alias:"keyword",inside:{punctuation:/<|>/}},"core-rule":{pattern:RegExp("(?:(^|[^<\\w-])"+i+"|<"+i+">)(?![\\w-])","i"),lookbehind:!0,alias:["rule","constant"],inside:{punctuation:/<|>/}},rule:{pattern:/(^|[^<\w-])[a-z][\w-]*|<[^<>\r\n]*>/i,lookbehind:!0,inside:{punctuation:/<|>/}},operator:/=\/?|\//,punctuation:/[()\[\]]/}}(); \ No newline at end of file +!function(n){var i="(?:ALPHA|BIT|CHAR|CR|CRLF|CTL|DIGIT|DQUOTE|HEXDIG|HTAB|LF|LWSP|OCTET|SP|VCHAR|WSP)";n.languages.abnf={comment:/;.*/,string:{pattern:/(?:%[is])?"[^"\n\r]*"/,greedy:!0,inside:{punctuation:/^%[is]/}},range:{pattern:/%(?:b[01]+-[01]+|d\d+-\d+|x[A-F\d]+-[A-F\d]+)/i,alias:"number"},terminal:{pattern:/%(?:b[01]+(?:\.[01]+)*|d\d+(?:\.\d+)*|x[A-F\d]+(?:\.[A-F\d]+)*)/i,alias:"number"},repetition:{pattern:/(^|[^\w-])(?:\d*\*\d*|\d+)/,lookbehind:!0,alias:"operator"},definition:{pattern:/(^[ \t]*)(?:[a-z][\w-]*|<[^<>\r\n]*>)(?=\s*=)/m,lookbehind:!0,alias:"keyword",inside:{punctuation:/<|>/}},"core-rule":{pattern:RegExp("(?:(^|[^<\\w-])"+i+"|<"+i+">)(?![\\w-])","i"),lookbehind:!0,alias:["rule","constant"],inside:{punctuation:/<|>/}},rule:{pattern:/(^|[^<\w-])[a-z][\w-]*|<[^<>\r\n]*>/i,lookbehind:!0,inside:{punctuation:/<|>/}},operator:/=\/?|\//,punctuation:/[()\[\]]/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ada.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ada.js index 21226f63a2..a537f39b0a 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ada.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ada.js @@ -9,8 +9,11 @@ Prism.languages.ada = { pattern: /\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i } ], - 'attr-name': /\b'\w+/, - 'keyword': /\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i, + 'attribute': { + pattern: /\b'\w+/, + alias: 'attr-name' + }, + 'keyword': /\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i, 'boolean': /\b(?:false|true)\b/i, 'operator': /<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/, 'punctuation': /\.\.?|[,;():]/, diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ada.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ada.min.js index f58b0ea9f3..57de170363 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ada.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ada.min.js @@ -1 +1 @@ -Prism.languages.ada={comment:/--.*/,string:/"(?:""|[^"\r\f\n])*"/,number:[{pattern:/\b\d(?:_?\d)*#[\dA-F](?:_?[\dA-F])*(?:\.[\dA-F](?:_?[\dA-F])*)?#(?:E[+-]?\d(?:_?\d)*)?/i},{pattern:/\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i}],"attr-name":/\b'\w+/,keyword:/\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,boolean:/\b(?:false|true)\b/i,operator:/<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,punctuation:/\.\.?|[,;():]/,char:/'.'/,variable:/\b[a-z](?:\w)*\b/i}; \ No newline at end of file +Prism.languages.ada={comment:/--.*/,string:/"(?:""|[^"\r\f\n])*"/,number:[{pattern:/\b\d(?:_?\d)*#[\dA-F](?:_?[\dA-F])*(?:\.[\dA-F](?:_?[\dA-F])*)?#(?:E[+-]?\d(?:_?\d)*)?/i},{pattern:/\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i}],attribute:{pattern:/\b'\w+/,alias:"attr-name"},keyword:/\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,boolean:/\b(?:false|true)\b/i,operator:/<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,punctuation:/\.\.?|[,;():]/,char:/'.'/,variable:/\b[a-z](?:\w)*\b/i}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-agda.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-agda.min.js index a31d259c3a..62f8d1ca23 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-agda.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-agda.min.js @@ -1 +1 @@ -Prism.languages.agda={comment:/\{-[\s\S]*?(?:-\}|$)|--.*/,string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},punctuation:/[(){}⦃⦄.;@]/,"class-name":{pattern:/((?:data|record) +)\S+/,lookbehind:!0},function:{pattern:/(^[ \t]*)(?!\s)[^:\r\n]+(?=:)/m,lookbehind:!0},operator:{pattern:/(^\s*|\s)(?:[=|:∀→λ\\?_]|->)(?=\s)/,lookbehind:!0},keyword:/\b(?:Set|abstract|constructor|data|eta-equality|field|forall|hiding|import|in|inductive|infix|infixl|infixr|instance|let|macro|module|mutual|no-eta-equality|open|overlap|pattern|postulate|primitive|private|public|quote|quoteContext|quoteGoal|quoteTerm|record|renaming|rewrite|syntax|tactic|unquote|unquoteDecl|unquoteDef|using|variable|where|with)\b/}; \ No newline at end of file +!function(t){t.languages.agda={comment:/\{-[\s\S]*?(?:-\}|$)|--.*/,string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},punctuation:/[(){}⦃⦄.;@]/,"class-name":{pattern:/((?:data|record) +)\S+/,lookbehind:!0},function:{pattern:/(^[ \t]*)(?!\s)[^:\r\n]+(?=:)/m,lookbehind:!0},operator:{pattern:/(^\s*|\s)(?:[=|:∀→λ\\?_]|->)(?=\s)/,lookbehind:!0},keyword:/\b(?:Set|abstract|constructor|data|eta-equality|field|forall|hiding|import|in|inductive|infix|infixl|infixr|instance|let|macro|module|mutual|no-eta-equality|open|overlap|pattern|postulate|primitive|private|public|quote|quoteContext|quoteGoal|quoteTerm|record|renaming|rewrite|syntax|tactic|unquote|unquoteDecl|unquoteDef|using|variable|where|with)\b/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-apex.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-apex.min.js index ba2cdfabea..3cb0f96bec 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-apex.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-apex.min.js @@ -1 +1 @@ -!function(e){var t=/\b(?:(?:after|before)(?=\s+[a-z])|abstract|activate|and|any|array|as|asc|autonomous|begin|bigdecimal|blob|boolean|break|bulk|by|byte|case|cast|catch|char|class|collect|commit|const|continue|currency|date|datetime|decimal|default|delete|desc|do|double|else|end|enum|exception|exit|export|extends|final|finally|float|for|from|get(?=\s*[{};])|global|goto|group|having|hint|if|implements|import|in|inner|insert|instanceof|int|integer|interface|into|join|like|limit|list|long|loop|map|merge|new|not|null|nulls|number|object|of|on|or|outer|override|package|parallel|pragma|private|protected|public|retrieve|return|rollback|select|set|short|sObject|sort|static|string|super|switch|synchronized|system|testmethod|then|this|throw|time|transaction|transient|trigger|try|undelete|update|upsert|using|virtual|void|webservice|when|where|while|(?:inherited|with|without)\s+sharing)\b/i,n="\\b(?:(?=[a-z_]\\w*\\s*[<\\[])|(?!))[A-Z_]\\w*(?:\\s*\\.\\s*[A-Z_]\\w*)*\\b(?:\\s*(?:\\[\\s*\\]|<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>))*".replace(//g,function(){return t.source});function i(e){return RegExp(e.replace(//g,function(){return n}),"i")}var a={keyword:t,punctuation:/[()\[\]{};,:.<>]/};e.languages.apex={comment:e.languages.clike.comment,string:e.languages.clike.string,sql:{pattern:/((?:[=,({:]|\breturn)\s*)\[[^\[\]]*\]/i,lookbehind:!0,greedy:!0,alias:"language-sql",inside:e.languages.sql},annotation:{pattern:/@\w+\b/,alias:"punctuation"},"class-name":[{pattern:i("(\\b(?:class|enum|extends|implements|instanceof|interface|new|trigger\\s+\\w+\\s+on)\\s+)"),lookbehind:!0,inside:a},{pattern:i("(\\(\\s*)(?=\\s*\\)\\s*[\\w(])"),lookbehind:!0,inside:a},{pattern:i("(?=\\s*\\w+\\s*[;=,(){:])"),inside:a}],trigger:{pattern:/(\btrigger\s+)\w+\b/i,lookbehind:!0,alias:"class-name"},keyword:t,function:/\b[a-z_]\w*(?=\s*\()/i,boolean:/\b(?:false|true)\b/i,number:/(?:\B\.\d+|\b\d+(?:\.\d+|L)?)\b/i,operator:/[!=](?:==?)?|\?\.?|&&|\|\||--|\+\+|[-+*/^&|]=?|:|<{1,3}=?/,punctuation:/[()\[\]{};,.]/}}(Prism); \ No newline at end of file +!function(e){var t=/\b(?:(?:after|before)(?=\s+[a-z])|abstract|activate|and|any|array|as|asc|autonomous|begin|bigdecimal|blob|boolean|break|bulk|by|byte|case|cast|catch|char|class|collect|commit|const|continue|currency|date|datetime|decimal|default|delete|desc|do|double|else|end|enum|exception|exit|export|extends|final|finally|float|for|from|get(?=\s*[{};])|global|goto|group|having|hint|if|implements|import|in|inner|insert|instanceof|int|integer|interface|into|join|like|limit|list|long|loop|map|merge|new|not|null|nulls|number|object|of|on|or|outer|override|package|parallel|pragma|private|protected|public|retrieve|return|rollback|select|set|short|sObject|sort|static|string|super|switch|synchronized|system|testmethod|then|this|throw|time|transaction|transient|trigger|try|undelete|update|upsert|using|virtual|void|webservice|when|where|while|(?:inherited|with|without)\s+sharing)\b/i,n="\\b(?:(?=[a-z_]\\w*\\s*[<\\[])|(?!))[A-Z_]\\w*(?:\\s*\\.\\s*[A-Z_]\\w*)*\\b(?:\\s*(?:\\[\\s*\\]|<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>))*".replace(//g,(function(){return t.source}));function i(e){return RegExp(e.replace(//g,(function(){return n})),"i")}var a={keyword:t,punctuation:/[()\[\]{};,:.<>]/};e.languages.apex={comment:e.languages.clike.comment,string:e.languages.clike.string,sql:{pattern:/((?:[=,({:]|\breturn)\s*)\[[^\[\]]*\]/i,lookbehind:!0,greedy:!0,alias:"language-sql",inside:e.languages.sql},annotation:{pattern:/@\w+\b/,alias:"punctuation"},"class-name":[{pattern:i("(\\b(?:class|enum|extends|implements|instanceof|interface|new|trigger\\s+\\w+\\s+on)\\s+)"),lookbehind:!0,inside:a},{pattern:i("(\\(\\s*)(?=\\s*\\)\\s*[\\w(])"),lookbehind:!0,inside:a},{pattern:i("(?=\\s*\\w+\\s*[;=,(){:])"),inside:a}],trigger:{pattern:/(\btrigger\s+)\w+\b/i,lookbehind:!0,alias:"class-name"},keyword:t,function:/\b[a-z_]\w*(?=\s*\()/i,boolean:/\b(?:false|true)\b/i,number:/(?:\B\.\d+|\b\d+(?:\.\d+|L)?)\b/i,operator:/[!=](?:==?)?|\?\.?|&&|\|\||--|\+\+|[-+*/^&|]=?|:|<{1,3}=?/,punctuation:/[()\[\]{};,.]/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-armasm.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-armasm.js new file mode 100644 index 0000000000..07e93221d4 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-armasm.js @@ -0,0 +1,49 @@ +Prism.languages.armasm = { + 'comment': { + pattern: /;.*/, + greedy: true + }, + 'string': { + pattern: /"(?:[^"\r\n]|"")*"/, + greedy: true, + inside: { + 'variable': { + pattern: /((?:^|[^$])(?:\${2})*)\$\w+/, + lookbehind: true + } + } + }, + 'char': { + pattern: /'(?:[^'\r\n]{0,4}|'')'/, + greedy: true + }, + 'version-symbol': { + pattern: /\|[\w@]+\|/, + greedy: true, + alias: 'property' + }, + + 'boolean': /\b(?:FALSE|TRUE)\b/, + 'directive': { + pattern: /\b(?:ALIAS|ALIGN|AREA|ARM|ASSERT|ATTR|CN|CODE|CODE16|CODE32|COMMON|CP|DATA|DCB|DCD|DCDO|DCDU|DCFD|DCFDU|DCI|DCQ|DCQU|DCW|DCWU|DN|ELIF|ELSE|END|ENDFUNC|ENDIF|ENDP|ENTRY|EQU|EXPORT|EXPORTAS|EXTERN|FIELD|FILL|FN|FUNCTION|GBLA|GBLL|GBLS|GET|GLOBAL|IF|IMPORT|INCBIN|INCLUDE|INFO|KEEP|LCLA|LCLL|LCLS|LTORG|MACRO|MAP|MEND|MEXIT|NOFP|OPT|PRESERVE8|PROC|QN|READONLY|RELOC|REQUIRE|REQUIRE8|RLIST|ROUT|SETA|SETL|SETS|SN|SPACE|SUBT|THUMB|THUMBX|TTL|WEND|WHILE)\b/, + alias: 'property' + }, + 'instruction': { + pattern: /((?:^|(?:^|[^\\])(?:\r\n?|\n))[ \t]*(?:(?:[A-Z][A-Z0-9_]*[a-z]\w*|[a-z]\w*|\d+)[ \t]+)?)\b[A-Z.]+\b/, + lookbehind: true, + alias: 'keyword' + }, + 'variable': /\$\w+/, + + 'number': /(?:\b[2-9]_\d+|(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e-?\d+)?|\b0(?:[fd]_|x)[0-9a-f]+|&[0-9a-f]+)\b/i, + + 'register': { + pattern: /\b(?:r\d|lr)\b/, + alias: 'symbol' + }, + + 'operator': /<>|<<|>>|&&|\|\||[=!<>/]=?|[+\-*%#?&|^]|:[A-Z]+:/, + 'punctuation': /[()[\],]/ +}; + +Prism.languages['arm-asm'] = Prism.languages.armasm; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-armasm.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-armasm.min.js new file mode 100644 index 0000000000..620549bd32 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-armasm.min.js @@ -0,0 +1 @@ +Prism.languages.armasm={comment:{pattern:/;.*/,greedy:!0},string:{pattern:/"(?:[^"\r\n]|"")*"/,greedy:!0,inside:{variable:{pattern:/((?:^|[^$])(?:\${2})*)\$\w+/,lookbehind:!0}}},char:{pattern:/'(?:[^'\r\n]{0,4}|'')'/,greedy:!0},"version-symbol":{pattern:/\|[\w@]+\|/,greedy:!0,alias:"property"},boolean:/\b(?:FALSE|TRUE)\b/,directive:{pattern:/\b(?:ALIAS|ALIGN|AREA|ARM|ASSERT|ATTR|CN|CODE|CODE16|CODE32|COMMON|CP|DATA|DCB|DCD|DCDO|DCDU|DCFD|DCFDU|DCI|DCQ|DCQU|DCW|DCWU|DN|ELIF|ELSE|END|ENDFUNC|ENDIF|ENDP|ENTRY|EQU|EXPORT|EXPORTAS|EXTERN|FIELD|FILL|FN|FUNCTION|GBLA|GBLL|GBLS|GET|GLOBAL|IF|IMPORT|INCBIN|INCLUDE|INFO|KEEP|LCLA|LCLL|LCLS|LTORG|MACRO|MAP|MEND|MEXIT|NOFP|OPT|PRESERVE8|PROC|QN|READONLY|RELOC|REQUIRE|REQUIRE8|RLIST|ROUT|SETA|SETL|SETS|SN|SPACE|SUBT|THUMB|THUMBX|TTL|WEND|WHILE)\b/,alias:"property"},instruction:{pattern:/((?:^|(?:^|[^\\])(?:\r\n?|\n))[ \t]*(?:(?:[A-Z][A-Z0-9_]*[a-z]\w*|[a-z]\w*|\d+)[ \t]+)?)\b[A-Z.]+\b/,lookbehind:!0,alias:"keyword"},variable:/\$\w+/,number:/(?:\b[2-9]_\d+|(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e-?\d+)?|\b0(?:[fd]_|x)[0-9a-f]+|&[0-9a-f]+)\b/i,register:{pattern:/\b(?:r\d|lr)\b/,alias:"symbol"},operator:/<>|<<|>>|&&|\|\||[=!<>/]=?|[+\-*%#?&|^]|:[A-Z]+:/,punctuation:/[()[\],]/},Prism.languages["arm-asm"]=Prism.languages.armasm; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-arturo.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-arturo.js new file mode 100644 index 0000000000..d09b5e27ef --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-arturo.js @@ -0,0 +1,105 @@ +(function (Prism) { + /** + * @param {string} lang + * @param {string} pattern + */ + var createLanguageString = function (lang, pattern) { + return { + pattern: RegExp(/\{!/.source + '(?:' + (pattern || lang) + ')' + /$[\s\S]*\}/.source, 'm'), + greedy: true, + inside: { + 'embedded': { + pattern: /(^\{!\w+\b)[\s\S]+(?=\}$)/, + lookbehind: true, + alias: 'language-' + lang, + inside: Prism.languages[lang] + }, + 'string': /[\s\S]+/ + } + }; + }; + + Prism.languages.arturo = { + 'comment': { + pattern: /;.*/, + greedy: true + }, + + 'character': { + pattern: /`.`/, + alias: 'char', + greedy: true + }, + + 'number': { + pattern: /\b\d+(?:\.\d+(?:\.\d+(?:-[\w+-]+)?)?)?\b/, + }, + + 'string': { + pattern: /"(?:[^"\\\r\n]|\\.)*"/, + greedy: true + }, + + 'regex': { + pattern: /\{\/.*?\/\}/, + greedy: true + }, + + 'html-string': createLanguageString('html'), + 'css-string': createLanguageString('css'), + 'js-string': createLanguageString('js'), + 'md-string': createLanguageString('md'), + 'sql-string': createLanguageString('sql'), + 'sh-string': createLanguageString('shell', 'sh'), + + 'multistring': { + pattern: /».*|\{:[\s\S]*?:\}|\{[\s\S]*?\}|^-{6}$[\s\S]*/m, + alias: 'string', + greedy: true + }, + + 'label': { + pattern: /\w+\b\??:/, + alias: 'property' + }, + + 'literal': { + pattern: /'(?:\w+\b\??:?)/, + alias: 'constant' + }, + + 'type': { + pattern: /:(?:\w+\b\??:?)/, + alias: 'class-name' + }, + + 'color': /#\w+/, + + 'predicate': { + pattern: /\b(?:all|and|any|ascii|attr|attribute|attributeLabel|binary|block|char|contains|database|date|dictionary|empty|equal|even|every|exists|false|floating|function|greater|greaterOrEqual|if|in|inline|integer|is|key|label|leap|less|lessOrEqual|literal|logical|lower|nand|negative|nor|not|notEqual|null|numeric|odd|or|path|pathLabel|positive|prefix|prime|regex|same|set|some|sorted|standalone|string|subset|suffix|superset|symbol|symbolLiteral|true|try|type|unless|upper|when|whitespace|word|xnor|xor|zero)\?/, + alias: 'keyword' + }, + + 'builtin-function': { + pattern: /\b(?:abs|acos|acosh|acsec|acsech|actan|actanh|add|after|alert|alias|and|angle|append|arg|args|arity|array|as|asec|asech|asin|asinh|atan|atan2|atanh|attr|attrs|average|before|benchmark|blend|break|call|capitalize|case|ceil|chop|clear|clip|close|color|combine|conj|continue|copy|cos|cosh|crc|csec|csech|ctan|ctanh|cursor|darken|dec|decode|define|delete|desaturate|deviation|dialog|dictionary|difference|digest|digits|div|do|download|drop|dup|e|else|empty|encode|ensure|env|escape|execute|exit|exp|extend|extract|factors|fdiv|filter|first|flatten|floor|fold|from|function|gamma|gcd|get|goto|hash|hypot|if|inc|indent|index|infinity|info|input|insert|inspect|intersection|invert|jaro|join|keys|kurtosis|last|let|levenshtein|lighten|list|ln|log|loop|lower|mail|map|match|max|median|min|mod|module|mul|nand|neg|new|nor|normalize|not|now|null|open|or|outdent|pad|palette|panic|path|pause|permissions|permutate|pi|pop|popup|pow|powerset|powmod|prefix|print|prints|process|product|query|random|range|read|relative|remove|rename|render|repeat|replace|request|return|reverse|round|sample|saturate|script|sec|sech|select|serve|set|shl|shr|shuffle|sin|sinh|size|skewness|slice|sort|spin|split|sqrt|squeeze|stack|strip|sub|suffix|sum|switch|symbols|symlink|sys|take|tan|tanh|terminal|terminate|to|truncate|try|type|unclip|union|unique|unless|until|unzip|upper|values|var|variance|volume|webview|while|with|wordwrap|write|xnor|xor|zip)\b/, + alias: 'keyword' + }, + + 'sugar': { + pattern: /->|=>|\||::/, + alias: 'operator' + }, + + 'punctuation': /[()[\],]/, + + 'symbol': { + pattern: /<:|-:|ø|@|#|\+|\||\*|\$|---|-|%|\/|\.\.|\^|~|=|<|>|\\/ + }, + + 'boolean': { + pattern: /\b(?:false|maybe|true)\b/ + } + }; + + Prism.languages.art = Prism.languages['arturo']; +}(Prism)); diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-arturo.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-arturo.min.js new file mode 100644 index 0000000000..f17b130a17 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-arturo.min.js @@ -0,0 +1 @@ +!function(e){var a=function(a,t){return{pattern:RegExp("\\{!(?:"+(t||a)+")$[^]*\\}","m"),greedy:!0,inside:{embedded:{pattern:/(^\{!\w+\b)[\s\S]+(?=\}$)/,lookbehind:!0,alias:"language-"+a,inside:e.languages[a]},string:/[\s\S]+/}}};e.languages.arturo={comment:{pattern:/;.*/,greedy:!0},character:{pattern:/`.`/,alias:"char",greedy:!0},number:{pattern:/\b\d+(?:\.\d+(?:\.\d+(?:-[\w+-]+)?)?)?\b/},string:{pattern:/"(?:[^"\\\r\n]|\\.)*"/,greedy:!0},regex:{pattern:/\{\/.*?\/\}/,greedy:!0},"html-string":a("html"),"css-string":a("css"),"js-string":a("js"),"md-string":a("md"),"sql-string":a("sql"),"sh-string":a("shell","sh"),multistring:{pattern:/».*|\{:[\s\S]*?:\}|\{[\s\S]*?\}|^-{6}$[\s\S]*/m,alias:"string",greedy:!0},label:{pattern:/\w+\b\??:/,alias:"property"},literal:{pattern:/'(?:\w+\b\??:?)/,alias:"constant"},type:{pattern:/:(?:\w+\b\??:?)/,alias:"class-name"},color:/#\w+/,predicate:{pattern:/\b(?:all|and|any|ascii|attr|attribute|attributeLabel|binary|block|char|contains|database|date|dictionary|empty|equal|even|every|exists|false|floating|function|greater|greaterOrEqual|if|in|inline|integer|is|key|label|leap|less|lessOrEqual|literal|logical|lower|nand|negative|nor|not|notEqual|null|numeric|odd|or|path|pathLabel|positive|prefix|prime|regex|same|set|some|sorted|standalone|string|subset|suffix|superset|symbol|symbolLiteral|true|try|type|unless|upper|when|whitespace|word|xnor|xor|zero)\?/,alias:"keyword"},"builtin-function":{pattern:/\b(?:abs|acos|acosh|acsec|acsech|actan|actanh|add|after|alert|alias|and|angle|append|arg|args|arity|array|as|asec|asech|asin|asinh|atan|atan2|atanh|attr|attrs|average|before|benchmark|blend|break|call|capitalize|case|ceil|chop|clear|clip|close|color|combine|conj|continue|copy|cos|cosh|crc|csec|csech|ctan|ctanh|cursor|darken|dec|decode|define|delete|desaturate|deviation|dialog|dictionary|difference|digest|digits|div|do|download|drop|dup|e|else|empty|encode|ensure|env|escape|execute|exit|exp|extend|extract|factors|fdiv|filter|first|flatten|floor|fold|from|function|gamma|gcd|get|goto|hash|hypot|if|inc|indent|index|infinity|info|input|insert|inspect|intersection|invert|jaro|join|keys|kurtosis|last|let|levenshtein|lighten|list|ln|log|loop|lower|mail|map|match|max|median|min|mod|module|mul|nand|neg|new|nor|normalize|not|now|null|open|or|outdent|pad|palette|panic|path|pause|permissions|permutate|pi|pop|popup|pow|powerset|powmod|prefix|print|prints|process|product|query|random|range|read|relative|remove|rename|render|repeat|replace|request|return|reverse|round|sample|saturate|script|sec|sech|select|serve|set|shl|shr|shuffle|sin|sinh|size|skewness|slice|sort|spin|split|sqrt|squeeze|stack|strip|sub|suffix|sum|switch|symbols|symlink|sys|take|tan|tanh|terminal|terminate|to|truncate|try|type|unclip|union|unique|unless|until|unzip|upper|values|var|variance|volume|webview|while|with|wordwrap|write|xnor|xor|zip)\b/,alias:"keyword"},sugar:{pattern:/->|=>|\||::/,alias:"operator"},punctuation:/[()[\],]/,symbol:{pattern:/<:|-:|ø|@|#|\+|\||\*|\$|---|-|%|\/|\.\.|\^|~|=|<|>|\\/},boolean:{pattern:/\b(?:false|maybe|true)\b/}},e.languages.art=e.languages.arturo}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-asciidoc.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-asciidoc.min.js index ed45a7a251..e1badd1aac 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-asciidoc.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-asciidoc.min.js @@ -1 +1 @@ -!function(t){var n={pattern:/(^[ \t]*)\[(?!\[)(?:(["'$`])(?:(?!\2)[^\\]|\\.)*\2|\[(?:[^\[\]\\]|\\.)*\]|[^\[\]\\"'$`]|\\.)*\]/m,lookbehind:!0,inside:{quoted:{pattern:/([$`])(?:(?!\1)[^\\]|\\.)*\1/,inside:{punctuation:/^[$`]|[$`]$/}},interpreted:{pattern:/'(?:[^'\\]|\\.)*'/,inside:{punctuation:/^'|'$/}},string:/"(?:[^"\\]|\\.)*"/,variable:/\w+(?==)/,punctuation:/^\[|\]$|,/,operator:/=/,"attr-value":/(?!^\s+$).+/}},a=t.languages.asciidoc={"comment-block":{pattern:/^(\/{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1/m,alias:"comment"},table:{pattern:/^\|={3,}(?:(?:\r?\n|\r(?!\n)).*)*?(?:\r?\n|\r)\|={3,}$/m,inside:{specifiers:{pattern:/(?:(?:(?:\d+(?:\.\d+)?|\.\d+)[+*](?:[<^>](?:\.[<^>])?|\.[<^>])?|[<^>](?:\.[<^>])?|\.[<^>])[a-z]*|[a-z]+)(?=\|)/,alias:"attr-value"},punctuation:{pattern:/(^|[^\\])[|!]=*/,lookbehind:!0}}},"passthrough-block":{pattern:/^(\+{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^\++|\++$/}},"literal-block":{pattern:/^(-{4,}|\.{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^(?:-+|\.+)|(?:-+|\.+)$/}},"other-block":{pattern:/^(--|\*{4,}|_{4,}|={4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/}},"list-punctuation":{pattern:/(^[ \t]*)(?:-|\*{1,5}|\.{1,5}|(?:[a-z]|\d+)\.|[xvi]+\))(?= )/im,lookbehind:!0,alias:"punctuation"},"list-label":{pattern:/(^[ \t]*)[a-z\d].+(?::{2,4}|;;)(?=\s)/im,lookbehind:!0,alias:"symbol"},"indented-block":{pattern:/((\r?\n|\r)\2)([ \t]+)\S.*(?:(?:\r?\n|\r)\3.+)*(?=\2{2}|$)/,lookbehind:!0},comment:/^\/\/.*/m,title:{pattern:/^.+(?:\r?\n|\r)(?:={3,}|-{3,}|~{3,}|\^{3,}|\+{3,})$|^={1,5} .+|^\.(?![\s.]).*/m,alias:"important",inside:{punctuation:/^(?:\.|=+)|(?:=+|-+|~+|\^+|\++)$/}},"attribute-entry":{pattern:/^:[^:\r\n]+:(?: .*?(?: \+(?:\r?\n|\r).*?)*)?$/m,alias:"tag"},attributes:n,hr:{pattern:/^'{3,}$/m,alias:"punctuation"},"page-break":{pattern:/^<{3,}$/m,alias:"punctuation"},admonition:{pattern:/^(?:CAUTION|IMPORTANT|NOTE|TIP|WARNING):/m,alias:"keyword"},callout:[{pattern:/(^[ \t]*)/m,lookbehind:!0,alias:"symbol"},{pattern:/<\d+>/,alias:"symbol"}],macro:{pattern:/\b[a-z\d][a-z\d-]*::?(?:[^\s\[\]]*\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:{function:/^[a-z\d-]+(?=:)/,punctuation:/^::?/,attributes:{pattern:/(?:\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:n.inside}}},inline:{pattern:/(^|[^\\])(?:(?:\B\[(?:[^\]\\"']|(["'])(?:(?!\2)[^\\]|\\.)*\2|\\.)*\])?(?:\b_(?!\s)(?: _|[^_\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: _|[^_\\\r\n]|\\.)+)*_\b|\B``(?!\s).+?(?:(?:\r?\n|\r).+?)*''\B|\B`(?!\s)(?:[^`'\s]|\s+\S)+['`]\B|\B(['*+#])(?!\s)(?: \3|(?!\3)[^\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: \3|(?!\3)[^\\\r\n]|\\.)+)*\3\B)|(?:\[(?:[^\]\\"']|(["'])(?:(?!\4)[^\\]|\\.)*\4|\\.)*\])?(?:(__|\*\*|\+\+\+?|##|\$\$|[~^]).+?(?:(?:\r?\n|\r).+?)*\5|\{[^}\r\n]+\}|\[\[\[?.+?(?:(?:\r?\n|\r).+?)*\]?\]\]|<<.+?(?:(?:\r?\n|\r).+?)*>>|\(\(\(?.+?(?:(?:\r?\n|\r).+?)*\)?\)\)))/m,lookbehind:!0,inside:{attributes:n,url:{pattern:/^(?:\[\[\[?.+?\]?\]\]|<<.+?>>)$/,inside:{punctuation:/^(?:\[\[\[?|<<)|(?:\]\]\]?|>>)$/}},"attribute-ref":{pattern:/^\{.+\}$/,inside:{variable:{pattern:/(^\{)[a-z\d,+_-]+/,lookbehind:!0},operator:/^[=?!#%@$]|!(?=[:}])/,punctuation:/^\{|\}$|::?/}},italic:{pattern:/^(['_])[\s\S]+\1$/,inside:{punctuation:/^(?:''?|__?)|(?:''?|__?)$/}},bold:{pattern:/^\*[\s\S]+\*$/,inside:{punctuation:/^\*\*?|\*\*?$/}},punctuation:/^(?:``?|\+{1,3}|##?|\$\$|[~^]|\(\(\(?)|(?:''?|\+{1,3}|##?|\$\$|[~^`]|\)?\)\))$/}},replacement:{pattern:/\((?:C|R|TM)\)/,alias:"builtin"},entity:/&#?[\da-z]{1,8};/i,"line-continuation":{pattern:/(^| )\+$/m,lookbehind:!0,alias:"punctuation"}};function i(t){for(var n={},i=0,e=(t=t.split(" ")).length;i](?:\.[<^>])?|\.[<^>])?|[<^>](?:\.[<^>])?|\.[<^>])[a-z]*|[a-z]+)(?=\|)/,alias:"attr-value"},punctuation:{pattern:/(^|[^\\])[|!]=*/,lookbehind:!0}}},"passthrough-block":{pattern:/^(\+{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^\++|\++$/}},"literal-block":{pattern:/^(-{4,}|\.{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^(?:-+|\.+)|(?:-+|\.+)$/}},"other-block":{pattern:/^(--|\*{4,}|_{4,}|={4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/}},"list-punctuation":{pattern:/(^[ \t]*)(?:-|\*{1,5}|\.{1,5}|(?:[a-z]|\d+)\.|[xvi]+\))(?= )/im,lookbehind:!0,alias:"punctuation"},"list-label":{pattern:/(^[ \t]*)[a-z\d].+(?::{2,4}|;;)(?=\s)/im,lookbehind:!0,alias:"symbol"},"indented-block":{pattern:/((\r?\n|\r)\2)([ \t]+)\S.*(?:(?:\r?\n|\r)\3.+)*(?=\2{2}|$)/,lookbehind:!0},comment:/^\/\/.*/m,title:{pattern:/^.+(?:\r?\n|\r)(?:={3,}|-{3,}|~{3,}|\^{3,}|\+{3,})$|^={1,5} .+|^\.(?![\s.]).*/m,alias:"important",inside:{punctuation:/^(?:\.|=+)|(?:=+|-+|~+|\^+|\++)$/}},"attribute-entry":{pattern:/^:[^:\r\n]+:(?: .*?(?: \+(?:\r?\n|\r).*?)*)?$/m,alias:"tag"},attributes:n,hr:{pattern:/^'{3,}$/m,alias:"punctuation"},"page-break":{pattern:/^<{3,}$/m,alias:"punctuation"},admonition:{pattern:/^(?:CAUTION|IMPORTANT|NOTE|TIP|WARNING):/m,alias:"keyword"},callout:[{pattern:/(^[ \t]*)/m,lookbehind:!0,alias:"symbol"},{pattern:/<\d+>/,alias:"symbol"}],macro:{pattern:/\b[a-z\d][a-z\d-]*::?(?:[^\s\[\]]*\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:{function:/^[a-z\d-]+(?=:)/,punctuation:/^::?/,attributes:{pattern:/(?:\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:n.inside}}},inline:{pattern:/(^|[^\\])(?:(?:\B\[(?:[^\]\\"']|(["'])(?:(?!\2)[^\\]|\\.)*\2|\\.)*\])?(?:\b_(?!\s)(?: _|[^_\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: _|[^_\\\r\n]|\\.)+)*_\b|\B``(?!\s).+?(?:(?:\r?\n|\r).+?)*''\B|\B`(?!\s)(?:[^`'\s]|\s+\S)+['`]\B|\B(['*+#])(?!\s)(?: \3|(?!\3)[^\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: \3|(?!\3)[^\\\r\n]|\\.)+)*\3\B)|(?:\[(?:[^\]\\"']|(["'])(?:(?!\4)[^\\]|\\.)*\4|\\.)*\])?(?:(__|\*\*|\+\+\+?|##|\$\$|[~^]).+?(?:(?:\r?\n|\r).+?)*\5|\{[^}\r\n]+\}|\[\[\[?.+?(?:(?:\r?\n|\r).+?)*\]?\]\]|<<.+?(?:(?:\r?\n|\r).+?)*>>|\(\(\(?.+?(?:(?:\r?\n|\r).+?)*\)?\)\)))/m,lookbehind:!0,inside:{attributes:n,url:{pattern:/^(?:\[\[\[?.+?\]?\]\]|<<.+?>>)$/,inside:{punctuation:/^(?:\[\[\[?|<<)|(?:\]\]\]?|>>)$/}},"attribute-ref":{pattern:/^\{.+\}$/,inside:{variable:{pattern:/(^\{)[a-z\d,+_-]+/,lookbehind:!0},operator:/^[=?!#%@$]|!(?=[:}])/,punctuation:/^\{|\}$|::?/}},italic:{pattern:/^(['_])[\s\S]+\1$/,inside:{punctuation:/^(?:''?|__?)|(?:''?|__?)$/}},bold:{pattern:/^\*[\s\S]+\*$/,inside:{punctuation:/^\*\*?|\*\*?$/}},punctuation:/^(?:``?|\+{1,3}|##?|\$\$|[~^]|\(\(\(?)|(?:''?|\+{1,3}|##?|\$\$|[~^`]|\)?\)\))$/}},replacement:{pattern:/\((?:C|R|TM)\)/,alias:"builtin"},entity:/&#?[\da-z]{1,8};/i,"line-continuation":{pattern:/(^| )\+$/m,lookbehind:!0,alias:"punctuation"}};function e(t){for(var n={},e=0,a=(t=t.split(" ")).length;e>=?|<<=?|&&?|\|\|?|[-+*/%&|^!=<>?]=?/, + 'operator': />>=?|<<=?|&[&=]?|\|[\|=]?|[-+*/%^!=<>?]=?/, 'punctuation': /[(),:]/ }; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-asmatmel.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-asmatmel.min.js index 6e6f8c6912..8c021f9ead 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-asmatmel.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-asmatmel.min.js @@ -1 +1 @@ -Prism.languages.asmatmel={comment:{pattern:/;.*/,greedy:!0},string:{pattern:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},constant:/\b(?:PORT[A-Z]|DDR[A-Z]|(?:DD|P)[A-Z](?:\d|[0-2]\d|3[01]))\b/,directive:{pattern:/\.\w+(?= )/,alias:"property"},"r-register":{pattern:/\br(?:\d|[12]\d|3[01])\b/,alias:"variable"},"op-code":{pattern:/\b(?:ADC|ADD|ADIW|AND|ANDI|ASR|BCLR|BLD|BRBC|BRBS|BRCC|BRCS|BREAK|BREQ|BRGE|BRHC|BRHS|BRID|BRIE|BRLO|BRLT|BRMI|BRNE|BRPL|BRSH|BRTC|BRTS|BRVC|BRVS|BSET|BST|CALL|CBI|CBR|CLC|CLH|CLI|CLN|CLR|CLS|CLT|CLV|CLZ|COM|CP|CPC|CPI|CPSE|DEC|DES|EICALL|EIJMP|ELPM|EOR|FMUL|FMULS|FMULSU|ICALL|IJMP|IN|INC|JMP|LAC|LAS|LAT|LD|LD[A-Za-z0-9]|LPM|LSL|LSR|MOV|MOVW|MUL|MULS|MULSU|NEG|NOP|OR|ORI|OUT|POP|PUSH|RCALL|RET|RETI|RJMP|ROL|ROR|SBC|SBCI|SBI|SBIC|SBIS|SBIW|SBR|SBRC|SBRS|SEC|SEH|SEI|SEN|SER|SES|SET|SEV|SEZ|SLEEP|SPM|ST|ST[A-Z0-9]|SUB|SUBI|SWAP|TST|WDR|XCH|adc|add|adiw|and|andi|asr|bclr|bld|brbc|brbs|brcc|brcs|break|breq|brge|brhc|brhs|brid|brie|brlo|brlt|brmi|brne|brpl|brsh|brtc|brts|brvc|brvs|bset|bst|call|cbi|cbr|clc|clh|cli|cln|clr|cls|clt|clv|clz|com|cp|cpc|cpi|cpse|dec|des|eicall|eijmp|elpm|eor|fmul|fmuls|fmulsu|icall|ijmp|in|inc|jmp|lac|las|lat|ld|ld[a-z0-9]|lpm|lsl|lsr|mov|movw|mul|muls|mulsu|neg|nop|or|ori|out|pop|push|rcall|ret|reti|rjmp|rol|ror|sbc|sbci|sbi|sbic|sbis|sbiw|sbr|sbrc|sbrs|sec|seh|sei|sen|ser|ses|set|sev|sez|sleep|spm|st|st[a-zA-Z0-9]|sub|subi|swap|tst|wdr|xch)\b/,alias:"keyword"},"hex-number":{pattern:/#?\$[\da-f]{2,4}\b/i,alias:"number"},"binary-number":{pattern:/#?%[01]+\b/,alias:"number"},"decimal-number":{pattern:/#?\b\d+\b/,alias:"number"},register:{pattern:/\b[acznvshtixy]\b/i,alias:"variable"},operator:/>>=?|<<=?|&&?|\|\|?|[-+*/%&|^!=<>?]=?/,punctuation:/[(),:]/}; \ No newline at end of file +Prism.languages.asmatmel={comment:{pattern:/;.*/,greedy:!0},string:{pattern:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},constant:/\b(?:PORT[A-Z]|DDR[A-Z]|(?:DD|P)[A-Z](?:\d|[0-2]\d|3[01]))\b/,directive:{pattern:/\.\w+(?= )/,alias:"property"},"r-register":{pattern:/\br(?:\d|[12]\d|3[01])\b/,alias:"variable"},"op-code":{pattern:/\b(?:ADC|ADD|ADIW|AND|ANDI|ASR|BCLR|BLD|BRBC|BRBS|BRCC|BRCS|BREAK|BREQ|BRGE|BRHC|BRHS|BRID|BRIE|BRLO|BRLT|BRMI|BRNE|BRPL|BRSH|BRTC|BRTS|BRVC|BRVS|BSET|BST|CALL|CBI|CBR|CLC|CLH|CLI|CLN|CLR|CLS|CLT|CLV|CLZ|COM|CP|CPC|CPI|CPSE|DEC|DES|EICALL|EIJMP|ELPM|EOR|FMUL|FMULS|FMULSU|ICALL|IJMP|IN|INC|JMP|LAC|LAS|LAT|LD|LD[A-Za-z0-9]|LPM|LSL|LSR|MOV|MOVW|MUL|MULS|MULSU|NEG|NOP|OR|ORI|OUT|POP|PUSH|RCALL|RET|RETI|RJMP|ROL|ROR|SBC|SBCI|SBI|SBIC|SBIS|SBIW|SBR|SBRC|SBRS|SEC|SEH|SEI|SEN|SER|SES|SET|SEV|SEZ|SLEEP|SPM|ST|ST[A-Z0-9]|SUB|SUBI|SWAP|TST|WDR|XCH|adc|add|adiw|and|andi|asr|bclr|bld|brbc|brbs|brcc|brcs|break|breq|brge|brhc|brhs|brid|brie|brlo|brlt|brmi|brne|brpl|brsh|brtc|brts|brvc|brvs|bset|bst|call|cbi|cbr|clc|clh|cli|cln|clr|cls|clt|clv|clz|com|cp|cpc|cpi|cpse|dec|des|eicall|eijmp|elpm|eor|fmul|fmuls|fmulsu|icall|ijmp|in|inc|jmp|lac|las|lat|ld|ld[a-z0-9]|lpm|lsl|lsr|mov|movw|mul|muls|mulsu|neg|nop|or|ori|out|pop|push|rcall|ret|reti|rjmp|rol|ror|sbc|sbci|sbi|sbic|sbis|sbiw|sbr|sbrc|sbrs|sec|seh|sei|sen|ser|ses|set|sev|sez|sleep|spm|st|st[a-zA-Z0-9]|sub|subi|swap|tst|wdr|xch)\b/,alias:"keyword"},"hex-number":{pattern:/#?\$[\da-f]{2,4}\b/i,alias:"number"},"binary-number":{pattern:/#?%[01]+\b/,alias:"number"},"decimal-number":{pattern:/#?\b\d+\b/,alias:"number"},register:{pattern:/\b[acznvshtixy]\b/i,alias:"variable"},operator:/>>=?|<<=?|&[&=]?|\|[\|=]?|[-+*/%^!=<>?]=?/,punctuation:/[(),:]/}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-autohotkey.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-autohotkey.js index dbd0751c94..eb68d154d2 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-autohotkey.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-autohotkey.js @@ -22,7 +22,10 @@ Prism.languages.autohotkey = { 'operator': /\?|\/\/?=?|:=|\|[=|]?|&[=&]?|\+[=+]?|-[=-]?|\*[=*]?|<(?:<=?|>|=)?|>>?=?|[.^!=~]=?|\b(?:AND|NOT|OR)\b/, 'boolean': /\b(?:false|true)\b/, - 'selector': /\b(?:AutoTrim|BlockInput|Break|Click|ClipWait|Continue|Control|ControlClick|ControlFocus|ControlGet|ControlGetFocus|ControlGetPos|ControlGetText|ControlMove|ControlSend|ControlSendRaw|ControlSetText|CoordMode|Critical|DetectHiddenText|DetectHiddenWindows|Drive|DriveGet|DriveSpaceFree|EnvAdd|EnvDiv|EnvGet|EnvMult|EnvSet|EnvSub|EnvUpdate|Exit|ExitApp|FileAppend|FileCopy|FileCopyDir|FileCreateDir|FileCreateShortcut|FileDelete|FileEncoding|FileGetAttrib|FileGetShortcut|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileMoveDir|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileRemoveDir|FileSelectFile|FileSelectFolder|FileSetAttrib|FileSetTime|FormatTime|GetKeyState|Gosub|Goto|GroupActivate|GroupAdd|GroupClose|GroupDeactivate|Gui|GuiControl|GuiControlGet|Hotkey|ImageSearch|IniDelete|IniRead|IniWrite|Input|InputBox|KeyWait|ListHotkeys|ListLines|ListVars|Loop|Menu|MouseClick|MouseClickDrag|MouseGetPos|MouseMove|MsgBox|OnExit|OutputDebug|Pause|PixelGetColor|PixelSearch|PostMessage|Process|Progress|Random|RegDelete|RegRead|RegWrite|Reload|Repeat|Return|Run|RunAs|RunWait|Send|SendEvent|SendInput|SendMessage|SendMode|SendPlay|SendRaw|SetBatchLines|SetCapslockState|SetControlDelay|SetDefaultMouseSpeed|SetEnv|SetFormat|SetKeyDelay|SetMouseDelay|SetNumlockState|SetRegView|SetScrollLockState|SetStoreCapslockMode|SetTimer|SetTitleMatchMode|SetWinDelay|SetWorkingDir|Shutdown|Sleep|Sort|SoundBeep|SoundGet|SoundGetWaveVolume|SoundPlay|SoundSet|SoundSetWaveVolume|SplashImage|SplashTextOff|SplashTextOn|SplitPath|StatusBarGetText|StatusBarWait|StringCaseSense|StringGetPos|StringLeft|StringLen|StringLower|StringMid|StringReplace|StringRight|StringSplit|StringTrimLeft|StringTrimRight|StringUpper|Suspend|SysGet|Thread|ToolTip|Transform|TrayTip|URLDownloadToFile|WinActivate|WinActivateBottom|WinClose|WinGet|WinGetActiveStats|WinGetActiveTitle|WinGetClass|WinGetPos|WinGetText|WinGetTitle|WinHide|WinKill|WinMaximize|WinMenuSelectItem|WinMinimize|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinRestore|WinSet|WinSetTitle|WinShow|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\b/i, + 'command': { + pattern: /\b(?:AutoTrim|BlockInput|Break|Click|ClipWait|Continue|Control|ControlClick|ControlFocus|ControlGet|ControlGetFocus|ControlGetPos|ControlGetText|ControlMove|ControlSend|ControlSendRaw|ControlSetText|CoordMode|Critical|DetectHiddenText|DetectHiddenWindows|Drive|DriveGet|DriveSpaceFree|EnvAdd|EnvDiv|EnvGet|EnvMult|EnvSet|EnvSub|EnvUpdate|Exit|ExitApp|FileAppend|FileCopy|FileCopyDir|FileCreateDir|FileCreateShortcut|FileDelete|FileEncoding|FileGetAttrib|FileGetShortcut|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileMoveDir|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileRemoveDir|FileSelectFile|FileSelectFolder|FileSetAttrib|FileSetTime|FormatTime|GetKeyState|Gosub|Goto|GroupActivate|GroupAdd|GroupClose|GroupDeactivate|Gui|GuiControl|GuiControlGet|Hotkey|ImageSearch|IniDelete|IniRead|IniWrite|Input|InputBox|KeyWait|ListHotkeys|ListLines|ListVars|Loop|Menu|MouseClick|MouseClickDrag|MouseGetPos|MouseMove|MsgBox|OnExit|OutputDebug|Pause|PixelGetColor|PixelSearch|PostMessage|Process|Progress|Random|RegDelete|RegRead|RegWrite|Reload|Repeat|Return|Run|RunAs|RunWait|Send|SendEvent|SendInput|SendMessage|SendMode|SendPlay|SendRaw|SetBatchLines|SetCapslockState|SetControlDelay|SetDefaultMouseSpeed|SetEnv|SetFormat|SetKeyDelay|SetMouseDelay|SetNumlockState|SetRegView|SetScrollLockState|SetStoreCapslockMode|SetTimer|SetTitleMatchMode|SetWinDelay|SetWorkingDir|Shutdown|Sleep|Sort|SoundBeep|SoundGet|SoundGetWaveVolume|SoundPlay|SoundSet|SoundSetWaveVolume|SplashImage|SplashTextOff|SplashTextOn|SplitPath|StatusBarGetText|StatusBarWait|StringCaseSense|StringGetPos|StringLeft|StringLen|StringLower|StringMid|StringReplace|StringRight|StringSplit|StringTrimLeft|StringTrimRight|StringUpper|Suspend|SysGet|Thread|ToolTip|Transform|TrayTip|URLDownloadToFile|WinActivate|WinActivateBottom|WinClose|WinGet|WinGetActiveStats|WinGetActiveTitle|WinGetClass|WinGetPos|WinGetText|WinGetTitle|WinHide|WinKill|WinMaximize|WinMenuSelectItem|WinMinimize|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinRestore|WinSet|WinSetTitle|WinShow|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\b/i, + alias: 'selector' + }, 'constant': /\b(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_fileencoding|a_formatfloat|a_formatinteger|a_gui|a_guicontrol|a_guicontrolevent|a_guievent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_is64bitos|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_isunicode|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|a_priorkey|a_programfiles|a_programs|a_programscommon|a_ptrsize|a_regview|a_screendpi|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scripthwnd|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel|programfiles)\b/i, @@ -30,7 +33,10 @@ Prism.languages.autohotkey = { 'symbol': /\b(?:alt|altdown|altup|appskey|backspace|browser_back|browser_favorites|browser_forward|browser_home|browser_refresh|browser_search|browser_stop|bs|capslock|ctrl|ctrlbreak|ctrldown|ctrlup|del|delete|down|end|enter|esc|escape|f1|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f2|f20|f21|f22|f23|f24|f3|f4|f5|f6|f7|f8|f9|home|ins|insert|joy1|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy2|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy3|joy30|joy31|joy32|joy4|joy5|joy6|joy7|joy8|joy9|joyaxes|joybuttons|joyinfo|joyname|joypov|joyr|joyu|joyv|joyx|joyy|joyz|lalt|launch_app1|launch_app2|launch_mail|launch_media|lbutton|lcontrol|lctrl|left|lshift|lwin|lwindown|lwinup|mbutton|media_next|media_play_pause|media_prev|media_stop|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadadd|numpadclear|numpaddel|numpaddiv|numpaddot|numpaddown|numpadend|numpadenter|numpadhome|numpadins|numpadleft|numpadmult|numpadpgdn|numpadpgup|numpadright|numpadsub|numpadup|pgdn|pgup|printscreen|ralt|rbutton|rcontrol|rctrl|right|rshift|rwin|rwindown|rwinup|scrolllock|shift|shiftdown|shiftup|space|tab|up|volume_down|volume_mute|volume_up|wheeldown|wheelleft|wheelright|wheelup|xbutton1|xbutton2)\b/i, - 'important': /#\b(?:AllowSameLineComments|ClipboardTimeout|CommentFlag|DerefChar|ErrorStdOut|EscapeChar|HotkeyInterval|HotkeyModifierTimeout|Hotstring|If|IfTimeout|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Include|IncludeAgain|InputLevel|InstallKeybdHook|InstallMouseHook|KeyHistory|MaxHotkeysPerInterval|MaxMem|MaxThreads|MaxThreadsBuffer|MaxThreadsPerHotkey|MenuMaskKey|NoEnv|NoTrayIcon|Persistent|SingleInstance|UseHook|Warn|WinActivateForce)\b/i, + 'directive': { + pattern: /#[a-z]+\b/i, + alias: 'important' + }, 'keyword': /\b(?:Abort|AboveNormal|Add|ahk_class|ahk_exe|ahk_group|ahk_id|ahk_pid|All|Alnum|Alpha|AltSubmit|AltTab|AltTabAndMenu|AltTabMenu|AltTabMenuDismiss|AlwaysOnTop|AutoSize|Background|BackgroundTrans|BelowNormal|between|BitAnd|BitNot|BitOr|BitShiftLeft|BitShiftRight|BitXOr|Bold|Border|Button|ByRef|Catch|Checkbox|Checked|CheckedGray|Choose|ChooseString|Close|Color|ComboBox|Contains|ControlList|Count|Date|DateTime|Days|DDL|Default|DeleteAll|Delimiter|Deref|Destroy|Digit|Disable|Disabled|DropDownList|Edit|Eject|Else|Enable|Enabled|Error|Exist|Expand|ExStyle|FileSystem|Finally|First|Flash|Float|FloatFast|Focus|Font|for|global|Grid|Group|GroupBox|GuiClose|GuiContextMenu|GuiDropFiles|GuiEscape|GuiSize|Hdr|Hidden|Hide|High|HKCC|HKCR|HKCU|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE|HKEY_USERS|HKLM|HKU|Hours|HScroll|Icon|IconSmall|ID|IDLast|If|IfEqual|IfExist|IfGreater|IfGreaterOrEqual|IfInString|IfLess|IfLessOrEqual|IfMsgBox|IfNotEqual|IfNotExist|IfNotInString|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Ignore|ImageList|in|Integer|IntegerFast|Interrupt|is|italic|Join|Label|LastFound|LastFoundExist|Limit|Lines|List|ListBox|ListView|local|Lock|Logoff|Low|Lower|Lowercase|MainWindow|Margin|Maximize|MaximizeBox|MaxSize|Minimize|MinimizeBox|MinMax|MinSize|Minutes|MonthCal|Mouse|Move|Multi|NA|No|NoActivate|NoDefault|NoHide|NoIcon|NoMainWindow|norm|Normal|NoSort|NoSortHdr|NoStandard|Not|NoTab|NoTimers|Number|Off|Ok|On|OwnDialogs|Owner|Parse|Password|Picture|Pixel|Pos|Pow|Priority|ProcessName|Radio|Range|Read|ReadOnly|Realtime|Redraw|Region|REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_SZ|Relative|Rename|Report|Resize|Restore|Retry|RGB|Screen|Seconds|Section|Serial|SetLabel|ShiftAltTab|Show|Single|Slider|SortDesc|Standard|static|Status|StatusBar|StatusCD|strike|Style|Submit|SysMenu|Tab2|TabStop|Text|Theme|Throw|Tile|ToggleCheck|ToggleEnable|ToolWindow|Top|Topmost|TransColor|Transparent|Tray|TreeView|Try|TryAgain|Type|UnCheck|underline|Unicode|Unlock|Until|UpDown|Upper|Uppercase|UseErrorLevel|Vis|VisFirst|Visible|VScroll|Wait|WaitClose|WantCtrlA|WantF2|WantReturn|While|Wrap|Xdigit|xm|xp|xs|Yes|ym|yp|ys)\b/i, 'function': /[^(); \t,\n+*\-=?>:\\\/<&%\[\]]+(?=\()/, diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-autohotkey.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-autohotkey.min.js index d7e1894410..79e06a1a4f 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-autohotkey.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-autohotkey.min.js @@ -1 +1 @@ -Prism.languages.autohotkey={comment:[{pattern:/(^|\s);.*/,lookbehind:!0},{pattern:/(^[\t ]*)\/\*(?:[\r\n](?![ \t]*\*\/)|[^\r\n])*(?:[\r\n][ \t]*\*\/)?/m,lookbehind:!0,greedy:!0}],tag:{pattern:/^([ \t]*)[^\s,`":]+(?=:[ \t]*$)/m,lookbehind:!0},string:/"(?:[^"\n\r]|"")*"/,variable:/%\w+%/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/\?|\/\/?=?|:=|\|[=|]?|&[=&]?|\+[=+]?|-[=-]?|\*[=*]?|<(?:<=?|>|=)?|>>?=?|[.^!=~]=?|\b(?:AND|NOT|OR)\b/,boolean:/\b(?:false|true)\b/,selector:/\b(?:AutoTrim|BlockInput|Break|Click|ClipWait|Continue|Control|ControlClick|ControlFocus|ControlGet|ControlGetFocus|ControlGetPos|ControlGetText|ControlMove|ControlSend|ControlSendRaw|ControlSetText|CoordMode|Critical|DetectHiddenText|DetectHiddenWindows|Drive|DriveGet|DriveSpaceFree|EnvAdd|EnvDiv|EnvGet|EnvMult|EnvSet|EnvSub|EnvUpdate|Exit|ExitApp|FileAppend|FileCopy|FileCopyDir|FileCreateDir|FileCreateShortcut|FileDelete|FileEncoding|FileGetAttrib|FileGetShortcut|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileMoveDir|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileRemoveDir|FileSelectFile|FileSelectFolder|FileSetAttrib|FileSetTime|FormatTime|GetKeyState|Gosub|Goto|GroupActivate|GroupAdd|GroupClose|GroupDeactivate|Gui|GuiControl|GuiControlGet|Hotkey|ImageSearch|IniDelete|IniRead|IniWrite|Input|InputBox|KeyWait|ListHotkeys|ListLines|ListVars|Loop|Menu|MouseClick|MouseClickDrag|MouseGetPos|MouseMove|MsgBox|OnExit|OutputDebug|Pause|PixelGetColor|PixelSearch|PostMessage|Process|Progress|Random|RegDelete|RegRead|RegWrite|Reload|Repeat|Return|Run|RunAs|RunWait|Send|SendEvent|SendInput|SendMessage|SendMode|SendPlay|SendRaw|SetBatchLines|SetCapslockState|SetControlDelay|SetDefaultMouseSpeed|SetEnv|SetFormat|SetKeyDelay|SetMouseDelay|SetNumlockState|SetRegView|SetScrollLockState|SetStoreCapslockMode|SetTimer|SetTitleMatchMode|SetWinDelay|SetWorkingDir|Shutdown|Sleep|Sort|SoundBeep|SoundGet|SoundGetWaveVolume|SoundPlay|SoundSet|SoundSetWaveVolume|SplashImage|SplashTextOff|SplashTextOn|SplitPath|StatusBarGetText|StatusBarWait|StringCaseSense|StringGetPos|StringLeft|StringLen|StringLower|StringMid|StringReplace|StringRight|StringSplit|StringTrimLeft|StringTrimRight|StringUpper|Suspend|SysGet|Thread|ToolTip|Transform|TrayTip|URLDownloadToFile|WinActivate|WinActivateBottom|WinClose|WinGet|WinGetActiveStats|WinGetActiveTitle|WinGetClass|WinGetPos|WinGetText|WinGetTitle|WinHide|WinKill|WinMaximize|WinMenuSelectItem|WinMinimize|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinRestore|WinSet|WinSetTitle|WinShow|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\b/i,constant:/\b(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_fileencoding|a_formatfloat|a_formatinteger|a_gui|a_guicontrol|a_guicontrolevent|a_guievent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_is64bitos|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_isunicode|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|a_priorkey|a_programfiles|a_programs|a_programscommon|a_ptrsize|a_regview|a_screendpi|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scripthwnd|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel|programfiles)\b/i,builtin:/\b(?:abs|acos|asc|asin|atan|ceil|chr|class|comobjactive|comobjarray|comobjconnect|comobjcreate|comobjerror|comobjflags|comobjget|comobjquery|comobjtype|comobjvalue|cos|dllcall|exp|fileexist|Fileopen|floor|format|il_add|il_create|il_destroy|instr|isfunc|islabel|IsObject|ln|log|ltrim|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|numget|numput|onmessage|regexmatch|regexreplace|registercallback|round|rtrim|sb_seticon|sb_setparts|sb_settext|sin|sqrt|strlen|strreplace|strsplit|substr|tan|tv_add|tv_delete|tv_get|tv_getchild|tv_getcount|tv_getnext|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist|__Call|__Get|__New|__Set)\b/i,symbol:/\b(?:alt|altdown|altup|appskey|backspace|browser_back|browser_favorites|browser_forward|browser_home|browser_refresh|browser_search|browser_stop|bs|capslock|ctrl|ctrlbreak|ctrldown|ctrlup|del|delete|down|end|enter|esc|escape|f1|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f2|f20|f21|f22|f23|f24|f3|f4|f5|f6|f7|f8|f9|home|ins|insert|joy1|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy2|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy3|joy30|joy31|joy32|joy4|joy5|joy6|joy7|joy8|joy9|joyaxes|joybuttons|joyinfo|joyname|joypov|joyr|joyu|joyv|joyx|joyy|joyz|lalt|launch_app1|launch_app2|launch_mail|launch_media|lbutton|lcontrol|lctrl|left|lshift|lwin|lwindown|lwinup|mbutton|media_next|media_play_pause|media_prev|media_stop|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadadd|numpadclear|numpaddel|numpaddiv|numpaddot|numpaddown|numpadend|numpadenter|numpadhome|numpadins|numpadleft|numpadmult|numpadpgdn|numpadpgup|numpadright|numpadsub|numpadup|pgdn|pgup|printscreen|ralt|rbutton|rcontrol|rctrl|right|rshift|rwin|rwindown|rwinup|scrolllock|shift|shiftdown|shiftup|space|tab|up|volume_down|volume_mute|volume_up|wheeldown|wheelleft|wheelright|wheelup|xbutton1|xbutton2)\b/i,important:/#\b(?:AllowSameLineComments|ClipboardTimeout|CommentFlag|DerefChar|ErrorStdOut|EscapeChar|HotkeyInterval|HotkeyModifierTimeout|Hotstring|If|IfTimeout|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Include|IncludeAgain|InputLevel|InstallKeybdHook|InstallMouseHook|KeyHistory|MaxHotkeysPerInterval|MaxMem|MaxThreads|MaxThreadsBuffer|MaxThreadsPerHotkey|MenuMaskKey|NoEnv|NoTrayIcon|Persistent|SingleInstance|UseHook|Warn|WinActivateForce)\b/i,keyword:/\b(?:Abort|AboveNormal|Add|ahk_class|ahk_exe|ahk_group|ahk_id|ahk_pid|All|Alnum|Alpha|AltSubmit|AltTab|AltTabAndMenu|AltTabMenu|AltTabMenuDismiss|AlwaysOnTop|AutoSize|Background|BackgroundTrans|BelowNormal|between|BitAnd|BitNot|BitOr|BitShiftLeft|BitShiftRight|BitXOr|Bold|Border|Button|ByRef|Catch|Checkbox|Checked|CheckedGray|Choose|ChooseString|Close|Color|ComboBox|Contains|ControlList|Count|Date|DateTime|Days|DDL|Default|DeleteAll|Delimiter|Deref|Destroy|Digit|Disable|Disabled|DropDownList|Edit|Eject|Else|Enable|Enabled|Error|Exist|Expand|ExStyle|FileSystem|Finally|First|Flash|Float|FloatFast|Focus|Font|for|global|Grid|Group|GroupBox|GuiClose|GuiContextMenu|GuiDropFiles|GuiEscape|GuiSize|Hdr|Hidden|Hide|High|HKCC|HKCR|HKCU|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE|HKEY_USERS|HKLM|HKU|Hours|HScroll|Icon|IconSmall|ID|IDLast|If|IfEqual|IfExist|IfGreater|IfGreaterOrEqual|IfInString|IfLess|IfLessOrEqual|IfMsgBox|IfNotEqual|IfNotExist|IfNotInString|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Ignore|ImageList|in|Integer|IntegerFast|Interrupt|is|italic|Join|Label|LastFound|LastFoundExist|Limit|Lines|List|ListBox|ListView|local|Lock|Logoff|Low|Lower|Lowercase|MainWindow|Margin|Maximize|MaximizeBox|MaxSize|Minimize|MinimizeBox|MinMax|MinSize|Minutes|MonthCal|Mouse|Move|Multi|NA|No|NoActivate|NoDefault|NoHide|NoIcon|NoMainWindow|norm|Normal|NoSort|NoSortHdr|NoStandard|Not|NoTab|NoTimers|Number|Off|Ok|On|OwnDialogs|Owner|Parse|Password|Picture|Pixel|Pos|Pow|Priority|ProcessName|Radio|Range|Read|ReadOnly|Realtime|Redraw|Region|REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_SZ|Relative|Rename|Report|Resize|Restore|Retry|RGB|Screen|Seconds|Section|Serial|SetLabel|ShiftAltTab|Show|Single|Slider|SortDesc|Standard|static|Status|StatusBar|StatusCD|strike|Style|Submit|SysMenu|Tab2|TabStop|Text|Theme|Throw|Tile|ToggleCheck|ToggleEnable|ToolWindow|Top|Topmost|TransColor|Transparent|Tray|TreeView|Try|TryAgain|Type|UnCheck|underline|Unicode|Unlock|Until|UpDown|Upper|Uppercase|UseErrorLevel|Vis|VisFirst|Visible|VScroll|Wait|WaitClose|WantCtrlA|WantF2|WantReturn|While|Wrap|Xdigit|xm|xp|xs|Yes|ym|yp|ys)\b/i,function:/[^(); \t,\n+*\-=?>:\\\/<&%\[\]]+(?=\()/,punctuation:/[{}[\]():,]/}; \ No newline at end of file +Prism.languages.autohotkey={comment:[{pattern:/(^|\s);.*/,lookbehind:!0},{pattern:/(^[\t ]*)\/\*(?:[\r\n](?![ \t]*\*\/)|[^\r\n])*(?:[\r\n][ \t]*\*\/)?/m,lookbehind:!0,greedy:!0}],tag:{pattern:/^([ \t]*)[^\s,`":]+(?=:[ \t]*$)/m,lookbehind:!0},string:/"(?:[^"\n\r]|"")*"/,variable:/%\w+%/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/\?|\/\/?=?|:=|\|[=|]?|&[=&]?|\+[=+]?|-[=-]?|\*[=*]?|<(?:<=?|>|=)?|>>?=?|[.^!=~]=?|\b(?:AND|NOT|OR)\b/,boolean:/\b(?:false|true)\b/,command:{pattern:/\b(?:AutoTrim|BlockInput|Break|Click|ClipWait|Continue|Control|ControlClick|ControlFocus|ControlGet|ControlGetFocus|ControlGetPos|ControlGetText|ControlMove|ControlSend|ControlSendRaw|ControlSetText|CoordMode|Critical|DetectHiddenText|DetectHiddenWindows|Drive|DriveGet|DriveSpaceFree|EnvAdd|EnvDiv|EnvGet|EnvMult|EnvSet|EnvSub|EnvUpdate|Exit|ExitApp|FileAppend|FileCopy|FileCopyDir|FileCreateDir|FileCreateShortcut|FileDelete|FileEncoding|FileGetAttrib|FileGetShortcut|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileMoveDir|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileRemoveDir|FileSelectFile|FileSelectFolder|FileSetAttrib|FileSetTime|FormatTime|GetKeyState|Gosub|Goto|GroupActivate|GroupAdd|GroupClose|GroupDeactivate|Gui|GuiControl|GuiControlGet|Hotkey|ImageSearch|IniDelete|IniRead|IniWrite|Input|InputBox|KeyWait|ListHotkeys|ListLines|ListVars|Loop|Menu|MouseClick|MouseClickDrag|MouseGetPos|MouseMove|MsgBox|OnExit|OutputDebug|Pause|PixelGetColor|PixelSearch|PostMessage|Process|Progress|Random|RegDelete|RegRead|RegWrite|Reload|Repeat|Return|Run|RunAs|RunWait|Send|SendEvent|SendInput|SendMessage|SendMode|SendPlay|SendRaw|SetBatchLines|SetCapslockState|SetControlDelay|SetDefaultMouseSpeed|SetEnv|SetFormat|SetKeyDelay|SetMouseDelay|SetNumlockState|SetRegView|SetScrollLockState|SetStoreCapslockMode|SetTimer|SetTitleMatchMode|SetWinDelay|SetWorkingDir|Shutdown|Sleep|Sort|SoundBeep|SoundGet|SoundGetWaveVolume|SoundPlay|SoundSet|SoundSetWaveVolume|SplashImage|SplashTextOff|SplashTextOn|SplitPath|StatusBarGetText|StatusBarWait|StringCaseSense|StringGetPos|StringLeft|StringLen|StringLower|StringMid|StringReplace|StringRight|StringSplit|StringTrimLeft|StringTrimRight|StringUpper|Suspend|SysGet|Thread|ToolTip|Transform|TrayTip|URLDownloadToFile|WinActivate|WinActivateBottom|WinClose|WinGet|WinGetActiveStats|WinGetActiveTitle|WinGetClass|WinGetPos|WinGetText|WinGetTitle|WinHide|WinKill|WinMaximize|WinMenuSelectItem|WinMinimize|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinRestore|WinSet|WinSetTitle|WinShow|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\b/i,alias:"selector"},constant:/\b(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_fileencoding|a_formatfloat|a_formatinteger|a_gui|a_guicontrol|a_guicontrolevent|a_guievent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_is64bitos|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_isunicode|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|a_priorkey|a_programfiles|a_programs|a_programscommon|a_ptrsize|a_regview|a_screendpi|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scripthwnd|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel|programfiles)\b/i,builtin:/\b(?:abs|acos|asc|asin|atan|ceil|chr|class|comobjactive|comobjarray|comobjconnect|comobjcreate|comobjerror|comobjflags|comobjget|comobjquery|comobjtype|comobjvalue|cos|dllcall|exp|fileexist|Fileopen|floor|format|il_add|il_create|il_destroy|instr|isfunc|islabel|IsObject|ln|log|ltrim|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|numget|numput|onmessage|regexmatch|regexreplace|registercallback|round|rtrim|sb_seticon|sb_setparts|sb_settext|sin|sqrt|strlen|strreplace|strsplit|substr|tan|tv_add|tv_delete|tv_get|tv_getchild|tv_getcount|tv_getnext|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist|__Call|__Get|__New|__Set)\b/i,symbol:/\b(?:alt|altdown|altup|appskey|backspace|browser_back|browser_favorites|browser_forward|browser_home|browser_refresh|browser_search|browser_stop|bs|capslock|ctrl|ctrlbreak|ctrldown|ctrlup|del|delete|down|end|enter|esc|escape|f1|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f2|f20|f21|f22|f23|f24|f3|f4|f5|f6|f7|f8|f9|home|ins|insert|joy1|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy2|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy3|joy30|joy31|joy32|joy4|joy5|joy6|joy7|joy8|joy9|joyaxes|joybuttons|joyinfo|joyname|joypov|joyr|joyu|joyv|joyx|joyy|joyz|lalt|launch_app1|launch_app2|launch_mail|launch_media|lbutton|lcontrol|lctrl|left|lshift|lwin|lwindown|lwinup|mbutton|media_next|media_play_pause|media_prev|media_stop|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadadd|numpadclear|numpaddel|numpaddiv|numpaddot|numpaddown|numpadend|numpadenter|numpadhome|numpadins|numpadleft|numpadmult|numpadpgdn|numpadpgup|numpadright|numpadsub|numpadup|pgdn|pgup|printscreen|ralt|rbutton|rcontrol|rctrl|right|rshift|rwin|rwindown|rwinup|scrolllock|shift|shiftdown|shiftup|space|tab|up|volume_down|volume_mute|volume_up|wheeldown|wheelleft|wheelright|wheelup|xbutton1|xbutton2)\b/i,directive:{pattern:/#[a-z]+\b/i,alias:"important"},keyword:/\b(?:Abort|AboveNormal|Add|ahk_class|ahk_exe|ahk_group|ahk_id|ahk_pid|All|Alnum|Alpha|AltSubmit|AltTab|AltTabAndMenu|AltTabMenu|AltTabMenuDismiss|AlwaysOnTop|AutoSize|Background|BackgroundTrans|BelowNormal|between|BitAnd|BitNot|BitOr|BitShiftLeft|BitShiftRight|BitXOr|Bold|Border|Button|ByRef|Catch|Checkbox|Checked|CheckedGray|Choose|ChooseString|Close|Color|ComboBox|Contains|ControlList|Count|Date|DateTime|Days|DDL|Default|DeleteAll|Delimiter|Deref|Destroy|Digit|Disable|Disabled|DropDownList|Edit|Eject|Else|Enable|Enabled|Error|Exist|Expand|ExStyle|FileSystem|Finally|First|Flash|Float|FloatFast|Focus|Font|for|global|Grid|Group|GroupBox|GuiClose|GuiContextMenu|GuiDropFiles|GuiEscape|GuiSize|Hdr|Hidden|Hide|High|HKCC|HKCR|HKCU|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE|HKEY_USERS|HKLM|HKU|Hours|HScroll|Icon|IconSmall|ID|IDLast|If|IfEqual|IfExist|IfGreater|IfGreaterOrEqual|IfInString|IfLess|IfLessOrEqual|IfMsgBox|IfNotEqual|IfNotExist|IfNotInString|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Ignore|ImageList|in|Integer|IntegerFast|Interrupt|is|italic|Join|Label|LastFound|LastFoundExist|Limit|Lines|List|ListBox|ListView|local|Lock|Logoff|Low|Lower|Lowercase|MainWindow|Margin|Maximize|MaximizeBox|MaxSize|Minimize|MinimizeBox|MinMax|MinSize|Minutes|MonthCal|Mouse|Move|Multi|NA|No|NoActivate|NoDefault|NoHide|NoIcon|NoMainWindow|norm|Normal|NoSort|NoSortHdr|NoStandard|Not|NoTab|NoTimers|Number|Off|Ok|On|OwnDialogs|Owner|Parse|Password|Picture|Pixel|Pos|Pow|Priority|ProcessName|Radio|Range|Read|ReadOnly|Realtime|Redraw|Region|REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_SZ|Relative|Rename|Report|Resize|Restore|Retry|RGB|Screen|Seconds|Section|Serial|SetLabel|ShiftAltTab|Show|Single|Slider|SortDesc|Standard|static|Status|StatusBar|StatusCD|strike|Style|Submit|SysMenu|Tab2|TabStop|Text|Theme|Throw|Tile|ToggleCheck|ToggleEnable|ToolWindow|Top|Topmost|TransColor|Transparent|Tray|TreeView|Try|TryAgain|Type|UnCheck|underline|Unicode|Unlock|Until|UpDown|Upper|Uppercase|UseErrorLevel|Vis|VisFirst|Visible|VScroll|Wait|WaitClose|WantCtrlA|WantF2|WantReturn|While|Wrap|Xdigit|xm|xp|xs|Yes|ym|yp|ys)\b/i,function:/[^(); \t,\n+*\-=?>:\\\/<&%\[\]]+(?=\()/,punctuation:/[{}[\]():,]/}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-avisynth.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-avisynth.min.js index 14a8b68e99..851807cf74 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-avisynth.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-avisynth.min.js @@ -1 +1 @@ -!function(e){function a(e,a,r){return RegExp(function(e,r){return e.replace(/<<(\d+)>>/g,function(e,a){return r[+a]})}(e,a),r||"")}var r="bool|clip|float|int|string|val",t=[["is(?:bool|clip|float|int|string)|defined|(?:(?:internal)?function|var)?exists?","apply|assert|default|eval|import|nop|select|undefined","opt_(?:allowfloataudio|avipadscanlines|dwchannelmask|enable_(?:b64a|planartopackedrgb|v210|y3_10_10|y3_10_16)|usewaveextensible|vdubplanarhack)|set(?:cachemode|maxcpu|memorymax|planarlegacyalignment|workingdir)","hex(?:value)?|value","abs|ceil|continued(?:denominator|numerator)?|exp|floor|fmod|frac|log(?:10)?|max|min|muldiv|pi|pow|rand|round|sign|spline|sqrt","a?sinh?|a?cosh?|a?tan[2h]?","(?:bit(?:and|not|x?or|[lr]?shift[aslu]?|sh[lr]|sa[lr]|[lr]rotatel?|ro[rl]|te?st|set(?:count)?|cl(?:ea)?r|ch(?:an)?ge?))","average(?:[bgr]|chroma[uv]|luma)|(?:[rgb]|chroma[uv]|luma|rgb|[yuv](?=difference(?:fromprevious|tonext)))difference(?:fromprevious|tonext)?|[yuvrgb]plane(?:median|min|max|minmaxdifference)","getprocessinfo|logmsg|script(?:dir(?:utf8)?|file(?:utf8)?|name(?:utf8)?)|setlogparams","chr|(?:fill|find|left|mid|replace|rev|right)str|format|[lu]case|ord|str(?:cmpi?|fromutf8|len|toutf8)|time|trim(?:all|left|right)","isversionorgreater|version(?:number|string)","buildpixeltype|colorspacenametopixeltype","addautoloaddir|on(?:cpu|cuda)|prefetch|setfiltermtmode"].join("|"),["has(?:audio|video)","height|width","frame(?:count|rate)|framerate(?:denominator|numerator)","getparity|is(?:field|frame)based","bitspercomponent|componentsize|hasalpha|is(?:planar(?:rgba?)?|interleaved|rgb(?:24|32|48|64)?|y(?:8|u(?:va?|y2))?|yv(?:12|16|24|411)|420|422|444|packedrgb)|numcomponents|pixeltype","audio(?:bits|channels|duration|length(?:[fs]|hi|lo)?|rate)|isaudio(?:float|int)"].join("|"),["avi(?:file)?source|directshowsource|image(?:reader|source|sourceanim)|opendmlsource|segmented(?:avisource|directshowsource)|wavsource","coloryuv|convertbacktoyuy2|convertto(?:RGB(?:24|32|48|64)|(?:planar)?RGBA?|Y8?|YV(?:12|16|24|411)|YUVA?(?:411|420|422|444)|YUY2)|fixluminance|gr[ae]yscale|invert|levels|limiter|mergea?rgb|merge(?:chroma|luma)|rgbadjust|show(?:alpha|blue|green|red)|swapuv|tweak|[uv]toy8?|ytouv","(?:colorkey|reset)mask|layer|mask(?:hs)?|merge|overlay|subtract","addborders|(?:bicubic|bilinear|blackman|gauss|lanczos4|lanczos|point|sinc|spline(?:16|36|64))resize|crop(?:bottom)?|flip(?:horizontal|vertical)|(?:horizontal|vertical)?reduceby2|letterbox|skewrows|turn(?:180|left|right)","blur|fixbrokenchromaupsampling|generalconvolution|(?:spatial|temporal)soften|sharpen","trim|(?:un)?alignedsplice|(?:assume|assumescaled|change|convert)FPS|(?:delete|duplicate)frame|dissolve|fade(?:in|io|out)[02]?|freezeframe|interleave|loop|reverse|select(?:even|odd|(?:range)?every)","assume[bt]ff|assume(?:field|frame)based|bob|complementparity|doubleweave|peculiarblend|pulldown|separate(?:columns|fields|rows)|swapfields|weave(?:columns|rows)?","amplify(?:db)?|assumesamplerate|audiodub(?:ex)?|audiotrim|convertaudioto(?:(?:8|16|24|32)bit|float)|converttomono|delayaudio|ensurevbrmp3sync|get(?:left|right)?channel|kill(?:audio|video)|mergechannels|mixaudio|monotostereo|normalize|resampleaudio|ssrc|supereq|timestretch","animate|applyrange|conditional(?:filter|reader|select)|frameevaluate|scriptclip|tcp(?:server|source)|writefile(?:end|if|start)?","imagewriter","blackness|blankclip|colorbars(?:hd)?|compare|dumpfiltergraph|echo|histogram|info|messageclip|preroll|setgraphanalysis|show(?:framenumber|smpte|time)|showfiveversions|stack(?:horizontal|vertical)|subtitle|tone|version"].join("|")].join("|");e.languages.avisynth={comment:[{pattern:/(^|[^\\])\[\*(?:[^\[*]|\[(?!\*)|\*(?!\])|\[\*(?:[^\[*]|\[(?!\*)|\*(?!\]))*\*\])*\*\]/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0,greedy:!0}],argument:{pattern:a('\\b(?:<<0>>)\\s+("?)\\w+\\1',[r],"i"),inside:{keyword:/^\w+/}},"argument-label":{pattern:/([,(][\s\\]*)\w+\s*=(?!=)/,lookbehind:!0,inside:{"argument-name":{pattern:/^\w+/,alias:"punctuation"},punctuation:/=$/}},string:[{pattern:/"""[\s\S]*?"""/,greedy:!0},{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0,inside:{constant:{pattern:/\b(?:DEFAULT_MT_MODE|(?:MAINSCRIPT|PROGRAM|SCRIPT)DIR|(?:MACHINE|USER)_(?:CLASSIC|PLUS)_PLUGINS)\b/}}}],variable:/\b(?:last)\b/i,boolean:/\b(?:false|no|true|yes)\b/i,keyword:/\b(?:catch|else|for|function|global|if|return|try|while|__END__)\b/i,constant:/\bMT_(?:MULTI_INSTANCE|NICE_FILTER|SERIALIZED|SPECIAL_MT)\b/,"builtin-function":{pattern:a("\\b(?:<<0>>)\\b",[t],"i"),alias:"function"},"type-cast":{pattern:a("\\b(?:<<0>>)(?=\\s*\\()",[r],"i"),alias:"keyword"},function:{pattern:/\b[a-z_]\w*(?=\s*\()|(\.)[a-z_]\w*\b/i,lookbehind:!0},"line-continuation":{pattern:/(^[ \t]*)\\|\\(?=[ \t]*$)/m,lookbehind:!0,alias:"punctuation"},number:/\B\$(?:[\da-f]{6}|[\da-f]{8})\b|(?:(?:\b|\B-)\d+(?:\.\d*)?\b|\B\.\d+\b)/i,operator:/\+\+?|[!=<>]=?|&&|\|\||[?:*/%-]/,punctuation:/[{}\[\]();,.]/},e.languages.avs=e.languages.avisynth}(Prism); \ No newline at end of file +!function(e){function a(e,a,r){return RegExp(function(e,a){return e.replace(/<<(\d+)>>/g,(function(e,r){return a[+r]}))}(e,a),r||"")}var r="bool|clip|float|int|string|val",t=[["is(?:bool|clip|float|int|string)|defined|(?:(?:internal)?function|var)?exists?","apply|assert|default|eval|import|nop|select|undefined","opt_(?:allowfloataudio|avipadscanlines|dwchannelmask|enable_(?:b64a|planartopackedrgb|v210|y3_10_10|y3_10_16)|usewaveextensible|vdubplanarhack)|set(?:cachemode|maxcpu|memorymax|planarlegacyalignment|workingdir)","hex(?:value)?|value","abs|ceil|continued(?:denominator|numerator)?|exp|floor|fmod|frac|log(?:10)?|max|min|muldiv|pi|pow|rand|round|sign|spline|sqrt","a?sinh?|a?cosh?|a?tan[2h]?","(?:bit(?:and|not|x?or|[lr]?shift[aslu]?|sh[lr]|sa[lr]|[lr]rotatel?|ro[rl]|te?st|set(?:count)?|cl(?:ea)?r|ch(?:an)?ge?))","average(?:[bgr]|chroma[uv]|luma)|(?:[rgb]|chroma[uv]|luma|rgb|[yuv](?=difference(?:fromprevious|tonext)))difference(?:fromprevious|tonext)?|[yuvrgb]plane(?:median|min|max|minmaxdifference)","getprocessinfo|logmsg|script(?:dir(?:utf8)?|file(?:utf8)?|name(?:utf8)?)|setlogparams","chr|(?:fill|find|left|mid|replace|rev|right)str|format|[lu]case|ord|str(?:cmpi?|fromutf8|len|toutf8)|time|trim(?:all|left|right)","isversionorgreater|version(?:number|string)","buildpixeltype|colorspacenametopixeltype","addautoloaddir|on(?:cpu|cuda)|prefetch|setfiltermtmode"].join("|"),["has(?:audio|video)","height|width","frame(?:count|rate)|framerate(?:denominator|numerator)","getparity|is(?:field|frame)based","bitspercomponent|componentsize|hasalpha|is(?:planar(?:rgba?)?|interleaved|rgb(?:24|32|48|64)?|y(?:8|u(?:va?|y2))?|yv(?:12|16|24|411)|420|422|444|packedrgb)|numcomponents|pixeltype","audio(?:bits|channels|duration|length(?:[fs]|hi|lo)?|rate)|isaudio(?:float|int)"].join("|"),["avi(?:file)?source|directshowsource|image(?:reader|source|sourceanim)|opendmlsource|segmented(?:avisource|directshowsource)|wavsource","coloryuv|convertbacktoyuy2|convertto(?:RGB(?:24|32|48|64)|(?:planar)?RGBA?|Y8?|YV(?:12|16|24|411)|YUVA?(?:411|420|422|444)|YUY2)|fixluminance|gr[ae]yscale|invert|levels|limiter|mergea?rgb|merge(?:chroma|luma)|rgbadjust|show(?:alpha|blue|green|red)|swapuv|tweak|[uv]toy8?|ytouv","(?:colorkey|reset)mask|layer|mask(?:hs)?|merge|overlay|subtract","addborders|(?:bicubic|bilinear|blackman|gauss|lanczos4|lanczos|point|sinc|spline(?:16|36|64))resize|crop(?:bottom)?|flip(?:horizontal|vertical)|(?:horizontal|vertical)?reduceby2|letterbox|skewrows|turn(?:180|left|right)","blur|fixbrokenchromaupsampling|generalconvolution|(?:spatial|temporal)soften|sharpen","trim|(?:un)?alignedsplice|(?:assume|assumescaled|change|convert)FPS|(?:delete|duplicate)frame|dissolve|fade(?:in|io|out)[02]?|freezeframe|interleave|loop|reverse|select(?:even|odd|(?:range)?every)","assume[bt]ff|assume(?:field|frame)based|bob|complementparity|doubleweave|peculiarblend|pulldown|separate(?:columns|fields|rows)|swapfields|weave(?:columns|rows)?","amplify(?:db)?|assumesamplerate|audiodub(?:ex)?|audiotrim|convertaudioto(?:(?:8|16|24|32)bit|float)|converttomono|delayaudio|ensurevbrmp3sync|get(?:left|right)?channel|kill(?:audio|video)|mergechannels|mixaudio|monotostereo|normalize|resampleaudio|ssrc|supereq|timestretch","animate|applyrange|conditional(?:filter|reader|select)|frameevaluate|scriptclip|tcp(?:server|source)|writefile(?:end|if|start)?","imagewriter","blackness|blankclip|colorbars(?:hd)?|compare|dumpfiltergraph|echo|histogram|info|messageclip|preroll|setgraphanalysis|show(?:framenumber|smpte|time)|showfiveversions|stack(?:horizontal|vertical)|subtitle|tone|version"].join("|")].join("|");e.languages.avisynth={comment:[{pattern:/(^|[^\\])\[\*(?:[^\[*]|\[(?!\*)|\*(?!\])|\[\*(?:[^\[*]|\[(?!\*)|\*(?!\]))*\*\])*\*\]/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0,greedy:!0}],argument:{pattern:a('\\b(?:<<0>>)\\s+("?)\\w+\\1',[r],"i"),inside:{keyword:/^\w+/}},"argument-label":{pattern:/([,(][\s\\]*)\w+\s*=(?!=)/,lookbehind:!0,inside:{"argument-name":{pattern:/^\w+/,alias:"punctuation"},punctuation:/=$/}},string:[{pattern:/"""[\s\S]*?"""/,greedy:!0},{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0,inside:{constant:{pattern:/\b(?:DEFAULT_MT_MODE|(?:MAINSCRIPT|PROGRAM|SCRIPT)DIR|(?:MACHINE|USER)_(?:CLASSIC|PLUS)_PLUGINS)\b/}}}],variable:/\b(?:last)\b/i,boolean:/\b(?:false|no|true|yes)\b/i,keyword:/\b(?:catch|else|for|function|global|if|return|try|while|__END__)\b/i,constant:/\bMT_(?:MULTI_INSTANCE|NICE_FILTER|SERIALIZED|SPECIAL_MT)\b/,"builtin-function":{pattern:a("\\b(?:<<0>>)\\b",[t],"i"),alias:"function"},"type-cast":{pattern:a("\\b(?:<<0>>)(?=\\s*\\()",[r],"i"),alias:"keyword"},function:{pattern:/\b[a-z_]\w*(?=\s*\()|(\.)[a-z_]\w*\b/i,lookbehind:!0},"line-continuation":{pattern:/(^[ \t]*)\\|\\(?=[ \t]*$)/m,lookbehind:!0,alias:"punctuation"},number:/\B\$(?:[\da-f]{6}|[\da-f]{8})\b|(?:(?:\b|\B-)\d+(?:\.\d*)?\b|\B\.\d+\b)/i,operator:/\+\+?|[!=<>]=?|&&|\|\||[?:*/%-]/,punctuation:/[{}\[\]();,.]/},e.languages.avs=e.languages.avisynth}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-awk.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-awk.js new file mode 100644 index 0000000000..64cf2c0400 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-awk.js @@ -0,0 +1,32 @@ +Prism.languages.awk = { + 'hashbang': { + pattern: /^#!.*/, + greedy: true, + alias: 'comment' + }, + 'comment': { + pattern: /#.*/, + greedy: true + }, + 'string': { + pattern: /(^|[^\\])"(?:[^\\"\r\n]|\\.)*"/, + lookbehind: true, + greedy: true + }, + 'regex': { + pattern: /((?:^|[^\w\s)])\s*)\/(?:[^\/\\\r\n]|\\.)*\//, + lookbehind: true, + greedy: true + }, + + 'variable': /\$\w+/, + 'keyword': /\b(?:BEGIN|BEGINFILE|END|ENDFILE|break|case|continue|default|delete|do|else|exit|for|function|getline|if|in|next|nextfile|printf?|return|switch|while)\b|@(?:include|load)\b/, + + 'function': /\b[a-z_]\w*(?=\s*\()/i, + 'number': /\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0x[a-fA-F0-9]+)\b/, + + 'operator': /--|\+\+|!?~|>&|>>|<<|(?:\*\*|[<>!=+\-*/%^])=?|&&|\|[|&]|[?:]/, + 'punctuation': /[()[\]{},;]/ +}; + +Prism.languages.gawk = Prism.languages.awk; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-awk.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-awk.min.js new file mode 100644 index 0000000000..c48925cdf3 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-awk.min.js @@ -0,0 +1 @@ +Prism.languages.awk={hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},comment:{pattern:/#.*/,greedy:!0},string:{pattern:/(^|[^\\])"(?:[^\\"\r\n]|\\.)*"/,lookbehind:!0,greedy:!0},regex:{pattern:/((?:^|[^\w\s)])\s*)\/(?:[^\/\\\r\n]|\\.)*\//,lookbehind:!0,greedy:!0},variable:/\$\w+/,keyword:/\b(?:BEGIN|BEGINFILE|END|ENDFILE|break|case|continue|default|delete|do|else|exit|for|function|getline|if|in|next|nextfile|printf?|return|switch|while)\b|@(?:include|load)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0x[a-fA-F0-9]+)\b/,operator:/--|\+\+|!?~|>&|>>|<<|(?:\*\*|[<>!=+\-*/%^])=?|&&|\|[|&]|[?:]/,punctuation:/[()[\]{},;]/},Prism.languages.gawk=Prism.languages.awk; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-batch.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-batch.min.js index f49a688dc4..886f10c7a2 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-batch.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-batch.min.js @@ -1 +1 @@ -!function(e){var r=/%%?[~:\w]+%?|!\S+!/,t={pattern:/\/[a-z?]+(?=[ :]|$):?|-[a-z]\b|--[a-z-]+\b/im,alias:"attr-name",inside:{punctuation:/:/}},n=/"(?:[\\"]"|[^"])*"(?!")/,i=/(?:\b|-)\d+\b/;Prism.languages.batch={comment:[/^::.*/m,{pattern:/((?:^|[&(])[ \t]*)rem\b(?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0}],label:{pattern:/^:.*/m,alias:"property"},command:[{pattern:/((?:^|[&(])[ \t]*)for(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* \S+ in \([^)]+\) do/im,lookbehind:!0,inside:{keyword:/\b(?:do|in)\b|^for\b/i,string:n,parameter:t,variable:r,number:i,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*)if(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:not )?(?:cmdextversion \d+|defined \w+|errorlevel \d+|exist \S+|(?:"[^"]*"|(?!")(?:(?!==)\S)+)?(?:==| (?:equ|geq|gtr|leq|lss|neq) )(?:"[^"]*"|[^\s"]\S*))/im,lookbehind:!0,inside:{keyword:/\b(?:cmdextversion|defined|errorlevel|exist|not)\b|^if\b/i,string:n,parameter:t,variable:r,number:i,operator:/\^|==|\b(?:equ|geq|gtr|leq|lss|neq)\b/i}},{pattern:/((?:^|[&()])[ \t]*)else\b/im,lookbehind:!0,inside:{keyword:/^else\b/i}},{pattern:/((?:^|[&(])[ \t]*)set(?: \/[a-z](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^set\b/i,string:n,parameter:t,variable:[r,/\w+(?=(?:[*\/%+\-&^|]|<<|>>)?=)/],number:i,operator:/[*\/%+\-&^|]=?|<<=?|>>=?|[!~_=]/,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*@?)\w+\b(?:"(?:[\\"]"|[^"])*"(?!")|[^"^&)\r\n]|\^(?:\r\n|[\s\S]))*/m,lookbehind:!0,inside:{keyword:/^\w+\b/,string:n,parameter:t,label:{pattern:/(^\s*):\S+/m,lookbehind:!0,alias:"property"},variable:r,number:i,operator:/\^/}}],operator:/[&@]/,punctuation:/[()']/}}(); \ No newline at end of file +!function(e){var r=/%%?[~:\w]+%?|!\S+!/,t={pattern:/\/[a-z?]+(?=[ :]|$):?|-[a-z]\b|--[a-z-]+\b/im,alias:"attr-name",inside:{punctuation:/:/}},n=/"(?:[\\"]"|[^"])*"(?!")/,i=/(?:\b|-)\d+\b/;e.languages.batch={comment:[/^::.*/m,{pattern:/((?:^|[&(])[ \t]*)rem\b(?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0}],label:{pattern:/^:.*/m,alias:"property"},command:[{pattern:/((?:^|[&(])[ \t]*)for(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* \S+ in \([^)]+\) do/im,lookbehind:!0,inside:{keyword:/\b(?:do|in)\b|^for\b/i,string:n,parameter:t,variable:r,number:i,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*)if(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:not )?(?:cmdextversion \d+|defined \w+|errorlevel \d+|exist \S+|(?:"[^"]*"|(?!")(?:(?!==)\S)+)?(?:==| (?:equ|geq|gtr|leq|lss|neq) )(?:"[^"]*"|[^\s"]\S*))/im,lookbehind:!0,inside:{keyword:/\b(?:cmdextversion|defined|errorlevel|exist|not)\b|^if\b/i,string:n,parameter:t,variable:r,number:i,operator:/\^|==|\b(?:equ|geq|gtr|leq|lss|neq)\b/i}},{pattern:/((?:^|[&()])[ \t]*)else\b/im,lookbehind:!0,inside:{keyword:/^else\b/i}},{pattern:/((?:^|[&(])[ \t]*)set(?: \/[a-z](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^set\b/i,string:n,parameter:t,variable:[r,/\w+(?=(?:[*\/%+\-&^|]|<<|>>)?=)/],number:i,operator:/[*\/%+\-&^|]=?|<<=?|>>=?|[!~_=]/,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*@?)\w+\b(?:"(?:[\\"]"|[^"])*"(?!")|[^"^&)\r\n]|\^(?:\r\n|[\s\S]))*/m,lookbehind:!0,inside:{keyword:/^\w+\b/,string:n,parameter:t,label:{pattern:/(^\s*):\S+/m,lookbehind:!0,alias:"property"},variable:r,number:i,operator:/\^/}}],operator:/[&@]/,punctuation:/[()']/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cfscript.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cfscript.js index e9fd550ec3..7f0cd97437 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cfscript.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cfscript.js @@ -19,7 +19,7 @@ Prism.languages.cfscript = Prism.languages.extend('clike', { ], 'keyword': /\b(?:abstract|break|catch|component|continue|default|do|else|extends|final|finally|for|function|if|in|include|package|private|property|public|remote|required|rethrow|return|static|switch|throw|try|var|while|xml)\b(?!\s*=)/, 'operator': [ - /\+\+|--|&&|\|\||::|=>|[!=]==|<=?|>=?|[-+*/%&|^!=<>]=?|\?(?:\.|:)?|[?:]/, + /\+\+|--|&&|\|\||::|=>|[!=]==|[-+*/%&|^!=<>]=?|\?(?:\.|:)?|:/, /\b(?:and|contains|eq|equal|eqv|gt|gte|imp|is|lt|lte|mod|not|or|xor)\b/ ], 'scope': { diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cfscript.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cfscript.min.js index fcd8b79c7b..49dc2d0fef 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cfscript.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cfscript.min.js @@ -1 +1 @@ -Prism.languages.cfscript=Prism.languages.extend("clike",{comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,inside:{annotation:{pattern:/(?:^|[^.])@[\w\.]+/,alias:"punctuation"}}},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],keyword:/\b(?:abstract|break|catch|component|continue|default|do|else|extends|final|finally|for|function|if|in|include|package|private|property|public|remote|required|rethrow|return|static|switch|throw|try|var|while|xml)\b(?!\s*=)/,operator:[/\+\+|--|&&|\|\||::|=>|[!=]==|<=?|>=?|[-+*/%&|^!=<>]=?|\?(?:\.|:)?|[?:]/,/\b(?:and|contains|eq|equal|eqv|gt|gte|imp|is|lt|lte|mod|not|or|xor)\b/],scope:{pattern:/\b(?:application|arguments|cgi|client|cookie|local|session|super|this|variables)\b/,alias:"global"},type:{pattern:/\b(?:any|array|binary|boolean|date|guid|numeric|query|string|struct|uuid|void|xml)\b/,alias:"builtin"}}),Prism.languages.insertBefore("cfscript","keyword",{"function-variable":{pattern:/[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"}}),delete Prism.languages.cfscript["class-name"],Prism.languages.cfc=Prism.languages.cfscript; \ No newline at end of file +Prism.languages.cfscript=Prism.languages.extend("clike",{comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,inside:{annotation:{pattern:/(?:^|[^.])@[\w\.]+/,alias:"punctuation"}}},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],keyword:/\b(?:abstract|break|catch|component|continue|default|do|else|extends|final|finally|for|function|if|in|include|package|private|property|public|remote|required|rethrow|return|static|switch|throw|try|var|while|xml)\b(?!\s*=)/,operator:[/\+\+|--|&&|\|\||::|=>|[!=]==|[-+*/%&|^!=<>]=?|\?(?:\.|:)?|:/,/\b(?:and|contains|eq|equal|eqv|gt|gte|imp|is|lt|lte|mod|not|or|xor)\b/],scope:{pattern:/\b(?:application|arguments|cgi|client|cookie|local|session|super|this|variables)\b/,alias:"global"},type:{pattern:/\b(?:any|array|binary|boolean|date|guid|numeric|query|string|struct|uuid|void|xml)\b/,alias:"builtin"}}),Prism.languages.insertBefore("cfscript","keyword",{"function-variable":{pattern:/[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"}}),delete Prism.languages.cfscript["class-name"],Prism.languages.cfc=Prism.languages.cfscript; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cmake.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cmake.js index 464705bba7..4b71c84766 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cmake.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cmake.js @@ -13,8 +13,8 @@ Prism.languages.cmake = { } } }, - 'variable': /\b(?:CMAKE_\w+|\w+_(?:(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT|VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_(?:BINARY_DIR|DESCRIPTION|HOMEPAGE_URL|NAME|SOURCE_DIR|VERSION|VERSION_(?:MAJOR|MINOR|PATCH|TWEAK))|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE|XCODE_VERSION))\b/, - 'property': /\b(?:cxx_\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\w+|\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|GLOBAL_KEYWORD|GLOBAL_PROJECT_TYPES|GLOBAL_ROOTNAMESPACE|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\b/, + 'variable': /\b(?:CMAKE_\w+|\w+_(?:(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT|VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_NAME|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE))\b/, + 'property': /\b(?:cxx_\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\w+|\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\b/, 'keyword': /\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\s*\()\b/, 'boolean': /\b(?:FALSE|OFF|ON|TRUE)\b/, 'namespace': /\b(?:INTERFACE|PRIVATE|PROPERTIES|PUBLIC|SHARED|STATIC|TARGET_OBJECTS)\b/, diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cmake.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cmake.min.js index 8455f5ccbf..a223df57be 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cmake.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cmake.min.js @@ -1 +1 @@ -Prism.languages.cmake={comment:/#.*/,string:{pattern:/"(?:[^\\"]|\\.)*"/,greedy:!0,inside:{interpolation:{pattern:/\$\{(?:[^{}$]|\$\{[^{}$]*\})*\}/,inside:{punctuation:/\$\{|\}/,variable:/\w+/}}}},variable:/\b(?:CMAKE_\w+|\w+_(?:(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT|VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_(?:BINARY_DIR|DESCRIPTION|HOMEPAGE_URL|NAME|SOURCE_DIR|VERSION|VERSION_(?:MAJOR|MINOR|PATCH|TWEAK))|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE|XCODE_VERSION))\b/,property:/\b(?:cxx_\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\w+|\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|GLOBAL_KEYWORD|GLOBAL_PROJECT_TYPES|GLOBAL_ROOTNAMESPACE|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\b/,keyword:/\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\s*\()\b/,boolean:/\b(?:FALSE|OFF|ON|TRUE)\b/,namespace:/\b(?:INTERFACE|PRIVATE|PROPERTIES|PUBLIC|SHARED|STATIC|TARGET_OBJECTS)\b/,operator:/\b(?:AND|DEFINED|EQUAL|GREATER|LESS|MATCHES|NOT|OR|STREQUAL|STRGREATER|STRLESS|VERSION_EQUAL|VERSION_GREATER|VERSION_LESS)\b/,inserted:{pattern:/\b\w+::\w+\b/,alias:"class-name"},number:/\b\d+(?:\.\d+)*\b/,function:/\b[a-z_]\w*(?=\s*\()\b/i,punctuation:/[()>}]|\$[<{]/}; \ No newline at end of file +Prism.languages.cmake={comment:/#.*/,string:{pattern:/"(?:[^\\"]|\\.)*"/,greedy:!0,inside:{interpolation:{pattern:/\$\{(?:[^{}$]|\$\{[^{}$]*\})*\}/,inside:{punctuation:/\$\{|\}/,variable:/\w+/}}}},variable:/\b(?:CMAKE_\w+|\w+_(?:(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT|VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_NAME|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE))\b/,property:/\b(?:cxx_\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\w+|\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\b/,keyword:/\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\s*\()\b/,boolean:/\b(?:FALSE|OFF|ON|TRUE)\b/,namespace:/\b(?:INTERFACE|PRIVATE|PROPERTIES|PUBLIC|SHARED|STATIC|TARGET_OBJECTS)\b/,operator:/\b(?:AND|DEFINED|EQUAL|GREATER|LESS|MATCHES|NOT|OR|STREQUAL|STRGREATER|STRLESS|VERSION_EQUAL|VERSION_GREATER|VERSION_LESS)\b/,inserted:{pattern:/\b\w+::\w+\b/,alias:"class-name"},number:/\b\d+(?:\.\d+)*\b/,function:/\b[a-z_]\w*(?=\s*\()\b/i,punctuation:/[()>}]|\$[<{]/}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cooklang.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cooklang.js new file mode 100644 index 0000000000..cb49ed1260 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cooklang.js @@ -0,0 +1,146 @@ +(function (Prism) { + + // see https://github.com/cooklang/spec/blob/main/EBNF.md + + var single_token_suffix = /(?:(?!\s)[\d$+<=a-zA-Z\x80-\uFFFF])+/.source; + var multi_token_infix = /[^{}@#]+/.source; + var multi_token_suffix = /\{[^}#@]*\}/.source; + + var multi_token = multi_token_infix + multi_token_suffix; + + var timer_units = /(?:h|hours|hrs|m|min|minutes)/.source; + + var amount_group_impl = { + pattern: /\{[^{}]*\}/, + inside: { + 'amount': { + pattern: /([\{|])[^{}|*%]+/, + lookbehind: true, + alias: 'number', + }, + 'unit': { + pattern: /(%)[^}]+/, + lookbehind: true, + alias: 'symbol', + }, + 'servings-scaler': { + pattern: /\*/, + alias: 'operator', + }, + 'servings-alternative-separator': { + pattern: /\|/, + alias: 'operator', + }, + 'unit-separator': { + pattern: /(?:%|(\*)%)/, + lookbehind: true, + alias: 'operator', + }, + 'punctuation': /[{}]/, + } + }; + + + Prism.languages.cooklang = { + 'comment': { + // [- comment -] + // -- comment + pattern: /\[-[\s\S]*?-\]|--.*/, + greedy: true, + }, + 'meta': { // >> key: value + pattern: />>.*:.*/, + inside: { + 'property': { // key: + pattern: /(>>\s*)[^\s:](?:[^:]*[^\s:])?/, + lookbehind: true, + } + } + }, + 'cookware-group': { // #...{...}, #... + pattern: new RegExp('#(?:' + + multi_token + + '|' + + single_token_suffix + + ')' + ), + inside: { + 'cookware': { + pattern: new RegExp('(^#)(?:' + + multi_token_infix + + ')' + ), + lookbehind: true, + alias: 'variable', + }, + 'cookware-keyword': { + pattern: /^#/, + alias: 'keyword', + }, + 'quantity-group': { + pattern: new RegExp(/\{[^{}@#]*\}/), + inside: { + 'quantity': { + pattern: new RegExp(/(^\{)/.source + multi_token_infix), + lookbehind: true, + alias: 'number', + }, + 'punctuation': /[{}]/, + } + } + }, + }, + 'ingredient-group': { // @...{...}, @... + pattern: new RegExp('@(?:' + + multi_token + + '|' + + single_token_suffix + + ')'), + inside: { + 'ingredient': { + pattern: new RegExp('(^@)(?:' + + multi_token_infix + + ')'), + lookbehind: true, + alias: 'variable', + }, + 'ingredient-keyword': { + pattern: /^@/, + alias: 'keyword', + }, + 'amount-group': amount_group_impl, + } + }, + 'timer-group': { // ~timer{...} + // eslint-disable-next-line regexp/sort-alternatives + pattern: /~(?!\s)[^@#~{}]*\{[^{}]*\}/, + inside: { + 'timer': { + pattern: /(^~)[^{]+/, + lookbehind: true, + alias: 'variable', + }, + 'duration-group': { // {...} + pattern: /\{[^{}]*\}/, + inside: { + 'punctuation': /[{}]/, + 'unit': { + pattern: new RegExp(/(%\s*)/.source + timer_units + /\b/.source), + lookbehind: true, + alias: 'symbol', + }, + 'operator': /%/, + 'duration': { + pattern: /\d+/, + alias: 'number', + }, + } + }, + 'timer-keyword': { + pattern: /^~/, + alias: 'keyword', + }, + } + } + }; +}(Prism)); diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cooklang.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cooklang.min.js new file mode 100644 index 0000000000..126fd8bfb1 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cooklang.min.js @@ -0,0 +1 @@ +!function(e){var a="(?:(?!\\s)[\\d$+<=a-zA-Z\\x80-\\uFFFF])+",t="[^{}@#]+\\{[^}#@]*\\}";e.languages.cooklang={comment:{pattern:/\[-[\s\S]*?-\]|--.*/,greedy:!0},meta:{pattern:/>>.*:.*/,inside:{property:{pattern:/(>>\s*)[^\s:](?:[^:]*[^\s:])?/,lookbehind:!0}}},"cookware-group":{pattern:new RegExp("#(?:"+t+"|"+a+")"),inside:{cookware:{pattern:new RegExp("(^#)(?:[^{}@#]+)"),lookbehind:!0,alias:"variable"},"cookware-keyword":{pattern:/^#/,alias:"keyword"},"quantity-group":{pattern:new RegExp(/\{[^{}@#]*\}/),inside:{quantity:{pattern:new RegExp("(^\\{)[^{}@#]+"),lookbehind:!0,alias:"number"},punctuation:/[{}]/}}}},"ingredient-group":{pattern:new RegExp("@(?:"+t+"|"+a+")"),inside:{ingredient:{pattern:new RegExp("(^@)(?:[^{}@#]+)"),lookbehind:!0,alias:"variable"},"ingredient-keyword":{pattern:/^@/,alias:"keyword"},"amount-group":{pattern:/\{[^{}]*\}/,inside:{amount:{pattern:/([\{|])[^{}|*%]+/,lookbehind:!0,alias:"number"},unit:{pattern:/(%)[^}]+/,lookbehind:!0,alias:"symbol"},"servings-scaler":{pattern:/\*/,alias:"operator"},"servings-alternative-separator":{pattern:/\|/,alias:"operator"},"unit-separator":{pattern:/(?:%|(\*)%)/,lookbehind:!0,alias:"operator"},punctuation:/[{}]/}}}},"timer-group":{pattern:/~(?!\s)[^@#~{}]*\{[^{}]*\}/,inside:{timer:{pattern:/(^~)[^{]+/,lookbehind:!0,alias:"variable"},"duration-group":{pattern:/\{[^{}]*\}/,inside:{punctuation:/[{}]/,unit:{pattern:new RegExp("(%\\s*)(?:h|hours|hrs|m|min|minutes)\\b"),lookbehind:!0,alias:"symbol"},operator:/%/,duration:{pattern:/\d+/,alias:"number"}}},"timer-keyword":{pattern:/^~/,alias:"keyword"}}}}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-coq.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-coq.min.js index 8b297f5f07..c14f0027ab 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-coq.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-coq.min.js @@ -1 +1 @@ -!function(e){for(var t="\\(\\*(?:[^(*]|\\((?!\\*)|\\*(?!\\))|)*\\*\\)",i=0;i<2;i++)t=t.replace(//g,function(){return t});t=t.replace(//g,"[]"),e.languages.coq={comment:RegExp(t),string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},attribute:[{pattern:RegExp('#\\[(?:[^\\[\\]("]|"(?:[^"]|"")*"(?!")|\\((?!\\*)|)*\\]'.replace(//g,function(){return t})),greedy:!0,alias:"attr-name",inside:{comment:RegExp(t),string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},operator:/=/,punctuation:/^#\[|\]$|[,()]/}},{pattern:/\b(?:Cumulative|Global|Local|Monomorphic|NonCumulative|Polymorphic|Private|Program)\b/,alias:"attr-name"}],keyword:/\b(?:Abort|About|Add|Admit|Admitted|All|Arguments|As|Assumptions|Axiom|Axioms|Back|BackTo|Backtrace|BinOp|BinOpSpec|BinRel|Bind|Blacklist|Canonical|Case|Cd|Check|Class|Classes|Close|CoFixpoint|CoInductive|Coercion|Coercions|Collection|Combined|Compute|Conjecture|Conjectures|Constant|Constants|Constraint|Constructors|Context|Corollary|Create|CstOp|Custom|Cut|Debug|Declare|Defined|Definition|Delimit|Dependencies|Dependent|Derive|Diffs|Drop|Elimination|End|Entry|Equality|Eval|Example|Existential|Existentials|Existing|Export|Extern|Extraction|Fact|Fail|Field|File|Firstorder|Fixpoint|Flags|Focus|From|Funclass|Function|Functional|GC|Generalizable|Goal|Grab|Grammar|Graph|Guarded|Haskell|Heap|Hide|Hint|HintDb|Hints|Hypotheses|Hypothesis|IF|Identity|Immediate|Implicit|Implicits|Import|Include|Induction|Inductive|Infix|Info|Initial|InjTyp|Inline|Inspect|Instance|Instances|Intro|Intros|Inversion|Inversion_clear|JSON|Language|Left|Lemma|Let|Lia|Libraries|Library|Load|LoadPath|Locate|Ltac|Ltac2|ML|Match|Method|Minimality|Module|Modules|Morphism|Next|NoInline|Notation|Number|OCaml|Obligation|Obligations|Opaque|Open|Optimize|Parameter|Parameters|Parametric|Path|Paths|Prenex|Preterm|Primitive|Print|Profile|Projections|Proof|Prop|PropBinOp|PropOp|PropUOp|Property|Proposition|Pwd|Qed|Quit|Rec|Record|Recursive|Redirect|Reduction|Register|Relation|Remark|Remove|Require|Reserved|Reset|Resolve|Restart|Rewrite|Right|Ring|Rings|SProp|Saturate|Save|Scheme|Scope|Scopes|Search|SearchHead|SearchPattern|SearchRewrite|Section|Separate|Set|Setoid|Show|Signatures|Solve|Solver|Sort|Sortclass|Sorted|Spec|Step|Strategies|Strategy|String|Structure|SubClass|Subgraph|SuchThat|Tactic|Term|TestCompile|Theorem|Time|Timeout|To|Transparent|Type|Typeclasses|Types|Typing|UnOp|UnOpSpec|Undelimit|Undo|Unfocus|Unfocused|Unfold|Universe|Universes|Unshelve|Variable|Variables|Variant|Verbose|View|Visibility|Zify|_|apply|as|at|by|cofix|else|end|exists|exists2|fix|for|forall|fun|if|in|let|match|measure|move|removed|return|struct|then|using|wf|where|with)\b/,number:/\b(?:0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]+)?(?:p[+-]?\d[\d_]*)?|\d[\d_]*(?:\.[\d_]+)?(?:e[+-]?\d[\d_]*)?)\b/i,punct:{pattern:/@\{|\{\||\[=|:>/,alias:"punctuation"},operator:/\/\\|\\\/|\.{2,3}|:{1,2}=|\*\*|[-=]>|<(?:->?|[+:=>]|<:)|>(?:=|->)|\|[-|]?|[-!%&*+/<=>?@^~']/,punctuation:/\.\(|`\(|@\{|`\{|\{\||\[=|:>|[:.,;(){}\[\]]/}}(Prism); \ No newline at end of file +!function(e){for(var t="\\(\\*(?:[^(*]|\\((?!\\*)|\\*(?!\\))|)*\\*\\)",i=0;i<2;i++)t=t.replace(//g,(function(){return t}));t=t.replace(//g,"[]"),e.languages.coq={comment:RegExp(t),string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},attribute:[{pattern:RegExp('#\\[(?:[^\\[\\]("]|"(?:[^"]|"")*"(?!")|\\((?!\\*)|)*\\]'.replace(//g,(function(){return t}))),greedy:!0,alias:"attr-name",inside:{comment:RegExp(t),string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},operator:/=/,punctuation:/^#\[|\]$|[,()]/}},{pattern:/\b(?:Cumulative|Global|Local|Monomorphic|NonCumulative|Polymorphic|Private|Program)\b/,alias:"attr-name"}],keyword:/\b(?:Abort|About|Add|Admit|Admitted|All|Arguments|As|Assumptions|Axiom|Axioms|Back|BackTo|Backtrace|BinOp|BinOpSpec|BinRel|Bind|Blacklist|Canonical|Case|Cd|Check|Class|Classes|Close|CoFixpoint|CoInductive|Coercion|Coercions|Collection|Combined|Compute|Conjecture|Conjectures|Constant|Constants|Constraint|Constructors|Context|Corollary|Create|CstOp|Custom|Cut|Debug|Declare|Defined|Definition|Delimit|Dependencies|Dependent|Derive|Diffs|Drop|Elimination|End|Entry|Equality|Eval|Example|Existential|Existentials|Existing|Export|Extern|Extraction|Fact|Fail|Field|File|Firstorder|Fixpoint|Flags|Focus|From|Funclass|Function|Functional|GC|Generalizable|Goal|Grab|Grammar|Graph|Guarded|Haskell|Heap|Hide|Hint|HintDb|Hints|Hypotheses|Hypothesis|IF|Identity|Immediate|Implicit|Implicits|Import|Include|Induction|Inductive|Infix|Info|Initial|InjTyp|Inline|Inspect|Instance|Instances|Intro|Intros|Inversion|Inversion_clear|JSON|Language|Left|Lemma|Let|Lia|Libraries|Library|Load|LoadPath|Locate|Ltac|Ltac2|ML|Match|Method|Minimality|Module|Modules|Morphism|Next|NoInline|Notation|Number|OCaml|Obligation|Obligations|Opaque|Open|Optimize|Parameter|Parameters|Parametric|Path|Paths|Prenex|Preterm|Primitive|Print|Profile|Projections|Proof|Prop|PropBinOp|PropOp|PropUOp|Property|Proposition|Pwd|Qed|Quit|Rec|Record|Recursive|Redirect|Reduction|Register|Relation|Remark|Remove|Require|Reserved|Reset|Resolve|Restart|Rewrite|Right|Ring|Rings|SProp|Saturate|Save|Scheme|Scope|Scopes|Search|SearchHead|SearchPattern|SearchRewrite|Section|Separate|Set|Setoid|Show|Signatures|Solve|Solver|Sort|Sortclass|Sorted|Spec|Step|Strategies|Strategy|String|Structure|SubClass|Subgraph|SuchThat|Tactic|Term|TestCompile|Theorem|Time|Timeout|To|Transparent|Type|Typeclasses|Types|Typing|UnOp|UnOpSpec|Undelimit|Undo|Unfocus|Unfocused|Unfold|Universe|Universes|Unshelve|Variable|Variables|Variant|Verbose|View|Visibility|Zify|_|apply|as|at|by|cofix|else|end|exists|exists2|fix|for|forall|fun|if|in|let|match|measure|move|removed|return|struct|then|using|wf|where|with)\b/,number:/\b(?:0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]+)?(?:p[+-]?\d[\d_]*)?|\d[\d_]*(?:\.[\d_]+)?(?:e[+-]?\d[\d_]*)?)\b/i,punct:{pattern:/@\{|\{\||\[=|:>/,alias:"punctuation"},operator:/\/\\|\\\/|\.{2,3}|:{1,2}=|\*\*|[-=]>|<(?:->?|[+:=>]|<:)|>(?:=|->)|\|[-|]?|[-!%&*+/<=>?@^~']/,punctuation:/\.\(|`\(|@\{|`\{|\{\||\[=|:>|[:.,;(){}\[\]]/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-core.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-core.min.js index eedbcf6e25..2e3ac2eefe 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-core.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-core.min.js @@ -1 +1 @@ -var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,e={},M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);y+=m.value.length,m=m.next){var k=m.value;if(t.length>n.length)return;if(!(k instanceof W)){var x,b=1;if(h){if(!(x=z(p,y,n,f))||x.index>=n.length)break;var w=x.index,A=x.index+x[0].length,E=y;for(E+=m.value.length;E<=w;)m=m.next,E+=m.value.length;if(E-=m.value.length,y=E,m.value instanceof W)continue;for(var P=m;P!==t.tail&&(El.reach&&(l.reach=j);var C=m.prev;S&&(C=I(t,C,S),y+=S.length),T(t,C,b);var N=new W(o,g?M.tokenize(L,g):L,d,L);if(m=I(t,C,N),O&&I(t,m,O),1l.reach&&(l.reach=_.reach)}}}}}}(e,a,n,a.head,0),function(e){var n=[],t=e.head.next;for(;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=M.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=M.hooks.all[e];if(t&&t.length)for(var r,a=0;r=t[a++];)r(n)}},Token:W};function W(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||"").length}function z(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function T(e,n,t){for(var r=n.next,a=0;a"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var r=M.util.currentScript();function a(){M.manual||M.highlightAll()}if(r&&(M.filename=r.src,r.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var l=document.readyState;"loading"===l||"interactive"===l&&r&&r.defer?document.addEventListener("DOMContentLoaded",a):window.requestAnimationFrame?window.requestAnimationFrame(a):window.setTimeout(a,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); \ No newline at end of file +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(jg.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cpp.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cpp.min.js index 128911e6f3..a7df36a603 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cpp.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cpp.min.js @@ -1 +1 @@ -!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n="\\b(?!)\\w+(?:\\s*\\.\\s*\\w+)*\\b".replace(//g,function(){return t.source});e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp('(\\b(?:import|module)\\s+)(?:"(?:\\\\(?:\r\n|[^])|[^"\\\\\r\n])*"|<[^<>\r\n]*>|'+"(?:\\s*:\\s*)?|:\\s*".replace(//g,function(){return n})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism); \ No newline at end of file +!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n="\\b(?!)\\w+(?:\\s*\\.\\s*\\w+)*\\b".replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp('(\\b(?:import|module)\\s+)(?:"(?:\\\\(?:\r\n|[^])|[^"\\\\\r\n])*"|<[^<>\r\n]*>|'+"(?:\\s*:\\s*)?|:\\s*".replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-csharp.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-csharp.min.js index bd9e804084..45bb0da898 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-csharp.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-csharp.min.js @@ -1 +1 @@ -!function(s){function a(e,s){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+s[+n]+")"})}function t(e,n,s){return RegExp(a(e,n),s||"")}function e(e,n){for(var s=0;s>/g,function(){return"(?:"+e+")"});return e.replace(/<>/g,"[^\\s\\S]")}var n="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var d=l(r),p=RegExp(l(n+" "+r+" "+i+" "+o)),c=l(r+" "+i+" "+o),u=l(n+" "+r+" "+o),g=e("<(?:[^<>;=+\\-*/%&|^]|<>)*>",2),b=e("\\((?:[^()]|<>)*\\)",2),h="@?\\b[A-Za-z_]\\w*\\b",f=a("<<0>>(?:\\s*<<1>>)?",[h,g]),m=a("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*",[c,f]),k="\\[\\s*(?:,\\s*)*\\]",y=a("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?",[m,k]),w=a("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?",[a("\\(<<0>>+(?:,<<0>>+)+\\)",[a("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>",[g,b,k])]),m,k]),v={keyword:p,punctuation:/[<>()?,.:[\]]/},x="'(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'",$='"(?:\\\\.|[^\\\\"\r\n])*"';s.languages.csharp=s.languages.extend("clike",{string:[{pattern:t("(^|[^$\\\\])<<0>>",['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),lookbehind:!0,greedy:!0},{pattern:t("(^|[^@$\\\\])<<0>>",[$]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:t("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)",[m]),lookbehind:!0,inside:v},{pattern:t("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)",[h,w]),lookbehind:!0,inside:v},{pattern:t("(\\busing\\s+)<<0>>(?=\\s*=)",[h]),lookbehind:!0},{pattern:t("(\\b<<0>>\\s+)<<1>>",[d,f]),lookbehind:!0,inside:v},{pattern:t("(\\bcatch\\s*\\(\\s*)<<0>>",[m]),lookbehind:!0,inside:v},{pattern:t("(\\bwhere\\s+)<<0>>",[h]),lookbehind:!0},{pattern:t("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>",[y]),lookbehind:!0,inside:v},{pattern:t("\\b<<0>>(?=\\s+(?!<<1>>|with\\s*\\{)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",[w,u,h]),inside:v}],keyword:p,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),s.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),s.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:t("([(,]\\s*)<<0>>(?=\\s*:)",[h]),lookbehind:!0,alias:"punctuation"}}),s.languages.insertBefore("csharp","class-name",{namespace:{pattern:t("(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:t("(\\b(?:default|sizeof|typeof)\\s*\\(\\s*(?!\\s))(?:[^()\\s]|\\s(?!\\s)|<<0>>)*(?=\\s*\\))",[b]),lookbehind:!0,alias:"class-name",inside:v},"return-type":{pattern:t("<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",[w,m]),inside:v,alias:"class-name"},"constructor-invocation":{pattern:t("(\\bnew\\s+)<<0>>(?=\\s*[[({])",[w]),lookbehind:!0,inside:v,alias:"class-name"},"generic-method":{pattern:t("<<0>>\\s*<<1>>(?=\\s*\\()",[h,g]),inside:{function:t("^<<0>>",[h]),generic:{pattern:RegExp(g),alias:"class-name",inside:v}}},"type-list":{pattern:t("\\b((?:<<0>>\\s+<<1>>|record\\s+<<1>>\\s*<<5>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>|<<1>>\\s*<<5>>|<<6>>)(?:\\s*,\\s*(?:<<3>>|<<4>>|<<6>>))*(?=\\s*(?:where|[{;]|=>|$))",[d,f,h,w,p.source,b,"\\bnew\\s*\\(\\s*\\)"]),lookbehind:!0,inside:{"record-arguments":{pattern:t("(^(?!new\\s*\\()<<0>>\\s*)<<1>>",[f,b]),lookbehind:!0,greedy:!0,inside:s.languages.csharp},keyword:p,"class-name":{pattern:RegExp(w),greedy:!0,inside:v},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var _=$+"|"+x,B=a("/(?![*/])|//[^\r\n]*[\r\n]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>",[_]),E=e(a("[^\"'/()]|<<0>>|\\(<>*\\)",[B]),2),R="\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",z=a("<<0>>(?:\\s*\\(<<1>>*\\))?",[m,E]);s.languages.insertBefore("csharp","class-name",{attribute:{pattern:t("((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",[R,z]),lookbehind:!0,greedy:!0,inside:{target:{pattern:t("^<<0>>(?=\\s*:)",[R]),alias:"keyword"},"attribute-arguments":{pattern:t("\\(<<0>>*\\)",[E]),inside:s.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var S=":[^}\r\n]+",j=e(a("[^\"'/()]|<<0>>|\\(<>*\\)",[B]),2),A=a("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[j,S]),F=e(a("[^\"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<>*\\)",[_]),2),P=a("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[F,S]);function U(e,n){return{interpolation:{pattern:t("((?:^|[^{])(?:\\{\\{)*)<<0>>",[e]),lookbehind:!0,inside:{"format-string":{pattern:t("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)",[n,S]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:s.languages.csharp}}},string:/[\s\S]+/}}s.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:t('(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',[A]),lookbehind:!0,greedy:!0,inside:U(A,j)},{pattern:t('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"',[P]),lookbehind:!0,greedy:!0,inside:U(P,F)}],char:{pattern:RegExp(x),greedy:!0}}),s.languages.dotnet=s.languages.cs=s.languages.csharp}(Prism); \ No newline at end of file +!function(e){function n(e,n){return e.replace(/<<(\d+)>>/g,(function(e,s){return"(?:"+n[+s]+")"}))}function s(e,s,a){return RegExp(n(e,s),a||"")}function a(e,n){for(var s=0;s>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var t="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var d=l(r),p=RegExp(l(t+" "+r+" "+i+" "+o)),c=l(r+" "+i+" "+o),u=l(t+" "+r+" "+o),g=a("<(?:[^<>;=+\\-*/%&|^]|<>)*>",2),b=a("\\((?:[^()]|<>)*\\)",2),h="@?\\b[A-Za-z_]\\w*\\b",f=n("<<0>>(?:\\s*<<1>>)?",[h,g]),m=n("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*",[c,f]),k="\\[\\s*(?:,\\s*)*\\]",y=n("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?",[m,k]),w=n("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>",[g,b,k]),v=n("\\(<<0>>+(?:,<<0>>+)+\\)",[w]),x=n("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?",[v,m,k]),$={keyword:p,punctuation:/[<>()?,.:[\]]/},_="'(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'",B='"(?:\\\\.|[^\\\\"\r\n])*"';e.languages.csharp=e.languages.extend("clike",{string:[{pattern:s("(^|[^$\\\\])<<0>>",['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),lookbehind:!0,greedy:!0},{pattern:s("(^|[^@$\\\\])<<0>>",[B]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:s("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)",[m]),lookbehind:!0,inside:$},{pattern:s("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)",[h,x]),lookbehind:!0,inside:$},{pattern:s("(\\busing\\s+)<<0>>(?=\\s*=)",[h]),lookbehind:!0},{pattern:s("(\\b<<0>>\\s+)<<1>>",[d,f]),lookbehind:!0,inside:$},{pattern:s("(\\bcatch\\s*\\(\\s*)<<0>>",[m]),lookbehind:!0,inside:$},{pattern:s("(\\bwhere\\s+)<<0>>",[h]),lookbehind:!0},{pattern:s("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>",[y]),lookbehind:!0,inside:$},{pattern:s("\\b<<0>>(?=\\s+(?!<<1>>|with\\s*\\{)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",[x,u,h]),inside:$}],keyword:p,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:s("([(,]\\s*)<<0>>(?=\\s*:)",[h]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:s("(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:s("(\\b(?:default|sizeof|typeof)\\s*\\(\\s*(?!\\s))(?:[^()\\s]|\\s(?!\\s)|<<0>>)*(?=\\s*\\))",[b]),lookbehind:!0,alias:"class-name",inside:$},"return-type":{pattern:s("<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",[x,m]),inside:$,alias:"class-name"},"constructor-invocation":{pattern:s("(\\bnew\\s+)<<0>>(?=\\s*[[({])",[x]),lookbehind:!0,inside:$,alias:"class-name"},"generic-method":{pattern:s("<<0>>\\s*<<1>>(?=\\s*\\()",[h,g]),inside:{function:s("^<<0>>",[h]),generic:{pattern:RegExp(g),alias:"class-name",inside:$}}},"type-list":{pattern:s("\\b((?:<<0>>\\s+<<1>>|record\\s+<<1>>\\s*<<5>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>|<<1>>\\s*<<5>>|<<6>>)(?:\\s*,\\s*(?:<<3>>|<<4>>|<<6>>))*(?=\\s*(?:where|[{;]|=>|$))",[d,f,h,x,p.source,b,"\\bnew\\s*\\(\\s*\\)"]),lookbehind:!0,inside:{"record-arguments":{pattern:s("(^(?!new\\s*\\()<<0>>\\s*)<<1>>",[f,b]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:p,"class-name":{pattern:RegExp(x),greedy:!0,inside:$},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var E=B+"|"+_,R=n("/(?![*/])|//[^\r\n]*[\r\n]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>",[E]),z=a(n("[^\"'/()]|<<0>>|\\(<>*\\)",[R]),2),S="\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",j=n("<<0>>(?:\\s*\\(<<1>>*\\))?",[m,z]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:s("((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",[S,j]),lookbehind:!0,greedy:!0,inside:{target:{pattern:s("^<<0>>(?=\\s*:)",[S]),alias:"keyword"},"attribute-arguments":{pattern:s("\\(<<0>>*\\)",[z]),inside:e.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var A=":[^}\r\n]+",F=a(n("[^\"'/()]|<<0>>|\\(<>*\\)",[R]),2),P=n("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[F,A]),U=a(n("[^\"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<>*\\)",[E]),2),Z=n("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[U,A]);function q(n,a){return{interpolation:{pattern:s("((?:^|[^{])(?:\\{\\{)*)<<0>>",[n]),lookbehind:!0,inside:{"format-string":{pattern:s("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)",[a,A]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:s('(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',[P]),lookbehind:!0,greedy:!0,inside:q(P,F)},{pattern:s('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"',[Z]),lookbehind:!0,greedy:!0,inside:q(Z,U)}],char:{pattern:RegExp(_),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cshtml.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cshtml.js index a917626aa0..4643710d3d 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cshtml.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cshtml.js @@ -28,9 +28,15 @@ } var round = nested(/\((?:[^()'"@/]|||)*\)/.source, 2); - var square = nested(/\[(?:[^\[\]'"@/]|||)*\]/.source, 2); + var square = nested(/\[(?:[^\[\]'"@/]|||)*\]/.source, 1); var curly = nested(/\{(?:[^{}'"@/]|||)*\}/.source, 2); - var angle = nested(/<(?:[^<>'"@/]|||)*>/.source, 2); + var angle = nested(/<(?:[^<>'"@/]||)*>/.source, 1); + + var inlineCs = /@/.source + + /(?:await\b\s*)?/.source + + '(?:' + /(?!await\b)\w+\b/.source + '|' + round + ')' + + '(?:' + /[?!]?\.\w+\b/.source + '|' + '(?:' + angle + ')?' + round + '|' + square + ')*' + + /(?![?!\.(\[]|<(?!\/))/.source; // Note about the above bracket patterns: // They all ignore HTML expressions that might be in the C# code. This is a problem because HTML (like strings and @@ -44,7 +50,14 @@ // To somewhat alleviate the problem a bit, the patterns for characters (e.g. 'a') is very permissive, it also // allows invalid characters to support HTML expressions like this:

    That's it!

    . - var tagAttrs = /(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?/.source; + var tagAttrInlineCs = /@(?![\w()])/.source + '|' + inlineCs; + var tagAttrValue = '(?:' + + /"[^"@]*"|'[^'@]*'|[^\s'"@>=]+(?=[\s>])/.source + + '|' + + '["\'][^"\'@]*(?:(?:' + tagAttrInlineCs + ')[^"\'@]*)+["\']' + + ')'; + + var tagAttrs = /(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*|(?=[\s/>])))+)?/.source.replace(//, tagAttrValue); var tagContent = /(?!\d)[^\s>\/=$<%]+/.source + tagAttrs + /\s*\/?>/.source; var tagRegion = /\B@?/.source + @@ -110,6 +123,21 @@ inside: csharpWithHtml }; + var inlineValue = { + pattern: RegExp(/(^|[^@])/.source + inlineCs), + lookbehind: true, + greedy: true, + alias: 'variable', + inside: { + 'keyword': /^@/, + 'csharp': cs + } + }; + + Prism.languages.cshtml.tag.pattern = RegExp(/<\/?/.source + tagContent); + Prism.languages.cshtml.tag.inside['attr-value'].pattern = RegExp(/=\s*/.source + tagAttrValue); + Prism.languages.insertBefore('inside', 'punctuation', { 'value': inlineValue }, Prism.languages.cshtml.tag.inside['attr-value']); + Prism.languages.insertBefore('cshtml', 'prolog', { 'razor-comment': { pattern: /@\*[\s\S]*?\*@/, @@ -134,6 +162,8 @@ /try\s*/.source + curly + /\s*catch\s*/.source + round + /\s*/.source + curly + /\s*finally\s*/.source + curly, // @if (...) {...} else if (...) {...} else {...} /if\s*/.source + round + /\s*/.source + curly + '(?:' + /\s*else/.source + '(?:' + /\s+if\s*/.source + round + ')?' + /\s*/.source + curly + ')*', + // @helper Ident(params) { ... } + /helper\s+\w+\s*/.source + round + /\s*/.source + curly, ].join('|') + ')' ), @@ -155,21 +185,7 @@ } }, - 'value': { - pattern: RegExp( - /(^|[^@])@/.source + - /(?:await\b\s*)?/.source + - '(?:' + /\w+\b/.source + '|' + round + ')' + - '(?:' + /[?!]?\.\w+\b/.source + '|' + round + '|' + square + '|' + angle + round + ')*' - ), - lookbehind: true, - greedy: true, - alias: 'variable', - inside: { - 'keyword': /^@/, - 'csharp': cs - } - }, + 'value': inlineValue, 'delegate-operator': { pattern: /(^|[^@])@(?=<)/, diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cshtml.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cshtml.min.js index 537152a87f..bc2e9b809c 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cshtml.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cshtml.min.js @@ -1 +1 @@ -!function(e){function s(e,s){for(var a=0;a/g,function(){return"(?:"+e+")"});return e.replace(//g,"[^\\s\\S]").replace(//g,'(?:@(?!")|"(?:[^\r\n\\\\"]|\\\\.)*"|@"(?:[^\\\\"]|""|\\\\[^])*"(?!")|'+"'(?:(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'|(?=[^\\\\](?!'))))").replace(//g,"(?:/(?![/*])|//.*[\r\n]|/\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/)")}var a=s("\\((?:[^()'\"@/]|||)*\\)",2),r=s("\\[(?:[^\\[\\]'\"@/]|||)*\\]",2),t=s("\\{(?:[^{}'\"@/]|||)*\\}",2),n=s("<(?:[^<>'\"@/]|||)*>",2),l="(?:\\s(?:\\s*[^\\s>/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?",i="(?!\\d)[^\\s>/=$<%]+"+l+"\\s*/?>",o="\\B@?(?:<([a-zA-Z][\\w:]*)"+l+"\\s*>(?:[^<]|(?:[^<]|)*",2)+")*|<"+i+")";e.languages.cshtml=e.languages.extend("markup",{});var g={pattern:/\S[\s\S]*/,alias:"language-csharp",inside:e.languages.insertBefore("csharp","string",{html:{pattern:RegExp(o),greedy:!0,inside:e.languages.cshtml}},{csharp:e.languages.extend("csharp",{})})};e.languages.insertBefore("cshtml","prolog",{"razor-comment":{pattern:/@\*[\s\S]*?\*@/,greedy:!0,alias:"comment"},block:{pattern:RegExp("(^|[^@])@(?:"+[t,"(?:code|functions)\\s*"+t,"(?:for|foreach|lock|switch|using|while)\\s*"+a+"\\s*"+t,"do\\s*"+t+"\\s*while\\s*"+a+"(?:\\s*;)?","try\\s*"+t+"\\s*catch\\s*"+a+"\\s*"+t+"\\s*finally\\s*"+t,"if\\s*"+a+"\\s*"+t+"(?:\\s*else(?:\\s+if\\s*"+a+")?\\s*"+t+")*"].join("|")+")"),lookbehind:!0,greedy:!0,inside:{keyword:/^@\w*/,csharp:g}},directive:{pattern:/^([ \t]*)@(?:addTagHelper|attribute|implements|inherits|inject|layout|model|namespace|page|preservewhitespace|removeTagHelper|section|tagHelperPrefix|using)(?=\s).*/m,lookbehind:!0,greedy:!0,inside:{keyword:/^@\w+/,csharp:g}},value:{pattern:RegExp("(^|[^@])@(?:await\\b\\s*)?(?:\\w+\\b|"+a+")(?:[?!]?\\.\\w+\\b|"+a+"|"+r+"|"+n+a+")*"),lookbehind:!0,greedy:!0,alias:"variable",inside:{keyword:/^@/,csharp:g}},"delegate-operator":{pattern:/(^|[^@])@(?=<)/,lookbehind:!0,alias:"operator"}}),e.languages.razor=e.languages.cshtml}(Prism); \ No newline at end of file +!function(e){function s(e,s){for(var a=0;a/g,(function(){return"(?:"+e+")"}));return e.replace(//g,"[^\\s\\S]").replace(//g,'(?:@(?!")|"(?:[^\r\n\\\\"]|\\\\.)*"|@"(?:[^\\\\"]|""|\\\\[^])*"(?!")|\'(?:(?:[^\r\n\'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})\'|(?=[^\\\\](?!\'))))').replace(//g,"(?:/(?![/*])|//.*[\r\n]|/\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/)")}var a=s("\\((?:[^()'\"@/]|||)*\\)",2),t=s("\\[(?:[^\\[\\]'\"@/]|||)*\\]",1),r=s("\\{(?:[^{}'\"@/]|||)*\\}",2),n="@(?:await\\b\\s*)?(?:(?!await\\b)\\w+\\b|"+a+")(?:[?!]?\\.\\w+\\b|(?:"+s("<(?:[^<>'\"@/]||)*>",1)+")?"+a+"|"+t+")*(?![?!\\.(\\[]|<(?!/))",l="(?:\"[^\"@]*\"|'[^'@]*'|[^\\s'\"@>=]+(?=[\\s>])|[\"'][^\"'@]*(?:(?:@(?![\\w()])|"+n+")[^\"'@]*)+[\"'])",i="(?:\\s(?:\\s*[^\\s>/=]+(?:\\s*=\\s*|(?=[\\s/>])))+)?".replace(//,l),g="(?!\\d)[^\\s>/=$<%]+"+i+"\\s*/?>",o="\\B@?(?:<([a-zA-Z][\\w:]*)"+i+"\\s*>(?:[^<]|(?:[^<]|)*",2)+")*|<"+g+")";e.languages.cshtml=e.languages.extend("markup",{});var c={pattern:/\S[\s\S]*/,alias:"language-csharp",inside:e.languages.insertBefore("csharp","string",{html:{pattern:RegExp(o),greedy:!0,inside:e.languages.cshtml}},{csharp:e.languages.extend("csharp",{})})},p={pattern:RegExp("(^|[^@])"+n),lookbehind:!0,greedy:!0,alias:"variable",inside:{keyword:/^@/,csharp:c}};e.languages.cshtml.tag.pattern=RegExp(")*"""/.source + + // eslint-disable-next-line regexp/strict + '|' + /'''(?:[^\\']|'(?!''\2)|)*'''/.source + + // eslint-disable-next-line regexp/strict + '|' + /"(?:[^\\\r\n"]|"(?!\2)|)*"/.source + + // eslint-disable-next-line regexp/strict + '|' + /'(?:[^\\\r\n']|'(?!\2)|)*'/.source; + var stringLiteral = '(?:' + stringTypes.replace(//g, stringEscape) + ')'; + + Prism.languages.cue = { + 'comment': { + pattern: /\/\/.*/, + greedy: true + }, + 'string-literal': { + // eslint-disable-next-line regexp/strict + pattern: RegExp(/(^|[^#"'\\])(#*)/.source + stringLiteral + /(?!["'])\2/.source), + lookbehind: true, + greedy: true, + inside: { + // I'm using dirty hack here. We have to know the number hashes at the start of the string somehow, + // but we can't look back. So instead, we will use a lookahead, go to the end of the string, and + // capture the hashes at the end of the string. + 'escape': { + pattern: /(?=[\s\S]*["'](#*)$)\\\1(?:U[a-fA-F0-9]{1,8}|u[a-fA-F0-9]{1,4}|x[a-fA-F0-9]{1,2}|\d{2,3}|[^(])/, + greedy: true, + alias: 'string' + }, + 'interpolation': { + pattern: /(?=[\s\S]*["'](#*)$)\\\1\([^()]*\)/, + greedy: true, + inside: { + 'punctuation': /^\\#*\(|\)$/, + 'expression': { + pattern: /[\s\S]+/, + inside: null + } + } + }, + 'string': /[\s\S]+/ + } + }, + + 'keyword': { + pattern: /(^|[^\w$])(?:for|if|import|in|let|null|package)(?![\w$])/, + lookbehind: true + }, + 'boolean': { + pattern: /(^|[^\w$])(?:false|true)(?![\w$])/, + lookbehind: true + }, + 'builtin': { + pattern: /(^|[^\w$])(?:bool|bytes|float|float(?:32|64)|u?int(?:8|16|32|64|128)?|number|rune|string)(?![\w$])/, + lookbehind: true + }, + + 'attribute': { + pattern: /@[\w$]+(?=\s*\()/, + alias: 'function' + }, + 'function': { + pattern: /(^|[^\w$])[a-z_$][\w$]*(?=\s*\()/i, + lookbehind: true + }, + + 'number': { + pattern: /(^|[^\w$.])(?:0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*|(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[eE][+-]?\d+(?:_\d+)*)?(?:[KMGTP]i?)?)(?![\w$])/, + lookbehind: true + }, + + 'operator': /\.{3}|_\|_|&&?|\|\|?|[=!]~|[<>=!]=?|[+\-*/?]/, + 'punctuation': /[()[\]{},.:]/ + }; + + Prism.languages.cue['string-literal'].inside.interpolation.inside.expression.inside = Prism.languages.cue; + +}(Prism)); diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cue.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cue.min.js new file mode 100644 index 0000000000..e88bcf519c --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-cue.min.js @@ -0,0 +1 @@ +!function(e){var n="(?:"+"\"\"\"(?:[^\\\\\"]|\"(?!\"\"\\2)|)*\"\"\"|'''(?:[^\\\\']|'(?!''\\2)|)*'''|\"(?:[^\\\\\r\n\"]|\"(?!\\2)|)*\"|'(?:[^\\\\\r\n']|'(?!\\2)|)*'".replace(//g,"\\\\(?:(?!\\2)|\\2(?:[^()\r\n]|\\([^()]*\\)))")+")";e.languages.cue={comment:{pattern:/\/\/.*/,greedy:!0},"string-literal":{pattern:RegExp("(^|[^#\"'\\\\])(#*)"+n+"(?![\"'])\\2"),lookbehind:!0,greedy:!0,inside:{escape:{pattern:/(?=[\s\S]*["'](#*)$)\\\1(?:U[a-fA-F0-9]{1,8}|u[a-fA-F0-9]{1,4}|x[a-fA-F0-9]{1,2}|\d{2,3}|[^(])/,greedy:!0,alias:"string"},interpolation:{pattern:/(?=[\s\S]*["'](#*)$)\\\1\([^()]*\)/,greedy:!0,inside:{punctuation:/^\\#*\(|\)$/,expression:{pattern:/[\s\S]+/,inside:null}}},string:/[\s\S]+/}},keyword:{pattern:/(^|[^\w$])(?:for|if|import|in|let|null|package)(?![\w$])/,lookbehind:!0},boolean:{pattern:/(^|[^\w$])(?:false|true)(?![\w$])/,lookbehind:!0},builtin:{pattern:/(^|[^\w$])(?:bool|bytes|float|float(?:32|64)|u?int(?:8|16|32|64|128)?|number|rune|string)(?![\w$])/,lookbehind:!0},attribute:{pattern:/@[\w$]+(?=\s*\()/,alias:"function"},function:{pattern:/(^|[^\w$])[a-z_$][\w$]*(?=\s*\()/i,lookbehind:!0},number:{pattern:/(^|[^\w$.])(?:0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*|(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[eE][+-]?\d+(?:_\d+)*)?(?:[KMGTP]i?)?)(?![\w$])/,lookbehind:!0},operator:/\.{3}|_\|_|&&?|\|\|?|[=!]~|[<>=!]=?|[+\-*/?]/,punctuation:/[()[\]{},.:]/},e.languages.cue["string-literal"].inside.interpolation.inside.expression.inside=e.languages.cue}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-dataweave.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-dataweave.min.js index ef2b7f9b76..98c8d86867 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-dataweave.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-dataweave.min.js @@ -1 +1 @@ -Prism.languages.dataweave={url:/\b[A-Za-z]+:\/\/[\w/:.?=&-]+|\burn:[\w:.?=&-]+/,property:{pattern:/(?:\b\w+#)?(?:"(?:\\.|[^\\"\r\n])*"|\b\w+)(?=\s*[:@])/,greedy:!0},string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},"mime-type":/\b(?:application|audio|image|multipart|text|video)\/[\w+-]+/,date:{pattern:/\|[\w:+-]+\|/,greedy:!0},comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],regex:{pattern:/\/(?:[^\\\/\r\n]|\\[^\r\n])+\//,greedy:!0},keyword:/\b(?:and|as|at|case|do|else|fun|if|input|is|match|not|ns|null|or|output|type|unless|update|using|var)\b/,function:/\b[A-Z_]\w*(?=\s*\()/i,number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\];(),.:@]/,operator:/<<|>>|->|[<>~=]=?|!=|--?-?|\+\+?|!|\?/,boolean:/\b(?:false|true)\b/}; \ No newline at end of file +!function(e){e.languages.dataweave={url:/\b[A-Za-z]+:\/\/[\w/:.?=&-]+|\burn:[\w:.?=&-]+/,property:{pattern:/(?:\b\w+#)?(?:"(?:\\.|[^\\"\r\n])*"|\b\w+)(?=\s*[:@])/,greedy:!0},string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},"mime-type":/\b(?:application|audio|image|multipart|text|video)\/[\w+-]+/,date:{pattern:/\|[\w:+-]+\|/,greedy:!0},comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],regex:{pattern:/\/(?:[^\\\/\r\n]|\\[^\r\n])+\//,greedy:!0},keyword:/\b(?:and|as|at|case|do|else|fun|if|input|is|match|not|ns|null|or|output|type|unless|update|using|var)\b/,function:/\b[A-Z_]\w*(?=\s*\()/i,number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\];(),.:@]/,operator:/<<|>>|->|[<>~=]=?|!=|--?-?|\+\+?|!|\?/,boolean:/\b(?:false|true)\b/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-diff.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-diff.min.js index 099e998172..16d9fe0a03 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-diff.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-diff.min.js @@ -1 +1 @@ -!function(i){i.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var r={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(r).forEach(function(e){var n=r[e],a=[];/^\w+$/.test(e)||a.push(/\w+/.exec(e)[0]),"diff"===e&&a.push("bold"),i.languages.diff[e]={pattern:RegExp("^(?:["+n+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(e)[0]}}}}),Object.defineProperty(i.languages.diff,"PREFIXES",{value:r})}(Prism); \ No newline at end of file +!function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var n={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(n).forEach((function(a){var i=n[a],r=[];/^\w+$/.test(a)||r.push(/\w+/.exec(a)[0]),"diff"===a&&r.push("bold"),e.languages.diff[a]={pattern:RegExp("^(?:["+i+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:r,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(a)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:n})}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-django.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-django.min.js index 91bbaa7fc3..24879e50d5 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-django.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-django.min.js @@ -1 +1 @@ -!function(e){e.languages.django={comment:/^\{#[\s\S]*?#\}$/,tag:{pattern:/(^\{%[+-]?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%][+-]?|[+-]?[}%]\}$/,alias:"punctuation"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},filter:{pattern:/(\|)\w+/,lookbehind:!0,alias:"function"},test:{pattern:/(\bis\s+(?:not\s+)?)(?!not\b)\w+/,lookbehind:!0,alias:"function"},function:/\b[a-z_]\w+(?=\s*\()/i,keyword:/\b(?:and|as|by|else|for|if|import|in|is|loop|not|or|recursive|with|without)\b/,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,number:/\b\d+(?:\.\d+)?\b/,boolean:/[Ff]alse|[Nn]one|[Tt]rue/,variable:/\b\w+\b/,punctuation:/[{}[\](),.:;]/};var n=/\{\{[\s\S]*?\}\}|\{%[\s\S]*?%\}|\{#[\s\S]*?#\}/g,o=e.languages["markup-templating"];e.hooks.add("before-tokenize",function(e){o.buildPlaceholders(e,"django",n)}),e.hooks.add("after-tokenize",function(e){o.tokenizePlaceholders(e,"django")}),e.languages.jinja2=e.languages.django,e.hooks.add("before-tokenize",function(e){o.buildPlaceholders(e,"jinja2",n)}),e.hooks.add("after-tokenize",function(e){o.tokenizePlaceholders(e,"jinja2")})}(Prism); \ No newline at end of file +!function(e){e.languages.django={comment:/^\{#[\s\S]*?#\}$/,tag:{pattern:/(^\{%[+-]?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%][+-]?|[+-]?[}%]\}$/,alias:"punctuation"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},filter:{pattern:/(\|)\w+/,lookbehind:!0,alias:"function"},test:{pattern:/(\bis\s+(?:not\s+)?)(?!not\b)\w+/,lookbehind:!0,alias:"function"},function:/\b[a-z_]\w+(?=\s*\()/i,keyword:/\b(?:and|as|by|else|for|if|import|in|is|loop|not|or|recursive|with|without)\b/,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,number:/\b\d+(?:\.\d+)?\b/,boolean:/[Ff]alse|[Nn]one|[Tt]rue/,variable:/\b\w+\b/,punctuation:/[{}[\](),.:;]/};var n=/\{\{[\s\S]*?\}\}|\{%[\s\S]*?%\}|\{#[\s\S]*?#\}/g,o=e.languages["markup-templating"];e.hooks.add("before-tokenize",(function(e){o.buildPlaceholders(e,"django",n)})),e.hooks.add("after-tokenize",(function(e){o.tokenizePlaceholders(e,"django")})),e.languages.jinja2=e.languages.django,e.hooks.add("before-tokenize",(function(e){o.buildPlaceholders(e,"jinja2",n)})),e.hooks.add("after-tokenize",(function(e){o.tokenizePlaceholders(e,"jinja2")}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-docker.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-docker.min.js index 3d23e8a719..dd5622a1c4 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-docker.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-docker.min.js @@ -1 +1 @@ -!function(e){var r="(?:[ \t]+(?![ \t])(?:)?|)".replace(//g,function(){return"\\\\[\r\n](?:\\s|\\\\[\r\n]|#.*(?!.))*(?![\\s#]|\\\\[\r\n])"}),n="\"(?:[^\"\\\\\r\n]|\\\\(?:\r\n|[^]))*\"|'(?:[^'\\\\\r\n]|\\\\(?:\r\n|[^]))*'",t="--[\\w-]+=(?:|(?![\"'])(?:[^\\s\\\\]|\\\\.)+)".replace(//g,function(){return n}),o={pattern:RegExp(n),greedy:!0},i={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function a(e,n){return e=e.replace(//g,function(){return t}).replace(//g,function(){return r}),RegExp(e,n)}e.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:a("(^(?:ONBUILD)?\\w+)(?:)*","i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[o,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:a("(^(?:ONBUILD)?HEALTHCHECK(?:)*)(?:CMD|NONE)\\b","i"),lookbehind:!0,greedy:!0},{pattern:a("(^(?:ONBUILD)?FROM(?:)*(?!--)[^ \t\\\\]+)AS","i"),lookbehind:!0,greedy:!0},{pattern:a("(^ONBUILD)\\w+","i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:i,string:o,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:i},e.languages.dockerfile=e.languages.docker}(Prism); \ No newline at end of file +!function(e){var n="(?:[ \t]+(?![ \t])(?:)?|)".replace(//g,(function(){return"\\\\[\r\n](?:\\s|\\\\[\r\n]|#.*(?!.))*(?![\\s#]|\\\\[\r\n])"})),r="\"(?:[^\"\\\\\r\n]|\\\\(?:\r\n|[^]))*\"|'(?:[^'\\\\\r\n]|\\\\(?:\r\n|[^]))*'",t="--[\\w-]+=(?:|(?![\"'])(?:[^\\s\\\\]|\\\\.)+)".replace(//g,(function(){return r})),o={pattern:RegExp(r),greedy:!0},i={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function a(e,r){return e=e.replace(//g,(function(){return t})).replace(//g,(function(){return n})),RegExp(e,r)}e.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:a("(^(?:ONBUILD)?\\w+)(?:)*","i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[o,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:a("(^(?:ONBUILD)?HEALTHCHECK(?:)*)(?:CMD|NONE)\\b","i"),lookbehind:!0,greedy:!0},{pattern:a("(^(?:ONBUILD)?FROM(?:)*(?!--)[^ \t\\\\]+)AS","i"),lookbehind:!0,greedy:!0},{pattern:a("(^ONBUILD)\\w+","i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:i,string:o,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:i},e.languages.dockerfile=e.languages.docker}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-dot.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-dot.min.js index 457ed17e2c..6af79d24ec 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-dot.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-dot.min.js @@ -1 +1 @@ -!function(e){var n="(?:"+["[a-zA-Z_\\x80-\\uFFFF][\\w\\x80-\\uFFFF]*","-?(?:\\.\\d+|\\d+(?:\\.\\d*)?)",'"[^"\\\\]*(?:\\\\[^][^"\\\\]*)*"',"<(?:[^<>]|(?!\x3c!--)<(?:[^<>\"']|\"[^\"]*\"|'[^']*')+>|\x3c!--(?:[^-]|-(?!->))*--\x3e)*>"].join("|")+")",a={markup:{pattern:/(^<)[\s\S]+(?=>$)/,lookbehind:!0,alias:["language-markup","language-html","language-xml"],inside:e.languages.markup}};function r(e,a){return RegExp(e.replace(//g,function(){return n}),a)}e.languages.dot={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\/|^#.*/m,greedy:!0},"graph-name":{pattern:r("(\\b(?:digraph|graph|subgraph)[ \t\r\n]+)","i"),lookbehind:!0,greedy:!0,alias:"class-name",inside:a},"attr-value":{pattern:r("(=[ \t\r\n]*)"),lookbehind:!0,greedy:!0,inside:a},"attr-name":{pattern:r("([\\[;, \t\r\n])(?=[ \t\r\n]*=)"),lookbehind:!0,greedy:!0,inside:a},keyword:/\b(?:digraph|edge|graph|node|strict|subgraph)\b/i,"compass-point":{pattern:/(:[ \t\r\n]*)(?:[ewc_]|[ns][ew]?)(?![\w\x80-\uFFFF])/,lookbehind:!0,alias:"builtin"},node:{pattern:r("(^|[^-.\\w\\x80-\\uFFFF\\\\])"),lookbehind:!0,greedy:!0,inside:a},operator:/[=:]|-[->]/,punctuation:/[\[\]{};,]/},e.languages.gv=e.languages.dot}(Prism); \ No newline at end of file +!function(e){var a="(?:"+["[a-zA-Z_\\x80-\\uFFFF][\\w\\x80-\\uFFFF]*","-?(?:\\.\\d+|\\d+(?:\\.\\d*)?)",'"[^"\\\\]*(?:\\\\[^][^"\\\\]*)*"',"<(?:[^<>]|(?!\x3c!--)<(?:[^<>\"']|\"[^\"]*\"|'[^']*')+>|\x3c!--(?:[^-]|-(?!->))*--\x3e)*>"].join("|")+")",n={markup:{pattern:/(^<)[\s\S]+(?=>$)/,lookbehind:!0,alias:["language-markup","language-html","language-xml"],inside:e.languages.markup}};function r(e,n){return RegExp(e.replace(//g,(function(){return a})),n)}e.languages.dot={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\/|^#.*/m,greedy:!0},"graph-name":{pattern:r("(\\b(?:digraph|graph|subgraph)[ \t\r\n]+)","i"),lookbehind:!0,greedy:!0,alias:"class-name",inside:n},"attr-value":{pattern:r("(=[ \t\r\n]*)"),lookbehind:!0,greedy:!0,inside:n},"attr-name":{pattern:r("([\\[;, \t\r\n])(?=[ \t\r\n]*=)"),lookbehind:!0,greedy:!0,inside:n},keyword:/\b(?:digraph|edge|graph|node|strict|subgraph)\b/i,"compass-point":{pattern:/(:[ \t\r\n]*)(?:[ewc_]|[ns][ew]?)(?![\w\x80-\uFFFF])/,lookbehind:!0,alias:"builtin"},node:{pattern:r("(^|[^-.\\w\\x80-\\uFFFF\\\\])"),lookbehind:!0,greedy:!0,inside:n},operator:/[=:]|-[->]/,punctuation:/[\[\]{};,]/},e.languages.gv=e.languages.dot}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ejs.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ejs.min.js index 1a07bdb8f1..84affeef07 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ejs.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ejs.min.js @@ -1 +1 @@ -!function(e){e.languages.ejs={delimiter:{pattern:/^<%[-_=]?|[-_]?%>$/,alias:"punctuation"},comment:/^#[\s\S]*/,"language-javascript":{pattern:/[\s\S]+/,inside:e.languages.javascript}},e.hooks.add("before-tokenize",function(a){e.languages["markup-templating"].buildPlaceholders(a,"ejs",/<%(?!%)[\s\S]+?%>/g)}),e.hooks.add("after-tokenize",function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"ejs")}),e.languages.eta=e.languages.ejs}(Prism); \ No newline at end of file +!function(a){a.languages.ejs={delimiter:{pattern:/^<%[-_=]?|[-_]?%>$/,alias:"punctuation"},comment:/^#[\s\S]*/,"language-javascript":{pattern:/[\s\S]+/,inside:a.languages.javascript}},a.hooks.add("before-tokenize",(function(e){a.languages["markup-templating"].buildPlaceholders(e,"ejs",/<%(?!%)[\s\S]+?%>/g)})),a.hooks.add("after-tokenize",(function(e){a.languages["markup-templating"].tokenizePlaceholders(e,"ejs")})),a.languages.eta=a.languages.ejs}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-elixir.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-elixir.min.js index ec0d974d78..e885b9f134 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-elixir.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-elixir.min.js @@ -1 +1 @@ -Prism.languages.elixir={doc:{pattern:/@(?:doc|moduledoc)\s+(?:("""|''')[\s\S]*?\1|("|')(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2)/,inside:{attribute:/^@\w+/,string:/['"][\s\S]+/}},comment:{pattern:/#.*/,greedy:!0},regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},module:{pattern:/\b[A-Z]\w*\b/,alias:"class-name"},"attr-name":/\b\w+\??:(?!:)/,argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},function:/\b[_a-zA-Z]\w*[?!]?(?:(?=\s*(?:\.\s*)?\()|(?=\/\d))/,number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\b/,boolean:/\b(?:false|nil|true)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\[\]{}()]/},Prism.languages.elixir.string.forEach(function(e){e.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:Prism.languages.elixir}}}}); \ No newline at end of file +Prism.languages.elixir={doc:{pattern:/@(?:doc|moduledoc)\s+(?:("""|''')[\s\S]*?\1|("|')(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2)/,inside:{attribute:/^@\w+/,string:/['"][\s\S]+/}},comment:{pattern:/#.*/,greedy:!0},regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},module:{pattern:/\b[A-Z]\w*\b/,alias:"class-name"},"attr-name":/\b\w+\??:(?!:)/,argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},function:/\b[_a-zA-Z]\w*[?!]?(?:(?=\s*(?:\.\s*)?\()|(?=\/\d))/,number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\b/,boolean:/\b(?:false|nil|true)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\[\]{}()]/},Prism.languages.elixir.string.forEach((function(e){e.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:Prism.languages.elixir}}}})); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erb.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erb.min.js index 9e38fee156..4b9da608d8 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erb.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erb.min.js @@ -1 +1 @@ -!function(n){n.languages.erb={delimiter:{pattern:/^(\s*)<%=?|%>(?=\s*$)/,lookbehind:!0,alias:"punctuation"},ruby:{pattern:/\s*\S[\s\S]*/,alias:"language-ruby",inside:n.languages.ruby}},n.hooks.add("before-tokenize",function(e){n.languages["markup-templating"].buildPlaceholders(e,"erb",/<%=?(?:[^\r\n]|[\r\n](?!=begin)|[\r\n]=begin\s(?:[^\r\n]|[\r\n](?!=end))*[\r\n]=end)+?%>/g)}),n.hooks.add("after-tokenize",function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"erb")})}(Prism); \ No newline at end of file +!function(e){e.languages.erb={delimiter:{pattern:/^(\s*)<%=?|%>(?=\s*$)/,lookbehind:!0,alias:"punctuation"},ruby:{pattern:/\s*\S[\s\S]*/,alias:"language-ruby",inside:e.languages.ruby}},e.hooks.add("before-tokenize",(function(n){e.languages["markup-templating"].buildPlaceholders(n,"erb",/<%=?(?:[^\r\n]|[\r\n](?!=begin)|[\r\n]=begin\s(?:[^\r\n]|[\r\n](?!=end))*[\r\n]=end)+?%>/g)})),e.hooks.add("after-tokenize",(function(n){e.languages["markup-templating"].tokenizePlaceholders(n,"erb")}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erlang.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erlang.js index fba6254b2c..ccb92a1f12 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erlang.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erlang.js @@ -13,7 +13,7 @@ Prism.languages.erlang = { alias: 'atom' }, 'boolean': /\b(?:false|true)\b/, - 'keyword': /\b(?:after|case|catch|end|fun|if|of|receive|try|when)\b/, + 'keyword': /\b(?:after|begin|case|catch|end|fun|if|of|receive|try|when)\b/, 'number': [ /\$\\?./, /\b\d+#[a-z0-9]+/i, diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erlang.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erlang.min.js index 7d041ab6f2..806d0b16ea 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erlang.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-erlang.min.js @@ -1 +1 @@ -Prism.languages.erlang={comment:/%.+/,string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},"quoted-function":{pattern:/'(?:\\.|[^\\'\r\n])+'(?=\()/,alias:"function"},"quoted-atom":{pattern:/'(?:\\.|[^\\'\r\n])+'/,alias:"atom"},boolean:/\b(?:false|true)\b/,keyword:/\b(?:after|case|catch|end|fun|if|of|receive|try|when)\b/,number:[/\$\\?./,/\b\d+#[a-z0-9]+/i,/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i],function:/\b[a-z][\w@]*(?=\()/,variable:{pattern:/(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,lookbehind:!0},operator:[/[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:and|andalso|band|bnot|bor|bsl|bsr|bxor|div|not|or|orelse|rem|xor)\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\b[a-z][\w@]*/,punctuation:/[()[\]{}:;,.#|]|<<|>>/}; \ No newline at end of file +Prism.languages.erlang={comment:/%.+/,string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},"quoted-function":{pattern:/'(?:\\.|[^\\'\r\n])+'(?=\()/,alias:"function"},"quoted-atom":{pattern:/'(?:\\.|[^\\'\r\n])+'/,alias:"atom"},boolean:/\b(?:false|true)\b/,keyword:/\b(?:after|begin|case|catch|end|fun|if|of|receive|try|when)\b/,number:[/\$\\?./,/\b\d+#[a-z0-9]+/i,/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i],function:/\b[a-z][\w@]*(?=\()/,variable:{pattern:/(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,lookbehind:!0},operator:[/[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:and|andalso|band|bnot|bor|bsl|bsr|bxor|div|not|or|orelse|rem|xor)\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\b[a-z][\w@]*/,punctuation:/[()[\]{}:;,.#|]|<<|>>/}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-etlua.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-etlua.min.js index 635bae5929..431aa61aff 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-etlua.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-etlua.min.js @@ -1 +1 @@ -!function(e){e.languages.etlua={delimiter:{pattern:/^<%[-=]?|-?%>$/,alias:"punctuation"},"language-lua":{pattern:/[\s\S]+/,inside:e.languages.lua}},e.hooks.add("before-tokenize",function(a){e.languages["markup-templating"].buildPlaceholders(a,"etlua",/<%[\s\S]+?%>/g)}),e.hooks.add("after-tokenize",function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"etlua")})}(Prism); \ No newline at end of file +!function(a){a.languages.etlua={delimiter:{pattern:/^<%[-=]?|-?%>$/,alias:"punctuation"},"language-lua":{pattern:/[\s\S]+/,inside:a.languages.lua}},a.hooks.add("before-tokenize",(function(e){a.languages["markup-templating"].buildPlaceholders(e,"etlua",/<%[\s\S]+?%>/g)})),a.hooks.add("after-tokenize",(function(e){a.languages["markup-templating"].tokenizePlaceholders(e,"etlua")}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-excel-formula.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-excel-formula.js index 5b298ac0e1..b2a7e8b5b0 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-excel-formula.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-excel-formula.js @@ -39,11 +39,11 @@ Prism.languages['excel-formula'] = { }, 'function-name': { pattern: /\b[A-Z]\w*(?=\()/i, - alias: 'keyword' + alias: 'builtin' }, 'range': { pattern: /\$?\b(?:[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+|[A-Z]+:\$?[A-Z]+|\d+:\$?\d+)\b/i, - alias: 'property', + alias: 'selector', inside: { 'operator': /:/, 'cell': /\$?[A-Z]+\$?\d+/i, @@ -55,7 +55,7 @@ Prism.languages['excel-formula'] = { // Excel is case insensitive, so the string "foo1" could be either a variable or a cell. // To combat this, we match cells case insensitive, if the contain at least one "$", and case sensitive otherwise. pattern: /\b[A-Z]+\d+\b|\$[A-Za-z]+\$?\d+\b|\b[A-Za-z]+\$\d+\b/, - alias: 'property' + alias: 'selector' }, 'number': /(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?\b/i, 'boolean': /\b(?:FALSE|TRUE)\b/i, diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-excel-formula.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-excel-formula.min.js index 1f012d96f3..bdf842f32d 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-excel-formula.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-excel-formula.min.js @@ -1 +1 @@ -Prism.languages["excel-formula"]={comment:{pattern:/(\bN\(\s*)"(?:[^"]|"")*"(?=\s*\))/i,lookbehind:!0,greedy:!0},string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},reference:{pattern:/(?:'[^']*'|(?:[^\s()[\]{}<>*?"';,$&]*\[[^^\s()[\]{}<>*?"']+\])?\w+)!/,greedy:!0,alias:"string",inside:{operator:/!$/,punctuation:/'/,sheet:{pattern:/[^[\]]+$/,alias:"function"},file:{pattern:/\[[^[\]]+\]$/,inside:{punctuation:/[[\]]/}},path:/[\s\S]+/}},"function-name":{pattern:/\b[A-Z]\w*(?=\()/i,alias:"keyword"},range:{pattern:/\$?\b(?:[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+|[A-Z]+:\$?[A-Z]+|\d+:\$?\d+)\b/i,alias:"property",inside:{operator:/:/,cell:/\$?[A-Z]+\$?\d+/i,column:/\$?[A-Z]+/i,row:/\$?\d+/}},cell:{pattern:/\b[A-Z]+\d+\b|\$[A-Za-z]+\$?\d+\b|\b[A-Za-z]+\$\d+\b/,alias:"property"},number:/(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?\b/i,boolean:/\b(?:FALSE|TRUE)\b/i,operator:/[-+*/^%=&,]|<[=>]?|>=?/,punctuation:/[[\]();{}|]/},Prism.languages.xlsx=Prism.languages.xls=Prism.languages["excel-formula"]; \ No newline at end of file +Prism.languages["excel-formula"]={comment:{pattern:/(\bN\(\s*)"(?:[^"]|"")*"(?=\s*\))/i,lookbehind:!0,greedy:!0},string:{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},reference:{pattern:/(?:'[^']*'|(?:[^\s()[\]{}<>*?"';,$&]*\[[^^\s()[\]{}<>*?"']+\])?\w+)!/,greedy:!0,alias:"string",inside:{operator:/!$/,punctuation:/'/,sheet:{pattern:/[^[\]]+$/,alias:"function"},file:{pattern:/\[[^[\]]+\]$/,inside:{punctuation:/[[\]]/}},path:/[\s\S]+/}},"function-name":{pattern:/\b[A-Z]\w*(?=\()/i,alias:"builtin"},range:{pattern:/\$?\b(?:[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+|[A-Z]+:\$?[A-Z]+|\d+:\$?\d+)\b/i,alias:"selector",inside:{operator:/:/,cell:/\$?[A-Z]+\$?\d+/i,column:/\$?[A-Z]+/i,row:/\$?\d+/}},cell:{pattern:/\b[A-Z]+\d+\b|\$[A-Za-z]+\$?\d+\b|\b[A-Za-z]+\$\d+\b/,alias:"selector"},number:/(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?\b/i,boolean:/\b(?:FALSE|TRUE)\b/i,operator:/[-+*/^%=&,]|<[=>]?|>=?/,punctuation:/[[\]();{}|]/},Prism.languages.xlsx=Prism.languages.xls=Prism.languages["excel-formula"]; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-factor.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-factor.min.js index 58a01e35ba..37b8a6395e 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-factor.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-factor.min.js @@ -1 +1 @@ -!function(e){var t={function:/\b(?:BUGS?|FIX(?:MES?)?|NOTES?|TODOS?|XX+|HACKS?|WARN(?:ING)?|\?{2,}|!{2,})\b/},s={number:/\\[^\s']|%\w/},i={comment:[{pattern:/(^|\s)(?:! .*|!$)/,lookbehind:!0,inside:t},{pattern:/(^|\s)\/\*\s[\s\S]*?\*\/(?=\s|$)/,lookbehind:!0,greedy:!0,inside:t},{pattern:/(^|\s)!\[(={0,6})\[\s[\s\S]*?\]\2\](?=\s|$)/,lookbehind:!0,greedy:!0,inside:t}],number:[{pattern:/(^|\s)[+-]?\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?0(?:b[01]+|o[0-7]+|d\d+|x[\dA-F]+)(?=\s|$)/i,lookbehind:!0},{pattern:/(^|\s)[+-]?\d+\/\d+\.?(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)\+?\d+\+\d+\/\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)-\d+-\d+\/\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?(?:\d*\.\d+|\d+\.\d*|\d+)(?:e[+-]?\d+)?(?=\s|$)/i,lookbehind:!0},{pattern:/(^|\s)NAN:\s+[\da-fA-F]+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?0(?:b1\.[01]*|o1\.[0-7]*|d1\.\d*|x1\.[\dA-F]*)p\d+(?=\s|$)/i,lookbehind:!0}],regexp:{pattern:/(^|\s)R\/\s(?:\\\S|[^\\/])*\/(?:[idmsr]*|[idmsr]+-[idmsr]+)(?=\s|$)/,lookbehind:!0,alias:"number",inside:{variable:/\\\S/,keyword:/[+?*\[\]^$(){}.|]/,operator:{pattern:/(\/)[idmsr]+(?:-[idmsr]+)?/,lookbehind:!0}}},boolean:{pattern:/(^|\s)[tf](?=\s|$)/,lookbehind:!0},"custom-string":{pattern:/(^|\s)[A-Z0-9\-]+"\s(?:\\\S|[^"\\])*"/,lookbehind:!0,greedy:!0,alias:"string",inside:{number:/\\\S|%\w|\//}},"multiline-string":[{pattern:/(^|\s)STRING:\s+\S+(?:\n|\r\n).*(?:\n|\r\n)\s*;(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:{number:s.number,"semicolon-or-setlocal":{pattern:/([\r\n][ \t]*);(?=\s|$)/,lookbehind:!0,alias:"function"}}},{pattern:/(^|\s)HEREDOC:\s+\S+(?:\n|\r\n).*(?:\n|\r\n)\s*\S+(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:s},{pattern:/(^|\s)\[(={0,6})\[\s[\s\S]*?\]\2\](?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:s}],"special-using":{pattern:/(^|\s)USING:(?:\s\S+)*(?=\s+;(?:\s|$))/,lookbehind:!0,alias:"function",inside:{string:{pattern:/(\s)[^:\s]+/,lookbehind:!0}}},"stack-effect-delimiter":[{pattern:/(^|\s)(?:call|eval|execute)?\((?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)--(?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)\)(?=\s|$)/,lookbehind:!0,alias:"operator"}],combinators:{pattern:null,lookbehind:!0,alias:"keyword"},"kernel-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"sequences-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"math-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"constructor-word":{pattern:/(^|\s)<(?!=+>|-+>)\S+>(?=\s|$)/,lookbehind:!0,alias:"keyword"},"other-builtin-syntax":{pattern:null,lookbehind:!0,alias:"operator"},"conventionally-named-word":{pattern:/(^|\s)(?!")(?:(?:change|new|set|with)-\S+|\$\S+|>[^>\s]+|[^:>\s]+>|[^>\s]+>[^>\s]+|\+[^+\s]+\+|[^?\s]+\?|\?[^?\s]+|[^>\s]+>>|>>[^>\s]+|[^<\s]+<<|\([^()\s]+\)|[^!\s]+!|[^*\s]\S*\*|[^.\s]\S*\.)(?=\s|$)/,lookbehind:!0,alias:"keyword"},"colon-syntax":{pattern:/(^|\s)(?:[A-Z0-9\-]+#?)?:{1,2}\s+(?:;\S+|(?!;)\S+)(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"function"},"semicolon-or-setlocal":{pattern:/(\s)(?:;|:>)(?=\s|$)/,lookbehind:!0,alias:"function"},"curly-brace-literal-delimiter":[{pattern:/(^|\s)[a-z]*\{(?=\s)/i,lookbehind:!0,alias:"operator"},{pattern:/(\s)\}(?=\s|$)/,lookbehind:!0,alias:"operator"}],"quotation-delimiter":[{pattern:/(^|\s)\[(?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)\](?=\s|$)/,lookbehind:!0,alias:"operator"}],"normal-word":{pattern:/(^|\s)[^"\s]\S*(?=\s|$)/,lookbehind:!0},string:{pattern:/"(?:\\\S|[^"\\])*"/,greedy:!0,inside:s}},n=function(e){return(e+"").replace(/([.?*+\^$\[\]\\(){}|\-])/g,"\\$1")},r=function(e){return new RegExp("(^|\\s)(?:"+e.map(n).join("|")+")(?=\\s|$)")},a={"kernel-builtin":["or","2nipd","4drop","tuck","wrapper","nip","wrapper?","callstack>array","die","dupd","callstack","callstack?","3dup","hashcode","pick","4nip","build",">boolean","nipd","clone","5nip","eq?","?","=","swapd","2over","clear","2dup","get-retainstack","not","tuple?","dup","3nipd","call","-rotd","object","drop","assert=","assert?","-rot","execute","boa","get-callstack","curried?","3drop","pickd","overd","over","roll","3nip","swap","and","2nip","rotd","throw","(clone)","hashcode*","spin","reach","4dup","equal?","get-datastack","assert","2drop","","boolean?","identity-hashcode","identity-tuple?","null","composed?","new","5drop","rot","-roll","xor","identity-tuple","boolean"],"other-builtin-syntax":["=======","recursive","flushable",">>","<<<<<<","M\\","B","PRIVATE>","\\","======","final","inline","delimiter","deprecated",">>>>>","<<<<<<<","parse-complex","malformed-complex","read-only",">>>>>>>","call-next-method","<<","foldable","$","$[","${"],"sequences-builtin":["member-eq?","mismatch","append","assert-sequence=","longer","repetition","clone-like","3sequence","assert-sequence?","last-index-from","reversed","index-from","cut*","pad-tail","join-as","remove-eq!","concat-as","but-last","snip","nths","nth","sequence","longest","slice?","","remove-nth","tail-slice","empty?","tail*","member?","virtual-sequence?","set-length","drop-prefix","iota","unclip","bounds-error?","unclip-last-slice","non-negative-integer-expected","non-negative-integer-expected?","midpoint@","longer?","?set-nth","?first","rest-slice","prepend-as","prepend","fourth","sift","subseq-start","new-sequence","?last","like","first4","1sequence","reverse","slice","virtual@","repetition?","set-last","index","4sequence","max-length","set-second","immutable-sequence","first2","first3","supremum","unclip-slice","suffix!","insert-nth","tail","3append","short","suffix","concat","flip","immutable?","reverse!","2sequence","sum","delete-all","indices","snip-slice","","check-slice","sequence?","head","append-as","halves","sequence=","collapse-slice","?second","slice-error?","product","bounds-check?","bounds-check","immutable","virtual-exemplar","harvest","remove","pad-head","last","set-fourth","cartesian-product","remove-eq","shorten","shorter","reversed?","shorter?","shortest","head-slice","pop*","tail-slice*","but-last-slice","iota?","append!","cut-slice","new-resizable","head-slice*","sequence-hashcode","pop","set-nth","?nth","second","join","immutable-sequence?","","3append-as","virtual-sequence","subseq?","remove-nth!","length","last-index","lengthen","assert-sequence","copy","move","third","first","tail?","set-first","prefix","bounds-error","","exchange","surround","cut","min-length","set-third","push-all","head?","subseq-start-from","delete-slice","rest","sum-lengths","head*","infimum","remove!","glue","slice-error","subseq","push","replace-slice","subseq-as","unclip-last"],"math-builtin":["number=","next-power-of-2","?1+","fp-special?","imaginary-part","float>bits","number?","fp-infinity?","bignum?","fp-snan?","denominator","gcd","*","+","fp-bitwise=","-","u>=","/",">=","bitand","power-of-2?","log2-expects-positive","neg?","<","log2",">","integer?","number","bits>double","2/","zero?","bits>float","float?","shift","ratio?","rect>","even?","ratio","fp-sign","bitnot",">fixnum","complex?","/i","integer>fixnum","/f","sgn",">bignum","next-float","u<","u>","mod","recip","rational",">float","2^","integer","fixnum?","neg","fixnum","sq","bignum",">rect","bit?","fp-qnan?","simple-gcd","complex","","real",">fraction","double>bits","bitor","rem","fp-nan-payload","real-part","log2-expects-positive?","prev-float","align","unordered?","float","fp-nan?","abs","bitxor","integer>fixnum-strict","u<=","odd?","<=","/mod",">integer","real?","rational?","numerator"]};Object.keys(a).forEach(function(e){i[e].pattern=r(a[e])});i.combinators.pattern=r(["2bi","while","2tri","bi*","4dip","both?","same?","tri@","curry","prepose","3bi","?if","tri*","2keep","3keep","curried","2keepd","when","2bi*","2tri*","4keep","bi@","keepdd","do","unless*","tri-curry","if*","loop","bi-curry*","when*","2bi@","2tri@","with","2with","either?","bi","until","3dip","3curry","tri-curry*","tri-curry@","bi-curry","keepd","compose","2dip","if","3tri","unless","tuple","keep","2curry","tri","most","while*","dip","composed","bi-curry@","find-last-from","trim-head-slice","map-as","each-from","none?","trim-tail","partition","if-empty","accumulate*","reject!","find-from","accumulate-as","collector-for-as","reject","map","map-sum","accumulate!","2each-from","follow","supremum-by","map!","unless-empty","collector","padding","reduce-index","replicate-as","infimum-by","trim-tail-slice","count","find-index","filter","accumulate*!","reject-as","map-integers","map-find","reduce","selector","interleave","2map","filter-as","binary-reduce","map-index-as","find","produce","filter!","replicate","cartesian-map","cartesian-each","find-index-from","map-find-last","3map-as","3map","find-last","selector-as","2map-as","2map-reduce","accumulate","each","each-index","accumulate*-as","when-empty","all?","collector-as","push-either","new-like","collector-for","2selector","push-if","2all?","map-reduce","3each","any?","trim-slice","2reduce","change-nth","produce-as","2each","trim","trim-head","cartesian-find","map-index","if-zero","each-integer","unless-zero","(find-integer)","when-zero","find-last-integer","(all-integers?)","times","(each-integer)","find-integer","all-integers?","unless-negative","if-positive","when-positive","when-negative","unless-positive","if-negative","case","2cleave","cond>quot","case>quot","3cleave","wrong-values","to-fixed-point","alist>quot","cond","cleave","call-effect","recursive-hashcode","spread","deep-spread>quot","2||","0||","n||","0&&","2&&","3||","1||","1&&","n&&","3&&","smart-unless*","keep-inputs","reduce-outputs","smart-when*","cleave>array","smart-with","smart-apply","smart-if","inputs/outputs","output>sequence-n","map-outputs","map-reduce-outputs","dropping","output>array","smart-map-reduce","smart-2map-reduce","output>array-n","nullary","inputsequence"]),e.languages.factor=i}(Prism); \ No newline at end of file +!function(e){var t={function:/\b(?:BUGS?|FIX(?:MES?)?|NOTES?|TODOS?|XX+|HACKS?|WARN(?:ING)?|\?{2,}|!{2,})\b/},s={number:/\\[^\s']|%\w/},i={comment:[{pattern:/(^|\s)(?:! .*|!$)/,lookbehind:!0,inside:t},{pattern:/(^|\s)\/\*\s[\s\S]*?\*\/(?=\s|$)/,lookbehind:!0,greedy:!0,inside:t},{pattern:/(^|\s)!\[(={0,6})\[\s[\s\S]*?\]\2\](?=\s|$)/,lookbehind:!0,greedy:!0,inside:t}],number:[{pattern:/(^|\s)[+-]?\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?0(?:b[01]+|o[0-7]+|d\d+|x[\dA-F]+)(?=\s|$)/i,lookbehind:!0},{pattern:/(^|\s)[+-]?\d+\/\d+\.?(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)\+?\d+\+\d+\/\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)-\d+-\d+\/\d+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?(?:\d*\.\d+|\d+\.\d*|\d+)(?:e[+-]?\d+)?(?=\s|$)/i,lookbehind:!0},{pattern:/(^|\s)NAN:\s+[\da-fA-F]+(?=\s|$)/,lookbehind:!0},{pattern:/(^|\s)[+-]?0(?:b1\.[01]*|o1\.[0-7]*|d1\.\d*|x1\.[\dA-F]*)p\d+(?=\s|$)/i,lookbehind:!0}],regexp:{pattern:/(^|\s)R\/\s(?:\\\S|[^\\/])*\/(?:[idmsr]*|[idmsr]+-[idmsr]+)(?=\s|$)/,lookbehind:!0,alias:"number",inside:{variable:/\\\S/,keyword:/[+?*\[\]^$(){}.|]/,operator:{pattern:/(\/)[idmsr]+(?:-[idmsr]+)?/,lookbehind:!0}}},boolean:{pattern:/(^|\s)[tf](?=\s|$)/,lookbehind:!0},"custom-string":{pattern:/(^|\s)[A-Z0-9\-]+"\s(?:\\\S|[^"\\])*"/,lookbehind:!0,greedy:!0,alias:"string",inside:{number:/\\\S|%\w|\//}},"multiline-string":[{pattern:/(^|\s)STRING:\s+\S+(?:\n|\r\n).*(?:\n|\r\n)\s*;(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:{number:s.number,"semicolon-or-setlocal":{pattern:/([\r\n][ \t]*);(?=\s|$)/,lookbehind:!0,alias:"function"}}},{pattern:/(^|\s)HEREDOC:\s+\S+(?:\n|\r\n).*(?:\n|\r\n)\s*\S+(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:s},{pattern:/(^|\s)\[(={0,6})\[\s[\s\S]*?\]\2\](?=\s|$)/,lookbehind:!0,greedy:!0,alias:"string",inside:s}],"special-using":{pattern:/(^|\s)USING:(?:\s\S+)*(?=\s+;(?:\s|$))/,lookbehind:!0,alias:"function",inside:{string:{pattern:/(\s)[^:\s]+/,lookbehind:!0}}},"stack-effect-delimiter":[{pattern:/(^|\s)(?:call|eval|execute)?\((?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)--(?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)\)(?=\s|$)/,lookbehind:!0,alias:"operator"}],combinators:{pattern:null,lookbehind:!0,alias:"keyword"},"kernel-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"sequences-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"math-builtin":{pattern:null,lookbehind:!0,alias:"variable"},"constructor-word":{pattern:/(^|\s)<(?!=+>|-+>)\S+>(?=\s|$)/,lookbehind:!0,alias:"keyword"},"other-builtin-syntax":{pattern:null,lookbehind:!0,alias:"operator"},"conventionally-named-word":{pattern:/(^|\s)(?!")(?:(?:change|new|set|with)-\S+|\$\S+|>[^>\s]+|[^:>\s]+>|[^>\s]+>[^>\s]+|\+[^+\s]+\+|[^?\s]+\?|\?[^?\s]+|[^>\s]+>>|>>[^>\s]+|[^<\s]+<<|\([^()\s]+\)|[^!\s]+!|[^*\s]\S*\*|[^.\s]\S*\.)(?=\s|$)/,lookbehind:!0,alias:"keyword"},"colon-syntax":{pattern:/(^|\s)(?:[A-Z0-9\-]+#?)?:{1,2}\s+(?:;\S+|(?!;)\S+)(?=\s|$)/,lookbehind:!0,greedy:!0,alias:"function"},"semicolon-or-setlocal":{pattern:/(\s)(?:;|:>)(?=\s|$)/,lookbehind:!0,alias:"function"},"curly-brace-literal-delimiter":[{pattern:/(^|\s)[a-z]*\{(?=\s)/i,lookbehind:!0,alias:"operator"},{pattern:/(\s)\}(?=\s|$)/,lookbehind:!0,alias:"operator"}],"quotation-delimiter":[{pattern:/(^|\s)\[(?=\s)/,lookbehind:!0,alias:"operator"},{pattern:/(\s)\](?=\s|$)/,lookbehind:!0,alias:"operator"}],"normal-word":{pattern:/(^|\s)[^"\s]\S*(?=\s|$)/,lookbehind:!0},string:{pattern:/"(?:\\\S|[^"\\])*"/,greedy:!0,inside:s}},n=function(e){return(e+"").replace(/([.?*+\^$\[\]\\(){}|\-])/g,"\\$1")},r=function(e){return new RegExp("(^|\\s)(?:"+e.map(n).join("|")+")(?=\\s|$)")},a={"kernel-builtin":["or","2nipd","4drop","tuck","wrapper","nip","wrapper?","callstack>array","die","dupd","callstack","callstack?","3dup","hashcode","pick","4nip","build",">boolean","nipd","clone","5nip","eq?","?","=","swapd","2over","clear","2dup","get-retainstack","not","tuple?","dup","3nipd","call","-rotd","object","drop","assert=","assert?","-rot","execute","boa","get-callstack","curried?","3drop","pickd","overd","over","roll","3nip","swap","and","2nip","rotd","throw","(clone)","hashcode*","spin","reach","4dup","equal?","get-datastack","assert","2drop","","boolean?","identity-hashcode","identity-tuple?","null","composed?","new","5drop","rot","-roll","xor","identity-tuple","boolean"],"other-builtin-syntax":["=======","recursive","flushable",">>","<<<<<<","M\\","B","PRIVATE>","\\","======","final","inline","delimiter","deprecated",">>>>>","<<<<<<<","parse-complex","malformed-complex","read-only",">>>>>>>","call-next-method","<<","foldable","$","$[","${"],"sequences-builtin":["member-eq?","mismatch","append","assert-sequence=","longer","repetition","clone-like","3sequence","assert-sequence?","last-index-from","reversed","index-from","cut*","pad-tail","join-as","remove-eq!","concat-as","but-last","snip","nths","nth","sequence","longest","slice?","","remove-nth","tail-slice","empty?","tail*","member?","virtual-sequence?","set-length","drop-prefix","iota","unclip","bounds-error?","unclip-last-slice","non-negative-integer-expected","non-negative-integer-expected?","midpoint@","longer?","?set-nth","?first","rest-slice","prepend-as","prepend","fourth","sift","subseq-start","new-sequence","?last","like","first4","1sequence","reverse","slice","virtual@","repetition?","set-last","index","4sequence","max-length","set-second","immutable-sequence","first2","first3","supremum","unclip-slice","suffix!","insert-nth","tail","3append","short","suffix","concat","flip","immutable?","reverse!","2sequence","sum","delete-all","indices","snip-slice","","check-slice","sequence?","head","append-as","halves","sequence=","collapse-slice","?second","slice-error?","product","bounds-check?","bounds-check","immutable","virtual-exemplar","harvest","remove","pad-head","last","set-fourth","cartesian-product","remove-eq","shorten","shorter","reversed?","shorter?","shortest","head-slice","pop*","tail-slice*","but-last-slice","iota?","append!","cut-slice","new-resizable","head-slice*","sequence-hashcode","pop","set-nth","?nth","second","join","immutable-sequence?","","3append-as","virtual-sequence","subseq?","remove-nth!","length","last-index","lengthen","assert-sequence","copy","move","third","first","tail?","set-first","prefix","bounds-error","","exchange","surround","cut","min-length","set-third","push-all","head?","subseq-start-from","delete-slice","rest","sum-lengths","head*","infimum","remove!","glue","slice-error","subseq","push","replace-slice","subseq-as","unclip-last"],"math-builtin":["number=","next-power-of-2","?1+","fp-special?","imaginary-part","float>bits","number?","fp-infinity?","bignum?","fp-snan?","denominator","gcd","*","+","fp-bitwise=","-","u>=","/",">=","bitand","power-of-2?","log2-expects-positive","neg?","<","log2",">","integer?","number","bits>double","2/","zero?","bits>float","float?","shift","ratio?","rect>","even?","ratio","fp-sign","bitnot",">fixnum","complex?","/i","integer>fixnum","/f","sgn",">bignum","next-float","u<","u>","mod","recip","rational",">float","2^","integer","fixnum?","neg","fixnum","sq","bignum",">rect","bit?","fp-qnan?","simple-gcd","complex","","real",">fraction","double>bits","bitor","rem","fp-nan-payload","real-part","log2-expects-positive?","prev-float","align","unordered?","float","fp-nan?","abs","bitxor","integer>fixnum-strict","u<=","odd?","<=","/mod",">integer","real?","rational?","numerator"]};Object.keys(a).forEach((function(e){i[e].pattern=r(a[e])})),i.combinators.pattern=r(["2bi","while","2tri","bi*","4dip","both?","same?","tri@","curry","prepose","3bi","?if","tri*","2keep","3keep","curried","2keepd","when","2bi*","2tri*","4keep","bi@","keepdd","do","unless*","tri-curry","if*","loop","bi-curry*","when*","2bi@","2tri@","with","2with","either?","bi","until","3dip","3curry","tri-curry*","tri-curry@","bi-curry","keepd","compose","2dip","if","3tri","unless","tuple","keep","2curry","tri","most","while*","dip","composed","bi-curry@","find-last-from","trim-head-slice","map-as","each-from","none?","trim-tail","partition","if-empty","accumulate*","reject!","find-from","accumulate-as","collector-for-as","reject","map","map-sum","accumulate!","2each-from","follow","supremum-by","map!","unless-empty","collector","padding","reduce-index","replicate-as","infimum-by","trim-tail-slice","count","find-index","filter","accumulate*!","reject-as","map-integers","map-find","reduce","selector","interleave","2map","filter-as","binary-reduce","map-index-as","find","produce","filter!","replicate","cartesian-map","cartesian-each","find-index-from","map-find-last","3map-as","3map","find-last","selector-as","2map-as","2map-reduce","accumulate","each","each-index","accumulate*-as","when-empty","all?","collector-as","push-either","new-like","collector-for","2selector","push-if","2all?","map-reduce","3each","any?","trim-slice","2reduce","change-nth","produce-as","2each","trim","trim-head","cartesian-find","map-index","if-zero","each-integer","unless-zero","(find-integer)","when-zero","find-last-integer","(all-integers?)","times","(each-integer)","find-integer","all-integers?","unless-negative","if-positive","when-positive","when-negative","unless-positive","if-negative","case","2cleave","cond>quot","case>quot","3cleave","wrong-values","to-fixed-point","alist>quot","cond","cleave","call-effect","recursive-hashcode","spread","deep-spread>quot","2||","0||","n||","0&&","2&&","3||","1||","1&&","n&&","3&&","smart-unless*","keep-inputs","reduce-outputs","smart-when*","cleave>array","smart-with","smart-apply","smart-if","inputs/outputs","output>sequence-n","map-outputs","map-reduce-outputs","dropping","output>array","smart-map-reduce","smart-2map-reduce","output>array-n","nullary","inputsequence"]),e.languages.factor=i}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-false.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-false.min.js index 3565417201..bd533dcf04 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-false.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-false.min.js @@ -1 +1 @@ -Prism.languages.false={comment:{pattern:/\{[^}]*\}/},string:{pattern:/"[^"]*"/,greedy:!0},"character-code":{pattern:/'(?:[^\r]|\r\n?)/,alias:"number"},"assembler-code":{pattern:/\d+`/,alias:"important"},number:/\d+/,operator:/[-!#$%&'*+,./:;=>?@\\^_`|~ßø]/,punctuation:/\[|\]/,variable:/[a-z]/,"non-standard":{pattern:/[()?@\\^_`|~ßø]/,punctuation:/\[|\]/,variable:/[a-z]/,"non-standard":{pattern:/[()))/i,delete a.languages.flow.parameter,a.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(a.languages.flow.keyword)||(a.languages.flow.keyword=[a.languages.flow.keyword]),a.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(Prism); \ No newline at end of file +!function(a){a.languages.flow=a.languages.extend("javascript",{}),a.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),a.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete a.languages.flow.parameter,a.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(a.languages.flow.keyword)||(a.languages.flow.keyword=[a.languages.flow.keyword]),a.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ftl.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ftl.min.js index ce9b3b69b5..2b2a431a96 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ftl.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-ftl.min.js @@ -1 +1 @@ -!function(n){for(var i="[^<()\"']|\\((?:)*\\)|<(?!#--)|<#--(?:[^-]|-(?!->))*--\x3e|\"(?:[^\\\\\"]|\\\\.)*\"|'(?:[^\\\\']|\\\\.)*'",e=0;e<2;e++)i=i.replace(//g,function(){return i});i=i.replace(//g,"[^\\s\\S]");var t={comment:/<#--[\s\S]*?-->/,string:[{pattern:/\br("|')(?:(?!\1)[^\\]|\\.)*\1/,greedy:!0},{pattern:RegExp("(\"|')(?:(?!\\1|\\$\\{)[^\\\\]|\\\\.|\\$\\{(?:(?!\\})(?:))*\\})*\\1".replace(//g,function(){return i})),greedy:!0,inside:{interpolation:{pattern:RegExp("((?:^|[^\\\\])(?:\\\\\\\\)*)\\$\\{(?:(?!\\})(?:))*\\}".replace(//g,function(){return i})),lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:null}}}}],keyword:/\b(?:as)\b/,boolean:/\b(?:false|true)\b/,"builtin-function":{pattern:/((?:^|[^?])\?\s*)\w+/,lookbehind:!0,alias:"function"},function:/\b\w+(?=\s*\()/,number:/\b\d+(?:\.\d+)?\b/,operator:/\.\.[<*!]?|->|--|\+\+|&&|\|\||\?{1,2}|[-+*/%!=<>]=?|\b(?:gt|gte|lt|lte)\b/,punctuation:/[,;.:()[\]{}]/};t.string[1].inside.interpolation.inside.rest=t,n.languages.ftl={"ftl-comment":{pattern:/^<#--[\s\S]*/,alias:"comment"},"ftl-directive":{pattern:/^<[\s\S]+>$/,inside:{directive:{pattern:/(^<\/?)[#@][a-z]\w*/i,lookbehind:!0,alias:"keyword"},punctuation:/^<\/?|\/?>$/,content:{pattern:/\s*\S[\s\S]*/,alias:"ftl",inside:t}}},"ftl-interpolation":{pattern:/^\$\{[\s\S]*\}$/,inside:{punctuation:/^\$\{|\}$/,content:{pattern:/\s*\S[\s\S]*/,alias:"ftl",inside:t}}}},n.hooks.add("before-tokenize",function(e){var t=RegExp("<#--[^]*?--\x3e|)*?>|\\$\\{(?:)*?\\}".replace(//g,function(){return i}),"gi");n.languages["markup-templating"].buildPlaceholders(e,"ftl",t)}),n.hooks.add("after-tokenize",function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"ftl")})}(Prism); \ No newline at end of file +!function(e){for(var t="[^<()\"']|\\((?:)*\\)|<(?!#--)|<#--(?:[^-]|-(?!->))*--\x3e|\"(?:[^\\\\\"]|\\\\.)*\"|'(?:[^\\\\']|\\\\.)*'",n=0;n<2;n++)t=t.replace(//g,(function(){return t}));t=t.replace(//g,"[^\\s\\S]");var i={comment:/<#--[\s\S]*?-->/,string:[{pattern:/\br("|')(?:(?!\1)[^\\]|\\.)*\1/,greedy:!0},{pattern:RegExp("(\"|')(?:(?!\\1|\\$\\{)[^\\\\]|\\\\.|\\$\\{(?:(?!\\})(?:))*\\})*\\1".replace(//g,(function(){return t}))),greedy:!0,inside:{interpolation:{pattern:RegExp("((?:^|[^\\\\])(?:\\\\\\\\)*)\\$\\{(?:(?!\\})(?:))*\\}".replace(//g,(function(){return t}))),lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:null}}}}],keyword:/\b(?:as)\b/,boolean:/\b(?:false|true)\b/,"builtin-function":{pattern:/((?:^|[^?])\?\s*)\w+/,lookbehind:!0,alias:"function"},function:/\b\w+(?=\s*\()/,number:/\b\d+(?:\.\d+)?\b/,operator:/\.\.[<*!]?|->|--|\+\+|&&|\|\||\?{1,2}|[-+*/%!=<>]=?|\b(?:gt|gte|lt|lte)\b/,punctuation:/[,;.:()[\]{}]/};i.string[1].inside.interpolation.inside.rest=i,e.languages.ftl={"ftl-comment":{pattern:/^<#--[\s\S]*/,alias:"comment"},"ftl-directive":{pattern:/^<[\s\S]+>$/,inside:{directive:{pattern:/(^<\/?)[#@][a-z]\w*/i,lookbehind:!0,alias:"keyword"},punctuation:/^<\/?|\/?>$/,content:{pattern:/\s*\S[\s\S]*/,alias:"ftl",inside:i}}},"ftl-interpolation":{pattern:/^\$\{[\s\S]*\}$/,inside:{punctuation:/^\$\{|\}$/,content:{pattern:/\s*\S[\s\S]*/,alias:"ftl",inside:i}}}},e.hooks.add("before-tokenize",(function(n){var i=RegExp("<#--[^]*?--\x3e|)*?>|\\$\\{(?:)*?\\}".replace(//g,(function(){return t})),"gi");e.languages["markup-templating"].buildPlaceholders(n,"ftl",i)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"ftl")}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gedcom.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gedcom.js index 7fbbc3ddc5..b3ac0d67a2 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gedcom.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gedcom.js @@ -10,11 +10,11 @@ Prism.languages.gedcom = { } } }, - 'tag': { + 'record': { // Preceded by level and optional pointer pattern: /(^[\t ]*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?)\w+/m, lookbehind: true, - alias: 'string' + alias: 'tag' }, 'level': { pattern: /(^[\t ]*)\d+/m, diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gedcom.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gedcom.min.js index 9b199672c2..c16feee9a1 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gedcom.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gedcom.min.js @@ -1 +1 @@ -Prism.languages.gedcom={"line-value":{pattern:/(^[\t ]*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?\w+ ).+/m,lookbehind:!0,inside:{pointer:{pattern:/^@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@$/,alias:"variable"}}},tag:{pattern:/(^[\t ]*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?)\w+/m,lookbehind:!0,alias:"string"},level:{pattern:/(^[\t ]*)\d+/m,lookbehind:!0,alias:"number"},pointer:{pattern:/@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@/,alias:"variable"}}; \ No newline at end of file +Prism.languages.gedcom={"line-value":{pattern:/(^[\t ]*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?\w+ ).+/m,lookbehind:!0,inside:{pointer:{pattern:/^@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@$/,alias:"variable"}}},record:{pattern:/(^[\t ]*\d+ +(?:@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@ +)?)\w+/m,lookbehind:!0,alias:"tag"},level:{pattern:/(^[\t ]*)\d+/m,lookbehind:!0,alias:"number"},pointer:{pattern:/@\w[\w!"$%&'()*+,\-./:;<=>?[\\\]^`{|}~\x80-\xfe #]*@/,alias:"variable"}}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gettext.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gettext.js new file mode 100644 index 0000000000..c8cf59d948 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gettext.js @@ -0,0 +1,43 @@ +Prism.languages.gettext = { + 'comment': [ + { + pattern: /# .*/, + greedy: true, + alias: 'translator-comment' + }, + { + pattern: /#\..*/, + greedy: true, + alias: 'extracted-comment' + }, + { + pattern: /#:.*/, + greedy: true, + alias: 'reference-comment' + }, + { + pattern: /#,.*/, + greedy: true, + alias: 'flag-comment' + }, + { + pattern: /#\|.*/, + greedy: true, + alias: 'previously-untranslated-comment' + }, + { + pattern: /#.*/, + greedy: true + }, + ], + 'string': { + pattern: /(^|[^\\])"(?:[^"\\]|\\.)*"/, + lookbehind: true, + greedy: true + }, + 'keyword': /^msg(?:ctxt|id|id_plural|str)\b/m, + 'number': /\b\d+\b/, + 'punctuation': /[\[\]]/ +}; + +Prism.languages.po = Prism.languages.gettext; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gettext.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gettext.min.js new file mode 100644 index 0000000000..f542a249c5 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gettext.min.js @@ -0,0 +1 @@ +Prism.languages.gettext={comment:[{pattern:/# .*/,greedy:!0,alias:"translator-comment"},{pattern:/#\..*/,greedy:!0,alias:"extracted-comment"},{pattern:/#:.*/,greedy:!0,alias:"reference-comment"},{pattern:/#,.*/,greedy:!0,alias:"flag-comment"},{pattern:/#\|.*/,greedy:!0,alias:"previously-untranslated-comment"},{pattern:/#.*/,greedy:!0}],string:{pattern:/(^|[^\\])"(?:[^"\\]|\\.)*"/,lookbehind:!0,greedy:!0},keyword:/^msg(?:ctxt|id|id_plural|str)\b/m,number:/\b\d+\b/,punctuation:/[\[\]]/},Prism.languages.po=Prism.languages.gettext; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gherkin.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gherkin.min.js index 3a702b6db1..183dac72dd 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gherkin.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-gherkin.min.js @@ -1 +1 @@ -!function(a){var n="(?:\r?\n|\r)[ \t]*\\|.+\\|(?:(?!\\|).)*";Prism.languages.gherkin={pystring:{pattern:/("""|''')[\s\S]+?\1/,alias:"string"},comment:{pattern:/(^[ \t]*)#.*/m,lookbehind:!0},tag:{pattern:/(^[ \t]*)@\S*/m,lookbehind:!0},feature:{pattern:/((?:^|\r?\n|\r)[ \t]*)(?:Ability|Ahoy matey!|Arwedd|Aspekt|Besigheid Behoefte|Business Need|Caracteristica|Característica|Egenskab|Egenskap|Eiginleiki|Feature|Fīča|Fitur|Fonctionnalité|Fonksyonalite|Funcionalidade|Funcionalitat|Functionalitate|Funcţionalitate|Funcționalitate|Functionaliteit|Fungsi|Funkcia|Funkcija|Funkcionalitāte|Funkcionalnost|Funkcja|Funksie|Funktionalität|Funktionalitéit|Funzionalità|Hwaet|Hwæt|Jellemző|Karakteristik|Lastnost|Mak|Mogucnost|laH|Mogućnost|Moznosti|Možnosti|OH HAI|Omadus|Ominaisuus|Osobina|Özellik|Potrzeba biznesowa|perbogh|poQbogh malja'|Požadavek|Požiadavka|Pretty much|Qap|Qu'meH 'ut|Savybė|Tính năng|Trajto|Vermoë|Vlastnosť|Właściwość|Značilnost|Δυνατότητα|Λειτουργία|Могућност|Мөмкинлек|Особина|Свойство|Үзенчәлеклелек|Функционал|Функционалност|Функция|Функціонал|תכונה|خاصية|خصوصیت|صلاحیت|کاروبار کی ضرورت|وِیژگی|रूप लेख|ਖਾਸੀਅਤ|ਨਕਸ਼ ਨੁਹਾਰ|ਮੁਹਾਂਦਰਾ|గుణము|ಹೆಚ್ಚಳ|ความต้องการทางธุรกิจ|ความสามารถ|โครงหลัก|기능|フィーチャ|功能|機能):(?:[^:\r\n]+(?:\r?\n|\r|$))*/,lookbehind:!0,inside:{important:{pattern:/(:)[^\r\n]+/,lookbehind:!0},keyword:/[^:\r\n]+:/}},scenario:{pattern:/(^[ \t]*)(?:Abstract Scenario|Abstrakt Scenario|Achtergrond|Aer|Ær|Agtergrond|All y'all|Antecedentes|Antecedents|Atburðarás|Atburðarásir|Awww, look mate|B4|Background|Baggrund|Bakgrund|Bakgrunn|Bakgrunnur|Beispiele|Beispiller|Bối cảnh|Cefndir|Cenario|Cenário|Cenario de Fundo|Cenário de Fundo|Cenarios|Cenários|Contesto|Context|Contexte|Contexto|Conto|Contoh|Contone|Dæmi|Dasar|Dead men tell no tales|Delineacao do Cenario|Delineação do Cenário|Dis is what went down|Dữ liệu|Dyagram Senaryo|Dyagram senaryo|Egzanp|Ejemplos|Eksempler|Ekzemploj|Enghreifftiau|Esbozo do escenario|Escenari|Escenario|Esempi|Esquema de l'escenari|Esquema del escenario|Esquema do Cenario|Esquema do Cenário|EXAMPLZ|Examples|Exempel|Exemple|Exemples|Exemplos|First off|Fono|Forgatókönyv|Forgatókönyv vázlat|Fundo|Geçmiş|Grundlage|Hannergrond|ghantoH|Háttér|Heave to|Istorik|Juhtumid|Keadaan|Khung kịch bản|Khung tình huống|Kịch bản|Koncept|Konsep skenario|Kontèks|Kontekst|Kontekstas|Konteksts|Kontext|Konturo de la scenaro|Latar Belakang|lut chovnatlh|lut|lutmey|Lýsing Atburðarásar|Lýsing Dæma|MISHUN SRSLY|MISHUN|Menggariskan Senario|mo'|Náčrt Scenára|Náčrt Scénáře|Náčrt Scenáru|Oris scenarija|Örnekler|Osnova|Osnova Scenára|Osnova scénáře|Osnutek|Ozadje|Paraugs|Pavyzdžiai|Példák|Piemēri|Plan du scénario|Plan du Scénario|Plan Senaryo|Plan senaryo|Plang vum Szenario|Pozadí|Pozadie|Pozadina|Príklady|Příklady|Primer|Primeri|Primjeri|Przykłady|Raamstsenaarium|Reckon it's like|Rerefons|Scenár|Scénář|Scenarie|Scenarij|Scenarijai|Scenarijaus šablonas|Scenariji|Scenārijs|Scenārijs pēc parauga|Scenarijus|Scenario|Scénario|Scenario Amlinellol|Scenario Outline|Scenario Template|Scenariomal|Scenariomall|Scenarios|Scenariu|Scenariusz|Scenaro|Schema dello scenario|Se ðe|Se the|Se þe|Senario|Senaryo Deskripsyon|Senaryo deskripsyon|Senaryo|Senaryo taslağı|Shiver me timbers|Situācija|Situai|Situasie Uiteensetting|Situasie|Skenario konsep|Skenario|Skica|Structura scenariu|Structură scenariu|Struktura scenarija|Stsenaarium|Swa hwaer swa|Swa|Swa hwær swa|Szablon scenariusza|Szenario|Szenariogrundriss|Tapaukset|Tapaus|Tapausaihio|Taust|Tausta|Template Keadaan|Template Senario|Template Situai|The thing of it is|Tình huống|Variantai|Voorbeelde|Voorbeelden|Wharrimean is|Yo-ho-ho|You'll wanna|Założenia|Παραδείγματα|Περιγραφή Σεναρίου|Σενάρια|Σενάριο|Υπόβαθρο|Кереш|Контекст|Концепт|Мисаллар|Мисоллар|Основа|Передумова|Позадина|Предистория|Предыстория|Приклади|Пример|Примери|Примеры|Рамка на сценарий|Скица|Структура сценарија|Структура сценария|Структура сценарію|Сценарий|Сценарий структураси|Сценарийның төзелеше|Сценарији|Сценарио|Сценарій|Тарих|Үрнәкләр|דוגמאות|רקע|תבנית תרחיש|תרחיש|الخلفية|الگوی سناریو|امثلة|پس منظر|زمینه|سناریو|سيناريو|سيناريو مخطط|مثالیں|منظر نامے کا خاکہ|منظرنامہ|نمونه ها|उदाहरण|परिदृश्य|परिदृश्य रूपरेखा|पृष्ठभूमि|ਉਦਾਹਰਨਾਂ|ਪਟਕਥਾ|ਪਟਕਥਾ ਢਾਂਚਾ|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਿਛੋਕੜ|ఉదాహరణలు|కథనం|నేపథ్యం|సన్నివేశం|ಉದಾಹರಣೆಗಳು|ಕಥಾಸಾರಾಂಶ|ವಿವರಣೆ|ಹಿನ್ನೆಲೆ|โครงสร้างของเหตุการณ์|ชุดของตัวอย่าง|ชุดของเหตุการณ์|แนวคิด|สรุปเหตุการณ์|เหตุการณ์|배경|시나리오|시나리오 개요|예|サンプル|シナリオ|シナリオアウトライン|シナリオテンプレ|シナリオテンプレート|テンプレ|例|例子|剧本|剧本大纲|劇本|劇本大綱|场景|场景大纲|場景|場景大綱|背景):[^:\r\n]*/m,lookbehind:!0,inside:{important:{pattern:/(:)[^\r\n]*/,lookbehind:!0},keyword:/[^:\r\n]+:/}},"table-body":{pattern:RegExp("("+n+")(?:"+n+")+"),lookbehind:!0,inside:{outline:{pattern:/<[^>]+>/,alias:"variable"},td:{pattern:/\s*[^\s|][^|]*/,alias:"string"},punctuation:/\|/}},"table-head":{pattern:RegExp(n),inside:{th:{pattern:/\s*[^\s|][^|]*/,alias:"variable"},punctuation:/\|/}},atrule:{pattern:/(^[ \t]+)(?:'a|'ach|'ej|7|a|A také|A taktiež|A tiež|A zároveň|Aber|Ac|Adott|Akkor|Ak|Aleshores|Ale|Ali|Allora|Alors|Als|Ama|Amennyiben|Amikor|Ampak|an|AN|Ananging|And y'all|And|Angenommen|Anrhegedig a|An|Apabila|Atès|Atesa|Atunci|Avast!|Aye|A|awer|Bagi|Banjur|Bet|Biết|Blimey!|Buh|But at the end of the day I reckon|But y'all|But|BUT|Cal|Când|Cand|Cando|Ce|Cuando|Če|Ða ðe|Ða|Dadas|Dada|Dados|Dado|DaH ghu' bejlu'|dann|Dann|Dano|Dan|Dar|Dat fiind|Data|Date fiind|Date|Dati fiind|Dati|Daţi fiind|Dați fiind|DEN|Dato|De|Den youse gotta|Dengan|Diberi|Diyelim ki|Donada|Donat|Donitaĵo|Do|Dun|Duota|Ðurh|Eeldades|Ef|Eğer ki|Entao|Então|Entón|E|En|Entonces|Epi|És|Etant donnée|Etant donné|Et|Étant données|Étant donnée|Étant donné|Etant données|Etant donnés|Étant donnés|Fakat|Gangway!|Gdy|Gegeben seien|Gegeben sei|Gegeven|Gegewe|ghu' noblu'|Gitt|Given y'all|Given|Givet|Givun|Ha|Cho|I CAN HAZ|In|Ir|It's just unbelievable|I|Ja|Jeśli|Jeżeli|Kad|Kada|Kadar|Kai|Kaj|Když|Keď|Kemudian|Ketika|Khi|Kiedy|Ko|Kuid|Kui|Kun|Lan|latlh|Le sa a|Let go and haul|Le|Lè sa a|Lè|Logo|Lorsqu'<|Lorsque|mä|Maar|Mais|Mając|Ma|Majd|Maka|Manawa|Mas|Men|Menawa|Mutta|Nalika|Nalikaning|Nanging|Når|När|Nato|Nhưng|Niin|Njuk|O zaman|Och|Og|Oletetaan|Ond|Onda|Oraz|Pak|Pero|Però|Podano|Pokiaľ|Pokud|Potem|Potom|Privzeto|Pryd|Quan|Quand|Quando|qaSDI'|Så|Sed|Se|Siis|Sipoze ke|Sipoze Ke|Sipoze|Si|Şi|Și|Soit|Stel|Tada|Tad|Takrat|Tak|Tapi|Ter|Tetapi|Tha the|Tha|Then y'all|Then|Thì|Thurh|Toda|Too right|Un|Und|ugeholl|Và|vaj|Vendar|Ve|wann|Wanneer|WEN|Wenn|When y'all|When|Wtedy|Wun|Y'know|Yeah nah|Yna|Youse know like when|Youse know when youse got|Y|Za predpokladu|Za předpokladu|Zadan|Zadani|Zadano|Zadate|Zadato|Zakładając|Zaradi|Zatati|Þa þe|Þa|Þá|Þegar|Þurh|Αλλά|Δεδομένου|Και|Όταν|Τότε|А також|Агар|Але|Али|Аммо|А|Әгәр|Әйтик|Әмма|Бирок|Ва|Вә|Дадено|Дано|Допустим|Если|Задате|Задати|Задато|И|І|К тому же|Када|Кад|Когато|Когда|Коли|Ләкин|Лекин|Нәтиҗәдә|Нехай|Но|Онда|Припустимо, що|Припустимо|Пусть|Также|Та|Тогда|Тоді|То|Унда|Һәм|Якщо|אבל|אזי|אז|בהינתן|וגם|כאשר|آنگاه|اذاً|اگر|اما|اور|با فرض|بالفرض|بفرض|پھر|تب|ثم|جب|عندما|فرض کیا|لكن|لیکن|متى|هنگامی|و|अगर|और|कदा|किन्तु|चूंकि|जब|तथा|तदा|तब|परन्तु|पर|यदि|ਅਤੇ|ਜਦੋਂ|ਜਿਵੇਂ ਕਿ|ਜੇਕਰ|ਤਦ|ਪਰ|అప్పుడు|ఈ పరిస్థితిలో|కాని|చెప్పబడినది|మరియు|ಆದರೆ|ನಂತರ|ನೀಡಿದ|ಮತ್ತು|ಸ್ಥಿತಿಯನ್ನು|กำหนดให้|ดังนั้น|แต่|เมื่อ|และ|그러면<|그리고<|단<|만약<|만일<|먼저<|조건<|하지만<|かつ<|しかし<|ただし<|ならば<|もし<|並且<|但し<|但是<|假如<|假定<|假設<|假设<|前提<|同时<|同時<|并且<|当<|當<|而且<|那么<|那麼<)(?=[ \t])/m,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\\r\n])*"|'(?:\\.|[^'\\\r\n])*'/,inside:{outline:{pattern:/<[^>]+>/,alias:"variable"}}},outline:{pattern:/<[^>]+>/,alias:"variable"}}}(); \ No newline at end of file +!function(a){var n="(?:\r?\n|\r)[ \t]*\\|.+\\|(?:(?!\\|).)*";a.languages.gherkin={pystring:{pattern:/("""|''')[\s\S]+?\1/,alias:"string"},comment:{pattern:/(^[ \t]*)#.*/m,lookbehind:!0},tag:{pattern:/(^[ \t]*)@\S*/m,lookbehind:!0},feature:{pattern:/((?:^|\r?\n|\r)[ \t]*)(?:Ability|Ahoy matey!|Arwedd|Aspekt|Besigheid Behoefte|Business Need|Caracteristica|Característica|Egenskab|Egenskap|Eiginleiki|Feature|Fīča|Fitur|Fonctionnalité|Fonksyonalite|Funcionalidade|Funcionalitat|Functionalitate|Funcţionalitate|Funcționalitate|Functionaliteit|Fungsi|Funkcia|Funkcija|Funkcionalitāte|Funkcionalnost|Funkcja|Funksie|Funktionalität|Funktionalitéit|Funzionalità|Hwaet|Hwæt|Jellemző|Karakteristik|Lastnost|Mak|Mogucnost|laH|Mogućnost|Moznosti|Možnosti|OH HAI|Omadus|Ominaisuus|Osobina|Özellik|Potrzeba biznesowa|perbogh|poQbogh malja'|Požadavek|Požiadavka|Pretty much|Qap|Qu'meH 'ut|Savybė|Tính năng|Trajto|Vermoë|Vlastnosť|Właściwość|Značilnost|Δυνατότητα|Λειτουργία|Могућност|Мөмкинлек|Особина|Свойство|Үзенчәлеклелек|Функционал|Функционалност|Функция|Функціонал|תכונה|خاصية|خصوصیت|صلاحیت|کاروبار کی ضرورت|وِیژگی|रूप लेख|ਖਾਸੀਅਤ|ਨਕਸ਼ ਨੁਹਾਰ|ਮੁਹਾਂਦਰਾ|గుణము|ಹೆಚ್ಚಳ|ความต้องการทางธุรกิจ|ความสามารถ|โครงหลัก|기능|フィーチャ|功能|機能):(?:[^:\r\n]+(?:\r?\n|\r|$))*/,lookbehind:!0,inside:{important:{pattern:/(:)[^\r\n]+/,lookbehind:!0},keyword:/[^:\r\n]+:/}},scenario:{pattern:/(^[ \t]*)(?:Abstract Scenario|Abstrakt Scenario|Achtergrond|Aer|Ær|Agtergrond|All y'all|Antecedentes|Antecedents|Atburðarás|Atburðarásir|Awww, look mate|B4|Background|Baggrund|Bakgrund|Bakgrunn|Bakgrunnur|Beispiele|Beispiller|Bối cảnh|Cefndir|Cenario|Cenário|Cenario de Fundo|Cenário de Fundo|Cenarios|Cenários|Contesto|Context|Contexte|Contexto|Conto|Contoh|Contone|Dæmi|Dasar|Dead men tell no tales|Delineacao do Cenario|Delineação do Cenário|Dis is what went down|Dữ liệu|Dyagram Senaryo|Dyagram senaryo|Egzanp|Ejemplos|Eksempler|Ekzemploj|Enghreifftiau|Esbozo do escenario|Escenari|Escenario|Esempi|Esquema de l'escenari|Esquema del escenario|Esquema do Cenario|Esquema do Cenário|EXAMPLZ|Examples|Exempel|Exemple|Exemples|Exemplos|First off|Fono|Forgatókönyv|Forgatókönyv vázlat|Fundo|Geçmiş|Grundlage|Hannergrond|ghantoH|Háttér|Heave to|Istorik|Juhtumid|Keadaan|Khung kịch bản|Khung tình huống|Kịch bản|Koncept|Konsep skenario|Kontèks|Kontekst|Kontekstas|Konteksts|Kontext|Konturo de la scenaro|Latar Belakang|lut chovnatlh|lut|lutmey|Lýsing Atburðarásar|Lýsing Dæma|MISHUN SRSLY|MISHUN|Menggariskan Senario|mo'|Náčrt Scenára|Náčrt Scénáře|Náčrt Scenáru|Oris scenarija|Örnekler|Osnova|Osnova Scenára|Osnova scénáře|Osnutek|Ozadje|Paraugs|Pavyzdžiai|Példák|Piemēri|Plan du scénario|Plan du Scénario|Plan Senaryo|Plan senaryo|Plang vum Szenario|Pozadí|Pozadie|Pozadina|Príklady|Příklady|Primer|Primeri|Primjeri|Przykłady|Raamstsenaarium|Reckon it's like|Rerefons|Scenár|Scénář|Scenarie|Scenarij|Scenarijai|Scenarijaus šablonas|Scenariji|Scenārijs|Scenārijs pēc parauga|Scenarijus|Scenario|Scénario|Scenario Amlinellol|Scenario Outline|Scenario Template|Scenariomal|Scenariomall|Scenarios|Scenariu|Scenariusz|Scenaro|Schema dello scenario|Se ðe|Se the|Se þe|Senario|Senaryo Deskripsyon|Senaryo deskripsyon|Senaryo|Senaryo taslağı|Shiver me timbers|Situācija|Situai|Situasie Uiteensetting|Situasie|Skenario konsep|Skenario|Skica|Structura scenariu|Structură scenariu|Struktura scenarija|Stsenaarium|Swa hwaer swa|Swa|Swa hwær swa|Szablon scenariusza|Szenario|Szenariogrundriss|Tapaukset|Tapaus|Tapausaihio|Taust|Tausta|Template Keadaan|Template Senario|Template Situai|The thing of it is|Tình huống|Variantai|Voorbeelde|Voorbeelden|Wharrimean is|Yo-ho-ho|You'll wanna|Założenia|Παραδείγματα|Περιγραφή Σεναρίου|Σενάρια|Σενάριο|Υπόβαθρο|Кереш|Контекст|Концепт|Мисаллар|Мисоллар|Основа|Передумова|Позадина|Предистория|Предыстория|Приклади|Пример|Примери|Примеры|Рамка на сценарий|Скица|Структура сценарија|Структура сценария|Структура сценарію|Сценарий|Сценарий структураси|Сценарийның төзелеше|Сценарији|Сценарио|Сценарій|Тарих|Үрнәкләр|דוגמאות|רקע|תבנית תרחיש|תרחיש|الخلفية|الگوی سناریو|امثلة|پس منظر|زمینه|سناریو|سيناريو|سيناريو مخطط|مثالیں|منظر نامے کا خاکہ|منظرنامہ|نمونه ها|उदाहरण|परिदृश्य|परिदृश्य रूपरेखा|पृष्ठभूमि|ਉਦਾਹਰਨਾਂ|ਪਟਕਥਾ|ਪਟਕਥਾ ਢਾਂਚਾ|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਿਛੋਕੜ|ఉదాహరణలు|కథనం|నేపథ్యం|సన్నివేశం|ಉದಾಹರಣೆಗಳು|ಕಥಾಸಾರಾಂಶ|ವಿವರಣೆ|ಹಿನ್ನೆಲೆ|โครงสร้างของเหตุการณ์|ชุดของตัวอย่าง|ชุดของเหตุการณ์|แนวคิด|สรุปเหตุการณ์|เหตุการณ์|배경|시나리오|시나리오 개요|예|サンプル|シナリオ|シナリオアウトライン|シナリオテンプレ|シナリオテンプレート|テンプレ|例|例子|剧本|剧本大纲|劇本|劇本大綱|场景|场景大纲|場景|場景大綱|背景):[^:\r\n]*/m,lookbehind:!0,inside:{important:{pattern:/(:)[^\r\n]*/,lookbehind:!0},keyword:/[^:\r\n]+:/}},"table-body":{pattern:RegExp("("+n+")(?:"+n+")+"),lookbehind:!0,inside:{outline:{pattern:/<[^>]+>/,alias:"variable"},td:{pattern:/\s*[^\s|][^|]*/,alias:"string"},punctuation:/\|/}},"table-head":{pattern:RegExp(n),inside:{th:{pattern:/\s*[^\s|][^|]*/,alias:"variable"},punctuation:/\|/}},atrule:{pattern:/(^[ \t]+)(?:'a|'ach|'ej|7|a|A také|A taktiež|A tiež|A zároveň|Aber|Ac|Adott|Akkor|Ak|Aleshores|Ale|Ali|Allora|Alors|Als|Ama|Amennyiben|Amikor|Ampak|an|AN|Ananging|And y'all|And|Angenommen|Anrhegedig a|An|Apabila|Atès|Atesa|Atunci|Avast!|Aye|A|awer|Bagi|Banjur|Bet|Biết|Blimey!|Buh|But at the end of the day I reckon|But y'all|But|BUT|Cal|Când|Cand|Cando|Ce|Cuando|Če|Ða ðe|Ða|Dadas|Dada|Dados|Dado|DaH ghu' bejlu'|dann|Dann|Dano|Dan|Dar|Dat fiind|Data|Date fiind|Date|Dati fiind|Dati|Daţi fiind|Dați fiind|DEN|Dato|De|Den youse gotta|Dengan|Diberi|Diyelim ki|Donada|Donat|Donitaĵo|Do|Dun|Duota|Ðurh|Eeldades|Ef|Eğer ki|Entao|Então|Entón|E|En|Entonces|Epi|És|Etant donnée|Etant donné|Et|Étant données|Étant donnée|Étant donné|Etant données|Etant donnés|Étant donnés|Fakat|Gangway!|Gdy|Gegeben seien|Gegeben sei|Gegeven|Gegewe|ghu' noblu'|Gitt|Given y'all|Given|Givet|Givun|Ha|Cho|I CAN HAZ|In|Ir|It's just unbelievable|I|Ja|Jeśli|Jeżeli|Kad|Kada|Kadar|Kai|Kaj|Když|Keď|Kemudian|Ketika|Khi|Kiedy|Ko|Kuid|Kui|Kun|Lan|latlh|Le sa a|Let go and haul|Le|Lè sa a|Lè|Logo|Lorsqu'<|Lorsque|mä|Maar|Mais|Mając|Ma|Majd|Maka|Manawa|Mas|Men|Menawa|Mutta|Nalika|Nalikaning|Nanging|Når|När|Nato|Nhưng|Niin|Njuk|O zaman|Och|Og|Oletetaan|Ond|Onda|Oraz|Pak|Pero|Però|Podano|Pokiaľ|Pokud|Potem|Potom|Privzeto|Pryd|Quan|Quand|Quando|qaSDI'|Så|Sed|Se|Siis|Sipoze ke|Sipoze Ke|Sipoze|Si|Şi|Și|Soit|Stel|Tada|Tad|Takrat|Tak|Tapi|Ter|Tetapi|Tha the|Tha|Then y'all|Then|Thì|Thurh|Toda|Too right|Un|Und|ugeholl|Và|vaj|Vendar|Ve|wann|Wanneer|WEN|Wenn|When y'all|When|Wtedy|Wun|Y'know|Yeah nah|Yna|Youse know like when|Youse know when youse got|Y|Za predpokladu|Za předpokladu|Zadan|Zadani|Zadano|Zadate|Zadato|Zakładając|Zaradi|Zatati|Þa þe|Þa|Þá|Þegar|Þurh|Αλλά|Δεδομένου|Και|Όταν|Τότε|А також|Агар|Але|Али|Аммо|А|Әгәр|Әйтик|Әмма|Бирок|Ва|Вә|Дадено|Дано|Допустим|Если|Задате|Задати|Задато|И|І|К тому же|Када|Кад|Когато|Когда|Коли|Ләкин|Лекин|Нәтиҗәдә|Нехай|Но|Онда|Припустимо, що|Припустимо|Пусть|Также|Та|Тогда|Тоді|То|Унда|Һәм|Якщо|אבל|אזי|אז|בהינתן|וגם|כאשר|آنگاه|اذاً|اگر|اما|اور|با فرض|بالفرض|بفرض|پھر|تب|ثم|جب|عندما|فرض کیا|لكن|لیکن|متى|هنگامی|و|अगर|और|कदा|किन्तु|चूंकि|जब|तथा|तदा|तब|परन्तु|पर|यदि|ਅਤੇ|ਜਦੋਂ|ਜਿਵੇਂ ਕਿ|ਜੇਕਰ|ਤਦ|ਪਰ|అప్పుడు|ఈ పరిస్థితిలో|కాని|చెప్పబడినది|మరియు|ಆದರೆ|ನಂತರ|ನೀಡಿದ|ಮತ್ತು|ಸ್ಥಿತಿಯನ್ನು|กำหนดให้|ดังนั้น|แต่|เมื่อ|และ|그러면<|그리고<|단<|만약<|만일<|먼저<|조건<|하지만<|かつ<|しかし<|ただし<|ならば<|もし<|並且<|但し<|但是<|假如<|假定<|假設<|假设<|前提<|同时<|同時<|并且<|当<|當<|而且<|那么<|那麼<)(?=[ \t])/m,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\\r\n])*"|'(?:\\.|[^'\\\r\n])*'/,inside:{outline:{pattern:/<[^>]+>/,alias:"variable"}}},outline:{pattern:/<[^>]+>/,alias:"variable"}}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-graphql.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-graphql.min.js index b60589c308..3a5133fc1b 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-graphql.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-graphql.min.js @@ -1 +1 @@ -Prism.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:Prism.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},Prism.hooks.add("after-tokenize",function(n){if("graphql"===n.language)for(var o=n.tokens.filter(function(n){return"string"!=typeof n&&"comment"!==n.type&&"scalar"!==n.type}),s=0;s0)){var s=f(/^\{$/,/^\}$/);if(-1===s)continue;for(var u=e;u=0&&b(p,"variable-input")}}}}function l(n){return t[e+n]}function c(n,t){t=t||0;for(var e=0;e]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/, + lookbehind: true + }, + 'punctuation': /\.+|[{}[\];(),:$]/ + }); + + Prism.languages.insertBefore('groovy', 'string', { + 'shebang': { + pattern: /#!.+/, + alias: 'comment', + greedy: true + }, + 'interpolation-string': { // TODO: Slash strings (e.g. /foo/) can contain line breaks but this will cause a lot of trouble with // simple division (see JS regex), so find a fix maybe? - pattern: /(["'/])(?:\\.|(?!\1)[^\\\r\n])*\1/, - greedy: true + pattern: /"""(?:[^\\]|\\[\s\S])*?"""|(["/])(?:\\.|(?!\1)[^\\\r\n])*\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/, + greedy: true, + inside: { + 'interpolation': interpolation, + 'string': /[\s\S]+/ + } } - ], - 'keyword': /\b(?:abstract|as|assert|boolean|break|byte|case|catch|char|class|const|continue|def|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|in|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/, - 'number': /\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i, - 'operator': { - pattern: /(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/, - lookbehind: true - }, - 'punctuation': /\.+|[{}[\];(),:$]/ -}); - -Prism.languages.insertBefore('groovy', 'string', { - 'shebang': { - pattern: /#!.+/, - alias: 'comment' - } -}); - -Prism.languages.insertBefore('groovy', 'punctuation', { - 'spock-block': /\b(?:and|cleanup|expect|given|setup|then|when|where):/ -}); - -Prism.languages.insertBefore('groovy', 'function', { - 'annotation': { - pattern: /(^|[^.])@\w+/, - lookbehind: true, - alias: 'punctuation' - } -}); + }); -// Handle string interpolation -Prism.hooks.add('wrap', function (env) { - if (env.language === 'groovy' && env.type === 'string') { - var delimiter = env.content[0]; + Prism.languages.insertBefore('groovy', 'punctuation', { + 'spock-block': /\b(?:and|cleanup|expect|given|setup|then|when|where):/ + }); - if (delimiter != "'") { - var pattern = /([^\\])(?:\$(?:\{.*?\}|[\w.]+))/; - if (delimiter === '$') { - pattern = /([^\$])(?:\$(?:\{.*?\}|[\w.]+))/; - } - - // To prevent double HTML-encoding we have to decode env.content first - env.content = env.content.replace(/</g, '<').replace(/&/g, '&'); + Prism.languages.insertBefore('groovy', 'function', { + 'annotation': { + pattern: /(^|[^.])@\w+/, + lookbehind: true, + alias: 'punctuation' + } + }); - env.content = Prism.highlight(env.content, { - 'expression': { - pattern: pattern, - lookbehind: true, - inside: Prism.languages.groovy - } - }); + interpolation.inside.expression.inside = Prism.languages.groovy; - env.classes.push(delimiter === '/' ? 'regex' : 'gstring'); - } - } -}); +}(Prism)); diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-groovy.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-groovy.min.js index fa3203b359..2242f9f61c 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-groovy.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-groovy.min.js @@ -1 +1 @@ -Prism.languages.groovy=Prism.languages.extend("clike",{string:[{pattern:/("""|''')(?:[^\\]|\\[\s\S])*?\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,greedy:!0},{pattern:/(["'/])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0}],keyword:/\b(?:abstract|as|assert|boolean|break|byte|case|catch|char|class|const|continue|def|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|in|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),Prism.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment"}}),Prism.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(?:and|cleanup|expect|given|setup|then|when|where):/}),Prism.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),Prism.hooks.add("wrap",function(e){if("groovy"===e.language&&"string"===e.type){var t=e.content[0];if("'"!=t){var n=/([^\\])(?:\$(?:\{.*?\}|[\w.]+))/;"$"===t&&(n=/([^\$])(?:\$(?:\{.*?\}|[\w.]+))/),e.content=e.content.replace(/</g,"<").replace(/&/g,"&"),e.content=Prism.highlight(e.content,{expression:{pattern:n,lookbehind:!0,inside:Prism.languages.groovy}}),e.classes.push("/"===t?"regex":"gstring")}}}); \ No newline at end of file +!function(e){var n={pattern:/((?:^|[^\\$])(?:\\{2})*)\$(?:\w+|\{[^{}]*\})/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:null}}};e.languages.groovy=e.languages.extend("clike",{string:{pattern:/'''(?:[^\\]|\\[\s\S])*?'''|'(?:\\.|[^\\'\r\n])*'/,greedy:!0},keyword:/\b(?:abstract|as|assert|boolean|break|byte|case|catch|char|class|const|continue|def|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|in|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),e.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment",greedy:!0},"interpolation-string":{pattern:/"""(?:[^\\]|\\[\s\S])*?"""|(["/])(?:\\.|(?!\1)[^\\\r\n])*\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,greedy:!0,inside:{interpolation:n,string:/[\s\S]+/}}}),e.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(?:and|cleanup|expect|given|setup|then|when|where):/}),e.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),n.inside.expression.inside=e.languages.groovy}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-haml.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-haml.min.js index db9c658fa5..7b81c0ca70 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-haml.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-haml.min.js @@ -1 +1 @@ -!function(n){n.languages.haml={"multiline-comment":{pattern:/((?:^|\r?\n|\r)([\t ]*))(?:\/|-#).*(?:(?:\r?\n|\r)\2[\t ].+)*/,lookbehind:!0,alias:"comment"},"multiline-code":[{pattern:/((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*,[\t ]*(?:(?:\r?\n|\r)\2[\t ].*,[\t ]*)*(?:(?:\r?\n|\r)\2[\t ].+)/,lookbehind:!0,inside:n.languages.ruby},{pattern:/((?:^|\r?\n|\r)([\t ]*)(?:[~-]|[&!]?=)).*\|[\t ]*(?:(?:\r?\n|\r)\2[\t ].*\|[\t ]*)*/,lookbehind:!0,inside:n.languages.ruby}],filter:{pattern:/((?:^|\r?\n|\r)([\t ]*)):[\w-]+(?:(?:\r?\n|\r)(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"symbol"}}},markup:{pattern:/((?:^|\r?\n|\r)[\t ]*)<.+/,lookbehind:!0,inside:n.languages.markup},doctype:{pattern:/((?:^|\r?\n|\r)[\t ]*)!!!(?: .+)?/,lookbehind:!0},tag:{pattern:/((?:^|\r?\n|\r)[\t ]*)[%.#][\w\-#.]*[\w\-](?:\([^)]+\)|\{(?:\{[^}]+\}|[^{}])+\}|\[[^\]]+\])*[\/<>]*/,lookbehind:!0,inside:{attributes:[{pattern:/(^|[^#])\{(?:\{[^}]+\}|[^{}])+\}/,lookbehind:!0,inside:n.languages.ruby},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*)(?:"(?:\\.|[^\\"\r\n])*"|[^)\s]+)/,lookbehind:!0},"attr-name":/[\w:-]+(?=\s*!?=|\s*[,)])/,punctuation:/[=(),]/}},{pattern:/\[[^\]]+\]/,inside:n.languages.ruby}],punctuation:/[<>]/}},code:{pattern:/((?:^|\r?\n|\r)[\t ]*(?:[~-]|[&!]?=)).+/,lookbehind:!0,inside:n.languages.ruby},interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},ruby:{pattern:/[\s\S]+/,inside:n.languages.ruby}}},punctuation:{pattern:/((?:^|\r?\n|\r)[\t ]*)[~=\-&!]+/,lookbehind:!0}};for(var e=["css",{filter:"coffee",language:"coffeescript"},"erb","javascript","less","markdown","ruby","scss","textile"],t={},r=0,a=e.length;r]*/,lookbehind:!0,inside:{attributes:[{pattern:/(^|[^#])\{(?:\{[^}]+\}|[^{}])+\}/,lookbehind:!0,inside:n.languages.ruby},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*)(?:"(?:\\.|[^\\"\r\n])*"|[^)\s]+)/,lookbehind:!0},"attr-name":/[\w:-]+(?=\s*!?=|\s*[,)])/,punctuation:/[=(),]/}},{pattern:/\[[^\]]+\]/,inside:n.languages.ruby}],punctuation:/[<>]/}},code:{pattern:/((?:^|\r?\n|\r)[\t ]*(?:[~-]|[&!]?=)).+/,lookbehind:!0,inside:n.languages.ruby},interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},ruby:{pattern:/[\s\S]+/,inside:n.languages.ruby}}},punctuation:{pattern:/((?:^|\r?\n|\r)[\t ]*)[~=\-&!]+/,lookbehind:!0}};for(var e=["css",{filter:"coffee",language:"coffeescript"},"erb","javascript","less","markdown","ruby","scss","textile"],t={},r=0,a=e.length;r@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",function(a){e.languages["markup-templating"].buildPlaceholders(a,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)}),e.hooks.add("after-tokenize",function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"handlebars")}),e.languages.hbs=e.languages.handlebars}(Prism); \ No newline at end of file +!function(a){a.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},a.hooks.add("before-tokenize",(function(e){a.languages["markup-templating"].buildPlaceholders(e,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),a.hooks.add("after-tokenize",(function(e){a.languages["markup-templating"].tokenizePlaceholders(e,"handlebars")})),a.languages.hbs=a.languages.handlebars,a.languages.mustache=a.languages.handlebars}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-http.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-http.min.js index 91df7ec8e4..94a7f07b71 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-http.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-http.min.js @@ -1 +1 @@ -!function(t){function a(t){return RegExp("(^(?:"+t+"):[ \t]*(?![ \t]))[^]+","i")}t.languages.http={"request-line":{pattern:/^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\s(?:https?:\/\/|\/)\S*\sHTTP\/[\d.]+/m,inside:{method:{pattern:/^[A-Z]+\b/,alias:"property"},"request-target":{pattern:/^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,lookbehind:!0,alias:"url",inside:t.languages.uri},"http-version":{pattern:/^(\s)HTTP\/[\d.]+/,lookbehind:!0,alias:"property"}}},"response-status":{pattern:/^HTTP\/[\d.]+ \d+ .+/m,inside:{"http-version":{pattern:/^HTTP\/[\d.]+/,alias:"property"},"status-code":{pattern:/^(\s)\d+(?=\s)/,lookbehind:!0,alias:"number"},"reason-phrase":{pattern:/^(\s).+/,lookbehind:!0,alias:"string"}}},header:{pattern:/^[\w-]+:.+(?:(?:\r\n?|\n)[ \t].+)*/m,inside:{"header-value":[{pattern:a("Content-Security-Policy"),lookbehind:!0,alias:["csp","languages-csp"],inside:t.languages.csp},{pattern:a("Public-Key-Pins(?:-Report-Only)?"),lookbehind:!0,alias:["hpkp","languages-hpkp"],inside:t.languages.hpkp},{pattern:a("Strict-Transport-Security"),lookbehind:!0,alias:["hsts","languages-hsts"],inside:t.languages.hsts},{pattern:a("[^:]+"),lookbehind:!0}],"header-name":{pattern:/^[^:]+/,alias:"keyword"},punctuation:/^:/}}};var e,n,s,i=t.languages,p={"application/javascript":i.javascript,"application/json":i.json||i.javascript,"application/xml":i.xml,"text/xml":i.xml,"text/html":i.html,"text/css":i.css,"text/plain":i.plain},r={"application/json":!0,"application/xml":!0};for(var l in p)if(p[l]){e=e||{};var o=r[l]?(void 0,s=(n=l).replace(/^[a-z]+\//,""),"(?:"+n+"|\\w+/(?:[\\w.-]+\\+)+"+s+"(?![+\\w.-]))"):l;e[l.replace(/\//g,"-")]={pattern:RegExp("(content-type:\\s*"+o+"(?:(?:\r\n?|\n)[\\w-].*)*(?:\r(?:\n|(?!\n))|\n))[^ \t\\w-][^]*","i"),lookbehind:!0,inside:p[l]}}e&&t.languages.insertBefore("http","header",e)}(Prism); \ No newline at end of file +!function(t){function a(t){return RegExp("(^(?:"+t+"):[ \t]*(?![ \t]))[^]+","i")}t.languages.http={"request-line":{pattern:/^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\s(?:https?:\/\/|\/)\S*\sHTTP\/[\d.]+/m,inside:{method:{pattern:/^[A-Z]+\b/,alias:"property"},"request-target":{pattern:/^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,lookbehind:!0,alias:"url",inside:t.languages.uri},"http-version":{pattern:/^(\s)HTTP\/[\d.]+/,lookbehind:!0,alias:"property"}}},"response-status":{pattern:/^HTTP\/[\d.]+ \d+ .+/m,inside:{"http-version":{pattern:/^HTTP\/[\d.]+/,alias:"property"},"status-code":{pattern:/^(\s)\d+(?=\s)/,lookbehind:!0,alias:"number"},"reason-phrase":{pattern:/^(\s).+/,lookbehind:!0,alias:"string"}}},header:{pattern:/^[\w-]+:.+(?:(?:\r\n?|\n)[ \t].+)*/m,inside:{"header-value":[{pattern:a("Content-Security-Policy"),lookbehind:!0,alias:["csp","languages-csp"],inside:t.languages.csp},{pattern:a("Public-Key-Pins(?:-Report-Only)?"),lookbehind:!0,alias:["hpkp","languages-hpkp"],inside:t.languages.hpkp},{pattern:a("Strict-Transport-Security"),lookbehind:!0,alias:["hsts","languages-hsts"],inside:t.languages.hsts},{pattern:a("[^:]+"),lookbehind:!0}],"header-name":{pattern:/^[^:]+/,alias:"keyword"},punctuation:/^:/}}};var e,n=t.languages,s={"application/javascript":n.javascript,"application/json":n.json||n.javascript,"application/xml":n.xml,"text/xml":n.xml,"text/html":n.html,"text/css":n.css,"text/plain":n.plain},i={"application/json":!0,"application/xml":!0};function r(t){var a=t.replace(/^[a-z]+\//,"");return"(?:"+t+"|\\w+/(?:[\\w.-]+\\+)+"+a+"(?![+\\w.-]))"}for(var p in s)if(s[p]){e=e||{};var l=i[p]?r(p):p;e[p.replace(/\//g,"-")]={pattern:RegExp("(content-type:\\s*"+l+"(?:(?:\r\n?|\n)[\\w-].*)*(?:\r(?:\n|(?!\n))|\n))[^ \t\\w-][^]*","i"),lookbehind:!0,inside:s[p]}}e&&t.languages.insertBefore("http","header",e)}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-icu-message-format.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-icu-message-format.min.js index 7849a573ff..412677d1ad 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-icu-message-format.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-icu-message-format.min.js @@ -1 +1 @@ -!function(e){function s(e,t){return t<=0?"[]":e.replace(//g,function(){return s(e,t-1)})}var t=/'[{}:=,](?:[^']|'')*'(?!')/,n={pattern:/''/,greedy:!0,alias:"operator"},r={pattern:t,greedy:!0,inside:{escape:n}},a=s("\\{(?:[^{}']|'(?![{},'])|''||)*\\}".replace(//g,function(){return t.source}),8),i={pattern:RegExp(a),inside:{message:{pattern:/^(\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:null},"message-delimiter":{pattern:/./,alias:"punctuation"}}};e.languages["icu-message-format"]={argument:{pattern:RegExp(a),greedy:!0,inside:{content:{pattern:/^(\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:{"argument-name":{pattern:/^(\s*)[^{}:=,\s]+/,lookbehind:!0},"choice-style":{pattern:/^(\s*,\s*choice\s*,\s*)\S(?:[\s\S]*\S)?/,lookbehind:!0,inside:{punctuation:/\|/,range:{pattern:/^(\s*)[+-]?(?:\d+(?:\.\d*)?|\u221e)\s*[<#\u2264]/,lookbehind:!0,inside:{operator:/[<#\u2264]/,number:/\S+/}},rest:null}},"plural-style":{pattern:/^(\s*,\s*(?:plural|selectordinal)\s*,\s*)\S(?:[\s\S]*\S)?/,lookbehind:!0,inside:{offset:/^offset:\s*\d+/,"nested-message":i,selector:{pattern:/=\d+|[^{}:=,\s]+/,inside:{keyword:/^(?:few|many|one|other|two|zero)$/}}}},"select-style":{pattern:/^(\s*,\s*select\s*,\s*)\S(?:[\s\S]*\S)?/,lookbehind:!0,inside:{"nested-message":i,selector:{pattern:/[^{}:=,\s]+/,inside:{keyword:/^other$/}}}},keyword:/\b(?:choice|plural|select|selectordinal)\b/,"arg-type":{pattern:/\b(?:date|duration|number|ordinal|spellout|time)\b/,alias:"keyword"},"arg-skeleton":{pattern:/(,\s*)::[^{}:=,\s]+/,lookbehind:!0},"arg-style":{pattern:/(,\s*)(?:currency|full|integer|long|medium|percent|short)(?=\s*$)/,lookbehind:!0},"arg-style-text":{pattern:RegExp("(^\\s*,\\s*(?=\\S))"+s("(?:[^{}']|'[^']*'|\\{(?:)?\\})+",8)+"$"),lookbehind:!0,alias:"string"},punctuation:/,/}},"argument-delimiter":{pattern:/./,alias:"operator"}}},escape:n,string:r},i.inside.message.inside=e.languages["icu-message-format"],e.languages["icu-message-format"].argument.inside.content.inside["choice-style"].inside.rest=e.languages["icu-message-format"]}(Prism); \ No newline at end of file +!function(e){function t(e,s){return s<=0?"[]":e.replace(//g,(function(){return t(e,s-1)}))}var s=/'[{}:=,](?:[^']|'')*'(?!')/,n={pattern:/''/,greedy:!0,alias:"operator"},r={pattern:s,greedy:!0,inside:{escape:n}},a=t("\\{(?:[^{}']|'(?![{},'])|''||)*\\}".replace(//g,(function(){return s.source})),8),i={pattern:RegExp(a),inside:{message:{pattern:/^(\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:null},"message-delimiter":{pattern:/./,alias:"punctuation"}}};e.languages["icu-message-format"]={argument:{pattern:RegExp(a),greedy:!0,inside:{content:{pattern:/^(\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:{"argument-name":{pattern:/^(\s*)[^{}:=,\s]+/,lookbehind:!0},"choice-style":{pattern:/^(\s*,\s*choice\s*,\s*)\S(?:[\s\S]*\S)?/,lookbehind:!0,inside:{punctuation:/\|/,range:{pattern:/^(\s*)[+-]?(?:\d+(?:\.\d*)?|\u221e)\s*[<#\u2264]/,lookbehind:!0,inside:{operator:/[<#\u2264]/,number:/\S+/}},rest:null}},"plural-style":{pattern:/^(\s*,\s*(?:plural|selectordinal)\s*,\s*)\S(?:[\s\S]*\S)?/,lookbehind:!0,inside:{offset:/^offset:\s*\d+/,"nested-message":i,selector:{pattern:/=\d+|[^{}:=,\s]+/,inside:{keyword:/^(?:few|many|one|other|two|zero)$/}}}},"select-style":{pattern:/^(\s*,\s*select\s*,\s*)\S(?:[\s\S]*\S)?/,lookbehind:!0,inside:{"nested-message":i,selector:{pattern:/[^{}:=,\s]+/,inside:{keyword:/^other$/}}}},keyword:/\b(?:choice|plural|select|selectordinal)\b/,"arg-type":{pattern:/\b(?:date|duration|number|ordinal|spellout|time)\b/,alias:"keyword"},"arg-skeleton":{pattern:/(,\s*)::[^{}:=,\s]+/,lookbehind:!0},"arg-style":{pattern:/(,\s*)(?:currency|full|integer|long|medium|percent|short)(?=\s*$)/,lookbehind:!0},"arg-style-text":{pattern:RegExp("(^\\s*,\\s*(?=\\S))"+t("(?:[^{}']|'[^']*'|\\{(?:)?\\})+",8)+"$"),lookbehind:!0,alias:"string"},punctuation:/,/}},"argument-delimiter":{pattern:/./,alias:"operator"}}},escape:n,string:r},i.inside.message.inside=e.languages["icu-message-format"],e.languages["icu-message-format"].argument.inside.content.inside["choice-style"].inside.rest=e.languages["icu-message-format"]}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-java.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-java.js index 9fe9f695f9..9d10f2fe62 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-java.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-java.js @@ -1,13 +1,13 @@ (function (Prism) { - var keywords = /\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/; + var keywords = /\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/; // full package (optional) + parent classes (optional) - var classNamePrefix = /(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source; + var classNamePrefix = /(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source; // based on the java naming conventions var className = { - pattern: RegExp(classNamePrefix + /[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source), + pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source), lookbehind: true, inside: { 'namespace': { @@ -29,9 +29,16 @@ 'class-name': [ className, { - // variables and parameters + // variables, parameters, and constructor references // this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods) - pattern: RegExp(classNamePrefix + /[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source), + pattern: RegExp(/(^|[^\w.])/.source + classNamePrefix + /[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source), + lookbehind: true, + inside: className.inside + }, + { + // class names based on keyword + // this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods) + pattern: RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source + classNamePrefix + /[A-Z]\w*\b/.source), lookbehind: true, inside: className.inside } @@ -79,6 +86,30 @@ 'operator': /[?&|]/ } }, + 'import': [ + { + pattern: RegExp(/(\bimport\s+)/.source + classNamePrefix + /(?:[A-Z]\w*|\*)(?=\s*;)/.source), + lookbehind: true, + inside: { + 'namespace': className.inside.namespace, + 'punctuation': /\./, + 'operator': /\*/, + 'class-name': /\w+/ + } + }, + { + pattern: RegExp(/(\bimport\s+static\s+)/.source + classNamePrefix + /(?:\w+|\*)(?=\s*;)/.source), + lookbehind: true, + alias: 'static', + inside: { + 'namespace': className.inside.namespace, + 'static': /\b\w+$/, + 'punctuation': /\./, + 'operator': /\*/, + 'class-name': /\w+/ + } + } + ], 'namespace': { pattern: RegExp( /(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/ diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-java.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-java.min.js index 897da4e88c..d240e5076e 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-java.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-java.min.js @@ -1 +1 @@ -!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n="(^|[^\\w.])(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",a={pattern:RegExp(n+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[a,{pattern:RegExp(n+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()])"),lookbehind:!0,inside:a.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp("(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?".replace(//g,function(){return t.source})),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism); \ No newline at end of file +!function(e){var n=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,t="(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",s={pattern:RegExp("(^|[^\\w.])"+t+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[s,{pattern:RegExp("(^|[^\\w.])"+t+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()]|\\s*(?:\\[[\\s,]*\\]\\s*)?::\\s*new\\b)"),lookbehind:!0,inside:s.inside},{pattern:RegExp("(\\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\\s+)"+t+"[A-Z]\\w*\\b"),lookbehind:!0,inside:s.inside}],keyword:n,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":s,keyword:n,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp("(\\bimport\\s+)"+t+"(?:[A-Z]\\w*|\\*)(?=\\s*;)"),lookbehind:!0,inside:{namespace:s.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp("(\\bimport\\s+static\\s+)"+t+"(?:\\w+|\\*)(?=\\s*;)"),lookbehind:!0,alias:"static",inside:{namespace:s.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp("(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?".replace(//g,(function(){return n.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-javadoc.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-javadoc.min.js index 5cdc8bfcb3..d7f0f13f29 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-javadoc.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-javadoc.min.js @@ -1 +1 @@ -!function(a){var e=/(^(?:[\t ]*(?:\*\s*)*))[^*\s].*$/m,n="(?:\\b[a-zA-Z]\\w+\\s*\\.\\s*)*\\b[A-Z]\\w*(?:\\s*)?|".replace(//g,function(){return"#\\s*\\w+(?:\\s*\\([^()]*\\))?"});a.languages.javadoc=a.languages.extend("javadoclike",{}),a.languages.insertBefore("javadoc","keyword",{reference:{pattern:RegExp("(@(?:exception|link|linkplain|see|throws|value)\\s+(?:\\*\\s*)?)(?:"+n+")"),lookbehind:!0,inside:{function:{pattern:/(#\s*)\w+(?=\s*\()/,lookbehind:!0},field:{pattern:/(#\s*)\w+/,lookbehind:!0},namespace:{pattern:/\b(?:[a-z]\w*\s*\.\s*)+/,inside:{punctuation:/\./}},"class-name":/\b[A-Z]\w*/,keyword:a.languages.java.keyword,punctuation:/[#()[\],.]/}},"class-name":{pattern:/(@param\s+)<[A-Z]\w*>/,lookbehind:!0,inside:{punctuation:/[.<>]/}},"code-section":[{pattern:/(\{@code\s+(?!\s))(?:[^\s{}]|\s+(?![\s}])|\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\})+(?=\s*\})/,lookbehind:!0,inside:{code:{pattern:e,lookbehind:!0,inside:a.languages.java,alias:"language-java"}}},{pattern:/(<(code|pre|tt)>(?!)\s*)\S(?:\S|\s+\S)*?(?=\s*<\/\2>)/,lookbehind:!0,inside:{line:{pattern:e,lookbehind:!0,inside:{tag:a.languages.markup.tag,entity:a.languages.markup.entity,code:{pattern:/.+/,inside:a.languages.java,alias:"language-java"}}}}}],tag:a.languages.markup.tag,entity:a.languages.markup.entity}),a.languages.javadoclike.addSupport("java",a.languages.javadoc)}(Prism); \ No newline at end of file +!function(a){var e=/(^(?:[\t ]*(?:\*\s*)*))[^*\s].*$/m,n="(?:\\b[a-zA-Z]\\w+\\s*\\.\\s*)*\\b[A-Z]\\w*(?:\\s*)?|".replace(//g,(function(){return"#\\s*\\w+(?:\\s*\\([^()]*\\))?"}));a.languages.javadoc=a.languages.extend("javadoclike",{}),a.languages.insertBefore("javadoc","keyword",{reference:{pattern:RegExp("(@(?:exception|link|linkplain|see|throws|value)\\s+(?:\\*\\s*)?)(?:"+n+")"),lookbehind:!0,inside:{function:{pattern:/(#\s*)\w+(?=\s*\()/,lookbehind:!0},field:{pattern:/(#\s*)\w+/,lookbehind:!0},namespace:{pattern:/\b(?:[a-z]\w*\s*\.\s*)+/,inside:{punctuation:/\./}},"class-name":/\b[A-Z]\w*/,keyword:a.languages.java.keyword,punctuation:/[#()[\],.]/}},"class-name":{pattern:/(@param\s+)<[A-Z]\w*>/,lookbehind:!0,inside:{punctuation:/[.<>]/}},"code-section":[{pattern:/(\{@code\s+(?!\s))(?:[^\s{}]|\s+(?![\s}])|\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\})+(?=\s*\})/,lookbehind:!0,inside:{code:{pattern:e,lookbehind:!0,inside:a.languages.java,alias:"language-java"}}},{pattern:/(<(code|pre|tt)>(?!)\s*)\S(?:\S|\s+\S)*?(?=\s*<\/\2>)/,lookbehind:!0,inside:{line:{pattern:e,lookbehind:!0,inside:{tag:a.languages.markup.tag,entity:a.languages.markup.entity,code:{pattern:/.+/,inside:a.languages.java,alias:"language-java"}}}}}],tag:a.languages.markup.tag,entity:a.languages.markup.entity}),a.languages.javadoclike.addSupport("java",a.languages.javadoc)}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-javadoclike.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-javadoclike.min.js index 52e19ba937..429dd491ea 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-javadoclike.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-javadoclike.min.js @@ -1 +1 @@ -!function(p){var a=p.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(a,"addSupport",{value:function(a,e){"string"==typeof a&&(a=[a]),a.forEach(function(a){!function(a,e){var n="doc-comment",t=p.languages[a];if(t){var r=t[n];if(!r){var o={"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}};r=(t=p.languages.insertBefore(a,"comment",o))[n]}if(r instanceof RegExp&&(r=t[n]={pattern:r}),Array.isArray(r))for(var i=0,s=r.length;i|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript; \ No newline at end of file +Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-jq.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-jq.min.js index e96a55f710..c9c5eeb3ea 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-jq.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-jq.min.js @@ -1 +1 @@ -!function(e){var n="\\\\\\((?:[^()]|\\([^()]*\\))*\\)",t=RegExp('(^|[^\\\\])"(?:[^"\r\n\\\\]|\\\\[^\r\n(]|__)*"'.replace(/__/g,function(){return n})),i={interpolation:{pattern:RegExp("((?:^|[^\\\\])(?:\\\\{2})*)"+n),lookbehind:!0,inside:{content:{pattern:/^(\\\()[\s\S]+(?=\)$)/,lookbehind:!0,inside:null},punctuation:/^\\\(|\)$/}}},a=e.languages.jq={comment:/#.*/,property:{pattern:RegExp(t.source+"(?=\\s*:(?!:))"),lookbehind:!0,greedy:!0,inside:i},string:{pattern:t,lookbehind:!0,greedy:!0,inside:i},function:{pattern:/(\bdef\s+)[a-z_]\w+/i,lookbehind:!0},variable:/\B\$\w+/,"property-literal":{pattern:/\b[a-z_]\w*(?=\s*:(?!:))/i,alias:"property"},keyword:/\b(?:as|break|catch|def|elif|else|end|foreach|if|import|include|label|module|modulemeta|null|reduce|then|try|while)\b/,boolean:/\b(?:false|true)\b/,number:/(?:\b\d+\.|\B\.)?\b\d+(?:[eE][+-]?\d+)?\b/,operator:[{pattern:/\|=?/,alias:"pipe"},/\.\.|[!=<>]?=|\?\/\/|\/\/=?|[-+*/%]=?|[<>?]|\b(?:and|not|or)\b/],"c-style-function":{pattern:/\b[a-z_]\w*(?=\s*\()/i,alias:"function"},punctuation:/::|[()\[\]{},:;]|\.(?=\s*[\[\w$])/,dot:{pattern:/\./,alias:"important"}};i.interpolation.inside.content.inside=a}(Prism); \ No newline at end of file +!function(e){var n="\\\\\\((?:[^()]|\\([^()]*\\))*\\)",t=RegExp('(^|[^\\\\])"(?:[^"\r\n\\\\]|\\\\[^\r\n(]|__)*"'.replace(/__/g,(function(){return n}))),i={interpolation:{pattern:RegExp("((?:^|[^\\\\])(?:\\\\{2})*)"+n),lookbehind:!0,inside:{content:{pattern:/^(\\\()[\s\S]+(?=\)$)/,lookbehind:!0,inside:null},punctuation:/^\\\(|\)$/}}},a=e.languages.jq={comment:/#.*/,property:{pattern:RegExp(t.source+"(?=\\s*:(?!:))"),lookbehind:!0,greedy:!0,inside:i},string:{pattern:t,lookbehind:!0,greedy:!0,inside:i},function:{pattern:/(\bdef\s+)[a-z_]\w+/i,lookbehind:!0},variable:/\B\$\w+/,"property-literal":{pattern:/\b[a-z_]\w*(?=\s*:(?!:))/i,alias:"property"},keyword:/\b(?:as|break|catch|def|elif|else|end|foreach|if|import|include|label|module|modulemeta|null|reduce|then|try|while)\b/,boolean:/\b(?:false|true)\b/,number:/(?:\b\d+\.|\B\.)?\b\d+(?:[eE][+-]?\d+)?\b/,operator:[{pattern:/\|=?/,alias:"pipe"},/\.\.|[!=<>]?=|\?\/\/|\/\/=?|[-+*/%]=?|[<>?]|\b(?:and|not|or)\b/],"c-style-function":{pattern:/\b[a-z_]\w*(?=\s*\()/i,alias:"function"},punctuation:/::|[()\[\]{},:;]|\.(?=\s*[\[\w$])/,dot:{pattern:/\./,alias:"important"}};i.interpolation.inside.content.inside=a}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-js-extras.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-js-extras.min.js index 390d8edd4f..8d8cba12f4 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-js-extras.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-js-extras.min.js @@ -1 +1 @@ -!function(a){function e(a,e){return RegExp(a.replace(//g,function(){return"(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*"}),e)}a.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+a.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),a.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+a.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),a.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),a.languages.insertBefore("javascript","keyword",{imports:{pattern:e("(\\bimport\\b\\s*)(?:(?:\\s*,\\s*(?:\\*\\s*as\\s+|\\{[^{}]*\\}))?|\\*\\s*as\\s+|\\{[^{}]*\\})(?=\\s*\\bfrom\\b)"),lookbehind:!0,inside:a.languages.javascript},exports:{pattern:e("(\\bexport\\b\\s*)(?:\\*(?:\\s*as\\s+)?(?=\\s*\\bfrom\\b)|\\{[^{}]*\\})"),lookbehind:!0,inside:a.languages.javascript}}),a.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),a.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),a.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:e("(\\.\\s*)#?"),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],r=0;r/g,(function(){return"(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*"})),e)}a.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+a.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),a.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+a.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),a.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),a.languages.insertBefore("javascript","keyword",{imports:{pattern:e("(\\bimport\\b\\s*)(?:(?:\\s*,\\s*(?:\\*\\s*as\\s+|\\{[^{}]*\\}))?|\\*\\s*as\\s+|\\{[^{}]*\\})(?=\\s*\\bfrom\\b)"),lookbehind:!0,inside:a.languages.javascript},exports:{pattern:e("(\\bexport\\b\\s*)(?:\\*(?:\\s*as\\s+)?(?=\\s*\\bfrom\\b)|\\{[^{}]*\\})"),lookbehind:!0,inside:a.languages.javascript}}),a.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),a.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),a.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:e("(\\.\\s*)#?"),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],r=0;r=v.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=v[f],i="string"==typeof r?r:r.content,s=i.indexOf(a);if(-1!==s){++f;var o=i.substring(0,s),p=d(y[a]),l=i.substring(s+a.length),g=[];if(o&&g.push(o),g.push(p),l){var u=[l];e(u),g.push.apply(g,u)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(g)),n+=g.length-1):r.content=g}}else{var c=r.content;Array.isArray(c)?e(c):e([c])}}}(n),new u.Token(i,n,"language-"+i,a)}u.languages.javascript["template-string"]=[t("css","\\b(?:styled(?:\\([^)]*\\))?(?:\\s*\\.\\s*\\w+(?:\\([^)]*\\))*)*|css(?:\\s*\\.\\s*(?:global|resolve))?|createGlobalStyle|keyframes)"),t("html","\\bhtml|\\.\\s*(?:inner|outer)HTML\\s*\\+?="),t("svg","\\bsvg"),t("markdown","\\b(?:markdown|md)"),t("graphql","\\b(?:gql|graphql(?:\\s*\\.\\s*experimental)?)"),t("sql","\\bsql"),e].filter(Boolean);var o={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}u.hooks.add("after-tokenize",function(e){e.language in o&&!function e(t){for(var n=0,r=t.length;n=c.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=c[o],i="string"==typeof r?r:r.content,s=i.indexOf(a);if(-1!==s){++o;var p=i.substring(0,s),u=l(g[a]),f=i.substring(s+a.length),y=[];if(p&&y.push(p),y.push(u),f){var v=[f];e(v),y.push.apply(y,v)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(y)),n+=y.length-1):r.content=y}}else{var d=r.content;Array.isArray(d)?e(d):e([d])}}}(u),new e.Token(r,u,"language-"+r,t)}e.languages.javascript["template-string"]=[o("css","\\b(?:styled(?:\\([^)]*\\))?(?:\\s*\\.\\s*\\w+(?:\\([^)]*\\))*)*|css(?:\\s*\\.\\s*(?:global|resolve))?|createGlobalStyle|keyframes)"),o("html","\\bhtml|\\.\\s*(?:inner|outer)HTML\\s*\\+?="),o("svg","\\bsvg"),o("markdown","\\b(?:markdown|md)"),o("graphql","\\b(?:gql|graphql(?:\\s*\\.\\s*experimental)?)"),o("sql","\\bsql"),t].filter(Boolean);var u={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function c(e){return"string"==typeof e?e:Array.isArray(e)?e.map(c).join(""):c(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in u&&function t(n){for(var r=0,a=n.length;r\\s+)?)[A-Z]\\w*(?:\\.[A-Z]\\w*)*".replace(//g,function(){return n})),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:a.string,number:a.number,boolean:a.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:a,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(Prism); \ No newline at end of file +!function(e){var a=e.languages.javascript,n="\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})+\\}",t="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(t+"(?:(?!\\s)[$\\w\\xA0-\\uFFFF.])+(?=\\s|$)"),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(t+"\\[(?:(?!\\s)[$\\w\\xA0-\\uFFFF.])+(?:=[^[\\]]+)?\\](?=\\s|$)"),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:a,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp("(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\\s+(?:\\s+)?)[A-Z]\\w*(?:\\.[A-Z]\\w*)*".replace(//g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:a.string,number:a.number,boolean:a.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:a,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-jsx.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-jsx.min.js index 0534a54e86..8aa6362fa3 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-jsx.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-jsx.min.js @@ -1 +1 @@ -!function(o){var t=o.util.clone(o.languages.javascript),e="(?:\\{*\\.{3}(?:[^{}]|)*\\})";function n(t,n){return t=t.replace(//g,function(){return"(?:\\s|//.*(?!.)|/\\*(?:[^*]|\\*(?!/))\\*/)"}).replace(//g,function(){return"(?:\\{(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])*\\})"}).replace(//g,function(){return e}),RegExp(t,n)}e=n(e).source,o.languages.jsx=o.languages.extend("markup",t),o.languages.jsx.tag.pattern=n("+(?:[\\w.:$-]+(?:=(?:\"(?:\\\\[^]|[^\\\\\"])*\"|'(?:\\\\[^]|[^\\\\'])*'|[^\\s{'\"/>=]+|))?|))**/?)?>"),o.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,o.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,o.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,o.languages.jsx.tag.inside.comment=t.comment,o.languages.insertBefore("inside","attr-name",{spread:{pattern:n(""),inside:o.languages.jsx}},o.languages.jsx.tag),o.languages.insertBefore("inside","special-attr",{script:{pattern:n("="),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:o.languages.jsx}}},o.languages.jsx.tag);var i=function(t){return t?"string"==typeof t?t:"string"==typeof t.content?t.content:t.content.map(i).join(""):""},r=function(t){for(var n=[],e=0;e"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):0*\\.{3}(?:[^{}]|)*\\})";function a(t,n){return t=t.replace(//g,(function(){return"(?:\\s|//.*(?!.)|/\\*(?:[^*]|\\*(?!/))\\*/)"})).replace(//g,(function(){return"(?:\\{(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])*\\})"})).replace(//g,(function(){return e})),RegExp(t,n)}e=a(e).source,t.languages.jsx=t.languages.extend("markup",n),t.languages.jsx.tag.pattern=a("+(?:[\\w.:$-]+(?:=(?:\"(?:\\\\[^]|[^\\\\\"])*\"|'(?:\\\\[^]|[^\\\\'])*'|[^\\s{'\"/>=]+|))?|))**/?)?>"),t.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,t.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,t.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,t.languages.jsx.tag.inside.comment=n.comment,t.languages.insertBefore("inside","attr-name",{spread:{pattern:a(""),inside:t.languages.jsx}},t.languages.jsx.tag),t.languages.insertBefore("inside","special-attr",{script:{pattern:a("="),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:t.languages.jsx}}},t.languages.jsx.tag);var s=function(t){return t?"string"==typeof t?t:"string"==typeof t.content?t.content:t.content.map(s).join(""):""},g=function(n){for(var e=[],a=0;a0&&e[e.length-1].tagName===s(o.content[0].content[1])&&e.pop():"/>"===o.content[o.content.length-1].content||e.push({tagName:s(o.content[0].content[1]),openedBraces:0}):e.length>0&&"punctuation"===o.type&&"{"===o.content?e[e.length-1].openedBraces++:e.length>0&&e[e.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?e[e.length-1].openedBraces--:i=!0),(i||"string"==typeof o)&&e.length>0&&0===e[e.length-1].openedBraces){var r=s(o);a0&&("string"==typeof n[a-1]||"plain-text"===n[a-1].type)&&(r=s(n[a-1])+r,n.splice(a-1,1),a--),n[a]=new t.Token("plain-text",r,null,r)}o.content&&"string"!=typeof o.content&&g(o.content)}};t.hooks.add("after-tokenize",(function(t){"jsx"!==t.language&&"tsx"!==t.language||g(t.tokens)}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keepalived.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keepalived.min.js index e5eb79b5f3..8a82b4ca48 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keepalived.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keepalived.min.js @@ -1 +1 @@ -Prism.languages.keepalived={comment:{pattern:/[#!].*/,greedy:!0},string:{pattern:/(^|[^\\])(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/,lookbehind:!0,greedy:!0},ip:{pattern:RegExp("\\b(?:(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){5}:(?:[\\da-f]{1,4}:)?[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){4}:(?:[\\da-f]{1,4}:){0,2}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){3}:(?:[\\da-f]{1,4}:){0,3}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){2}:(?:[\\da-f]{1,4}:){0,4}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){6}|(?:[\\da-f]{1,4}:){0,5}:|::(?:[\\da-f]{1,4}:){0,5}|[\\da-f]{1,4}::(?:[\\da-f]{1,4}:){0,5}[\\da-f]{1,4}|::(?:[\\da-f]{1,4}:){0,6}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:)(?:/\\d{1,3})?|(?:/\\d{1,2})?)\\b".replace(//g,function(){return"(?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d))"}),"i"),alias:"number"},path:{pattern:/(\s)\/(?:[^\/\s]+\/)*[^\/\s]*|\b[a-zA-Z]:\\(?:[^\\\s]+\\)*[^\\\s]*/,lookbehind:!0,alias:"string"},variable:/\$\{?\w+\}?/,email:{pattern:/[\w-]+@[\w-]+(?:\.[\w-]{2,3}){1,2}/,alias:"string"},"conditional-configuration":{pattern:/@\^?[\w-]+/,alias:"variable"},operator:/=/,property:/\b(?:BFD_CHECK|DNS_CHECK|FILE_CHECK|HTTP_GET|MISC_CHECK|NAME|PING_CHECK|SCRIPTS|SMTP_CHECK|SSL|SSL_GET|TCP_CHECK|UDP_CHECK|accept|advert_int|alpha|auth_pass|auth_type|authentication|bfd_cpu_affinity|bfd_instance|bfd_no_swap|bfd_priority|bfd_process_name|bfd_rlimit_rttime|bfd_rt_priority|bind_if|bind_port|bindto|ca|certificate|check_unicast_src|checker|checker_cpu_affinity|checker_log_all_failures|checker_no_swap|checker_priority|checker_rlimit_rttime|checker_rt_priority|child_wait_time|connect_ip|connect_port|connect_timeout|dbus_service_name|debug|default_interface|delay|delay_before_retry|delay_loop|digest|dont_track_primary|dynamic|dynamic_interfaces|enable_(?:dbus|script_security|sni|snmp_checker|snmp_rfc|snmp_rfcv2|snmp_rfcv3|snmp_vrrp|traps)|end|fall|fast_recovery|file|flag-[123]|fork_delay|full_command|fwmark|garp_group|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|global_defs|global_tracking|gna_interval|group|ha_suspend|hashed|helo_name|higher_prio_send_advert|hoplimit|http_protocol|hysteresis|idle_tx|include|inhibit_on_failure|init_fail|init_file|instance|interface|interfaces|interval|ip_family|ipvs_process_name|keepalived.conf|kernel_rx_buf_size|key|linkbeat_interfaces|linkbeat_use_polling|log_all_failures|log_unknown_vrids|lower_prio_no_advert|lthreshold|lvs_flush|lvs_flush_onstop|lvs_method|lvs_netlink_cmd_rcv_bufs|lvs_netlink_cmd_rcv_bufs_force|lvs_netlink_monitor_rcv_bufs|lvs_netlink_monitor_rcv_bufs_force|lvs_notify_fifo|lvs_notify_fifo_script|lvs_sched|lvs_sync_daemon|max_auto_priority|max_hops|mcast_src_ip|mh-fallback|mh-port|min_auto_priority_delay|min_rx|min_tx|misc_dynamic|misc_path|misc_timeout|multiplier|name|namespace_with_ipsets|native_ipv6|neighbor_ip|net_namespace|net_namespace_ipvs|nftables|nftables_counters|nftables_ifindex|nftables_priority|no_accept|no_checker_emails|no_email_faults|nopreempt|notification_email|notification_email_from|notify|notify_backup|notify_deleted|notify_down|notify_fault|notify_fifo|notify_fifo_script|notify_master|notify_master_rx_lower_pri|notify_priority_changes|notify_stop|notify_up|old_unicast_checksum|omega|ops|param_match|passive|password|path|persistence_engine|persistence_granularity|persistence_timeout|preempt|preempt_delay|priority|process|process_monitor_rcv_bufs|process_monitor_rcv_bufs_force|process_name|process_names|promote_secondaries|protocol|proxy_arp|proxy_arp_pvlan|quorum|quorum_down|quorum_max|quorum_up|random_seed|real_server|regex|regex_max_offset|regex_min_offset|regex_no_match|regex_options|regex_stack|reload_repeat|reload_time_file|require_reply|retry|rise|router_id|rs_init_notifies|script|script_user|sh-fallback|sh-port|shutdown_script|shutdown_script_timeout|skip_check_adv_addr|smtp_alert|smtp_alert_checker|smtp_alert_vrrp|smtp_connect_timeout|smtp_helo_name|smtp_server|snmp_socket|sorry_server|sorry_server_inhibit|sorry_server_lvs_method|source_ip|start|startup_script|startup_script_timeout|state|static_ipaddress|static_routes|static_rules|status_code|step|strict_mode|sync_group_tracking_weight|terminate_delay|timeout|track_bfd|track_file|track_group|track_interface|track_process|track_script|track_src_ip|ttl|type|umask|unicast_peer|unicast_src_ip|unicast_ttl|url|use_ipvlan|use_pid_dir|use_vmac|user|uthreshold|val[123]|version|virtual_ipaddress|virtual_ipaddress_excluded|virtual_router_id|virtual_routes|virtual_rules|virtual_server|virtual_server_group|virtualhost|vmac_xmit_base|vrrp|vrrp_(?:check_unicast_src|cpu_affinity|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|gna_interval|higher_prio_send_advert|instance|ipsets|iptables|lower_prio_no_advert|mcast_group4|mcast_group6|min_garp|netlink_cmd_rcv_bufs|netlink_cmd_rcv_bufs_force|netlink_monitor_rcv_bufs|netlink_monitor_rcv_bufs_force|no_swap|notify_fifo|notify_fifo_script|notify_priority_changes|priority|process_name|rlimit_rttime|rt_priority|rx_bufs_multiplier|rx_bufs_policy|script|skip_check_adv_addr|startup_delay|strict|sync_group|track_process|version)|warmup|weight)\b/,constant:/\b(?:A|AAAA|AH|BACKUP|CNAME|DR|MASTER|MX|NAT|NS|PASS|SCTP|SOA|TCP|TUN|TXT|UDP|dh|fo|lblc|lblcr|lc|mh|nq|ovf|rr|sed|sh|wlc|wrr)\b/,number:{pattern:/(^|[^\w.-])-?\d+(?:\.\d+)?/,lookbehind:!0},boolean:/\b(?:false|no|off|on|true|yes)\b/,punctuation:/[\{\}]/}; \ No newline at end of file +Prism.languages.keepalived={comment:{pattern:/[#!].*/,greedy:!0},string:{pattern:/(^|[^\\])(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/,lookbehind:!0,greedy:!0},ip:{pattern:RegExp("\\b(?:(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){5}:(?:[\\da-f]{1,4}:)?[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){4}:(?:[\\da-f]{1,4}:){0,2}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){3}:(?:[\\da-f]{1,4}:){0,3}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){2}:(?:[\\da-f]{1,4}:){0,4}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){6}|(?:[\\da-f]{1,4}:){0,5}:|::(?:[\\da-f]{1,4}:){0,5}|[\\da-f]{1,4}::(?:[\\da-f]{1,4}:){0,5}[\\da-f]{1,4}|::(?:[\\da-f]{1,4}:){0,6}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:)(?:/\\d{1,3})?|(?:/\\d{1,2})?)\\b".replace(//g,(function(){return"(?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d))"})),"i"),alias:"number"},path:{pattern:/(\s)\/(?:[^\/\s]+\/)*[^\/\s]*|\b[a-zA-Z]:\\(?:[^\\\s]+\\)*[^\\\s]*/,lookbehind:!0,alias:"string"},variable:/\$\{?\w+\}?/,email:{pattern:/[\w-]+@[\w-]+(?:\.[\w-]{2,3}){1,2}/,alias:"string"},"conditional-configuration":{pattern:/@\^?[\w-]+/,alias:"variable"},operator:/=/,property:/\b(?:BFD_CHECK|DNS_CHECK|FILE_CHECK|HTTP_GET|MISC_CHECK|NAME|PING_CHECK|SCRIPTS|SMTP_CHECK|SSL|SSL_GET|TCP_CHECK|UDP_CHECK|accept|advert_int|alpha|auth_pass|auth_type|authentication|bfd_cpu_affinity|bfd_instance|bfd_no_swap|bfd_priority|bfd_process_name|bfd_rlimit_rttime|bfd_rt_priority|bind_if|bind_port|bindto|ca|certificate|check_unicast_src|checker|checker_cpu_affinity|checker_log_all_failures|checker_no_swap|checker_priority|checker_rlimit_rttime|checker_rt_priority|child_wait_time|connect_ip|connect_port|connect_timeout|dbus_service_name|debug|default_interface|delay|delay_before_retry|delay_loop|digest|dont_track_primary|dynamic|dynamic_interfaces|enable_(?:dbus|script_security|sni|snmp_checker|snmp_rfc|snmp_rfcv2|snmp_rfcv3|snmp_vrrp|traps)|end|fall|fast_recovery|file|flag-[123]|fork_delay|full_command|fwmark|garp_group|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|global_defs|global_tracking|gna_interval|group|ha_suspend|hashed|helo_name|higher_prio_send_advert|hoplimit|http_protocol|hysteresis|idle_tx|include|inhibit_on_failure|init_fail|init_file|instance|interface|interfaces|interval|ip_family|ipvs_process_name|keepalived.conf|kernel_rx_buf_size|key|linkbeat_interfaces|linkbeat_use_polling|log_all_failures|log_unknown_vrids|lower_prio_no_advert|lthreshold|lvs_flush|lvs_flush_onstop|lvs_method|lvs_netlink_cmd_rcv_bufs|lvs_netlink_cmd_rcv_bufs_force|lvs_netlink_monitor_rcv_bufs|lvs_netlink_monitor_rcv_bufs_force|lvs_notify_fifo|lvs_notify_fifo_script|lvs_sched|lvs_sync_daemon|max_auto_priority|max_hops|mcast_src_ip|mh-fallback|mh-port|min_auto_priority_delay|min_rx|min_tx|misc_dynamic|misc_path|misc_timeout|multiplier|name|namespace_with_ipsets|native_ipv6|neighbor_ip|net_namespace|net_namespace_ipvs|nftables|nftables_counters|nftables_ifindex|nftables_priority|no_accept|no_checker_emails|no_email_faults|nopreempt|notification_email|notification_email_from|notify|notify_backup|notify_deleted|notify_down|notify_fault|notify_fifo|notify_fifo_script|notify_master|notify_master_rx_lower_pri|notify_priority_changes|notify_stop|notify_up|old_unicast_checksum|omega|ops|param_match|passive|password|path|persistence_engine|persistence_granularity|persistence_timeout|preempt|preempt_delay|priority|process|process_monitor_rcv_bufs|process_monitor_rcv_bufs_force|process_name|process_names|promote_secondaries|protocol|proxy_arp|proxy_arp_pvlan|quorum|quorum_down|quorum_max|quorum_up|random_seed|real_server|regex|regex_max_offset|regex_min_offset|regex_no_match|regex_options|regex_stack|reload_repeat|reload_time_file|require_reply|retry|rise|router_id|rs_init_notifies|script|script_user|sh-fallback|sh-port|shutdown_script|shutdown_script_timeout|skip_check_adv_addr|smtp_alert|smtp_alert_checker|smtp_alert_vrrp|smtp_connect_timeout|smtp_helo_name|smtp_server|snmp_socket|sorry_server|sorry_server_inhibit|sorry_server_lvs_method|source_ip|start|startup_script|startup_script_timeout|state|static_ipaddress|static_routes|static_rules|status_code|step|strict_mode|sync_group_tracking_weight|terminate_delay|timeout|track_bfd|track_file|track_group|track_interface|track_process|track_script|track_src_ip|ttl|type|umask|unicast_peer|unicast_src_ip|unicast_ttl|url|use_ipvlan|use_pid_dir|use_vmac|user|uthreshold|val[123]|version|virtual_ipaddress|virtual_ipaddress_excluded|virtual_router_id|virtual_routes|virtual_rules|virtual_server|virtual_server_group|virtualhost|vmac_xmit_base|vrrp|vrrp_(?:check_unicast_src|cpu_affinity|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|gna_interval|higher_prio_send_advert|instance|ipsets|iptables|lower_prio_no_advert|mcast_group4|mcast_group6|min_garp|netlink_cmd_rcv_bufs|netlink_cmd_rcv_bufs_force|netlink_monitor_rcv_bufs|netlink_monitor_rcv_bufs_force|no_swap|notify_fifo|notify_fifo_script|notify_priority_changes|priority|process_name|rlimit_rttime|rt_priority|rx_bufs_multiplier|rx_bufs_policy|script|skip_check_adv_addr|startup_delay|strict|sync_group|track_process|version)|warmup|weight)\b/,constant:/\b(?:A|AAAA|AH|BACKUP|CNAME|DR|MASTER|MX|NAT|NS|PASS|SCTP|SOA|TCP|TUN|TXT|UDP|dh|fo|lblc|lblcr|lc|mh|nq|ovf|rr|sed|sh|wlc|wrr)\b/,number:{pattern:/(^|[^\w.-])-?\d+(?:\.\d+)?/,lookbehind:!0},boolean:/\b(?:false|no|off|on|true|yes)\b/,punctuation:/[\{\}]/}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keyman.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keyman.js index 55f76c96e9..18f6bded2e 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keyman.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keyman.js @@ -28,7 +28,7 @@ Prism.languages.keyman = { alias: 'keyword' }, 'structural-keyword': { - pattern: /\b(?:ansi|begin|group|match|nomatch|unicode|using keys)\b/i, + pattern: /\b(?:ansi|begin|group|match|newcontext|nomatch|postkeystroke|readonly|unicode|using keys)\b/i, alias: 'keyword' }, diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keyman.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keyman.min.js index 749507f544..f24968c0a9 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keyman.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-keyman.min.js @@ -1 +1 @@ -Prism.languages.keyman={comment:{pattern:/\bc .*/i,greedy:!0},string:{pattern:/"[^"\r\n]*"|'[^'\r\n]*'/,greedy:!0},"virtual-key":{pattern:/\[\s*(?:(?:ALT|CAPS|CTRL|LALT|LCTRL|NCAPS|RALT|RCTRL|SHIFT)\s+)*(?:[TKU]_[\w?]+|[A-E]\d\d?|"[^"\r\n]*"|'[^'\r\n]*')\s*\]/i,greedy:!0,alias:"function"},"header-keyword":{pattern:/&\w+/,alias:"bold"},"header-statement":{pattern:/\b(?:bitmap|bitmaps|caps always off|caps on only|copyright|hotkey|language|layout|message|name|shift frees caps|version)\b/i,alias:"bold"},"rule-keyword":{pattern:/\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|reset|return|save|set|store|use)\b/i,alias:"keyword"},"structural-keyword":{pattern:/\b(?:ansi|begin|group|match|nomatch|unicode|using keys)\b/i,alias:"keyword"},"compile-target":{pattern:/\$(?:keyman|keymanonly|keymanweb|kmfl|weaver):/i,alias:"property"},number:/\b(?:U\+[\dA-F]+|d\d+|x[\da-f]+|\d+)\b/i,operator:/[+>\\$]|\.\./,punctuation:/[()=,]/}; \ No newline at end of file +Prism.languages.keyman={comment:{pattern:/\bc .*/i,greedy:!0},string:{pattern:/"[^"\r\n]*"|'[^'\r\n]*'/,greedy:!0},"virtual-key":{pattern:/\[\s*(?:(?:ALT|CAPS|CTRL|LALT|LCTRL|NCAPS|RALT|RCTRL|SHIFT)\s+)*(?:[TKU]_[\w?]+|[A-E]\d\d?|"[^"\r\n]*"|'[^'\r\n]*')\s*\]/i,greedy:!0,alias:"function"},"header-keyword":{pattern:/&\w+/,alias:"bold"},"header-statement":{pattern:/\b(?:bitmap|bitmaps|caps always off|caps on only|copyright|hotkey|language|layout|message|name|shift frees caps|version)\b/i,alias:"bold"},"rule-keyword":{pattern:/\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|reset|return|save|set|store|use)\b/i,alias:"keyword"},"structural-keyword":{pattern:/\b(?:ansi|begin|group|match|newcontext|nomatch|postkeystroke|readonly|unicode|using keys)\b/i,alias:"keyword"},"compile-target":{pattern:/\$(?:keyman|keymanonly|keymanweb|kmfl|weaver):/i,alias:"property"},number:/\b(?:U\+[\dA-F]+|d\d+|x[\da-f]+|\d+)\b/i,operator:/[+>\\$]|\.\./,punctuation:/[()=,]/}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-latte.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-latte.min.js index 5f19298508..3d86f031f0 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-latte.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-latte.min.js @@ -1 +1 @@ -!function(t){t.languages.latte={comment:/^\{\*[\s\S]*/,"latte-tag":{pattern:/(^\{(?:\/(?=[a-z]))?)(?:[=_]|[a-z]\w*\b(?!\())/i,lookbehind:!0,alias:"important"},delimiter:{pattern:/^\{\/?|\}$/,alias:"punctuation"},php:{pattern:/\S(?:[\s\S]*\S)?/,alias:"language-php",inside:t.languages.php}};var e=t.languages.extend("markup",{});t.languages.insertBefore("inside","attr-value",{"n-attr":{pattern:/n:[\w-]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+))?/,inside:{"attr-name":{pattern:/^[^\s=]+/,alias:"important"},"attr-value":{pattern:/=[\s\S]+/,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}],php:{pattern:/\S(?:[\s\S]*\S)?/,inside:t.languages.php}}}}}},e.tag),t.hooks.add("before-tokenize",function(a){if("latte"===a.language){t.languages["markup-templating"].buildPlaceholders(a,"latte",/\{\*[\s\S]*?\*\}|\{[^'"\s{}*](?:[^"'/{}]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|\/\*(?:[^*]|\*(?!\/))*\*\/)*\}/g),a.grammar=e}}),t.hooks.add("after-tokenize",function(a){t.languages["markup-templating"].tokenizePlaceholders(a,"latte")})}(Prism); \ No newline at end of file +!function(a){a.languages.latte={comment:/^\{\*[\s\S]*/,"latte-tag":{pattern:/(^\{(?:\/(?=[a-z]))?)(?:[=_]|[a-z]\w*\b(?!\())/i,lookbehind:!0,alias:"important"},delimiter:{pattern:/^\{\/?|\}$/,alias:"punctuation"},php:{pattern:/\S(?:[\s\S]*\S)?/,alias:"language-php",inside:a.languages.php}};var t=a.languages.extend("markup",{});a.languages.insertBefore("inside","attr-value",{"n-attr":{pattern:/n:[\w-]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+))?/,inside:{"attr-name":{pattern:/^[^\s=]+/,alias:"important"},"attr-value":{pattern:/=[\s\S]+/,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}],php:{pattern:/\S(?:[\s\S]*\S)?/,inside:a.languages.php}}}}}},t.tag),a.hooks.add("before-tokenize",(function(e){"latte"===e.language&&(a.languages["markup-templating"].buildPlaceholders(e,"latte",/\{\*[\s\S]*?\*\}|\{[^'"\s{}*](?:[^"'/{}]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|\/\*(?:[^*]|\*(?!\/))*\*\/)*\}/g),e.grammar=t)})),a.hooks.add("after-tokenize",(function(t){a.languages["markup-templating"].tokenizePlaceholders(t,"latte")}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-lilypond.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-lilypond.min.js index 49ce96e9a4..0ca11e5b64 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-lilypond.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-lilypond.min.js @@ -1 +1 @@ -!function(e){for(var n='\\((?:[^();"#\\\\]|\\\\[^]|;.*(?!.)|"(?:[^"\\\\]|\\\\.)*"|#(?:\\{(?:(?!#\\})[^])*#\\}|[^{])|)*\\)',i=0;i<5;i++)n=n.replace(//g,function(){return n});n=n.replace(//g,"[^\\s\\S]");var d=e.languages.lilypond={comment:/%(?:(?!\{).*|\{[\s\S]*?%\})/,"embedded-scheme":{pattern:RegExp('(^|[=\\s])#(?:"(?:[^"\\\\]|\\\\.)*"|[^\\s()"]*(?:[^\\s()]|))'.replace(//g,function(){return n}),"m"),lookbehind:!0,greedy:!0,inside:{scheme:{pattern:/^(#)[\s\S]+$/,lookbehind:!0,alias:"language-scheme",inside:{"embedded-lilypond":{pattern:/#\{[\s\S]*?#\}/,greedy:!0,inside:{punctuation:/^#\{|#\}$/,lilypond:{pattern:/[\s\S]+/,alias:"language-lilypond",inside:null}}},rest:e.languages.scheme}},punctuation:/#/}},string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},"class-name":{pattern:/(\\new\s+)[\w-]+/,lookbehind:!0},keyword:{pattern:/\\[a-z][-\w]*/i,inside:{punctuation:/^\\/}},operator:/[=|]|<<|>>/,punctuation:{pattern:/(^|[a-z\d])(?:'+|,+|[_^]?-[_^]?(?:[-+^!>._]|(?=\d))|[_^]\.?|[.!])|[{}()[\]<>^~]|\\[()[\]<>\\!]|--|__/,lookbehind:!0},number:/\b\d+(?:\/\d+)?\b/};d["embedded-scheme"].inside.scheme.inside["embedded-lilypond"].inside.lilypond.inside=d,e.languages.ly=d}(Prism); \ No newline at end of file +!function(e){for(var n='\\((?:[^();"#\\\\]|\\\\[^]|;.*(?!.)|"(?:[^"\\\\]|\\\\.)*"|#(?:\\{(?:(?!#\\})[^])*#\\}|[^{])|)*\\)',i=0;i<5;i++)n=n.replace(//g,(function(){return n}));n=n.replace(//g,"[^\\s\\S]");var d=e.languages.lilypond={comment:/%(?:(?!\{).*|\{[\s\S]*?%\})/,"embedded-scheme":{pattern:RegExp('(^|[=\\s])#(?:"(?:[^"\\\\]|\\\\.)*"|[^\\s()"]*(?:[^\\s()]|))'.replace(//g,(function(){return n})),"m"),lookbehind:!0,greedy:!0,inside:{scheme:{pattern:/^(#)[\s\S]+$/,lookbehind:!0,alias:"language-scheme",inside:{"embedded-lilypond":{pattern:/#\{[\s\S]*?#\}/,greedy:!0,inside:{punctuation:/^#\{|#\}$/,lilypond:{pattern:/[\s\S]+/,alias:"language-lilypond",inside:null}}},rest:e.languages.scheme}},punctuation:/#/}},string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},"class-name":{pattern:/(\\new\s+)[\w-]+/,lookbehind:!0},keyword:{pattern:/\\[a-z][-\w]*/i,inside:{punctuation:/^\\/}},operator:/[=|]|<<|>>/,punctuation:{pattern:/(^|[a-z\d])(?:'+|,+|[_^]?-[_^]?(?:[-+^!>._]|(?=\d))|[_^]\.?|[.!])|[{}()[\]<>^~]|\\[()[\]<>\\!]|--|__/,lookbehind:!0},number:/\b\d+(?:\/\d+)?\b/};d["embedded-scheme"].inside.scheme.inside["embedded-lilypond"].inside.lilypond.inside=d,e.languages.ly=d}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-linker-script.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-linker-script.js new file mode 100644 index 0000000000..7a0b5619c3 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-linker-script.js @@ -0,0 +1,30 @@ +Prism.languages['linker-script'] = { + 'comment': { + pattern: /(^|\s)\/\*[\s\S]*?(?:$|\*\/)/, + lookbehind: true, + greedy: true + }, + 'identifier': { + pattern: /"[^"\r\n]*"/, + greedy: true + }, + + 'location-counter': { + pattern: /\B\.\B/, + alias: 'important' + }, + + 'section': { + pattern: /(^|[^\w*])\.\w+\b/, + lookbehind: true, + alias: 'keyword' + }, + 'function': /\b[A-Z][A-Z_]*(?=\s*\()/, + + 'number': /\b(?:0[xX][a-fA-F0-9]+|\d+)[KM]?\b/, + + 'operator': />>=?|<<=?|->|\+\+|--|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?/, + 'punctuation': /[(){},;]/ +}; + +Prism.languages['ld'] = Prism.languages['linker-script']; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-linker-script.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-linker-script.min.js new file mode 100644 index 0000000000..1cf2981243 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-linker-script.min.js @@ -0,0 +1 @@ +Prism.languages["linker-script"]={comment:{pattern:/(^|\s)\/\*[\s\S]*?(?:$|\*\/)/,lookbehind:!0,greedy:!0},identifier:{pattern:/"[^"\r\n]*"/,greedy:!0},"location-counter":{pattern:/\B\.\B/,alias:"important"},section:{pattern:/(^|[^\w*])\.\w+\b/,lookbehind:!0,alias:"keyword"},function:/\b[A-Z][A-Z_]*(?=\s*\()/,number:/\b(?:0[xX][a-fA-F0-9]+|\d+)[KM]?\b/,operator:/>>=?|<<=?|->|\+\+|--|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?/,punctuation:/[(){},;]/},Prism.languages.ld=Prism.languages["linker-script"]; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-liquid.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-liquid.min.js index a405414fac..9829caedf7 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-liquid.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-liquid.min.js @@ -1 +1 @@ -Prism.languages.liquid={comment:{pattern:/(^\{%\s*comment\s*%\})[\s\S]+(?=\{%\s*endcomment\s*%\}$)/,lookbehind:!0},delimiter:{pattern:/^\{(?:\{\{|[%\{])-?|-?(?:\}\}|[%\}])\}$/,alias:"punctuation"},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},keyword:/\b(?:as|assign|break|(?:end)?(?:capture|case|comment|for|form|if|paginate|raw|style|tablerow|unless)|continue|cycle|decrement|echo|else|elsif|in|include|increment|limit|liquid|offset|range|render|reversed|section|when|with)\b/,object:/\b(?:address|all_country_option_tags|article|block|blog|cart|checkout|collection|color|country|country_option_tags|currency|current_page|current_tags|customer|customer_address|date|discount_allocation|discount_application|external_video|filter|filter_value|font|forloop|fulfillment|generic_file|gift_card|group|handle|image|line_item|link|linklist|localization|location|measurement|media|metafield|model|model_source|order|page|page_description|page_image|page_title|part|policy|product|product_option|recommendations|request|robots|routes|rule|script|search|selling_plan|selling_plan_allocation|selling_plan_group|shipping_method|shop|shop_locale|sitemap|store_availability|tax_line|template|theme|transaction|unit_price_measurement|user_agent|variant|video|video_source)\b/,function:[{pattern:/(\|\s*)\w+/,lookbehind:!0,alias:"filter"},{pattern:/(\.\s*)(?:first|last|size)/,lookbehind:!0}],boolean:/\b(?:false|nil|true)\b/,range:{pattern:/\.\./,alias:"operator"},number:/\b\d+(?:\.\d+)?\b/,operator:/[!=]=|<>|[<>]=?|[|?:=-]|\b(?:and|contains(?=\s)|or)\b/,punctuation:/[.,\[\]()]/,empty:{pattern:/\bempty\b/,alias:"keyword"}},Prism.hooks.add("before-tokenize",function(e){var i=!1;Prism.languages["markup-templating"].buildPlaceholders(e,"liquid",/\{%\s*comment\s*%\}[\s\S]*?\{%\s*endcomment\s*%\}|\{(?:%[\s\S]*?%|\{\{[\s\S]*?\}\}|\{[\s\S]*?\})\}/g,function(e){var t=/^\{%-?\s*(\w+)/.exec(e);if(t){var n=t[1];if("raw"===n&&!i)return i=!0;if("endraw"===n)return!(i=!1)}return!i})}),Prism.hooks.add("after-tokenize",function(e){Prism.languages["markup-templating"].tokenizePlaceholders(e,"liquid")}); \ No newline at end of file +Prism.languages.liquid={comment:{pattern:/(^\{%\s*comment\s*%\})[\s\S]+(?=\{%\s*endcomment\s*%\}$)/,lookbehind:!0},delimiter:{pattern:/^\{(?:\{\{|[%\{])-?|-?(?:\}\}|[%\}])\}$/,alias:"punctuation"},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},keyword:/\b(?:as|assign|break|(?:end)?(?:capture|case|comment|for|form|if|paginate|raw|style|tablerow|unless)|continue|cycle|decrement|echo|else|elsif|in|include|increment|limit|liquid|offset|range|render|reversed|section|when|with)\b/,object:/\b(?:address|all_country_option_tags|article|block|blog|cart|checkout|collection|color|country|country_option_tags|currency|current_page|current_tags|customer|customer_address|date|discount_allocation|discount_application|external_video|filter|filter_value|font|forloop|fulfillment|generic_file|gift_card|group|handle|image|line_item|link|linklist|localization|location|measurement|media|metafield|model|model_source|order|page|page_description|page_image|page_title|part|policy|product|product_option|recommendations|request|robots|routes|rule|script|search|selling_plan|selling_plan_allocation|selling_plan_group|shipping_method|shop|shop_locale|sitemap|store_availability|tax_line|template|theme|transaction|unit_price_measurement|user_agent|variant|video|video_source)\b/,function:[{pattern:/(\|\s*)\w+/,lookbehind:!0,alias:"filter"},{pattern:/(\.\s*)(?:first|last|size)/,lookbehind:!0}],boolean:/\b(?:false|nil|true)\b/,range:{pattern:/\.\./,alias:"operator"},number:/\b\d+(?:\.\d+)?\b/,operator:/[!=]=|<>|[<>]=?|[|?:=-]|\b(?:and|contains(?=\s)|or)\b/,punctuation:/[.,\[\]()]/,empty:{pattern:/\bempty\b/,alias:"keyword"}},Prism.hooks.add("before-tokenize",(function(e){var t=!1;Prism.languages["markup-templating"].buildPlaceholders(e,"liquid",/\{%\s*comment\s*%\}[\s\S]*?\{%\s*endcomment\s*%\}|\{(?:%[\s\S]*?%|\{\{[\s\S]*?\}\}|\{[\s\S]*?\})\}/g,(function(e){var n=/^\{%-?\s*(\w+)/.exec(e);if(n){var i=n[1];if("raw"===i&&!t)return t=!0,!0;if("endraw"===i)return t=!1,!0}return!t}))})),Prism.hooks.add("after-tokenize",(function(e){Prism.languages["markup-templating"].tokenizePlaceholders(e,"liquid")})); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-lisp.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-lisp.min.js index 4ee5290b13..66f74bdce3 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-lisp.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-lisp.min.js @@ -1 +1 @@ -!function(e){function n(e){return RegExp("(\\()(?:"+e+")(?=[\\s\\)])")}function a(e){return RegExp("([\\s([])(?:"+e+")(?=[\\s)])")}var t="(?!\\d)[-+*/~!@$%^=<>{}\\w]+",r="(\\()",i="(?=\\s)",s="(?:[^()]|\\((?:[^()]|\\((?:[^()]|\\((?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))*\\))*\\))*\\))*",l={heading:{pattern:/;;;.*/,alias:["comment","title"]},comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0,inside:{argument:/[-A-Z]+(?=[.,\s])/,symbol:RegExp("`"+t+"'")}},"quoted-symbol":{pattern:RegExp("#?'"+t),alias:["variable","symbol"]},"lisp-property":{pattern:RegExp(":"+t),alias:"property"},splice:{pattern:RegExp(",@?"+t),alias:["symbol","variable"]},keyword:[{pattern:RegExp(r+"(?:and|(?:cl-)?letf|cl-loop|cond|cons|error|if|(?:lexical-)?let\\*?|message|not|null|or|provide|require|setq|unless|use-package|when|while)"+i),lookbehind:!0},{pattern:RegExp(r+"(?:append|by|collect|concat|do|finally|for|in|return)"+i),lookbehind:!0}],declare:{pattern:n("declare"),lookbehind:!0,alias:"keyword"},interactive:{pattern:n("interactive"),lookbehind:!0,alias:"keyword"},boolean:{pattern:a("nil|t"),lookbehind:!0},number:{pattern:a("[-+]?\\d+(?:\\.\\d*)?"),lookbehind:!0},defvar:{pattern:RegExp(r+"def(?:const|custom|group|var)\\s+"+t),lookbehind:!0,inside:{keyword:/^def[a-z]+/,variable:RegExp(t)}},defun:{pattern:RegExp(r+"(?:cl-)?(?:defmacro|defun\\*?)\\s+"+t+"\\s+\\("+s+"\\)"),lookbehind:!0,greedy:!0,inside:{keyword:/^(?:cl-)?def\S+/,arguments:null,function:{pattern:RegExp("(^\\s)"+t),lookbehind:!0},punctuation:/[()]/}},lambda:{pattern:RegExp(r+"lambda\\s+\\(\\s*(?:&?"+t+"(?:\\s+&?"+t+")*\\s*)?\\)"),lookbehind:!0,greedy:!0,inside:{keyword:/^lambda/,arguments:null,punctuation:/[()]/}},car:{pattern:RegExp(r+t),lookbehind:!0},punctuation:[/(?:['`,]?\(|[)\[\]])/,{pattern:/(\s)\.(?=\s)/,lookbehind:!0}]},o={"lisp-marker":RegExp("&(?!\\d)[-+*/~!@$%^=<>{}\\w]+"),varform:{pattern:RegExp("\\("+t+"\\s+(?=\\S)"+s+"\\)"),inside:l},argument:{pattern:RegExp("(^|[\\s(])"+t),lookbehind:!0,alias:"variable"},rest:l},p="\\S+(?:\\s+\\S+)*",d={pattern:RegExp(r+s+"(?=\\))"),lookbehind:!0,inside:{"rest-vars":{pattern:RegExp("&(?:body|rest)\\s+"+p),inside:o},"other-marker-vars":{pattern:RegExp("&(?:aux|optional)\\s+"+p),inside:o},keys:{pattern:RegExp("&key\\s+"+p+"(?:\\s+&allow-other-keys)?"),inside:o},argument:{pattern:RegExp(t),alias:"variable"},punctuation:/[()]/}};l.lambda.inside.arguments=d,l.defun.inside.arguments=e.util.clone(d),l.defun.inside.arguments.inside.sublist=d,e.languages.lisp=l,e.languages.elisp=l,e.languages.emacs=l,e.languages["emacs-lisp"]=l}(Prism); \ No newline at end of file +!function(e){function n(e){return RegExp("(\\()(?:"+e+")(?=[\\s\\)])")}function a(e){return RegExp("([\\s([])(?:"+e+")(?=[\\s)])")}var t="(?!\\d)[-+*/~!@$%^=<>{}\\w]+",r="(\\()",i="(?:[^()]|\\((?:[^()]|\\((?:[^()]|\\((?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))*\\))*\\))*\\))*",s={heading:{pattern:/;;;.*/,alias:["comment","title"]},comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0,inside:{argument:/[-A-Z]+(?=[.,\s])/,symbol:RegExp("`"+t+"'")}},"quoted-symbol":{pattern:RegExp("#?'"+t),alias:["variable","symbol"]},"lisp-property":{pattern:RegExp(":"+t),alias:"property"},splice:{pattern:RegExp(",@?"+t),alias:["symbol","variable"]},keyword:[{pattern:RegExp("(\\()(?:and|(?:cl-)?letf|cl-loop|cond|cons|error|if|(?:lexical-)?let\\*?|message|not|null|or|provide|require|setq|unless|use-package|when|while)(?=\\s)"),lookbehind:!0},{pattern:RegExp("(\\()(?:append|by|collect|concat|do|finally|for|in|return)(?=\\s)"),lookbehind:!0}],declare:{pattern:n("declare"),lookbehind:!0,alias:"keyword"},interactive:{pattern:n("interactive"),lookbehind:!0,alias:"keyword"},boolean:{pattern:a("nil|t"),lookbehind:!0},number:{pattern:a("[-+]?\\d+(?:\\.\\d*)?"),lookbehind:!0},defvar:{pattern:RegExp("(\\()def(?:const|custom|group|var)\\s+"+t),lookbehind:!0,inside:{keyword:/^def[a-z]+/,variable:RegExp(t)}},defun:{pattern:RegExp("(\\()(?:cl-)?(?:defmacro|defun\\*?)\\s+"+t+"\\s+\\("+i+"\\)"),lookbehind:!0,greedy:!0,inside:{keyword:/^(?:cl-)?def\S+/,arguments:null,function:{pattern:RegExp("(^\\s)"+t),lookbehind:!0},punctuation:/[()]/}},lambda:{pattern:RegExp("(\\()lambda\\s+\\(\\s*(?:&?"+t+"(?:\\s+&?"+t+")*\\s*)?\\)"),lookbehind:!0,greedy:!0,inside:{keyword:/^lambda/,arguments:null,punctuation:/[()]/}},car:{pattern:RegExp(r+t),lookbehind:!0},punctuation:[/(?:['`,]?\(|[)\[\]])/,{pattern:/(\s)\.(?=\s)/,lookbehind:!0}]},l={"lisp-marker":RegExp("&(?!\\d)[-+*/~!@$%^=<>{}\\w]+"),varform:{pattern:RegExp("\\("+t+"\\s+(?=\\S)"+i+"\\)"),inside:s},argument:{pattern:RegExp("(^|[\\s(])"+t),lookbehind:!0,alias:"variable"},rest:s},o="\\S+(?:\\s+\\S+)*",p={pattern:RegExp(r+i+"(?=\\))"),lookbehind:!0,inside:{"rest-vars":{pattern:RegExp("&(?:body|rest)\\s+"+o),inside:l},"other-marker-vars":{pattern:RegExp("&(?:aux|optional)\\s+"+o),inside:l},keys:{pattern:RegExp("&key\\s+"+o+"(?:\\s+&allow-other-keys)?"),inside:l},argument:{pattern:RegExp(t),alias:"variable"},punctuation:/[()]/}};s.lambda.inside.arguments=p,s.defun.inside.arguments=e.util.clone(p),s.defun.inside.arguments.inside.sublist=p,e.languages.lisp=s,e.languages.elisp=s,e.languages.emacs=s,e.languages["emacs-lisp"]=s}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-llvm.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-llvm.min.js index 7e178801b5..9088cbd53c 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-llvm.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-llvm.min.js @@ -1 +1 @@ -Prism.languages.llvm={comment:/;.*/,string:{pattern:/"[^"]*"/,greedy:!0},boolean:/\b(?:false|true)\b/,variable:/[%@!#](?:(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+|\d+)/i,label:/(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+:/i,type:{pattern:/\b(?:double|float|fp128|half|i[1-9]\d*|label|metadata|ppc_fp128|token|void|x86_fp80|x86_mmx)\b/,alias:"class-name"},keyword:/\b[a-z_][a-z_0-9]*\b/,number:/[+-]?\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-Fa-f]+\b|\b0xK[\dA-Fa-f]{20}\b|\b0x[ML][\dA-Fa-f]{32}\b|\b0xH[\dA-Fa-f]{4}\b/,punctuation:/[{}[\];(),.!*=<>]/}; \ No newline at end of file +!function(a){a.languages.llvm={comment:/;.*/,string:{pattern:/"[^"]*"/,greedy:!0},boolean:/\b(?:false|true)\b/,variable:/[%@!#](?:(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+|\d+)/i,label:/(?!\d)(?:[-$.\w]|\\[a-f\d]{2})+:/i,type:{pattern:/\b(?:double|float|fp128|half|i[1-9]\d*|label|metadata|ppc_fp128|token|void|x86_fp80|x86_mmx)\b/,alias:"class-name"},keyword:/\b[a-z_][a-z_0-9]*\b/,number:/[+-]?\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-Fa-f]+\b|\b0xK[\dA-Fa-f]{20}\b|\b0x[ML][\dA-Fa-f]{32}\b|\b0xH[\dA-Fa-f]{4}\b/,punctuation:/[{}[\];(),.!*=<>]/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markdown.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markdown.min.js index cc9f7b28da..2b16ba515f 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markdown.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markdown.min.js @@ -1 +1 @@ -!function(s){function n(n){return n=n.replace(//g,function(){return"(?:\\\\.|[^\\\\\n\r]|(?:\n|\r\n?)(?![\r\n]))"}),RegExp("((?:^|[^\\\\])(?:\\\\{2})*)(?:"+n+")")}var e="(?:\\\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\\\|\r\n`])+",t="\\|?__(?:\\|__)+\\|?(?:(?:\n|\r\n?)|(?![^]))".replace(/__/g,function(){return e}),a="\\|?[ \t]*:?-{3,}:?[ \t]*(?:\\|[ \t]*:?-{3,}:?[ \t]*)+\\|?(?:\n|\r\n?)";s.languages.markdown=s.languages.extend("markup",{}),s.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:s.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+t+a+"(?:"+t+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+t+a+")(?:"+t+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(e),inside:s.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+t+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+t+"$"),inside:{"table-header":{pattern:RegExp(e),alias:"important",inside:s.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n("\\b__(?:(?!_)|_(?:(?!_))+_)+__\\b|\\*\\*(?:(?!\\*)|\\*(?:(?!\\*))+\\*)+\\*\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n("\\b_(?:(?!_)|__(?:(?!_))+__)+_\\b|\\*(?:(?!\\*)|\\*\\*(?:(?!\\*))+\\*\\*)+\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n("(~~?)(?:(?!~))+\\2"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n('!?\\[(?:(?!\\]))+\\](?:\\([^\\s)]+(?:[\t ]+"(?:\\\\.|[^"\\\\])*")?\\)|[ \t]?\\[(?:(?!\\]))+\\])'),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(e){["url","bold","italic","strike","code-snippet"].forEach(function(n){e!==n&&(s.languages.markdown[e].inside.content.inside[n]=s.languages.markdown[n])})}),s.hooks.add("after-tokenize",function(n){"markdown"!==n.language&&"md"!==n.language||!function n(e){if(e&&"string"!=typeof e)for(var t=0,a=e.length;t",quot:'"'},u=String.fromCodePoint||String.fromCharCode;s.languages.md=s.languages.markdown}(Prism); \ No newline at end of file +!function(n){function e(n){return n=n.replace(//g,(function(){return"(?:\\\\.|[^\\\\\n\r]|(?:\n|\r\n?)(?![\r\n]))"})),RegExp("((?:^|[^\\\\])(?:\\\\{2})*)(?:"+n+")")}var t="(?:\\\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\\\|\r\n`])+",a="\\|?__(?:\\|__)+\\|?(?:(?:\n|\r\n?)|(?![^]))".replace(/__/g,(function(){return t})),i="\\|?[ \t]*:?-{3,}:?[ \t]*(?:\\|[ \t]*:?-{3,}:?[ \t]*)+\\|?(?:\n|\r\n?)";n.languages.markdown=n.languages.extend("markup",{}),n.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:n.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+i+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+i+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(t),inside:n.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(t),alias:"important",inside:n.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:e("\\b__(?:(?!_)|_(?:(?!_))+_)+__\\b|\\*\\*(?:(?!\\*)|\\*(?:(?!\\*))+\\*)+\\*\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:e("\\b_(?:(?!_)|__(?:(?!_))+__)+_\\b|\\*(?:(?!\\*)|\\*\\*(?:(?!\\*))+\\*\\*)+\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:e("(~~?)(?:(?!~))+\\2"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:e('!?\\[(?:(?!\\]))+\\](?:\\([^\\s)]+(?:[\t ]+"(?:\\\\.|[^"\\\\])*")?\\)|[ \t]?\\[(?:(?!\\]))+\\])'),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(e){["url","bold","italic","strike","code-snippet"].forEach((function(t){e!==t&&(n.languages.markdown[e].inside.content.inside[t]=n.languages.markdown[t])}))})),n.hooks.add("after-tokenize",(function(n){"markdown"!==n.language&&"md"!==n.language||function n(e){if(e&&"string"!=typeof e)for(var t=0,a=e.length;t",quot:'"'},l=String.fromCodePoint||String.fromCharCode;n.languages.md=n.languages.markdown}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markup-templating.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markup-templating.min.js index eaf10acfa7..3a171d0431 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markup-templating.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markup-templating.min.js @@ -1 +1 @@ -!function(h){function v(e,n){return"___"+e.toUpperCase()+n+"___"}Object.defineProperties(h.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,r,e,o){if(a.language===r){var c=a.tokenStack=[];a.code=a.code.replace(e,function(e){if("function"==typeof o&&!o(e))return e;for(var n,t=c.length;-1!==a.code.indexOf(n=v(r,t));)++t;return c[t]=e,n}),a.grammar=h.languages.markup}}},tokenizePlaceholders:{value:function(p,k){if(p.language===k&&p.tokenStack){p.grammar=h.languages[k];var m=0,d=Object.keys(p.tokenStack);!function e(n){for(var t=0;t=d.length);t++){var a=n[t];if("string"==typeof a||a.content&&"string"==typeof a.content){var r=d[m],o=p.tokenStack[r],c="string"==typeof a?a:a.content,i=v(k,r),u=c.indexOf(i);if(-1=o.length);u++){var g=i[u];if("string"==typeof g||g.content&&"string"==typeof g.content){var l=o[r],s=t.tokenStack[l],f="string"==typeof g?g:g.content,p=n(a,l),k=f.indexOf(p);if(k>-1){++r;var m=f.substring(0,k),d=new e.Token(a,e.tokenize(s,t.grammar),"language-"+a,s),h=f.substring(k+p.length),v=[];m&&v.push.apply(v,c([m])),v.push(d),h&&v.push.apply(v,c([h])),"string"==typeof g?i.splice.apply(i,[u,1].concat(v)):g.content=v}}else g.content&&c(g.content)}return i}(t.tokens)}}}})}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markup.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markup.min.js index 738b2decd8..ee4b23ac66 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markup.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-markup.min.js @@ -1 +1 @@ -Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; \ No newline at end of file +Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,(function(){return a})),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mata.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mata.js new file mode 100644 index 0000000000..6a38e1728c --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mata.js @@ -0,0 +1,50 @@ +// https://www.stata.com/manuals/m.pdf + +(function (Prism) { + + var orgType = /\b(?:(?:col|row)?vector|matrix|scalar)\b/.source; + var type = /\bvoid\b||\b(?:complex|numeric|pointer(?:\s*\([^()]*\))?|real|string|(?:class|struct)\s+\w+|transmorphic)(?:\s*)?/.source + .replace(//g, orgType); + + Prism.languages.mata = { + 'comment': { + pattern: /\/\/.*|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\//, + greedy: true + }, + 'string': { + pattern: /"[^"\r\n]*"|[‘`']".*?"[’`']/, + greedy: true + }, + + 'class-name': { + pattern: /(\b(?:class|extends|struct)\s+)\w+(?=\s*(?:\{|\bextends\b))/, + lookbehind: true + }, + 'type': { + pattern: RegExp(type), + alias: 'class-name', + inside: { + 'punctuation': /[()]/, + 'keyword': /\b(?:class|function|struct|void)\b/ + } + }, + 'keyword': /\b(?:break|class|continue|do|else|end|extends|external|final|for|function|goto|if|pragma|private|protected|public|return|static|struct|unset|unused|version|virtual|while)\b/, + 'constant': /\bNULL\b/, + + 'number': { + pattern: /(^|[^\w.])(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|\d[a-f0-9]*(?:\.[a-f0-9]+)?x[+-]?\d+)i?(?![\w.])/i, + lookbehind: true + }, + 'missing': { + pattern: /(^|[^\w.])(?:\.[a-z]?)(?![\w.])/, + lookbehind: true, + alias: 'symbol' + }, + + 'function': /\b[a-z_]\w*(?=\s*\()/i, + + 'operator': /\.\.|\+\+|--|&&|\|\||:?(?:[!=<>]=|[+\-*/^<>&|:])|[!?=\\#’`']/, + 'punctuation': /[()[\]{},;.]/ + }; + +}(Prism)); diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mata.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mata.min.js new file mode 100644 index 0000000000..09fc0a7c67 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mata.min.js @@ -0,0 +1 @@ +!function(t){var e="\\bvoid\\b||\\b(?:complex|numeric|pointer(?:\\s*\\([^()]*\\))?|real|string|(?:class|struct)\\s+\\w+|transmorphic)(?:\\s*)?".replace(//g,"\\b(?:(?:col|row)?vector|matrix|scalar)\\b");t.languages.mata={comment:{pattern:/\/\/.*|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\//,greedy:!0},string:{pattern:/"[^"\r\n]*"|[‘`']".*?"[’`']/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|struct)\s+)\w+(?=\s*(?:\{|\bextends\b))/,lookbehind:!0},type:{pattern:RegExp(e),alias:"class-name",inside:{punctuation:/[()]/,keyword:/\b(?:class|function|struct|void)\b/}},keyword:/\b(?:break|class|continue|do|else|end|extends|external|final|for|function|goto|if|pragma|private|protected|public|return|static|struct|unset|unused|version|virtual|while)\b/,constant:/\bNULL\b/,number:{pattern:/(^|[^\w.])(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|\d[a-f0-9]*(?:\.[a-f0-9]+)?x[+-]?\d+)i?(?![\w.])/i,lookbehind:!0},missing:{pattern:/(^|[^\w.])(?:\.[a-z]?)(?![\w.])/,lookbehind:!0,alias:"symbol"},function:/\b[a-z_]\w*(?=\s*\()/i,operator:/\.\.|\+\+|--|&&|\|\||:?(?:[!=<>]=|[+\-*/^<>&|:])|[!?=\\#’`']/,punctuation:/[()[\]{},;.]/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-maxscript.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-maxscript.min.js index 910dcb0845..ea4b35af79 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-maxscript.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-maxscript.min.js @@ -1 +1 @@ -!function(t){var e=/\b(?:about|and|animate|as|at|attributes|by|case|catch|collect|continue|coordsys|do|else|exit|fn|for|from|function|global|if|in|local|macroscript|mapped|max|not|of|off|on|or|parameters|persistent|plugin|rcmenu|return|rollout|set|struct|then|throw|to|tool|try|undo|utility|when|where|while|with)\b/i;Prism.languages.maxscript={comment:{pattern:/\/\*[\s\S]*?(?:\*\/|$)|--.*/,greedy:!0},string:{pattern:/(^|[^"\\@])(?:"(?:[^"\\]|\\[\s\S])*"|@"[^"]*")/,lookbehind:!0,greedy:!0},path:{pattern:/\$(?:[\w/\\.*?]|'[^']*')*/,greedy:!0,alias:"string"},"function-call":{pattern:RegExp("((?:^|[;=<>+\\-*/^({\\[]|\\b(?:and|by|case|catch|collect|do|else|if|in|not|or|return|then|to|try|where|while|with)\\b)[ \t]*)(?!"+e.source+")[a-z_]\\w*\\b(?=[ \t]*(?:(?!"+e.source+")[a-z_]|\\d|-\\.?\\d|[({'\"$@#?]))","im"),lookbehind:!0,greedy:!0,alias:"function"},"function-definition":{pattern:/(\b(?:fn|function)\s+)\w+\b/i,lookbehind:!0,alias:"function"},argument:{pattern:/\b[a-z_]\w*(?=:)/i,alias:"attr-name"},keyword:e,boolean:/\b(?:false|true)\b/,time:{pattern:/(^|[^\w.])(?:(?:(?:\d+(?:\.\d*)?|\.\d+)(?:[eEdD][+-]\d+|[LP])?[msft])+|\d+:\d+(?:\.\d*)?)(?![\w.:])/,lookbehind:!0,alias:"number"},number:[{pattern:/(^|[^\w.])(?:(?:\d+(?:\.\d*)?|\.\d+)(?:[eEdD][+-]\d+|[LP])?|0x[a-fA-F0-9]+)(?![\w.:])/,lookbehind:!0},/\b(?:e|pi)\b/],constant:/\b(?:dontcollect|ok|silentValue|undefined|unsupplied)\b/,color:{pattern:/\b(?:black|blue|brown|gray|green|orange|red|white|yellow)\b/i,alias:"constant"},operator:/[-+*/<>=!]=?|[&^?]|#(?!\()/,punctuation:/[()\[\]{}.:,;]|#(?=\()|\\$/m}}(); \ No newline at end of file +!function(t){var e=/\b(?:about|and|animate|as|at|attributes|by|case|catch|collect|continue|coordsys|do|else|exit|fn|for|from|function|global|if|in|local|macroscript|mapped|max|not|of|off|on|or|parameters|persistent|plugin|rcmenu|return|rollout|set|struct|then|throw|to|tool|try|undo|utility|when|where|while|with)\b/i;t.languages.maxscript={comment:{pattern:/\/\*[\s\S]*?(?:\*\/|$)|--.*/,greedy:!0},string:{pattern:/(^|[^"\\@])(?:"(?:[^"\\]|\\[\s\S])*"|@"[^"]*")/,lookbehind:!0,greedy:!0},path:{pattern:/\$(?:[\w/\\.*?]|'[^']*')*/,greedy:!0,alias:"string"},"function-call":{pattern:RegExp("((?:^|[;=<>+\\-*/^({\\[]|\\b(?:and|by|case|catch|collect|do|else|if|in|not|or|return|then|to|try|where|while|with)\\b)[ \t]*)(?!"+e.source+")[a-z_]\\w*\\b(?=[ \t]*(?:(?!"+e.source+")[a-z_]|\\d|-\\.?\\d|[({'\"$@#?]))","im"),lookbehind:!0,greedy:!0,alias:"function"},"function-definition":{pattern:/(\b(?:fn|function)\s+)\w+\b/i,lookbehind:!0,alias:"function"},argument:{pattern:/\b[a-z_]\w*(?=:)/i,alias:"attr-name"},keyword:e,boolean:/\b(?:false|true)\b/,time:{pattern:/(^|[^\w.])(?:(?:(?:\d+(?:\.\d*)?|\.\d+)(?:[eEdD][+-]\d+|[LP])?[msft])+|\d+:\d+(?:\.\d*)?)(?![\w.:])/,lookbehind:!0,alias:"number"},number:[{pattern:/(^|[^\w.])(?:(?:\d+(?:\.\d*)?|\.\d+)(?:[eEdD][+-]\d+|[LP])?|0x[a-fA-F0-9]+)(?![\w.:])/,lookbehind:!0},/\b(?:e|pi)\b/],constant:/\b(?:dontcollect|ok|silentValue|undefined|unsupplied)\b/,color:{pattern:/\b(?:black|blue|brown|gray|green|orange|red|white|yellow)\b/i,alias:"constant"},operator:/[-+*/<>=!]=?|[&^?]|#(?!\()/,punctuation:/[()\[\]{}.:,;]|#(?=\()|\\$/m}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mel.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mel.js index 13a5947b00..d059266745 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mel.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mel.js @@ -1,15 +1,21 @@ Prism.languages.mel = { - 'comment': /\/\/.*/, + 'comment': { + pattern: /\/\/.*|\/\*[\s\S]*?\*\//, + greedy: true + }, 'code': { - pattern: /`(?:\\.|[^\\`\r\n])*`/, + pattern: /`(?:\\.|[^\\`])*`/, greedy: true, alias: 'italic', inside: { 'delimiter': { pattern: /^`|`$/, alias: 'punctuation' + }, + 'statement': { + pattern: /[\s\S]+/, + inside: null // see below } - // See rest below } }, 'string': { @@ -23,21 +29,18 @@ Prism.languages.mel = { alias: 'operator' }, 'keyword': /\b(?:break|case|continue|default|do|else|float|for|global|if|in|int|matrix|proc|return|string|switch|vector|while)\b/, - 'function': /\b\w+(?=\()|\b(?:CBG|HfAddAttractorToAS|HfAssignAS|HfBuildEqualMap|HfBuildFurFiles|HfBuildFurImages|HfCancelAFR|HfConnectASToHF|HfCreateAttractor|HfDeleteAS|HfEditAS|HfPerformCreateAS|HfRemoveAttractorFromAS|HfSelectAttached|HfSelectAttractors|HfUnAssignAS|Mayatomr|about|abs|addAttr|addAttributeEditorNodeHelp|addDynamic|addNewShelfTab|addPP|addPanelCategory|addPrefixToName|advanceToNextDrivenKey|affectedNet|affects|aimConstraint|air|alias|aliasAttr|align|alignCtx|alignCurve|alignSurface|allViewFit|ambientLight|angle|angleBetween|animCone|animCurveEditor|animDisplay|animView|annotate|appendStringArray|applicationName|applyAttrPreset|applyTake|arcLenDimContext|arcLengthDimension|arclen|arrayMapper|art3dPaintCtx|artAttrCtx|artAttrPaintVertexCtx|artAttrSkinPaintCtx|artAttrTool|artBuildPaintMenu|artFluidAttrCtx|artPuttyCtx|artSelectCtx|artSetPaintCtx|artUserPaintCtx|assignCommand|assignInputDevice|assignViewportFactories|attachCurve|attachDeviceAttr|attachSurface|attrColorSliderGrp|attrCompatibility|attrControlGrp|attrEnumOptionMenu|attrEnumOptionMenuGrp|attrFieldGrp|attrFieldSliderGrp|attrNavigationControlGrp|attrPresetEditWin|attributeExists|attributeInfo|attributeMenu|attributeQuery|autoKeyframe|autoPlace|bakeClip|bakeFluidShading|bakePartialHistory|bakeResults|bakeSimulation|basename|basenameEx|batchRender|bessel|bevel|bevelPlus|binMembership|bindSkin|blend2|blendShape|blendShapeEditor|blendShapePanel|blendTwoAttr|blindDataType|boneLattice|boundary|boxDollyCtx|boxZoomCtx|bufferCurve|buildBookmarkMenu|buildKeyframeMenu|button|buttonManip|cacheFile|cacheFileCombine|cacheFileMerge|cacheFileTrack|camera|cameraView|canCreateManip|canvas|capitalizeString|catch|catchQuiet|ceil|changeSubdivComponentDisplayLevel|changeSubdivRegion|channelBox|character|characterMap|characterOutlineEditor|characterize|chdir|checkBox|checkBoxGrp|checkDefaultRenderGlobals|choice|circle|circularFillet|clamp|clear|clearCache|clip|clipEditor|clipEditorCurrentTimeCtx|clipSchedule|clipSchedulerOutliner|clipTrimBefore|closeCurve|closeSurface|cluster|cmdFileOutput|cmdScrollFieldExecuter|cmdScrollFieldReporter|cmdShell|coarsenSubdivSelectionList|collision|color|colorAtPoint|colorEditor|colorIndex|colorIndexSliderGrp|colorSliderButtonGrp|colorSliderGrp|columnLayout|commandEcho|commandLine|commandPort|compactHairSystem|componentEditor|compositingInterop|computePolysetVolume|condition|cone|confirmDialog|connectAttr|connectControl|connectDynamic|connectJoint|connectionInfo|constrain|constrainValue|constructionHistory|container|containsMultibyte|contextInfo|control|convertFromOldLayers|convertIffToPsd|convertLightmap|convertSolidTx|convertTessellation|convertUnit|copyArray|copyFlexor|copyKey|copySkinWeights|cos|cpButton|cpCache|cpClothSet|cpCollision|cpConstraint|cpConvClothToMesh|cpForces|cpGetSolverAttr|cpPanel|cpProperty|cpRigidCollisionFilter|cpSeam|cpSetEdit|cpSetSolverAttr|cpSolver|cpSolverTypes|cpTool|cpUpdateClothUVs|createDisplayLayer|createDrawCtx|createEditor|createLayeredPsdFile|createMotionField|createNewShelf|createNode|createRenderLayer|createSubdivRegion|cross|crossProduct|ctxAbort|ctxCompletion|ctxEditMode|ctxTraverse|currentCtx|currentTime|currentTimeCtx|currentUnit|curve|curveAddPtCtx|curveCVCtx|curveEPCtx|curveEditorCtx|curveIntersect|curveMoveEPCtx|curveOnSurface|curveSketchCtx|cutKey|cycleCheck|cylinder|dagPose|date|defaultLightListCheckBox|defaultNavigation|defineDataServer|defineVirtualDevice|deformer|deg_to_rad|delete|deleteAttr|deleteShadingGroupsAndMaterials|deleteShelfTab|deleteUI|deleteUnusedBrushes|delrandstr|detachCurve|detachDeviceAttr|detachSurface|deviceEditor|devicePanel|dgInfo|dgdirty|dgeval|dgtimer|dimWhen|directKeyCtx|directionalLight|dirmap|dirname|disable|disconnectAttr|disconnectJoint|diskCache|displacementToPoly|displayAffected|displayColor|displayCull|displayLevelOfDetail|displayPref|displayRGBColor|displaySmoothness|displayStats|displayString|displaySurface|distanceDimContext|distanceDimension|doBlur|dolly|dollyCtx|dopeSheetEditor|dot|dotProduct|doubleProfileBirailSurface|drag|dragAttrContext|draggerContext|dropoffLocator|duplicate|duplicateCurve|duplicateSurface|dynCache|dynControl|dynExport|dynExpression|dynGlobals|dynPaintEditor|dynParticleCtx|dynPref|dynRelEdPanel|dynRelEditor|dynamicLoad|editAttrLimits|editDisplayLayerGlobals|editDisplayLayerMembers|editRenderLayerAdjustment|editRenderLayerGlobals|editRenderLayerMembers|editor|editorTemplate|effector|emit|emitter|enableDevice|encodeString|endString|endsWith|env|equivalent|equivalentTol|erf|error|eval|evalDeferred|evalEcho|event|exactWorldBoundingBox|exclusiveLightCheckBox|exec|executeForEachObject|exists|exp|expression|expressionEditorListen|extendCurve|extendSurface|extrude|fcheck|fclose|feof|fflush|fgetline|fgetword|file|fileBrowserDialog|fileDialog|fileExtension|fileInfo|filetest|filletCurve|filter|filterCurve|filterExpand|filterStudioImport|findAllIntersections|findAnimCurves|findKeyframe|findMenuItem|findRelatedSkinCluster|finder|firstParentOf|fitBspline|flexor|floatEq|floatField|floatFieldGrp|floatScrollBar|floatSlider|floatSlider2|floatSliderButtonGrp|floatSliderGrp|floor|flow|fluidCacheInfo|fluidEmitter|fluidVoxelInfo|flushUndo|fmod|fontDialog|fopen|formLayout|format|fprint|frameLayout|fread|freeFormFillet|frewind|fromNativePath|fwrite|gamma|gauss|geometryConstraint|getApplicationVersionAsFloat|getAttr|getClassification|getDefaultBrush|getFileList|getFluidAttr|getInputDeviceRange|getMayaPanelTypes|getModifiers|getPanel|getParticleAttr|getPluginResource|getenv|getpid|glRender|glRenderEditor|globalStitch|gmatch|goal|gotoBindPose|grabColor|gradientControl|gradientControlNoAttr|graphDollyCtx|graphSelectContext|graphTrackCtx|gravity|grid|gridLayout|group|groupObjectsByName|hardenPointCurve|hardware|hardwareRenderPanel|headsUpDisplay|headsUpMessage|help|helpLine|hermite|hide|hilite|hitTest|hotBox|hotkey|hotkeyCheck|hsv_to_rgb|hudButton|hudSlider|hudSliderButton|hwReflectionMap|hwRender|hwRenderLoad|hyperGraph|hyperPanel|hyperShade|hypot|iconTextButton|iconTextCheckBox|iconTextRadioButton|iconTextRadioCollection|iconTextScrollList|iconTextStaticLabel|ikHandle|ikHandleCtx|ikHandleDisplayScale|ikSolver|ikSplineHandleCtx|ikSystem|ikSystemInfo|ikfkDisplayMethod|illustratorCurves|image|imfPlugins|inheritTransform|insertJoint|insertJointCtx|insertKeyCtx|insertKnotCurve|insertKnotSurface|instance|instanceable|instancer|intField|intFieldGrp|intScrollBar|intSlider|intSliderGrp|interToUI|internalVar|intersect|iprEngine|isAnimCurve|isConnected|isDirty|isParentOf|isSameObject|isTrue|isValidObjectName|isValidString|isValidUiName|isolateSelect|itemFilter|itemFilterAttr|itemFilterRender|itemFilterType|joint|jointCluster|jointCtx|jointDisplayScale|jointLattice|keyTangent|keyframe|keyframeOutliner|keyframeRegionCurrentTimeCtx|keyframeRegionDirectKeyCtx|keyframeRegionDollyCtx|keyframeRegionInsertKeyCtx|keyframeRegionMoveKeyCtx|keyframeRegionScaleKeyCtx|keyframeRegionSelectKeyCtx|keyframeRegionSetKeyCtx|keyframeRegionTrackCtx|keyframeStats|lassoContext|lattice|latticeDeformKeyCtx|launch|launchImageEditor|layerButton|layeredShaderPort|layeredTexturePort|layout|layoutDialog|lightList|lightListEditor|lightListPanel|lightlink|lineIntersection|linearPrecision|linstep|listAnimatable|listAttr|listCameras|listConnections|listDeviceAttachments|listHistory|listInputDeviceAxes|listInputDeviceButtons|listInputDevices|listMenuAnnotation|listNodeTypes|listPanelCategories|listRelatives|listSets|listTransforms|listUnselected|listerEditor|loadFluid|loadNewShelf|loadPlugin|loadPluginLanguageResources|loadPrefObjects|localizedPanelLabel|lockNode|loft|log|longNameOf|lookThru|ls|lsThroughFilter|lsType|lsUI|mag|makeIdentity|makeLive|makePaintable|makeRoll|makeSingleSurface|makeTubeOn|makebot|manipMoveContext|manipMoveLimitsCtx|manipOptions|manipRotateContext|manipRotateLimitsCtx|manipScaleContext|manipScaleLimitsCtx|marker|match|max|memory|menu|menuBarLayout|menuEditor|menuItem|menuItemToShelf|menuSet|menuSetPref|messageLine|min|minimizeApp|mirrorJoint|modelCurrentTimeCtx|modelEditor|modelPanel|mouse|movIn|movOut|move|moveIKtoFK|moveKeyCtx|moveVertexAlongDirection|multiProfileBirailSurface|mute|nParticle|nameCommand|nameField|namespace|namespaceInfo|newPanelItems|newton|nodeCast|nodeIconButton|nodeOutliner|nodePreset|nodeType|noise|nonLinear|normalConstraint|normalize|nurbsBoolean|nurbsCopyUVSet|nurbsCube|nurbsEditUV|nurbsPlane|nurbsSelect|nurbsSquare|nurbsToPoly|nurbsToPolygonsPref|nurbsToSubdiv|nurbsToSubdivPref|nurbsUVSet|nurbsViewDirectionVector|objExists|objectCenter|objectLayer|objectType|objectTypeUI|obsoleteProc|oceanNurbsPreviewPlane|offsetCurve|offsetCurveOnSurface|offsetSurface|openGLExtension|openMayaPref|optionMenu|optionMenuGrp|optionVar|orbit|orbitCtx|orientConstraint|outlinerEditor|outlinerPanel|overrideModifier|paintEffectsDisplay|pairBlend|palettePort|paneLayout|panel|panelConfiguration|panelHistory|paramDimContext|paramDimension|paramLocator|parent|parentConstraint|particle|particleExists|particleInstancer|particleRenderInfo|partition|pasteKey|pathAnimation|pause|pclose|percent|performanceOptions|pfxstrokes|pickWalk|picture|pixelMove|planarSrf|plane|play|playbackOptions|playblast|plugAttr|plugNode|pluginInfo|pluginResourceUtil|pointConstraint|pointCurveConstraint|pointLight|pointMatrixMult|pointOnCurve|pointOnSurface|pointPosition|poleVectorConstraint|polyAppend|polyAppendFacetCtx|polyAppendVertex|polyAutoProjection|polyAverageNormal|polyAverageVertex|polyBevel|polyBlendColor|polyBlindData|polyBoolOp|polyBridgeEdge|polyCacheMonitor|polyCheck|polyChipOff|polyClipboard|polyCloseBorder|polyCollapseEdge|polyCollapseFacet|polyColorBlindData|polyColorDel|polyColorPerVertex|polyColorSet|polyCompare|polyCone|polyCopyUV|polyCrease|polyCreaseCtx|polyCreateFacet|polyCreateFacetCtx|polyCube|polyCut|polyCutCtx|polyCylinder|polyCylindricalProjection|polyDelEdge|polyDelFacet|polyDelVertex|polyDuplicateAndConnect|polyDuplicateEdge|polyEditUV|polyEditUVShell|polyEvaluate|polyExtrudeEdge|polyExtrudeFacet|polyExtrudeVertex|polyFlipEdge|polyFlipUV|polyForceUV|polyGeoSampler|polyHelix|polyInfo|polyInstallAction|polyLayoutUV|polyListComponentConversion|polyMapCut|polyMapDel|polyMapSew|polyMapSewMove|polyMergeEdge|polyMergeEdgeCtx|polyMergeFacet|polyMergeFacetCtx|polyMergeUV|polyMergeVertex|polyMirrorFace|polyMoveEdge|polyMoveFacet|polyMoveFacetUV|polyMoveUV|polyMoveVertex|polyNormal|polyNormalPerVertex|polyNormalizeUV|polyOptUvs|polyOptions|polyOutput|polyPipe|polyPlanarProjection|polyPlane|polyPlatonicSolid|polyPoke|polyPrimitive|polyPrism|polyProjection|polyPyramid|polyQuad|polyQueryBlindData|polyReduce|polySelect|polySelectConstraint|polySelectConstraintMonitor|polySelectCtx|polySelectEditCtx|polySeparate|polySetToFaceNormal|polySewEdge|polyShortestPathCtx|polySmooth|polySoftEdge|polySphere|polySphericalProjection|polySplit|polySplitCtx|polySplitEdge|polySplitRing|polySplitVertex|polyStraightenUVBorder|polySubdivideEdge|polySubdivideFacet|polyToSubdiv|polyTorus|polyTransfer|polyTriangulate|polyUVSet|polyUnite|polyWedgeFace|popen|popupMenu|pose|pow|preloadRefEd|print|progressBar|progressWindow|projFileViewer|projectCurve|projectTangent|projectionContext|projectionManip|promptDialog|propModCtx|propMove|psdChannelOutliner|psdEditTextureFile|psdExport|psdTextureFile|putenv|pwd|python|querySubdiv|quit|rad_to_deg|radial|radioButton|radioButtonGrp|radioCollection|radioMenuItemCollection|rampColorPort|rand|randomizeFollicles|randstate|rangeControl|readTake|rebuildCurve|rebuildSurface|recordAttr|recordDevice|redo|reference|referenceEdit|referenceQuery|refineSubdivSelectionList|refresh|refreshAE|registerPluginResource|rehash|reloadImage|removeJoint|removeMultiInstance|removePanelCategory|rename|renameAttr|renameSelectionList|renameUI|render|renderGlobalsNode|renderInfo|renderLayerButton|renderLayerParent|renderLayerPostProcess|renderLayerUnparent|renderManip|renderPartition|renderQualityNode|renderSettings|renderThumbnailUpdate|renderWindowEditor|renderWindowSelectContext|renderer|reorder|reorderDeformers|requires|reroot|resampleFluid|resetAE|resetPfxToPolyCamera|resetTool|resolutionNode|retarget|reverseCurve|reverseSurface|revolve|rgb_to_hsv|rigidBody|rigidSolver|roll|rollCtx|rootOf|rot|rotate|rotationInterpolation|roundConstantRadius|rowColumnLayout|rowLayout|runTimeCommand|runup|sampleImage|saveAllShelves|saveAttrPreset|saveFluid|saveImage|saveInitialState|saveMenu|savePrefObjects|savePrefs|saveShelf|saveToolSettings|scale|scaleBrushBrightness|scaleComponents|scaleConstraint|scaleKey|scaleKeyCtx|sceneEditor|sceneUIReplacement|scmh|scriptCtx|scriptEditorInfo|scriptJob|scriptNode|scriptTable|scriptToShelf|scriptedPanel|scriptedPanelType|scrollField|scrollLayout|sculpt|searchPathArray|seed|selLoadSettings|select|selectContext|selectCurveCV|selectKey|selectKeyCtx|selectKeyframeRegionCtx|selectMode|selectPref|selectPriority|selectType|selectedNodes|selectionConnection|separator|setAttr|setAttrEnumResource|setAttrMapping|setAttrNiceNameResource|setConstraintRestPosition|setDefaultShadingGroup|setDrivenKeyframe|setDynamic|setEditCtx|setEditor|setFluidAttr|setFocus|setInfinity|setInputDeviceMapping|setKeyCtx|setKeyPath|setKeyframe|setKeyframeBlendshapeTargetWts|setMenuMode|setNodeNiceNameResource|setNodeTypeFlag|setParent|setParticleAttr|setPfxToPolyCamera|setPluginResource|setProject|setStampDensity|setStartupMessage|setState|setToolTo|setUITemplate|setXformManip|sets|shadingConnection|shadingGeometryRelCtx|shadingLightRelCtx|shadingNetworkCompare|shadingNode|shapeCompare|shelfButton|shelfLayout|shelfTabLayout|shellField|shortNameOf|showHelp|showHidden|showManipCtx|showSelectionInTitle|showShadingGroupAttrEditor|showWindow|sign|simplify|sin|singleProfileBirailSurface|size|sizeBytes|skinCluster|skinPercent|smoothCurve|smoothTangentSurface|smoothstep|snap2to2|snapKey|snapMode|snapTogetherCtx|snapshot|soft|softMod|softModCtx|sort|sound|soundControl|source|spaceLocator|sphere|sphrand|spotLight|spotLightPreviewPort|spreadSheetEditor|spring|sqrt|squareSurface|srtContext|stackTrace|startString|startsWith|stitchAndExplodeShell|stitchSurface|stitchSurfacePoints|strcmp|stringArrayCatenate|stringArrayContains|stringArrayCount|stringArrayInsertAtIndex|stringArrayIntersector|stringArrayRemove|stringArrayRemoveAtIndex|stringArrayRemoveDuplicates|stringArrayRemoveExact|stringArrayToString|stringToStringArray|strip|stripPrefixFromName|stroke|subdAutoProjection|subdCleanTopology|subdCollapse|subdDuplicateAndConnect|subdEditUV|subdListComponentConversion|subdMapCut|subdMapSewMove|subdMatchTopology|subdMirror|subdToBlind|subdToPoly|subdTransferUVsToCache|subdiv|subdivCrease|subdivDisplaySmoothness|substitute|substituteAllString|substituteGeometry|substring|surface|surfaceSampler|surfaceShaderList|swatchDisplayPort|switchTable|symbolButton|symbolCheckBox|sysFile|system|tabLayout|tan|tangentConstraint|texLatticeDeformContext|texManipContext|texMoveContext|texMoveUVShellContext|texRotateContext|texScaleContext|texSelectContext|texSelectShortestPathCtx|texSmudgeUVContext|texWinToolCtx|text|textCurves|textField|textFieldButtonGrp|textFieldGrp|textManip|textScrollList|textToShelf|textureDisplacePlane|textureHairColor|texturePlacementContext|textureWindow|threadCount|threePointArcCtx|timeControl|timePort|timerX|toNativePath|toggle|toggleAxis|toggleWindowVisibility|tokenize|tokenizeList|tolerance|tolower|toolButton|toolCollection|toolDropped|toolHasOptions|toolPropertyWindow|torus|toupper|trace|track|trackCtx|transferAttributes|transformCompare|transformLimits|translator|trim|trunc|truncateFluidCache|truncateHairCache|tumble|tumbleCtx|turbulence|twoPointArcCtx|uiRes|uiTemplate|unassignInputDevice|undo|undoInfo|ungroup|uniform|unit|unloadPlugin|untangleUV|untitledFileName|untrim|upAxis|updateAE|userCtx|uvLink|uvSnapshot|validateShelfName|vectorize|view2dToolCtx|viewCamera|viewClipPlane|viewFit|viewHeadOn|viewLookAt|viewManip|viewPlace|viewSet|visor|volumeAxis|vortex|waitCursor|warning|webBrowser|webBrowserPrefs|whatIs|window|windowPref|wire|wireContext|workspace|wrinkle|wrinkleContext|writeTake|xbmLangPathList|xform)\b/, + 'function': { + pattern: /((?:^|[{;])[ \t]*)[a-z_]\w*\b(?!\s*(?:\.(?!\.)|[[{=]))|\b[a-z_]\w*(?=[ \t]*\()/im, + lookbehind: true, + greedy: true + }, - 'operator': [ - /\+[+=]?|-[-=]?|&&|\|\||[<>]=|[*\/!=]=?|[%^]/, - { - // We don't want to match << - pattern: /(^|[^<])<(?!<)/, - lookbehind: true - }, - { - // We don't want to match >> - pattern: /(^|[^>])>(?!>)/, - lookbehind: true - } - ], - 'punctuation': /<<|>>|[.,:;?\[\](){}]/ + 'tensor-punctuation': { + pattern: /<<|>>/, + alias: 'punctuation' + }, + 'operator': /\+[+=]?|-[-=]?|&&|\|\||[<>]=?|[*\/!=]=?|[%^]/, + 'punctuation': /[.,:;?\[\](){}]/ }; -Prism.languages.mel['code'].inside.rest = Prism.languages.mel; + +Prism.languages.mel['code'].inside['statement'].inside = Prism.languages.mel; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mel.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mel.min.js index 0fda416934..a0866882dc 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mel.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mel.min.js @@ -1 +1 @@ -Prism.languages.mel={comment:/\/\/.*/,code:{pattern:/`(?:\\.|[^\\`\r\n])*`/,greedy:!0,alias:"italic",inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"}}},string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},variable:/\$\w+/,number:/\b0x[\da-fA-F]+\b|\b\d+(?:\.\d*)?|\B\.\d+/,flag:{pattern:/-[^\d\W]\w*/,alias:"operator"},keyword:/\b(?:break|case|continue|default|do|else|float|for|global|if|in|int|matrix|proc|return|string|switch|vector|while)\b/,function:/\b\w+(?=\()|\b(?:CBG|HfAddAttractorToAS|HfAssignAS|HfBuildEqualMap|HfBuildFurFiles|HfBuildFurImages|HfCancelAFR|HfConnectASToHF|HfCreateAttractor|HfDeleteAS|HfEditAS|HfPerformCreateAS|HfRemoveAttractorFromAS|HfSelectAttached|HfSelectAttractors|HfUnAssignAS|Mayatomr|about|abs|addAttr|addAttributeEditorNodeHelp|addDynamic|addNewShelfTab|addPP|addPanelCategory|addPrefixToName|advanceToNextDrivenKey|affectedNet|affects|aimConstraint|air|alias|aliasAttr|align|alignCtx|alignCurve|alignSurface|allViewFit|ambientLight|angle|angleBetween|animCone|animCurveEditor|animDisplay|animView|annotate|appendStringArray|applicationName|applyAttrPreset|applyTake|arcLenDimContext|arcLengthDimension|arclen|arrayMapper|art3dPaintCtx|artAttrCtx|artAttrPaintVertexCtx|artAttrSkinPaintCtx|artAttrTool|artBuildPaintMenu|artFluidAttrCtx|artPuttyCtx|artSelectCtx|artSetPaintCtx|artUserPaintCtx|assignCommand|assignInputDevice|assignViewportFactories|attachCurve|attachDeviceAttr|attachSurface|attrColorSliderGrp|attrCompatibility|attrControlGrp|attrEnumOptionMenu|attrEnumOptionMenuGrp|attrFieldGrp|attrFieldSliderGrp|attrNavigationControlGrp|attrPresetEditWin|attributeExists|attributeInfo|attributeMenu|attributeQuery|autoKeyframe|autoPlace|bakeClip|bakeFluidShading|bakePartialHistory|bakeResults|bakeSimulation|basename|basenameEx|batchRender|bessel|bevel|bevelPlus|binMembership|bindSkin|blend2|blendShape|blendShapeEditor|blendShapePanel|blendTwoAttr|blindDataType|boneLattice|boundary|boxDollyCtx|boxZoomCtx|bufferCurve|buildBookmarkMenu|buildKeyframeMenu|button|buttonManip|cacheFile|cacheFileCombine|cacheFileMerge|cacheFileTrack|camera|cameraView|canCreateManip|canvas|capitalizeString|catch|catchQuiet|ceil|changeSubdivComponentDisplayLevel|changeSubdivRegion|channelBox|character|characterMap|characterOutlineEditor|characterize|chdir|checkBox|checkBoxGrp|checkDefaultRenderGlobals|choice|circle|circularFillet|clamp|clear|clearCache|clip|clipEditor|clipEditorCurrentTimeCtx|clipSchedule|clipSchedulerOutliner|clipTrimBefore|closeCurve|closeSurface|cluster|cmdFileOutput|cmdScrollFieldExecuter|cmdScrollFieldReporter|cmdShell|coarsenSubdivSelectionList|collision|color|colorAtPoint|colorEditor|colorIndex|colorIndexSliderGrp|colorSliderButtonGrp|colorSliderGrp|columnLayout|commandEcho|commandLine|commandPort|compactHairSystem|componentEditor|compositingInterop|computePolysetVolume|condition|cone|confirmDialog|connectAttr|connectControl|connectDynamic|connectJoint|connectionInfo|constrain|constrainValue|constructionHistory|container|containsMultibyte|contextInfo|control|convertFromOldLayers|convertIffToPsd|convertLightmap|convertSolidTx|convertTessellation|convertUnit|copyArray|copyFlexor|copyKey|copySkinWeights|cos|cpButton|cpCache|cpClothSet|cpCollision|cpConstraint|cpConvClothToMesh|cpForces|cpGetSolverAttr|cpPanel|cpProperty|cpRigidCollisionFilter|cpSeam|cpSetEdit|cpSetSolverAttr|cpSolver|cpSolverTypes|cpTool|cpUpdateClothUVs|createDisplayLayer|createDrawCtx|createEditor|createLayeredPsdFile|createMotionField|createNewShelf|createNode|createRenderLayer|createSubdivRegion|cross|crossProduct|ctxAbort|ctxCompletion|ctxEditMode|ctxTraverse|currentCtx|currentTime|currentTimeCtx|currentUnit|curve|curveAddPtCtx|curveCVCtx|curveEPCtx|curveEditorCtx|curveIntersect|curveMoveEPCtx|curveOnSurface|curveSketchCtx|cutKey|cycleCheck|cylinder|dagPose|date|defaultLightListCheckBox|defaultNavigation|defineDataServer|defineVirtualDevice|deformer|deg_to_rad|delete|deleteAttr|deleteShadingGroupsAndMaterials|deleteShelfTab|deleteUI|deleteUnusedBrushes|delrandstr|detachCurve|detachDeviceAttr|detachSurface|deviceEditor|devicePanel|dgInfo|dgdirty|dgeval|dgtimer|dimWhen|directKeyCtx|directionalLight|dirmap|dirname|disable|disconnectAttr|disconnectJoint|diskCache|displacementToPoly|displayAffected|displayColor|displayCull|displayLevelOfDetail|displayPref|displayRGBColor|displaySmoothness|displayStats|displayString|displaySurface|distanceDimContext|distanceDimension|doBlur|dolly|dollyCtx|dopeSheetEditor|dot|dotProduct|doubleProfileBirailSurface|drag|dragAttrContext|draggerContext|dropoffLocator|duplicate|duplicateCurve|duplicateSurface|dynCache|dynControl|dynExport|dynExpression|dynGlobals|dynPaintEditor|dynParticleCtx|dynPref|dynRelEdPanel|dynRelEditor|dynamicLoad|editAttrLimits|editDisplayLayerGlobals|editDisplayLayerMembers|editRenderLayerAdjustment|editRenderLayerGlobals|editRenderLayerMembers|editor|editorTemplate|effector|emit|emitter|enableDevice|encodeString|endString|endsWith|env|equivalent|equivalentTol|erf|error|eval|evalDeferred|evalEcho|event|exactWorldBoundingBox|exclusiveLightCheckBox|exec|executeForEachObject|exists|exp|expression|expressionEditorListen|extendCurve|extendSurface|extrude|fcheck|fclose|feof|fflush|fgetline|fgetword|file|fileBrowserDialog|fileDialog|fileExtension|fileInfo|filetest|filletCurve|filter|filterCurve|filterExpand|filterStudioImport|findAllIntersections|findAnimCurves|findKeyframe|findMenuItem|findRelatedSkinCluster|finder|firstParentOf|fitBspline|flexor|floatEq|floatField|floatFieldGrp|floatScrollBar|floatSlider|floatSlider2|floatSliderButtonGrp|floatSliderGrp|floor|flow|fluidCacheInfo|fluidEmitter|fluidVoxelInfo|flushUndo|fmod|fontDialog|fopen|formLayout|format|fprint|frameLayout|fread|freeFormFillet|frewind|fromNativePath|fwrite|gamma|gauss|geometryConstraint|getApplicationVersionAsFloat|getAttr|getClassification|getDefaultBrush|getFileList|getFluidAttr|getInputDeviceRange|getMayaPanelTypes|getModifiers|getPanel|getParticleAttr|getPluginResource|getenv|getpid|glRender|glRenderEditor|globalStitch|gmatch|goal|gotoBindPose|grabColor|gradientControl|gradientControlNoAttr|graphDollyCtx|graphSelectContext|graphTrackCtx|gravity|grid|gridLayout|group|groupObjectsByName|hardenPointCurve|hardware|hardwareRenderPanel|headsUpDisplay|headsUpMessage|help|helpLine|hermite|hide|hilite|hitTest|hotBox|hotkey|hotkeyCheck|hsv_to_rgb|hudButton|hudSlider|hudSliderButton|hwReflectionMap|hwRender|hwRenderLoad|hyperGraph|hyperPanel|hyperShade|hypot|iconTextButton|iconTextCheckBox|iconTextRadioButton|iconTextRadioCollection|iconTextScrollList|iconTextStaticLabel|ikHandle|ikHandleCtx|ikHandleDisplayScale|ikSolver|ikSplineHandleCtx|ikSystem|ikSystemInfo|ikfkDisplayMethod|illustratorCurves|image|imfPlugins|inheritTransform|insertJoint|insertJointCtx|insertKeyCtx|insertKnotCurve|insertKnotSurface|instance|instanceable|instancer|intField|intFieldGrp|intScrollBar|intSlider|intSliderGrp|interToUI|internalVar|intersect|iprEngine|isAnimCurve|isConnected|isDirty|isParentOf|isSameObject|isTrue|isValidObjectName|isValidString|isValidUiName|isolateSelect|itemFilter|itemFilterAttr|itemFilterRender|itemFilterType|joint|jointCluster|jointCtx|jointDisplayScale|jointLattice|keyTangent|keyframe|keyframeOutliner|keyframeRegionCurrentTimeCtx|keyframeRegionDirectKeyCtx|keyframeRegionDollyCtx|keyframeRegionInsertKeyCtx|keyframeRegionMoveKeyCtx|keyframeRegionScaleKeyCtx|keyframeRegionSelectKeyCtx|keyframeRegionSetKeyCtx|keyframeRegionTrackCtx|keyframeStats|lassoContext|lattice|latticeDeformKeyCtx|launch|launchImageEditor|layerButton|layeredShaderPort|layeredTexturePort|layout|layoutDialog|lightList|lightListEditor|lightListPanel|lightlink|lineIntersection|linearPrecision|linstep|listAnimatable|listAttr|listCameras|listConnections|listDeviceAttachments|listHistory|listInputDeviceAxes|listInputDeviceButtons|listInputDevices|listMenuAnnotation|listNodeTypes|listPanelCategories|listRelatives|listSets|listTransforms|listUnselected|listerEditor|loadFluid|loadNewShelf|loadPlugin|loadPluginLanguageResources|loadPrefObjects|localizedPanelLabel|lockNode|loft|log|longNameOf|lookThru|ls|lsThroughFilter|lsType|lsUI|mag|makeIdentity|makeLive|makePaintable|makeRoll|makeSingleSurface|makeTubeOn|makebot|manipMoveContext|manipMoveLimitsCtx|manipOptions|manipRotateContext|manipRotateLimitsCtx|manipScaleContext|manipScaleLimitsCtx|marker|match|max|memory|menu|menuBarLayout|menuEditor|menuItem|menuItemToShelf|menuSet|menuSetPref|messageLine|min|minimizeApp|mirrorJoint|modelCurrentTimeCtx|modelEditor|modelPanel|mouse|movIn|movOut|move|moveIKtoFK|moveKeyCtx|moveVertexAlongDirection|multiProfileBirailSurface|mute|nParticle|nameCommand|nameField|namespace|namespaceInfo|newPanelItems|newton|nodeCast|nodeIconButton|nodeOutliner|nodePreset|nodeType|noise|nonLinear|normalConstraint|normalize|nurbsBoolean|nurbsCopyUVSet|nurbsCube|nurbsEditUV|nurbsPlane|nurbsSelect|nurbsSquare|nurbsToPoly|nurbsToPolygonsPref|nurbsToSubdiv|nurbsToSubdivPref|nurbsUVSet|nurbsViewDirectionVector|objExists|objectCenter|objectLayer|objectType|objectTypeUI|obsoleteProc|oceanNurbsPreviewPlane|offsetCurve|offsetCurveOnSurface|offsetSurface|openGLExtension|openMayaPref|optionMenu|optionMenuGrp|optionVar|orbit|orbitCtx|orientConstraint|outlinerEditor|outlinerPanel|overrideModifier|paintEffectsDisplay|pairBlend|palettePort|paneLayout|panel|panelConfiguration|panelHistory|paramDimContext|paramDimension|paramLocator|parent|parentConstraint|particle|particleExists|particleInstancer|particleRenderInfo|partition|pasteKey|pathAnimation|pause|pclose|percent|performanceOptions|pfxstrokes|pickWalk|picture|pixelMove|planarSrf|plane|play|playbackOptions|playblast|plugAttr|plugNode|pluginInfo|pluginResourceUtil|pointConstraint|pointCurveConstraint|pointLight|pointMatrixMult|pointOnCurve|pointOnSurface|pointPosition|poleVectorConstraint|polyAppend|polyAppendFacetCtx|polyAppendVertex|polyAutoProjection|polyAverageNormal|polyAverageVertex|polyBevel|polyBlendColor|polyBlindData|polyBoolOp|polyBridgeEdge|polyCacheMonitor|polyCheck|polyChipOff|polyClipboard|polyCloseBorder|polyCollapseEdge|polyCollapseFacet|polyColorBlindData|polyColorDel|polyColorPerVertex|polyColorSet|polyCompare|polyCone|polyCopyUV|polyCrease|polyCreaseCtx|polyCreateFacet|polyCreateFacetCtx|polyCube|polyCut|polyCutCtx|polyCylinder|polyCylindricalProjection|polyDelEdge|polyDelFacet|polyDelVertex|polyDuplicateAndConnect|polyDuplicateEdge|polyEditUV|polyEditUVShell|polyEvaluate|polyExtrudeEdge|polyExtrudeFacet|polyExtrudeVertex|polyFlipEdge|polyFlipUV|polyForceUV|polyGeoSampler|polyHelix|polyInfo|polyInstallAction|polyLayoutUV|polyListComponentConversion|polyMapCut|polyMapDel|polyMapSew|polyMapSewMove|polyMergeEdge|polyMergeEdgeCtx|polyMergeFacet|polyMergeFacetCtx|polyMergeUV|polyMergeVertex|polyMirrorFace|polyMoveEdge|polyMoveFacet|polyMoveFacetUV|polyMoveUV|polyMoveVertex|polyNormal|polyNormalPerVertex|polyNormalizeUV|polyOptUvs|polyOptions|polyOutput|polyPipe|polyPlanarProjection|polyPlane|polyPlatonicSolid|polyPoke|polyPrimitive|polyPrism|polyProjection|polyPyramid|polyQuad|polyQueryBlindData|polyReduce|polySelect|polySelectConstraint|polySelectConstraintMonitor|polySelectCtx|polySelectEditCtx|polySeparate|polySetToFaceNormal|polySewEdge|polyShortestPathCtx|polySmooth|polySoftEdge|polySphere|polySphericalProjection|polySplit|polySplitCtx|polySplitEdge|polySplitRing|polySplitVertex|polyStraightenUVBorder|polySubdivideEdge|polySubdivideFacet|polyToSubdiv|polyTorus|polyTransfer|polyTriangulate|polyUVSet|polyUnite|polyWedgeFace|popen|popupMenu|pose|pow|preloadRefEd|print|progressBar|progressWindow|projFileViewer|projectCurve|projectTangent|projectionContext|projectionManip|promptDialog|propModCtx|propMove|psdChannelOutliner|psdEditTextureFile|psdExport|psdTextureFile|putenv|pwd|python|querySubdiv|quit|rad_to_deg|radial|radioButton|radioButtonGrp|radioCollection|radioMenuItemCollection|rampColorPort|rand|randomizeFollicles|randstate|rangeControl|readTake|rebuildCurve|rebuildSurface|recordAttr|recordDevice|redo|reference|referenceEdit|referenceQuery|refineSubdivSelectionList|refresh|refreshAE|registerPluginResource|rehash|reloadImage|removeJoint|removeMultiInstance|removePanelCategory|rename|renameAttr|renameSelectionList|renameUI|render|renderGlobalsNode|renderInfo|renderLayerButton|renderLayerParent|renderLayerPostProcess|renderLayerUnparent|renderManip|renderPartition|renderQualityNode|renderSettings|renderThumbnailUpdate|renderWindowEditor|renderWindowSelectContext|renderer|reorder|reorderDeformers|requires|reroot|resampleFluid|resetAE|resetPfxToPolyCamera|resetTool|resolutionNode|retarget|reverseCurve|reverseSurface|revolve|rgb_to_hsv|rigidBody|rigidSolver|roll|rollCtx|rootOf|rot|rotate|rotationInterpolation|roundConstantRadius|rowColumnLayout|rowLayout|runTimeCommand|runup|sampleImage|saveAllShelves|saveAttrPreset|saveFluid|saveImage|saveInitialState|saveMenu|savePrefObjects|savePrefs|saveShelf|saveToolSettings|scale|scaleBrushBrightness|scaleComponents|scaleConstraint|scaleKey|scaleKeyCtx|sceneEditor|sceneUIReplacement|scmh|scriptCtx|scriptEditorInfo|scriptJob|scriptNode|scriptTable|scriptToShelf|scriptedPanel|scriptedPanelType|scrollField|scrollLayout|sculpt|searchPathArray|seed|selLoadSettings|select|selectContext|selectCurveCV|selectKey|selectKeyCtx|selectKeyframeRegionCtx|selectMode|selectPref|selectPriority|selectType|selectedNodes|selectionConnection|separator|setAttr|setAttrEnumResource|setAttrMapping|setAttrNiceNameResource|setConstraintRestPosition|setDefaultShadingGroup|setDrivenKeyframe|setDynamic|setEditCtx|setEditor|setFluidAttr|setFocus|setInfinity|setInputDeviceMapping|setKeyCtx|setKeyPath|setKeyframe|setKeyframeBlendshapeTargetWts|setMenuMode|setNodeNiceNameResource|setNodeTypeFlag|setParent|setParticleAttr|setPfxToPolyCamera|setPluginResource|setProject|setStampDensity|setStartupMessage|setState|setToolTo|setUITemplate|setXformManip|sets|shadingConnection|shadingGeometryRelCtx|shadingLightRelCtx|shadingNetworkCompare|shadingNode|shapeCompare|shelfButton|shelfLayout|shelfTabLayout|shellField|shortNameOf|showHelp|showHidden|showManipCtx|showSelectionInTitle|showShadingGroupAttrEditor|showWindow|sign|simplify|sin|singleProfileBirailSurface|size|sizeBytes|skinCluster|skinPercent|smoothCurve|smoothTangentSurface|smoothstep|snap2to2|snapKey|snapMode|snapTogetherCtx|snapshot|soft|softMod|softModCtx|sort|sound|soundControl|source|spaceLocator|sphere|sphrand|spotLight|spotLightPreviewPort|spreadSheetEditor|spring|sqrt|squareSurface|srtContext|stackTrace|startString|startsWith|stitchAndExplodeShell|stitchSurface|stitchSurfacePoints|strcmp|stringArrayCatenate|stringArrayContains|stringArrayCount|stringArrayInsertAtIndex|stringArrayIntersector|stringArrayRemove|stringArrayRemoveAtIndex|stringArrayRemoveDuplicates|stringArrayRemoveExact|stringArrayToString|stringToStringArray|strip|stripPrefixFromName|stroke|subdAutoProjection|subdCleanTopology|subdCollapse|subdDuplicateAndConnect|subdEditUV|subdListComponentConversion|subdMapCut|subdMapSewMove|subdMatchTopology|subdMirror|subdToBlind|subdToPoly|subdTransferUVsToCache|subdiv|subdivCrease|subdivDisplaySmoothness|substitute|substituteAllString|substituteGeometry|substring|surface|surfaceSampler|surfaceShaderList|swatchDisplayPort|switchTable|symbolButton|symbolCheckBox|sysFile|system|tabLayout|tan|tangentConstraint|texLatticeDeformContext|texManipContext|texMoveContext|texMoveUVShellContext|texRotateContext|texScaleContext|texSelectContext|texSelectShortestPathCtx|texSmudgeUVContext|texWinToolCtx|text|textCurves|textField|textFieldButtonGrp|textFieldGrp|textManip|textScrollList|textToShelf|textureDisplacePlane|textureHairColor|texturePlacementContext|textureWindow|threadCount|threePointArcCtx|timeControl|timePort|timerX|toNativePath|toggle|toggleAxis|toggleWindowVisibility|tokenize|tokenizeList|tolerance|tolower|toolButton|toolCollection|toolDropped|toolHasOptions|toolPropertyWindow|torus|toupper|trace|track|trackCtx|transferAttributes|transformCompare|transformLimits|translator|trim|trunc|truncateFluidCache|truncateHairCache|tumble|tumbleCtx|turbulence|twoPointArcCtx|uiRes|uiTemplate|unassignInputDevice|undo|undoInfo|ungroup|uniform|unit|unloadPlugin|untangleUV|untitledFileName|untrim|upAxis|updateAE|userCtx|uvLink|uvSnapshot|validateShelfName|vectorize|view2dToolCtx|viewCamera|viewClipPlane|viewFit|viewHeadOn|viewLookAt|viewManip|viewPlace|viewSet|visor|volumeAxis|vortex|waitCursor|warning|webBrowser|webBrowserPrefs|whatIs|window|windowPref|wire|wireContext|workspace|wrinkle|wrinkleContext|writeTake|xbmLangPathList|xform)\b/,operator:[/\+[+=]?|-[-=]?|&&|\|\||[<>]=|[*\/!=]=?|[%^]/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,:;?\[\](){}]/},Prism.languages.mel.code.inside.rest=Prism.languages.mel; \ No newline at end of file +Prism.languages.mel={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\//,greedy:!0},code:{pattern:/`(?:\\.|[^\\`])*`/,greedy:!0,alias:"italic",inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},statement:{pattern:/[\s\S]+/,inside:null}}},string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},variable:/\$\w+/,number:/\b0x[\da-fA-F]+\b|\b\d+(?:\.\d*)?|\B\.\d+/,flag:{pattern:/-[^\d\W]\w*/,alias:"operator"},keyword:/\b(?:break|case|continue|default|do|else|float|for|global|if|in|int|matrix|proc|return|string|switch|vector|while)\b/,function:{pattern:/((?:^|[{;])[ \t]*)[a-z_]\w*\b(?!\s*(?:\.(?!\.)|[[{=]))|\b[a-z_]\w*(?=[ \t]*\()/im,lookbehind:!0,greedy:!0},"tensor-punctuation":{pattern:/<<|>>/,alias:"punctuation"},operator:/\+[+=]?|-[-=]?|&&|\|\||[<>]=?|[*\/!=]=?|[%^]/,punctuation:/[.,:;?\[\](){}]/},Prism.languages.mel.code.inside.statement.inside=Prism.languages.mel; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mongodb.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mongodb.min.js index 52c6572b22..a71210d1ff 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mongodb.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-mongodb.min.js @@ -1 +1 @@ -!function($){var e=["$eq","$gt","$gte","$in","$lt","$lte","$ne","$nin","$and","$not","$nor","$or","$exists","$type","$expr","$jsonSchema","$mod","$regex","$text","$where","$geoIntersects","$geoWithin","$near","$nearSphere","$all","$elemMatch","$size","$bitsAllClear","$bitsAllSet","$bitsAnyClear","$bitsAnySet","$comment","$elemMatch","$meta","$slice","$currentDate","$inc","$min","$max","$mul","$rename","$set","$setOnInsert","$unset","$addToSet","$pop","$pull","$push","$pullAll","$each","$position","$slice","$sort","$bit","$addFields","$bucket","$bucketAuto","$collStats","$count","$currentOp","$facet","$geoNear","$graphLookup","$group","$indexStats","$limit","$listLocalSessions","$listSessions","$lookup","$match","$merge","$out","$planCacheStats","$project","$redact","$replaceRoot","$replaceWith","$sample","$set","$skip","$sort","$sortByCount","$unionWith","$unset","$unwind","$setWindowFields","$abs","$accumulator","$acos","$acosh","$add","$addToSet","$allElementsTrue","$and","$anyElementTrue","$arrayElemAt","$arrayToObject","$asin","$asinh","$atan","$atan2","$atanh","$avg","$binarySize","$bsonSize","$ceil","$cmp","$concat","$concatArrays","$cond","$convert","$cos","$dateFromParts","$dateToParts","$dateFromString","$dateToString","$dayOfMonth","$dayOfWeek","$dayOfYear","$degreesToRadians","$divide","$eq","$exp","$filter","$first","$floor","$function","$gt","$gte","$hour","$ifNull","$in","$indexOfArray","$indexOfBytes","$indexOfCP","$isArray","$isNumber","$isoDayOfWeek","$isoWeek","$isoWeekYear","$last","$last","$let","$literal","$ln","$log","$log10","$lt","$lte","$ltrim","$map","$max","$mergeObjects","$meta","$min","$millisecond","$minute","$mod","$month","$multiply","$ne","$not","$objectToArray","$or","$pow","$push","$radiansToDegrees","$range","$reduce","$regexFind","$regexFindAll","$regexMatch","$replaceOne","$replaceAll","$reverseArray","$round","$rtrim","$second","$setDifference","$setEquals","$setIntersection","$setIsSubset","$setUnion","$size","$sin","$slice","$split","$sqrt","$stdDevPop","$stdDevSamp","$strcasecmp","$strLenBytes","$strLenCP","$substr","$substrBytes","$substrCP","$subtract","$sum","$switch","$tan","$toBool","$toDate","$toDecimal","$toDouble","$toInt","$toLong","$toObjectId","$toString","$toLower","$toUpper","$trim","$trunc","$type","$week","$year","$zip","$count","$dateAdd","$dateDiff","$dateSubtract","$dateTrunc","$getField","$rand","$sampleRate","$setField","$unsetField","$comment","$explain","$hint","$max","$maxTimeMS","$min","$orderby","$query","$returnKey","$showDiskLoc","$natural"],t="(?:"+(e=e.map(function($){return $.replace("$","\\$")})).join("|")+")\\b";$.languages.mongodb=$.languages.extend("javascript",{}),$.languages.insertBefore("mongodb","string",{property:{pattern:/(?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)(?=\s*:)/,greedy:!0,inside:{keyword:RegExp("^(['\"])?"+t+"(?:\\1)?$")}}}),$.languages.mongodb.string.inside={url:{pattern:/https?:\/\/[-\w@:%.+~#=]{1,256}\.[a-z0-9()]{1,6}\b[-\w()@:%+.~#?&/=]*/i,greedy:!0},entity:{pattern:/\b(?:(?:[01]?\d\d?|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d\d?|2[0-4]\d|25[0-5])\b/,greedy:!0}},$.languages.insertBefore("mongodb","constant",{builtin:{pattern:RegExp("\\b(?:"+["ObjectId","Code","BinData","DBRef","Timestamp","NumberLong","NumberDecimal","MaxKey","MinKey","RegExp","ISODate","UUID"].join("|")+")\\b"),alias:"keyword"}})}(Prism); \ No newline at end of file +!function($){var e=["$eq","$gt","$gte","$in","$lt","$lte","$ne","$nin","$and","$not","$nor","$or","$exists","$type","$expr","$jsonSchema","$mod","$regex","$text","$where","$geoIntersects","$geoWithin","$near","$nearSphere","$all","$elemMatch","$size","$bitsAllClear","$bitsAllSet","$bitsAnyClear","$bitsAnySet","$comment","$elemMatch","$meta","$slice","$currentDate","$inc","$min","$max","$mul","$rename","$set","$setOnInsert","$unset","$addToSet","$pop","$pull","$push","$pullAll","$each","$position","$slice","$sort","$bit","$addFields","$bucket","$bucketAuto","$collStats","$count","$currentOp","$facet","$geoNear","$graphLookup","$group","$indexStats","$limit","$listLocalSessions","$listSessions","$lookup","$match","$merge","$out","$planCacheStats","$project","$redact","$replaceRoot","$replaceWith","$sample","$set","$skip","$sort","$sortByCount","$unionWith","$unset","$unwind","$setWindowFields","$abs","$accumulator","$acos","$acosh","$add","$addToSet","$allElementsTrue","$and","$anyElementTrue","$arrayElemAt","$arrayToObject","$asin","$asinh","$atan","$atan2","$atanh","$avg","$binarySize","$bsonSize","$ceil","$cmp","$concat","$concatArrays","$cond","$convert","$cos","$dateFromParts","$dateToParts","$dateFromString","$dateToString","$dayOfMonth","$dayOfWeek","$dayOfYear","$degreesToRadians","$divide","$eq","$exp","$filter","$first","$floor","$function","$gt","$gte","$hour","$ifNull","$in","$indexOfArray","$indexOfBytes","$indexOfCP","$isArray","$isNumber","$isoDayOfWeek","$isoWeek","$isoWeekYear","$last","$last","$let","$literal","$ln","$log","$log10","$lt","$lte","$ltrim","$map","$max","$mergeObjects","$meta","$min","$millisecond","$minute","$mod","$month","$multiply","$ne","$not","$objectToArray","$or","$pow","$push","$radiansToDegrees","$range","$reduce","$regexFind","$regexFindAll","$regexMatch","$replaceOne","$replaceAll","$reverseArray","$round","$rtrim","$second","$setDifference","$setEquals","$setIntersection","$setIsSubset","$setUnion","$size","$sin","$slice","$split","$sqrt","$stdDevPop","$stdDevSamp","$strcasecmp","$strLenBytes","$strLenCP","$substr","$substrBytes","$substrCP","$subtract","$sum","$switch","$tan","$toBool","$toDate","$toDecimal","$toDouble","$toInt","$toLong","$toObjectId","$toString","$toLower","$toUpper","$trim","$trunc","$type","$week","$year","$zip","$count","$dateAdd","$dateDiff","$dateSubtract","$dateTrunc","$getField","$rand","$sampleRate","$setField","$unsetField","$comment","$explain","$hint","$max","$maxTimeMS","$min","$orderby","$query","$returnKey","$showDiskLoc","$natural"],t="(?:"+(e=e.map((function($){return $.replace("$","\\$")}))).join("|")+")\\b";$.languages.mongodb=$.languages.extend("javascript",{}),$.languages.insertBefore("mongodb","string",{property:{pattern:/(?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)(?=\s*:)/,greedy:!0,inside:{keyword:RegExp("^(['\"])?"+t+"(?:\\1)?$")}}}),$.languages.mongodb.string.inside={url:{pattern:/https?:\/\/[-\w@:%.+~#=]{1,256}\.[a-z0-9()]{1,6}\b[-\w()@:%+.~#?&/=]*/i,greedy:!0},entity:{pattern:/\b(?:(?:[01]?\d\d?|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d\d?|2[0-4]\d|25[0-5])\b/,greedy:!0}},$.languages.insertBefore("mongodb","constant",{builtin:{pattern:RegExp("\\b(?:"+["ObjectId","Code","BinData","DBRef","Timestamp","NumberLong","NumberDecimal","MaxKey","MinKey","RegExp","ISODate","UUID"].join("|")+")\\b"),alias:"keyword"}})}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-naniscript.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-naniscript.min.js index 627c052acf..5df872e5f8 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-naniscript.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-naniscript.min.js @@ -1 +1 @@ -!function(e){var a=/\{[^\r\n\[\]{}]*\}/,n={"quoted-string":{pattern:/"(?:[^"\\]|\\.)*"/,alias:"operator"},"command-param-id":{pattern:/(\s)\w+:/,lookbehind:!0,alias:"property"},"command-param-value":[{pattern:a,alias:"selector"},{pattern:/([\t ])\S+/,lookbehind:!0,greedy:!0,alias:"operator"},{pattern:/\S(?:.*\S)?/,alias:"operator"}]};function t(e){return"string"==typeof e?e:Array.isArray(e)?e.map(t).join(""):t(e.content)}e.languages.naniscript={comment:{pattern:/^([\t ]*);.*/m,lookbehind:!0},define:{pattern:/^>.+/m,alias:"tag",inside:{value:{pattern:/(^>\w+[\t ]+)(?!\s)[^{}\r\n]+/,lookbehind:!0,alias:"operator"},key:{pattern:/(^>)\w+/,lookbehind:!0}}},label:{pattern:/^([\t ]*)#[\t ]*\w+[\t ]*$/m,lookbehind:!0,alias:"regex"},command:{pattern:/^([\t ]*)@\w+(?=[\t ]|$).*/m,lookbehind:!0,alias:"function",inside:{"command-name":/^@\w+/,expression:{pattern:a,greedy:!0,alias:"selector"},"command-params":{pattern:/\s*\S[\s\S]*/,inside:n}}},"generic-text":{pattern:/(^[ \t]*)[^#@>;\s].*/m,lookbehind:!0,alias:"punctuation",inside:{"escaped-char":/\\[{}\[\]"]/,expression:{pattern:a,greedy:!0,alias:"selector"},"inline-command":{pattern:/\[[\t ]*\w[^\r\n\[\]]*\]/,greedy:!0,alias:"function",inside:{"command-params":{pattern:/(^\[[\t ]*\w+\b)[\s\S]+(?=\]$)/,lookbehind:!0,inside:n},"command-param-name":{pattern:/^(\[[\t ]*)\w+/,lookbehind:!0,alias:"name"},"start-stop-char":/[\[\]]/}}}}},e.languages.nani=e.languages.naniscript,e.hooks.add("after-tokenize",function(e){e.tokens.forEach(function(e){if("string"!=typeof e&&"generic-text"===e.type){var a=t(e);(function(e){for(var a=[],n=0;n.+/m,alias:"tag",inside:{value:{pattern:/(^>\w+[\t ]+)(?!\s)[^{}\r\n]+/,lookbehind:!0,alias:"operator"},key:{pattern:/(^>)\w+/,lookbehind:!0}}},label:{pattern:/^([\t ]*)#[\t ]*\w+[\t ]*$/m,lookbehind:!0,alias:"regex"},command:{pattern:/^([\t ]*)@\w+(?=[\t ]|$).*/m,lookbehind:!0,alias:"function",inside:{"command-name":/^@\w+/,expression:{pattern:a,greedy:!0,alias:"selector"},"command-params":{pattern:/\s*\S[\s\S]*/,inside:n}}},"generic-text":{pattern:/(^[ \t]*)[^#@>;\s].*/m,lookbehind:!0,alias:"punctuation",inside:{"escaped-char":/\\[{}\[\]"]/,expression:{pattern:a,greedy:!0,alias:"selector"},"inline-command":{pattern:/\[[\t ]*\w[^\r\n\[\]]*\]/,greedy:!0,alias:"function",inside:{"command-params":{pattern:/(^\[[\t ]*\w+\b)[\s\S]+(?=\]$)/,lookbehind:!0,inside:n},"command-param-name":{pattern:/^(\[[\t ]*)\w+/,lookbehind:!0,alias:"name"},"start-stop-char":/[\[\]]/}}}}},e.languages.nani=e.languages.naniscript,e.hooks.add("after-tokenize",(function(e){e.tokens.forEach((function(e){if("string"!=typeof e&&"generic-text"===e.type){var a=t(e);(function(e){for(var a=[],n=0;n/, + alias: 'punctuation' + }, + + 'operator': /\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/, + + 'punctuation': /[(),.:;@\[\]{}]/ + }; +}(Prism)); diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-odin.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-odin.min.js new file mode 100644 index 0000000000..5abcdf70c8 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-odin.min.js @@ -0,0 +1 @@ +!function(e){var t=/\\(?:["'\\abefnrtv]|0[0-7]{2}|U[\dA-Fa-f]{6}|u[\dA-Fa-f]{4}|x[\dA-Fa-f]{2})/;e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:/'(?:\\(?:.|[0Uux][0-9A-Fa-f]{1,6})|[^\n\r'\\])'/,greedy:!0,inside:{symbol:t}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:/"(?:\\.|[^\n\r"\\])*"/,greedy:!0,inside:{symbol:t}}],directive:{pattern:/#\w+/,alias:"property"},number:/\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.(?!\.)\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?(?!\w)/,discard:{pattern:/\b_\b/,alias:"keyword"},"procedure-definition":{pattern:/\b\w+(?=[ \t]*(?::\s*){2}proc\b)/,alias:"function"},keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,"procedure-name":{pattern:/\b\w+(?=[ \t]*\()/,alias:"function"},boolean:/\b(?:false|nil|true)\b/,"constant-parameter-sign":{pattern:/\$/,alias:"important"},undefined:{pattern:/---/,alias:"operator"},arrow:{pattern:/->/,alias:"punctuation"},operator:/\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/[(),.:;@\[\]{}]/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-parigp.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-parigp.min.js index fcc023dc58..d7ed6e9e4f 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-parigp.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-parigp.min.js @@ -1 +1 @@ -Prism.languages.parigp={comment:/\/\*[\s\S]*?\*\/|\\\\.*/,string:{pattern:/"(?:[^"\\\r\n]|\\.)*"/,greedy:!0},keyword:function(){var r=["breakpoint","break","dbg_down","dbg_err","dbg_up","dbg_x","forcomposite","fordiv","forell","forpart","forprime","forstep","forsubgroup","forvec","for","iferr","if","local","my","next","return","until","while"];return r=r.map(function(r){return r.split("").join(" *")}).join("|"),RegExp("\\b(?:"+r+")\\b")}(),function:/\b\w(?:[\w ]*\w)?(?= *\()/,number:{pattern:/((?:\. *\. *)?)(?:\b\d(?: *\d)*(?: *(?!\. *\.)\.(?: *\d)*)?|\. *\d(?: *\d)*)(?: *e *(?:[+-] *)?\d(?: *\d)*)?/i,lookbehind:!0},operator:/\. *\.|[*\/!](?: *=)?|%(?: *=|(?: *#)?(?: *')*)?|\+(?: *[+=])?|-(?: *[-=>])?|<(?: *>|(?: *<)?(?: *=)?)?|>(?: *>)?(?: *=)?|=(?: *=){0,2}|\\(?: *\/)?(?: *=)?|&(?: *&)?|\| *\||['#~^]/,punctuation:/[\[\]{}().,:;|]/}; \ No newline at end of file +Prism.languages.parigp={comment:/\/\*[\s\S]*?\*\/|\\\\.*/,string:{pattern:/"(?:[^"\\\r\n]|\\.)*"/,greedy:!0},keyword:function(){var r=["breakpoint","break","dbg_down","dbg_err","dbg_up","dbg_x","forcomposite","fordiv","forell","forpart","forprime","forstep","forsubgroup","forvec","for","iferr","if","local","my","next","return","until","while"];return r=r.map((function(r){return r.split("").join(" *")})).join("|"),RegExp("\\b(?:"+r+")\\b")}(),function:/\b\w(?:[\w ]*\w)?(?= *\()/,number:{pattern:/((?:\. *\. *)?)(?:\b\d(?: *\d)*(?: *(?!\. *\.)\.(?: *\d)*)?|\. *\d(?: *\d)*)(?: *e *(?:[+-] *)?\d(?: *\d)*)?/i,lookbehind:!0},operator:/\. *\.|[*\/!](?: *=)?|%(?: *=|(?: *#)?(?: *')*)?|\+(?: *[+=])?|-(?: *[-=>])?|<(?: *>|(?: *<)?(?: *=)?)?|>(?: *>)?(?: *=)?|=(?: *=){0,2}|\\(?: *\/)?(?: *=)?|&(?: *&)?|\| *\||['#~^]/,punctuation:/[\[\]{}().,:;|]/}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pascaligo.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pascaligo.min.js index fe17122272..85c18b3479 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pascaligo.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pascaligo.min.js @@ -1 +1 @@ -!function(e){var n="(?:\\b\\w+(?:)?|)".replace(//g,function(){return"\\((?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))*\\)"}),t=e.languages.pascaligo={comment:/\(\*[\s\S]+?\*\)|\/\/.*/,string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1|\^[a-z]/i,greedy:!0},"class-name":[{pattern:RegExp("(\\btype\\s+\\w+\\s+is\\s+)".replace(//g,function(){return n}),"i"),lookbehind:!0,inside:null},{pattern:RegExp("(?=\\s+is\\b)".replace(//g,function(){return n}),"i"),inside:null},{pattern:RegExp("(:\\s*)".replace(//g,function(){return n})),lookbehind:!0,inside:null}],keyword:{pattern:/(^|[^&])\b(?:begin|block|case|const|else|end|fail|for|from|function|if|is|nil|of|remove|return|skip|then|type|var|while|with)\b/i,lookbehind:!0},boolean:{pattern:/(^|[^&])\b(?:False|True)\b/i,lookbehind:!0},builtin:{pattern:/(^|[^&])\b(?:bool|int|list|map|nat|record|string|unit)\b/i,lookbehind:!0},function:/\b\w+(?=\s*\()/,number:[/%[01]+|&[0-7]+|\$[a-f\d]+/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?(?:mtz|n)?/i],operator:/->|=\/=|\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=|]|\b(?:and|mod|or)\b/,punctuation:/\(\.|\.\)|[()\[\]:;,.{}]/},i=["comment","keyword","builtin","operator","punctuation"].reduce(function(e,n){return e[n]=t[n],e},{});t["class-name"].forEach(function(e){e.inside=i})}(Prism); \ No newline at end of file +!function(e){var n="(?:\\b\\w+(?:)?|)".replace(//g,(function(){return"\\((?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))*\\)"})),t=e.languages.pascaligo={comment:/\(\*[\s\S]+?\*\)|\/\/.*/,string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1|\^[a-z]/i,greedy:!0},"class-name":[{pattern:RegExp("(\\btype\\s+\\w+\\s+is\\s+)".replace(//g,(function(){return n})),"i"),lookbehind:!0,inside:null},{pattern:RegExp("(?=\\s+is\\b)".replace(//g,(function(){return n})),"i"),inside:null},{pattern:RegExp("(:\\s*)".replace(//g,(function(){return n}))),lookbehind:!0,inside:null}],keyword:{pattern:/(^|[^&])\b(?:begin|block|case|const|else|end|fail|for|from|function|if|is|nil|of|remove|return|skip|then|type|var|while|with)\b/i,lookbehind:!0},boolean:{pattern:/(^|[^&])\b(?:False|True)\b/i,lookbehind:!0},builtin:{pattern:/(^|[^&])\b(?:bool|int|list|map|nat|record|string|unit)\b/i,lookbehind:!0},function:/\b\w+(?=\s*\()/,number:[/%[01]+|&[0-7]+|\$[a-f\d]+/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?(?:mtz|n)?/i],operator:/->|=\/=|\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=|]|\b(?:and|mod|or)\b/,punctuation:/\(\.|\.\)|[()\[\]:;,.{}]/},i=["comment","keyword","builtin","operator","punctuation"].reduce((function(e,n){return e[n]=t[n],e}),{});t["class-name"].forEach((function(e){e.inside=i}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-perl.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-perl.min.js index 1446c7285f..ab71b1da15 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-perl.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-perl.min.js @@ -1 +1 @@ -!function(e){var n="(?:\\((?:[^()\\\\]|\\\\[^])*\\)|\\{(?:[^{}\\\\]|\\\\[^])*\\}|\\[(?:[^[\\]\\\\]|\\\\[^])*\\]|<(?:[^<>\\\\]|\\\\[^])*>)";Prism.languages.perl={comment:[{pattern:/(^\s*)=\w[\s\S]*?=cut.*/m,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0,greedy:!0}],string:[{pattern:RegExp("\\b(?:q|qq|qw|qx)(?![a-zA-Z0-9])\\s*(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","([a-zA-Z0-9])(?:(?!\\2)[^\\\\]|\\\\[^])*\\2",n].join("|")+")"),greedy:!0},{pattern:/("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/'(?:[^'\\\r\n]|\\.)*'/,greedy:!0}],regex:[{pattern:RegExp("\\b(?:m|qr)(?![a-zA-Z0-9])\\s*(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","([a-zA-Z0-9])(?:(?!\\2)[^\\\\]|\\\\[^])*\\2",n].join("|")+")[msixpodualngc]*"),greedy:!0},{pattern:RegExp("(^|[^-])\\b(?:s|tr|y)(?![a-zA-Z0-9])\\s*(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\2)[^\\\\]|\\\\[^])*\\2(?:(?!\\2)[^\\\\]|\\\\[^])*\\2","([a-zA-Z0-9])(?:(?!\\3)[^\\\\]|\\\\[^])*\\3(?:(?!\\3)[^\\\\]|\\\\[^])*\\3",n+"\\s*"+n].join("|")+")[msixpodualngcer]*"),lookbehind:!0,greedy:!0},{pattern:/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|x|xor)\b))/,greedy:!0}],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+(?![\w$]))+(?:::)*/,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*?>|\b_\b/,alias:"symbol"},"v-string":{pattern:/v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,alias:"string"},function:{pattern:/(\bsub[ \t]+)\w+/,lookbehind:!0},keyword:/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\b/,punctuation:/[{}[\];(),:]/}}(); \ No newline at end of file +!function(e){var n="(?:\\((?:[^()\\\\]|\\\\[^])*\\)|\\{(?:[^{}\\\\]|\\\\[^])*\\}|\\[(?:[^[\\]\\\\]|\\\\[^])*\\]|<(?:[^<>\\\\]|\\\\[^])*>)";e.languages.perl={comment:[{pattern:/(^\s*)=\w[\s\S]*?=cut.*/m,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0,greedy:!0}],string:[{pattern:RegExp("\\b(?:q|qq|qw|qx)(?![a-zA-Z0-9])\\s*(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","([a-zA-Z0-9])(?:(?!\\2)[^\\\\]|\\\\[^])*\\2",n].join("|")+")"),greedy:!0},{pattern:/("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/'(?:[^'\\\r\n]|\\.)*'/,greedy:!0}],regex:[{pattern:RegExp("\\b(?:m|qr)(?![a-zA-Z0-9])\\s*(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[^])*\\1","([a-zA-Z0-9])(?:(?!\\2)[^\\\\]|\\\\[^])*\\2",n].join("|")+")[msixpodualngc]*"),greedy:!0},{pattern:RegExp("(^|[^-])\\b(?:s|tr|y)(?![a-zA-Z0-9])\\s*(?:"+["([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\2)[^\\\\]|\\\\[^])*\\2(?:(?!\\2)[^\\\\]|\\\\[^])*\\2","([a-zA-Z0-9])(?:(?!\\3)[^\\\\]|\\\\[^])*\\3(?:(?!\\3)[^\\\\]|\\\\[^])*\\3",n+"\\s*"+n].join("|")+")[msixpodualngcer]*"),lookbehind:!0,greedy:!0},{pattern:/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|x|xor)\b))/,greedy:!0}],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+(?![\w$]))+(?:::)*/,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*?>|\b_\b/,alias:"symbol"},"v-string":{pattern:/v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,alias:"string"},function:{pattern:/(\bsub[ \t]+)\w+/,lookbehind:!0},keyword:/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\b/,punctuation:/[{}[\];(),:]/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-php.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-php.js index 30ac2dc6af..79e8bd1cda 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-php.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-php.js @@ -67,7 +67,7 @@ lookbehind: true }, { - pattern: /(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string|void)\b/i, + pattern: /(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i, alias: 'return-type', greedy: true, lookbehind: true @@ -100,12 +100,12 @@ // // keywords cannot be preceded by "->" // the complex lookbehind means `(?|::)\s*)` - pattern: /((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i, + pattern: /((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i, lookbehind: true } ], 'argument-name': { - pattern: /([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i, + pattern: /([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i, lookbehind: true }, 'class-name': [ diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-php.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-php.min.js index 75f1f18df3..974a4270a8 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-php.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-php.min.js @@ -1 +1 @@ -!function(a){var e=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,t=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],i=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,n=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;a.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:e,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:i,operator:n,punctuation:s};var l={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:a.languages.php},r=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:l}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:l}}];a.languages.insertBefore("php","variable",{string:r,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:e,string:r,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:i,operator:n,punctuation:s}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),a.hooks.add("before-tokenize",function(e){if(/<\?/.test(e.code)){a.languages["markup-templating"].buildPlaceholders(e,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}}),a.hooks.add("after-tokenize",function(e){a.languages["markup-templating"].tokenizePlaceholders(e,"php")})}(Prism); \ No newline at end of file +!function(e){var a=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,t=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],i=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,n=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:a,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:i,operator:n,punctuation:s};var l={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},r=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:l}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:l}}];e.languages.insertBefore("php","variable",{string:r,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:a,string:r,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:i,operator:n,punctuation:s}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(a){/<\?/.test(a.code)&&e.languages["markup-templating"].buildPlaceholders(a,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"php")}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-plant-uml.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-plant-uml.js new file mode 100644 index 0000000000..70dd234507 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-plant-uml.js @@ -0,0 +1,103 @@ +(function (Prism) { + var variable = /\$\w+|%[a-z]+%/; + + var arrowAttr = /\[[^[\]]*\]/.source; + var arrowDirection = /(?:[drlu]|do|down|le|left|ri|right|up)/.source; + var arrowBody = '(?:-+' + arrowDirection + '-+|\\.+' + arrowDirection + '\\.+|-+(?:' + arrowAttr + '-*)?|' + arrowAttr + '-+|\\.+(?:' + arrowAttr + '\\.*)?|' + arrowAttr + '\\.+)'; + var arrowLeft = /(?:<{1,2}|\/{1,2}|\\{1,2}|<\||[#*^+}xo])/.source; + var arrowRight = /(?:>{1,2}|\/{1,2}|\\{1,2}|\|>|[#*^+{xo])/.source; + var arrowPrefix = /[[?]?[ox]?/.source; + var arrowSuffix = /[ox]?[\]?]?/.source; + var arrow = + arrowPrefix + + '(?:' + + arrowBody + arrowRight + + '|' + + arrowLeft + arrowBody + '(?:' + arrowRight + ')?' + + ')' + + arrowSuffix; + + Prism.languages['plant-uml'] = { + 'comment': { + pattern: /(^[ \t]*)(?:'.*|\/'[\s\S]*?'\/)/m, + lookbehind: true, + greedy: true + }, + 'preprocessor': { + pattern: /(^[ \t]*)!.*/m, + lookbehind: true, + greedy: true, + alias: 'property', + inside: { + 'variable': variable + } + }, + 'delimiter': { + pattern: /(^[ \t]*)@(?:end|start)uml\b/m, + lookbehind: true, + greedy: true, + alias: 'punctuation' + }, + + 'arrow': { + pattern: RegExp(/(^|[^-.<>?|\\[\]ox])/.source + arrow + /(?![-.<>?|\\\]ox])/.source), + lookbehind: true, + greedy: true, + alias: 'operator', + inside: { + 'expression': { + pattern: /(\[)[^[\]]+(?=\])/, + lookbehind: true, + inside: null // see below + }, + 'punctuation': /\[(?=$|\])|^\]/ + } + }, + + 'string': { + pattern: /"[^"]*"/, + greedy: true + }, + 'text': { + pattern: /(\[[ \t]*[\r\n]+(?![\r\n]))[^\]]*(?=\])/, + lookbehind: true, + greedy: true, + alias: 'string' + }, + + 'keyword': [ + { + pattern: /^([ \t]*)(?:abstract\s+class|end\s+(?:box|fork|group|merge|note|ref|split|title)|(?:fork|split)(?:\s+again)?|activate|actor|agent|alt|annotation|artifact|autoactivate|autonumber|backward|binary|boundary|box|break|caption|card|case|circle|class|clock|cloud|collections|component|concise|control|create|critical|database|deactivate|destroy|detach|diamond|else|elseif|end|end[hr]note|endif|endswitch|endwhile|entity|enum|file|folder|footer|frame|group|[hr]?note|header|hexagon|hide|if|interface|label|legend|loop|map|namespace|network|newpage|node|nwdiag|object|opt|package|page|par|participant|person|queue|rectangle|ref|remove|repeat|restore|return|robust|scale|set|show|skinparam|stack|start|state|stop|storage|switch|title|together|usecase|usecase\/|while)(?=\s|$)/m, + lookbehind: true, + greedy: true + }, + /\b(?:elseif|equals|not|while)(?=\s*\()/, + /\b(?:as|is|then)\b/ + ], + + 'divider': { + pattern: /^==.+==$/m, + greedy: true, + alias: 'important' + }, + + 'time': { + pattern: /@(?:\d+(?:[:/]\d+){2}|[+-]?\d+|:[a-z]\w*(?:[+-]\d+)?)\b/i, + greedy: true, + alias: 'number' + }, + + 'color': { + pattern: /#(?:[a-z_]+|[a-fA-F0-9]+)\b/, + alias: 'symbol' + }, + 'variable': variable, + + 'punctuation': /[:,;()[\]{}]|\.{3}/ + }; + + Prism.languages['plant-uml'].arrow.inside.expression.inside = Prism.languages['plant-uml']; + + Prism.languages['plantuml'] = Prism.languages['plant-uml']; + +}(Prism)); diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-plant-uml.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-plant-uml.min.js new file mode 100644 index 0000000000..078bc25e9a --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-plant-uml.min.js @@ -0,0 +1 @@ +!function(e){var t=/\$\w+|%[a-z]+%/;e.languages["plant-uml"]={comment:{pattern:/(^[ \t]*)(?:'.*|\/'[\s\S]*?'\/)/m,lookbehind:!0,greedy:!0},preprocessor:{pattern:/(^[ \t]*)!.*/m,lookbehind:!0,greedy:!0,alias:"property",inside:{variable:t}},delimiter:{pattern:/(^[ \t]*)@(?:end|start)uml\b/m,lookbehind:!0,greedy:!0,alias:"punctuation"},arrow:{pattern:RegExp("(^|[^-.<>?|\\\\[\\]ox])[[?]?[ox]?(?:(?:-+(?:[drlu]|do|down|le|left|ri|right|up)-+|\\.+(?:[drlu]|do|down|le|left|ri|right|up)\\.+|-+(?:\\[[^[\\]]*\\]-*)?|\\[[^[\\]]*\\]-+|\\.+(?:\\[[^[\\]]*\\]\\.*)?|\\[[^[\\]]*\\]\\.+)(?:>{1,2}|/{1,2}|\\\\{1,2}|\\|>|[#*^+{xo])|(?:<{1,2}|/{1,2}|\\\\{1,2}|<\\||[#*^+}xo])(?:-+(?:[drlu]|do|down|le|left|ri|right|up)-+|\\.+(?:[drlu]|do|down|le|left|ri|right|up)\\.+|-+(?:\\[[^[\\]]*\\]-*)?|\\[[^[\\]]*\\]-+|\\.+(?:\\[[^[\\]]*\\]\\.*)?|\\[[^[\\]]*\\]\\.+)(?:(?:>{1,2}|/{1,2}|\\\\{1,2}|\\|>|[#*^+{xo]))?)[ox]?[\\]?]?(?![-.<>?|\\\\\\]ox])"),lookbehind:!0,greedy:!0,alias:"operator",inside:{expression:{pattern:/(\[)[^[\]]+(?=\])/,lookbehind:!0,inside:null},punctuation:/\[(?=$|\])|^\]/}},string:{pattern:/"[^"]*"/,greedy:!0},text:{pattern:/(\[[ \t]*[\r\n]+(?![\r\n]))[^\]]*(?=\])/,lookbehind:!0,greedy:!0,alias:"string"},keyword:[{pattern:/^([ \t]*)(?:abstract\s+class|end\s+(?:box|fork|group|merge|note|ref|split|title)|(?:fork|split)(?:\s+again)?|activate|actor|agent|alt|annotation|artifact|autoactivate|autonumber|backward|binary|boundary|box|break|caption|card|case|circle|class|clock|cloud|collections|component|concise|control|create|critical|database|deactivate|destroy|detach|diamond|else|elseif|end|end[hr]note|endif|endswitch|endwhile|entity|enum|file|folder|footer|frame|group|[hr]?note|header|hexagon|hide|if|interface|label|legend|loop|map|namespace|network|newpage|node|nwdiag|object|opt|package|page|par|participant|person|queue|rectangle|ref|remove|repeat|restore|return|robust|scale|set|show|skinparam|stack|start|state|stop|storage|switch|title|together|usecase|usecase\/|while)(?=\s|$)/m,lookbehind:!0,greedy:!0},/\b(?:elseif|equals|not|while)(?=\s*\()/,/\b(?:as|is|then)\b/],divider:{pattern:/^==.+==$/m,greedy:!0,alias:"important"},time:{pattern:/@(?:\d+(?:[:/]\d+){2}|[+-]?\d+|:[a-z]\w*(?:[+-]\d+)?)\b/i,greedy:!0,alias:"number"},color:{pattern:/#(?:[a-z_]+|[a-fA-F0-9]+)\b/,alias:"symbol"},variable:t,punctuation:/[:,;()[\]{}]|\.{3}/},e.languages["plant-uml"].arrow.inside.expression.inside=e.languages["plant-uml"],e.languages.plantuml=e.languages["plant-uml"]}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-powershell.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-powershell.min.js index 7e969c61f2..80442e7041 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-powershell.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-powershell.min.js @@ -1 +1 @@ -!function(e){var i=Prism.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};i.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:i},boolean:i.boolean,variable:i.variable}}(); \ No newline at end of file +!function(e){var i=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};i.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:i},boolean:i.boolean,variable:i.variable}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-properties.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-properties.js index e9e01ff1bf..a5834fc52b 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-properties.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-properties.js @@ -1,9 +1,13 @@ Prism.languages.properties = { 'comment': /^[ \t]*[#!].*$/m, - 'attr-value': { + 'value': { pattern: /(^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?: *[=:] *(?! )| ))(?:\\(?:\r\n|[\s\S])|[^\\\r\n])+/m, - lookbehind: true + lookbehind: true, + alias: 'attr-value' + }, + 'key': { + pattern: /^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?= *[=:]| )/m, + alias: 'attr-name' }, - 'attr-name': /^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?= *[=:]| )/m, 'punctuation': /[=:]/ }; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-properties.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-properties.min.js index d90930c9c1..5976d47656 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-properties.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-properties.min.js @@ -1 +1 @@ -Prism.languages.properties={comment:/^[ \t]*[#!].*$/m,"attr-value":{pattern:/(^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?: *[=:] *(?! )| ))(?:\\(?:\r\n|[\s\S])|[^\\\r\n])+/m,lookbehind:!0},"attr-name":/^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?= *[=:]| )/m,punctuation:/[=:]/}; \ No newline at end of file +Prism.languages.properties={comment:/^[ \t]*[#!].*$/m,value:{pattern:/(^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?: *[=:] *(?! )| ))(?:\\(?:\r\n|[\s\S])|[^\\\r\n])+/m,lookbehind:!0,alias:"attr-value"},key:{pattern:/^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?= *[=:]| )/m,alias:"attr-name"},punctuation:/[=:]/}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pug.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pug.min.js index 4f2d7781e9..265211a1d2 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pug.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pug.min.js @@ -1 +1 @@ -!function(e){e.languages.pug={comment:{pattern:/(^([\t ]*))\/\/.*(?:(?:\r?\n|\r)\2[\t ].+)*/m,lookbehind:!0},"multiline-script":{pattern:/(^([\t ]*)script\b.*\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:e.languages.javascript},filter:{pattern:/(^([\t ]*)):.+(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},text:/\S[\s\S]*/}},"multiline-plain-text":{pattern:/(^([\t ]*)[\w\-#.]+\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0},markup:{pattern:/(^[\t ]*)<.+/m,lookbehind:!0,inside:e.languages.markup},doctype:{pattern:/((?:^|\n)[\t ]*)doctype(?: .+)?/,lookbehind:!0},"flow-control":{pattern:/(^[\t ]*)(?:case|default|each|else|if|unless|when|while)\b(?: .+)?/m,lookbehind:!0,inside:{each:{pattern:/^each .+? in\b/,inside:{keyword:/\b(?:each|in)\b/,punctuation:/,/}},branch:{pattern:/^(?:case|default|else|if|unless|when|while)\b/,alias:"keyword"},rest:e.languages.javascript}},keyword:{pattern:/(^[\t ]*)(?:append|block|extends|include|prepend)\b.+/m,lookbehind:!0},mixin:[{pattern:/(^[\t ]*)mixin .+/m,lookbehind:!0,inside:{keyword:/^mixin/,function:/\w+(?=\s*\(|\s*$)/,punctuation:/[(),.]/}},{pattern:/(^[\t ]*)\+.+/m,lookbehind:!0,inside:{name:{pattern:/^\+\w+/,alias:"function"},rest:e.languages.javascript}}],script:{pattern:/(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]).+/m,lookbehind:!0,inside:e.languages.javascript},"plain-text":{pattern:/(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]).+/m,lookbehind:!0},tag:{pattern:/(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,lookbehind:!0,inside:{attributes:[{pattern:/&[^(]+\([^)]+\)/,inside:e.languages.javascript},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*(?!\s))(?:\{[^}]*\}|[^,)\r\n]+)/,lookbehind:!0,inside:e.languages.javascript},"attr-name":/[\w-]+(?=\s*!?=|\s*[,)])/,punctuation:/[!=(),]+/}}],punctuation:/:/,"attr-id":/#[\w\-]+/,"attr-class":/\.[\w\-]+/}},code:[{pattern:/(^[\t ]*(?:-|!?=)).+/m,lookbehind:!0,inside:e.languages.javascript}],punctuation:/[.\-!=|]+/};for(var t=[{filter:"atpl",language:"twig"},{filter:"coffee",language:"coffeescript"},"ejs","handlebars","less","livescript","markdown",{filter:"sass",language:"scss"},"stylus"],n={},a=0,i=t.length;a(?:(?:\r?\n|\r(?!\n))(?:\\2[\t ].+|\\s*?(?=\r?\n|\r)))+".replace("",function(){return r.filter}),"m"),lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},text:{pattern:/\S[\s\S]*/,alias:[r.language,"language-"+r.language],inside:e.languages[r.language]}}})}e.languages.insertBefore("pug","filter",n)}(Prism); \ No newline at end of file +!function(e){e.languages.pug={comment:{pattern:/(^([\t ]*))\/\/.*(?:(?:\r?\n|\r)\2[\t ].+)*/m,lookbehind:!0},"multiline-script":{pattern:/(^([\t ]*)script\b.*\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:e.languages.javascript},filter:{pattern:/(^([\t ]*)):.+(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},text:/\S[\s\S]*/}},"multiline-plain-text":{pattern:/(^([\t ]*)[\w\-#.]+\.[\t ]*)(?:(?:\r?\n|\r(?!\n))(?:\2[\t ].+|\s*?(?=\r?\n|\r)))+/m,lookbehind:!0},markup:{pattern:/(^[\t ]*)<.+/m,lookbehind:!0,inside:e.languages.markup},doctype:{pattern:/((?:^|\n)[\t ]*)doctype(?: .+)?/,lookbehind:!0},"flow-control":{pattern:/(^[\t ]*)(?:case|default|each|else|if|unless|when|while)\b(?: .+)?/m,lookbehind:!0,inside:{each:{pattern:/^each .+? in\b/,inside:{keyword:/\b(?:each|in)\b/,punctuation:/,/}},branch:{pattern:/^(?:case|default|else|if|unless|when|while)\b/,alias:"keyword"},rest:e.languages.javascript}},keyword:{pattern:/(^[\t ]*)(?:append|block|extends|include|prepend)\b.+/m,lookbehind:!0},mixin:[{pattern:/(^[\t ]*)mixin .+/m,lookbehind:!0,inside:{keyword:/^mixin/,function:/\w+(?=\s*\(|\s*$)/,punctuation:/[(),.]/}},{pattern:/(^[\t ]*)\+.+/m,lookbehind:!0,inside:{name:{pattern:/^\+\w+/,alias:"function"},rest:e.languages.javascript}}],script:{pattern:/(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]).+/m,lookbehind:!0,inside:e.languages.javascript},"plain-text":{pattern:/(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]).+/m,lookbehind:!0},tag:{pattern:/(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,lookbehind:!0,inside:{attributes:[{pattern:/&[^(]+\([^)]+\)/,inside:e.languages.javascript},{pattern:/\([^)]+\)/,inside:{"attr-value":{pattern:/(=\s*(?!\s))(?:\{[^}]*\}|[^,)\r\n]+)/,lookbehind:!0,inside:e.languages.javascript},"attr-name":/[\w-]+(?=\s*!?=|\s*[,)])/,punctuation:/[!=(),]+/}}],punctuation:/:/,"attr-id":/#[\w\-]+/,"attr-class":/\.[\w\-]+/}},code:[{pattern:/(^[\t ]*(?:-|!?=)).+/m,lookbehind:!0,inside:e.languages.javascript}],punctuation:/[.\-!=|]+/};for(var t=[{filter:"atpl",language:"twig"},{filter:"coffee",language:"coffeescript"},"ejs","handlebars","less","livescript","markdown",{filter:"sass",language:"scss"},"stylus"],n={},a=0,i=t.length;a(?:(?:\r?\n|\r(?!\n))(?:\\2[\t ].+|\\s*?(?=\r?\n|\r)))+".replace("",(function(){return r.filter})),"m"),lookbehind:!0,inside:{"filter-name":{pattern:/^:[\w-]+/,alias:"variable"},text:{pattern:/\S[\s\S]*/,alias:[r.language,"language-"+r.language],inside:e.languages[r.language]}}})}e.languages.insertBefore("pug","filter",n)}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pure.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pure.min.js index d747cbfae6..dc8508220d 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pure.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-pure.min.js @@ -1 +1 @@ -!function(r){r.languages.pure={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0},/#!.+/],"inline-lang":{pattern:/%<[\s\S]+?%>/,greedy:!0,inside:{lang:{pattern:/(^%< *)-\*-.+?-\*-/,lookbehind:!0,alias:"comment"},delimiter:{pattern:/^%<.*|%>$/,alias:"punctuation"}}},string:{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0},number:{pattern:/((?:\.\.)?)(?:\b(?:inf|nan)\b|\b0x[\da-f]+|(?:\b(?:0b)?\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?L?)/i,lookbehind:!0},keyword:/\b(?:NULL|ans|break|bt|case|catch|cd|clear|const|def|del|dump|else|end|exit|extern|false|force|help|if|infix[lr]?|interface|let|ls|mem|namespace|nonfix|of|otherwise|outfix|override|postfix|prefix|private|public|pwd|quit|run|save|show|stats|then|throw|trace|true|type|underride|using|when|with)\b/,function:/\b(?:abs|add_(?:addr|constdef|(?:fundef|interface|macdef|typedef)(?:_at)?|vardef)|all|any|applp?|arity|bigintp?|blob(?:_crc|_size|p)?|boolp?|byte_c?string(?:_pointer)?|byte_(?:matrix|pointer)|calloc|cat|catmap|ceil|char[ps]?|check_ptrtag|chr|clear_sentry|clearsym|closurep?|cmatrixp?|cols?|colcat(?:map)?|colmap|colrev|colvector(?:p|seq)?|complex(?:_float_(?:matrix|pointer)|_matrix(?:_view)?|_pointer|p)?|conj|cookedp?|cst|cstring(?:_(?:dup|list|vector))?|curry3?|cyclen?|del_(?:constdef|fundef|interface|macdef|typedef|vardef)|delete|diag(?:mat)?|dim|dmatrixp?|do|double(?:_matrix(?:_view)?|_pointer|p)?|dowith3?|drop|dropwhile|eval(?:cmd)?|exactp|filter|fix|fixity|flip|float(?:_matrix|_pointer)|floor|fold[lr]1?|frac|free|funp?|functionp?|gcd|get(?:_(?:byte|constdef|double|float|fundef|int(?:64)?|interface(?:_typedef)?|long|macdef|pointer|ptrtag|sentry|short|string|typedef|vardef))?|globsym|hash|head|id|im|imatrixp?|index|inexactp|infp|init|insert|int(?:_matrix(?:_view)?|_pointer|p)?|int64_(?:matrix|pointer)|integerp?|iteraten?|iterwhile|join|keys?|lambdap?|last(?:err(?:pos)?)?|lcd|list[2p]?|listmap|make_ptrtag|malloc|map|matcat|matrixp?|max|member|min|nanp|nargs|nmatrixp?|null|numberp?|ord|pack(?:ed)?|pointer(?:_cast|_tag|_type|p)?|pow|pred|ptrtag|put(?:_(?:byte|double|float|int(?:64)?|long|pointer|short|string))?|rationalp?|re|realp?|realloc|recordp?|redim|reduce(?:_with)?|refp?|repeatn?|reverse|rlistp?|round|rows?|rowcat(?:map)?|rowmap|rowrev|rowvector(?:p|seq)?|same|scan[lr]1?|sentry|sgn|short_(?:matrix|pointer)|slice|smatrixp?|sort|split|str|strcat|stream|stride|string(?:_(?:dup|list|vector)|p)?|subdiag(?:mat)?|submat|subseq2?|substr|succ|supdiag(?:mat)?|symbolp?|tail|take|takewhile|thunkp?|transpose|trunc|tuplep?|typep|ubyte|uint(?:64)?|ulong|uncurry3?|unref|unzip3?|update|ushort|vals?|varp?|vector(?:p|seq)?|void|zip3?|zipwith3?)\b/,special:{pattern:/\b__[a-z]+__\b/i,alias:"builtin"},operator:/(?:[!"#$%&'*+,\-.\/:<=>?@\\^`|~\u00a1-\u00bf\u00d7-\u00f7\u20d0-\u2bff]|\b_+\b)+|\b(?:and|div|mod|not|or)\b/,punctuation:/[(){}\[\];,|]/};["c",{lang:"c++",alias:"cpp"},"fortran"].forEach(function(e){var t=e;if("string"!=typeof e&&(t=e.alias,e=e.lang),r.languages[t]){var a={};a["inline-lang-"+t]={pattern:RegExp("%< *-\\*- *\\d* *-\\*-[^]+?%>".replace("",e.replace(/([.+*?\/\\(){}\[\]])/g,"\\$1")),"i"),inside:r.util.clone(r.languages.pure["inline-lang"].inside)},a["inline-lang-"+t].inside.rest=r.util.clone(r.languages[t]),r.languages.insertBefore("pure","inline-lang",a)}}),r.languages.c&&(r.languages.pure["inline-lang"].inside.rest=r.util.clone(r.languages.c))}(Prism); \ No newline at end of file +!function(e){e.languages.pure={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0},/#!.+/],"inline-lang":{pattern:/%<[\s\S]+?%>/,greedy:!0,inside:{lang:{pattern:/(^%< *)-\*-.+?-\*-/,lookbehind:!0,alias:"comment"},delimiter:{pattern:/^%<.*|%>$/,alias:"punctuation"}}},string:{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0},number:{pattern:/((?:\.\.)?)(?:\b(?:inf|nan)\b|\b0x[\da-f]+|(?:\b(?:0b)?\d+(?:\.\d+)?|\B\.\d+)(?:e[+-]?\d+)?L?)/i,lookbehind:!0},keyword:/\b(?:NULL|ans|break|bt|case|catch|cd|clear|const|def|del|dump|else|end|exit|extern|false|force|help|if|infix[lr]?|interface|let|ls|mem|namespace|nonfix|of|otherwise|outfix|override|postfix|prefix|private|public|pwd|quit|run|save|show|stats|then|throw|trace|true|type|underride|using|when|with)\b/,function:/\b(?:abs|add_(?:addr|constdef|(?:fundef|interface|macdef|typedef)(?:_at)?|vardef)|all|any|applp?|arity|bigintp?|blob(?:_crc|_size|p)?|boolp?|byte_c?string(?:_pointer)?|byte_(?:matrix|pointer)|calloc|cat|catmap|ceil|char[ps]?|check_ptrtag|chr|clear_sentry|clearsym|closurep?|cmatrixp?|cols?|colcat(?:map)?|colmap|colrev|colvector(?:p|seq)?|complex(?:_float_(?:matrix|pointer)|_matrix(?:_view)?|_pointer|p)?|conj|cookedp?|cst|cstring(?:_(?:dup|list|vector))?|curry3?|cyclen?|del_(?:constdef|fundef|interface|macdef|typedef|vardef)|delete|diag(?:mat)?|dim|dmatrixp?|do|double(?:_matrix(?:_view)?|_pointer|p)?|dowith3?|drop|dropwhile|eval(?:cmd)?|exactp|filter|fix|fixity|flip|float(?:_matrix|_pointer)|floor|fold[lr]1?|frac|free|funp?|functionp?|gcd|get(?:_(?:byte|constdef|double|float|fundef|int(?:64)?|interface(?:_typedef)?|long|macdef|pointer|ptrtag|sentry|short|string|typedef|vardef))?|globsym|hash|head|id|im|imatrixp?|index|inexactp|infp|init|insert|int(?:_matrix(?:_view)?|_pointer|p)?|int64_(?:matrix|pointer)|integerp?|iteraten?|iterwhile|join|keys?|lambdap?|last(?:err(?:pos)?)?|lcd|list[2p]?|listmap|make_ptrtag|malloc|map|matcat|matrixp?|max|member|min|nanp|nargs|nmatrixp?|null|numberp?|ord|pack(?:ed)?|pointer(?:_cast|_tag|_type|p)?|pow|pred|ptrtag|put(?:_(?:byte|double|float|int(?:64)?|long|pointer|short|string))?|rationalp?|re|realp?|realloc|recordp?|redim|reduce(?:_with)?|refp?|repeatn?|reverse|rlistp?|round|rows?|rowcat(?:map)?|rowmap|rowrev|rowvector(?:p|seq)?|same|scan[lr]1?|sentry|sgn|short_(?:matrix|pointer)|slice|smatrixp?|sort|split|str|strcat|stream|stride|string(?:_(?:dup|list|vector)|p)?|subdiag(?:mat)?|submat|subseq2?|substr|succ|supdiag(?:mat)?|symbolp?|tail|take|takewhile|thunkp?|transpose|trunc|tuplep?|typep|ubyte|uint(?:64)?|ulong|uncurry3?|unref|unzip3?|update|ushort|vals?|varp?|vector(?:p|seq)?|void|zip3?|zipwith3?)\b/,special:{pattern:/\b__[a-z]+__\b/i,alias:"builtin"},operator:/(?:[!"#$%&'*+,\-.\/:<=>?@\\^`|~\u00a1-\u00bf\u00d7-\u00f7\u20d0-\u2bff]|\b_+\b)+|\b(?:and|div|mod|not|or)\b/,punctuation:/[(){}\[\];,|]/},["c",{lang:"c++",alias:"cpp"},"fortran"].forEach((function(t){var a=t;if("string"!=typeof t&&(a=t.alias,t=t.lang),e.languages[a]){var r={};r["inline-lang-"+a]={pattern:RegExp("%< *-\\*- *\\d* *-\\*-[^]+?%>".replace("",t.replace(/([.+*?\/\\(){}\[\]])/g,"\\$1")),"i"),inside:e.util.clone(e.languages.pure["inline-lang"].inside)},r["inline-lang-"+a].inside.rest=e.util.clone(e.languages[a]),e.languages.insertBefore("pure","inline-lang",r)}})),e.languages.c&&(e.languages.pure["inline-lang"].inside.rest=e.util.clone(e.languages.c))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-purebasic.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-purebasic.js index 0f04bb6d4b..2d49469b3f 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-purebasic.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-purebasic.js @@ -12,7 +12,7 @@ Prism.languages.purebasic = Prism.languages.extend('clike', { 'keyword': /\b(?:align|and|as|break|calldebugger|case|compilercase|compilerdefault|compilerelse|compilerelseif|compilerendif|compilerendselect|compilererror|compilerif|compilerselect|continue|data|datasection|debug|debuglevel|declare|declarec|declarecdll|declaredll|declaremodule|default|define|dim|disableasm|disabledebugger|disableexplicit|else|elseif|enableasm|enabledebugger|enableexplicit|end|enddatasection|enddeclaremodule|endenumeration|endif|endimport|endinterface|endmacro|endmodule|endprocedure|endselect|endstructure|endstructureunion|endwith|enumeration|extends|fakereturn|for|foreach|forever|global|gosub|goto|if|import|importc|includebinary|includefile|includepath|interface|macro|module|newlist|newmap|next|not|or|procedure|procedurec|procedurecdll|proceduredll|procedurereturn|protected|prototype|prototypec|read|redim|repeat|restore|return|runtime|select|shared|static|step|structure|structureunion|swap|threaded|to|until|wend|while|with|xincludefile|xor)\b/i, 'function': /\b\w+(?:\.\w+)?\s*(?=\()/, 'number': /(?:\$[\da-f]+|\b-?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)\b/i, - 'operator': /(?:@\*?|\?|\*)\w+|-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*/@]/ + 'operator': /(?:@\*?|\?|\*)\w+\$?|-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*/@]/ }); Prism.languages.insertBefore('purebasic', 'keyword', { diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-purebasic.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-purebasic.min.js index b8072a7afb..91cb9f8d69 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-purebasic.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-purebasic.min.js @@ -1 +1 @@ -Prism.languages.purebasic=Prism.languages.extend("clike",{comment:/;.*/,keyword:/\b(?:align|and|as|break|calldebugger|case|compilercase|compilerdefault|compilerelse|compilerelseif|compilerendif|compilerendselect|compilererror|compilerif|compilerselect|continue|data|datasection|debug|debuglevel|declare|declarec|declarecdll|declaredll|declaremodule|default|define|dim|disableasm|disabledebugger|disableexplicit|else|elseif|enableasm|enabledebugger|enableexplicit|end|enddatasection|enddeclaremodule|endenumeration|endif|endimport|endinterface|endmacro|endmodule|endprocedure|endselect|endstructure|endstructureunion|endwith|enumeration|extends|fakereturn|for|foreach|forever|global|gosub|goto|if|import|importc|includebinary|includefile|includepath|interface|macro|module|newlist|newmap|next|not|or|procedure|procedurec|procedurecdll|proceduredll|procedurereturn|protected|prototype|prototypec|read|redim|repeat|restore|return|runtime|select|shared|static|step|structure|structureunion|swap|threaded|to|until|wend|while|with|xincludefile|xor)\b/i,function:/\b\w+(?:\.\w+)?\s*(?=\()/,number:/(?:\$[\da-f]+|\b-?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)\b/i,operator:/(?:@\*?|\?|\*)\w+|-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*/@]/}),Prism.languages.insertBefore("purebasic","keyword",{tag:/#\w+\$?/,asm:{pattern:/(^[\t ]*)!.*/m,lookbehind:!0,alias:"tag",inside:{comment:/;.*/,string:{pattern:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"label-reference-anonymous":{pattern:/(!\s*j[a-z]+\s+)@[fb]/i,lookbehind:!0,alias:"fasm-label"},"label-reference-addressed":{pattern:/(!\s*j[a-z]+\s+)[A-Z._?$@][\w.?$@~#]*/i,lookbehind:!0,alias:"fasm-label"},keyword:[/\b(?:extern|global)\b[^;\r\n]*/i,/\b(?:CPU|DEFAULT|FLOAT)\b.*/],function:{pattern:/^([\t ]*!\s*)[\da-z]+(?=\s|$)/im,lookbehind:!0},"function-inline":{pattern:/(:\s*)[\da-z]+(?=\s)/i,lookbehind:!0,alias:"function"},label:{pattern:/^([\t ]*!\s*)[A-Za-z._?$@][\w.?$@~#]*(?=:)/m,lookbehind:!0,alias:"fasm-label"},register:/\b(?:st\d|[xyz]mm\d\d?|[cdt]r\d|r\d\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|di|si|sp)|[cdefgs]s|mm\d+)\b/i,number:/(?:\b|-|(?=\$))(?:0[hx](?:[\da-f]*\.)?[\da-f]+(?:p[+-]?\d+)?|\d[\da-f]+[hx]|\$\d[\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\d+|(?:\d+(?:\.\d+)?|\.\d+)(?:\.?e[+-]?\d+)?[dt]?)\b/i,operator:/[\[\]*+\-/%<>=&|$!,.:]/}}}),delete Prism.languages.purebasic["class-name"],delete Prism.languages.purebasic.boolean,Prism.languages.pbfasm=Prism.languages.purebasic; \ No newline at end of file +Prism.languages.purebasic=Prism.languages.extend("clike",{comment:/;.*/,keyword:/\b(?:align|and|as|break|calldebugger|case|compilercase|compilerdefault|compilerelse|compilerelseif|compilerendif|compilerendselect|compilererror|compilerif|compilerselect|continue|data|datasection|debug|debuglevel|declare|declarec|declarecdll|declaredll|declaremodule|default|define|dim|disableasm|disabledebugger|disableexplicit|else|elseif|enableasm|enabledebugger|enableexplicit|end|enddatasection|enddeclaremodule|endenumeration|endif|endimport|endinterface|endmacro|endmodule|endprocedure|endselect|endstructure|endstructureunion|endwith|enumeration|extends|fakereturn|for|foreach|forever|global|gosub|goto|if|import|importc|includebinary|includefile|includepath|interface|macro|module|newlist|newmap|next|not|or|procedure|procedurec|procedurecdll|proceduredll|procedurereturn|protected|prototype|prototypec|read|redim|repeat|restore|return|runtime|select|shared|static|step|structure|structureunion|swap|threaded|to|until|wend|while|with|xincludefile|xor)\b/i,function:/\b\w+(?:\.\w+)?\s*(?=\()/,number:/(?:\$[\da-f]+|\b-?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)\b/i,operator:/(?:@\*?|\?|\*)\w+\$?|-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*/@]/}),Prism.languages.insertBefore("purebasic","keyword",{tag:/#\w+\$?/,asm:{pattern:/(^[\t ]*)!.*/m,lookbehind:!0,alias:"tag",inside:{comment:/;.*/,string:{pattern:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"label-reference-anonymous":{pattern:/(!\s*j[a-z]+\s+)@[fb]/i,lookbehind:!0,alias:"fasm-label"},"label-reference-addressed":{pattern:/(!\s*j[a-z]+\s+)[A-Z._?$@][\w.?$@~#]*/i,lookbehind:!0,alias:"fasm-label"},keyword:[/\b(?:extern|global)\b[^;\r\n]*/i,/\b(?:CPU|DEFAULT|FLOAT)\b.*/],function:{pattern:/^([\t ]*!\s*)[\da-z]+(?=\s|$)/im,lookbehind:!0},"function-inline":{pattern:/(:\s*)[\da-z]+(?=\s)/i,lookbehind:!0,alias:"function"},label:{pattern:/^([\t ]*!\s*)[A-Za-z._?$@][\w.?$@~#]*(?=:)/m,lookbehind:!0,alias:"fasm-label"},register:/\b(?:st\d|[xyz]mm\d\d?|[cdt]r\d|r\d\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|di|si|sp)|[cdefgs]s|mm\d+)\b/i,number:/(?:\b|-|(?=\$))(?:0[hx](?:[\da-f]*\.)?[\da-f]+(?:p[+-]?\d+)?|\d[\da-f]+[hx]|\$\d[\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\d+|(?:\d+(?:\.\d+)?|\.\d+)(?:\.?e[+-]?\d+)?[dt]?)\b/i,operator:/[\[\]*+\-/%<>=&|$!,.:]/}}}),delete Prism.languages.purebasic["class-name"],delete Prism.languages.purebasic.boolean,Prism.languages.pbfasm=Prism.languages.purebasic; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-qml.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-qml.min.js index 00cc616409..7181f66654 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-qml.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-qml.min.js @@ -1 +1 @@ -!function(e){for(var r="(?:[^\\\\()[\\]{}\"'/]||/(?![*/])||\\(*\\)|\\[*\\]|\\{*\\}|\\\\[^])".replace(//g,function(){return"\"(?:\\\\.|[^\\\\\"\r\n])*\"|'(?:\\\\.|[^\\\\'\r\n])*'"}).replace(//g,function(){return"//.*(?!.)|/\\*(?:[^*]|\\*(?!/))*\\*/"}),t=0;t<2;t++)r=r.replace(//g,function(){return r});r=r.replace(//g,"[^\\s\\S]"),e.languages.qml={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\//,greedy:!0},"javascript-function":{pattern:RegExp("((?:^|;)[ \t]*)function\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*\\(*\\)\\s*\\{*\\}".replace(//g,function(){return r}),"m"),lookbehind:!0,greedy:!0,alias:"language-javascript",inside:e.languages.javascript},"class-name":{pattern:/((?:^|[:;])[ \t]*)(?!\d)\w+(?=[ \t]*\{|[ \t]+on\b)/m,lookbehind:!0},property:[{pattern:/((?:^|[;{])[ \t]*)(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,lookbehind:!0},{pattern:/((?:^|[;{])[ \t]*)property[ \t]+(?!\d)\w+(?:\.\w+)*[ \t]+(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,lookbehind:!0,inside:{keyword:/^property/,property:/\w+(?:\.\w+)*/}}],"javascript-expression":{pattern:RegExp("(:[ \t]*)(?![\\s;}[])(?:(?!$|[;}]))+".replace(//g,function(){return r}),"m"),lookbehind:!0,greedy:!0,alias:"language-javascript",inside:e.languages.javascript},string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},keyword:/\b(?:as|import|on)\b/,punctuation:/[{}[\]:;,]/}}(Prism); \ No newline at end of file +!function(e){for(var r="(?:[^\\\\()[\\]{}\"'/]||/(?![*/])||\\(*\\)|\\[*\\]|\\{*\\}|\\\\[^])".replace(//g,(function(){return"\"(?:\\\\.|[^\\\\\"\r\n])*\"|'(?:\\\\.|[^\\\\'\r\n])*'"})).replace(//g,(function(){return"//.*(?!.)|/\\*(?:[^*]|\\*(?!/))*\\*/"})),t=0;t<2;t++)r=r.replace(//g,(function(){return r}));r=r.replace(//g,"[^\\s\\S]"),e.languages.qml={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\//,greedy:!0},"javascript-function":{pattern:RegExp("((?:^|;)[ \t]*)function\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*\\(*\\)\\s*\\{*\\}".replace(//g,(function(){return r})),"m"),lookbehind:!0,greedy:!0,alias:"language-javascript",inside:e.languages.javascript},"class-name":{pattern:/((?:^|[:;])[ \t]*)(?!\d)\w+(?=[ \t]*\{|[ \t]+on\b)/m,lookbehind:!0},property:[{pattern:/((?:^|[;{])[ \t]*)(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,lookbehind:!0},{pattern:/((?:^|[;{])[ \t]*)property[ \t]+(?!\d)\w+(?:\.\w+)*[ \t]+(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,lookbehind:!0,inside:{keyword:/^property/,property:/\w+(?:\.\w+)*/}}],"javascript-expression":{pattern:RegExp("(:[ \t]*)(?![\\s;}[])(?:(?!$|[;}]))+".replace(//g,(function(){return r})),"m"),lookbehind:!0,greedy:!0,alias:"language-javascript",inside:e.languages.javascript},string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},keyword:/\b(?:as|import|on)\b/,punctuation:/[{}[\]:;,]/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-qsharp.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-qsharp.min.js index 827bef2b19..3fa2597bd9 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-qsharp.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-qsharp.min.js @@ -1 +1 @@ -!function(e){function a(e,r){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+r[+n]+")"})}function n(e,n,r){return RegExp(a(e,n),r||"")}var r=RegExp("\\b(?:"+("Adj BigInt Bool Ctl Double false Int One Pauli PauliI PauliX PauliY PauliZ Qubit Range Result String true Unit Zero"+" "+"Adjoint adjoint apply as auto body borrow borrowing Controlled controlled distribute elif else fail fixup for function if in internal intrinsic invert is let mutable namespace new newtype open operation repeat return self set until use using while within").trim().replace(/ /g,"|")+")\\b"),t=a("<<0>>(?:\\s*\\.\\s*<<0>>)*",["\\b[A-Za-z_]\\w*\\b"]),i={keyword:r,punctuation:/[<>()?,.:[\]]/},s='"(?:\\\\.|[^\\\\"])*"';e.languages.qsharp=e.languages.extend("clike",{comment:/\/\/.*/,string:[{pattern:n("(^|[^$\\\\])<<0>>",[s]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n("(\\b(?:as|open)\\s+)<<0>>(?=\\s*(?:;|as\\b))",[t]),lookbehind:!0,inside:i},{pattern:n("(\\bnamespace\\s+)<<0>>(?=\\s*\\{)",[t]),lookbehind:!0,inside:i}],keyword:r,number:/(?:\b0(?:x[\da-f]+|b[01]+|o[0-7]+)|(?:\B\.\d+|\b\d+(?:\.\d*)?)(?:e[-+]?\d+)?)l?\b/i,operator:/\band=|\bor=|\band\b|\bnot\b|\bor\b|<[-=]|[-=]>|>>>=?|<<<=?|\^\^\^=?|\|\|\|=?|&&&=?|w\/=?|~~~|[*\/+\-^=!%]=?/,punctuation:/::|[{}[\];(),.:]/}),e.languages.insertBefore("qsharp","number",{range:{pattern:/\.\./,alias:"operator"}});var o=function(e,n){for(var r=0;r>/g,function(){return"(?:"+e+")"});return e.replace(/<>/g,"[^\\s\\S]")}(a('\\{(?:[^"{}]|<<0>>|<>)*\\}',[s]),2);e.languages.insertBefore("qsharp","string",{"interpolation-string":{pattern:n('\\$"(?:\\\\.|<<0>>|[^\\\\"{])*"',[o]),greedy:!0,inside:{interpolation:{pattern:n("((?:^|[^\\\\])(?:\\\\\\\\)*)<<0>>",[o]),lookbehind:!0,inside:{punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-qsharp",inside:e.languages.qsharp}}},string:/[\s\S]+/}}})}(Prism),Prism.languages.qs=Prism.languages.qsharp; \ No newline at end of file +!function(e){function n(e,n){return e.replace(/<<(\d+)>>/g,(function(e,r){return"(?:"+n[+r]+")"}))}function r(e,r,a){return RegExp(n(e,r),a||"")}var a=RegExp("\\b(?:"+"Adj BigInt Bool Ctl Double false Int One Pauli PauliI PauliX PauliY PauliZ Qubit Range Result String true Unit Zero Adjoint adjoint apply as auto body borrow borrowing Controlled controlled distribute elif else fail fixup for function if in internal intrinsic invert is let mutable namespace new newtype open operation repeat return self set until use using while within".trim().replace(/ /g,"|")+")\\b"),t=n("<<0>>(?:\\s*\\.\\s*<<0>>)*",["\\b[A-Za-z_]\\w*\\b"]),i={keyword:a,punctuation:/[<>()?,.:[\]]/},s='"(?:\\\\.|[^\\\\"])*"';e.languages.qsharp=e.languages.extend("clike",{comment:/\/\/.*/,string:[{pattern:r("(^|[^$\\\\])<<0>>",[s]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:r("(\\b(?:as|open)\\s+)<<0>>(?=\\s*(?:;|as\\b))",[t]),lookbehind:!0,inside:i},{pattern:r("(\\bnamespace\\s+)<<0>>(?=\\s*\\{)",[t]),lookbehind:!0,inside:i}],keyword:a,number:/(?:\b0(?:x[\da-f]+|b[01]+|o[0-7]+)|(?:\B\.\d+|\b\d+(?:\.\d*)?)(?:e[-+]?\d+)?)l?\b/i,operator:/\band=|\bor=|\band\b|\bnot\b|\bor\b|<[-=]|[-=]>|>>>=?|<<<=?|\^\^\^=?|\|\|\|=?|&&&=?|w\/=?|~~~|[*\/+\-^=!%]=?/,punctuation:/::|[{}[\];(),.:]/}),e.languages.insertBefore("qsharp","number",{range:{pattern:/\.\./,alias:"operator"}});var o=function(e,n){for(var r=0;r<2;r++)e=e.replace(/<>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}(n('\\{(?:[^"{}]|<<0>>|<>)*\\}',[s]));e.languages.insertBefore("qsharp","string",{"interpolation-string":{pattern:r('\\$"(?:\\\\.|<<0>>|[^\\\\"{])*"',[o]),greedy:!0,inside:{interpolation:{pattern:r("((?:^|[^\\\\])(?:\\\\\\\\)*)<<0>>",[o]),lookbehind:!0,inside:{punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-qsharp",inside:e.languages.qsharp}}},string:/[\s\S]+/}}})}(Prism),Prism.languages.qs=Prism.languages.qsharp; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-rescript.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-rescript.js new file mode 100644 index 0000000000..9502a77d64 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-rescript.js @@ -0,0 +1,60 @@ +Prism.languages.rescript = { + 'comment': { + pattern: /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/, + greedy: true + }, + 'char': { pattern: /'(?:[^\r\n\\]|\\(?:.|\w+))'/, greedy: true }, + 'string': { + pattern: /"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/, + greedy: true + }, + 'class-name': /\b[A-Z]\w*|@[a-z.]*|#[A-Za-z]\w*|#\d/, + 'function': { + pattern: /[a-zA-Z]\w*(?=\()|(\.)[a-z]\w*/, + lookbehind: true, + }, + 'number': /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i, + 'boolean': /\b(?:false|true)\b/, + 'attr-value': /[A-Za-z]\w*(?==)/, + 'constant': { + pattern: /(\btype\s+)[a-z]\w*/, + lookbehind: true + }, + 'tag': { + pattern: /(<)[a-z]\w*|(?:<\/)[a-z]\w*/, + lookbehind: true, + inside: { + 'operator': /<|>|\//, + }, + }, + 'keyword': /\b(?:and|as|assert|begin|bool|class|constraint|do|done|downto|else|end|exception|external|float|for|fun|function|if|in|include|inherit|initializer|int|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|string|switch|then|to|try|type|when|while|with)\b/, + 'operator': /\.{3}|:[:=]?|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/, + 'punctuation': /[(){}[\],;.]/ +}; + +Prism.languages.insertBefore('rescript', 'string', { + 'template-string': { + pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/, + greedy: true, + inside: { + 'template-punctuation': { + pattern: /^`|`$/, + alias: 'string' + }, + 'interpolation': { + pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/, + lookbehind: true, + inside: { + 'interpolation-punctuation': { + pattern: /^\$\{|\}$/, + alias: 'tag' + }, + rest: Prism.languages.rescript + } + }, + 'string': /[\s\S]+/ + } + }, +}); + +Prism.languages.res = Prism.languages.rescript; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-rescript.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-rescript.min.js new file mode 100644 index 0000000000..5d00666f43 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-rescript.min.js @@ -0,0 +1 @@ +Prism.languages.rescript={comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},char:{pattern:/'(?:[^\r\n\\]|\\(?:.|\w+))'/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*|@[a-z.]*|#[A-Za-z]\w*|#\d/,function:{pattern:/[a-zA-Z]\w*(?=\()|(\.)[a-z]\w*/,lookbehind:!0},number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,boolean:/\b(?:false|true)\b/,"attr-value":/[A-Za-z]\w*(?==)/,constant:{pattern:/(\btype\s+)[a-z]\w*/,lookbehind:!0},tag:{pattern:/(<)[a-z]\w*|(?:<\/)[a-z]\w*/,lookbehind:!0,inside:{operator:/<|>|\//}},keyword:/\b(?:and|as|assert|begin|bool|class|constraint|do|done|downto|else|end|exception|external|float|for|fun|function|if|in|include|inherit|initializer|int|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|string|switch|then|to|try|type|when|while|with)\b/,operator:/\.{3}|:[:=]?|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/,punctuation:/[(){}[\],;.]/},Prism.languages.insertBefore("rescript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"tag"},rest:Prism.languages.rescript}},string:/[\s\S]+/}}}),Prism.languages.res=Prism.languages.rescript; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-robotframework.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-robotframework.min.js index bfaec75744..a0397f51b5 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-robotframework.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-robotframework.min.js @@ -1 +1 @@ -!function(t){var r={pattern:/(^[ \t]*| {2}|\t)#.*/m,lookbehind:!0,greedy:!0},o={pattern:/((?:^|[^\\])(?:\\{2})*)[$@&%]\{(?:[^{}\r\n]|\{[^{}\r\n]*\})*\}/,lookbehind:!0,inside:{punctuation:/^[$@&%]\{|\}$/}};function n(t,n){var e={"section-header":{pattern:/^ ?\*{3}.+?\*{3}/,alias:"keyword"}};for(var a in n)e[a]=n[a];return e.tag={pattern:/([\r\n](?: {2}|\t)[ \t]*)\[[-\w]+\]/,lookbehind:!0,inside:{punctuation:/\[|\]/}},e.variable=o,e.comment=r,{pattern:RegExp("^ ?\\*{3}[ \t]*[ \t]*\\*{3}(?:.|[\r\n](?!\\*{3}))*".replace(//g,function(){return t}),"im"),alias:"section",inside:e}}var e={pattern:/(\[Documentation\](?: {2}|\t)[ \t]*)(?![ \t]|#)(?:.|(?:\r\n?|\n)[ \t]*\.{3})+/,lookbehind:!0,alias:"string"},a={pattern:/([\r\n] ?)(?!#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0,alias:"function",inside:{variable:o}},i={pattern:/([\r\n](?: {2}|\t)[ \t]*)(?!\[|\.{3}|#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0,inside:{variable:o}};t.languages.robotframework={settings:n("Settings",{documentation:{pattern:/([\r\n] ?Documentation(?: {2}|\t)[ \t]*)(?![ \t]|#)(?:.|(?:\r\n?|\n)[ \t]*\.{3})+/,lookbehind:!0,alias:"string"},property:{pattern:/([\r\n] ?)(?!\.{3}|#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0}}),variables:n("Variables"),"test-cases":n("Test Cases",{"test-name":a,documentation:e,property:i}),keywords:n("Keywords",{"keyword-name":a,documentation:e,property:i}),tasks:n("Tasks",{"task-name":a,documentation:e,property:i}),comment:r},t.languages.robot=t.languages.robotframework}(Prism); \ No newline at end of file +!function(t){var n={pattern:/(^[ \t]*| {2}|\t)#.*/m,lookbehind:!0,greedy:!0},e={pattern:/((?:^|[^\\])(?:\\{2})*)[$@&%]\{(?:[^{}\r\n]|\{[^{}\r\n]*\})*\}/,lookbehind:!0,inside:{punctuation:/^[$@&%]\{|\}$/}};function a(t,a){var r={"section-header":{pattern:/^ ?\*{3}.+?\*{3}/,alias:"keyword"}};for(var o in a)r[o]=a[o];return r.tag={pattern:/([\r\n](?: {2}|\t)[ \t]*)\[[-\w]+\]/,lookbehind:!0,inside:{punctuation:/\[|\]/}},r.variable=e,r.comment=n,{pattern:RegExp("^ ?\\*{3}[ \t]*[ \t]*\\*{3}(?:.|[\r\n](?!\\*{3}))*".replace(//g,(function(){return t})),"im"),alias:"section",inside:r}}var r={pattern:/(\[Documentation\](?: {2}|\t)[ \t]*)(?![ \t]|#)(?:.|(?:\r\n?|\n)[ \t]*\.{3})+/,lookbehind:!0,alias:"string"},o={pattern:/([\r\n] ?)(?!#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0,alias:"function",inside:{variable:e}},i={pattern:/([\r\n](?: {2}|\t)[ \t]*)(?!\[|\.{3}|#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0,inside:{variable:e}};t.languages.robotframework={settings:a("Settings",{documentation:{pattern:/([\r\n] ?Documentation(?: {2}|\t)[ \t]*)(?![ \t]|#)(?:.|(?:\r\n?|\n)[ \t]*\.{3})+/,lookbehind:!0,alias:"string"},property:{pattern:/([\r\n] ?)(?!\.{3}|#)(?:\S(?:[ \t]\S)*)+/,lookbehind:!0}}),variables:a("Variables"),"test-cases":a("Test Cases",{"test-name":o,documentation:r,property:i}),keywords:a("Keywords",{"keyword-name":o,documentation:r,property:i}),tasks:a("Tasks",{"task-name":o,documentation:r,property:i}),comment:n},t.languages.robot=t.languages.robotframework}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-rust.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-rust.min.js index 52595ee387..d37ce8c574 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-rust.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-rust.min.js @@ -1 +1 @@ -!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|)*\\*/",t=0;t<2;t++)a=a.replace(//g,function(){return a});a=a.replace(//g,function(){return"[^\\s\\S]"}),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism); \ No newline at end of file +!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|)*\\*/",t=0;t<2;t++)a=a.replace(//g,(function(){return a}));a=a.replace(//g,(function(){return"[^\\s\\S]"})),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-sas.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-sas.min.js index 698175d0ee..181589c39b 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-sas.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-sas.min.js @@ -1 +1 @@ -!function(e){var t="(?:\"(?:\"\"|[^\"])*\"(?!\")|'(?:''|[^'])*'(?!'))",a=/\b(?:\d[\da-f]*x|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,n={pattern:RegExp(t+"[bx]"),alias:"number"},i={pattern:/&[a-z_]\w*/i},r={pattern:/((?:^|\s|=|\())%(?:ABORT|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUPCASE|RETURN|RUN|SCAN|SUBSTR|SUPERQ|SYMDEL|SYMEXIST|SYMGLOBL|SYMLOCAL|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\b/i,lookbehind:!0,alias:"keyword"},s={pattern:/(^|\s)(?:proc\s+\w+|data(?!=)|quit|run)\b/i,alias:"keyword",lookbehind:!0},o=[/\/\*[\s\S]*?\*\//,{pattern:/(^[ \t]*|;\s*)\*[^;]*;/m,lookbehind:!0}],l={pattern:RegExp(t),greedy:!0},c=/[$%@.(){}\[\];,\\]/,d={pattern:/%?\b\w+(?=\()/,alias:"keyword"},p={function:d,"arg-value":{pattern:/(=\s*)[A-Z\.]+/i,lookbehind:!0},operator:/=/,"macro-variable":i,arg:{pattern:/[A-Z]+/i,alias:"keyword"},number:a,"numeric-constant":n,punctuation:c,string:l},u={pattern:/\b(?:format|put)\b=?[\w'$.]+/i,inside:{keyword:/^(?:format|put)(?==)/i,equals:/=/,format:{pattern:/(?:\w|\$\d)+\.\d?/,alias:"number"}}},m={pattern:/\b(?:format|put)\s+[\w']+(?:\s+[$.\w]+)+(?=;)/i,inside:{keyword:/^(?:format|put)/i,format:{pattern:/[\w$]+\.\d?/,alias:"number"}}},b={pattern:/((?:^|\s)=?)(?:catname|checkpoint execute_always|dm|endsas|filename|footnote|%include|libname|%list|lock|missing|options|page|resetline|%run|sasfile|skip|sysecho|title\d?)\b/i,lookbehind:!0,alias:"keyword"},g={pattern:/(^|\s)(?:submit(?:\s+(?:load|norun|parseonly))?|endsubmit)\b/i,lookbehind:!0,alias:"keyword"},k="aStore|accessControl|aggregation|audio|autotune|bayesianNetClassifier|bioMedImage|boolRule|builtins|cardinality|cdm|clustering|conditionalRandomFields|configuration|copula|countreg|dataDiscovery|dataPreprocess|dataSciencePilot|dataStep|decisionTree|deduplication|deepLearn|deepNeural|deepRnn|ds2|ecm|entityRes|espCluster|explainModel|factmac|fastKnn|fcmpact|fedSql|freqTab|gVarCluster|gam|gleam|graphSemiSupLearn|hiddenMarkovModel|hyperGroup|ica|image|iml|kernalPca|langModel|ldaTopic|loadStreams|mbc|mixed|mlTools|modelPublishing|network|neuralNet|nmf|nonParametricBayes|nonlinear|optNetwork|optimization|panel|pca|percentile|phreg|pls|qkb|qlim|quantreg|recommend|regression|reinforcementLearn|robustPca|ruleMining|sampling|sandwich|sccasl|search(?:Analytics)?|sentimentAnalysis|sequence|session(?:Prop)?|severity|simSystem|simple|smartData|sparkEmbeddedProcess|sparseML|spatialreg|spc|stabilityMonitoring|svDataDescription|svm|table|text(?:Filters|Frequency|Mining|Parse|Rule(?:Develop|Score)|Topic|Util)|timeData|transpose|tsInfo|tsReconcile|uniTimeSeries|varReduce",y={pattern:RegExp("(^|\\s)(?:action\\s+)?(?:)\\.[a-z]+\\b[^;]+".replace(//g,function(){return k}),"i"),lookbehind:!0,inside:{keyword:RegExp("(?:)\\.[a-z]+\\b".replace(//g,function(){return k}),"i"),action:{pattern:/(?:action)/i,alias:"keyword"},comment:o,function:d,"arg-value":p["arg-value"],operator:p.operator,argument:p.arg,number:a,"numeric-constant":n,punctuation:c,string:l}},S={pattern:/((?:^|\s)=?)(?:after|analysis|and|array|barchart|barwidth|begingraph|by|call|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|continue|data(?==)|define|delete|describe|document|do\s+over|do|dol|drop|dul|else|end(?:comp|source)?|entryTitle|eval(?:uate)?|exec(?:ute)?|exit|file(?:name)?|fill(?:attrs)?|flist|fnc|function(?:list)?|global|goto|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|leave|legendlabel|length|libname|loadactionset|merge|midpoints|_?null_|name|noobs|nowd|ods|options|or|otherwise|out(?:put)?|over(?:lay)?|plot|print|put|raise|ranexp|rannor|rbreak|retain|return|select|session|sessref|set|source|statgraph|sum|summarize|table|temp|terminate|then\s+do|then|title\d?|to|var|when|where|xaxisopts|y2axisopts|yaxisopts)\b/i,lookbehind:!0};e.languages.sas={datalines:{pattern:/^([ \t]*)(?:cards|(?:data)?lines);[\s\S]+?^[ \t]*;/im,lookbehind:!0,alias:"string",inside:{keyword:{pattern:/^(?:cards|(?:data)?lines)/i},punctuation:/;/}},"proc-sql":{pattern:/(^proc\s+(?:fed)?sql(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,lookbehind:!0,inside:{sql:{pattern:RegExp("^[ \t]*(?:select|alter\\s+table|(?:create|describe|drop)\\s+(?:index|table(?:\\s+constraints)?|view)|create\\s+unique\\s+index|insert\\s+into|update)(?:|[^;\"'])+;".replace(//g,function(){return t}),"im"),alias:"language-sql",inside:e.languages.sql},"global-statements":b,"sql-statements":{pattern:/(^|\s)(?:disconnect\s+from|begin|commit|exec(?:ute)?|reset|rollback|validate)\b/i,lookbehind:!0,alias:"keyword"},number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-groovy":{pattern:/(^proc\s+groovy(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,groovy:{pattern:RegExp("(^[ \t]*submit(?:\\s+(?:load|norun|parseonly))?)(?:|[^\"'])+?(?=endsubmit;)".replace(//g,function(){return t}),"im"),lookbehind:!0,alias:"language-groovy",inside:e.languages.groovy},keyword:S,"submit-statement":g,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-lua":{pattern:/(^proc\s+lua(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,lua:{pattern:RegExp("(^[ \t]*submit(?:\\s+(?:load|norun|parseonly))?)(?:|[^\"'])+?(?=endsubmit;)".replace(//g,function(){return t}),"im"),lookbehind:!0,alias:"language-lua",inside:e.languages.lua},keyword:S,"submit-statement":g,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-cas":{pattern:/(^proc\s+cas(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,"statement-var":{pattern:/((?:^|\s)=?)saveresult\s[^;]+/im,lookbehind:!0,inside:{statement:{pattern:/^saveresult\s+\S+/i,inside:{keyword:/^(?:saveresult)/i}},rest:p}},"cas-actions":y,statement:{pattern:/((?:^|\s)=?)(?:default|(?:un)?set|on|output|upload)[^;]+/im,lookbehind:!0,inside:p},step:s,keyword:S,function:d,format:u,altformat:m,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-args":{pattern:RegExp("(^proc\\s+\\w+\\s+)(?!\\s)(?:[^;\"']|)+;".replace(//g,function(){return t}),"im"),lookbehind:!0,inside:p},"macro-keyword":r,"macro-variable":i,"macro-string-functions":{pattern:/((?:^|\s|=))%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)\(.*?(?:[^%]\))/i,lookbehind:!0,inside:{function:{pattern:/%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)/i,alias:"keyword"},"macro-keyword":r,"macro-variable":i,"escaped-char":{pattern:/%['"()<>=¬^~;,#]/},punctuation:c}},"macro-declaration":{pattern:/^%macro[^;]+(?=;)/im,inside:{keyword:/%macro/i}},"macro-end":{pattern:/^%mend[^;]+(?=;)/im,inside:{keyword:/%mend/i}},macro:{pattern:/%_\w+(?=\()/,alias:"keyword"},input:{pattern:/\binput\s[-\w\s/*.$&]+;/i,inside:{input:{alias:"keyword",pattern:/^input/i},comment:o,number:a,"numeric-constant":n}},"options-args":{pattern:/(^options)[-'"|/\\<>*+=:()\w\s]*(?=;)/im,lookbehind:!0,inside:p},"cas-actions":y,comment:o,function:d,format:u,altformat:m,"numeric-constant":n,datetime:{pattern:RegExp(t+"(?:dt?|t)"),alias:"number"},string:l,step:s,keyword:S,"operator-keyword":{pattern:/\b(?:eq|ge|gt|in|le|lt|ne|not)\b/i,alias:"operator"},number:a,operator:/\*\*?|\|\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\/=&]|[~¬^]=?/,punctuation:c}}(Prism); \ No newline at end of file +!function(e){var t="(?:\"(?:\"\"|[^\"])*\"(?!\")|'(?:''|[^'])*'(?!'))",a=/\b(?:\d[\da-f]*x|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,n={pattern:RegExp(t+"[bx]"),alias:"number"},i={pattern:/&[a-z_]\w*/i},r={pattern:/((?:^|\s|=|\())%(?:ABORT|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUPCASE|RETURN|RUN|SCAN|SUBSTR|SUPERQ|SYMDEL|SYMEXIST|SYMGLOBL|SYMLOCAL|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\b/i,lookbehind:!0,alias:"keyword"},s={pattern:/(^|\s)(?:proc\s+\w+|data(?!=)|quit|run)\b/i,alias:"keyword",lookbehind:!0},o=[/\/\*[\s\S]*?\*\//,{pattern:/(^[ \t]*|;\s*)\*[^;]*;/m,lookbehind:!0}],l={pattern:RegExp(t),greedy:!0},c=/[$%@.(){}\[\];,\\]/,d={pattern:/%?\b\w+(?=\()/,alias:"keyword"},p={function:d,"arg-value":{pattern:/(=\s*)[A-Z\.]+/i,lookbehind:!0},operator:/=/,"macro-variable":i,arg:{pattern:/[A-Z]+/i,alias:"keyword"},number:a,"numeric-constant":n,punctuation:c,string:l},u={pattern:/\b(?:format|put)\b=?[\w'$.]+/i,inside:{keyword:/^(?:format|put)(?==)/i,equals:/=/,format:{pattern:/(?:\w|\$\d)+\.\d?/,alias:"number"}}},m={pattern:/\b(?:format|put)\s+[\w']+(?:\s+[$.\w]+)+(?=;)/i,inside:{keyword:/^(?:format|put)/i,format:{pattern:/[\w$]+\.\d?/,alias:"number"}}},b={pattern:/((?:^|\s)=?)(?:catname|checkpoint execute_always|dm|endsas|filename|footnote|%include|libname|%list|lock|missing|options|page|resetline|%run|sasfile|skip|sysecho|title\d?)\b/i,lookbehind:!0,alias:"keyword"},g={pattern:/(^|\s)(?:submit(?:\s+(?:load|norun|parseonly))?|endsubmit)\b/i,lookbehind:!0,alias:"keyword"},k="aStore|accessControl|aggregation|audio|autotune|bayesianNetClassifier|bioMedImage|boolRule|builtins|cardinality|cdm|clustering|conditionalRandomFields|configuration|copula|countreg|dataDiscovery|dataPreprocess|dataSciencePilot|dataStep|decisionTree|deduplication|deepLearn|deepNeural|deepRnn|ds2|ecm|entityRes|espCluster|explainModel|factmac|fastKnn|fcmpact|fedSql|freqTab|gVarCluster|gam|gleam|graphSemiSupLearn|hiddenMarkovModel|hyperGroup|ica|image|iml|kernalPca|langModel|ldaTopic|loadStreams|mbc|mixed|mlTools|modelPublishing|network|neuralNet|nmf|nonParametricBayes|nonlinear|optNetwork|optimization|panel|pca|percentile|phreg|pls|qkb|qlim|quantreg|recommend|regression|reinforcementLearn|robustPca|ruleMining|sampling|sandwich|sccasl|search(?:Analytics)?|sentimentAnalysis|sequence|session(?:Prop)?|severity|simSystem|simple|smartData|sparkEmbeddedProcess|sparseML|spatialreg|spc|stabilityMonitoring|svDataDescription|svm|table|text(?:Filters|Frequency|Mining|Parse|Rule(?:Develop|Score)|Topic|Util)|timeData|transpose|tsInfo|tsReconcile|uniTimeSeries|varReduce",y={pattern:RegExp("(^|\\s)(?:action\\s+)?(?:)\\.[a-z]+\\b[^;]+".replace(//g,(function(){return k})),"i"),lookbehind:!0,inside:{keyword:RegExp("(?:)\\.[a-z]+\\b".replace(//g,(function(){return k})),"i"),action:{pattern:/(?:action)/i,alias:"keyword"},comment:o,function:d,"arg-value":p["arg-value"],operator:p.operator,argument:p.arg,number:a,"numeric-constant":n,punctuation:c,string:l}},S={pattern:/((?:^|\s)=?)(?:after|analysis|and|array|barchart|barwidth|begingraph|by|call|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|continue|data(?==)|define|delete|describe|document|do\s+over|do|dol|drop|dul|else|end(?:comp|source)?|entryTitle|eval(?:uate)?|exec(?:ute)?|exit|file(?:name)?|fill(?:attrs)?|flist|fnc|function(?:list)?|global|goto|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|leave|legendlabel|length|libname|loadactionset|merge|midpoints|_?null_|name|noobs|nowd|ods|options|or|otherwise|out(?:put)?|over(?:lay)?|plot|print|put|raise|ranexp|rannor|rbreak|retain|return|select|session|sessref|set|source|statgraph|sum|summarize|table|temp|terminate|then\s+do|then|title\d?|to|var|when|where|xaxisopts|y2axisopts|yaxisopts)\b/i,lookbehind:!0};e.languages.sas={datalines:{pattern:/^([ \t]*)(?:cards|(?:data)?lines);[\s\S]+?^[ \t]*;/im,lookbehind:!0,alias:"string",inside:{keyword:{pattern:/^(?:cards|(?:data)?lines)/i},punctuation:/;/}},"proc-sql":{pattern:/(^proc\s+(?:fed)?sql(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,lookbehind:!0,inside:{sql:{pattern:RegExp("^[ \t]*(?:select|alter\\s+table|(?:create|describe|drop)\\s+(?:index|table(?:\\s+constraints)?|view)|create\\s+unique\\s+index|insert\\s+into|update)(?:|[^;\"'])+;".replace(//g,(function(){return t})),"im"),alias:"language-sql",inside:e.languages.sql},"global-statements":b,"sql-statements":{pattern:/(^|\s)(?:disconnect\s+from|begin|commit|exec(?:ute)?|reset|rollback|validate)\b/i,lookbehind:!0,alias:"keyword"},number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-groovy":{pattern:/(^proc\s+groovy(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,groovy:{pattern:RegExp("(^[ \t]*submit(?:\\s+(?:load|norun|parseonly))?)(?:|[^\"'])+?(?=endsubmit;)".replace(//g,(function(){return t})),"im"),lookbehind:!0,alias:"language-groovy",inside:e.languages.groovy},keyword:S,"submit-statement":g,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-lua":{pattern:/(^proc\s+lua(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|data|quit|run);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,lua:{pattern:RegExp("(^[ \t]*submit(?:\\s+(?:load|norun|parseonly))?)(?:|[^\"'])+?(?=endsubmit;)".replace(//g,(function(){return t})),"im"),lookbehind:!0,alias:"language-lua",inside:e.languages.lua},keyword:S,"submit-statement":g,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-cas":{pattern:/(^proc\s+cas(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,"statement-var":{pattern:/((?:^|\s)=?)saveresult\s[^;]+/im,lookbehind:!0,inside:{statement:{pattern:/^saveresult\s+\S+/i,inside:{keyword:/^(?:saveresult)/i}},rest:p}},"cas-actions":y,statement:{pattern:/((?:^|\s)=?)(?:default|(?:un)?set|on|output|upload)[^;]+/im,lookbehind:!0,inside:p},step:s,keyword:S,function:d,format:u,altformat:m,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-args":{pattern:RegExp("(^proc\\s+\\w+\\s+)(?!\\s)(?:[^;\"']|)+;".replace(//g,(function(){return t})),"im"),lookbehind:!0,inside:p},"macro-keyword":r,"macro-variable":i,"macro-string-functions":{pattern:/((?:^|\s|=))%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)\(.*?(?:[^%]\))/i,lookbehind:!0,inside:{function:{pattern:/%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)/i,alias:"keyword"},"macro-keyword":r,"macro-variable":i,"escaped-char":{pattern:/%['"()<>=¬^~;,#]/},punctuation:c}},"macro-declaration":{pattern:/^%macro[^;]+(?=;)/im,inside:{keyword:/%macro/i}},"macro-end":{pattern:/^%mend[^;]+(?=;)/im,inside:{keyword:/%mend/i}},macro:{pattern:/%_\w+(?=\()/,alias:"keyword"},input:{pattern:/\binput\s[-\w\s/*.$&]+;/i,inside:{input:{alias:"keyword",pattern:/^input/i},comment:o,number:a,"numeric-constant":n}},"options-args":{pattern:/(^options)[-'"|/\\<>*+=:()\w\s]*(?=;)/im,lookbehind:!0,inside:p},"cas-actions":y,comment:o,function:d,format:u,altformat:m,"numeric-constant":n,datetime:{pattern:RegExp(t+"(?:dt?|t)"),alias:"number"},string:l,step:s,keyword:S,"operator-keyword":{pattern:/\b(?:eq|ge|gt|in|le|lt|ne|not)\b/i,alias:"operator"},number:a,operator:/\*\*?|\|\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\/=&]|[~¬^]=?/,punctuation:c}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-scheme.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-scheme.min.js index 980d04e6ad..2aa445193d 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-scheme.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-scheme.min.js @@ -1 +1 @@ -Prism.languages.scheme={comment:/;.*|#;\s*(?:\((?:[^()]|\([^()]*\))*\)|\[(?:[^\[\]]|\[[^\[\]]*\])*\])|#\|(?:[^#|]|#(?!\|)|\|(?!#)|#\|(?:[^#|]|#(?!\|)|\|(?!#))*\|#)*\|#/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()\[\]#'\s]+/,greedy:!0},char:{pattern:/#\\(?:[ux][a-fA-F\d]+\b|[-a-zA-Z]+\b|[\uD800-\uDBFF][\uDC00-\uDFFF]|\S)/,greedy:!0},"lambda-parameter":[{pattern:/((?:^|[^'`#])[(\[]lambda\s+)(?:[^|()\[\]'\s]+|\|(?:[^\\|]|\\.)*\|)/,lookbehind:!0},{pattern:/((?:^|[^'`#])[(\[]lambda\s+[(\[])[^()\[\]']+/,lookbehind:!0}],keyword:{pattern:/((?:^|[^'`#])[(\[])(?:begin|case(?:-lambda)?|cond(?:-expand)?|define(?:-library|-macro|-record-type|-syntax|-values)?|defmacro|delay(?:-force)?|do|else|except|export|guard|if|import|include(?:-ci|-library-declarations)?|lambda|let(?:rec)?(?:-syntax|-values|\*)?|let\*-values|only|parameterize|prefix|(?:quasi-?)?quote|rename|set!|syntax-(?:case|rules)|unless|unquote(?:-splicing)?|when)(?=[()\[\]\s]|$)/,lookbehind:!0},builtin:{pattern:/((?:^|[^'`#])[(\[])(?:abs|and|append|apply|assoc|ass[qv]|binary-port\?|boolean=?\?|bytevector(?:-append|-copy|-copy!|-length|-u8-ref|-u8-set!|\?)?|caar|cadr|call-with-(?:current-continuation|port|values)|call\/cc|car|cdar|cddr|cdr|ceiling|char(?:->integer|-ready\?|\?|<\?|<=\?|=\?|>\?|>=\?)|close-(?:input-port|output-port|port)|complex\?|cons|current-(?:error|input|output)-port|denominator|dynamic-wind|eof-object\??|eq\?|equal\?|eqv\?|error|error-object(?:-irritants|-message|\?)|eval|even\?|exact(?:-integer-sqrt|-integer\?|\?)?|expt|features|file-error\?|floor(?:-quotient|-remainder|\/)?|flush-output-port|for-each|gcd|get-output-(?:bytevector|string)|inexact\??|input-port(?:-open\?|\?)|integer(?:->char|\?)|lcm|length|list(?:->string|->vector|-copy|-ref|-set!|-tail|\?)?|make-(?:bytevector|list|parameter|string|vector)|map|max|member|memq|memv|min|modulo|negative\?|newline|not|null\?|number(?:->string|\?)|numerator|odd\?|open-(?:input|output)-(?:bytevector|string)|or|output-port(?:-open\?|\?)|pair\?|peek-char|peek-u8|port\?|positive\?|procedure\?|quotient|raise|raise-continuable|rational\?|rationalize|read-(?:bytevector|bytevector!|char|error\?|line|string|u8)|real\?|remainder|reverse|round|set-c[ad]r!|square|string(?:->list|->number|->symbol|->utf8|->vector|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?|<\?|<=\?|=\?|>\?|>=\?)?|substring|symbol(?:->string|\?|=\?)|syntax-error|textual-port\?|truncate(?:-quotient|-remainder|\/)?|u8-ready\?|utf8->string|values|vector(?:->list|->string|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?)?|with-exception-handler|write-(?:bytevector|char|string|u8)|zero\?)(?=[()\[\]\s]|$)/,lookbehind:!0},operator:{pattern:/((?:^|[^'`#])[(\[])(?:[-+*%/]|[<>]=?|=>?)(?=[()\[\]\s]|$)/,lookbehind:!0},number:{pattern:RegExp(function(r){for(var e in r)r[e]=r[e].replace(/<[\w\s]+>/g,function(e){return"(?:"+r[e].trim()+")"});return r[e]}({"":"\\d+(?:/\\d+)|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[esfdl][+-]?\\d+)?","":"[+-]?|[+-](?:inf|nan)\\.0","":"[+-](?:|(?:inf|nan)\\.0)?i","":"(?:@|)?|","":"(?:#d(?:#[ei])?|#[ei](?:#d)?)?","":"[0-9a-f]+(?:/[0-9a-f]+)?","":"[+-]?|[+-](?:inf|nan)\\.0","":"[+-](?:|(?:inf|nan)\\.0)?i","":"(?:@|)?|","":"#[box](?:#[ei])?|(?:#[ei])?#[box]","":"(^|[()\\[\\]\\s])(?:|)(?=[()\\[\\]\\s]|$)"}),"i"),lookbehind:!0},boolean:{pattern:/(^|[()\[\]\s])#(?:[ft]|false|true)(?=[()\[\]\s]|$)/,lookbehind:!0},function:{pattern:/((?:^|[^'`#])[(\[])(?:[^|()\[\]'\s]+|\|(?:[^\\|]|\\.)*\|)(?=[()\[\]\s]|$)/,lookbehind:!0},identifier:{pattern:/(^|[()\[\]\s])\|(?:[^\\|]|\\.)*\|(?=[()\[\]\s]|$)/,lookbehind:!0,greedy:!0},punctuation:/[()\[\]']/}; \ No newline at end of file +!function(e){e.languages.scheme={comment:/;.*|#;\s*(?:\((?:[^()]|\([^()]*\))*\)|\[(?:[^\[\]]|\[[^\[\]]*\])*\])|#\|(?:[^#|]|#(?!\|)|\|(?!#)|#\|(?:[^#|]|#(?!\|)|\|(?!#))*\|#)*\|#/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()\[\]#'\s]+/,greedy:!0},char:{pattern:/#\\(?:[ux][a-fA-F\d]+\b|[-a-zA-Z]+\b|[\uD800-\uDBFF][\uDC00-\uDFFF]|\S)/,greedy:!0},"lambda-parameter":[{pattern:/((?:^|[^'`#])[(\[]lambda\s+)(?:[^|()\[\]'\s]+|\|(?:[^\\|]|\\.)*\|)/,lookbehind:!0},{pattern:/((?:^|[^'`#])[(\[]lambda\s+[(\[])[^()\[\]']+/,lookbehind:!0}],keyword:{pattern:/((?:^|[^'`#])[(\[])(?:begin|case(?:-lambda)?|cond(?:-expand)?|define(?:-library|-macro|-record-type|-syntax|-values)?|defmacro|delay(?:-force)?|do|else|except|export|guard|if|import|include(?:-ci|-library-declarations)?|lambda|let(?:rec)?(?:-syntax|-values|\*)?|let\*-values|only|parameterize|prefix|(?:quasi-?)?quote|rename|set!|syntax-(?:case|rules)|unless|unquote(?:-splicing)?|when)(?=[()\[\]\s]|$)/,lookbehind:!0},builtin:{pattern:/((?:^|[^'`#])[(\[])(?:abs|and|append|apply|assoc|ass[qv]|binary-port\?|boolean=?\?|bytevector(?:-append|-copy|-copy!|-length|-u8-ref|-u8-set!|\?)?|caar|cadr|call-with-(?:current-continuation|port|values)|call\/cc|car|cdar|cddr|cdr|ceiling|char(?:->integer|-ready\?|\?|<\?|<=\?|=\?|>\?|>=\?)|close-(?:input-port|output-port|port)|complex\?|cons|current-(?:error|input|output)-port|denominator|dynamic-wind|eof-object\??|eq\?|equal\?|eqv\?|error|error-object(?:-irritants|-message|\?)|eval|even\?|exact(?:-integer-sqrt|-integer\?|\?)?|expt|features|file-error\?|floor(?:-quotient|-remainder|\/)?|flush-output-port|for-each|gcd|get-output-(?:bytevector|string)|inexact\??|input-port(?:-open\?|\?)|integer(?:->char|\?)|lcm|length|list(?:->string|->vector|-copy|-ref|-set!|-tail|\?)?|make-(?:bytevector|list|parameter|string|vector)|map|max|member|memq|memv|min|modulo|negative\?|newline|not|null\?|number(?:->string|\?)|numerator|odd\?|open-(?:input|output)-(?:bytevector|string)|or|output-port(?:-open\?|\?)|pair\?|peek-char|peek-u8|port\?|positive\?|procedure\?|quotient|raise|raise-continuable|rational\?|rationalize|read-(?:bytevector|bytevector!|char|error\?|line|string|u8)|real\?|remainder|reverse|round|set-c[ad]r!|square|string(?:->list|->number|->symbol|->utf8|->vector|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?|<\?|<=\?|=\?|>\?|>=\?)?|substring|symbol(?:->string|\?|=\?)|syntax-error|textual-port\?|truncate(?:-quotient|-remainder|\/)?|u8-ready\?|utf8->string|values|vector(?:->list|->string|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\?)?|with-exception-handler|write-(?:bytevector|char|string|u8)|zero\?)(?=[()\[\]\s]|$)/,lookbehind:!0},operator:{pattern:/((?:^|[^'`#])[(\[])(?:[-+*%/]|[<>]=?|=>?)(?=[()\[\]\s]|$)/,lookbehind:!0},number:{pattern:RegExp(function(e){for(var r in e)e[r]=e[r].replace(/<[\w\s]+>/g,(function(r){return"(?:"+e[r].trim()+")"}));return e[r]}({"":"\\d+(?:/\\d+)|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[esfdl][+-]?\\d+)?","":"[+-]?|[+-](?:inf|nan)\\.0","":"[+-](?:|(?:inf|nan)\\.0)?i","":"(?:@|)?|","":"(?:#d(?:#[ei])?|#[ei](?:#d)?)?","":"[0-9a-f]+(?:/[0-9a-f]+)?","":"[+-]?|[+-](?:inf|nan)\\.0","":"[+-](?:|(?:inf|nan)\\.0)?i","":"(?:@|)?|","":"#[box](?:#[ei])?|(?:#[ei])?#[box]","":"(^|[()\\[\\]\\s])(?:|)(?=[()\\[\\]\\s]|$)"}),"i"),lookbehind:!0},boolean:{pattern:/(^|[()\[\]\s])#(?:[ft]|false|true)(?=[()\[\]\s]|$)/,lookbehind:!0},function:{pattern:/((?:^|[^'`#])[(\[])(?:[^|()\[\]'\s]+|\|(?:[^\\|]|\\.)*\|)(?=[()\[\]\s]|$)/,lookbehind:!0},identifier:{pattern:/(^|[()\[\]\s])\|(?:[^\\|]|\\.)*\|(?=[()\[\]\s]|$)/,lookbehind:!0,greedy:!0},punctuation:/[()\[\]']/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-shell-session.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-shell-session.min.js index 74810323c7..470c9ce03d 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-shell-session.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-shell-session.min.js @@ -1 +1 @@ -!function(s){var n=['"(?:\\\\[^]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^"\\\\`$])*"',"'[^']*'","\\$'(?:[^'\\\\]|\\\\[^])*'","<<-?\\s*([\"']?)(\\w+)\\1\\s[^]*?[\r\n]\\2"].join("|");s.languages["shell-session"]={command:{pattern:RegExp('^(?:[^\\s@:$#%*!/\\\\]+@[^\r\n@:$#%*!/\\\\]+(?::[^\0-\\x1F$#%*?"<>:;|]+)?|[/~.][^\0-\\x1F$#%*?"<>@:;|]*)?[$#%](?=\\s)'+"(?:[^\\\\\r\n \t'\"<$]|[ \t](?:(?!#)|#.*$)|\\\\(?:[^\r]|\r\n?)|\\$(?!')|<(?!<)|<>)+".replace(/<>/g,function(){return n}),"m"),greedy:!0,inside:{info:{pattern:/^[^#$%]+/,alias:"punctuation",inside:{user:/^[^\s@:$#%*!/\\]+@[^\r\n@:$#%*!/\\]+/,punctuation:/:/,path:/[\s\S]+/}},bash:{pattern:/(^[$#%]\s*)\S[\s\S]*/,lookbehind:!0,alias:"language-bash",inside:s.languages.bash},"shell-symbol":{pattern:/^[$#%]/,alias:"important"}}},output:/.(?:.*(?:[\r\n]|.$))*/},s.languages["sh-session"]=s.languages.shellsession=s.languages["shell-session"]}(Prism); \ No newline at end of file +!function(s){var n=['"(?:\\\\[^]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^"\\\\`$])*"',"'[^']*'","\\$'(?:[^'\\\\]|\\\\[^])*'","<<-?\\s*([\"']?)(\\w+)\\1\\s[^]*?[\r\n]\\2"].join("|");s.languages["shell-session"]={command:{pattern:RegExp('^(?:[^\\s@:$#%*!/\\\\]+@[^\r\n@:$#%*!/\\\\]+(?::[^\0-\\x1F$#%*?"<>:;|]+)?|[/~.][^\0-\\x1F$#%*?"<>@:;|]*)?[$#%](?=\\s)'+"(?:[^\\\\\r\n \t'\"<$]|[ \t](?:(?!#)|#.*$)|\\\\(?:[^\r]|\r\n?)|\\$(?!')|<(?!<)|<>)+".replace(/<>/g,(function(){return n})),"m"),greedy:!0,inside:{info:{pattern:/^[^#$%]+/,alias:"punctuation",inside:{user:/^[^\s@:$#%*!/\\]+@[^\r\n@:$#%*!/\\]+/,punctuation:/:/,path:/[\s\S]+/}},bash:{pattern:/(^[$#%]\s*)\S[\s\S]*/,lookbehind:!0,alias:"language-bash",inside:s.languages.bash},"shell-symbol":{pattern:/^[$#%]/,alias:"important"}}},output:/.(?:.*(?:[\r\n]|.$))*/},s.languages["sh-session"]=s.languages.shellsession=s.languages["shell-session"]}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-smarty.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-smarty.min.js index 4651214a8a..1e397744d3 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-smarty.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-smarty.min.js @@ -1 +1 @@ -!function(t){t.languages.smarty={comment:{pattern:/^\{\*[\s\S]*?\*\}/,greedy:!0},"embedded-php":{pattern:/^\{php\}[\s\S]*?\{\/php\}/,greedy:!0,inside:{smarty:{pattern:/^\{php\}|\{\/php\}$/,inside:null},php:{pattern:/[\s\S]+/,alias:"language-php",inside:t.languages.php}}},string:[{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0,inside:{interpolation:{pattern:/\{[^{}]*\}|`[^`]*`/,inside:{"interpolation-punctuation":{pattern:/^[{`]|[`}]$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:null}}},variable:/\$\w+/}},{pattern:/'(?:\\.|[^'\\\r\n])*'/,greedy:!0}],keyword:{pattern:/(^\{\/?)[a-z_]\w*\b(?!\()/i,lookbehind:!0,greedy:!0},delimiter:{pattern:/^\{\/?|\}$/,greedy:!0,alias:"punctuation"},number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,variable:[/\$(?!\d)\w+/,/#(?!\d)\w+#/,{pattern:/(\.|->|\w\s*=)(?!\d)\w+\b(?!\()/,lookbehind:!0},{pattern:/(\[)(?!\d)\w+(?=\])/,lookbehind:!0}],function:{pattern:/(\|\s*)@?[a-z_]\w*|\b[a-z_]\w*(?=\()/i,lookbehind:!0},"attr-name":/\b[a-z_]\w*(?=\s*=)/i,boolean:/\b(?:false|no|off|on|true|yes)\b/,punctuation:/[\[\](){}.,:`]|->/,operator:[/[+\-*\/%]|==?=?|[!<>]=?|&&|\|\|?/,/\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s+by)?\b/,/\b(?:and|eq|gt?e|gt|lt?e|lt|mod|neq?|not|or)\b/]},t.languages.smarty["embedded-php"].inside.smarty.inside=t.languages.smarty,t.languages.smarty.string[0].inside.interpolation.inside.expression.inside=t.languages.smarty;var e=/"(?:\\.|[^"\\\r\n])*"|'(?:\\.|[^'\\\r\n])*'/,a=RegExp("\\{\\*[^]*?\\*\\}|\\{php\\}[^]*?\\{/php\\}|"+"\\{(?:[^{}\"']||\\{(?:[^{}\"']||\\{(?:[^{}\"']|)*\\})*\\})*\\}".replace(//g,function(){return e.source}),"g");t.hooks.add("before-tokenize",function(e){var n=!1;t.languages["markup-templating"].buildPlaceholders(e,"smarty",a,function(e){return"{/literal}"===e&&(n=!1),!n&&("{literal}"===e&&(n=!0),!0)})}),t.hooks.add("after-tokenize",function(e){t.languages["markup-templating"].tokenizePlaceholders(e,"smarty")})}(Prism); \ No newline at end of file +!function(e){e.languages.smarty={comment:{pattern:/^\{\*[\s\S]*?\*\}/,greedy:!0},"embedded-php":{pattern:/^\{php\}[\s\S]*?\{\/php\}/,greedy:!0,inside:{smarty:{pattern:/^\{php\}|\{\/php\}$/,inside:null},php:{pattern:/[\s\S]+/,alias:"language-php",inside:e.languages.php}}},string:[{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0,inside:{interpolation:{pattern:/\{[^{}]*\}|`[^`]*`/,inside:{"interpolation-punctuation":{pattern:/^[{`]|[`}]$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:null}}},variable:/\$\w+/}},{pattern:/'(?:\\.|[^'\\\r\n])*'/,greedy:!0}],keyword:{pattern:/(^\{\/?)[a-z_]\w*\b(?!\()/i,lookbehind:!0,greedy:!0},delimiter:{pattern:/^\{\/?|\}$/,greedy:!0,alias:"punctuation"},number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,variable:[/\$(?!\d)\w+/,/#(?!\d)\w+#/,{pattern:/(\.|->|\w\s*=)(?!\d)\w+\b(?!\()/,lookbehind:!0},{pattern:/(\[)(?!\d)\w+(?=\])/,lookbehind:!0}],function:{pattern:/(\|\s*)@?[a-z_]\w*|\b[a-z_]\w*(?=\()/i,lookbehind:!0},"attr-name":/\b[a-z_]\w*(?=\s*=)/i,boolean:/\b(?:false|no|off|on|true|yes)\b/,punctuation:/[\[\](){}.,:`]|->/,operator:[/[+\-*\/%]|==?=?|[!<>]=?|&&|\|\|?/,/\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s+by)?\b/,/\b(?:and|eq|gt?e|gt|lt?e|lt|mod|neq?|not|or)\b/]},e.languages.smarty["embedded-php"].inside.smarty.inside=e.languages.smarty,e.languages.smarty.string[0].inside.interpolation.inside.expression.inside=e.languages.smarty;var n=/"(?:\\.|[^"\\\r\n])*"|'(?:\\.|[^'\\\r\n])*'/,t=RegExp("\\{\\*[^]*?\\*\\}|\\{php\\}[^]*?\\{/php\\}|"+"\\{(?:[^{}\"']||\\{(?:[^{}\"']||\\{(?:[^{}\"']|)*\\})*\\})*\\}".replace(//g,(function(){return n.source})),"g");e.hooks.add("before-tokenize",(function(n){var a=!1;e.languages["markup-templating"].buildPlaceholders(n,"smarty",t,(function(e){return"{/literal}"===e&&(a=!1),!a&&("{literal}"===e&&(a=!0),!0)}))})),e.hooks.add("after-tokenize",(function(n){e.languages["markup-templating"].tokenizePlaceholders(n,"smarty")}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-sml.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-sml.min.js index d6a8e3d8e3..cb6152870c 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-sml.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-sml.min.js @@ -1 +1 @@ -!function(e){var n=/\b(?:abstype|and|andalso|as|case|datatype|do|else|end|eqtype|exception|fn|fun|functor|handle|if|in|include|infix|infixr|let|local|nonfix|of|op|open|orelse|raise|rec|sharing|sig|signature|struct|structure|then|type|val|where|while|with|withtype)\b/i;e.languages.sml={comment:/\(\*(?:[^*(]|\*(?!\))|\((?!\*)|\(\*(?:[^*(]|\*(?!\))|\((?!\*))*\*\))*\*\)/,string:{pattern:/#?"(?:[^"\\]|\\.)*"/,greedy:!0},"class-name":[{pattern:RegExp("((?:^|[^:]):\\s*)(?:\\s*(?:(?:\\*|->)\\s*|,\\s*(?:(?=)|(?!)\\s+)))*".replace(//g,function(){return"\\s*(?:[*,]|->)"}).replace(//g,function(){return"(?:'[\\w']*||\\((?:[^()]|\\([^()]*\\))*\\)|\\{(?:[^{}]|\\{[^{}]*\\})*\\})(?:\\s+)*"}).replace(//g,function(){return"(?!)[a-z\\d_][\\w'.]*"}).replace(//g,function(){return n.source}),"i"),lookbehind:!0,greedy:!0,inside:null},{pattern:/((?:^|[^\w'])(?:datatype|exception|functor|signature|structure|type)\s+)[a-z_][\w'.]*/i,lookbehind:!0}],function:{pattern:/((?:^|[^\w'])fun\s+)[a-z_][\w'.]*/i,lookbehind:!0},keyword:n,variable:{pattern:/(^|[^\w'])'[\w']*/,lookbehind:!0},number:/~?\b(?:\d+(?:\.\d+)?(?:e~?\d+)?|0x[\da-f]+)\b/i,word:{pattern:/\b0w(?:\d+|x[\da-f]+)\b/i,alias:"constant"},boolean:/\b(?:false|true)\b/i,operator:/\.\.\.|:[>=:]|=>?|->|[<>]=?|[!+\-*/^#|@~]/,punctuation:/[(){}\[\].:,;]/},e.languages.sml["class-name"][0].inside=e.languages.sml,e.languages.smlnj=e.languages.sml}(Prism); \ No newline at end of file +!function(e){var n=/\b(?:abstype|and|andalso|as|case|datatype|do|else|end|eqtype|exception|fn|fun|functor|handle|if|in|include|infix|infixr|let|local|nonfix|of|op|open|orelse|raise|rec|sharing|sig|signature|struct|structure|then|type|val|where|while|with|withtype)\b/i;e.languages.sml={comment:/\(\*(?:[^*(]|\*(?!\))|\((?!\*)|\(\*(?:[^*(]|\*(?!\))|\((?!\*))*\*\))*\*\)/,string:{pattern:/#?"(?:[^"\\]|\\.)*"/,greedy:!0},"class-name":[{pattern:RegExp("((?:^|[^:]):\\s*)(?:\\s*(?:(?:\\*|->)\\s*|,\\s*(?:(?=)|(?!)\\s+)))*".replace(//g,(function(){return"\\s*(?:[*,]|->)"})).replace(//g,(function(){return"(?:'[\\w']*||\\((?:[^()]|\\([^()]*\\))*\\)|\\{(?:[^{}]|\\{[^{}]*\\})*\\})(?:\\s+)*"})).replace(//g,(function(){return"(?!)[a-z\\d_][\\w'.]*"})).replace(//g,(function(){return n.source})),"i"),lookbehind:!0,greedy:!0,inside:null},{pattern:/((?:^|[^\w'])(?:datatype|exception|functor|signature|structure|type)\s+)[a-z_][\w'.]*/i,lookbehind:!0}],function:{pattern:/((?:^|[^\w'])fun\s+)[a-z_][\w'.]*/i,lookbehind:!0},keyword:n,variable:{pattern:/(^|[^\w'])'[\w']*/,lookbehind:!0},number:/~?\b(?:\d+(?:\.\d+)?(?:e~?\d+)?|0x[\da-f]+)\b/i,word:{pattern:/\b0w(?:\d+|x[\da-f]+)\b/i,alias:"constant"},boolean:/\b(?:false|true)\b/i,operator:/\.\.\.|:[>=:]|=>?|->|[<>]=?|[!+\-*/^#|@~]/,punctuation:/[(){}\[\].:,;]/},e.languages.sml["class-name"][0].inside=e.languages.sml,e.languages.smlnj=e.languages.sml}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-soy.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-soy.min.js index 76c1ab6978..dd8071096e 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-soy.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-soy.min.js @@ -1 +1 @@ -!function(t){var e=/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,a=/\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-F]+\b/;t.languages.soy={comment:[/\/\*[\s\S]*?\*\//,{pattern:/(\s)\/\/.*/,lookbehind:!0,greedy:!0}],"command-arg":{pattern:/(\{+\/?\s*(?:alias|call|delcall|delpackage|deltemplate|namespace|template)\s+)\.?[\w.]+/,lookbehind:!0,alias:"string",inside:{punctuation:/\./}},parameter:{pattern:/(\{+\/?\s*@?param\??\s+)\.?[\w.]+/,lookbehind:!0,alias:"variable"},keyword:[{pattern:/(\{+\/?[^\S\r\n]*)(?:\\[nrt]|alias|call|case|css|default|delcall|delpackage|deltemplate|else(?:if)?|fallbackmsg|for(?:each)?|if(?:empty)?|lb|let|literal|msg|namespace|nil|@?param\??|rb|sp|switch|template|xid)/,lookbehind:!0},/\b(?:any|as|attributes|bool|css|float|html|in|int|js|list|map|null|number|string|uri)\b/],delimiter:{pattern:/^\{+\/?|\/?\}+$/,alias:"punctuation"},property:/\w+(?==)/,variable:{pattern:/\$[^\W\d]\w*(?:\??(?:\.\w+|\[[^\]]+\]))*/,inside:{string:{pattern:e,greedy:!0},number:a,punctuation:/[\[\].?]/}},string:{pattern:e,greedy:!0},function:[/\w+(?=\()/,{pattern:/(\|[^\S\r\n]*)\w+/,lookbehind:!0}],boolean:/\b(?:false|true)\b/,number:a,operator:/\?:?|<=?|>=?|==?|!=|[+*/%-]|\b(?:and|not|or)\b/,punctuation:/[{}()\[\]|.,:]/},t.hooks.add("before-tokenize",function(e){var a=!1;t.languages["markup-templating"].buildPlaceholders(e,"soy",/\{\{.+?\}\}|\{.+?\}|\s\/\/.*|\/\*[\s\S]*?\*\//g,function(e){return"{/literal}"===e&&(a=!1),!a&&("{literal}"===e&&(a=!0),!0)})}),t.hooks.add("after-tokenize",function(e){t.languages["markup-templating"].tokenizePlaceholders(e,"soy")})}(Prism); \ No newline at end of file +!function(e){var a=/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,t=/\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-F]+\b/;e.languages.soy={comment:[/\/\*[\s\S]*?\*\//,{pattern:/(\s)\/\/.*/,lookbehind:!0,greedy:!0}],"command-arg":{pattern:/(\{+\/?\s*(?:alias|call|delcall|delpackage|deltemplate|namespace|template)\s+)\.?[\w.]+/,lookbehind:!0,alias:"string",inside:{punctuation:/\./}},parameter:{pattern:/(\{+\/?\s*@?param\??\s+)\.?[\w.]+/,lookbehind:!0,alias:"variable"},keyword:[{pattern:/(\{+\/?[^\S\r\n]*)(?:\\[nrt]|alias|call|case|css|default|delcall|delpackage|deltemplate|else(?:if)?|fallbackmsg|for(?:each)?|if(?:empty)?|lb|let|literal|msg|namespace|nil|@?param\??|rb|sp|switch|template|xid)/,lookbehind:!0},/\b(?:any|as|attributes|bool|css|float|html|in|int|js|list|map|null|number|string|uri)\b/],delimiter:{pattern:/^\{+\/?|\/?\}+$/,alias:"punctuation"},property:/\w+(?==)/,variable:{pattern:/\$[^\W\d]\w*(?:\??(?:\.\w+|\[[^\]]+\]))*/,inside:{string:{pattern:a,greedy:!0},number:t,punctuation:/[\[\].?]/}},string:{pattern:a,greedy:!0},function:[/\w+(?=\()/,{pattern:/(\|[^\S\r\n]*)\w+/,lookbehind:!0}],boolean:/\b(?:false|true)\b/,number:t,operator:/\?:?|<=?|>=?|==?|!=|[+*/%-]|\b(?:and|not|or)\b/,punctuation:/[{}()\[\]|.,:]/},e.hooks.add("before-tokenize",(function(a){var t=!1;e.languages["markup-templating"].buildPlaceholders(a,"soy",/\{\{.+?\}\}|\{.+?\}|\s\/\/.*|\/\*[\s\S]*?\*\//g,(function(e){return"{/literal}"===e&&(t=!1),!t&&("{literal}"===e&&(t=!0),!0)}))})),e.hooks.add("after-tokenize",(function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"soy")}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-stata.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-stata.js new file mode 100644 index 0000000000..a385bfd957 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-stata.js @@ -0,0 +1,76 @@ +// https://www.stata.com/manuals/u.pdf +// https://www.stata.com/manuals/p.pdf + +Prism.languages.stata = { + 'comment': [ + { + pattern: /(^[ \t]*)\*.*/m, + lookbehind: true, + greedy: true + }, + { + pattern: /(^|\s)\/\/.*|\/\*[\s\S]*?\*\//, + lookbehind: true, + greedy: true + } + ], + 'string-literal': { + pattern: /"[^"\r\n]*"|[‘`']".*?"[’`']/, + greedy: true, + inside: { + 'interpolation': { + pattern: /\$\{[^{}]*\}|[‘`']\w[^’`'\r\n]*[’`']/, + inside: { + 'punctuation': /^\$\{|\}$/, + 'expression': { + pattern: /[\s\S]+/, + inside: null // see below + } + } + }, + 'string': /[\s\S]+/ + } + }, + + 'mata': { + pattern: /(^[ \t]*mata[ \t]*:)[\s\S]+?(?=^end\b)/m, + lookbehind: true, + greedy: true, + alias: 'language-mata', + inside: Prism.languages.mata + }, + 'java': { + pattern: /(^[ \t]*java[ \t]*:)[\s\S]+?(?=^end\b)/m, + lookbehind: true, + greedy: true, + alias: 'language-java', + inside: Prism.languages.java + }, + 'python': { + pattern: /(^[ \t]*python[ \t]*:)[\s\S]+?(?=^end\b)/m, + lookbehind: true, + greedy: true, + alias: 'language-python', + inside: Prism.languages.python + }, + + + 'command': { + pattern: /(^[ \t]*(?:\.[ \t]+)?(?:(?:bayes|bootstrap|by|bysort|capture|collect|fmm|fp|frame|jackknife|mfp|mi|nestreg|noisily|permute|quietly|rolling|simulate|statsby|stepwise|svy|version|xi)\b[^:\r\n]*:[ \t]*|(?:capture|noisily|quietly|version)[ \t]+)?)[a-zA-Z]\w*/m, + lookbehind: true, + greedy: true, + alias: 'keyword' + }, + 'variable': /\$\w+|[‘`']\w[^’`'\r\n]*[’`']/, + 'keyword': /\b(?:bayes|bootstrap|by|bysort|capture|clear|collect|fmm|fp|frame|if|in|jackknife|mi[ \t]+estimate|mfp|nestreg|noisily|of|permute|quietly|rolling|simulate|sort|statsby|stepwise|svy|varlist|version|xi)\b/, + + + 'boolean': /\b(?:off|on)\b/, + 'number': /\b\d+(?:\.\d+)?\b|\B\.\d+/, + 'function': /\b[a-z_]\w*(?=\()/i, + + 'operator': /\+\+|--|##?|[<>!=~]=?|[+\-*^&|/]/, + 'punctuation': /[(){}[\],:]/ +}; + +Prism.languages.stata['string-literal'].inside.interpolation.inside.expression.inside = Prism.languages.stata; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-stata.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-stata.min.js new file mode 100644 index 0000000000..f6ccbfdf20 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-stata.min.js @@ -0,0 +1 @@ +Prism.languages.stata={comment:[{pattern:/(^[ \t]*)\*.*/m,lookbehind:!0,greedy:!0},{pattern:/(^|\s)\/\/.*|\/\*[\s\S]*?\*\//,lookbehind:!0,greedy:!0}],"string-literal":{pattern:/"[^"\r\n]*"|[‘`']".*?"[’`']/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^{}]*\}|[‘`']\w[^’`'\r\n]*[’`']/,inside:{punctuation:/^\$\{|\}$/,expression:{pattern:/[\s\S]+/,inside:null}}},string:/[\s\S]+/}},mata:{pattern:/(^[ \t]*mata[ \t]*:)[\s\S]+?(?=^end\b)/m,lookbehind:!0,greedy:!0,alias:"language-mata",inside:Prism.languages.mata},java:{pattern:/(^[ \t]*java[ \t]*:)[\s\S]+?(?=^end\b)/m,lookbehind:!0,greedy:!0,alias:"language-java",inside:Prism.languages.java},python:{pattern:/(^[ \t]*python[ \t]*:)[\s\S]+?(?=^end\b)/m,lookbehind:!0,greedy:!0,alias:"language-python",inside:Prism.languages.python},command:{pattern:/(^[ \t]*(?:\.[ \t]+)?(?:(?:bayes|bootstrap|by|bysort|capture|collect|fmm|fp|frame|jackknife|mfp|mi|nestreg|noisily|permute|quietly|rolling|simulate|statsby|stepwise|svy|version|xi)\b[^:\r\n]*:[ \t]*|(?:capture|noisily|quietly|version)[ \t]+)?)[a-zA-Z]\w*/m,lookbehind:!0,greedy:!0,alias:"keyword"},variable:/\$\w+|[‘`']\w[^’`'\r\n]*[’`']/,keyword:/\b(?:bayes|bootstrap|by|bysort|capture|clear|collect|fmm|fp|frame|if|in|jackknife|mi[ \t]+estimate|mfp|nestreg|noisily|of|permute|quietly|rolling|simulate|sort|statsby|stepwise|svy|varlist|version|xi)\b/,boolean:/\b(?:off|on)\b/,number:/\b\d+(?:\.\d+)?\b|\B\.\d+/,function:/\b[a-z_]\w*(?=\()/i,operator:/\+\+|--|##?|[<>!=~]=?|[+\-*^&|/]/,punctuation:/[(){}[\],:]/},Prism.languages.stata["string-literal"].inside.interpolation.inside.expression.inside=Prism.languages.stata; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-supercollider.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-supercollider.js new file mode 100644 index 0000000000..ad4199d9f8 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-supercollider.js @@ -0,0 +1,36 @@ +Prism.languages.supercollider = { + 'comment': { + pattern: /\/\/.*|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\//, + greedy: true + }, + 'string': { + pattern: /(^|[^\\])"(?:[^"\\]|\\[\s\S])*"/, + lookbehind: true, + greedy: true + }, + 'char': { + pattern: /\$(?:[^\\\r\n]|\\.)/, + greedy: true + }, + 'symbol': { + pattern: /(^|[^\\])'(?:[^'\\]|\\[\s\S])*'|\\\w+/, + lookbehind: true, + greedy: true + }, + + 'keyword': /\b(?:_|arg|classvar|const|nil|var|while)\b/, + 'boolean': /\b(?:false|true)\b/, + + 'label': { + pattern: /\b[a-z_]\w*(?=\s*:)/, + alias: 'property' + }, + + 'number': /\b(?:inf|pi|0x[0-9a-fA-F]+|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(?:pi)?|\d+r[0-9a-zA-Z]+(?:\.[0-9a-zA-Z]+)?|\d+[sb]{1,4}\d*)\b/, + 'class-name': /\b[A-Z]\w*\b/, + + 'operator': /\.{2,3}|#(?![[{])|&&|[!=]==?|\+>>|\+{1,3}|-[->]|=>|>>|\?\?|@\|?@|\|(?:@|[!=]=)?\||!\?|<[!=>]|\*{1,2}|<{2,3}\*?|[-!%&/<>?@|=`]/, + 'punctuation': /[{}()[\].:,;]|#[[{]/ +}; + +Prism.languages.sclang = Prism.languages.supercollider; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-supercollider.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-supercollider.min.js new file mode 100644 index 0000000000..52376717c2 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-supercollider.min.js @@ -0,0 +1 @@ +Prism.languages.supercollider={comment:{pattern:/\/\/.*|\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\//,greedy:!0},string:{pattern:/(^|[^\\])"(?:[^"\\]|\\[\s\S])*"/,lookbehind:!0,greedy:!0},char:{pattern:/\$(?:[^\\\r\n]|\\.)/,greedy:!0},symbol:{pattern:/(^|[^\\])'(?:[^'\\]|\\[\s\S])*'|\\\w+/,lookbehind:!0,greedy:!0},keyword:/\b(?:_|arg|classvar|const|nil|var|while)\b/,boolean:/\b(?:false|true)\b/,label:{pattern:/\b[a-z_]\w*(?=\s*:)/,alias:"property"},number:/\b(?:inf|pi|0x[0-9a-fA-F]+|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(?:pi)?|\d+r[0-9a-zA-Z]+(?:\.[0-9a-zA-Z]+)?|\d+[sb]{1,4}\d*)\b/,"class-name":/\b[A-Z]\w*\b/,operator:/\.{2,3}|#(?![[{])|&&|[!=]==?|\+>>|\+{1,3}|-[->]|=>|>>|\?\?|@\|?@|\|(?:@|[!=]=)?\||!\?|<[!=>]|\*{1,2}|<{2,3}\*?|[-!%&/<>?@|=`]/,punctuation:/[{}()[\].:,;]|#[[{]/},Prism.languages.sclang=Prism.languages.supercollider; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-swift.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-swift.min.js index 39b41b7240..b4f87f4637 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-swift.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-swift.min.js @@ -1 +1 @@ -Prism.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp('(^|[^"#])(?:"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^(])|[^\\\\\r\n"])*"|"""(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|[^(])|[^\\\\"]|"(?!""))*""")(?!["#])'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp('(^|[^"#])(#+)(?:"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^#])|[^\\\\\r\n])*?"|"""(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|[^#])|[^\\\\])*?""")\\2'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp("#(?:(?:elseif|if)\\b(?:[ \t]*(?:![ \t]*)?(?:\\b\\w+\\b(?:[ \t]*\\((?:[^()]|\\([^()]*\\))*\\))?|\\((?:[^()]|\\([^()]*\\))*\\))(?:[ \t]*(?:&&|\\|\\|))?)+|(?:else|endif)\\b)"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},Prism.languages.swift["string-literal"].forEach(function(e){e.inside.interpolation.inside=Prism.languages.swift}); \ No newline at end of file +Prism.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp('(^|[^"#])(?:"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^(])|[^\\\\\r\n"])*"|"""(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|[^(])|[^\\\\"]|"(?!""))*""")(?!["#])'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp('(^|[^"#])(#+)(?:"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^#])|[^\\\\\r\n])*?"|"""(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|[^#])|[^\\\\])*?""")\\2'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp("#(?:(?:elseif|if)\\b(?:[ \t]*(?:![ \t]*)?(?:\\b\\w+\\b(?:[ \t]*\\((?:[^()]|\\([^()]*\\))*\\))?|\\((?:[^()]|\\([^()]*\\))*\\))(?:[ \t]*(?:&&|\\|\\|))?)+|(?:else|endif)\\b)"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},Prism.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=Prism.languages.swift})); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-systemd.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-systemd.min.js index 8c192ef7e2..25b98f672f 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-systemd.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-systemd.min.js @@ -1 +1 @@ -!function(e){var t={pattern:/^[;#].*/m,greedy:!0},n='"(?:[^\r\n"\\\\]|\\\\(?:[^\r]|\r\n?))*"(?!\\S)';Prism.languages.systemd={comment:t,section:{pattern:/^\[[^\n\r\[\]]*\](?=[ \t]*$)/m,greedy:!0,inside:{punctuation:/^\[|\]$/,"section-name":{pattern:/[\s\S]+/,alias:"selector"}}},key:{pattern:/^[^\s=]+(?=[ \t]*=)/m,greedy:!0,alias:"attr-name"},value:{pattern:RegExp("(=[ \t]*(?!\\s))(?:"+n+'|(?=[^"\r\n]))(?:[^\\s\\\\]|[ \t]+(?:(?![ \t"])|'+n+")|\\\\[\r\n]+(?:[#;].*[\r\n]+)*(?![#;]))*"),lookbehind:!0,greedy:!0,alias:"attr-value",inside:{comment:t,quoted:{pattern:RegExp("(^|\\s)"+n),lookbehind:!0,greedy:!0},punctuation:/\\$/m,boolean:{pattern:/^(?:false|no|off|on|true|yes)$/,greedy:!0}}},punctuation:/=/}}(); \ No newline at end of file +!function(e){var t={pattern:/^[;#].*/m,greedy:!0},n='"(?:[^\r\n"\\\\]|\\\\(?:[^\r]|\r\n?))*"(?!\\S)';e.languages.systemd={comment:t,section:{pattern:/^\[[^\n\r\[\]]*\](?=[ \t]*$)/m,greedy:!0,inside:{punctuation:/^\[|\]$/,"section-name":{pattern:/[\s\S]+/,alias:"selector"}}},key:{pattern:/^[^\s=]+(?=[ \t]*=)/m,greedy:!0,alias:"attr-name"},value:{pattern:RegExp("(=[ \t]*(?!\\s))(?:"+n+'|(?=[^"\r\n]))(?:[^\\s\\\\]|[ \t]+(?:(?![ \t"])|'+n+")|\\\\[\r\n]+(?:[#;].*[\r\n]+)*(?![#;]))*"),lookbehind:!0,greedy:!0,alias:"attr-value",inside:{comment:t,quoted:{pattern:RegExp("(^|\\s)"+n),lookbehind:!0,greedy:!0},punctuation:/\\$/m,boolean:{pattern:/^(?:false|no|off|on|true|yes)$/,greedy:!0}}},punctuation:/=/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-t4-templating.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-t4-templating.min.js index 80dcb0e201..365b8e8549 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-t4-templating.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-t4-templating.min.js @@ -1 +1 @@ -!function(n){function i(e,t,a){return{pattern:RegExp("<#"+e+"[\\s\\S]*?#>"),alias:"block",inside:{delimiter:{pattern:RegExp("^<#"+e+"|#>$"),alias:"important"},content:{pattern:/[\s\S]+/,inside:t,alias:a}}}}n.languages["t4-templating"]=Object.defineProperty({},"createT4",{value:function(e){var t=n.languages[e],a="language-"+e;return{block:{pattern:/<#[\s\S]+?#>/,inside:{directive:i("@",{"attr-value":{pattern:/=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/,inside:{punctuation:/^=|^["']|["']$/}},keyword:/\b\w+(?=\s)/,"attr-name":/\b\w+/}),expression:i("=",t,a),"class-feature":i("\\+",t,a),standard:i("",t,a)}}}}})}(Prism); \ No newline at end of file +!function(e){function t(e,t,a){return{pattern:RegExp("<#"+e+"[\\s\\S]*?#>"),alias:"block",inside:{delimiter:{pattern:RegExp("^<#"+e+"|#>$"),alias:"important"},content:{pattern:/[\s\S]+/,inside:t,alias:a}}}}e.languages["t4-templating"]=Object.defineProperty({},"createT4",{value:function(a){var n=e.languages[a],i="language-"+a;return{block:{pattern:/<#[\s\S]+?#>/,inside:{directive:t("@",{"attr-value":{pattern:/=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/,inside:{punctuation:/^=|^["']|["']$/}},keyword:/\b\w+(?=\s)/,"attr-name":/\b\w+/}),expression:t("=",n,i),"class-feature":t("\\+",n,i),standard:t("",n,i)}}}}})}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-textile.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-textile.min.js index 8bc917c954..a98dfd8b5e 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-textile.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-textile.min.js @@ -1 +1 @@ -!function(n){function e(n,e){return RegExp(n.replace(//g,function(){return"(?:\\([^|()\n]+\\)|\\[[^\\]\n]+\\]|\\{[^}\n]+\\})"}).replace(//g,function(){return"(?:\\)|\\((?![^|()\n]+\\)))"}),e||"")}var i={css:{pattern:/\{[^{}]+\}/,inside:{rest:n.languages.css}},"class-id":{pattern:/(\()[^()]+(?=\))/,lookbehind:!0,alias:"attr-value"},lang:{pattern:/(\[)[^\[\]]+(?=\])/,lookbehind:!0,alias:"attr-value"},punctuation:/[\\\/]\d+|\S/},t=n.languages.textile=n.languages.extend("markup",{phrase:{pattern:/(^|\r|\n)\S[\s\S]*?(?=$|\r?\n\r?\n|\r\r)/,lookbehind:!0,inside:{"block-tag":{pattern:e("^[a-z]\\w*(?:||[<>=])*\\."),inside:{modifier:{pattern:e("(^[a-z]\\w*)(?:||[<>=])+(?=\\.)"),lookbehind:!0,inside:i},tag:/^[a-z]\w*/,punctuation:/\.$/}},list:{pattern:e("^[*#]+*\\s+\\S.*","m"),inside:{modifier:{pattern:e("(^[*#]+)+"),lookbehind:!0,inside:i},punctuation:/^[*#]+/}},table:{pattern:e("^(?:(?:||[<>=^~])+\\.\\s*)?(?:\\|(?:(?:||[<>=^~_]|[\\\\/]\\d+)+\\.|(?!(?:||[<>=^~_]|[\\\\/]\\d+)+\\.))[^|]*)+\\|","m"),inside:{modifier:{pattern:e("(^|\\|(?:\r?\n|\r)?)(?:||[<>=^~_]|[\\\\/]\\d+)+(?=\\.)"),lookbehind:!0,inside:i},punctuation:/\||^\./}},inline:{pattern:e("(^|[^a-zA-Z\\d])(\\*\\*|__|\\?\\?|[*_%@+\\-^~])*.+?\\2(?![a-zA-Z\\d])"),lookbehind:!0,inside:{bold:{pattern:e("(^(\\*\\*?)*).+?(?=\\2)"),lookbehind:!0},italic:{pattern:e("(^(__?)*).+?(?=\\2)"),lookbehind:!0},cite:{pattern:e("(^\\?\\?*).+?(?=\\?\\?)"),lookbehind:!0,alias:"string"},code:{pattern:e("(^@*).+?(?=@)"),lookbehind:!0,alias:"keyword"},inserted:{pattern:e("(^\\+*).+?(?=\\+)"),lookbehind:!0},deleted:{pattern:e("(^-*).+?(?=-)"),lookbehind:!0},span:{pattern:e("(^%*).+?(?=%)"),lookbehind:!0},modifier:{pattern:e("(^\\*\\*|__|\\?\\?|[*_%@+\\-^~])+"),lookbehind:!0,inside:i},punctuation:/[*_%?@+\-^~]+/}},"link-ref":{pattern:/^\[[^\]]+\]\S+$/m,inside:{string:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0},url:{pattern:/(^\])\S+$/,lookbehind:!0},punctuation:/[\[\]]/}},link:{pattern:e('"*[^"]+":.+?(?=[^\\w/]?(?:\\s|$))'),inside:{text:{pattern:e('(^"*)[^"]+(?=")'),lookbehind:!0},modifier:{pattern:e('(^")+'),lookbehind:!0,inside:i},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[":]/}},image:{pattern:e("!(?:||[<>=])*(?![<>=])[^!\\s()]+(?:\\([^)]+\\))?!(?::.+?(?=[^\\w/]?(?:\\s|$)))?"),inside:{source:{pattern:e("(^!(?:||[<>=])*)(?![<>=])[^!\\s()]+(?:\\([^)]+\\))?(?=!)"),lookbehind:!0,alias:"url"},modifier:{pattern:e("(^!)(?:||[<>=])+"),lookbehind:!0,inside:i},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[!:]/}},footnote:{pattern:/\b\[\d+\]/,alias:"comment",inside:{punctuation:/\[|\]/}},acronym:{pattern:/\b[A-Z\d]+\([^)]+\)/,inside:{comment:{pattern:/(\()[^()]+(?=\))/,lookbehind:!0},punctuation:/[()]/}},mark:{pattern:/\b\((?:C|R|TM)\)/,alias:"comment",inside:{punctuation:/[()]/}}}}}),a=t.phrase.inside,o={inline:a.inline,link:a.link,image:a.image,footnote:a.footnote,acronym:a.acronym,mark:a.mark};t.tag.pattern=/<\/?(?!\d)[a-z0-9]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i;var r=a.inline.inside;r.bold.inside=o,r.italic.inside=o,r.inserted.inside=o,r.deleted.inside=o,r.span.inside=o;var d=a.table.inside;d.inline=o.inline,d.link=o.link,d.image=o.image,d.footnote=o.footnote,d.acronym=o.acronym,d.mark=o.mark}(Prism); \ No newline at end of file +!function(n){function e(n,e){return RegExp(n.replace(//g,(function(){return"(?:\\([^|()\n]+\\)|\\[[^\\]\n]+\\]|\\{[^}\n]+\\})"})).replace(//g,(function(){return"(?:\\)|\\((?![^|()\n]+\\)))"})),e||"")}var i={css:{pattern:/\{[^{}]+\}/,inside:{rest:n.languages.css}},"class-id":{pattern:/(\()[^()]+(?=\))/,lookbehind:!0,alias:"attr-value"},lang:{pattern:/(\[)[^\[\]]+(?=\])/,lookbehind:!0,alias:"attr-value"},punctuation:/[\\\/]\d+|\S/},t=n.languages.textile=n.languages.extend("markup",{phrase:{pattern:/(^|\r|\n)\S[\s\S]*?(?=$|\r?\n\r?\n|\r\r)/,lookbehind:!0,inside:{"block-tag":{pattern:e("^[a-z]\\w*(?:||[<>=])*\\."),inside:{modifier:{pattern:e("(^[a-z]\\w*)(?:||[<>=])+(?=\\.)"),lookbehind:!0,inside:i},tag:/^[a-z]\w*/,punctuation:/\.$/}},list:{pattern:e("^[*#]+*\\s+\\S.*","m"),inside:{modifier:{pattern:e("(^[*#]+)+"),lookbehind:!0,inside:i},punctuation:/^[*#]+/}},table:{pattern:e("^(?:(?:||[<>=^~])+\\.\\s*)?(?:\\|(?:(?:||[<>=^~_]|[\\\\/]\\d+)+\\.|(?!(?:||[<>=^~_]|[\\\\/]\\d+)+\\.))[^|]*)+\\|","m"),inside:{modifier:{pattern:e("(^|\\|(?:\r?\n|\r)?)(?:||[<>=^~_]|[\\\\/]\\d+)+(?=\\.)"),lookbehind:!0,inside:i},punctuation:/\||^\./}},inline:{pattern:e("(^|[^a-zA-Z\\d])(\\*\\*|__|\\?\\?|[*_%@+\\-^~])*.+?\\2(?![a-zA-Z\\d])"),lookbehind:!0,inside:{bold:{pattern:e("(^(\\*\\*?)*).+?(?=\\2)"),lookbehind:!0},italic:{pattern:e("(^(__?)*).+?(?=\\2)"),lookbehind:!0},cite:{pattern:e("(^\\?\\?*).+?(?=\\?\\?)"),lookbehind:!0,alias:"string"},code:{pattern:e("(^@*).+?(?=@)"),lookbehind:!0,alias:"keyword"},inserted:{pattern:e("(^\\+*).+?(?=\\+)"),lookbehind:!0},deleted:{pattern:e("(^-*).+?(?=-)"),lookbehind:!0},span:{pattern:e("(^%*).+?(?=%)"),lookbehind:!0},modifier:{pattern:e("(^\\*\\*|__|\\?\\?|[*_%@+\\-^~])+"),lookbehind:!0,inside:i},punctuation:/[*_%?@+\-^~]+/}},"link-ref":{pattern:/^\[[^\]]+\]\S+$/m,inside:{string:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0},url:{pattern:/(^\])\S+$/,lookbehind:!0},punctuation:/[\[\]]/}},link:{pattern:e('"*[^"]+":.+?(?=[^\\w/]?(?:\\s|$))'),inside:{text:{pattern:e('(^"*)[^"]+(?=")'),lookbehind:!0},modifier:{pattern:e('(^")+'),lookbehind:!0,inside:i},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[":]/}},image:{pattern:e("!(?:||[<>=])*(?![<>=])[^!\\s()]+(?:\\([^)]+\\))?!(?::.+?(?=[^\\w/]?(?:\\s|$)))?"),inside:{source:{pattern:e("(^!(?:||[<>=])*)(?![<>=])[^!\\s()]+(?:\\([^)]+\\))?(?=!)"),lookbehind:!0,alias:"url"},modifier:{pattern:e("(^!)(?:||[<>=])+"),lookbehind:!0,inside:i},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[!:]/}},footnote:{pattern:/\b\[\d+\]/,alias:"comment",inside:{punctuation:/\[|\]/}},acronym:{pattern:/\b[A-Z\d]+\([^)]+\)/,inside:{comment:{pattern:/(\()[^()]+(?=\))/,lookbehind:!0},punctuation:/[()]/}},mark:{pattern:/\b\((?:C|R|TM)\)/,alias:"comment",inside:{punctuation:/[()]/}}}}}),a=t.phrase.inside,o={inline:a.inline,link:a.link,image:a.image,footnote:a.footnote,acronym:a.acronym,mark:a.mark};t.tag.pattern=/<\/?(?!\d)[a-z0-9]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i;var r=a.inline.inside;r.bold.inside=o,r.italic.inside=o,r.inserted.inside=o,r.deleted.inside=o,r.span.inside=o;var d=a.table.inside;d.inline=o.inline,d.link=o.link,d.image=o.image,d.footnote=o.footnote,d.acronym=o.acronym,d.mark=o.mark}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-toml.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-toml.min.js index 0bb75d16b3..0dec967cde 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-toml.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-toml.min.js @@ -1 +1 @@ -!function(e){function n(e){return e.replace(/__/g,function(){return"(?:[\\w-]+|'[^'\n\r]*'|\"(?:\\\\.|[^\\\\\"\r\n])*\")"})}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n("(^[\t ]*\\[\\s*(?:\\[\\s*)?)__(?:\\s*\\.\\s*__)*(?=\\s*\\])"),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n("(^[\t ]*|[{,]\\s*)__(?:\\s*\\.\\s*__)*(?=\\s*=)"),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism); \ No newline at end of file +!function(e){function n(e){return e.replace(/__/g,(function(){return"(?:[\\w-]+|'[^'\n\r]*'|\"(?:\\\\.|[^\\\\\"\r\n])*\")"}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n("(^[\t ]*\\[\\s*(?:\\[\\s*)?)__(?:\\s*\\.\\s*__)*(?=\\s*\\])"),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n("(^[\t ]*|[{,]\\s*)__(?:\\s*\\.\\s*__)*(?=\\s*=)"),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-tt2.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-tt2.min.js index ede4024761..dc4d64817b 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-tt2.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-tt2.min.js @@ -1 +1 @@ -!function(t){t.languages.tt2=t.languages.extend("clike",{comment:/#.*|\[%#[\s\S]*?%\]/,keyword:/\b(?:BLOCK|CALL|CASE|CATCH|CLEAR|DEBUG|DEFAULT|ELSE|ELSIF|END|FILTER|FINAL|FOREACH|GET|IF|IN|INCLUDE|INSERT|LAST|MACRO|META|NEXT|PERL|PROCESS|RAWPERL|RETURN|SET|STOP|SWITCH|TAGS|THROW|TRY|UNLESS|USE|WHILE|WRAPPER)\b/,punctuation:/[[\]{},()]/}),t.languages.insertBefore("tt2","number",{operator:/=[>=]?|!=?|<=?|>=?|&&|\|\|?|\b(?:and|not|or)\b/,variable:{pattern:/\b[a-z]\w*(?:\s*\.\s*(?:\d+|\$?[a-z]\w*))*\b/i}}),t.languages.insertBefore("tt2","keyword",{delimiter:{pattern:/^(?:\[%|%%)-?|-?%\]$/,alias:"punctuation"}}),t.languages.insertBefore("tt2","string",{"single-quoted-string":{pattern:/'[^\\']*(?:\\[\s\S][^\\']*)*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"[^\\"]*(?:\\[\s\S][^\\"]*)*"/,greedy:!0,alias:"string",inside:{variable:{pattern:/\$(?:[a-z]\w*(?:\.(?:\d+|\$?[a-z]\w*))*)/i}}}}),delete t.languages.tt2.string,t.hooks.add("before-tokenize",function(e){t.languages["markup-templating"].buildPlaceholders(e,"tt2",/\[%[\s\S]+?%\]/g)}),t.hooks.add("after-tokenize",function(e){t.languages["markup-templating"].tokenizePlaceholders(e,"tt2")})}(Prism); \ No newline at end of file +!function(e){e.languages.tt2=e.languages.extend("clike",{comment:/#.*|\[%#[\s\S]*?%\]/,keyword:/\b(?:BLOCK|CALL|CASE|CATCH|CLEAR|DEBUG|DEFAULT|ELSE|ELSIF|END|FILTER|FINAL|FOREACH|GET|IF|IN|INCLUDE|INSERT|LAST|MACRO|META|NEXT|PERL|PROCESS|RAWPERL|RETURN|SET|STOP|SWITCH|TAGS|THROW|TRY|UNLESS|USE|WHILE|WRAPPER)\b/,punctuation:/[[\]{},()]/}),e.languages.insertBefore("tt2","number",{operator:/=[>=]?|!=?|<=?|>=?|&&|\|\|?|\b(?:and|not|or)\b/,variable:{pattern:/\b[a-z]\w*(?:\s*\.\s*(?:\d+|\$?[a-z]\w*))*\b/i}}),e.languages.insertBefore("tt2","keyword",{delimiter:{pattern:/^(?:\[%|%%)-?|-?%\]$/,alias:"punctuation"}}),e.languages.insertBefore("tt2","string",{"single-quoted-string":{pattern:/'[^\\']*(?:\\[\s\S][^\\']*)*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"[^\\"]*(?:\\[\s\S][^\\"]*)*"/,greedy:!0,alias:"string",inside:{variable:{pattern:/\$(?:[a-z]\w*(?:\.(?:\d+|\$?[a-z]\w*))*)/i}}}}),delete e.languages.tt2.string,e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"tt2",/\[%[\s\S]+?%\]/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"tt2")}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-twig.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-twig.min.js index 75452fd53e..5ad764529b 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-twig.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-twig.min.js @@ -1 +1 @@ -Prism.languages.twig={comment:/^\{#[\s\S]*?#\}$/,"tag-name":{pattern:/(^\{%-?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%]-?|-?[%}]\}$/,alias:"punctuation"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,boolean:/\b(?:false|null|true)\b/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,operator:[{pattern:/(\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],punctuation:/[()\[\]{}:.,]/},Prism.hooks.add("before-tokenize",function(e){if("twig"===e.language){Prism.languages["markup-templating"].buildPlaceholders(e,"twig",/\{(?:#[\s\S]*?#|%[\s\S]*?%|\{[\s\S]*?\})\}/g)}}),Prism.hooks.add("after-tokenize",function(e){Prism.languages["markup-templating"].tokenizePlaceholders(e,"twig")}); \ No newline at end of file +Prism.languages.twig={comment:/^\{#[\s\S]*?#\}$/,"tag-name":{pattern:/(^\{%-?\s*)\w+/,lookbehind:!0,alias:"keyword"},delimiter:{pattern:/^\{[{%]-?|-?[%}]\}$/,alias:"punctuation"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,boolean:/\b(?:false|null|true)\b/,number:/\b0x[\dA-Fa-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][-+]?\d+)?/,operator:[{pattern:/(\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],punctuation:/[()\[\]{}:.,]/},Prism.hooks.add("before-tokenize",(function(e){"twig"===e.language&&Prism.languages["markup-templating"].buildPlaceholders(e,"twig",/\{(?:#[\s\S]*?#|%[\s\S]*?%|\{[\s\S]*?\})\}/g)})),Prism.hooks.add("after-tokenize",(function(e){Prism.languages["markup-templating"].tokenizePlaceholders(e,"twig")})); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-vhdl.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-vhdl.js index c898cc5412..7426fa2ce5 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-vhdl.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-vhdl.js @@ -11,9 +11,12 @@ Prism.languages.vhdl = { alias: 'function' }, 'string': /"(?:[^\\"\r\n]|\\(?:\r\n|[\s\S]))*"/, - 'constant': /\b(?:library|use)\b/i, + 'attribute': { + pattern: /\b'\w+/, + alias: 'attr-name' + }, // support for predefined attributes included - 'keyword': /\b(?:'active|'ascending|'base|'delayed|'driving|'driving_value|'event|'high|'image|'instance_name|'last_active|'last_event|'last_value|'left|'leftof|'length|'low|'path_name|'pos|'pred|'quiet|'range|'reverse_range|'right|'rightof|'simple_name|'stable|'succ|'transaction|'val|'value|access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with)\b/i, + 'keyword': /\b(?:access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|private|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|view|wait|when|while|with)\b/i, 'boolean': /\b(?:false|true)\b/i, 'function': /\w+(?=\()/, // decimal, based, physical, and exponential numbers supported diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-vhdl.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-vhdl.min.js index 01532288e9..17fd67df3d 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-vhdl.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-vhdl.min.js @@ -1 +1 @@ -Prism.languages.vhdl={comment:/--.+/,"vhdl-vectors":{pattern:/\b[oxb]"[\da-f_]+"|"[01uxzwlh-]+"/i,alias:"number"},"quoted-function":{pattern:/"\S+?"(?=\()/,alias:"function"},string:/"(?:[^\\"\r\n]|\\(?:\r\n|[\s\S]))*"/,constant:/\b(?:library|use)\b/i,keyword:/\b(?:'active|'ascending|'base|'delayed|'driving|'driving_value|'event|'high|'image|'instance_name|'last_active|'last_event|'last_value|'left|'leftof|'length|'low|'path_name|'pos|'pred|'quiet|'range|'reverse_range|'right|'rightof|'simple_name|'stable|'succ|'transaction|'val|'value|access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with)\b/i,boolean:/\b(?:false|true)\b/i,function:/\w+(?=\()/,number:/'[01uxzwlh-]'|\b(?:\d+#[\da-f_.]+#|\d[\d_.]*)(?:e[-+]?\d+)?/i,operator:/[<>]=?|:=|[-+*/&=]|\b(?:abs|and|mod|nand|nor|not|or|rem|rol|ror|sla|sll|sra|srl|xnor|xor)\b/i,punctuation:/[{}[\];(),.:]/}; \ No newline at end of file +Prism.languages.vhdl={comment:/--.+/,"vhdl-vectors":{pattern:/\b[oxb]"[\da-f_]+"|"[01uxzwlh-]+"/i,alias:"number"},"quoted-function":{pattern:/"\S+?"(?=\()/,alias:"function"},string:/"(?:[^\\"\r\n]|\\(?:\r\n|[\s\S]))*"/,attribute:{pattern:/\b'\w+/,alias:"attr-name"},keyword:/\b(?:access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|private|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|view|wait|when|while|with)\b/i,boolean:/\b(?:false|true)\b/i,function:/\w+(?=\()/,number:/'[01uxzwlh-]'|\b(?:\d+#[\da-f_.]+#|\d[\d_.]*)(?:e[-+]?\d+)?/i,operator:/[<>]=?|:=|[-+*/&=]|\b(?:abs|and|mod|nand|nor|not|or|rem|rol|ror|sla|sll|sra|srl|xnor|xor)\b/i,punctuation:/[{}[\];(),.:]/}; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-wolfram.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-wolfram.js index fbd0716c57..0013cfcb8e 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-wolfram.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-wolfram.js @@ -20,7 +20,7 @@ Prism.languages.wolfram = { }, 'boolean': /\b(?:False|True)\b/, 'number': /(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i, - 'operator': /\/\.|;|=\.|\^=|\^:=|:=|<<|>>|<\||\|>|:>|\|->|->|<-|@@@|@@|@|\/@|=!=|===|==|=|\+|-|\^|\[\/-+%=\]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/, + 'operator': /\/\.|;|=\.|\^=|\^:=|:=|<<|>>|<\||\|>|:>|\|->|->|<-|@@@|@@|@|\/@|=!=|===|==|=|\+|-|\[\/-+%=\]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/, 'punctuation': /[{}[\];(),.:]/ }; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-wolfram.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-wolfram.min.js index 03309bf0aa..57db919dd3 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-wolfram.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-wolfram.min.js @@ -1 +1 @@ -Prism.languages.wolfram={comment:/\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/,string:{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:Abs|AbsArg|Accuracy|Block|Do|For|Function|If|Manipulate|Module|Nest|NestList|None|Return|Switch|Table|Which|While)\b/,context:{pattern:/\b\w+`+\w*/,alias:"class-name"},blank:{pattern:/\b\w+_\b/,alias:"regex"},"global-variable":{pattern:/\$\w+/,alias:"variable"},boolean:/\b(?:False|True)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/\/\.|;|=\.|\^=|\^:=|:=|<<|>>|<\||\|>|:>|\|->|->|<-|@@@|@@|@|\/@|=!=|===|==|=|\+|-|\^|\[\/-+%=\]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.mathematica=Prism.languages.wolfram,Prism.languages.wl=Prism.languages.wolfram,Prism.languages.nb=Prism.languages.wolfram; \ No newline at end of file +Prism.languages.wolfram={comment:/\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/,string:{pattern:/"(?:\\.|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:Abs|AbsArg|Accuracy|Block|Do|For|Function|If|Manipulate|Module|Nest|NestList|None|Return|Switch|Table|Which|While)\b/,context:{pattern:/\b\w+`+\w*/,alias:"class-name"},blank:{pattern:/\b\w+_\b/,alias:"regex"},"global-variable":{pattern:/\$\w+/,alias:"variable"},boolean:/\b(?:False|True)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/\/\.|;|=\.|\^=|\^:=|:=|<<|>>|<\||\|>|:>|\|->|->|<-|@@@|@@|@|\/@|=!=|===|==|=|\+|-|\[\/-+%=\]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.mathematica=Prism.languages.wolfram,Prism.languages.wl=Prism.languages.wolfram,Prism.languages.nb=Prism.languages.wolfram; \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-xml-doc.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-xml-doc.min.js index 8a80d65342..85074eb378 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-xml-doc.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-xml-doc.min.js @@ -1 +1 @@ -!function(n){function a(a,e){n.languages[a]&&n.languages.insertBefore(a,"comment",{"doc-comment":e})}var e=n.languages.markup.tag,t={pattern:/\/\/\/.*/,greedy:!0,alias:"comment",inside:{tag:e}},g={pattern:/'''.*/,greedy:!0,alias:"comment",inside:{tag:e}};a("csharp",t),a("fsharp",t),a("vbnet",g)}(Prism); \ No newline at end of file +!function(a){function e(e,n){a.languages[e]&&a.languages.insertBefore(e,"comment",{"doc-comment":n})}var n=a.languages.markup.tag,t={pattern:/\/\/\/.*/,greedy:!0,alias:"comment",inside:{tag:n}},g={pattern:/'''.*/,greedy:!0,alias:"comment",inside:{tag:n}};e("csharp",t),e("fsharp",t),e("vbnet",g)}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-xquery.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-xquery.min.js index 14db8f8de4..f206e0c990 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-xquery.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-xquery.min.js @@ -1 +1 @@ -!function(r){r.languages.xquery=r.languages.extend("markup",{"xquery-comment":{pattern:/\(:[\s\S]*?:\)/,greedy:!0,alias:"comment"},string:{pattern:/(["'])(?:\1\1|(?!\1)[\s\S])*\1/,greedy:!0},extension:{pattern:/\(#.+?#\)/,alias:"symbol"},variable:/\$[-\w:]+/,axis:{pattern:/(^|[^-])(?:ancestor(?:-or-self)?|attribute|child|descendant(?:-or-self)?|following(?:-sibling)?|parent|preceding(?:-sibling)?|self)(?=::)/,lookbehind:!0,alias:"operator"},"keyword-operator":{pattern:/(^|[^:-])\b(?:and|castable as|div|eq|except|ge|gt|idiv|instance of|intersect|is|le|lt|mod|ne|or|union)\b(?=$|[^:-])/,lookbehind:!0,alias:"operator"},keyword:{pattern:/(^|[^:-])\b(?:as|ascending|at|base-uri|boundary-space|case|cast as|collation|construction|copy-namespaces|declare|default|descending|else|empty (?:greatest|least)|encoding|every|external|for|function|if|import|in|inherit|lax|let|map|module|namespace|no-inherit|no-preserve|option|order(?: by|ed|ing)?|preserve|return|satisfies|schema|some|stable|strict|strip|then|to|treat as|typeswitch|unordered|validate|variable|version|where|xquery)\b(?=$|[^:-])/,lookbehind:!0},function:/[\w-]+(?::[\w-]+)*(?=\s*\()/,"xquery-element":{pattern:/(element\s+)[\w-]+(?::[\w-]+)*/,lookbehind:!0,alias:"tag"},"xquery-attribute":{pattern:/(attribute\s+)[\w-]+(?::[\w-]+)*/,lookbehind:!0,alias:"attr-name"},builtin:{pattern:/(^|[^:-])\b(?:attribute|comment|document|element|processing-instruction|text|xs:(?:ENTITIES|ENTITY|ID|IDREFS?|NCName|NMTOKENS?|NOTATION|Name|QName|anyAtomicType|anyType|anyURI|base64Binary|boolean|byte|date|dateTime|dayTimeDuration|decimal|double|duration|float|gDay|gMonth|gMonthDay|gYear|gYearMonth|hexBinary|int|integer|language|long|negativeInteger|nonNegativeInteger|nonPositiveInteger|normalizedString|positiveInteger|short|string|time|token|unsigned(?:Byte|Int|Long|Short)|untyped(?:Atomic)?|yearMonthDuration))\b(?=$|[^:-])/,lookbehind:!0},number:/\b\d+(?:\.\d+)?(?:E[+-]?\d+)?/,operator:[/[+*=?|@]|\.\.?|:=|!=|<[=<]?|>[=>]?/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}],punctuation:/[[\](){},;:/]/}),r.languages.xquery.tag.pattern=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/,r.languages.xquery.tag.inside["attr-value"].pattern=/=(?:("|')(?:\\[\s\S]|\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}|(?!\1)[^\\])*\1|[^\s'">=]+)/,r.languages.xquery.tag.inside["attr-value"].inside.punctuation=/^="|"$/,r.languages.xquery.tag.inside["attr-value"].inside.expression={pattern:/\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}/,inside:r.languages.xquery,alias:"language-xquery"};var s=function(e){return"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join("")},l=function(e){for(var t=[],n=0;n"===a.content[a.content.length-1].content||t.push({tagName:s(a.content[0].content[1]),openedBraces:0}):!(0[=>]?/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}],punctuation:/[[\](){},;:/]/}),e.languages.xquery.tag.pattern=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/,e.languages.xquery.tag.inside["attr-value"].pattern=/=(?:("|')(?:\\[\s\S]|\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}|(?!\1)[^\\])*\1|[^\s'">=]+)/,e.languages.xquery.tag.inside["attr-value"].inside.punctuation=/^="|"$/,e.languages.xquery.tag.inside["attr-value"].inside.expression={pattern:/\{(?!\{)(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}/,inside:e.languages.xquery,alias:"language-xquery"};var t=function(e){return"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(t).join("")},n=function(a){for(var o=[],i=0;i0&&o[o.length-1].tagName===t(r.content[0].content[1])&&o.pop():"/>"===r.content[r.content.length-1].content||o.push({tagName:t(r.content[0].content[1]),openedBraces:0}):!(o.length>0&&"punctuation"===r.type&&"{"===r.content)||a[i+1]&&"punctuation"===a[i+1].type&&"{"===a[i+1].content||a[i-1]&&"plain-text"===a[i-1].type&&"{"===a[i-1].content?o.length>0&&o[o.length-1].openedBraces>0&&"punctuation"===r.type&&"}"===r.content?o[o.length-1].openedBraces--:"comment"!==r.type&&(s=!0):o[o.length-1].openedBraces++),(s||"string"==typeof r)&&o.length>0&&0===o[o.length-1].openedBraces){var l=t(r);i0&&("string"==typeof a[i-1]||"plain-text"===a[i-1].type)&&(l=t(a[i-1])+l,a.splice(i-1,1),i--),/^\s+$/.test(l)?a[i]=l:a[i]=new e.Token("plain-text",l,null,l)}r.content&&"string"!=typeof r.content&&n(r.content)}};e.hooks.add("after-tokenize",(function(e){"xquery"===e.language&&n(e.tokens)}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-yaml.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-yaml.min.js index 344f4baa59..5cd16d3d7f 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-yaml.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-yaml.min.js @@ -1 +1 @@ -!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"}),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,function(){return t}).replace(/<>/g,function(){return e});return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,function(){return t})),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,function(){return t}).replace(/<>/g,function(){return"(?:"+a+"|"+d+")"})),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism); \ No newline at end of file +!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,(function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"})),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return e}));return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,(function(){return t}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return"(?:"+a+"|"+d+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-zig.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-zig.min.js index 298d9c3481..26316b4604 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-zig.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/components/prism-zig.min.js @@ -1 +1 @@ -!function(n){function e(e){return function(){return e}}var r=/\b(?:align|allowzero|and|anyframe|anytype|asm|async|await|break|cancel|catch|comptime|const|continue|defer|else|enum|errdefer|error|export|extern|fn|for|if|inline|linksection|nakedcc|noalias|nosuspend|null|or|orelse|packed|promise|pub|resume|return|stdcallcc|struct|suspend|switch|test|threadlocal|try|undefined|union|unreachable|usingnamespace|var|volatile|while)\b/,a="\\b(?!"+r.source+")(?!\\d)\\w+\\b",o="align\\s*\\((?:[^()]|\\([^()]*\\))*\\)",s="(?!\\s)(?:!?\\s*(?:"+"(?:\\?|\\bpromise->|(?:\\[[^[\\]]*\\]|\\*(?!\\*)|\\*\\*)(?:\\s*|\\s*const\\b|\\s*volatile\\b|\\s*allowzero\\b)*)".replace(//g,e(o))+"\\s*)*"+"(?:\\bpromise\\b|(?:\\berror\\.)?(?:\\.)*(?!\\s+))".replace(//g,e(a))+")+";n.languages.zig={comment:[{pattern:/\/\/[/!].*/,alias:"doc-comment"},/\/{2}.*/],string:[{pattern:/(^|[^\\@])c?"(?:[^"\\\r\n]|\\.)*"/,lookbehind:!0,greedy:!0},{pattern:/([\r\n])([ \t]+c?\\{2}).*(?:(?:\r\n?|\n)\2.*)*/,lookbehind:!0,greedy:!0}],char:{pattern:/(^|[^\\])'(?:[^'\\\r\n]|[\uD800-\uDFFF]{2}|\\(?:.|x[a-fA-F\d]{2}|u\{[a-fA-F\d]{1,6}\}))'/,lookbehind:!0,greedy:!0},builtin:/\B@(?!\d)\w+(?=\s*\()/,label:{pattern:/(\b(?:break|continue)\s*:\s*)\w+\b|\b(?!\d)\w+\b(?=\s*:\s*(?:\{|while\b))/,lookbehind:!0},"class-name":[/\b(?!\d)\w+(?=\s*=\s*(?:(?:extern|packed)\s+)?(?:enum|struct|union)\s*[({])/,{pattern:RegExp("(:\\s*)(?=\\s*(?:\\s*)?[=;,)])|(?=\\s*(?:\\s*)?\\{)".replace(//g,e(s)).replace(//g,e(o))),lookbehind:!0,inside:null},{pattern:RegExp("(\\)\\s*)(?=\\s*(?:\\s*)?;)".replace(//g,e(s)).replace(//g,e(o))),lookbehind:!0,inside:null}],"builtin-type":{pattern:/\b(?:anyerror|bool|c_u?(?:int|long|longlong|short)|c_longdouble|c_void|comptime_(?:float|int)|f(?:16|32|64|128)|[iu](?:8|16|32|64|128|size)|noreturn|type|void)\b/,alias:"keyword"},keyword:r,function:/\b(?!\d)\w+(?=\s*\()/,number:/\b(?:0b[01]+|0o[0-7]+|0x[a-fA-F\d]+(?:\.[a-fA-F\d]*)?(?:[pP][+-]?[a-fA-F\d]+)?|\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)\b/,boolean:/\b(?:false|true)\b/,operator:/\.[*?]|\.{2,3}|[-=]>|\*\*|\+\+|\|\||(?:<<|>>|[-+*]%|[-+*/%^&|<>!=])=?|[?~]/,punctuation:/[.:,;(){}[\]]/},n.languages.zig["class-name"].forEach(function(e){null===e.inside&&(e.inside=n.languages.zig)})}(Prism); \ No newline at end of file +!function(e){function n(e){return function(){return e}}var r=/\b(?:align|allowzero|and|anyframe|anytype|asm|async|await|break|cancel|catch|comptime|const|continue|defer|else|enum|errdefer|error|export|extern|fn|for|if|inline|linksection|nakedcc|noalias|nosuspend|null|or|orelse|packed|promise|pub|resume|return|stdcallcc|struct|suspend|switch|test|threadlocal|try|undefined|union|unreachable|usingnamespace|var|volatile|while)\b/,a="\\b(?!"+r.source+")(?!\\d)\\w+\\b",o="align\\s*\\((?:[^()]|\\([^()]*\\))*\\)",s="(?!\\s)(?:!?\\s*(?:"+"(?:\\?|\\bpromise->|(?:\\[[^[\\]]*\\]|\\*(?!\\*)|\\*\\*)(?:\\s*|\\s*const\\b|\\s*volatile\\b|\\s*allowzero\\b)*)".replace(//g,n(o))+"\\s*)*"+"(?:\\bpromise\\b|(?:\\berror\\.)?(?:\\.)*(?!\\s+))".replace(//g,n(a))+")+";e.languages.zig={comment:[{pattern:/\/\/[/!].*/,alias:"doc-comment"},/\/{2}.*/],string:[{pattern:/(^|[^\\@])c?"(?:[^"\\\r\n]|\\.)*"/,lookbehind:!0,greedy:!0},{pattern:/([\r\n])([ \t]+c?\\{2}).*(?:(?:\r\n?|\n)\2.*)*/,lookbehind:!0,greedy:!0}],char:{pattern:/(^|[^\\])'(?:[^'\\\r\n]|[\uD800-\uDFFF]{2}|\\(?:.|x[a-fA-F\d]{2}|u\{[a-fA-F\d]{1,6}\}))'/,lookbehind:!0,greedy:!0},builtin:/\B@(?!\d)\w+(?=\s*\()/,label:{pattern:/(\b(?:break|continue)\s*:\s*)\w+\b|\b(?!\d)\w+\b(?=\s*:\s*(?:\{|while\b))/,lookbehind:!0},"class-name":[/\b(?!\d)\w+(?=\s*=\s*(?:(?:extern|packed)\s+)?(?:enum|struct|union)\s*[({])/,{pattern:RegExp("(:\\s*)(?=\\s*(?:\\s*)?[=;,)])|(?=\\s*(?:\\s*)?\\{)".replace(//g,n(s)).replace(//g,n(o))),lookbehind:!0,inside:null},{pattern:RegExp("(\\)\\s*)(?=\\s*(?:\\s*)?;)".replace(//g,n(s)).replace(//g,n(o))),lookbehind:!0,inside:null}],"builtin-type":{pattern:/\b(?:anyerror|bool|c_u?(?:int|long|longlong|short)|c_longdouble|c_void|comptime_(?:float|int)|f(?:16|32|64|128)|[iu](?:8|16|32|64|128|size)|noreturn|type|void)\b/,alias:"keyword"},keyword:r,function:/\b(?!\d)\w+(?=\s*\()/,number:/\b(?:0b[01]+|0o[0-7]+|0x[a-fA-F\d]+(?:\.[a-fA-F\d]*)?(?:[pP][+-]?[a-fA-F\d]+)?|\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)\b/,boolean:/\b(?:false|true)\b/,operator:/\.[*?]|\.{2,3}|[-=]>|\*\*|\+\+|\|\||(?:<<|>>|[-+*]%|[-+*/%^&|<>!=])=?|[?~]/,punctuation:/[.:,;(){}[\]]/},e.languages.zig["class-name"].forEach((function(n){null===n.inside&&(n.inside=e.languages.zig)}))}(Prism); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/package.json b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/package.json index 201c71bac1..1ea530334f 100755 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/package.json +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/package.json @@ -1,6 +1,6 @@ { "name": "prismjs", - "version": "1.27.0", + "version": "1.28.0", "description": "Lightweight, robust, elegant syntax highlighting. A spin-off project from Dabblet.", "main": "prism.js", "style": "themes/prism.css", @@ -46,7 +46,7 @@ "docdash": "^1.2.0", "eslint": "^7.22.0", "eslint-plugin-jsdoc": "^32.3.0", - "eslint-plugin-regexp": "^1.4.0", + "eslint-plugin-regexp": "^1.6.0", "gulp": "^4.0.2", "gulp-clean-css": "^4.3.0", "gulp-concat": "^2.3.4", @@ -54,12 +54,12 @@ "gulp-jsdoc3": "^3.0.0", "gulp-rename": "^1.2.0", "gulp-replace": "^1.0.0", - "gulp-uglify": "^3.0.1", + "gulp-terser": "^2.1.0", "gzip-size": "^5.1.1", "htmlparser2": "^4.0.0", "http-server": "^0.12.3", "jsdom": "^16.7.0", - "mocha": "^6.2.0", + "mocha": "^9.2.2", "node-fetch": "^3.1.1", "npm-run-all": "^4.1.5", "prettier": "^2.4.1", @@ -68,7 +68,7 @@ "regexp-ast-analysis": "^0.2.4", "regexpp": "^3.2.0", "scslre": "^0.1.6", - "simple-git": "^1.107.0", + "simple-git": "^3.3.0", "webfont": "^9.0.0", "yargs": "^13.2.2" }, diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autolinker/prism-autolinker.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autolinker/prism-autolinker.js index 7846dba519..532e11b5ad 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autolinker/prism-autolinker.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autolinker/prism-autolinker.js @@ -4,7 +4,7 @@ return; } - var url = /\b([a-z]{3,7}:\/\/|tel:)[\w\-+%~/.:=&@]+(?:\?[\w\-+%~/.:=?&!$'()*,;@]*)?(?:#[\w\-+%~/.:#=?&!$'()*,;@]*)?/; + var url = /\b([a-z]{3,7}:\/\/|tel:)[\w\-+%~/.:=&!$'()*,;@]+(?:\?[\w\-+%~/.:=?&!$'()*,;@]*)?(?:#[\w\-+%~/.:#=?&!$'()*,;@]*)?/; var email = /\b\S+@[\w.]+[a-z]{2}/; var linkMd = /\[([^\]]+)\]\(([^)]+)\)/; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autolinker/prism-autolinker.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autolinker/prism-autolinker.min.js index 731c4a0c21..44aa79402a 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autolinker/prism-autolinker.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autolinker/prism-autolinker.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism){var e=/\b([a-z]{3,7}:\/\/|tel:)[\w\-+%~/.:=&@]+(?:\?[\w\-+%~/.:=?&!$'()*,;@]*)?(?:#[\w\-+%~/.:#=?&!$'()*,;@]*)?/,r=/\b\S+@[\w.]+[a-z]{2}/,a=/\[([^\]]+)\]\(([^)]+)\)/,l=["comment","url","attr-value","string"];Prism.plugins.autolinker={processGrammar:function(i){i&&!i["url-link"]&&(Prism.languages.DFS(i,function(i,n,t){-1-1&&!Array.isArray(a)&&(a.pattern||(a=this[r]={pattern:a}),a.inside=a.inside||{},"comment"==l&&(a.inside["md-link"]=t),"attr-value"==l?Prism.languages.insertBefore("inside","punctuation",{"url-link":i},a):a.inside["url-link"]=i,a.inside["email-link"]=n)})),r["url-link"]=i,r["email-link"]=n)}},Prism.hooks.add("before-highlight",(function(i){Prism.plugins.autolinker.processGrammar(i.grammar)})),Prism.hooks.add("wrap",(function(i){if(/-link$/.test(i.type)){i.tag="a";var n=i.content;if("email-link"==i.type&&0!=n.indexOf("mailto:"))n="mailto:"+n;else if("md-link"==i.type){var e=i.content.match(t);n=e[2],i.content=e[1]}i.attributes.href=n;try{i.content=decodeURIComponent(i.content)}catch(i){}}}))}}(); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autoloader/prism-autoloader.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autoloader/prism-autoloader.js index 69bfa53f29..91203ae444 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autoloader/prism-autoloader.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autoloader/prism-autoloader.js @@ -139,6 +139,11 @@ "sparql": "turtle", "sqf": "clike", "squirrel": "clike", + "stata": [ + "mata", + "java", + "python" + ], "t4-cs": [ "t4-templating", "csharp" @@ -176,9 +181,12 @@ "js": "javascript", "g4": "antlr4", "ino": "arduino", + "arm-asm": "armasm", + "art": "arturo", "adoc": "asciidoc", "avs": "avisynth", "avdl": "avro-idl", + "gawk": "awk", "shell": "bash", "shortcode": "bbcode", "rbnf": "bnf", @@ -196,9 +204,12 @@ "xlsx": "excel-formula", "xls": "excel-formula", "gamemakerlanguage": "gml", + "po": "gettext", "gni": "gn", + "ld": "linker-script", "go-mod": "go-module", "hbs": "handlebars", + "mustache": "handlebars", "hs": "haskell", "idr": "idris", "gitignore": "ignore", @@ -223,6 +234,7 @@ "objectpascal": "pascal", "px": "pcaxis", "pcode": "peoplecode", + "plantuml": "plant-uml", "pq": "powerquery", "mscript": "powerquery", "pbfasm": "purebasic", @@ -232,6 +244,7 @@ "rkt": "racket", "razor": "cshtml", "rpy": "renpy", + "res": "rescript", "robot": "robotframework", "rb": "ruby", "sh-session": "shell-session", @@ -240,6 +253,7 @@ "sol": "solidity", "sln": "solution-file", "rq": "sparql", + "sclang": "supercollider", "t4": "t4-cs", "trickle": "tremor", "troy": "tremor", diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autoloader/prism-autoloader.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autoloader/prism-autoloader.min.js index 812b2c97ac..f9a4c4a69d 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autoloader/prism-autoloader.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/autoloader/prism-autoloader.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var l={javascript:"clike",actionscript:"javascript",apex:["clike","sql"],arduino:"cpp",aspnet:["markup","csharp"],birb:"clike",bison:"c",c:"clike",csharp:"clike",cpp:"c",cfscript:"clike",chaiscript:["clike","cpp"],coffeescript:"javascript",crystal:"ruby","css-extras":"css",d:"clike",dart:"clike",django:"markup-templating",ejs:["javascript","markup-templating"],etlua:["lua","markup-templating"],erb:["ruby","markup-templating"],fsharp:"clike","firestore-security-rules":"clike",flow:"javascript",ftl:"markup-templating",gml:"clike",glsl:"c",go:"clike",groovy:"clike",haml:"ruby",handlebars:"markup-templating",haxe:"clike",hlsl:"c",idris:"haskell",java:"clike",javadoc:["markup","java","javadoclike"],jolie:"clike",jsdoc:["javascript","javadoclike","typescript"],"js-extras":"javascript",json5:"json",jsonp:"json","js-templates":"javascript",kotlin:"clike",latte:["clike","markup-templating","php"],less:"css",lilypond:"scheme",liquid:"markup-templating",markdown:"markup","markup-templating":"markup",mongodb:"javascript",n4js:"javascript",objectivec:"c",opencl:"c",parser:"markup",php:"markup-templating",phpdoc:["php","javadoclike"],"php-extras":"php",plsql:"sql",processing:"clike",protobuf:"clike",pug:["markup","javascript"],purebasic:"clike",purescript:"haskell",qsharp:"clike",qml:"javascript",qore:"clike",racket:"scheme",cshtml:["markup","csharp"],jsx:["markup","javascript"],tsx:["jsx","typescript"],reason:"clike",ruby:"clike",sass:"css",scss:"css",scala:"java","shell-session":"bash",smarty:"markup-templating",solidity:"clike",soy:"markup-templating",sparql:"turtle",sqf:"clike",squirrel:"clike","t4-cs":["t4-templating","csharp"],"t4-vb":["t4-templating","vbnet"],tap:"yaml",tt2:["clike","markup-templating"],textile:"markup",twig:"markup-templating",typescript:"javascript",v:"clike",vala:"clike",vbnet:"basic",velocity:"markup",wiki:"markup",xeora:"markup","xml-doc":"markup",xquery:"markup"},n={html:"markup",xml:"markup",svg:"markup",mathml:"markup",ssml:"markup",atom:"markup",rss:"markup",js:"javascript",g4:"antlr4",ino:"arduino",adoc:"asciidoc",avs:"avisynth",avdl:"avro-idl",shell:"bash",shortcode:"bbcode",rbnf:"bnf",oscript:"bsl",cs:"csharp",dotnet:"csharp",cfc:"cfscript",coffee:"coffeescript",conc:"concurnas",jinja2:"django","dns-zone":"dns-zone-file",dockerfile:"docker",gv:"dot",eta:"ejs",xlsx:"excel-formula",xls:"excel-formula",gamemakerlanguage:"gml",gni:"gn","go-mod":"go-module",hbs:"handlebars",hs:"haskell",idr:"idris",gitignore:"ignore",hgignore:"ignore",npmignore:"ignore",webmanifest:"json",kt:"kotlin",kts:"kotlin",kum:"kumir",tex:"latex",context:"latex",ly:"lilypond",emacs:"lisp",elisp:"lisp","emacs-lisp":"lisp",md:"markdown",moon:"moonscript",n4jsd:"n4js",nani:"naniscript",objc:"objectivec",qasm:"openqasm",objectpascal:"pascal",px:"pcaxis",pcode:"peoplecode",pq:"powerquery",mscript:"powerquery",pbfasm:"purebasic",purs:"purescript",py:"python",qs:"qsharp",rkt:"racket",razor:"cshtml",rpy:"renpy",robot:"robotframework",rb:"ruby","sh-session":"shell-session",shellsession:"shell-session",smlnj:"sml",sol:"solidity",sln:"solution-file",rq:"sparql",t4:"t4-cs",trickle:"tremor",troy:"tremor",trig:"turtle",ts:"typescript",tsconfig:"typoscript",uscript:"unrealscript",uc:"unrealscript",url:"uri",vb:"visual-basic",vba:"visual-basic",webidl:"web-idl",mathematica:"wolfram",nb:"wolfram",wl:"wolfram",xeoracube:"xeora",yml:"yaml"},p={},e="components/",a=Prism.util.currentScript();if(a){var r=/\bplugins\/autoloader\/prism-autoloader\.(?:min\.)?js(?:\?[^\r\n/]*)?$/i,s=/(^|\/)[\w-]+\.(?:min\.)?js(?:\?[^\r\n/]*)?$/i,i=a.getAttribute("data-autoloader-path");if(null!=i)e=i.trim().replace(/\/?$/,"/");else{var t=a.src;r.test(t)?e=t.replace(r,"components/"):s.test(t)&&(e=t.replace(s,"$1components/"))}}var o=Prism.plugins.autoloader={languages_path:e,use_minified:!0,loadLanguages:u};Prism.hooks.add("complete",function(e){var a=e.element,r=e.language;if(a&&r&&"none"!==r){var s=function(e){var a=(e.getAttribute("data-dependencies")||"").trim();if(!a){var r=e.parentElement;r&&"pre"===r.tagName.toLowerCase()&&(a=(r.getAttribute("data-dependencies")||"").trim())}return a?a.split(/\s*,\s*/g):[]}(a);/^diff-./i.test(r)?(s.push("diff"),s.push(r.substr("diff-".length))):s.push(r),s.every(m)||u(s,function(){Prism.highlightElement(a)})}})}function m(e){if(0<=e.indexOf("!"))return!1;if((e=n[e]||e)in Prism.languages)return!0;var a=p[e];return a&&!a.error&&!1===a.loading}function u(e,a,r){"string"==typeof e&&(e=[e]);var s=e.length,i=0,t=!1;function c(){t||++i===s&&a&&a(e)}0!==s?e.forEach(function(e){!function(a,r,s){var i=0<=a.indexOf("!");function e(){var e=p[a];e||(e=p[a]={callbacks:[]}),e.callbacks.push({success:r,error:s}),!i&&m(a)?k(a,"success"):!i&&e.error?k(a,"error"):!i&&e.loading||(e.loading=!0,e.error=!1,function(e,a,r){var s=document.createElement("script");s.src=e,s.async=!0,s.onload=function(){document.body.removeChild(s),a&&a()},s.onerror=function(){document.body.removeChild(s),r&&r()},document.body.appendChild(s)}(function(e){return o.languages_path+"prism-"+e+(o.use_minified?".min":"")+".js"}(a),function(){e.loading=!1,k(a,"success")},function(){e.loading=!1,e.error=!0,k(a,"error")}))}a=a.replace("!",""),a=n[a]||a;var t=l[a];t&&t.length?u(t,e,s):e()}(e,c,function(){t||(t=!0,r&&r(e))})}):a&&setTimeout(a,0)}function k(e,a){if(p[e]){for(var r=p[e].callbacks,s=0,i=r.length;s=0)return!1;if((e=a[e]||e)in Prism.languages)return!0;var s=r[e];return s&&!s.error&&!1===s.loading}function m(s,t,i){"string"==typeof s&&(s=[s]);var l=s.length,c=0,n=!1;function k(){n||++c===l&&t&&t(s)}0!==l?s.forEach((function(s){!function(s,t,i){var l=s.indexOf("!")>=0;function c(){var e=r[s];e||(e=r[s]={callbacks:[]}),e.callbacks.push({success:t,error:i}),!l&&o(s)?u(s,"success"):!l&&e.error?u(s,"error"):!l&&e.loading||(e.loading=!0,e.error=!1,function(e,a,r){var s=document.createElement("script");s.src=e,s.async=!0,s.onload=function(){document.body.removeChild(s),a&&a()},s.onerror=function(){document.body.removeChild(s),r&&r()},document.body.appendChild(s)}(function(e){return p.languages_path+"prism-"+e+(p.use_minified?".min":"")+".js"}(s),(function(){e.loading=!1,u(s,"success")}),(function(){e.loading=!1,e.error=!0,u(s,"error")})))}s=s.replace("!","");var n=e[s=a[s]||s];n&&n.length?m(n,c,i):c()}(s,k,(function(){n||(n=!0,i&&i(s))}))})):t&&setTimeout(t,0)}function u(e,a){if(r[e]){for(var s=r[e].callbacks,t=0,i=s.length;t span:before { - opacity: 0.4; + opacity: 0.7; content: ' '; display: block; padding-right: 0.8em; diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.js index 415ac5dc95..b5fa38fea2 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.js @@ -74,21 +74,6 @@ var codeLines = env.code.split('\n'); - var continuationLineIndicies = commandLine.continuationLineIndicies = new Set(); - var lineContinuationStr = pre.getAttribute('data-continuation-str'); - - // Identify code lines that are a continuation line and thus don't need - // a prompt - if (lineContinuationStr && codeLines.length > 1) { - for (var j = 1; j < codeLines.length; j++) { - if (codeLines.hasOwnProperty(j - 1) - && endsWith(codeLines[j - 1], lineContinuationStr)) { - // Mark this line as being a continuation line - continuationLineIndicies.add(j); - } - } - } - commandLine.numberOfLines = codeLines.length; /** @type {string[]} */ var outputLines = commandLine.outputLines = []; @@ -127,6 +112,32 @@ } } + var continuationLineIndicies = commandLine.continuationLineIndicies = new Set(); + var lineContinuationStr = pre.getAttribute('data-continuation-str'); + var continuationFilter = pre.getAttribute('data-filter-continuation'); + + // Identify code lines where the command has continued onto subsequent + // lines and thus need a different prompt. Need to do this after the output + // lines have been removed to ensure we don't pick up a continuation string + // in an output line. + for (var j = 0; j < codeLines.length; j++) { + var line = codeLines[j]; + if (!line) { + continue; + } + + // Record the next line as a continuation if this one ends in a continuation str. + if (lineContinuationStr && endsWith(line, lineContinuationStr)) { + continuationLineIndicies.add(j + 1); + } + // Record this line as a continuation if marked with a continuation prefix + // (that we will remove). + if (j > 0 && continuationFilter && startsWith(line, continuationFilter)) { + codeLines[j] = line.slice(continuationFilter.length); + continuationLineIndicies.add(j); + } + } + env.code = codeLines.join('\n'); }); diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.min.css b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.min.css index 5e5c875d7e..7d7fc595af 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.min.css +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.min.css @@ -1 +1 @@ -.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;text-align:right;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.command-line-prompt>span:before{opacity:.4;content:' ';display:block;padding-right:.8em}.command-line-prompt>span[data-user]:before{content:"[" attr(data-user) "@" attr(data-host) "] $"}.command-line-prompt>span[data-user=root]:before{content:"[" attr(data-user) "@" attr(data-host) "] #"}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}.command-line-prompt>span[data-continuation-prompt]:before{content:attr(data-continuation-prompt)}.command-line span.token.output{opacity:.7} \ No newline at end of file +.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;text-align:right;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.command-line-prompt>span:before{opacity:.7;content:' ';display:block;padding-right:.8em}.command-line-prompt>span[data-user]:before{content:"[" attr(data-user) "@" attr(data-host) "] $"}.command-line-prompt>span[data-user=root]:before{content:"[" attr(data-user) "@" attr(data-host) "] #"}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}.command-line-prompt>span[data-continuation-prompt]:before{content:attr(data-continuation-prompt)}.command-line span.token.output{opacity:.7} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.min.js index fb2e402b04..971ae8156d 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/command-line/prism-command-line.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var v=/(?:^|\s)command-line(?:\s|$)/,g="command-line-prompt",p="".startsWith?function(e,t){return e.startsWith(t)}:function(e,t){return 0===e.indexOf(t)},d="".endsWith?function(e,t){return e.endsWith(t)}:function(e,t){var n=e.length;return e.substring(n-t.length,n)===t};Prism.hooks.add("before-highlight",function(e){var t=N(e);if(!t.complete&&e.code){var n=e.element.parentElement;if(n&&/pre/i.test(n.nodeName)&&(v.test(n.className)||v.test(e.element.className))){var a=e.element.querySelector("."+g);a&&a.remove();var i=e.code.split("\n"),r=t.continuationLineIndicies=new Set,s=n.getAttribute("data-continuation-str");if(s&&1i.length&&(a=i.length),a--;for(var r=--n;r<=a;r++)l[r]=i[r],i[r]=""}});else if(u)for(var c=0;c'+Prism.util.encode(a[r])+"":n[r]=''+n[r]+"";e.highlightedCode=n.join("\n")}}),Prism.hooks.add("complete",function(e){if(function(e){return"command-line"in(e.vars=e.vars||{})}(e)){var t=N(e);if(!t.complete){var n=e.element.parentElement;v.test(e.element.className)&&(e.element.className=e.element.className.replace(v," ")),v.test(n.className)||(n.className+=" command-line");var a,r="",i=t.numberOfLines||0,s=h("data-prompt","");if(""!==s)a='';else a='';for(var o=t.continuationLineIndicies||new Set,l='")+'">',m=0;mm.length&&(a=m.length),a--;for(var r=--n;r<=a;r++)u[r]=m[r],m[r]=""}}));else if(d)for(var p=0;p0&&v&&n(b,v)&&(m[g]=b.slice(v.length),f.add(g)))}i.code=m.join("\n")}else o.complete=!0}else o.complete=!0})),Prism.hooks.add("before-insert",(function(e){var t=r(e);if(!t.complete){for(var n=e.highlightedCode.split("\n"),a=t.outputLines||[],i=0,o=n.length;i'+Prism.util.encode(a[i])+"":n[i]=''+n[i]+"";e.highlightedCode=n.join("\n")}})),Prism.hooks.add("complete",(function(n){if(function(e){return"command-line"in(e.vars=e.vars||{})}(n)){var a=r(n);if(!a.complete){var i=n.element.parentElement;e.test(n.element.className)&&(n.element.className=n.element.className.replace(e," ")),e.test(i.className)||(i.className+=" command-line");var o,s="",l=a.numberOfLines||0,m=b("data-prompt","");o=""!==m?'':'';for(var u=a.continuationLineIndicies||new Set,c='")+'">',d=0;d-1&&!Array.isArray(r)&&(r.pattern||(r=this[n]={pattern:r}),r.inside=r.inside||{},"attr-value"==e?Prism.languages.insertBefore("inside",r.inside["url-link"]?"url-link":"punctuation",{"data-uri":i},r):r.inside["url-link"]?Prism.languages.insertBefore("inside","url-link",{"data-uri":i},r):r.inside["data-uri"]=i)})),n["data-uri"]=i)}},Prism.hooks.add("before-highlight",(function(a){if(i.pattern.test(a.code))for(var n in i.inside)if(i.inside.hasOwnProperty(n)&&!i.inside[n].inside&&i.inside[n].pattern.test(a.code)){var r=n.match(/^language-(.+)/)[1];Prism.languages[r]&&(i.inside[n].inside={rest:(e=Prism.languages[r],Prism.plugins.autolinker&&Prism.plugins.autolinker.processGrammar(e),e)})}var e;Prism.plugins.dataURIHighlight.processGrammar(a.grammar)}))}}(); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/diff-highlight/prism-diff-highlight.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/diff-highlight/prism-diff-highlight.min.js index a6cf1c2fce..38a97b41eb 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/diff-highlight/prism-diff-highlight.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/diff-highlight/prism-diff-highlight.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism){var m=/^diff-([\w-]+)/i,d=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/g,c=RegExp("(?:__|[^\r\n<])*(?:\r\n?|\n|(?:__|[^\r\n<])(?![^\r\n]))".replace(/__/g,function(){return d.source}),"gi"),a=!1;Prism.hooks.add("before-sanity-check",function(e){var i=e.language;m.test(i)&&!e.grammar&&(e.grammar=Prism.languages[i]=Prism.languages.diff)}),Prism.hooks.add("before-tokenize",function(e){a||Prism.languages.diff||Prism.plugins.autoloader||(a=!0,console.warn("Prism's Diff Highlight plugin requires the Diff language definition (prism-diff.js).Make sure the language definition is loaded or use Prism's Autoloader plugin."));var i=e.language;m.test(i)&&!Prism.languages[i]&&(Prism.languages[i]=Prism.languages.diff)}),Prism.hooks.add("wrap",function(e){var i,a;if("diff"!==e.language){var s=m.exec(e.language);if(!s)return;i=s[1],a=Prism.languages[i]}var r=Prism.languages.diff&&Prism.languages.diff.PREFIXES;if(r&&e.type in r){var n,g=e.content.replace(d,"").replace(/</g,"<").replace(/&/g,"&"),f=g.replace(/(^|[\r\n])./g,"$1");n=a?Prism.highlight(f,a,i):Prism.util.encode(f);var u,l=new Prism.Token("prefix",r[e.type],[/\w+/.exec(e.type)[0]]),t=Prism.Token.stringify(l,e.language),o=[];for(c.lastIndex=0;u=c.exec(n);)o.push(t+u[0]);/(?:^|[\r\n]).$/.test(g)&&o.push(t),e.content=o.join(""),a&&e.classes.push("language-"+i)}})}}(); \ No newline at end of file +!function(){if("undefined"!=typeof Prism){var e=/^diff-([\w-]+)/i,i=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/g,a=RegExp("(?:__|[^\r\n<])*(?:\r\n?|\n|(?:__|[^\r\n<])(?![^\r\n]))".replace(/__/g,(function(){return i.source})),"gi"),s=!1;Prism.hooks.add("before-sanity-check",(function(i){var a=i.language;e.test(a)&&!i.grammar&&(i.grammar=Prism.languages[a]=Prism.languages.diff)})),Prism.hooks.add("before-tokenize",(function(i){s||Prism.languages.diff||Prism.plugins.autoloader||(s=!0,console.warn("Prism's Diff Highlight plugin requires the Diff language definition (prism-diff.js).Make sure the language definition is loaded or use Prism's Autoloader plugin."));var a=i.language;e.test(a)&&!Prism.languages[a]&&(Prism.languages[a]=Prism.languages.diff)})),Prism.hooks.add("wrap",(function(s){var r,n;if("diff"!==s.language){var g=e.exec(s.language);if(!g)return;r=g[1],n=Prism.languages[r]}var f=Prism.languages.diff&&Prism.languages.diff.PREFIXES;if(f&&s.type in f){var u,l=s.content.replace(i,"").replace(/</g,"<").replace(/&/g,"&"),t=l.replace(/(^|[\r\n])./g,"$1");u=n?Prism.highlight(t,n,r):Prism.util.encode(t);var o,m=new Prism.Token("prefix",f[s.type],[/\w+/.exec(s.type)[0]]),d=Prism.Token.stringify(m,s.language),c=[];for(a.lastIndex=0;o=a.exec(u);)c.push(d+o[0]);/(?:^|[\r\n]).$/.test(l)&&c.push(d),s.content=c.join(""),n&&s.classes.push("language-"+r)}}))}}(); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/download-button/prism-download-button.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/download-button/prism-download-button.min.js index 57e5879e75..dc10f65d60 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/download-button/prism-download-button.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/download-button/prism-download-button.min.js @@ -1 +1 @@ -"undefined"!=typeof Prism&&"undefined"!=typeof document&&document.querySelector&&Prism.plugins.toolbar.registerButton("download-file",function(t){var e=t.element.parentNode;if(e&&/pre/i.test(e.nodeName)&&e.hasAttribute("data-src")&&e.hasAttribute("data-download-link")){var n=e.getAttribute("data-src"),a=document.createElement("a");return a.textContent=e.getAttribute("data-download-link-label")||"Download",a.setAttribute("download",""),a.href=n,a}}); \ No newline at end of file +"undefined"!=typeof Prism&&"undefined"!=typeof document&&document.querySelector&&Prism.plugins.toolbar.registerButton("download-file",(function(t){var e=t.element.parentNode;if(e&&/pre/i.test(e.nodeName)&&e.hasAttribute("data-src")&&e.hasAttribute("data-download-link")){var n=e.getAttribute("data-src"),a=document.createElement("a");return a.textContent=e.getAttribute("data-download-link-label")||"Download",a.setAttribute("download",""),a.href=n,a}})); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/file-highlight/prism-file-highlight.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/file-highlight/prism-file-highlight.min.js index 23bacb136e..e8c9594ae1 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/file-highlight/prism-file-highlight.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/file-highlight/prism-file-highlight.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var l={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},o="data-src-status",h="loading",g="loaded",u="pre[data-src]:not(["+o+'="'+g+'"]):not(['+o+'="'+h+'"])';Prism.hooks.add("before-highlightall",function(t){t.selector+=", "+u}),Prism.hooks.add("before-sanity-check",function(t){var r=t.element;if(r.matches(u)){t.code="",r.setAttribute(o,h);var s=r.appendChild(document.createElement("CODE"));s.textContent="Loading…";var e=r.getAttribute("data-src"),i=t.language;if("none"===i){var n=(/\.(\w+)$/.exec(e)||[,"none"])[1];i=l[n]||n}Prism.util.setLanguage(s,i),Prism.util.setLanguage(r,i);var a=Prism.plugins.autoloader;a&&a.loadLanguages(i),function(t,e,i){var n=new XMLHttpRequest;n.open("GET",t,!0),n.onreadystatechange=function(){4==n.readyState&&(n.status<400&&n.responseText?e(n.responseText):400<=n.status?i(function(t,e){return"✖ Error "+t+" while fetching file: "+e}(n.status,n.statusText)):i("✖ Error: File does not exist or is empty"))},n.send(null)}(e,function(t){r.setAttribute(o,g);var e=function(t){var e=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(t||"");if(e){var i=Number(e[1]),n=e[2],a=e[3];return n?a?[i,Number(a)]:[i,void 0]:[i,i]}}(r.getAttribute("data-range"));if(e){var i=t.split(/\r\n?|\n/g),n=e[0],a=null==e[1]?i.length:e[1];n<0&&(n+=i.length),n=Math.max(0,Math.min(n-1,i.length)),a<0&&(a+=i.length),a=Math.max(0,Math.min(a,i.length)),t=i.slice(n,a).join("\n"),r.hasAttribute("data-start")||r.setAttribute("data-start",String(n+1))}s.textContent=t,Prism.highlightElement(s)},function(t){r.setAttribute(o,"failed"),s.textContent=t})}});var t=!(Prism.plugins.fileHighlight={highlight:function(t){for(var e,i=(t||document).querySelectorAll(u),n=0;e=i[n++];)Prism.highlightElement(e)}});Prism.fileHighlight=function(){t||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),t=!0),Prism.plugins.fileHighlight.highlight.apply(this,arguments)}}}(); \ No newline at end of file +!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var t={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},e="data-src-status",i='pre[data-src]:not([data-src-status="loaded"]):not([data-src-status="loading"])';Prism.hooks.add("before-highlightall",(function(t){t.selector+=", "+i})),Prism.hooks.add("before-sanity-check",(function(a){var n=a.element;if(n.matches(i)){a.code="",n.setAttribute(e,"loading");var s=n.appendChild(document.createElement("CODE"));s.textContent="Loading…";var r=n.getAttribute("data-src"),l=a.language;if("none"===l){var o=(/\.(\w+)$/.exec(r)||[,"none"])[1];l=t[o]||o}Prism.util.setLanguage(s,l),Prism.util.setLanguage(n,l);var h=Prism.plugins.autoloader;h&&h.loadLanguages(l),function(t,i,a){var r=new XMLHttpRequest;r.open("GET",t,!0),r.onreadystatechange=function(){4==r.readyState&&(r.status<400&&r.responseText?function(t){n.setAttribute(e,"loaded");var i=function(t){var e=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(t||"");if(e){var i=Number(e[1]),a=e[2],n=e[3];return a?n?[i,Number(n)]:[i,void 0]:[i,i]}}(n.getAttribute("data-range"));if(i){var a=t.split(/\r\n?|\n/g),r=i[0],l=null==i[1]?a.length:i[1];r<0&&(r+=a.length),r=Math.max(0,Math.min(r-1,a.length)),l<0&&(l+=a.length),l=Math.max(0,Math.min(l,a.length)),t=a.slice(r,l).join("\n"),n.hasAttribute("data-start")||n.setAttribute("data-start",String(r+1))}s.textContent=t,Prism.highlightElement(s)}(r.responseText):r.status>=400?a("✖ Error "+r.status+" while fetching file: "+r.statusText):a("✖ Error: File does not exist or is empty"))},r.send(null)}(r,0,(function(t){n.setAttribute(e,"failed"),s.textContent=t}))}})),Prism.plugins.fileHighlight={highlight:function(t){for(var e,a=(t||document).querySelectorAll(i),n=0;e=a[n++];)Prism.highlightElement(e)}};var a=!1;Prism.fileHighlight=function(){a||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),a=!0),Prism.plugins.fileHighlight.highlight.apply(this,arguments)}}}(); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/filter-highlight-all/prism-filter-highlight-all.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/filter-highlight-all/prism-filter-highlight-all.min.js index 1e311d345a..94b828a311 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/filter-highlight-all/prism-filter-highlight-all.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/filter-highlight-all/prism-filter-highlight-all.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var e,t=Prism.util.currentScript(),r=[],n=Prism.plugins.filterHighlightAll={add:function(t){r.push(function(e){return t({element:e,language:Prism.util.getLanguage(e)})})},addSelector:function(t){r.push(function(e){return e.matches(t)})},reject:{add:function(t){r.push(function(e){return!t({element:e,language:Prism.util.getLanguage(e)})})},addSelector:function(t){r.push(function(e){return!e.matches(t)})}},filterKnown:!!t&&t.hasAttribute("data-filter-known")};if(n.add(function(e){return!n.filterKnown||"object"==typeof Prism.languages[e.language]}),t)(e=t.getAttribute("data-filter-selector"))&&n.addSelector(e),(e=t.getAttribute("data-reject-selector"))&&n.reject.addSelector(e);Prism.hooks.add("before-all-elements-highlight",function(e){e.elements=e.elements.filter(i)})}function i(e){for(var t=0,n=r.length;t\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/g,c=/^#?((?:[\da-f]){3,4}|(?:[\da-f]{2}){3,4})$/i,l=[function(n){var r=c.exec(n);if(r){for(var o=6<=(n=r[1]).length?2:1,s=n.length/o,e=1==o?1/15:1/255,t=[],i=0;i';n.content=i+o}})}}(); \ No newline at end of file +!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var n=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/g,r=/^#?((?:[\da-f]){3,4}|(?:[\da-f]{2}){3,4})$/i,o=[function(n){var o=r.exec(n);if(o){for(var s=(n=o[1]).length>=6?2:1,e=n.length/s,t=1==s?1/15:1/255,i=[],a=0;a=0){for(var s,e=r.content,t=e.split(n).join(""),i=0,a=o.length;i';r.content=c+e}}))}}(); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.min.js index b6303a827d..17892784a8 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var s=[];t(function(t){if(t&&t.meta&&t.data){if(t.meta.status&&400<=t.meta.status)return"Error: "+(t.data.message||t.meta.status);if("string"==typeof t.data.content)return"function"==typeof atob?atob(t.data.content.replace(/\s/g,"")):"Your browser cannot decode base64"}return null},"github"),t(function(t,e){if(t&&t.meta&&t.data&&t.data.files){if(t.meta.status&&400<=t.meta.status)return"Error: "+(t.data.message||t.meta.status);var n=t.data.files,a=e.getAttribute("data-filename");if(null==a)for(var r in n)if(n.hasOwnProperty(r)){a=r;break}return void 0!==n[a]?n[a].content:"Error: unknown or missing gist file "+a}return null},"gist"),t(function(t){return t&&t.node&&"string"==typeof t.data?t.data:null},"bitbucket");var f=0,d="data-jsonp-status",l="loading",c="loaded",m="failed",p="pre[data-jsonp]:not(["+d+'="'+c+'"]):not(['+d+'="'+l+'"])';Prism.hooks.add("before-highlightall",function(t){t.selector+=", "+p}),Prism.hooks.add("before-sanity-check",function(t){var r=t.element;if(r.matches(p)){t.code="",r.setAttribute(d,l);var i=r.appendChild(document.createElement("CODE"));i.textContent="Loading…";var e=t.language;i.className="language-"+e;var n=Prism.plugins.autoloader;n&&n.loadLanguages(e);var a=r.getAttribute("data-adapter"),o=null;if(a){if("function"!=typeof window[a])return r.setAttribute(d,m),void(i.textContent=function(t){return'✖ Error: JSONP adapter function "'+t+"\" doesn't exist"}(a));o=window[a]}var u=r.getAttribute("data-jsonp");!function(t,e,n,a){var r="prismjsonp"+f++,i=document.createElement("a");i.href=t,i.href+=(i.search?"&":"?")+(e||"callback")+"="+r;var o=document.createElement("script");o.src=i.href,o.onerror=function(){s(),a("network")};var u=setTimeout(function(){s(),a("timeout")},Prism.plugins.jsonphighlight.timeout);function s(){clearTimeout(u),document.head.removeChild(o),delete window[r]}window[r]=function(t){s(),n(t)},document.head.appendChild(o)}(u,r.getAttribute("data-callback"),function(t){var e=null;if(o)e=o(t,r);else for(var n=0,a=s.length;n=400)return"Error: "+(t.data.message||t.meta.status);if("string"==typeof t.data.content)return"function"==typeof atob?atob(t.data.content.replace(/\s/g,"")):"Your browser cannot decode base64"}return null}),"github"),o((function(t,e){if(t&&t.meta&&t.data&&t.data.files){if(t.meta.status&&t.meta.status>=400)return"Error: "+(t.data.message||t.meta.status);var n=t.data.files,a=e.getAttribute("data-filename");if(null==a)for(var r in n)if(n.hasOwnProperty(r)){a=r;break}return void 0!==n[a]?n[a].content:"Error: unknown or missing gist file "+a}return null}),"gist"),o((function(t){return t&&t.node&&"string"==typeof t.data?t.data:null}),"bitbucket");var e=0,n="data-jsonp-status",a="failed",r='pre[data-jsonp]:not([data-jsonp-status="loaded"]):not([data-jsonp-status="loading"])';Prism.hooks.add("before-highlightall",(function(t){t.selector+=", "+r})),Prism.hooks.add("before-sanity-check",(function(o){var i,u=o.element;if(u.matches(r)){o.code="",u.setAttribute(n,"loading");var s=u.appendChild(document.createElement("CODE"));s.textContent="Loading…";var d=o.language;s.className="language-"+d;var f=Prism.plugins.autoloader;f&&f.loadLanguages(d);var l=u.getAttribute("data-adapter"),c=null;if(l){if("function"!=typeof window[l])return u.setAttribute(n,a),void(s.textContent=(i=l,'✖ Error: JSONP adapter function "'+i+"\" doesn't exist"));c=window[l]}var p=u.getAttribute("data-jsonp");!function(r,o,i,d){var f="prismjsonp"+e++,l=document.createElement("a");l.href=r,l.href+=(l.search?"&":"?")+(o||"callback")+"="+f;var p=document.createElement("script");p.src=l.href,p.onerror=function(){g(),d()};var m=setTimeout((function(){g(),d()}),Prism.plugins.jsonphighlight.timeout);function g(){clearTimeout(m),document.head.removeChild(p),delete window[f]}window[f]=function(e){g(),function(e){var r=null;if(c)r=c(e,u);else for(var o=0,i=t.length;o=0&&t.splice(n,1)}},highlight:function(t){for(var e,n=(t||document).querySelectorAll(r),a=0;e=n[a++];)Prism.highlightElement(e)}}}function o(e,n){n=n||e.name,"function"!=typeof e||i(e)||i(n)||t.push({adapter:e,name:n})}function i(e){if("function"==typeof e){for(var n=0;a=t[n++];)if(a.adapter.valueOf()===e.valueOf())return a.adapter}else if("string"==typeof e){var a;for(n=0;a=t[n++];)if(a.name===e)return a.adapter}return null}}(); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/keep-markup/prism-keep-markup.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/keep-markup/prism-keep-markup.js index c160faa88f..dd3a108041 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/keep-markup/prism-keep-markup.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/keep-markup/prism-keep-markup.js @@ -39,8 +39,8 @@ } var o = { - // Clone the original tag to keep all attributes - clone: element.cloneNode(false), + // Store original element so we can restore it after highlighting + element: element, posOpen: pos }; data.push(o); @@ -96,12 +96,13 @@ } if (nodeState.nodeStart && nodeState.nodeEnd) { - // Select the range and wrap it with the clone + // Select the range and wrap it with the element var range = document.createRange(); range.setStart(nodeState.nodeStart, nodeState.nodeStartPos); range.setEnd(nodeState.nodeEnd, nodeState.nodeEndPos); - nodeState.node.clone.appendChild(range.extractContents()); - range.insertNode(nodeState.node.clone); + nodeState.node.element.innerHTML = ''; + nodeState.node.element.appendChild(range.extractContents()); + range.insertNode(nodeState.node.element); range.detach(); // Process is over diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/keep-markup/prism-keep-markup.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/keep-markup/prism-keep-markup.min.js index 6bea9d2efd..9076248398 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/keep-markup/prism-keep-markup.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/keep-markup/prism-keep-markup.min.js @@ -1 +1 @@ -"undefined"!=typeof Prism&&"undefined"!=typeof document&&document.createRange&&(Prism.plugins.KeepMarkup=!0,Prism.hooks.add("before-highlight",function(e){if(e.element.children.length&&Prism.util.isActive(e.element,"keep-markup",!0)){var o=Prism.util.isActive(e.element,"drop-tokens",!1),d=0,t=[];s(e.element),t.length&&(e.keepMarkup=t)}function r(e){if(function(e){return!o||"span"!==e.nodeName.toLowerCase()||!e.classList.contains("token")}(e)){var n={clone:e.cloneNode(!1),posOpen:d};t.push(n),s(e),n.posClose=d}else s(e)}function s(e){for(var n=0,o=e.childNodes.length;nn.node.posOpen&&(n.nodeStart=d,n.nodeStartPos=n.node.posOpen-n.pos),n.nodeStart&&n.pos+d.data.length>=n.node.posClose&&(n.nodeEnd=d,n.nodeEndPos=n.node.posClose-n.pos),n.pos+=d.data.length);if(n.nodeStart&&n.nodeEnd){var r=document.createRange();return r.setStart(n.nodeStart,n.nodeStartPos),r.setEnd(n.nodeEnd,n.nodeEndPos),n.node.clone.appendChild(r.extractContents()),r.insertNode(n.node.clone),r.detach(),!1}}return!0};n.keepMarkup.forEach(function(e){s(n.element,{node:e,pos:0})}),n.highlightedCode=n.element.innerHTML}})); \ No newline at end of file +"undefined"!=typeof Prism&&"undefined"!=typeof document&&document.createRange&&(Prism.plugins.KeepMarkup=!0,Prism.hooks.add("before-highlight",(function(e){if(e.element.children.length&&Prism.util.isActive(e.element,"keep-markup",!0)){var n=Prism.util.isActive(e.element,"drop-tokens",!1),t=0,o=[];r(e.element),o.length&&(e.keepMarkup=o)}function d(e){if(function(e){return!n||"span"!==e.nodeName.toLowerCase()||!e.classList.contains("token")}(e)){var d={element:e,posOpen:t};o.push(d),r(e),d.posClose=t}else r(e)}function r(e){for(var n=0,o=e.childNodes.length;nt.node.posOpen&&(t.nodeStart=r,t.nodeStartPos=t.node.posOpen-t.pos),t.nodeStart&&t.pos+r.data.length>=t.node.posClose&&(t.nodeEnd=r,t.nodeEndPos=t.node.posClose-t.pos),t.pos+=r.data.length);if(t.nodeStart&&t.nodeEnd){var s=document.createRange();return s.setStart(t.nodeStart,t.nodeStartPos),s.setEnd(t.nodeEnd,t.nodeEndPos),t.node.element.innerHTML="",t.node.element.appendChild(s.extractContents()),s.insertNode(t.node.element),s.detach(),!1}}return!0};e.keepMarkup.forEach((function(t){n(e.element,{node:t,pos:0})})),e.highlightedCode=e.element.innerHTML}}))); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/line-highlight/prism-line-highlight.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/line-highlight/prism-line-highlight.min.js index c1f640b45c..7d38b6b424 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/line-highlight/prism-line-highlight.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/line-highlight/prism-line-highlight.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document&&document.querySelector){var t,o="line-numbers",s="linkable-line-numbers",l=function(){if(void 0===t){var e=document.createElement("div");e.style.fontSize="13px",e.style.lineHeight="1.5",e.style.padding="0",e.style.border="0",e.innerHTML=" 
     ",document.body.appendChild(e),t=38===e.offsetHeight,document.body.removeChild(e)}return t},a=!0;Prism.plugins.lineHighlight={highlightLines:function(u,e,c){var t=(e="string"==typeof e?e:u.getAttribute("data-line")||"").replace(/\s+/g,"").split(",").filter(Boolean),d=+u.getAttribute("data-line-offset")||0,h=(l()?parseInt:parseFloat)(getComputedStyle(u).lineHeight),f=Prism.util.isActive(u,o),i=u.querySelector("code"),p=f?u:i||u,g=[],m=i&&p!=i?function(e,t){var i=getComputedStyle(e),n=getComputedStyle(t);function r(e){return+e.substr(0,e.length-2)}return t.offsetTop+r(n.borderTopWidth)+r(n.paddingTop)-r(i.paddingTop)}(u,i):0;t.forEach(function(e){var t=e.split("-"),i=+t[0],n=+t[1]||i,r=u.querySelector('.line-highlight[data-range="'+e+'"]')||document.createElement("div");if(g.push(function(){r.setAttribute("aria-hidden","true"),r.setAttribute("data-range",e),r.className=(c||"")+" line-highlight"}),f&&Prism.plugins.lineNumbers){var o=Prism.plugins.lineNumbers.getLine(u,i),s=Prism.plugins.lineNumbers.getLine(u,n);if(o){var l=o.offsetTop+m+"px";g.push(function(){r.style.top=l})}if(s){var a=s.offsetTop-o.offsetTop+s.offsetHeight+"px";g.push(function(){r.style.height=a})}}else g.push(function(){r.setAttribute("data-start",String(i)),i span",u).forEach(function(e,t){var i=t+r;e.onclick=function(){var e=n+"."+i;a=!1,location.hash=e,setTimeout(function(){a=!0},1)}})}return function(){g.forEach(b)}}};var u=0;Prism.hooks.add("before-sanity-check",function(e){var t=e.element.parentElement;if(c(t)){var i=0;v(".line-highlight",t).forEach(function(e){i+=e.textContent.length,e.parentNode.removeChild(e)}),i&&/^(?: \n)+$/.test(e.code.slice(-i))&&(e.code=e.code.slice(0,-i))}}),Prism.hooks.add("complete",function e(t){var i=t.element.parentElement;if(c(i)){clearTimeout(u);var n=Prism.plugins.lineNumbers,r=t.plugins&&t.plugins.lineNumbers;if(y(i,o)&&n&&!r)Prism.hooks.add("line-numbers",e);else Prism.plugins.lineHighlight.highlightLines(i)(),u=setTimeout(d,1)}}),window.addEventListener("hashchange",d),window.addEventListener("resize",function(){v("pre").filter(c).map(function(e){return Prism.plugins.lineHighlight.highlightLines(e)}).forEach(b)})}function v(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function y(e,t){return e.classList.contains(t)}function b(e){e()}function c(e){return!(!e||!/pre/i.test(e.nodeName))&&(!!e.hasAttribute("data-line")||!(!e.id||!Prism.util.isActive(e,s)))}function d(){var e=location.hash.slice(1);v(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var t=(e.match(/\.([\d,-]+)$/)||[,""])[1];if(t&&!document.getElementById(e)){var i=e.slice(0,e.lastIndexOf(".")),n=document.getElementById(i);if(n)n.hasAttribute("data-line")||n.setAttribute("data-line",""),Prism.plugins.lineHighlight.highlightLines(n,t,"temporary ")(),a&&document.querySelector(".temporary.line-highlight").scrollIntoView()}}}(); \ No newline at end of file +!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document&&document.querySelector){var e,t="line-numbers",i="linkable-line-numbers",n=!0;Prism.plugins.lineHighlight={highlightLines:function(r,a,u){var c=(a="string"==typeof a?a:r.getAttribute("data-line")||"").replace(/\s+/g,"").split(",").filter(Boolean),d=+r.getAttribute("data-line-offset")||0,h=(function(){if(void 0===e){var t=document.createElement("div");t.style.fontSize="13px",t.style.lineHeight="1.5",t.style.padding="0",t.style.border="0",t.innerHTML=" 
     ",document.body.appendChild(t),e=38===t.offsetHeight,document.body.removeChild(t)}return e}()?parseInt:parseFloat)(getComputedStyle(r).lineHeight),f=Prism.util.isActive(r,t),p=r.querySelector("code"),g=f?r:p||r,m=[],v=p&&g!=p?function(e,t){var i=getComputedStyle(e),n=getComputedStyle(t);function r(e){return+e.substr(0,e.length-2)}return t.offsetTop+r(n.borderTopWidth)+r(n.paddingTop)-r(i.paddingTop)}(r,p):0;c.forEach((function(e){var t=e.split("-"),i=+t[0],n=+t[1]||i,o=r.querySelector('.line-highlight[data-range="'+e+'"]')||document.createElement("div");if(m.push((function(){o.setAttribute("aria-hidden","true"),o.setAttribute("data-range",e),o.className=(u||"")+" line-highlight"})),f&&Prism.plugins.lineNumbers){var s=Prism.plugins.lineNumbers.getLine(r,i),l=Prism.plugins.lineNumbers.getLine(r,n);if(s){var a=s.offsetTop+v+"px";m.push((function(){o.style.top=a}))}if(l){var c=l.offsetTop-s.offsetTop+l.offsetHeight+"px";m.push((function(){o.style.height=c}))}}else m.push((function(){o.setAttribute("data-start",String(i)),n>i&&o.setAttribute("data-end",String(n)),o.style.top=(i-d-1)*h+v+"px",o.textContent=new Array(n-i+2).join(" \n")}));m.push((function(){o.style.width=r.scrollWidth+"px"})),m.push((function(){g.appendChild(o)}))}));var y=r.id;if(f&&Prism.util.isActive(r,i)&&y){s(r,i)||m.push((function(){r.classList.add(i)}));var b=parseInt(r.getAttribute("data-start")||"1");o(".line-numbers-rows > span",r).forEach((function(e,t){var i=t+b;e.onclick=function(){var e=y+"."+i;n=!1,location.hash=e,setTimeout((function(){n=!0}),1)}}))}return function(){m.forEach(l)}}};var r=0;Prism.hooks.add("before-sanity-check",(function(e){var t=e.element.parentElement;if(a(t)){var i=0;o(".line-highlight",t).forEach((function(e){i+=e.textContent.length,e.parentNode.removeChild(e)})),i&&/^(?: \n)+$/.test(e.code.slice(-i))&&(e.code=e.code.slice(0,-i))}})),Prism.hooks.add("complete",(function e(i){var n=i.element.parentElement;if(a(n)){clearTimeout(r);var o=Prism.plugins.lineNumbers,l=i.plugins&&i.plugins.lineNumbers;s(n,t)&&o&&!l?Prism.hooks.add("line-numbers",e):(Prism.plugins.lineHighlight.highlightLines(n)(),r=setTimeout(u,1))}})),window.addEventListener("hashchange",u),window.addEventListener("resize",(function(){o("pre").filter(a).map((function(e){return Prism.plugins.lineHighlight.highlightLines(e)})).forEach(l)}))}function o(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function s(e,t){return e.classList.contains(t)}function l(e){e()}function a(e){return!!(e&&/pre/i.test(e.nodeName)&&(e.hasAttribute("data-line")||e.id&&Prism.util.isActive(e,i)))}function u(){var e=location.hash.slice(1);o(".temporary.line-highlight").forEach((function(e){e.parentNode.removeChild(e)}));var t=(e.match(/\.([\d,-]+)$/)||[,""])[1];if(t&&!document.getElementById(e)){var i=e.slice(0,e.lastIndexOf(".")),r=document.getElementById(i);r&&(r.hasAttribute("data-line")||r.setAttribute("data-line",""),Prism.plugins.lineHighlight.highlightLines(r,t,"temporary ")(),n&&document.querySelector(".temporary.line-highlight").scrollIntoView())}}}(); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/line-numbers/prism-line-numbers.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/line-numbers/prism-line-numbers.min.js index 9ccb6da910..1f12d2d476 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/line-numbers/prism-line-numbers.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/line-numbers/prism-line-numbers.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var o="line-numbers",a=/\n(?!$)/g,e=Prism.plugins.lineNumbers={getLine:function(e,n){if("PRE"===e.tagName&&e.classList.contains(o)){var t=e.querySelector(".line-numbers-rows");if(t){var i=parseInt(e.getAttribute("data-start"),10)||1,r=i+(t.children.length-1);n");(i=document.createElement("span")).setAttribute("aria-hidden","true"),i.className="line-numbers-rows",i.innerHTML=l,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(i),u([t]),Prism.hooks.run("line-numbers",e)}}}),Prism.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0})}function u(e){if(0!=(e=e.filter(function(e){var n=function(e){return e?window.getComputedStyle?getComputedStyle(e):e.currentStyle||null:null}(e)["white-space"];return"pre-wrap"===n||"pre-line"===n})).length){var n=e.map(function(e){var n=e.querySelector("code"),t=e.querySelector(".line-numbers-rows");if(n&&t){var i=e.querySelector(".line-numbers-sizer"),r=n.textContent.split(a);i||((i=document.createElement("span")).className="line-numbers-sizer",n.appendChild(i)),i.innerHTML="0",i.style.display="block";var s=i.getBoundingClientRect().height;return i.innerHTML="",{element:e,lines:r,lineHeights:[],oneLinerHeight:s,sizer:i}}}).filter(Boolean);n.forEach(function(e){var i=e.sizer,n=e.lines,r=e.lineHeights,s=e.oneLinerHeight;r[n.length-1]=void 0,n.forEach(function(e,n){if(e&&1s&&(t=s);var l=t-r;return i.children[l]}}},resize:function(e){r([e])},assumeViewportIndependence:!0},i=void 0;window.addEventListener("resize",(function(){t.assumeViewportIndependence&&i===window.innerWidth||(i=window.innerWidth,r(Array.prototype.slice.call(document.querySelectorAll("pre.line-numbers"))))})),Prism.hooks.add("complete",(function(t){if(t.code){var i=t.element,s=i.parentNode;if(s&&/pre/i.test(s.nodeName)&&!i.querySelector(".line-numbers-rows")&&Prism.util.isActive(i,e)){i.classList.remove(e),s.classList.add(e);var l,o=t.code.match(n),a=o?o.length+1:1,u=new Array(a+1).join("");(l=document.createElement("span")).setAttribute("aria-hidden","true"),l.className="line-numbers-rows",l.innerHTML=u,s.hasAttribute("data-start")&&(s.style.counterReset="linenumber "+(parseInt(s.getAttribute("data-start"),10)-1)),t.element.appendChild(l),r([s]),Prism.hooks.run("line-numbers",t)}}})),Prism.hooks.add("line-numbers",(function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}))}function r(e){if(0!=(e=e.filter((function(e){var n,t=(n=e,n?window.getComputedStyle?getComputedStyle(n):n.currentStyle||null:null)["white-space"];return"pre-wrap"===t||"pre-line"===t}))).length){var t=e.map((function(e){var t=e.querySelector("code"),i=e.querySelector(".line-numbers-rows");if(t&&i){var r=e.querySelector(".line-numbers-sizer"),s=t.textContent.split(n);r||((r=document.createElement("span")).className="line-numbers-sizer",t.appendChild(r)),r.innerHTML="0",r.style.display="block";var l=r.getBoundingClientRect().height;return r.innerHTML="",{element:e,lines:s,lineHeights:[],oneLinerHeight:l,sizer:r}}})).filter(Boolean);t.forEach((function(e){var n=e.sizer,t=e.lines,i=e.lineHeights,r=e.oneLinerHeight;i[t.length-1]=void 0,t.forEach((function(e,t){if(e&&e.length>1){var s=n.appendChild(document.createElement("span"));s.style.display="block",s.textContent=e}else i[t]=r}))})),t.forEach((function(e){for(var n=e.sizer,t=e.lineHeights,i=0,r=0;rn&&(o[l]="\n"+o[l],a=s)}r[i]=o.join("")}return r.join("\n")}},"undefined"!=typeof module&&module.exports&&(module.exports=n),Prism.plugins.NormalizeWhitespace=new n({"remove-trailing":!0,"remove-indent":!0,"left-trim":!0,"right-trim":!0}),Prism.hooks.add("before-sanity-check",(function(e){var n=Prism.plugins.NormalizeWhitespace;if((!e.settings||!1!==e.settings["whitespace-normalization"])&&Prism.util.isActive(e.element,"whitespace-normalization",!0))if(e.element&&e.element.parentNode||!e.code){var t=e.element.parentNode;if(e.code&&t&&"pre"===t.nodeName.toLowerCase()){for(var r=t.childNodes,i="",o="",a=!1,l=0;l
  • "})}),tokens:{gradient:{pattern:/(?:\b|\B-[a-z]{1,10}-)(?:repeating-)?(?:linear|radial)-gradient\((?:(?:hsl|rgb)a?\(.+?\)|[^\)])+\)/gi,inside:{function:/[\w-]+(?=\()/,punctuation:/[(),]/}}},languages:{css:!0,less:!0,sass:[{lang:"sass",before:"punctuation",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["variable-line"]},{lang:"sass",before:"punctuation",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["property-line"]}],scss:!0,stylus:[{lang:"stylus",before:"func",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["property-declaration"].inside},{lang:"stylus",before:"func",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["variable-declaration"].inside}]}},angle:{create:function(){new Prism.plugins.Previewer("angle",function(e){var s,t,i=parseFloat(e),a=e.match(/[a-z]+$/i);if(!i||!a)return!1;switch(a=a[0]){case"deg":s=360;break;case"grad":s=400;break;case"rad":s=2*Math.PI;break;case"turn":s=1}return t=100*i/s,t%=100,this[(i<0?"set":"remove")+"Attribute"]("data-negative",""),this.querySelector("circle").style.strokeDasharray=Math.abs(t)+",500",!0},"*",function(){this._elt.innerHTML=''})},tokens:{angle:/(?:\b|\B-|(?=\B\.))(?:\d+(?:\.\d+)?|\.\d+)(?:deg|g?rad|turn)\b/i},languages:{css:!0,less:!0,markup:{lang:"markup",before:"punctuation",inside:"inside",root:Prism.languages.markup&&Prism.languages.markup.tag.inside["attr-value"]},sass:[{lang:"sass",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["property-line"]},{lang:"sass",before:"operator",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["variable-line"]}],scss:!0,stylus:[{lang:"stylus",before:"func",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["property-declaration"].inside},{lang:"stylus",before:"func",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["variable-declaration"].inside}]}},color:{create:function(){new Prism.plugins.Previewer("color",function(e){return this.style.backgroundColor="",this.style.backgroundColor=e,!!this.style.backgroundColor})},tokens:{color:[Prism.languages.css.hexcode].concat(Prism.languages.css.color)},languages:{css:!1,less:!0,markup:{lang:"markup",before:"punctuation",inside:"inside",root:Prism.languages.markup&&Prism.languages.markup.tag.inside["attr-value"]},sass:[{lang:"sass",before:"punctuation",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["variable-line"]},{lang:"sass",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["property-line"]}],scss:!1,stylus:[{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["property-declaration"].inside},{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["variable-declaration"].inside}]}},easing:{create:function(){new Prism.plugins.Previewer("easing",function(e){var s=(e={linear:"0,0,1,1",ease:".25,.1,.25,1","ease-in":".42,0,1,1","ease-out":"0,0,.58,1","ease-in-out":".42,0,.58,1"}[e]||e).match(/-?(?:\d+(?:\.\d+)?|\.\d+)/g);if(4!==s.length)return!1;s=s.map(function(e,s){return 100*(s%2?1-e:e)}),this.querySelector("path").setAttribute("d","M0,100 C"+s[0]+","+s[1]+", "+s[2]+","+s[3]+", 100,0");var t=this.querySelectorAll("line");return t[0].setAttribute("x2",s[0]),t[0].setAttribute("y2",s[1]),t[1].setAttribute("x2",s[2]),t[1].setAttribute("y2",s[3]),!0},"*",function(){this._elt.innerHTML=''})},tokens:{easing:{pattern:/\bcubic-bezier\((?:-?(?:\d+(?:\.\d+)?|\.\d+),\s*){3}-?(?:\d+(?:\.\d+)?|\.\d+)\)\B|\b(?:ease(?:-in)?(?:-out)?|linear)(?=\s|[;}]|$)/i,inside:{function:/[\w-]+(?=\()/,punctuation:/[(),]/}}},languages:{css:!0,less:!0,sass:[{lang:"sass",inside:"inside",before:"punctuation",root:Prism.languages.sass&&Prism.languages.sass["variable-line"]},{lang:"sass",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["property-line"]}],scss:!0,stylus:[{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["property-declaration"].inside},{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["variable-declaration"].inside}]}},time:{create:function(){new Prism.plugins.Previewer("time",function(e){var s=parseFloat(e),t=e.match(/[a-z]+$/i);return!(!s||!t)&&(t=t[0],this.querySelector("circle").style.animationDuration=2*s+t,!0)},"*",function(){this._elt.innerHTML=''})},tokens:{time:/(?:\b|\B-|(?=\B\.))(?:\d+(?:\.\d+)?|\.\d+)m?s\b/i},languages:{css:!0,less:!0,markup:{lang:"markup",before:"punctuation",inside:"inside",root:Prism.languages.markup&&Prism.languages.markup.tag.inside["attr-value"]},sass:[{lang:"sass",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["property-line"]},{lang:"sass",before:"operator",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["variable-line"]}],scss:!0,stylus:[{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["property-declaration"].inside},{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["variable-declaration"].inside}]}}},t="token",i="active",a="flipped",r=function(e,s,t,i){this._elt=null,this._type=e,this._token=null,this.updater=s,this._mouseout=this.mouseout.bind(this),this.initializer=i;var a=this;t||(t=["*"]),Array.isArray(t)||(t=[t]),t.forEach(function(e){"string"!=typeof e&&(e=e.lang),r.byLanguages[e]||(r.byLanguages[e]=[]),r.byLanguages[e].indexOf(a)<0&&r.byLanguages[e].push(a)}),r.byType[e]=this};for(var e in r.prototype.init=function(){this._elt||(this._elt=document.createElement("div"),this._elt.className="prism-previewer prism-previewer-"+this._type,document.body.appendChild(this._elt),this.initializer&&this.initializer())},r.prototype.isDisabled=function(e){do{if(e.hasAttribute&&e.hasAttribute("data-previewers"))return-1===(e.getAttribute("data-previewers")||"").split(/\s+/).indexOf(this._type)}while(e=e.parentNode);return!1},r.prototype.check=function(e){if(!e.classList.contains(t)||!this.isDisabled(e)){do{if(e.classList&&e.classList.contains(t)&&e.classList.contains(this._type))break}while(e=e.parentNode);e&&e!==this._token&&(this._token=e,this.show())}},r.prototype.mouseout=function(){this._token.removeEventListener("mouseout",this._mouseout,!1),this._token=null,this.hide()},r.prototype.show=function(){if(this._elt||this.init(),this._token)if(this.updater.call(this._elt,this._token.textContent)){this._token.addEventListener("mouseout",this._mouseout,!1);var e=function(e){var s=e.getBoundingClientRect(),t=s.left,i=s.top,a=document.documentElement.getBoundingClientRect();return t-=a.left,{top:i-=a.top,right:innerWidth-t-s.width,bottom:innerHeight-i-s.height,left:t,width:s.width,height:s.height}}(this._token);this._elt.classList.add(i),0=0?e[s]=function(e,s,t){var i="180deg";return/^(?:-?(?:\d+(?:\.\d+)?|\.\d+)(?:deg|rad)|to\b|top|right|bottom|left)/.test(t[0])&&(i=t.shift()).indexOf("to ")<0&&(i.indexOf("top")>=0?i=i.indexOf("left")>=0?"to bottom right":i.indexOf("right")>=0?"to bottom left":"to bottom":i.indexOf("bottom")>=0?i=i.indexOf("left")>=0?"to top right":i.indexOf("right")>=0?"to top left":"to top":i.indexOf("left")>=0?i="to right":i.indexOf("right")>=0?i="to left":e&&(i.indexOf("deg")>=0?i=90-parseFloat(i)+"deg":i.indexOf("rad")>=0&&(i=Math.PI/2-parseFloat(i)+"rad"))),s+"("+i+","+t.join(",")+")"}(i,a,n):a.indexOf("radial")>=0?e[s]=function(e,s,t){if(t[0].indexOf("at")<0){var i="center",a="ellipse",n="farthest-corner";if(/\b(?:bottom|center|left|right|top)\b|^\d+/.test(t[0])&&(i=t.shift().replace(/\s*-?\d+(?:deg|rad)\s*/,"")),/\b(?:circle|closest|contain|cover|ellipse|farthest)\b/.test(t[0])){var r=t.shift().split(/\s+/);!r[0]||"circle"!==r[0]&&"ellipse"!==r[0]||(a=r.shift()),r[0]&&(n=r.shift()),"cover"===n?n="farthest-corner":"contain"===n&&(n="clothest-side")}return s+"("+a+" "+n+" at "+i+","+t.join(",")+")"}return s+"("+t.join(",")+")"}(0,a,n):e[s]=a+"("+n.join(",")+")"},function(){new Prism.plugins.Previewer("gradient",(function(e){return this.firstChild.style.backgroundImage="",this.firstChild.style.backgroundImage=s(e),!!this.firstChild.style.backgroundImage}),"*",(function(){this._elt.innerHTML="
    "}))}),tokens:{gradient:{pattern:/(?:\b|\B-[a-z]{1,10}-)(?:repeating-)?(?:linear|radial)-gradient\((?:(?:hsl|rgb)a?\(.+?\)|[^\)])+\)/gi,inside:{function:/[\w-]+(?=\()/,punctuation:/[(),]/}}},languages:{css:!0,less:!0,sass:[{lang:"sass",before:"punctuation",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["variable-line"]},{lang:"sass",before:"punctuation",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["property-line"]}],scss:!0,stylus:[{lang:"stylus",before:"func",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["property-declaration"].inside},{lang:"stylus",before:"func",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["variable-declaration"].inside}]}},angle:{create:function(){new Prism.plugins.Previewer("angle",(function(e){var s,t,i=parseFloat(e),a=e.match(/[a-z]+$/i);if(!i||!a)return!1;switch(a=a[0]){case"deg":s=360;break;case"grad":s=400;break;case"rad":s=2*Math.PI;break;case"turn":s=1}return t=100*i/s,t%=100,this[(i<0?"set":"remove")+"Attribute"]("data-negative",""),this.querySelector("circle").style.strokeDasharray=Math.abs(t)+",500",!0}),"*",(function(){this._elt.innerHTML=''}))},tokens:{angle:/(?:\b|\B-|(?=\B\.))(?:\d+(?:\.\d+)?|\.\d+)(?:deg|g?rad|turn)\b/i},languages:{css:!0,less:!0,markup:{lang:"markup",before:"punctuation",inside:"inside",root:Prism.languages.markup&&Prism.languages.markup.tag.inside["attr-value"]},sass:[{lang:"sass",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["property-line"]},{lang:"sass",before:"operator",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["variable-line"]}],scss:!0,stylus:[{lang:"stylus",before:"func",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["property-declaration"].inside},{lang:"stylus",before:"func",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["variable-declaration"].inside}]}},color:{create:function(){new Prism.plugins.Previewer("color",(function(e){return this.style.backgroundColor="",this.style.backgroundColor=e,!!this.style.backgroundColor}))},tokens:{color:[Prism.languages.css.hexcode].concat(Prism.languages.css.color)},languages:{css:!1,less:!0,markup:{lang:"markup",before:"punctuation",inside:"inside",root:Prism.languages.markup&&Prism.languages.markup.tag.inside["attr-value"]},sass:[{lang:"sass",before:"punctuation",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["variable-line"]},{lang:"sass",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["property-line"]}],scss:!1,stylus:[{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["property-declaration"].inside},{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["variable-declaration"].inside}]}},easing:{create:function(){new Prism.plugins.Previewer("easing",(function(e){var s=(e={linear:"0,0,1,1",ease:".25,.1,.25,1","ease-in":".42,0,1,1","ease-out":"0,0,.58,1","ease-in-out":".42,0,.58,1"}[e]||e).match(/-?(?:\d+(?:\.\d+)?|\.\d+)/g);if(4===s.length){s=s.map((function(e,s){return 100*(s%2?1-e:e)})),this.querySelector("path").setAttribute("d","M0,100 C"+s[0]+","+s[1]+", "+s[2]+","+s[3]+", 100,0");var t=this.querySelectorAll("line");return t[0].setAttribute("x2",s[0]),t[0].setAttribute("y2",s[1]),t[1].setAttribute("x2",s[2]),t[1].setAttribute("y2",s[3]),!0}return!1}),"*",(function(){this._elt.innerHTML=''}))},tokens:{easing:{pattern:/\bcubic-bezier\((?:-?(?:\d+(?:\.\d+)?|\.\d+),\s*){3}-?(?:\d+(?:\.\d+)?|\.\d+)\)\B|\b(?:ease(?:-in)?(?:-out)?|linear)(?=\s|[;}]|$)/i,inside:{function:/[\w-]+(?=\()/,punctuation:/[(),]/}}},languages:{css:!0,less:!0,sass:[{lang:"sass",inside:"inside",before:"punctuation",root:Prism.languages.sass&&Prism.languages.sass["variable-line"]},{lang:"sass",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["property-line"]}],scss:!0,stylus:[{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["property-declaration"].inside},{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["variable-declaration"].inside}]}},time:{create:function(){new Prism.plugins.Previewer("time",(function(e){var s=parseFloat(e),t=e.match(/[a-z]+$/i);return!(!s||!t||(t=t[0],this.querySelector("circle").style.animationDuration=2*s+t,0))}),"*",(function(){this._elt.innerHTML=''}))},tokens:{time:/(?:\b|\B-|(?=\B\.))(?:\d+(?:\.\d+)?|\.\d+)m?s\b/i},languages:{css:!0,less:!0,markup:{lang:"markup",before:"punctuation",inside:"inside",root:Prism.languages.markup&&Prism.languages.markup.tag.inside["attr-value"]},sass:[{lang:"sass",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["property-line"]},{lang:"sass",before:"operator",inside:"inside",root:Prism.languages.sass&&Prism.languages.sass["variable-line"]}],scss:!0,stylus:[{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["property-declaration"].inside},{lang:"stylus",before:"hexcode",inside:"rest",root:Prism.languages.stylus&&Prism.languages.stylus["variable-declaration"].inside}]}}},i="token",a="active",n="flipped",r=function(e,s,t,i){this._elt=null,this._type=e,this._token=null,this.updater=s,this._mouseout=this.mouseout.bind(this),this.initializer=i;var a=this;t||(t=["*"]),Array.isArray(t)||(t=[t]),t.forEach((function(e){"string"!=typeof e&&(e=e.lang),r.byLanguages[e]||(r.byLanguages[e]=[]),r.byLanguages[e].indexOf(a)<0&&r.byLanguages[e].push(a)})),r.byType[e]=this};for(var o in r.prototype.init=function(){this._elt||(this._elt=document.createElement("div"),this._elt.className="prism-previewer prism-previewer-"+this._type,document.body.appendChild(this._elt),this.initializer&&this.initializer())},r.prototype.isDisabled=function(e){do{if(e.hasAttribute&&e.hasAttribute("data-previewers"))return-1===(e.getAttribute("data-previewers")||"").split(/\s+/).indexOf(this._type)}while(e=e.parentNode);return!1},r.prototype.check=function(e){if(!e.classList.contains(i)||!this.isDisabled(e)){do{if(e.classList&&e.classList.contains(i)&&e.classList.contains(this._type))break}while(e=e.parentNode);e&&e!==this._token&&(this._token=e,this.show())}},r.prototype.mouseout=function(){this._token.removeEventListener("mouseout",this._mouseout,!1),this._token=null,this.hide()},r.prototype.show=function(){var e,s,t,i;if(this._elt||this.init(),this._token)if(this.updater.call(this._elt,this._token.textContent)){this._token.addEventListener("mouseout",this._mouseout,!1);var r=(s=(e=this._token.getBoundingClientRect()).left,t=e.top,s-=(i=document.documentElement.getBoundingClientRect()).left,{top:t-=i.top,right:innerWidth-s-e.width,bottom:innerHeight-t-e.height,left:s,width:e.width,height:e.height});this._elt.classList.add(a),r.top-this._elt.offsetHeight>0?(this._elt.classList.remove(n),this._elt.style.top=r.top+"px",this._elt.style.bottom=""):(this._elt.classList.add(n),this._elt.style.bottom=r.bottom+"px",this._elt.style.top=""),this._elt.style.left=r.left+Math.min(200,r.width/2)+"px"}else this.hide()},r.prototype.hide=function(){this._elt.classList.remove(a)},r.byLanguages={},r.byType={},r.initEvents=function(e,s){var t=[];r.byLanguages[s]&&(t=t.concat(r.byLanguages[s])),r.byLanguages["*"]&&(t=t.concat(r.byLanguages["*"])),e.addEventListener("mouseover",(function(e){var s=e.target;t.forEach((function(e){e.check(s)}))}),!1)},Prism.plugins.Previewer=r,Prism.hooks.add("before-highlight",(function(e){for(var s in t){var i=t[s].languages;if(e.language&&i[e.language]&&!i[e.language].initialized){var a=i[e.language];Array.isArray(a)||(a=[a]),a.forEach((function(a){var n,r,o,l;!0===a?(n="important",r=e.language,a=e.language):(n=a.before||"important",r=a.inside||a.lang,o=a.root||Prism.languages,l=a.skip,a=e.language),!l&&Prism.languages[a]&&(Prism.languages.insertBefore(r,n,t[s].tokens,o),e.grammar=Prism.languages[a],i[e.language]={initialized:!0})}))}}})),Prism.hooks.add("after-highlight",(function(e){(r.byLanguages["*"]||r.byLanguages[e.language])&&r.initEvents(e.element,e.language)})),t)t[o].create()}}(); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/remove-initial-line-feed/prism-remove-initial-line-feed.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/remove-initial-line-feed/prism-remove-initial-line-feed.min.js index f507edf165..a953fae81e 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/remove-initial-line-feed/prism-remove-initial-line-feed.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/remove-initial-line-feed/prism-remove-initial-line-feed.min.js @@ -1 +1 @@ -"undefined"!=typeof Prism&&"undefined"!=typeof document&&Prism.hooks.add("before-sanity-check",function(e){if(e.code){var n=e.element.parentNode,o=/(?:^|\s)keep-initial-line-feed(?:\s|$)/;!n||"pre"!==n.nodeName.toLowerCase()||o.test(n.className)||o.test(e.element.className)||(e.code=e.code.replace(/^(?:\r?\n|\r)/,""))}}); \ No newline at end of file +"undefined"!=typeof Prism&&"undefined"!=typeof document&&Prism.hooks.add("before-sanity-check",(function(e){if(e.code){var n=e.element.parentNode,o=/(?:^|\s)keep-initial-line-feed(?:\s|$)/;!n||"pre"!==n.nodeName.toLowerCase()||o.test(n.className)||o.test(e.element.className)||(e.code=e.code.replace(/^(?:\r?\n|\r)/,""))}})); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/show-invisibles/prism-show-invisibles.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/show-invisibles/prism-show-invisibles.min.js index 56231c4aa7..6298b3b9cc 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/show-invisibles/prism-show-invisibles.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/show-invisibles/prism-show-invisibles.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism){var i={tab:/\t/,crlf:/\r\n/,lf:/\n/,cr:/\r/,space:/ /};Prism.hooks.add("before-highlight",function(r){s(r.grammar)})}function f(r,e){var i=r[e];switch(Prism.util.type(i)){case"RegExp":var a={};r[e]={pattern:i,inside:a},s(a);break;case"Array":for(var n=0,t=i.length;n /}}}}},Prism.hooks.add("wrap",function(e){if("treeview"===e.language&&"entry-name"===e.type){var t=e.classes,n=/(^|[^\\])\/\s*$/;if(n.test(e.content))e.content=e.content.replace(n,"$1"),t.push("dir");else{e.content=e.content.replace(/(^|[^\\])[=*|]\s*$/,"$1");for(var a=e.content.toLowerCase().replace(/\s+/g,"").split(".");1 /}}}}},Prism.hooks.add("wrap",(function(e){if("treeview"===e.language&&"entry-name"===e.type){var t=e.classes,n=/(^|[^\\])\/\s*$/;if(n.test(e.content))e.content=e.content.replace(n,"$1"),t.push("dir");else{e.content=e.content.replace(/(^|[^\\])[=*|]\s*$/,"$1");for(var a=e.content.toLowerCase().replace(/\s+/g,"").split(".");a.length>1;)a.shift(),t.push("ext-"+a.join("-"))}"."===e.content[0]&&t.push("dotfile")}}))); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/unescaped-markup/prism-unescaped-markup.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/unescaped-markup/prism-unescaped-markup.min.js index 622f0953d8..e84264ed93 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/unescaped-markup/prism-unescaped-markup.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/unescaped-markup/prism-unescaped-markup.min.js @@ -1 +1 @@ -"undefined"!=typeof Prism&&"undefined"!=typeof document&&(Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Prism.plugins.UnescapedMarkup=!0,Prism.hooks.add("before-highlightall",function(e){e.selector+=', [class*="lang-"] script[type="text/plain"], [class*="language-"] script[type="text/plain"], script[type="text/plain"][class*="lang-"], script[type="text/plain"][class*="language-"]'}),Prism.hooks.add("before-sanity-check",function(e){var t=e.element;if(t.matches('script[type="text/plain"]')){var a=document.createElement("code"),c=document.createElement("pre");c.className=a.className=t.className;var n=t.dataset;return Object.keys(n||{}).forEach(function(e){Object.prototype.hasOwnProperty.call(n,e)&&(c.dataset[e]=n[e])}),a.textContent=e.code=e.code.replace(/<\/script(?:>|>)/gi,"<\/script>"),c.appendChild(a),t.parentNode.replaceChild(c,t),void(e.element=a)}if(!e.code){var o=t.childNodes;1===o.length&&"#comment"==o[0].nodeName&&(t.textContent=e.code=o[0].textContent)}})); \ No newline at end of file +"undefined"!=typeof Prism&&"undefined"!=typeof document&&(Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Prism.plugins.UnescapedMarkup=!0,Prism.hooks.add("before-highlightall",(function(e){e.selector+=', [class*="lang-"] script[type="text/plain"], [class*="language-"] script[type="text/plain"], script[type="text/plain"][class*="lang-"], script[type="text/plain"][class*="language-"]'})),Prism.hooks.add("before-sanity-check",(function(e){var t=e.element;if(t.matches('script[type="text/plain"]')){var a=document.createElement("code"),c=document.createElement("pre");c.className=a.className=t.className;var n=t.dataset;return Object.keys(n||{}).forEach((function(e){Object.prototype.hasOwnProperty.call(n,e)&&(c.dataset[e]=n[e])})),a.textContent=e.code=e.code.replace(/<\/script(?:>|>)/gi,"<\/script>"),c.appendChild(a),t.parentNode.replaceChild(c,t),void(e.element=a)}if(!e.code){var o=t.childNodes;1===o.length&&"#comment"==o[0].nodeName&&(t.textContent=e.code=o[0].textContent)}}))); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/wpd/prism-wpd.min.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/wpd/prism-wpd.min.js index 4d2f395544..c88b653526 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/wpd/prism-wpd.min.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/plugins/wpd/prism-wpd.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof Prism){if(Prism.languages.css&&(Prism.languages.css.selector.pattern?(Prism.languages.css.selector.inside["pseudo-class"]=/:[\w-]+/,Prism.languages.css.selector.inside["pseudo-element"]=/::[\w-]+/):Prism.languages.css.selector={pattern:Prism.languages.css.selector,inside:{"pseudo-class":/:[\w-]+/,"pseudo-element":/::[\w-]+/}}),Prism.languages.markup){Prism.languages.markup.tag.inside.tag.inside["tag-id"]=/[\w-]+/;var s={HTML:{a:1,abbr:1,acronym:1,b:1,basefont:1,bdo:1,big:1,blink:1,cite:1,code:1,dfn:1,em:1,kbd:1,i:1,rp:1,rt:1,ruby:1,s:1,samp:1,small:1,spacer:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,var:1,wbr:1,noframes:1,summary:1,command:1,dt:1,dd:1,figure:1,figcaption:1,center:1,section:1,nav:1,article:1,aside:1,hgroup:1,header:1,footer:1,address:1,noscript:1,isIndex:1,main:1,mark:1,marquee:1,meter:1,menu:1},SVG:{animateColor:1,animateMotion:1,animateTransform:1,glyph:1,feBlend:1,feColorMatrix:1,feComponentTransfer:1,feFuncR:1,feFuncG:1,feFuncB:1,feFuncA:1,feComposite:1,feConvolveMatrix:1,feDiffuseLighting:1,feDisplacementMap:1,feFlood:1,feGaussianBlur:1,feImage:1,feMerge:1,feMergeNode:1,feMorphology:1,feOffset:1,feSpecularLighting:1,feTile:1,feTurbulence:1,feDistantLight:1,fePointLight:1,feSpotLight:1,linearGradient:1,radialGradient:1,altGlyph:1,textPath:1,tref:1,altglyph:1,textpath:1,altglyphdef:1,altglyphitem:1,clipPath:1,"color-profile":1,cursor:1,"font-face":1,"font-face-format":1,"font-face-name":1,"font-face-src":1,"font-face-uri":1,foreignObject:1,glyphRef:1,hkern:1,vkern:1},MathML:{}}}var a;Prism.hooks.add("wrap",function(e){if(("tag-id"==e.type||"property"==e.type&&0!=e.content.indexOf("-")||"rule"==e.type&&0!=e.content.indexOf("@-")||"pseudo-class"==e.type&&0!=e.content.indexOf(":-")||"pseudo-element"==e.type&&0!=e.content.indexOf("::-")||"attr-name"==e.type&&0!=e.content.indexOf("data-"))&&-1===e.content.indexOf("<")&&("css"==e.language||"scss"==e.language||"markup"==e.language)){var t="https://webplatform.github.io/docs/",n=e.content;if("css"==e.language||"scss"==e.language)t+="css/","property"==e.type?t+="properties/":"rule"==e.type?(t+="atrules/",n=n.substring(1)):"pseudo-class"==e.type?(t+="selectors/pseudo-classes/",n=n.substring(1)):"pseudo-element"==e.type&&(t+="selectors/pseudo-elements/",n=n.substring(2));else if("markup"==e.language)if("tag-id"==e.type){if(!(a=function(e){var t=e.toLowerCase();{if(s.HTML[t])return"html";if(s.SVG[e])return"svg";if(s.MathML[e])return"mathml"}if(0!==s.HTML[t]&&"undefined"!=typeof document){var n=(document.createElement(e).toString().match(/\[object HTML(.+)Element\]/)||[])[1];if(n&&"Unknown"!=n)return s.HTML[t]=1,"html"}if((s.HTML[t]=0)!==s.SVG[e]&&"undefined"!=typeof document){var a=(document.createElementNS("http://www.w3.org/2000/svg",e).toString().match(/\[object SVG(.+)Element\]/)||[])[1];if(a&&"Unknown"!=a)return s.SVG[e]=1,"svg"}if((s.SVG[e]=0)!==s.MathML[e]&&0===e.indexOf("m"))return s.MathML[e]=1,"mathml";return s.MathML[e]=0,null}(e.content)||a))return;t+=a+"/elements/"}else if("attr-name"==e.type){if(!a)return;t+=a+"/attributes/"}t+=n,e.tag="a",e.attributes.href=t,e.attributes.target="_blank"}})}}(); \ No newline at end of file +!function(){if("undefined"!=typeof Prism){if(Prism.languages.css&&(Prism.languages.css.selector.pattern?(Prism.languages.css.selector.inside["pseudo-class"]=/:[\w-]+/,Prism.languages.css.selector.inside["pseudo-element"]=/::[\w-]+/):Prism.languages.css.selector={pattern:Prism.languages.css.selector,inside:{"pseudo-class":/:[\w-]+/,"pseudo-element":/::[\w-]+/}}),Prism.languages.markup){Prism.languages.markup.tag.inside.tag.inside["tag-id"]=/[\w-]+/;var e={HTML:{a:1,abbr:1,acronym:1,b:1,basefont:1,bdo:1,big:1,blink:1,cite:1,code:1,dfn:1,em:1,kbd:1,i:1,rp:1,rt:1,ruby:1,s:1,samp:1,small:1,spacer:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,var:1,wbr:1,noframes:1,summary:1,command:1,dt:1,dd:1,figure:1,figcaption:1,center:1,section:1,nav:1,article:1,aside:1,hgroup:1,header:1,footer:1,address:1,noscript:1,isIndex:1,main:1,mark:1,marquee:1,meter:1,menu:1},SVG:{animateColor:1,animateMotion:1,animateTransform:1,glyph:1,feBlend:1,feColorMatrix:1,feComponentTransfer:1,feFuncR:1,feFuncG:1,feFuncB:1,feFuncA:1,feComposite:1,feConvolveMatrix:1,feDiffuseLighting:1,feDisplacementMap:1,feFlood:1,feGaussianBlur:1,feImage:1,feMerge:1,feMergeNode:1,feMorphology:1,feOffset:1,feSpecularLighting:1,feTile:1,feTurbulence:1,feDistantLight:1,fePointLight:1,feSpotLight:1,linearGradient:1,radialGradient:1,altGlyph:1,textPath:1,tref:1,altglyph:1,textpath:1,altglyphdef:1,altglyphitem:1,clipPath:1,"color-profile":1,cursor:1,"font-face":1,"font-face-format":1,"font-face-name":1,"font-face-src":1,"font-face-uri":1,foreignObject:1,glyphRef:1,hkern:1,vkern:1},MathML:{}}}var t;Prism.hooks.add("wrap",(function(n){if(("tag-id"==n.type||"property"==n.type&&0!=n.content.indexOf("-")||"rule"==n.type&&0!=n.content.indexOf("@-")||"pseudo-class"==n.type&&0!=n.content.indexOf(":-")||"pseudo-element"==n.type&&0!=n.content.indexOf("::-")||"attr-name"==n.type&&0!=n.content.indexOf("data-"))&&-1===n.content.indexOf("<")&&("css"==n.language||"scss"==n.language||"markup"==n.language)){var a="https://webplatform.github.io/docs/",s=n.content;if("css"==n.language||"scss"==n.language)a+="css/","property"==n.type?a+="properties/":"rule"==n.type?(a+="atrules/",s=s.substring(1)):"pseudo-class"==n.type?(a+="selectors/pseudo-classes/",s=s.substring(1)):"pseudo-element"==n.type&&(a+="selectors/pseudo-elements/",s=s.substring(2));else if("markup"==n.language)if("tag-id"==n.type){if(!(t=function(t){var n=t.toLowerCase();if(e.HTML[n])return"html";if(e.SVG[t])return"svg";if(e.MathML[t])return"mathml";if(0!==e.HTML[n]&&"undefined"!=typeof document){var a=(document.createElement(t).toString().match(/\[object HTML(.+)Element\]/)||[])[1];if(a&&"Unknown"!=a)return e.HTML[n]=1,"html"}if(e.HTML[n]=0,0!==e.SVG[t]&&"undefined"!=typeof document){var s=(document.createElementNS("http://www.w3.org/2000/svg",t).toString().match(/\[object SVG(.+)Element\]/)||[])[1];if(s&&"Unknown"!=s)return e.SVG[t]=1,"svg"}return e.SVG[t]=0,0!==e.MathML[t]&&0===t.indexOf("m")?(e.MathML[t]=1,"mathml"):(e.MathML[t]=0,null)}(n.content)||t))return;a+=t+"/elements/"}else if("attr-name"==n.type){if(!t)return;a+=t+"/attributes/"}a+=s,n.tag="a",n.attributes.href=a,n.attributes.target="_blank"}}))}}(); \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/prism.js b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/prism.js index 04e9a28e61..98835b5879 100644 --- a/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/prism.js +++ b/modules/docs/app/VoloDocs.Web/wwwroot/libs/prismjs/prism.js @@ -1623,8 +1623,24 @@ Prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|extends|imple Prism.languages.insertBefore('javascript', 'keyword', { 'regex': { - // eslint-disable-next-line regexp/no-dupe-characters-character-class - pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/, + pattern: RegExp( + // lookbehind + // eslint-disable-next-line regexp/no-dupe-characters-character-class + /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source + + // Regex pattern: + // There are 2 regex patterns here. The RegExp set notation proposal added support for nested character + // classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible + // with the only syntax, so we have to define 2 different regex patterns. + /\//.source + + '(?:' + + /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source + + '|' + + // `v` flag syntax. This supports 3 levels of nested character classes. + /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source + + ')' + + // lookahead + /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source + ), lookbehind: true, greedy: true, inside: { diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock index 8e5f9ddd6d..025853e95d 100644 --- a/modules/docs/app/VoloDocs.Web/yarn.lock +++ b/modules/docs/app/VoloDocs.Web/yarn.lock @@ -2,45 +2,45 @@ # yarn lockfile v1 -"@abp/anchor-js@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-5.2.1.tgz#701e01a9637800429cf3f0364e62b8351c3a0354" - integrity sha512-61+rrfSQyZacqUJ5qQxkoWYffWcd7AArkj8DmEHmFY4e28hH3P9eXMcuGBoJ85pXleAPEmVYswc/xZiTMNHkvg== +"@abp/anchor-js@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-5.3.0-rc.1.tgz#ede6821e159291aae4e7f8b0863ed5e013f28237" + integrity sha512-84VMhSBguy12OJ9l8ONBAdsAeXxNYiRI0FYQUzuBG20zzTdJY/LvVxQGArdecM1ouLMhGzB3X3cdQQ4uHgHhUA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" anchor-js "^4.3.1" -"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz#25bd7116b9b0e72ba45f0f5246343343de8561b2" - integrity sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44" - integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~5.2.1" - "@abp/bootstrap" "~5.2.1" - "@abp/bootstrap-datepicker" "~5.2.1" - "@abp/datatables.net-bs5" "~5.2.1" - "@abp/font-awesome" "~5.2.1" - "@abp/jquery-form" "~5.2.1" - "@abp/jquery-validation-unobtrusive" "~5.2.1" - "@abp/lodash" "~5.2.1" - "@abp/luxon" "~5.2.1" - "@abp/malihu-custom-scrollbar-plugin" "~5.2.1" - "@abp/select2" "~5.2.1" - "@abp/sweetalert2" "~5.2.1" - "@abp/timeago" "~5.2.1" - "@abp/toastr" "~5.2.1" - -"@abp/aspnetcore.mvc.ui@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3" - integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg== +"@abp/aspnetcore.mvc.ui.theme.basic@^5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.3.0-rc.1.tgz#dc27eb79ba7353eb6b16e4a2f50d17c3cfc9157d" + integrity sha512-TEbz/ISsGhfTec66XSeivQjCOCpTidufdpZmj8JRyrbQvhXOYohJs3ImrGJOIxUwo6nuzagGpotqXryjIF+jrg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~5.3.0-rc.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.3.0-rc.1.tgz#ed993befe99682baee55ea8771f983980ba8f93f" + integrity sha512-kL4CXe0YoZ4wJ4XvutqLPkv4fMuFeRJFzdix6lx4dPAArnPu69n3P4qFhokPkcoGpB2KTRqyn9fHQs8g2FCGQw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~5.3.0-rc.1" + "@abp/bootstrap" "~5.3.0-rc.1" + "@abp/bootstrap-datepicker" "~5.3.0-rc.1" + "@abp/datatables.net-bs5" "~5.3.0-rc.1" + "@abp/font-awesome" "~5.3.0-rc.1" + "@abp/jquery-form" "~5.3.0-rc.1" + "@abp/jquery-validation-unobtrusive" "~5.3.0-rc.1" + "@abp/lodash" "~5.3.0-rc.1" + "@abp/luxon" "~5.3.0-rc.1" + "@abp/malihu-custom-scrollbar-plugin" "~5.3.0-rc.1" + "@abp/select2" "~5.3.0-rc.1" + "@abp/sweetalert2" "~5.3.0-rc.1" + "@abp/timeago" "~5.3.0-rc.1" + "@abp/toastr" "~5.3.0-rc.1" + +"@abp/aspnetcore.mvc.ui@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.3.0-rc.1.tgz#5205d3a5ea500ff3b8d525dcc11a2ce4cfccdfd3" + integrity sha512-mIefq3QSVtP7heNl0ocHiSKLU+DwN5/TDvvPj2L3IZkCzuOrDxoBUIBIciea4k10HIQzqo6gmm1YOw0CEfzNHg== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -49,180 +49,180 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd" - integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww== +"@abp/bootstrap-datepicker@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.3.0-rc.1.tgz#1a5a29d7f9904e8d99c7085bc4545ad2665195cb" + integrity sha512-Y5QLLNd2UpbzbWSh+5nKdpAdz2i3V8+feTHTpAxnPgYRabPGqAFiOrty8KZ1MJEgjQFWC1ypGHYII7GWVyIS6Q== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9" - integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A== +"@abp/bootstrap@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.3.0-rc.1.tgz#977d579f59e18b1eb2c9b43612d525a859a575a4" + integrity sha512-dpY0bPHdhUI5yL23+EsR6w/KjoPyehaEgHLLKQDERdubX1Zk/SDWrhrYXnXxtJ0fvxG2aRVOEBMULmHD3m/PoA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" bootstrap "^5.1.3" -"@abp/clipboard@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.2.1.tgz#c6bddd279b37e9b2bd27b027d5686411c9ae942b" - integrity sha512-aouNTDz8t+8M4O2a+UsEdtABRsyhvzGpXqCG2+LYE1vA3I+CKhglkvEFp+GyIgWsipEHY1U1w6V3qZtcRINn+A== +"@abp/clipboard@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.3.0-rc.1.tgz#da893847d2d86f53f99dfefc8898d14410d45600" + integrity sha512-Eqkgd3ZJXHE5xovfb+2SzGxzISCjzLsGYSV/uZs2BYVfyIZ0+D2Jx0jOT8j8oVPAlRTCCMAbvoxMKZJZr/WC0Q== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" clipboard "^2.0.8" -"@abp/core@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a" - integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ== +"@abp/core@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.3.0-rc.1.tgz#4ede309ccfab440deb66fecb091273027483676a" + integrity sha512-cTw9xaWMkRDQjXRtkB5zx4Za0CPx7yvCRnTngIJs7xO86lRMVnuiwVGjP66vYTmiiu2ulGFgCeuw1AaK5t+g4Q== dependencies: - "@abp/utils" "~5.2.1" + "@abp/utils" "~5.3.0-rc.1" -"@abp/datatables.net-bs5@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe" - integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA== +"@abp/datatables.net-bs5@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.3.0-rc.1.tgz#ca624d788acdcc547d0bdf1f76ba3ffc105dfd52" + integrity sha512-uyFBkD9rM3wGve0ZKrr7bEbC0Z/ywi8S/EYL6GwLzGNtogSsVj5HGtSvifKjCBn7KmAvo54skKoVgVEn77dlWQ== dependencies: - "@abp/datatables.net" "~5.2.1" + "@abp/datatables.net" "~5.3.0-rc.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6" - integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w== +"@abp/datatables.net@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.3.0-rc.1.tgz#38c0f6323f7e6305a50f7de9885b8a3f440cdf15" + integrity sha512-lecJ9Yelgey/nfSscsUHET0gyB6pZgkhnJXu3u8d9XhV2M5sc/WSnnCO3bgVBqMDImprR4GFPFw2cUlWkb8QBg== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" datatables.net "^1.11.4" -"@abp/docs@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-5.2.1.tgz#111952a2da8e6e1ac20ed8eaa8a15854b2c92f7b" - integrity sha512-WZCCY73vyIpRu7hypPiP9CRr4Bvzkv3up0WeGQ4rK9LiZWNSxG9PXv4lYeD4cuHg0zgxH9d/6toYToaIJNqDCQ== +"@abp/docs@^5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-5.3.0-rc.1.tgz#c53b92172b5333187fccd95993960a259619a70c" + integrity sha512-hLKck5AFDIqk8RKaKmQzl+dzP6mluizcl2aeoUo6SoQE4uCKfInv6Np2Zak7HYdJkCrFvlOJUFkLi/RLX04eQA== dependencies: - "@abp/anchor-js" "~5.2.1" - "@abp/clipboard" "~5.2.1" - "@abp/malihu-custom-scrollbar-plugin" "~5.2.1" - "@abp/popper.js" "~5.2.1" - "@abp/prismjs" "~5.2.1" + "@abp/anchor-js" "~5.3.0-rc.1" + "@abp/clipboard" "~5.3.0-rc.1" + "@abp/malihu-custom-scrollbar-plugin" "~5.3.0-rc.1" + "@abp/popper.js" "~5.3.0-rc.1" + "@abp/prismjs" "~5.3.0-rc.1" -"@abp/font-awesome@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb" - integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ== +"@abp/font-awesome@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.3.0-rc.1.tgz#de14dca2b33fdc098d2325c5047e030a3927bfa9" + integrity sha512-tIuDwo+L5CuLpQ+ARsaTYmxuqpSJLqcaXuoFfk6JAC20bw881t7y8w4xWy1PUs0+SEQwTT7diZjQrcA/xxlMUQ== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790" - integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ== +"@abp/jquery-form@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.3.0-rc.1.tgz#0a363d8e4814651e0c46e2109d19dcc84fc884b0" + integrity sha512-IWazO6BW5rHJ+ODk4haEqWzfzHvbxtW2+T1o534Lr7d+LI9yabNiQmRZ24yzNDb6SmRvDUVsumZ+lxPn2WBhIw== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093" - integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg== +"@abp/jquery-validation-unobtrusive@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.3.0-rc.1.tgz#0aa2a5535acd79b5288ef04a0dc1b83a7a57b4b9" + integrity sha512-Qv/+nrd+ZeUs/2mCMahpQFqEguMOcmHrLg7hcw0LgcHr+MmEcG4WDcijTY6suFyekaf0DZD6vsFZjdvZmhsVYQ== dependencies: - "@abp/jquery-validation" "~5.2.1" + "@abp/jquery-validation" "~5.3.0-rc.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244" - integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw== +"@abp/jquery-validation@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.3.0-rc.1.tgz#d05afbe0209c0815afe3a7cb0cf811256e9905fc" + integrity sha512-3DoRX6c8duRx1/g7MFuPAO/qesJCFqbVbw+x0+QnKmCkVZmz5VFAqdO9yFMxDFRbBAtyp7faaarc0lOtAcBsoA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" jquery-validation "^1.19.3" -"@abp/jquery@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228" - integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg== +"@abp/jquery@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.3.0-rc.1.tgz#26e5d5761f2629d02b2534ad964080221d536308" + integrity sha512-//bqInarV6XOs8+I5GW1q/c05sjnCq/Z0vuzFW1i1NDrQ2Q5kqF5leMV9hhGEZmfR+yG1T0MsbVvueieRkV/cA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" jquery "~3.6.0" -"@abp/lodash@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d" - integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA== +"@abp/lodash@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.3.0-rc.1.tgz#c53304fbd9b1c885a9a812c681c3698dd8ecea47" + integrity sha512-yBvUB05z/SSEEbZ79nFfb0cKwWVFbrt9OtUkQHy9ER7ip0R9escG2n1djFtAA33yZr/NLzSUh+vVBYsEhk8MOA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" lodash "^4.17.21" -"@abp/luxon@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17" - integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A== +"@abp/luxon@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.3.0-rc.1.tgz#bcb4de01b20a8e4da8db186e88fdebfcde47fb8f" + integrity sha512-SLozcDvCL/2jyvG2ZU+DHjzbfHYdmwiRjWu7gWyNjaY2e6D3NraHHjpMQ7ubObXZRlhhvfcp0i6eeKKoZNJtEQ== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09" - integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ== +"@abp/malihu-custom-scrollbar-plugin@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.3.0-rc.1.tgz#398181c7c6cc1805544e7a1ccd0423ed96005e0b" + integrity sha512-KZar881wtotKc+1bqDlBWo2vLUEeeqEpMBg8+BiXsGofp5ovudifVPM6mHZ9Gi29U9LAMyI0VEGwLJctgB/UoA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/popper.js@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-5.2.1.tgz#441a5be6889915fc09fe5d5e3c4b419d65a7b3bd" - integrity sha512-poQhd5EYjU2/udJWlDEd5mIPWmw6AzNOzAd5V4OUHMai+BHeuhIXQ6mopvxf9lpzytGoFe2ZIiQ547Wfq4Fl/Q== +"@abp/popper.js@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-5.3.0-rc.1.tgz#f89dfe05885295af256106e340bae862261fd5a5" + integrity sha512-MJ6qMDOldWRF+tAMz2XF1adocZIO8t94q0J4LAwe+VxKkIT1eZOAjE0HubuW4ffwiknKnL/vy90DenmW4WKsDw== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" "@popperjs/core" "^2.11.2" -"@abp/prismjs@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.2.1.tgz#86aae6ee4529401da75744f1e43c7cd3c0b494a0" - integrity sha512-YNgcM7Kvmu3hGXJh4B8gl7rLzC28VuZYYP7AVptVSbTz/n6usCo21evG/st8L3vXixuQkvnNpBFgacJnHdSJZQ== +"@abp/prismjs@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.3.0-rc.1.tgz#ee1a49b8bd0af2a29aa7bfb93d22ce07a4edbe70" + integrity sha512-oOnzwUtI6q2u7iE/YWQEULm1I+f7Bo+0tQ9rYlzIoalBRnqN57Zw0VMf5AHq8qjn6GiInehPtU9wsaVTPqXmtw== dependencies: - "@abp/clipboard" "~5.2.1" - "@abp/core" "~5.2.1" + "@abp/clipboard" "~5.3.0-rc.1" + "@abp/core" "~5.3.0-rc.1" prismjs "^1.26.0" -"@abp/select2@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332" - integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ== +"@abp/select2@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.3.0-rc.1.tgz#b2ce00b6545674d6bccc10fdfe4626a4598a0cdc" + integrity sha512-frE5jia7bBdZinW4LqD5JR+wknWu2ARX3L3pPiQ080ulB+P58gRj07ZPd1BWgRcvutnuANYyP9rZtDA18Ls+9Q== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" select2 "^4.0.13" -"@abp/sweetalert2@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51" - integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg== +"@abp/sweetalert2@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.3.0-rc.1.tgz#6eb10b257e7f256da64ff6fe248a370671a26920" + integrity sha512-g9nddGcDGaG6EmjX7qpRcLzy3F38BTtFc0RBWApH7Da1o/LMYFYa6xGfS7ouIynZBM9j/BRP12CVTR+Y9qqbGg== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" sweetalert2 "^11.3.6" -"@abp/timeago@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de" - integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA== +"@abp/timeago@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.3.0-rc.1.tgz#2702a0f22db52dbf4c0717e4abcd317c56d10563" + integrity sha512-XRc4D98FIZR0YTXIoV0+OxVJTdixtNDiwatZRffopHT4Kpptmpj6O9KMcB4SngCH99/TrUFdEUnA2CgszxiEOA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" timeago "^1.6.7" -"@abp/toastr@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4" - integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA== +"@abp/toastr@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.3.0-rc.1.tgz#ec3a3d302ac91d5393c3caeb8b4884ad811b6edb" + integrity sha512-InZweYuBkrNZNBQKp6A+6gxGdO/lB0XsrXaa+CIVe55p8aNJPzE0mnvSfKWhN5G273wR08AD9RjR22kYS+bgFA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" toastr "^2.1.4" -"@abp/utils@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064" - integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ== +"@abp/utils@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.3.0-rc.1.tgz#3fa758944e7325e7b3f528141e03bb71f8e04d24" + integrity sha512-/8BTYZomNMdy+RpYXWLp5dg0lRhmfiguciZEVWo4qRw1lCXm/JR+0842XT1XYE1dQ4orNNJ3/H86eRX8Ab6Yfg== dependencies: just-compare "^1.3.0" diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json index 95b3f87bfc..021d1ba335 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json @@ -3,6 +3,6 @@ "name": "demo-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1" } } diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock index d5f6d1f237..7a4d606848 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz#25bd7116b9b0e72ba45f0f5246343343de8561b2" - integrity sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44" - integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~5.2.1" - "@abp/bootstrap" "~5.2.1" - "@abp/bootstrap-datepicker" "~5.2.1" - "@abp/datatables.net-bs5" "~5.2.1" - "@abp/font-awesome" "~5.2.1" - "@abp/jquery-form" "~5.2.1" - "@abp/jquery-validation-unobtrusive" "~5.2.1" - "@abp/lodash" "~5.2.1" - "@abp/luxon" "~5.2.1" - "@abp/malihu-custom-scrollbar-plugin" "~5.2.1" - "@abp/select2" "~5.2.1" - "@abp/sweetalert2" "~5.2.1" - "@abp/timeago" "~5.2.1" - "@abp/toastr" "~5.2.1" - -"@abp/aspnetcore.mvc.ui@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3" - integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg== +"@abp/aspnetcore.mvc.ui.theme.basic@^5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.3.0-rc.1.tgz#dc27eb79ba7353eb6b16e4a2f50d17c3cfc9157d" + integrity sha512-TEbz/ISsGhfTec66XSeivQjCOCpTidufdpZmj8JRyrbQvhXOYohJs3ImrGJOIxUwo6nuzagGpotqXryjIF+jrg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~5.3.0-rc.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.3.0-rc.1.tgz#ed993befe99682baee55ea8771f983980ba8f93f" + integrity sha512-kL4CXe0YoZ4wJ4XvutqLPkv4fMuFeRJFzdix6lx4dPAArnPu69n3P4qFhokPkcoGpB2KTRqyn9fHQs8g2FCGQw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~5.3.0-rc.1" + "@abp/bootstrap" "~5.3.0-rc.1" + "@abp/bootstrap-datepicker" "~5.3.0-rc.1" + "@abp/datatables.net-bs5" "~5.3.0-rc.1" + "@abp/font-awesome" "~5.3.0-rc.1" + "@abp/jquery-form" "~5.3.0-rc.1" + "@abp/jquery-validation-unobtrusive" "~5.3.0-rc.1" + "@abp/lodash" "~5.3.0-rc.1" + "@abp/luxon" "~5.3.0-rc.1" + "@abp/malihu-custom-scrollbar-plugin" "~5.3.0-rc.1" + "@abp/select2" "~5.3.0-rc.1" + "@abp/sweetalert2" "~5.3.0-rc.1" + "@abp/timeago" "~5.3.0-rc.1" + "@abp/toastr" "~5.3.0-rc.1" + +"@abp/aspnetcore.mvc.ui@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.3.0-rc.1.tgz#5205d3a5ea500ff3b8d525dcc11a2ce4cfccdfd3" + integrity sha512-mIefq3QSVtP7heNl0ocHiSKLU+DwN5/TDvvPj2L3IZkCzuOrDxoBUIBIciea4k10HIQzqo6gmm1YOw0CEfzNHg== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,144 +41,144 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd" - integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww== +"@abp/bootstrap-datepicker@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.3.0-rc.1.tgz#1a5a29d7f9904e8d99c7085bc4545ad2665195cb" + integrity sha512-Y5QLLNd2UpbzbWSh+5nKdpAdz2i3V8+feTHTpAxnPgYRabPGqAFiOrty8KZ1MJEgjQFWC1ypGHYII7GWVyIS6Q== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9" - integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A== +"@abp/bootstrap@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.3.0-rc.1.tgz#977d579f59e18b1eb2c9b43612d525a859a575a4" + integrity sha512-dpY0bPHdhUI5yL23+EsR6w/KjoPyehaEgHLLKQDERdubX1Zk/SDWrhrYXnXxtJ0fvxG2aRVOEBMULmHD3m/PoA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" bootstrap "^5.1.3" -"@abp/core@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a" - integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ== +"@abp/core@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.3.0-rc.1.tgz#4ede309ccfab440deb66fecb091273027483676a" + integrity sha512-cTw9xaWMkRDQjXRtkB5zx4Za0CPx7yvCRnTngIJs7xO86lRMVnuiwVGjP66vYTmiiu2ulGFgCeuw1AaK5t+g4Q== dependencies: - "@abp/utils" "~5.2.1" + "@abp/utils" "~5.3.0-rc.1" -"@abp/datatables.net-bs5@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe" - integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA== +"@abp/datatables.net-bs5@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.3.0-rc.1.tgz#ca624d788acdcc547d0bdf1f76ba3ffc105dfd52" + integrity sha512-uyFBkD9rM3wGve0ZKrr7bEbC0Z/ywi8S/EYL6GwLzGNtogSsVj5HGtSvifKjCBn7KmAvo54skKoVgVEn77dlWQ== dependencies: - "@abp/datatables.net" "~5.2.1" + "@abp/datatables.net" "~5.3.0-rc.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6" - integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w== +"@abp/datatables.net@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.3.0-rc.1.tgz#38c0f6323f7e6305a50f7de9885b8a3f440cdf15" + integrity sha512-lecJ9Yelgey/nfSscsUHET0gyB6pZgkhnJXu3u8d9XhV2M5sc/WSnnCO3bgVBqMDImprR4GFPFw2cUlWkb8QBg== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" datatables.net "^1.11.4" -"@abp/font-awesome@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb" - integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ== +"@abp/font-awesome@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.3.0-rc.1.tgz#de14dca2b33fdc098d2325c5047e030a3927bfa9" + integrity sha512-tIuDwo+L5CuLpQ+ARsaTYmxuqpSJLqcaXuoFfk6JAC20bw881t7y8w4xWy1PUs0+SEQwTT7diZjQrcA/xxlMUQ== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790" - integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ== +"@abp/jquery-form@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.3.0-rc.1.tgz#0a363d8e4814651e0c46e2109d19dcc84fc884b0" + integrity sha512-IWazO6BW5rHJ+ODk4haEqWzfzHvbxtW2+T1o534Lr7d+LI9yabNiQmRZ24yzNDb6SmRvDUVsumZ+lxPn2WBhIw== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093" - integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg== +"@abp/jquery-validation-unobtrusive@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.3.0-rc.1.tgz#0aa2a5535acd79b5288ef04a0dc1b83a7a57b4b9" + integrity sha512-Qv/+nrd+ZeUs/2mCMahpQFqEguMOcmHrLg7hcw0LgcHr+MmEcG4WDcijTY6suFyekaf0DZD6vsFZjdvZmhsVYQ== dependencies: - "@abp/jquery-validation" "~5.2.1" + "@abp/jquery-validation" "~5.3.0-rc.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244" - integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw== +"@abp/jquery-validation@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.3.0-rc.1.tgz#d05afbe0209c0815afe3a7cb0cf811256e9905fc" + integrity sha512-3DoRX6c8duRx1/g7MFuPAO/qesJCFqbVbw+x0+QnKmCkVZmz5VFAqdO9yFMxDFRbBAtyp7faaarc0lOtAcBsoA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" jquery-validation "^1.19.3" -"@abp/jquery@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228" - integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg== +"@abp/jquery@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.3.0-rc.1.tgz#26e5d5761f2629d02b2534ad964080221d536308" + integrity sha512-//bqInarV6XOs8+I5GW1q/c05sjnCq/Z0vuzFW1i1NDrQ2Q5kqF5leMV9hhGEZmfR+yG1T0MsbVvueieRkV/cA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" jquery "~3.6.0" -"@abp/lodash@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d" - integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA== +"@abp/lodash@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.3.0-rc.1.tgz#c53304fbd9b1c885a9a812c681c3698dd8ecea47" + integrity sha512-yBvUB05z/SSEEbZ79nFfb0cKwWVFbrt9OtUkQHy9ER7ip0R9escG2n1djFtAA33yZr/NLzSUh+vVBYsEhk8MOA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" lodash "^4.17.21" -"@abp/luxon@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17" - integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A== +"@abp/luxon@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.3.0-rc.1.tgz#bcb4de01b20a8e4da8db186e88fdebfcde47fb8f" + integrity sha512-SLozcDvCL/2jyvG2ZU+DHjzbfHYdmwiRjWu7gWyNjaY2e6D3NraHHjpMQ7ubObXZRlhhvfcp0i6eeKKoZNJtEQ== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09" - integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ== +"@abp/malihu-custom-scrollbar-plugin@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.3.0-rc.1.tgz#398181c7c6cc1805544e7a1ccd0423ed96005e0b" + integrity sha512-KZar881wtotKc+1bqDlBWo2vLUEeeqEpMBg8+BiXsGofp5ovudifVPM6mHZ9Gi29U9LAMyI0VEGwLJctgB/UoA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332" - integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ== +"@abp/select2@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.3.0-rc.1.tgz#b2ce00b6545674d6bccc10fdfe4626a4598a0cdc" + integrity sha512-frE5jia7bBdZinW4LqD5JR+wknWu2ARX3L3pPiQ080ulB+P58gRj07ZPd1BWgRcvutnuANYyP9rZtDA18Ls+9Q== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" select2 "^4.0.13" -"@abp/sweetalert2@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51" - integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg== +"@abp/sweetalert2@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.3.0-rc.1.tgz#6eb10b257e7f256da64ff6fe248a370671a26920" + integrity sha512-g9nddGcDGaG6EmjX7qpRcLzy3F38BTtFc0RBWApH7Da1o/LMYFYa6xGfS7ouIynZBM9j/BRP12CVTR+Y9qqbGg== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" sweetalert2 "^11.3.6" -"@abp/timeago@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de" - integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA== +"@abp/timeago@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.3.0-rc.1.tgz#2702a0f22db52dbf4c0717e4abcd317c56d10563" + integrity sha512-XRc4D98FIZR0YTXIoV0+OxVJTdixtNDiwatZRffopHT4Kpptmpj6O9KMcB4SngCH99/TrUFdEUnA2CgszxiEOA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" timeago "^1.6.7" -"@abp/toastr@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4" - integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA== +"@abp/toastr@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.3.0-rc.1.tgz#ec3a3d302ac91d5393c3caeb8b4884ad811b6edb" + integrity sha512-InZweYuBkrNZNBQKp6A+6gxGdO/lB0XsrXaa+CIVe55p8aNJPzE0mnvSfKWhN5G273wR08AD9RjR22kYS+bgFA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" toastr "^2.1.4" -"@abp/utils@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064" - integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ== +"@abp/utils@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.3.0-rc.1.tgz#3fa758944e7325e7b3f528141e03bb71f8e04d24" + integrity sha512-/8BTYZomNMdy+RpYXWLp5dg0lRhmfiguciZEVWo4qRw1lCXm/JR+0842XT1XYE1dQ4orNNJ3/H86eRX8Ab6Yfg== dependencies: just-compare "^1.3.0" diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json index 5cbf1e4a17..0bc1a6dfc4 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1", - "@abp/virtual-file-explorer": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1", + "@abp/virtual-file-explorer": "^5.3.0-rc.1" } } diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock index eb76a09ea5..d687b3b2c5 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz#25bd7116b9b0e72ba45f0f5246343343de8561b2" - integrity sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44" - integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~5.2.1" - "@abp/bootstrap" "~5.2.1" - "@abp/bootstrap-datepicker" "~5.2.1" - "@abp/datatables.net-bs5" "~5.2.1" - "@abp/font-awesome" "~5.2.1" - "@abp/jquery-form" "~5.2.1" - "@abp/jquery-validation-unobtrusive" "~5.2.1" - "@abp/lodash" "~5.2.1" - "@abp/luxon" "~5.2.1" - "@abp/malihu-custom-scrollbar-plugin" "~5.2.1" - "@abp/select2" "~5.2.1" - "@abp/sweetalert2" "~5.2.1" - "@abp/timeago" "~5.2.1" - "@abp/toastr" "~5.2.1" - -"@abp/aspnetcore.mvc.ui@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3" - integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg== +"@abp/aspnetcore.mvc.ui.theme.basic@^5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.3.0-rc.1.tgz#dc27eb79ba7353eb6b16e4a2f50d17c3cfc9157d" + integrity sha512-TEbz/ISsGhfTec66XSeivQjCOCpTidufdpZmj8JRyrbQvhXOYohJs3ImrGJOIxUwo6nuzagGpotqXryjIF+jrg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~5.3.0-rc.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.3.0-rc.1.tgz#ed993befe99682baee55ea8771f983980ba8f93f" + integrity sha512-kL4CXe0YoZ4wJ4XvutqLPkv4fMuFeRJFzdix6lx4dPAArnPu69n3P4qFhokPkcoGpB2KTRqyn9fHQs8g2FCGQw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~5.3.0-rc.1" + "@abp/bootstrap" "~5.3.0-rc.1" + "@abp/bootstrap-datepicker" "~5.3.0-rc.1" + "@abp/datatables.net-bs5" "~5.3.0-rc.1" + "@abp/font-awesome" "~5.3.0-rc.1" + "@abp/jquery-form" "~5.3.0-rc.1" + "@abp/jquery-validation-unobtrusive" "~5.3.0-rc.1" + "@abp/lodash" "~5.3.0-rc.1" + "@abp/luxon" "~5.3.0-rc.1" + "@abp/malihu-custom-scrollbar-plugin" "~5.3.0-rc.1" + "@abp/select2" "~5.3.0-rc.1" + "@abp/sweetalert2" "~5.3.0-rc.1" + "@abp/timeago" "~5.3.0-rc.1" + "@abp/toastr" "~5.3.0-rc.1" + +"@abp/aspnetcore.mvc.ui@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.3.0-rc.1.tgz#5205d3a5ea500ff3b8d525dcc11a2ce4cfccdfd3" + integrity sha512-mIefq3QSVtP7heNl0ocHiSKLU+DwN5/TDvvPj2L3IZkCzuOrDxoBUIBIciea4k10HIQzqo6gmm1YOw0CEfzNHg== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,171 +41,171 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd" - integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww== +"@abp/bootstrap-datepicker@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.3.0-rc.1.tgz#1a5a29d7f9904e8d99c7085bc4545ad2665195cb" + integrity sha512-Y5QLLNd2UpbzbWSh+5nKdpAdz2i3V8+feTHTpAxnPgYRabPGqAFiOrty8KZ1MJEgjQFWC1ypGHYII7GWVyIS6Q== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9" - integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A== +"@abp/bootstrap@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.3.0-rc.1.tgz#977d579f59e18b1eb2c9b43612d525a859a575a4" + integrity sha512-dpY0bPHdhUI5yL23+EsR6w/KjoPyehaEgHLLKQDERdubX1Zk/SDWrhrYXnXxtJ0fvxG2aRVOEBMULmHD3m/PoA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" bootstrap "^5.1.3" -"@abp/clipboard@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.2.1.tgz#c6bddd279b37e9b2bd27b027d5686411c9ae942b" - integrity sha512-aouNTDz8t+8M4O2a+UsEdtABRsyhvzGpXqCG2+LYE1vA3I+CKhglkvEFp+GyIgWsipEHY1U1w6V3qZtcRINn+A== +"@abp/clipboard@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.3.0-rc.1.tgz#da893847d2d86f53f99dfefc8898d14410d45600" + integrity sha512-Eqkgd3ZJXHE5xovfb+2SzGxzISCjzLsGYSV/uZs2BYVfyIZ0+D2Jx0jOT8j8oVPAlRTCCMAbvoxMKZJZr/WC0Q== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" clipboard "^2.0.8" -"@abp/core@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a" - integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ== +"@abp/core@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.3.0-rc.1.tgz#4ede309ccfab440deb66fecb091273027483676a" + integrity sha512-cTw9xaWMkRDQjXRtkB5zx4Za0CPx7yvCRnTngIJs7xO86lRMVnuiwVGjP66vYTmiiu2ulGFgCeuw1AaK5t+g4Q== dependencies: - "@abp/utils" "~5.2.1" + "@abp/utils" "~5.3.0-rc.1" -"@abp/datatables.net-bs5@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe" - integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA== +"@abp/datatables.net-bs5@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.3.0-rc.1.tgz#ca624d788acdcc547d0bdf1f76ba3ffc105dfd52" + integrity sha512-uyFBkD9rM3wGve0ZKrr7bEbC0Z/ywi8S/EYL6GwLzGNtogSsVj5HGtSvifKjCBn7KmAvo54skKoVgVEn77dlWQ== dependencies: - "@abp/datatables.net" "~5.2.1" + "@abp/datatables.net" "~5.3.0-rc.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6" - integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w== +"@abp/datatables.net@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.3.0-rc.1.tgz#38c0f6323f7e6305a50f7de9885b8a3f440cdf15" + integrity sha512-lecJ9Yelgey/nfSscsUHET0gyB6pZgkhnJXu3u8d9XhV2M5sc/WSnnCO3bgVBqMDImprR4GFPFw2cUlWkb8QBg== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" datatables.net "^1.11.4" -"@abp/font-awesome@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb" - integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ== +"@abp/font-awesome@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.3.0-rc.1.tgz#de14dca2b33fdc098d2325c5047e030a3927bfa9" + integrity sha512-tIuDwo+L5CuLpQ+ARsaTYmxuqpSJLqcaXuoFfk6JAC20bw881t7y8w4xWy1PUs0+SEQwTT7diZjQrcA/xxlMUQ== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790" - integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ== +"@abp/jquery-form@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.3.0-rc.1.tgz#0a363d8e4814651e0c46e2109d19dcc84fc884b0" + integrity sha512-IWazO6BW5rHJ+ODk4haEqWzfzHvbxtW2+T1o534Lr7d+LI9yabNiQmRZ24yzNDb6SmRvDUVsumZ+lxPn2WBhIw== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093" - integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg== +"@abp/jquery-validation-unobtrusive@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.3.0-rc.1.tgz#0aa2a5535acd79b5288ef04a0dc1b83a7a57b4b9" + integrity sha512-Qv/+nrd+ZeUs/2mCMahpQFqEguMOcmHrLg7hcw0LgcHr+MmEcG4WDcijTY6suFyekaf0DZD6vsFZjdvZmhsVYQ== dependencies: - "@abp/jquery-validation" "~5.2.1" + "@abp/jquery-validation" "~5.3.0-rc.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244" - integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw== +"@abp/jquery-validation@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.3.0-rc.1.tgz#d05afbe0209c0815afe3a7cb0cf811256e9905fc" + integrity sha512-3DoRX6c8duRx1/g7MFuPAO/qesJCFqbVbw+x0+QnKmCkVZmz5VFAqdO9yFMxDFRbBAtyp7faaarc0lOtAcBsoA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" jquery-validation "^1.19.3" -"@abp/jquery@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228" - integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg== +"@abp/jquery@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.3.0-rc.1.tgz#26e5d5761f2629d02b2534ad964080221d536308" + integrity sha512-//bqInarV6XOs8+I5GW1q/c05sjnCq/Z0vuzFW1i1NDrQ2Q5kqF5leMV9hhGEZmfR+yG1T0MsbVvueieRkV/cA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" jquery "~3.6.0" -"@abp/lodash@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d" - integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA== +"@abp/lodash@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.3.0-rc.1.tgz#c53304fbd9b1c885a9a812c681c3698dd8ecea47" + integrity sha512-yBvUB05z/SSEEbZ79nFfb0cKwWVFbrt9OtUkQHy9ER7ip0R9escG2n1djFtAA33yZr/NLzSUh+vVBYsEhk8MOA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" lodash "^4.17.21" -"@abp/luxon@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17" - integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A== +"@abp/luxon@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.3.0-rc.1.tgz#bcb4de01b20a8e4da8db186e88fdebfcde47fb8f" + integrity sha512-SLozcDvCL/2jyvG2ZU+DHjzbfHYdmwiRjWu7gWyNjaY2e6D3NraHHjpMQ7ubObXZRlhhvfcp0i6eeKKoZNJtEQ== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09" - integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ== +"@abp/malihu-custom-scrollbar-plugin@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.3.0-rc.1.tgz#398181c7c6cc1805544e7a1ccd0423ed96005e0b" + integrity sha512-KZar881wtotKc+1bqDlBWo2vLUEeeqEpMBg8+BiXsGofp5ovudifVPM6mHZ9Gi29U9LAMyI0VEGwLJctgB/UoA== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/prismjs@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.2.1.tgz#86aae6ee4529401da75744f1e43c7cd3c0b494a0" - integrity sha512-YNgcM7Kvmu3hGXJh4B8gl7rLzC28VuZYYP7AVptVSbTz/n6usCo21evG/st8L3vXixuQkvnNpBFgacJnHdSJZQ== +"@abp/prismjs@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.3.0-rc.1.tgz#ee1a49b8bd0af2a29aa7bfb93d22ce07a4edbe70" + integrity sha512-oOnzwUtI6q2u7iE/YWQEULm1I+f7Bo+0tQ9rYlzIoalBRnqN57Zw0VMf5AHq8qjn6GiInehPtU9wsaVTPqXmtw== dependencies: - "@abp/clipboard" "~5.2.1" - "@abp/core" "~5.2.1" + "@abp/clipboard" "~5.3.0-rc.1" + "@abp/core" "~5.3.0-rc.1" prismjs "^1.26.0" -"@abp/select2@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332" - integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ== +"@abp/select2@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.3.0-rc.1.tgz#b2ce00b6545674d6bccc10fdfe4626a4598a0cdc" + integrity sha512-frE5jia7bBdZinW4LqD5JR+wknWu2ARX3L3pPiQ080ulB+P58gRj07ZPd1BWgRcvutnuANYyP9rZtDA18Ls+9Q== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" select2 "^4.0.13" -"@abp/sweetalert2@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51" - integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg== +"@abp/sweetalert2@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.3.0-rc.1.tgz#6eb10b257e7f256da64ff6fe248a370671a26920" + integrity sha512-g9nddGcDGaG6EmjX7qpRcLzy3F38BTtFc0RBWApH7Da1o/LMYFYa6xGfS7ouIynZBM9j/BRP12CVTR+Y9qqbGg== dependencies: - "@abp/core" "~5.2.1" + "@abp/core" "~5.3.0-rc.1" sweetalert2 "^11.3.6" -"@abp/timeago@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de" - integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA== +"@abp/timeago@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.3.0-rc.1.tgz#2702a0f22db52dbf4c0717e4abcd317c56d10563" + integrity sha512-XRc4D98FIZR0YTXIoV0+OxVJTdixtNDiwatZRffopHT4Kpptmpj6O9KMcB4SngCH99/TrUFdEUnA2CgszxiEOA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" timeago "^1.6.7" -"@abp/toastr@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4" - integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA== +"@abp/toastr@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.3.0-rc.1.tgz#ec3a3d302ac91d5393c3caeb8b4884ad811b6edb" + integrity sha512-InZweYuBkrNZNBQKp6A+6gxGdO/lB0XsrXaa+CIVe55p8aNJPzE0mnvSfKWhN5G273wR08AD9RjR22kYS+bgFA== dependencies: - "@abp/jquery" "~5.2.1" + "@abp/jquery" "~5.3.0-rc.1" toastr "^2.1.4" -"@abp/utils@~5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064" - integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ== +"@abp/utils@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.3.0-rc.1.tgz#3fa758944e7325e7b3f528141e03bb71f8e04d24" + integrity sha512-/8BTYZomNMdy+RpYXWLp5dg0lRhmfiguciZEVWo4qRw1lCXm/JR+0842XT1XYE1dQ4orNNJ3/H86eRX8Ab6Yfg== dependencies: just-compare "^1.3.0" -"@abp/virtual-file-explorer@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@abp/virtual-file-explorer/-/virtual-file-explorer-5.2.1.tgz#3c4021307213c03f061ecdcb969f21ed3320a094" - integrity sha512-Ppg6zqZBOaryJhkr6KPhuwfPW8NypQDaMGXtCN6AY/usNOf91WlSZJ1uyou0rC6qT3N2ZgM6JIIp+nw9K6K0TA== +"@abp/virtual-file-explorer@^5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/virtual-file-explorer/-/virtual-file-explorer-5.3.0-rc.1.tgz#20f596d1e36b4f874e55b019ac1ba101cd398b80" + integrity sha512-xZSh+gQvJbVlR8AlLXWX6fvg9zMxWLJRMzB7ZY5g7QfOKalgKWoY0qTD1ugmUtHV2BdqL/2ZEbD4/A4LnBTRIQ== dependencies: - "@abp/clipboard" "~5.2.1" - "@abp/prismjs" "~5.2.1" + "@abp/clipboard" "~5.3.0-rc.1" + "@abp/prismjs" "~5.3.0-rc.1" "@fortawesome/fontawesome-free@^5.15.4": version "5.15.4" diff --git a/npm/lerna.json b/npm/lerna.json index 65e1e1fcbb..dcf65cf2bf 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/lerna.version.json b/npm/ng-packs/lerna.version.json index 4b6e1a83fe..9298c36b87 100644 --- a/npm/ng-packs/lerna.version.json +++ b/npm/ng-packs/lerna.version.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "packages": [ "packages/*" ], diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index fa198b0a4a..38d37ac91f 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -38,7 +38,7 @@ }, "private": true, "devDependencies": { - "@abp/utils": "~5.2.1", + "@abp/utils": "~5.3.0-rc.1", "@angular-devkit/build-angular": "13.3.5", "@angular-devkit/build-ng-packagr": "^0.1002.0", "@angular-devkit/schematics-cli": "~12.2.0", @@ -57,17 +57,17 @@ "@angular/platform-browser": "13.3.6", "@angular/platform-browser-dynamic": "13.3.6", "@angular/router": "13.3.6", - "@abp/ng.account": "~5.2.1", - "@abp/ng.account.core": "~5.2.1", - "@abp/ng.core": "~5.2.1", - "@abp/ng.feature-management": "~5.2.1", - "@abp/ng.identity": "~5.2.1", - "@abp/ng.permission-management": "~5.2.1", - "@abp/ng.schematics": "~5.2.1", - "@abp/ng.setting-management": "~5.2.1", - "@abp/ng.tenant-management": "~5.2.1", - "@abp/ng.theme.basic": "~5.2.1", - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.account": "~5.3.0-rc.1", + "@abp/ng.account.core": "~5.3.0-rc.1", + "@abp/ng.core": "~5.3.0-rc.1", + "@abp/ng.feature-management": "~5.3.0-rc.1", + "@abp/ng.identity": "~5.3.0-rc.1", + "@abp/ng.permission-management": "~5.3.0-rc.1", + "@abp/ng.schematics": "~5.3.0-rc.1", + "@abp/ng.setting-management": "~5.3.0-rc.1", + "@abp/ng.tenant-management": "~5.3.0-rc.1", + "@abp/ng.theme.basic": "~5.3.0-rc.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "@fortawesome/fontawesome-free": "^5.15.4", "@ng-bootstrap/ng-bootstrap": "~12.0.0-beta.4", "@ngneat/spectator": "^10.0.0", diff --git a/npm/ng-packs/packages/account-core/package.json b/npm/ng-packs/packages/account-core/package.json index 9a44b1098b..8755b6ca4a 100644 --- a/npm/ng-packs/packages/account-core/package.json +++ b/npm/ng-packs/packages/account-core/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account.core", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": "~5.2.1", - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.core": "~5.3.0-rc.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "@angular/common": ">=12.0.0", "@angular/core": ">=12.0.0" }, diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index 57b6c9c77d..111550d7ab 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.core": "~5.2.1", - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.account.core": "~5.3.0-rc.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index 6b43da3490..15acda73f0 100644 --- a/npm/ng-packs/packages/components/package.json +++ b/npm/ng-packs/packages/components/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.components", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": ">=5.2.1", - "@abp/ng.theme.shared": ">=5.2.1", + "@abp/ng.core": ">=5.3.0-rc.1", + "@abp/ng.theme.shared": ">=5.3.0-rc.1", "@ng-bootstrap/ng-bootstrap": ">=10.0.0" }, "dependencies": { diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index 564777912e..7bd3f93c5d 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.core", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "~5.2.1", + "@abp/utils": "~5.3.0-rc.1", "angular-oauth2-oidc": "^13.0.1", "just-clone": "^3.2.1", "just-compare": "^1.4.0", diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index 2cbf8f50bd..81c3763ffc 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index 7c05de9a6f..94e85bbeff 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.identity", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.permission-management": "~5.2.1", - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.permission-management": "~5.3.0-rc.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 11fee9b967..a11fd3a7ba 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index 7f6517164f..de74fcd725 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.schematics", - "version": "5.2.1", + "version": "5.3.0-rc.1", "description": "Schematics that works with ABP Backend", "keywords": [ "schematics" diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 5af6cdce19..3528eca556 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.setting-management", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.components": "~5.2.1", - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.components": "~5.3.0-rc.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index 9122c79f6c..84d7fcd6eb 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.tenant-management", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "~5.2.1", - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.feature-management": "~5.3.0-rc.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index e40abda535..cea710df2b 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.theme.basic", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.core": "~5.2.1", - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.account.core": "~5.3.0-rc.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 3d61bd2036..7b57f7639f 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "5.2.1", + "version": "5.3.0-rc.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~5.2.1", + "@abp/ng.core": "~5.3.0-rc.1", "@fortawesome/fontawesome-free": "^5.15.4", "@ng-bootstrap/ng-bootstrap": "~12.0.0-beta.4", "@ngx-validate/core": "^0.1.1", diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 006b9c6a1b..3fc7fbc0be 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -124,6 +124,13 @@ dependencies: just-compare "^1.3.0" +"@abp/utils@~5.3.0-rc.1": + version "5.3.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.3.0-rc.1.tgz#3fa758944e7325e7b3f528141e03bb71f8e04d24" + integrity sha512-/8BTYZomNMdy+RpYXWLp5dg0lRhmfiguciZEVWo4qRw1lCXm/JR+0842XT1XYE1dQ4orNNJ3/H86eRX8Ab6Yfg== + dependencies: + just-compare "^1.3.0" + "@ampproject/remapping@2.2.0", "@ampproject/remapping@^2.0.0", "@ampproject/remapping@^2.1.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index bfae9b3f64..0f8c7a1a0d 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "anchor-js": "^4.3.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/aspnetcore.components.server.basictheme/package.json b/npm/packs/aspnetcore.components.server.basictheme/package.json index f449a068c8..a2aabb2a01 100644 --- a/npm/packs/aspnetcore.components.server.basictheme/package.json +++ b/npm/packs/aspnetcore.components.server.basictheme/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/aspnetcore.components.server.basictheme", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.components.server.theming": "~5.2.1" + "@abp/aspnetcore.components.server.theming": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.components.server.theming/package.json b/npm/packs/aspnetcore.components.server.theming/package.json index 055934beac..fdf4b32ce9 100644 --- a/npm/packs/aspnetcore.components.server.theming/package.json +++ b/npm/packs/aspnetcore.components.server.theming/package.json @@ -1,12 +1,12 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/aspnetcore.components.server.theming", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/bootstrap": "~5.2.1", - "@abp/font-awesome": "~5.2.1" + "@abp/bootstrap": "~5.3.0-rc.1", + "@abp/font-awesome": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index 31a154e12c..9133ccbc63 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~5.2.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index 4ce48a5cd5..6d71cc43b9 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "repository": { "type": "git", @@ -10,20 +10,20 @@ "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "~5.2.1", - "@abp/bootstrap": "~5.2.1", - "@abp/bootstrap-datepicker": "~5.2.1", - "@abp/datatables.net-bs5": "~5.2.1", - "@abp/font-awesome": "~5.2.1", - "@abp/jquery-form": "~5.2.1", - "@abp/jquery-validation-unobtrusive": "~5.2.1", - "@abp/lodash": "~5.2.1", - "@abp/luxon": "~5.2.1", - "@abp/malihu-custom-scrollbar-plugin": "~5.2.1", - "@abp/select2": "~5.2.1", - "@abp/sweetalert2": "~5.2.1", - "@abp/timeago": "~5.2.1", - "@abp/toastr": "~5.2.1" + "@abp/aspnetcore.mvc.ui": "~5.3.0-rc.1", + "@abp/bootstrap": "~5.3.0-rc.1", + "@abp/bootstrap-datepicker": "~5.3.0-rc.1", + "@abp/datatables.net-bs5": "~5.3.0-rc.1", + "@abp/font-awesome": "~5.3.0-rc.1", + "@abp/jquery-form": "~5.3.0-rc.1", + "@abp/jquery-validation-unobtrusive": "~5.3.0-rc.1", + "@abp/lodash": "~5.3.0-rc.1", + "@abp/luxon": "~5.3.0-rc.1", + "@abp/malihu-custom-scrollbar-plugin": "~5.3.0-rc.1", + "@abp/select2": "~5.3.0-rc.1", + "@abp/sweetalert2": "~5.3.0-rc.1", + "@abp/timeago": "~5.3.0-rc.1", + "@abp/toastr": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui/package-lock.json b/npm/packs/aspnetcore.mvc.ui/package-lock.json index 9147176dd2..8fe679a6b6 100644 --- a/npm/packs/aspnetcore.mvc.ui/package-lock.json +++ b/npm/packs/aspnetcore.mvc.ui/package-lock.json @@ -1,6 +1,6 @@ { "name": "@abp/aspnetcore.mvc.ui", - "version": "5.2.1", + "version": "5.3.0-rc.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index 9a9809573d..523e0bd759 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/aspnetcore.mvc.ui", "repository": { "type": "git", diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index 58360f41e4..c01b119249 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,14 +1,14 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~5.2.1", - "@abp/owl.carousel": "~5.2.1", - "@abp/prismjs": "~5.2.1", - "@abp/tui-editor": "~5.2.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "~5.3.0-rc.1", + "@abp/owl.carousel": "~5.3.0-rc.1", + "@abp/prismjs": "~5.3.0-rc.1", + "@abp/tui-editor": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index 414748fc4f..63b9cc45d2 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/bootstrap-datepicker", "repository": { "type": "git", diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 07b88bf56e..92c7777842 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/bootstrap", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "bootstrap": "^5.1.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index 393c7a0fc3..ae94c81890 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/chart.js", "publishConfig": { "access": "public" diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index 2197d7ac9b..9ca832f804 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "clipboard": "^2.0.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/cms-kit.admin/package.json b/npm/packs/cms-kit.admin/package.json index 17d676756d..8568d81252 100644 --- a/npm/packs/cms-kit.admin/package.json +++ b/npm/packs/cms-kit.admin/package.json @@ -1,15 +1,15 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/cms-kit.admin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jstree": "~5.2.1", - "@abp/slugify": "~5.2.1", - "@abp/tui-editor": "~5.2.1", - "@abp/uppy": "~5.2.1", - "@abp/codemirror": "~5.2.1" + "@abp/codemirror": "~5.3.0-rc.1", + "@abp/jstree": "~5.3.0-rc.1", + "@abp/slugify": "~5.3.0-rc.1", + "@abp/tui-editor": "~5.3.0-rc.1", + "@abp/uppy": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/cms-kit.public/package.json b/npm/packs/cms-kit.public/package.json index b16a5f322f..4a53341291 100644 --- a/npm/packs/cms-kit.public/package.json +++ b/npm/packs/cms-kit.public/package.json @@ -1,12 +1,12 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/cms-kit.public", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/highlight.js": "~5.2.1", - "@abp/star-rating-svg": "~5.2.1" + "@abp/highlight.js": "~5.3.0-rc.1", + "@abp/star-rating-svg": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/cms-kit/package.json b/npm/packs/cms-kit/package.json index 90d02d96fa..8b4bb7d2f6 100644 --- a/npm/packs/cms-kit/package.json +++ b/npm/packs/cms-kit/package.json @@ -1,12 +1,12 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/cms-kit", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/cms-kit.admin": "~5.2.1", - "@abp/cms-kit.public": "~5.2.1" + "@abp/cms-kit.admin": "~5.3.0-rc.1", + "@abp/cms-kit.public": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index c9d5c77fdc..24f4f0b3c1 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "codemirror": "^5.65.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index 8a82924f24..9c30a65869 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/core", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/utils": "~5.2.1" + "@abp/utils": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/cropperjs/package.json b/npm/packs/cropperjs/package.json index ab4b7fd4f5..d6b822e95c 100644 --- a/npm/packs/cropperjs/package.json +++ b/npm/packs/cropperjs/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/cropperjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "cropperjs": "^1.5.12" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index a6628e6c28..7faba34e17 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/datatables.net-bs4", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/datatables.net": "~5.2.1", + "@abp/datatables.net": "~5.3.0-rc.1", "datatables.net-bs4": "^1.11.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/datatables.net-bs5/package.json b/npm/packs/datatables.net-bs5/package.json index 9599f3f3fb..e9a0dbaad6 100644 --- a/npm/packs/datatables.net-bs5/package.json +++ b/npm/packs/datatables.net-bs5/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/datatables.net-bs5", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "~5.2.1", + "@abp/datatables.net": "~5.3.0-rc.1", "datatables.net-bs5": "^1.11.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index 05ab5a041f..5d73dc54b4 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/datatables.net", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~5.2.1", + "@abp/jquery": "~5.3.0-rc.1", "datatables.net": "^1.11.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index 42181c3fb4..fabbfac295 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "~5.2.1", - "@abp/clipboard": "~5.2.1", - "@abp/malihu-custom-scrollbar-plugin": "~5.2.1", - "@abp/popper.js": "~5.2.1", - "@abp/prismjs": "~5.2.1" + "@abp/anchor-js": "~5.3.0-rc.1", + "@abp/clipboard": "~5.3.0-rc.1", + "@abp/malihu-custom-scrollbar-plugin": "~5.3.0-rc.1", + "@abp/popper.js": "~5.3.0-rc.1", + "@abp/prismjs": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index cd90d02ce5..c75915fbd0 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index f34d2a867a..0aaf358dce 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/font-awesome", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "@fortawesome/fontawesome-free": "^5.15.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index fce1c0e212..58ed646b2c 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "@highlightjs/cdn-assets": "~11.4.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 30384f80f9..7e03aa0d2a 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/jquery-form", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~5.2.1", + "@abp/jquery": "~5.3.0-rc.1", "jquery-form": "^4.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index e71325e186..511f0208c8 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/jquery-validation-unobtrusive", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery-validation": "~5.2.1", + "@abp/jquery-validation": "~5.3.0-rc.1", "jquery-validation-unobtrusive": "^3.2.12" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index 13154cfbcb..149c739724 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/jquery-validation", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~5.2.1", + "@abp/jquery": "~5.3.0-rc.1", "jquery-validation": "^1.19.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index bb6780647f..01ee351f99 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/jquery", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "jquery": "~3.6.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json index 2dd6eae521..76c20d13e4 100644 --- a/npm/packs/jstree/package.json +++ b/npm/packs/jstree/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/jstree", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~5.2.1", + "@abp/jquery": "~5.3.0-rc.1", "jstree": "^3.3.12" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index 3e8a5473ca..0119cf2400 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/lodash", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "lodash": "^4.17.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index 89d57e2360..8ede864304 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/luxon", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "luxon": "^2.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index 665fc7b624..ba67d422a4 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/malihu-custom-scrollbar-plugin", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "malihu-custom-scrollbar-plugin": "^3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index f737132f50..afe3f1867e 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "markdown-it": "^12.3.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index 64d5bc8e6e..b1e0936283 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "owl.carousel": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index 55ef39b872..96e20b7ba8 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "@popperjs/core": "^2.11.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index 6b48d7e709..e743511f73 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~5.2.1", - "@abp/core": "~5.2.1", + "@abp/clipboard": "~5.3.0-rc.1", + "@abp/core": "~5.3.0-rc.1", "prismjs": "^1.26.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index 86fb70e7a9..1cc32ccd85 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/select2", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "select2": "^4.0.13" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/signalr/package.json b/npm/packs/signalr/package.json index 9db6bd9df1..dc8e9f3684 100644 --- a/npm/packs/signalr/package.json +++ b/npm/packs/signalr/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/signalr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "@microsoft/signalr": "~6.0.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/slugify/package.json b/npm/packs/slugify/package.json index 3bccf0b808..22b7620f32 100644 --- a/npm/packs/slugify/package.json +++ b/npm/packs/slugify/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/slugify", "publishConfig": { "access": "public" diff --git a/npm/packs/star-rating-svg/package.json b/npm/packs/star-rating-svg/package.json index 1a458a374e..7febb9673e 100644 --- a/npm/packs/star-rating-svg/package.json +++ b/npm/packs/star-rating-svg/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/star-rating-svg", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~5.2.1", + "@abp/jquery": "~5.3.0-rc.1", "star-rating-svg": "^3.5.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/sweetalert2/package.json b/npm/packs/sweetalert2/package.json index 7373282e71..fb5348cc96 100644 --- a/npm/packs/sweetalert2/package.json +++ b/npm/packs/sweetalert2/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/sweetalert2", "publishConfig": { "access": "public" @@ -10,7 +10,7 @@ "directory": "npm/packs/sweetalert2" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "sweetalert2": "^11.3.6" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index d8a3016057..d59a99dff4 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/timeago", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~5.2.1", + "@abp/jquery": "~5.3.0-rc.1", "timeago": "^1.6.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index c3acb8cefd..9817fb0fa1 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/toastr", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~5.2.1", + "@abp/jquery": "~5.3.0-rc.1", "toastr": "^2.1.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index b229a31256..7399669232 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,12 +1,12 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~5.2.1", - "@abp/prismjs": "~5.2.1" + "@abp/jquery": "~5.3.0-rc.1", + "@abp/prismjs": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/uppy/package.json b/npm/packs/uppy/package.json index ffe8b4080a..afbd3a30cb 100644 --- a/npm/packs/uppy/package.json +++ b/npm/packs/uppy/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/uppy", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~5.2.1", + "@abp/core": "~5.3.0-rc.1", "uppy": "^1.16.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index d03f9bd89f..f3641292a1 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "5.2.1", + "version": "5.3.0-rc.1", "scripts": { "prepublishOnly": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", diff --git a/npm/packs/vee-validate/package.json b/npm/packs/vee-validate/package.json index 2dc5a68b53..bbcf3bc98f 100644 --- a/npm/packs/vee-validate/package.json +++ b/npm/packs/vee-validate/package.json @@ -1,11 +1,11 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/vee-validate", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/vue": "~5.2.1", + "@abp/vue": "~5.3.0-rc.1", "vee-validate": "~3.4.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/virtual-file-explorer/package.json b/npm/packs/virtual-file-explorer/package.json index a4b0bd8b85..46fc05cb8f 100644 --- a/npm/packs/virtual-file-explorer/package.json +++ b/npm/packs/virtual-file-explorer/package.json @@ -1,12 +1,12 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/virtual-file-explorer", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~5.2.1", - "@abp/prismjs": "~5.2.1" + "@abp/clipboard": "~5.3.0-rc.1", + "@abp/prismjs": "~5.3.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/vue/package.json b/npm/packs/vue/package.json index 2e9144b3e5..012c855712 100644 --- a/npm/packs/vue/package.json +++ b/npm/packs/vue/package.json @@ -1,5 +1,5 @@ { - "version": "5.2.1", + "version": "5.3.0-rc.1", "name": "@abp/vue", "publishConfig": { "access": "public" diff --git a/templates/app-nolayers/angular/package.json b/templates/app-nolayers/angular/package.json index 6fdafdd93a..c9c1f95ef6 100644 --- a/templates/app-nolayers/angular/package.json +++ b/templates/app-nolayers/angular/package.json @@ -12,14 +12,14 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~5.2.1", - "@abp/ng.components": "~5.2.1", - "@abp/ng.core": "~5.2.1", - "@abp/ng.identity": "~5.2.1", - "@abp/ng.setting-management": "~5.2.1", - "@abp/ng.tenant-management": "~5.2.1", - "@abp/ng.theme.basic": "~5.2.1", - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.account": "~5.3.0-rc.1", + "@abp/ng.components": "~5.3.0-rc.1", + "@abp/ng.core": "~5.3.0-rc.1", + "@abp/ng.identity": "~5.3.0-rc.1", + "@abp/ng.setting-management": "~5.3.0-rc.1", + "@abp/ng.tenant-management": "~5.3.0-rc.1", + "@abp/ng.theme.basic": "~5.3.0-rc.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "@angular/animations": "~13.1.1", "@angular/common": "~13.1.1", "@angular/compiler": "~13.1.1", @@ -34,7 +34,7 @@ "zone.js": "~0.11.4" }, "devDependencies": { - "@abp/ng.schematics": "~5.2.1", + "@abp/ng.schematics": "~5.3.0-rc.1", "@angular-devkit/build-angular": "~13.1.2", "@angular-eslint/builder": "~13.0.1", "@angular-eslint/eslint-plugin": "~13.0.1", diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json index b99280b230..b7d47de013 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1", - "@abp/aspnetcore.components.server.basictheme": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1", + "@abp/aspnetcore.components.server.basictheme": "^5.3.0-rc.1" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json index b99280b230..b7d47de013 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1", - "@abp/aspnetcore.components.server.basictheme": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1", + "@abp/aspnetcore.components.server.basictheme": "^5.3.0-rc.1" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json index 0448d7be40..0f2145759f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1" } } \ No newline at end of file diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json index 0448d7be40..0f2145759f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1" } } \ No newline at end of file diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json index 8bad0a8f1d..7c51cc96bc 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~5.3.0-rc.1" } } \ No newline at end of file diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json index 8bad0a8f1d..7c51cc96bc 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~5.3.0-rc.1" } } \ No newline at end of file diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index cdddc9c658..2cc214007f 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -12,14 +12,14 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~5.2.1", - "@abp/ng.components": "~5.2.1", - "@abp/ng.core": "~5.2.1", - "@abp/ng.identity": "~5.2.1", - "@abp/ng.setting-management": "~5.2.1", - "@abp/ng.tenant-management": "~5.2.1", - "@abp/ng.theme.basic": "~5.2.1", - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.account": "~5.3.0-rc.1", + "@abp/ng.components": "~5.3.0-rc.1", + "@abp/ng.core": "~5.3.0-rc.1", + "@abp/ng.identity": "~5.3.0-rc.1", + "@abp/ng.setting-management": "~5.3.0-rc.1", + "@abp/ng.tenant-management": "~5.3.0-rc.1", + "@abp/ng.theme.basic": "~5.3.0-rc.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "@angular/animations": "~13.3.3", "@angular/common": "~13.3.3", "@angular/compiler": "~13.3.3", @@ -34,7 +34,7 @@ "zone.js": "~0.11.4" }, "devDependencies": { - "@abp/ng.schematics": "~5.2.1", + "@abp/ng.schematics": "~5.3.0-rc.1", "@angular-devkit/build-angular": "~13.3.3", "@angular-eslint/builder": "~13.2.1", "@angular-eslint/eslint-plugin": "~13.2.1", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json index b99280b230..b7d47de013 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1", - "@abp/aspnetcore.components.server.basictheme": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1", + "@abp/aspnetcore.components.server.basictheme": "^5.3.0-rc.1" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json index b99280b230..b7d47de013 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1", - "@abp/aspnetcore.components.server.basictheme": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1", + "@abp/aspnetcore.components.server.basictheme": "^5.3.0-rc.1" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index 0448d7be40..0f2145759f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json index 44e817e13e..09b98ca204 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index 0448d7be40..0f2145759f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index 0448d7be40..0f2145759f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1" } } \ No newline at end of file diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 05f715c7c2..238087df41 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -15,14 +15,14 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~5.2.1", - "@abp/ng.components": "~5.2.1", - "@abp/ng.core": "~5.2.1", - "@abp/ng.identity": "~5.2.1", - "@abp/ng.setting-management": "~5.2.1", - "@abp/ng.tenant-management": "~5.2.1", - "@abp/ng.theme.basic": "~5.2.1", - "@abp/ng.theme.shared": "~5.2.1", + "@abp/ng.account": "~5.3.0-rc.1", + "@abp/ng.components": "~5.3.0-rc.1", + "@abp/ng.core": "~5.3.0-rc.1", + "@abp/ng.identity": "~5.3.0-rc.1", + "@abp/ng.setting-management": "~5.3.0-rc.1", + "@abp/ng.tenant-management": "~5.3.0-rc.1", + "@abp/ng.theme.basic": "~5.3.0-rc.1", + "@abp/ng.theme.shared": "~5.3.0-rc.1", "@angular/animations": "~13.3.3", "@angular/common": "~13.3.3", "@angular/compiler": "~13.3.3", @@ -37,7 +37,7 @@ "zone.js": "~0.11.4" }, "devDependencies": { - "@abp/ng.schematics": "~5.2.1", + "@abp/ng.schematics": "~5.3.0-rc.1", "@angular-devkit/build-angular": "~13.3.3", "@angular-eslint/builder": "~13.2.1", "@angular-eslint/eslint-plugin": "~13.2.1", diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index 0bfada49ae..e446c98dd0 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": ">=9", "@angular/core": ">=9", - "@abp/ng.core": ">=5.2.1", - "@abp/ng.theme.shared": ">=5.2.1" + "@abp/ng.core": ">=5.3.0-rc.1", + "@abp/ng.theme.shared": ">=5.3.0-rc.1" }, "dependencies": { "tslib": "^2.1.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json index b99280b230..b7d47de013 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1", - "@abp/aspnetcore.components.server.basictheme": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1", + "@abp/aspnetcore.components.server.basictheme": "^5.3.0-rc.1" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json index 44e817e13e..09b98ca204 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 0448d7be40..0f2145759f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 0448d7be40..0f2145759f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^5.3.0-rc.1" } } \ No newline at end of file From a7e47f9ed1cab354284220b6fdac10136eb66a53 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Fri, 6 May 2022 09:28:34 +0300 Subject: [PATCH 238/272] update auto pr base branch --- .github/workflows/auto-pr.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/auto-pr.yml b/.github/workflows/auto-pr.yml index c62896d948..084b0977d0 100644 --- a/.github/workflows/auto-pr.yml +++ b/.github/workflows/auto-pr.yml @@ -1,24 +1,24 @@ -name: Merge branch rel-5.3 with rel-5.2 +name: Merge branch dev with rel-5.3 on: push: branches: - - rel-5.2 + - rel-5.3 jobs: merge-rel-5-3-with-rel-5-2: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: - ref: rel-5.3 + ref: dev - name: Reset promotion branch run: | - git fetch origin rel-5.2:rel-5.2 - git reset --hard rel-5.2 + git fetch origin rel-5.3:rel-5.3 + git reset --hard rel-5.3 - name: Create Pull Request uses: peter-evans/create-pull-request@v3 with: - branch: auto-merge/rel-5-2/${{github.run_number}} - title: Merge branch rel-5.3 with rel-5.2 - body: This PR generated automatically to merge rel-5.3 with rel-5.2. Please review the changed files before merging to prevent any errors that may occur. + branch: auto-merge/rel-5-3/${{github.run_number}} + title: Merge branch dev with rel-5.3 + body: This PR generated automatically to merge dev with rel-5.3. Please review the changed files before merging to prevent any errors that may occur. reviewers: ${{github.actor}} token: ${{ github.token }} From 6d1c5cdeeb5912977c5db8a7c3b4a90fbe863c5f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 6 May 2022 17:20:09 +0800 Subject: [PATCH 239/272] Feature modal improvement --- .../Components/FeatureManagementModal.razor | 92 ++++++++++--------- .../FeatureManagementModal.cshtml | 6 +- ...tingManagementFeatureDefinitionProvider.cs | 15 +++ 3 files changed, 67 insertions(+), 46 deletions(-) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor index 1feaf59202..8bc5e9dfe7 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor @@ -6,7 +6,7 @@ @L["Features"] - + @if (Groups == null || !Groups.Any()) @@ -33,55 +33,61 @@
    @foreach (var feature in Groups[index].Features) { - var disabled = IsDisabled(feature.Provider.Name); +
    + @{ + var disabled = IsDisabled(feature.Provider.Name); - if (feature.ValueType is FreeTextStringValueType) - { - - @feature.DisplayName - - @if (feature.Description != null) + if (feature.ValueType is FreeTextStringValueType) { -
    @feature.Description
    + + @feature.DisplayName + + @if (feature.Description != null) + { +
    @feature.Description
    + } +
    } -
    - } - if (feature.ValueType is SelectionStringValueType) - { - var items = ((SelectionStringValueType) feature.ValueType).ItemSource.Items; - - - @feature.DisplayName - - @if (feature.Description != null) + if (feature.ValueType is SelectionStringValueType) { -
    @feature.Description
    + var items = ((SelectionStringValueType) feature.ValueType).ItemSource.Items; + + + @feature.DisplayName + + @if (feature.Description != null) + { +
    @feature.Description
    + } +
    } -
    - } - if (feature.ValueType is ToggleStringValueType) - { - - @feature.DisplayName - - @if (feature.Description != null) - { -
    @feature.Description
    + if (feature.ValueType is ToggleStringValueType) + { + + + @feature.DisplayName + + @if (feature.Description != null) + { +
    @feature.Description
    + } +
    + } } - } +
    } @@ -95,4 +101,4 @@
    - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml index 167de4943f..d537b099c4 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml @@ -58,7 +58,7 @@ group-style="margin-left: @(feature.Depth * 20)px"/> @if (feature.Description != null) { -
    @feature.Description
    +
    @feature.Description
    } } @@ -81,7 +81,7 @@ group-style="margin-left: @(feature.Depth * 25)px"/> @if (feature.Description != null) { -
    @feature.Description
    +
    @feature.Description
    } } @@ -105,7 +105,7 @@ @if (feature.Description != null) { -
    @feature.Description
    +
    @feature.Description
    }
    } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs index 23f0c071fd..9f27dd2c60 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs @@ -18,6 +18,13 @@ public class SettingManagementFeatureDefinitionProvider : FeatureDefinitionProvi L("Feature:SettingManagementEnable"), L("Feature:SettingManagementEnableDescription"), new ToggleStringValueType()); + + group.AddFeature( + "MaxNumber", + "", + L("Max number"), + new FixedLocalizableString("Test feature max number"), + new FreeTextStringValueType()); settingEnableFeature.CreateChild( SettingManagementFeatures.AllowTenantsToChangeEmailSettings, @@ -26,6 +33,14 @@ public class SettingManagementFeatureDefinitionProvider : FeatureDefinitionProvi L("Feature:AllowTenantsToChangeEmailSettingsDescription"), new ToggleStringValueType(), isAvailableToHost: false); + + settingEnableFeature.CreateChild( + "MinNumber", + "", + L("Min number"), + new FixedLocalizableString("Test feature min number"), + new FreeTextStringValueType(), + isAvailableToHost: false); } private static LocalizableString L(string name) From b43f36ad6f4319ecb8e23738044cc683fc951776 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 6 May 2022 21:02:16 +0800 Subject: [PATCH 240/272] Update SettingManagementFeatureDefinitionProvider --- .../SettingManagementFeatureDefinitionProvider.cs | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs index 9f27dd2c60..23f0c071fd 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs @@ -18,13 +18,6 @@ public class SettingManagementFeatureDefinitionProvider : FeatureDefinitionProvi L("Feature:SettingManagementEnable"), L("Feature:SettingManagementEnableDescription"), new ToggleStringValueType()); - - group.AddFeature( - "MaxNumber", - "", - L("Max number"), - new FixedLocalizableString("Test feature max number"), - new FreeTextStringValueType()); settingEnableFeature.CreateChild( SettingManagementFeatures.AllowTenantsToChangeEmailSettings, @@ -33,14 +26,6 @@ public class SettingManagementFeatureDefinitionProvider : FeatureDefinitionProvi L("Feature:AllowTenantsToChangeEmailSettingsDescription"), new ToggleStringValueType(), isAvailableToHost: false); - - settingEnableFeature.CreateChild( - "MinNumber", - "", - L("Min number"), - new FixedLocalizableString("Test feature min number"), - new FreeTextStringValueType(), - isAvailableToHost: false); } private static LocalizableString L(string name) From 02a7aa1f3dc75a5b44fe3017f1ce1f2ecb94c04a Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 9 May 2022 08:13:20 +0300 Subject: [PATCH 241/272] Update docs-nav.json --- docs/en/docs-nav.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 7d919cf063..7a2f606296 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -822,7 +822,7 @@ "path": "UI/Blazor/Basic-Theme.md" }, { - "text": "The Basic Theme", + "text": "LeptonX Lite", "path": "Themes/LeptonXLite/blazor.md" }, { From 3c62a7f1ce1a7a5d2cc8da174e083e42d4526a03 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 9 May 2022 14:09:31 +0800 Subject: [PATCH 242/272] Fix migrate-database.ps1 file --- templates/app-nolayers/aspnet-core/migrate-database.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/app-nolayers/aspnet-core/migrate-database.ps1 b/templates/app-nolayers/aspnet-core/migrate-database.ps1 index 3af47fcb21..5bdfdc04b2 100644 --- a/templates/app-nolayers/aspnet-core/migrate-database.ps1 +++ b/templates/app-nolayers/aspnet-core/migrate-database.ps1 @@ -1 +1 @@ -dotnet run --migrate-database \ No newline at end of file +dotnet run --project MyCompanyName.MyProjectName --migrate-database \ No newline at end of file From 32fcacb77b1db994ca3e73d6464096a745b48dc6 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 9 May 2022 14:11:21 +0300 Subject: [PATCH 243/272] Initial commit for v5.3 blog post --- .../2022-05-09 v5_3_Preview/POST.md | 96 ++++++++++++++++++ .../app-nolayers-get-started.png | Bin 0 -> 124735 bytes .../community-talks-2022.4.png | Bin 0 -> 380254 bytes .../2022-05-09 v5_3_Preview/cover-53.png | Bin 0 -> 55531 bytes 4 files changed, 96 insertions(+) create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/app-nolayers-get-started.png create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/community-talks-2022.4.png create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/cover-53.png diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md new file mode 100644 index 0000000000..60e5850e96 --- /dev/null +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -0,0 +1,96 @@ +# ABP.IO Platform 5.3 RC.1 Has Been Released + +Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **5.3 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version. + +> **The planned release date for the [5.3.0 Stable](https://github.com/abpframework/abp/milestone/69) version is May 31, 2022**. + +Please try this version and provide feedback for a more stable ABP version 5.3! Thank you all. + +## Get Started with the 5.3 RC + +Follow the steps below to try the version 5.3.0 RC today: + +1) **Upgrade** the ABP CLI to version `5.3.0-rc.1` using a command line terminal: + +````bash +dotnet tool update Volo.Abp.Cli -g --version 5.3.0-rc.1 +```` + +​ **or install** it if you haven't before: + +````bash +dotnet tool install Volo.Abp.Cli -g --version 5.3.0-rc.1 +```` + +2) Create a **new application** with the `--preview` option: + +````bash +abp new BookStore --preview +```` + +See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all the available options. + +> You can also use the *Direct Download* tab on the [Get Started](https://abp.io/get-started) page by selecting the **Preview checkbox**. + +You can use any IDE that supports .NET 6.x, like **[Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)**. + +--- + + +## Migration Notes & Breaking Changes + +--- + +## What's New with ABP Framework 5.2? + +In this section, I will introduce some major features released with this version. Here, a brief list of titles explained in the next sections: + +* Single-layer option added to the [*Get Started*](https://abp.io/get-started) page +* PWA Support for Blazor WASM & Angular UIs +* Introduce the `Volo.Abp.Gdpr.Abstractions` package +* Batch Publish Events from Outbox to the Event Bus +* Improvements on **eShopOnAbp** project +* LeptonX Lite Documentations & Status of the Project +* Progress of the OpenIddict module +* New Deployment Documentations +* Other news... + +### Single-layer Option on Get Started Page + +We've created a new startup template named `app-nolayers` and [announced](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) it in the previous version. In this version, we've also add this startup template option to the *Get Started* page, so anyone can also create a single layer application template via *Get Started* page. + +![Get Started Page / app-nolayers](./app-nolayers-get-started.png) + +### PWA Support for Blazor WASM & Angular UIs + +--- + +## Community News + +### New ABP Community Posts + +* [Anto Subash](https://twitter.com/antosubash) created a series named ["Microservice with ABP"](https://blog.antosubash.com/posts/abp-microservice-series) and shared couple of video posts about the ABP Microservice solution. +* [Francisco Kadzi](https://github.com/CiscoNinja) has created his first ABP Community article that shows how to ["Customize ABP Angular Application UI with AdminLTE"](https://community.abp.io/posts/customize-abp-angular-application-ui-with-adminlte.-7qu1m67s). +* [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) has created an article to show how to ["Dealing with Multiple Implementations of a Service in ASP.NET Core & ABP Dependency Injection"](https://community.abp.io/posts/dealing-with-multiple-implementations-of-a-service-in-asp.net-core-abp-dependency-injection-ysfp4ho2) with examples. +* Manoj Kumar submitted a new article about how to use "ABP authentication in a Flutter application". It was a frequently asked topic, which you can read [here](https://community.abp.io/posts/flutter-web-authentication-from-abp-mp6l2ehx). +* [Engincan Veske](https://twitter.com/EngincanVeske) created a new Community Article to show "Concurrency Check/Control in ABP". You can read from [here](https://community.abp.io/posts/handle-concurrency-with-ef-core-in-an-abp-framework-project-with-asp.net-core-mvc-jlkc3w8f). + +### ABP Community Talks 2022.4 - "How can you contribute to the open source ABP Framework?" (May 10, 2022 - 17:00 UTC) + +![](./community-talks-2022.4.png) + +We've [asked you to pick the topic of the next Community Talks](https://twitter.com/abpframework/status/1514567683072745474?s=20&t=rJfHrB3DYDNsk2EXS8zBBQ) and you've chosen the "How to contribute to open source ABP Framework?" for the next talk topic. So, in this Community Talk, we will be talking about "How to contribute to ABP Framework" with one of the top contributors [Ismail Yılmaz](https://github.com/iyilm4z). The event will be on **May 10, 2022, at 17:00 (UTC)** on YouTube. + +> You can register for the event from [here](https://kommunity.com/volosoft/events/abp-community-talks-20224-how-to-contribute-to-the-open-source-abp-framework-d9b50664), if you haven't registered yet. + +You can also [subscribe to the Volosoft channel](https://www.youtube.com/channel/UCO3XKlpvq8CA5MQNVS6b3dQ) to inform about further ABP events and videos. + +### Discord Server + +We've created an official ABP Discord server so the ABP Community can interact with each other. + +Thanks to the ABP Community, **700+** people joined our Discord Server so far and it grows every day. + +> You can read the [ABP Discord Server announcement post](https://blog.abp.io/abp/Official-ABP-Discord-Server-is-Here) to learn more about ABP Discord Server. + +You can join our Discord Server from [here](https://discord.gg/abp), if you haven't yet. \ No newline at end of file diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/app-nolayers-get-started.png b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/app-nolayers-get-started.png new file mode 100644 index 0000000000000000000000000000000000000000..e030dc50b994489a99b0ecdab98607020fe77686 GIT binary patch literal 124735 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Ν@uis}s|I9UOzl@t)7aq@0wOe1; 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 Pe@C@-52YS7z5agyX^aIs literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/community-talks-2022.4.png b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/community-talks-2022.4.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5f374ff49e68326728d5158e7b5e8a912f7873 GIT binary patch literal 380254 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

    X^C^|W_SKpy24+hIZa_Ho!n|ooZzW@! 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 c%{C-Xq&aOnMW-P_n?1 Date: Mon, 9 May 2022 16:54:56 +0300 Subject: [PATCH 244/272] Add the "What's New with ABP Framework 5.3?" section to blog-post --- .../2022-05-09 v5_3_Preview/POST.md | 96 +++++++++++++++--- .../deployment-documentation.png | Bin 0 -> 4595 bytes .../leptonx-lite-documentations.png | Bin 0 -> 13496 bytes 3 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/deployment-documentation.png create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/leptonx-lite-documentations.png diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index 60e5850e96..53376e24af 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -1,4 +1,4 @@ -# ABP.IO Platform 5.3 RC.1 Has Been Released +# ABP.IO Platform 5.3 RC Has Been Released Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **5.3 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version. @@ -16,7 +16,7 @@ Follow the steps below to try the version 5.3.0 RC today: dotnet tool update Volo.Abp.Cli -g --version 5.3.0-rc.1 ```` -​ **or install** it if you haven't before: +**or install** it if you haven't before: ````bash dotnet tool install Volo.Abp.Cli -g --version 5.3.0-rc.1 @@ -34,14 +34,13 @@ See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all t You can use any IDE that supports .NET 6.x, like **[Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)**. ---- - - ## Migration Notes & Breaking Changes ---- +There is only one breaking changes in this version upgrade and it's explained below. + +* Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. So, you need to upgrade your projects that uses **AutoMapper** library (probably your `*.Application` project) to **netstandard2.1** or **net6** if it's **netstandard2.0**. See [#12189](https://github.com/abpframework/abp/pull/12189). -## What's New with ABP Framework 5.2? +## What's New with ABP Framework 5.3? In this section, I will introduce some major features released with this version. Here, a brief list of titles explained in the next sections: @@ -50,20 +49,91 @@ In this section, I will introduce some major features released with this version * Introduce the `Volo.Abp.Gdpr.Abstractions` package * Batch Publish Events from Outbox to the Event Bus * Improvements on **eShopOnAbp** project -* LeptonX Lite Documentations & Status of the Project -* Progress of the OpenIddict module -* New Deployment Documentations +* LeptonX Lite Documentations & Project Status & Roadmap +* OpenIddict Module +* Deployment Documentations * Other news... -### Single-layer Option on Get Started Page +### Single-layer Option on *Get Started* Page -We've created a new startup template named `app-nolayers` and [announced](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) it in the previous version. In this version, we've also add this startup template option to the *Get Started* page, so anyone can also create a single layer application template via *Get Started* page. +We've created a new startup template named `app-nolayers` and [announced](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) it in the previous version. In this version, we've added this startup template option to the *Get Started* page. + +*You can examine the screenshot below to see how to create an `app-nolayers` template from the ["Get Started"](https://abp.io/get-started) page.* ![Get Started Page / app-nolayers](./app-nolayers-get-started.png) ### PWA Support for Blazor WASM & Angular UIs ---- +With v5.3 ABP supports PWA for Blazor WASM & Angular UIs. To create a startup template with the PWA support, you can use the `--pwa` parameter. +Example: + +```bash +abp new MyProgressiveWebApp -u blazor --pwa +``` + +### Introduce the `Volo.Abp.Gdpr.Abstractions` package + +A new `Volo.Abp.Gdpr.Abstractions` package is added to the framework. + +Anyone can use this package to use the pre-defined ETOs and implement GDPR-related operations for their own applications. + +In that point, we are introducing the **GDPR Module** for the ABP Commercial customers and this module does the GDPR-related operations on behalf of you, such as *"Download/Delete Personal Data"*. I'll describe the **GDPR Module** later in this blog post. + +### Batch Publish Events from Outbox to the Event Bus + +We've introduced the "Transactional Outbox & Inbox Patterns" in [**v5.0**](https://blog.abp.io/abp/ABP-IO-Platform-5.0-RC-1-Has-Been-Released), it was one of the most awaited features by distributed software developers. + +We've made some optimizations for the **Batch Event Publishing** in this version, you can examine the related development from [here](https://github.com/abpframework/abp/pull/11243). After the optimization, the results are impressive. + +| | Before | After | +|---|---|---| +| **RabbitMQ** | 50080ms | 547ms | +| **Kafka** | 15303ms | 475ms | +| **Azure (Remote Service)** | 116157ms | 1534ms | +| **Rebus (RabbitMQ transport)** | 26094ms | 560ms | + +*You can see the optimization results above for "Batch Publishing (1000 Events)"* + + +### Improvements on eShopOnAbp project + +### LeptonX Lite Documentations & Project Status & Roadmap + +It is finally here, we've released the **1.0.0-beta.1** version for the **LeptonX Lite**. + +![](./leptonx-lite-documentations.png) + +Lepton X Lite documents have been written for the three UI types within this version. You can see the related documentation from the screenshot above. You can follow these documentations and try the new **LeptonX Lite Theme**. + +We don't suggest using the **beta.1** version on production but we highly demand you to test the **LeptonX Lite** and provide feedback to us. It's really important for us to be able to release a more stable version. Thanks in advance. + +For the following versions (beta.2 and RC versions), we will focus on; + +* Fixing the reported bugs from the community +* Providing documentations as much as possible +* Adding new custom pages to demo + + +### OpenIddict Module + +### Deployment Documentations + +Deploying an ABP based application is not so different than deploying any .NET or ASP.NET Core application. You can deploy it to a cloud provider (e.g. Azure, AWS, Google Could) or on-premise server, IIS or any other web server. However, we wanted to prepare a "Deployment Guide" to mention the important points and considerations. + +![](./deployment-documentation.png) + +We've created two new deployment documentations, you can find them under the ["Deployment"](https://docs.abp.io/en/abp/5.3/Deployment/Index) section of our documentation website. + +In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Deployment/Clustered-Environment) documentation, we've documented the topics that you should consider when you are developing your application to a clustered environment and explains how you can deal with these topics in your ABP based application. + +### Other News + +* Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. See [#12189](https://github.com/abpframework/abp/pull/12189). +* Global Features was only accessible from C# code. From this version Global Features can be provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). +* Get the user's detailed informations (name, surname and phone number) from external login. See [#12085](https://github.com/abpframework/abp/pull/12085). +* Date Pipes for Angular. See [#11909](https://github.com/abpframework/abp/issues/11909). + +If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.3.0-rc.1), that contains a list of all issues and pull requests closed with this version. ## Community News diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/deployment-documentation.png b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/deployment-documentation.png new file mode 100644 index 0000000000000000000000000000000000000000..3dde546b153d7ada02f94b81d090c57d9c2a6509 GIT binary patch literal 4595 zcmb7IcQhQ{wjQE|j2b37iOvuuYK-1{lqjS3FzV|vg_L`0HBK3 zP*yMswA#xdgVXlW4|HbB3&b9(E0ifJvfU?j)mysRZ$ugB8uEUNhhe<2_e)jUgy_JhT_uCVJHxa-h=<_3=Ev z9h>(JaK2ltxaEVZU;DZ?-}4m|@BsiFjv;FR;5)uDAt0YNo)jR@Pe}`SZNkO}094Bx z0RZNaWdJ}uz5yPaYc~nbL;{+qz^MZqj*)` z{u2E<5KxH!LuVFqt7>_L$k1XQkg#^o_r$iF3PvUq?Nhjb-o#Q9M|FG2HbdATugjDR zyyodDDl2I)d|BD;)@XeHptXd+%JDkw?s&~xw+swjk$0SKL;Cplv|=R@Zb=5X@&iul zBa=M)%nu2g`B$Mk(&19fx~cae969F?CwOt&>e14Xxj$X@OWRyApUOoD>**X5rmJ#< z43kluXOv-3)#JgyOg2;YjOD)wshXL}1l+f_Z>Y{^D`Q2&D<`Z=G{s5l!IYi7+D0!_ zbhXQ}VEvm;^e(^GPR`oY1i!Z{aEgf^!pqs;r<_TV@u zzQMK+Gh%#?9ds;eYZpl6QqC>yik7nMOfExDXpb{F->@uyyO!mgy=Ieh;nb$BfaRN@LNtYkf1C=rj%4Hmg)@=V zKq?%9xQ|wcc2?7r|4GbX=nFRoLT}wsWzIkwa^_I5k!gF>n*e6A6<@-T<&IM-;nOjeUDEX{Y=G3grtaEgS= zRIt~!Te&b?L}wKq5iVqzMVd-SnSoIk-lK6Mvkt z+(w15dl}VOfj+i4-HtP@;Vik~S^-m%3@jH5hWtwv)bV%cO^si@8v0o~?rp78aP#DY zR;b!NM>1o)R}hHfG>?`}!Ek|+$}uZ%sM`CuWk=hmV1$bol#}g`Q-Z5u39Q2*3DXb& zTH{Sn994<+Ce;!kC^;O`$l&iX=^8hx#FcXcA4nxju|*WNbJp%Ut~0*}b;9Mv}Trft-;iWt$h-;JGLvbl*m-z1?CxPl(Zu~j9RJY`|B@*gk~k%Hl%e2Loj`j=Y0?$8Sz)Rn8`j#K zf@-P*Q#Mr=DEGAFe6qS+r_(?V!ItWiGOCYb;by4)lq?aS8p=Xie#Tlq?Up2$^DrNU z!`>(8Y+R9C=199$3*@r}nMm$VEN~iUu(<`STO^{;CF6koW~zj4giAIV;w{LJ=ZX;h!K)7H-n*>N z>`9q~)nwUiz#~Ro(>PVb{p`ejo3T%+C@1 zYUALBs1Fa2AYL1@Kvn7VVfiXxl6hChQo&<>n-NKS2{rtHBAI*5YKp7MGOrit&i7UV zA7giX1$;-pl#F℞Y+ZSaQ^86_YKLY!_S zN^m5kJ-~|y*4y$PCiZ5w+NC{wXZZFHJm@AW|#2J)9eU-d`-*0!O?*m!5rIJv(th(oKVdRtU{qet> zleZ>NrIae&^aOEtC%t@-JHPy|mnS6RuwuE4G(#ZaXz7pNyRQ1v(Z|m%bqsN>j6v~@ z7_!fFli6P#?0Ji|6+FH|)xryZ{XkZogkR)bWi=g3hFFOSgl8>3gYm%3j>U7Hf|o0H zv7~xEI3}_K9I%xQZcY7hz>FU3lik)DO+K__eImZ3$bnWB2my-;&~ zpB96Ci)^`)^|z}Z_Y8e>i$I-O}596yD8m+`D%=6*LYS+u55 znX9)i)$@eG!$hEco@c=Q8agY-Aknh=Zc%Q+IKzkaiCIt!GKYiV3hu@T(c2u){Vk28 zQ&d*lIL;3qw_$BOd)2IH`%@NIuq8MyZT#^&R?t$r)`cE#$N4smOy>#gr&yLT-N{mcQ ze#yz!Ci^qeQ%nwwFRSTw-h%D7)yu1IYfwK`4{0tv_L2mXoTi5(FfYq{T(rm7GwmQ7 zD7vqSan=PnVrg&kg5=S2hrqB`{Sa>@Q>xq>y%GBSt%*iFsJs!#jhqtGq=*4E%ARCzpdiVNAGoSggMmQqW@N=ye{N`^3nJAWA1=XS&7!hCe8s|tiv(y#FoLX`qMFJrKknyI{8 zaTPZz&vayYVgI7!XBT0tJY4`9K^ok|J8cB7CY6CQi;mK(_7i`mKz>pX@RkLL?*7Oy z*}XQg9jNqDidXOBN0rJ~QG^tYd~9xs`smcEN++pF^CoQ4>{djau7RpS?e~5uW0i1F?S1xPyMCgznfgW0CH?j zx`EDa#>}G;ChP5V+|PJDE4jyga$m6Xlxq;-SB#FZTKe`cGw{f{6W19V#~7xhdg&iA z?!Uu5#+s?3m2zhir$lwpk@W~G6b@dQ((@LK@Eo{}EAA^L2|#u41<8~2ttHkxw%YWX z6=0}tiNG(HV&9Oi-Uz%`I7uXFWAbi!fp*u%ZMAaBK&+*UN|HuzkAW6_!&I9`JJ*AF8p#-ekLssD0PZHVnvDHn-V~9` zRG(*5sJz6ypLMIXoD`>!OI)eEg&;KWV^`gyu>G%=I*TwQuY! zYi^hiGJAfYsd&a0Swy;+XG-(rOs$WlyD#WRte(ISqZWXT;eTl2%FRC^hteeBd8%Oy z)UU?~ZmxgDjmv4#=iFL38mt~9uPs;Pf5tO7`pMIN5mIFnuE++lo*=Hn+o!l=qP0fX z@pk1OSf}sHy-9Asihg{HD_{ECAA2gHS%oCuqmVk?OZ%eJc>r-()N5@%?({U`fn zeZH^Do0(8_egIZd+SDUCs0Zf&7??c#ew%Sv0$NC^yeW?bh+R(eF+(fvLzd;G{TpfV@ESs|WOobF-x zXR+Upq{lM}jdJLz|J>2rt~$KCbXdF}OCR;uh2hQKdp@C-9nbECwe%BFXXxw>j3q#kUIf_; zWrAA~WW^3=rC4{o`;~*dRRu+~`*p;N`0@aQ1loSkLP-M~!Q)GL>mzjp+``><WJ z^Dc<`CyTGoN%Cz~41zyQpd;I^`w8%K7~?ew+9Q8VPHs~XzajlfGDqa%rK;6Nbh*~G zC7UE}fNWQ+BzHo>y?f{03O1iP`N1;WLRTs;!{^Xp3-^k=-O-3m3J#9*y#J^Ywf`?I k;-CHh{;O_?DIQ1shDuubi+Ew~gc^W`imviUMVqL916HV*ivR!s literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/leptonx-lite-documentations.png b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/leptonx-lite-documentations.png new file mode 100644 index 0000000000000000000000000000000000000000..4186dc99a12a287011d36c444335c3a070ff65f0 GIT binary patch literal 13496 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�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 HR$>1QY+zJ5 literal 0 HcmV?d00001 From 6329f6a99d53261956ce126a17ac51c864ea7f58 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 9 May 2022 18:49:12 +0300 Subject: [PATCH 245/272] Add the "What's New with ABP Commercial 5.3?" section to blog post --- .../2022-05-09 v5_3_Preview/POST.md | 62 +++++++++++++++++- .../gdpr-personal-data-page.png | Bin 0 -> 55942 bytes .../gdpr-user-menu.png | Bin 0 -> 15780 bytes .../oauth-external-provider.gif | Bin 0 -> 1980507 bytes .../poll-new-question.png | Bin 0 -> 59431 bytes .../poll-question-example.png | Bin 0 -> 19448 bytes .../poll-questions.png | Bin 0 -> 180795 bytes .../2022-05-09 v5_3_Preview/webinar.png | Bin 0 -> 59922 bytes 8 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/gdpr-personal-data-page.png create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/gdpr-user-menu.png create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/oauth-external-provider.gif create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/poll-new-question.png create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/poll-question-example.png create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/poll-questions.png create mode 100644 docs/en/Blog-Posts/2022-05-09 v5_3_Preview/webinar.png diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index 53376e24af..9624b3a45b 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -135,6 +135,66 @@ In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Dep If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.3.0-rc.1), that contains a list of all issues and pull requests closed with this version. +## What's New with ABP Commercial 5.3? + +### GDPR Module + +> **GDPR (General Data Protection Regulation)** is a regulation in EU law on data protection and known as the toughest privacy and security law in the world. GDPR applies to any organisation operating within the EU, as well as any organisations outside of the EU which offer goods or services to customers or businesses in the EU. + +With this version we are introducing the new **GDPR Module**. This was one of the most awaited features, so we've prioritized it and implemented it in this version. + +GDPR Module is pre-installed in the [startup templates](https://docs.abp.io/en/commercial/5.3/startup-templates/index) for MVC. So, no need to manually install it. When you create a new startup template, you can directly use this module. We'll also implement this module for the other UI types as soon as possible and also add extra functionality such as "Cookie Consent" and more. Currently, there are two main functionality of this module and they are "Download Personal Data" and "Delete Personal Data". + +![](./gdpr-user-menu.png) + +There is a "Personal Data" section in the user menu like in the screenshot above and when you click to this section, you'll be redirected to the "Personal Data" page. On that page, you can either request to "Download Personal Data" or "Delete Personal Data". + +![](./gdpr-personal-data-page.png) + +### CMS Kit Pro - Polling Feature + +We've added the new **Polling** feature to the **CMS Kit Pro** module. This feature allows you to use a voting system in your application easily. + + + +### OAuth Resource Owner Password as External Login Provider + +> The Resource Owner Password flow allows for the exchanging of the user name and password of a user for an access token. When using the resource owner password credentials grant, the user provides the credentials (user name and password) directly to the application. + +You can login by providing a username and password from an External Login Provider. + +*Example: Use OAuth external login provider with Keycloak* + +![](./oauth-external-provider.gif) + +### Suite New Features & Enhancements + +In this version, there are couple of enhancements and new features in **Suite** and they are listed briefly below: + +* It's now possible to create a **app-nolayers (Application - single layer)** template via Suite and also code-generation is supported for **app-nolayers** template with this version. +* Suite allows users to see and download their Suite logs. +* Suite allows to generate code via CLI. If you have JSON file that contains a code block, like your entity, you can use the `abp suite generate` command to generate CRUD pages. + +*Example:* + +```bash +abp suite generate -e C:\Users\.suite\entities\Country.json -s C:\Users\my-proj\SuiteProj\SuiteProj.sln +``` + +### Suite Webinar (Take a closer look at the code generation: ABP Suite) + +![](./webinar.png) + +We've organized a webinar for Suite and in this webinar, we've talked about ABP Suite's capabilities, important features and more... + +You can watch the event from [here](https://www.youtube.com/watch?v=RFArBh60RSA&t=3s), if you haven't watched yet. + +### Docker Compose Configurations for Single Layer Startup Template + + +### Microservice Solution Enhancements + + ## Community News ### New ABP Community Posts @@ -142,7 +202,7 @@ If you want to see more details, you can check [the release on GitHub](https://g * [Anto Subash](https://twitter.com/antosubash) created a series named ["Microservice with ABP"](https://blog.antosubash.com/posts/abp-microservice-series) and shared couple of video posts about the ABP Microservice solution. * [Francisco Kadzi](https://github.com/CiscoNinja) has created his first ABP Community article that shows how to ["Customize ABP Angular Application UI with AdminLTE"](https://community.abp.io/posts/customize-abp-angular-application-ui-with-adminlte.-7qu1m67s). * [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) has created an article to show how to ["Dealing with Multiple Implementations of a Service in ASP.NET Core & ABP Dependency Injection"](https://community.abp.io/posts/dealing-with-multiple-implementations-of-a-service-in-asp.net-core-abp-dependency-injection-ysfp4ho2) with examples. -* Manoj Kumar submitted a new article about how to use "ABP authentication in a Flutter application". It was a frequently asked topic, which you can read [here](https://community.abp.io/posts/flutter-web-authentication-from-abp-mp6l2ehx). +* [Manoj Kumar](https://community.abp.io/members/manojkumar.t@shloklabs.com) submitted a new article about how to use "ABP authentication in a Flutter application". It was a frequently asked topic, which you can read [here](https://community.abp.io/posts/flutter-web-authentication-from-abp-mp6l2ehx). * [Engincan Veske](https://twitter.com/EngincanVeske) created a new Community Article to show "Concurrency Check/Control in ABP". You can read from [here](https://community.abp.io/posts/handle-concurrency-with-ef-core-in-an-abp-framework-project-with-asp.net-core-mvc-jlkc3w8f). ### ABP Community Talks 2022.4 - "How can you contribute to the open source ABP Framework?" (May 10, 2022 - 17:00 UTC) diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/gdpr-personal-data-page.png b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/gdpr-personal-data-page.png new file mode 100644 index 0000000000000000000000000000000000000000..2a85dade63b2cf89570dea05531b42376d2dffe6 GIT binary patch literal 55942 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

    TOry5|Zp;o4U3A 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

    9(>30pDgc|?>0Dtcp?^yXxVxX<~ILH|&+ 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%0D^QWJih6${ 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 literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/oauth-external-provider.gif b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/oauth-external-provider.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f301559eeb8b9c01f9c4a591a14cee06fa9f065 GIT binary patch literal 1980507 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

    -0m>wBpn> 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

    W09K^CMkLrs_P~wTg*|R=2V1?GMcPpZ#2`k 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�SS1(daJ$HnN12Oju0un;!on@dQBo#;08`2 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

    id$( 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

    FeL_g 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⪚&*cw0j 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

    (ox~6ivtE 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

    ro&ZWpTpS4&kDaP(6#^a()~MROzV;2!Sc?wQn{ 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�mal^AfG{j86WoBR~;UE#?gfJ^qw0Z4j*xkw5;R<$e8q107%d4vG}=wOXsR+5Z!g> z1TPZ$!wX+sbg`=q-S;F_o4AMcoT>L(;R!3fm8BqMe5#P*Q{;Mr`5`M+v+|eMh7VD) zQE2d!031s=D6d=hX^z-R6Ptiu9Dp?-DyA3XI8f-oQkVx|WA^(>tMuXfwWd@q91(XcQe zrrbwGK+Tr67(fW!Q+2Y8tb9H7!1&l?Q$RG@;t`cRNd+R7640uqH`75ECWP)?2{>}i zR3o(m(ob9oEIqS&Ish>?G6crffQ??>WZ#6B^cyq_0nEj&5rVE?Z0xJS9z*zlQsZ6m z*=&S|)Gl{%emqU$5|N{Qj<)|pUYoqAxxv5(aDX~a5+O6PM;k)V@XuSC#M#(&`Tu9B+B*hREyLFmm4RVp$fOS8F~O1j5aw`eAR z8>{?{6*2MU3^k3kP%LNLet1+??^mL42^g#D4b#c2jL26q5&`!M4%H~gichC_zP9ZY z$Hn%EXRJgRVH-zN4~@2;SSA+h%A)E9gCIa=h58ia9~U@Ev?^w}I%bM&K{4Q4zW?@< z-XVyX0`kPODSzqB3E;MVb*Dr|_dd}DY^GO29V!E5?3}WtWrn=PaCcVi4#8j{(_Wt> zdT_L^yP1d~2er{`1fZXvdZwI=#zsGgNc&_<+Hb9OTpxWlC7R@`i;K(ZzC>}o;$@zIGJX{7> z8lcd#{10=TlBZ;PN?^uo@oNN5OmU@@QbIr{97uYFKLmHi)+eB849rz>VfXj`qz5`W zC3rqh#Bb>+g$x?^G@eC(nL7ca^$*5MB*7$rhf9i)9ds-}2O=tiZZ>3R-uEYkqf&{(%LWav4HafjrPV9YjU5bD8|E3S z&C3p2ckn+j^qku=xl-^vD0wNI5$?JepqQ7rI5lF6LAF_1w*m+T zI+5571h8i7Jdp^DkRM=#(nvB!mp(d3(9rdG612BTipQ)qh9-ayn8VP(17_1Bc>JeX z(8L^3vJp%eVt-JpEnM$=f&i;?DdHJ`t#?A%PsQ`<0UQFp(-$DT0$oTgU}Gyfpje0f zR3cV5=7o?ycCGub3ta#usPiIb)+lM-NQh7XJS`9l>&G8vMl$+Xv2Ei+cVk-xtRe=T zu`iI(arkPA-p~7qaNwXL7~%66H-b(-2GLiULh^1jH}~ArdXHbb01L zjHj3s6CeLioJo{=pzs}(9a-qYVw&{dG+vbBbf?q5g#hrNR*C`vPJr{aqjiNaVn0B( zFO{HUGWldTFno)MrIV;=fMA+g*F_YT8en_^$jI=?a2)cpkb6CibS0j1t5hI7g1;;# z_rp`rwu*nvcp+vIt49!xqFd6&nFNuR_`wQDTlzwGuwp{u9eFMuzI@P?BKQwyaJh0C zmJ*1O86;}#$;S+8hNc&ay)PDf_TWzCQd;F31V%^4{(=&yEyadq;n!DK52YqE;u!bA z<6r^!b7*O!K>UeQqE-XrS!5Kc6U@fgbp~x(Ipff#2RKwDRH4kAwbVN5H1EXp01gqp ziYUp6*_l`@B3AwuWs6|nO;A4+$OL$qyqREK685Rdf|pr;a?m2u z@I6Sp01_mi(S#3eCOGp<4~&x^C?NRWX;r6^!_{a#f+T2mLa>tuw*SrXHSp$8ay1Fe zqWqF;p+Y!47fr1Ia-lSX)mm2Ap)S*XE)?AKcZk?w1&m#S_=@=v6>+mv+5_c9gIGYn z?fh1GfJTN64OWaoiIUHdS{7~+#@Lgc8DwryVA4`zw$I-dgKSSFP+HPrC;u2~lmpwv zAMp$%a)uMVCuo9shi`opqb%%IG(JGfGFlamq6x-egh<-*2vsm9;LL#t0akR-x)4Nx z)`6N$h$l+LtbYr`{=VL-h-QHm!!B&z(u%N8h6-ehEGb(=or89j^hVw(r3|BepG(C0Z9)=)Qi_bOl!@5QIDp+-(JMG5=X|@C(~Y5MF-#m9lfah zsuTL+Mt*?C_Nz153B`hhGu{OC#TbY2lyj+-W20dToR}irQhWT5fMJnOVmB1qL8gKN z9zh~+vrKx1p5s-LgH)0SK$R2u@~obp5h;s zTjK?#Q$04OQM0AHC1Nyv_}o{*^@wbC6Yk1F-r;6~r*Az2wVoq{pSGfa(M7r_Qjwfj zVlKi&UHL)Vrul3n`98%zE=)7(!#1Opp20!KX)5fU^-t^?%%7L&(uKd7_4TG}>y~Ki zHErt;ZX3*L8*XhIU2Yq{ZJVTPpO$F1Jpk}wEb;x8)4vxG3?P+j`g6D`%e;9?!{kc` zY6&`Ojd~4&F5;UNwh0y}2`Apyb@sr@7YLLL2*;yFwR1{4V%>XhPX zAvXJlUEob3WKIm|$KwroJ*2OCC4}KCP{M2nF;zRB4K%Y6B=ti;dEEMEnJwb^%ney}Kad z7f|ad3Cd)TEUtpVQtif038rALaZV`-;oxISl-(%o&rPb_Z5_Uh3}FEP?^Hr~wn$v0 zC5WKm!FF6KaS%+6!aG!5Hn7+e0yB0BTJGpXuZ(MqWVPb^VGV!)B4XG2phpF*AKE7F zRwgia699%ukkll^d=k68QC=Thw1ST(+N(2^++1sf#7}1M`SQBKCjOSlUv4D*;ni8& zLPO)}PNLJghd<7mITg%kf8yvcZ>P_pZQ~XZo$@!_bs=>n<=q|a^vYMq1!Kh80D*b4 zDWR@+^<%>u{$_pp>J)GAn6r7e#t~BBXXrRj_K6pL4)$zj|F%H<1u;1HbCwMA)>8Af z=JWQU^NxA*HV4}50_pxa&aSlY;`MuJT)eIKhuQ0M{N7K|9d)EDfCFs+1OQWoeiM?t zkwXDOaG;M$Y-Dm$WN70U?wh0`^?rVaF}PbNULO%ZLY+f&jENa!iLG6_Z-U=HBg70E zE7qvK*CVQRJ1#Zt}f=S4&4F|Ckcvpd$Vx9RJ9q^B*ykv62w2;{N8`ez*@w! z0x%=MJ@)wHmLuGEBOkHKy;ZXR;U(R)!G6yY@wxTmt^?R7^GX)qMyUIWm+2WBx*v7U z959D>>#b7|8NfWdcHenCv6tbp8{dmoO5F3)%JZlU)#OV4h3ct?`+9bQe+qrG7cvKE ztajm{wSVMoh<9vAu5CzTHsFk#HZ^f4Nc?Y;=~_<1x_eC|3`V211p)WOZ{MwDG_27t zucaTTJ~}1(W9m9x@CG;HXN2=BN%L*e@j{3+Af3Tv7X7W{0I<1}cMLPvrCPVM0MjjI zO1gz$l8TkiF7$@&EX)JwA0nM0aYeMR0z(>fJ z1u8SLn7snV{X*&eVvGIKuzl1oAwguj#u9#4M&HPy!J5MpJy})zO9`6#~7k3kd7#-cc7h7{Dp>iCPD_n{DcWWmY%*li226}O7 zMJU3W8sI-NNlm-P3Hg{%LV&QCYRV@_D>+EF+iD*tIBti%EJ_+j8Y_vQV5jk%37A8h zj>Fhh*wUaY5ycTPi)g(4(Sr02?VQ7k^v+tC1zJ;v2>E%#;&=;3<-94A(NZ_L7c{kh zj4PuTZ(s5myrFA%qE@%^cO1ll068k0ntZ=7`*~sU@4}Ml(%#gkNW`Wo@E|psU|8Vi zC^K=PBC@IDQijSW?51pZ&4#fPKqX{~=hW|sGRGMO<%5CGna>uIUzI|K2!OypxZ^J< zN%mboY*Q>xW2xAQUi@Cwe;n-*AaCB6xc7NATQU5@0XwJzEa|xc{IoFl0CXSf1DPG6 z<_Kmf8PmeT0nHkq7A?>xw#$xxx1CIP-7oHX|6QEQgKg-G09fzVlMt&IJVXud6}uqu zX(tNb*A&*ULmquwL944e02`{4WGQhpN^(4!Uk7N*qTvzDwA9q8sc;||n?B^hgzCemWS8ecS{A^8ATYHsj3p8h zPmBZOkk9r806{QmB=Yb213ZMuHO#X>drKBfD0z2YfQ(QrR7he}c(1poQ>u|C9Zjph zuUDyGW6}3s|G?mrd3zWZox!2eSG%!%g&cz;lSa4Ij%Yf=W3v|DqqV*q!xM{gZ0Y)P z5+hG^;3bAZI%L#HDhTCL-dU#g@}W*6u2KOb zE&bxPrHspu1}R?T>Kn%hFcCSIQL3)L4hTEw@u??S(RjKfodA-ky~}5R_IaiII7}Ax zvx!b}GR~Z(2Zw01hcaar0J%J*qx1+54N#52IsCbk^YUNVgO~6RM*t4Qc~lDr6Uz(8 zU{TrD%HS|Xoz_G%16ZO``N`KI6#Es2Og6hRRuBU1IM-*r`?w@Msqkw6D8nMktC>1J zNBbkSN3V7TZQd{mH+}f*Z$+k;iLXnbDe})$*fVXvs&IaYdZx-kdQ83Em!grX_W?S*P{lA4Cu#gTr2r zkRw(QoT|e^!hzyFdR_Tp95tNdN__OX(<(>WR#9qlMo2LQCH4kAT`dJ6eSJf_27SYq z(Lx3(^p&Sm1lkA|Lki8)S%aruV;50^Om89KE4F1(DD@>_B!Yxi6B7?AQ`_1|gt{~3-W9k3qD*%7djq9h%-mFdtCxbq=a zI%uz~tRv{)^MG{lQPWOG@X2?a7a_j~IKPLSO(?wxy;yMg9(wgN_C?s=owDy?w=QnL}f`cCZjmzt?=}lWhomcqn|`s5!i{!(aulCi1b$+Lb@RPD+?w*Qh~()Nq&0WtkF`AdRbFDunp zbN_SAsU(jm8~QC#CGq*GWdB|p#tSYbzLqzM!4O+!EHPzS%IVZtd0SSBZ_0|o({ECu zY#*_Usi+!Ezs>A@2*3NLqUkrC_5otYr68uNlQErMCU3`ccHPIP=#}W~%1&Xrq-5Cm z1t+}Cj&_Pm&3u|PHBu(;|{%pV02oEjS_kTT=FWiuBf9`D5CvNaHW3Jjk!Np{*W&XpqV3kfu zr3TAuec_gik6$;rP33SgitU$kpTn_SEwLnwx+&*tm!kGfsql2IoEtvjZB>dhnCic0 zynJ(7?`kj9YCP^YU-tpa%~AWI7;QrSl~BRWg00HvNu@#k>*_-nI|3dffL*deV{kli?p5pA1@l zVtEAgNm%^JSZLcJ-0{#*GYfDQ$|A9I^++ZTkd>Ew=c0p7Q2XJJfqkp*L6*VIwjdX4S$X-yku>z7sT@NhaB0}E-#eqB&4$QhY2+pLtE@gr`!m1vQ3u6W@8{a=g`1YfJYrtuZb>?b zFD#Aw_rJ=&XmgNGS)ikii+ZH5oor41XCmVGRUt*YqoPPlMdM_2|1To-tUP+eU zA8^j!uF)U@$W`7XkpghA{)Mr&ZE1LTqHPv5Z3Bo^-w?rg;o!&0F>JK%9w7&<>uAv! zQVXw>K&Itwk%7SRu3T5H!kcN8=054v-wCGa!PJ_1-F*An#DxPkOiKQReAgd+Y%kpDtn^BuYY6VGlzf0`BedcPn8i_C$}JIw9H$l07nMW)rX-) z!gE+-a=N%8yWXP;&rKUhb0x?}+b}lG0D3r=jtr$w7u-||nAph~)ySnxtuF~A~&jpK4Ubam_jw`Z3I7ANHtX&fF?cYJ0ZFz@cuAE$b&m8`D?%rPY*?XR9I=tAVeppBdleRIk&n2{nuGdb};*yLG~qrrv$3s^v>zd&4o zUF5|DutV#sMDSC&)mybFVz|AFqPxq(AczHYC;?vlL0en^T--lK^uKvKg>XnX=+nhs z+{IwDMotvRaU{ob>?==PwkHw-T#$!oBRt;Y2co-$d7MW}h&olAA|)6FX@E8l#3NMx zcn4*0H#VHcS5N>C3`BaM$Av_}LGwL_+`nSny#GVSLDal}^SoQQghE(CC-R1ZJjkBo zzlr3*Q%Hvd&;a2Bzy(mqg`CG>97%JO$(f|dnl!4QlRYRRzEq1MB2YTt+sQ7BBB@(N zDFQb!v?G8N$mqiWNl3p72thf7BO(C5N7#m6^g%y7KR^`3C%U_VBSr>1#HM`85L`qe z{J$tF1#oaesdS^Ww8^-X%ekb>gDQo3;6ag_2j82bon(Zhi?lZ)$~Y>84gAM|9LPJ$ zG*lRe6HGyIaLhMq1q%=ca9F`7y1pZf!~Y978ib-9v^#QO#2^TVAM7;7j76eBc)7C z#ay*k*ti;cBa2cf)1q;oy?0|%(Q!+S74ep3L`L^SD~w{F-&w$sMe z?15E?LF$Ym>l{Md)X)9o&;B$eaND|NScZOlq99m?WFR`PGt8uewq)=HX?Qk7OU@^{ zg{qs!XsCyNfJHeX0$5nevs*Q){Kd9g02PP_Xix`p;D;#ch6QlHDB6Yu@H`Zq0ZB7F z#FGbGzy@<*yeHy@1-OT0s0DPm0CZ5#@B77o%QwX{hk76fS7U`0fc^(ts0GwRG!ivY z6jjk`+))4Y(k}(mFh!&xxCO0?He}F3GBs176GMIE$8)0xb-Tx+yf$--HaW$kE69R( zD@N2LJtBw&a{!JEr~%&W0T|3XfIGN^BfOBKHN%d@EEg71LIA)mMepp^{F2jMZAT)mz0?=W0QT%++4?)n5hH z&4R&64Ax>b)?+m&VmJkIK-NV%1;v}YqHNY_rPgYlqJ1y|?vtbNlLBubC1qt+Yb~UB zdpo2Q*KuBV!=V9v}u)=mC461SyaLZG9qq00tuvT0kua zDM|rlu!JK>+E`dxC_304sM&8YTBMZ%QP2hi=z$ARhDAu)Sr7;F+6VfBShQW)wPoA3 zHK>-w07_`rDbm@}EZK-X|i4wv!@bXu&wD0AcW1{=MEuz~3iwzajVrDe~B<9WV2pUZic^^|jy&#$Zvp z-3stnkaZ%FWmfrhqM3~%_iF|ICE5~(gt?X3M-bmQs@kfpSyqrD%CuYq_F(an;2zlF z4EEt42I5P)-5z+^m?h!MjoA){B7b0D{tfX4&pH;<1#*^A>Q35GKPP3A`x~Xen^4_b|MZAI2`Wc0G=XYKm`c?*-|wpvQS7zJ9e2F)0TK|bJ^eWF8-qC{3?t*u~5*5zG>WJ(Ud7lvawM&c;C*>GLs z!42gvrr*TfjLnz`UgCQ zqPT@+kac4yqGfGG{3sIs0iS8tYLiYf3unlnUxnF6y>+>reV<+$91+ z=;V>s-AQ%L~Qvrg+!n(Rob zY?E5+%YN(4=Ik?0glX=9{_tyJrS58CD1_1G>o?j5!-d?=jRs$EX<}eqz>SB`T?J%V z>|t)~E)HusD{IXL=Rgi_p*<>$2JX&A?&QX!xaQgK%;#ThZw(m;9Tig8U_ueG_ zMkN0RsQDIfp}y||H*iL}Uu3S!o(AwtYVbmO@O~Qb38(J^x9|%OB=@6X{TA*hy6pJ& z@D7h72A6NL7V#-6aXCtH6hHA07x5Nn@d|hG%pP$XccXB&@j;^S3CHjr_i;P&hZLsG zoUUvEckwwQawC8KBK21C7@uz^zj2L*aVgqq3U~4xpK%a}@EvdRANTSvS71s2?Any_ zDZg?PKXJ)!aRPUuGMDisXKOg$?<9wD5?}K-hjKJeb31==J~wVDFeEPTaxf=!3zvs< zkOxX2f+^+P$zX-&+|54^*guqTlaOHUUgu{bvYk)UBC2Tuk~R+ZYF>8 zQ%7|`7j!Id^=YT}a{T5G-}OGXbvG||OYinc?{*dE^$w<9`VcXY=ie%E(S7k5fW_H!3_J@5BGfA@l)_l9@)oO^O_ zANYVLb&97WfS>p~!gzKU_JJpNhUa*D-}7Go?}aD%he!F8CpMu@>y{_@V;}j1H~3n= zc#!w^fS+`aZ+9d|c5as>lRtTt7y6+WwMf5rOF!~ozj;;X^_mZQi)VM2PxvZ#cBRjE zV*h!QC;F}D`dQ=lb&vL$r+KK?d3@)2P#^Ft*Yt{)_$%M`u*Z6LU-+)4`?`0ujd%OB zhkCp}`;V9TkSF$t5B#-HdXew-wa$CJU;0M^db@Z0$JaBefBU~b_)Qo4wzvGUM|Zv# z{Qel%e03jpJ%V?ShkM93{nLLlPxt&i`twe=dB7k0&u4bO?{H@Sd~a9w*N=NhYJAl9 z{og+`KhO0%()MqEeL8n~T>tHHSN?Lpeca!Djo1A^(t6;x{_EGWau0X@#&MW``sj!K z$`Aj&5B=3Qe9B+?_8xuG=W^_K|M!Qo*|++C7jEs}_wqk~v%h-qAOD`${g?-c9s&mv zEJ#oaLMa9pGHmFuN5Y5_Cq{f|@gl~I8aHz6=GLPhphAZdEo$^=$BGOk8dT~rAw;MPonE9W&}vhuR}ng7{(4aB zK(AjFcExHDtl6_*Us7y45h>iba_7>mYxgeRyn6TY?d$h1;J|_h6E1A{a8|Aj#coyn z^zGucWgUl=JeF)_$^{um)!Z0!X3&W}KeU>5vS^oXSCdBU`Zes>vS-t-ZTmLv+`4!3 z?(O^c$kU%kr#={&^Jd|fr&{i;IW6SSOV=X*Ou4o7lP_=nJo@zN z*RyZ${ylt|%AFGzT|Ikg##Ev2uP)YYcgNY+A4Qi9XjXLiNhcq8ZN>K>gb_+OA%zuM zcp-)vYPjK0^C8zDcK3A$;DXGtHrTH>s=+IlOlx$3$r zO`Q&eCrPpLDk`7D8hb3V$tt^Sp~4#Es-3RlDQypm{wgg6)dDLJsMKofE3-Bh8!ox! zntLv~>B8r1w9s;k?YEs;8!xo;z6&h1@TvNCC-!_08IER){w{yAZmyN!9=FGEZ+*YuKpH0Z6n{yOZj%l;C! zT7x^e;HG<9yWvHHJ3H{f3qL&ZpMy;|;FSwa@7Bx{J^pg@#m{C6ITr}y(-7b+K#cU= zd;dN7ci}QV`Q@8`KKkjazdrlzyZ=7?@ykCy{q@^_KmPgazd!%!OGv%-u%|ulg|C1H zJRkzw!?V66&?Bu_06rLTk!>g-fN=rf^?H)M?P-Vz*LVjALkPlPG_ZswJYm?bCN~s* zJR~6tgDAuyZj5(CY#{_C=#XtBK!!7PqE2q8 zAsxB{9?iI-G=6x*EpoAo;R2f%G2%icGUOEqfFfKlC_oNoh>E}%h$*h&4j_iHj&{5w z9+@@9hP2|0HJpnYH8{WsDS;4%JftB>vBPB?{_+%Z3Xl1yaTqe1#;0UXvPkZd{SAX6zv zR}#~eu&gCAlc~&QV(6AhGzcrovCE9e0v#n-zyd~417IAXAVdI%Cof_OaiFmWLx=@B zK!8mRm_Q!Oa0Eeoxey{$Q=JRQzzUM_h>HwC7U^(70JQ+g0iJl@I_RIi1$S4w37PFN10jMogt`EB1{IqN;72@Z z*brBg1EVDf=u}hMkW-)otW^CfHtP}6f*iCUO6bM{>fzKLIFy$RiReuSQVMh^z^6c! zDmLw*(t!kluh={RPu+*h4Jtj>vtJ%$RRxmbIX-*f*kUlPe z9+e;nSu6NQ>R})f4^cv03zE7SL3Kv~?hFH7;`L`p|~pb+D!g#{y8WjN1-m3l%j-F%~k;1*CwR#1(3K z4MM%+Qt%!{?ZFnpV3Ih(;}`z-lOtw3E8qbWxWGaAEKa3~42*{pBeH^Cz@g$<^F6)o8c8$NJJmK=LLvZBOI@}n+aYj0#*oQDZzQ`U7TInkJbVrAjdQ%? zwY2G+Er1O0?podCfVD*&`sIT! zu>8&t&IruY&FhJ0Rp~HM#l=~v3?F;E>Q=ux7oCZMeRHqD4`D@`TipHVGhm!QJ&kFPxPldpW@ITHh$zplJnZq?~ipZakxed{%@ zUAsm!_-r1&cKMEM?+;#`@&Ii2*408l+31V&&9Kpa897QZdpIJjPdDcXjCpWhi=IglTg z8J1Q4Ar?@%fFHG(^-z!sM3?xT}1b3ArWvxU#Y+{TtYWt z28S)%Iv5!vtXjT(AQp0-ht zT1y&7Qlc9`k{Db?-@IL)dPP@LG6bMarAn$7__+j7Mx8PkrCiP>UFHc=_Wr;}#?^_f z*9&3k<*6}CZf^f zTAD=h8DCu1C25wXX@bdJ;^9E%5&~$zGd2VmG{m_%A2?`WSsIuAQCM3#<^?<Cq)je2(BgUTm)z|MqL_{rsJ#3zY{_@oY`~dE4g9ebH zqzzgfT90EO#GKJqGGrGK%tAUqQ8uQ;5L#9dmPB}b2c$^Kd3MHK^yo&U=ZL@vP8jK6 z5NU)kX^%LmkNzloPHCvPC-h~P6r{pASd|U}mIlxR#SPgwV4gMB;6447RTYC`s3MSg zl~lQAm_C&l3RGf+l>~VMWI7mJky%1ynOE79aZ$oZsgx^#6-EJ8pejW|6qZ?;K%J7? zhA!H7@?k3yp-O;9l+FmCn8=Vqsai;BeyoU+lEkR~MT1BPruqn#v_z>=sjCu-d%Bu4 zYDY(b)lbO-Fpw9{HQbX3C<Z*#lTWPxNLfVwNnO)DDn$&@Cobk?vx0u?iwy+ z^l0$ju9PNk@DA?qKCkK~uiH8b+_Hl^fRH-8KmwS=J-ov|#eg|nfIFB2-tuU3)GoDx z(JZXN?N29K~FTd^PqFc~XI5`TppJMtsb%Gbh# z+0t+u%PtsmF(T9K87uM)H%bn_gE`2}1_&)l1aUfSFJ~FCk(fyRk_BvenN*Mp6jw3Z zI+vB%FDM%_Ry6V%hj1I`?{F-w{+}>%YV58T4|7F?F8p3`)Z(%+AM+M7b1h%9=^h6s zZ}5{$axhLD{?MVF~kbP0)-|$MHPF^;E+%Tc0&Rdr1zX11d9w1;~TJ4WWZwwZ4Yp?N6*753q;+%fJ4&& zK=r_2+pP)IfcLJn_sI22zqAyDK|(|mEw42e-*Fm~Fu)S^02}o`|8`wlvnI#20Q0rh zit#&t?s1>0S}!#q7w`-l#pW7qa{F=o+VoK?H&?&)USsumi?t2AaK8Gsj0kmE=XEUK zG+O`YbdNJA6ECK&b6Cs8@%Hb>;&*Y7H#whoU+YQtCN@J<06n}zM+<}n2r)vBaw*?Q zgQo)m+{s64OJ@FK_B&WKgOfHZi}po(xM{ybJDkJIAh?1LME7#|_t5rTF9-Gf6j&`3 z`cANV+p#gbczvWWaclP<2Z(=*a}8HATR69SLw8SWa8>8^P9L&$_cmDncw1xjsiMet zOZ5kvwNl5jA#XKQ=d4Yf#x1Y6bOiZ419u0f^_IIeG1K*ZxA%_gH|Ab2KBKXZcR7yh z_<)OvJ*0R;{B=QOcn+sS16WI+mxG0i_?={U-Tv@E*uxMD1c+<4i1$F<5;{Qu`aleJ zX}5TM|93?cmO7p2c-nD&*L0LjaZWS2TMsYTYBhjkIhh}^o)@k=yZ0*xIHXK>lXG>A z*GGqlb^dXCd2(AUcawKe^E#|=H=cvHl7um!jQLp4d3rZ{dJ{RTs(Dlww~rTluFHDV zV*9{SJN<6CUf=n$A9=0sxtAQeL)5K-Gq^kewuYkvqi}Shm-eD>xMK4=rFZ(I_rQf) zy1x$uypMLId-|%^wsN2@Tj#H+iaS@5Drx+>PosOf^R!-f`4KO&d~bU+m-nVB`#+O) zwGTVTGq5-}xs%g3{a!bHn7PPjb$CPkAj9{@o-e9T`;z1Ji>G{=ck`NaJ5~3*OQ-YE zABD+tZEKkP#&`8`|2(_riMuyM_d5Ef%R^~b^t~&1zHjfobGSgCLuaqRKufxx|2s&( z{sY#deMVz1LeKW669>@Cb5Ps-$V)s<=X}NUHc!90%p-l>OFeq;dfyj4Pz!yMmprv6 ze%`M;${L8qgZs;S@^?Ev=KFlcvw5gO`{A>E;A8p9hdfX$iGOFcZ7Y7}cmAF*d(k3s z<4^wP*Y?!+NuRg9L0o-7aQgOgy|v&w1zdR8Z~8ohkUGSBzz=+*7ex1>gJeIyqXxD{ zFpyDD|3%I{aX67;M2QtKX4JU;apOUV z3ok~js1PJXk`^y|Y^V|=Lyj+D#$0()B+8j4KZ49ilBP?V7E5+?DU)bXoi`D(JWBB= zQlLRgrW|^6XHKJ6v1Zk}m1|e8U%`eIJC*?B7ow|N4k@nKrQ-9-R`8%r8(j0>?ok+YmY^2Vcwua3!dCls_ zHTI@H+iCNrv7tf@E|vLirQ2=SG@q0^cI4y1FK_Q1J?rPj-M1`XUVZ-T{mg$lX*~S$ zyU)1f0Bldd|5jtqz5*ePP{Ii*tkA*>G0gBQx&X^4ueTgRtRTcZdrUCG4C9ML3M!x{ zox3XfOB{#jnyj*SF2n3Y7`F=TE6+ZQ$;X0*#7x5@k=!c1tgd6~!Q$2v&cFFk>*_o4 z&Qqy3^%&C4A=iM*Qa36uOmIp1qp$ZA{d)>JyZ%@5pg$t~C1bIHB()32i25?!>^eOKOj>8;n^d-2Uz-+diQ z_8oO-2$-E=3*wN55>{Xb+J;2LmI7WSOOb*V@p9*#i!Vke0bA!$)`f)CVP{z!9pa0_ zbX7|)&+Uch` zvS4M5+tD~O723Ht9S}m)i{^&`JF&1|_nLU%fCW}|;~pwd!D6=(xM$=Un`IH}i`_{F zftek?*5SH=3_RP4_$D04uLVEc$HXa^h;hUVhuXq%{w2?@^2;&L94nxYE^5opB?n#e z(Md1e^wUvK-Q~a`huq}4rtN`N$Tq4r=Eq%MeDJ;*j~sE066d}5#&r)qcO#8g{W!`^ zXI}Z|p`Vv?cW=u{bf~Y7Ui-+BLC ze)!)XpZ(pD-xmC{oJYC<{*QnK6c_cvBeW)=E_()a-~%BTK?$nvaO88Hv1mjXVsWH+ zgX0_h_J_X@){J!}+g9W5XTSWV@NX&X-|i*|mH}#RhB36^4P`Pt+*pZJr)wY%ffz&~ z4v~mS`b_XX(>7(5Km;a;!NsCgyX1`!h9>m>Apfd(LKGUVf-S6@3R&1bD-y4RU@Rh0 zYKXZso{^1hbmJT07)LqIk&b0KB4=JWxV9J$(Xhlcb zFL@T+q$RQUNnP%em%a4mFM%0M?1YkxqHLv1%D763KyrOpB&8QwC`DsF)0L+@;Vkbb z$Ymb$jiBJgH^CWBagLLm?#q->-zBMB3MvXK|vYv}$xAsSJMPL!e*wdlTrR6@UHg`Xhos57fMMr}=# zn*O{dLYrCAL=yC(Ep_QjVH#7J&XlI4yVgw?%E2tA)S$)OVn#tKOGM5xl0P+NPpxUx zXC^d|EUoENp&C`GPL--vwW?Wg+Ch~TMSVwwrSS~O%9kzjc+TYMG_hIKd~WorZFTEg z;Tl)D&NY}>HS1QXMNqY#^{Z)3YDsZ7NM@?li(U2U@YqUM#V(eyjdko}AzM1TD%Gh# z^jl6Nn_10nmb0Dp>}M%7*+I53ay0|(X;GV6)vlJct<_~|E9+X>&X%^dwe4+jE4jj9 zHn+X??Qek_T;UFPEo3F`asH8;T;(p8xx=kxbD}qeq5w`G!F`QuyZ`dmp#x93J9AXiVn8efd@bgYwVim8L z#VvMmWK*oV7{8dtHMa4MaXir(qi)AJ_VJH_9AqK4vB#z>@{p07WF;?|$wqc)lc5}C zDNmWoJ3BJzu3Tj;Z<)(o_VRJE+^SOS!yju2vxZD@jub>APp&&5sZe6xy)+mGfY-Nf_gBbETvF~q6=bYHj{1( zvq(n?Mlb>=CgTxiaWkCNLWFE2!w52wGo4k{jZn{e)QvETrnTbc5llKGsW8U~QXmZM zsG8MC6M`&09cm}W!_d*|bh1Sq15)FV2(g#}s7Js8c>v=GYEi-~;$iDOkDJ^WdNfA< zypMUTd)N&4U)+b=W#j%|NOv_~8SkZOFG4gSLmj>b^-x(2Jf$eO&K;is0dFl#&@PseC z-V-bZIzny!acrO9H^p${EG=dQ?~`LXGO5J4A!=0~$-^5>uzr4;ip#-hoL zZ?T}l94au!F)-2%SUV&YH0XIoR#5`5XIjll-%8ofelA~+Kn20*c0ovijg61x)MH8W z)Ei<7bf^Fl5+6INWDWQpkRly)p9E1lewA&UpavtjdPVGv4v?2d@PzLf5%xWTd04_B zL5PJsY7X;X*ZuB`*L%0%zAAmw9qOHqN2${y1kFR8=)L!ST8vH+q`SQ!LWssb`r!zo zl!6|L$I87OJr-At02!Ju{6x}x_=31%^F@igR=6Mca+Sj1$7uCv`Yx78JO3)LrZ~_i z5(NH(69e*X&-DnDVGeuXej<@R1~|HJg4`?sw}<>j!2I4N{8q)z#P9bU@BzIg_~I`f zlCC030nq3#CX_(l*v}}S5BS6)2sBR;+$;kff)z+W`-lJl8*n4O4=YxX0M7;Bl#evh zFD&-01B=4_Vh#Q#V&70LCSH&z+-w-Y!3P~e-}+6>T9AO|P6wlh2HzzHn-D`Fj`$!j z3$;*HB(U@-5DN=J-u&VG@GctWA<*Vw<46I}1TE0~O$kQ93o{P2wt+-90C@BaTX^+7KqUp?J&*i!4Q+pAPd42AraU%O(#PwBrSviIf5ST5gCS( zEVE4>_D(8CKo)7yCSPtNMXd&05gMhj5vZ{lGqU)8@&tl%D7Wx1n`{sZV)!tk>MF1Y zl%VSNp&r()9`?Z)x=k0B0nm_P89b8~OTjYhAsLk64EdoY@37HQvmr>K4=J>(RS zKt(rCM|spobCe=&5Ci4%H&f9vD&=lrlnE;ZF^dBFNQT1CjjdwO8-8Ay81` z8X^c94@rA~J5^xhT+|1nG1QQu^<04j>a-v{bWv%N2x@`<@N?G`cH#n6)^1SKO1pa9>P)GJYwZUZB4%jx%VF5O28Fn!n z4^Rj0VyRDKITl9g6g9~Y}?T~(kZ&y)qzG}KIx zU0Jdq_U&7VfEUuyUz>I#DmG&qB0x7!*JidLYIaKtB478F|J-c-2>h4_JF3395A>LURlYqIfytc(G13p>GJHfgfOWEVLCsA=b{W4_r~U zCgJu3L+wAcckF%+d_~X)-*qD6wR=Yu{$gu11qx5jzBNMtE?_4@&e*pgk}+b_v+!2% zek&H$X3zQd@l-FiB>55vU-m>b;(U3~Ca3pEK9&e%!DbsG?c8@F=oCf=4n27mVUds> z;V;q<5k0|_g^BbC4VZg<@L%IM{d_HkH3Z@wxJyIL`NR`^#q;vs z_9l;T?e6mkQLP(zE=lIMY!48GV|V~}*v-}selx;F>$V|gF9Uxre(kI!|$B@V-t7?7Zp%3ao^}+k}X8m!jj+i z5|iV&f2VHX^0x2%ezgd)Z*_4m)mwhmQ)9>fb^+>MJ zlOb{JNHQIr#;<1r}vj86*Bx`<4=A zLHXt6b(7gyQ!}I+vCST!ZkluXqAQ}ID?(oV`Hg|rKoR#teGs5|?~h#?$O8E>DWX^n ztu@>5rk^f(ll7M4FdqKq!7>A_k%hV@k1vveAq>JoTPJjxcdhj_S$(y4D;HXPDbgVx zT8ukbfiJg(nYxF;71U4w8AuO9{xz#BLe8X`tGl|5_0KSE_}99+Za3Lu5%`0(8t-Bu z9cC`nh#DrIYJReb>@3#j?xgp+JpIMh8)HqP{lkU(lL&}ev;x_x7bhto{N(00cgOM=Br#(wn{A8w3>KFk>1F?TsGzq3}YJAC$o}{oB83QIU)9 z7A%t<`ui8euz3|+i$_5kfEpQ^m6E+;-^jDV)AK^NcecG3q96B@tNLVl?X|UflYI>Z zC>3KcX5@sR9z(6}E+o<}85c8Lj7=QHQJgvZ7MziEVQm~^;K9(q8<_1HXK&kImH`$@ zps%&>BfpU?T^0!knx8=!)o`tUJEq6qK^gMV2NAmPyj7R|ZM=;f$))zgqngrQ5UtVt zg$d9@#Sl0!`BylJKU^sExExP;<8txLv0?Axj`;Ex)@0%AbdH;8Rk0NClfk_DL}AlVx$92ZTx0L%CWktNRyU)%T9V3{$wISr^pzvfNTHP18 zt*0ETZ9T~A+W7{KrOD3TJDkH;{7JK2LO!;9Z&76{;-nS(uw%k!AyZ|k5X@~ipt0JU zcez_7+RS@^v)R1oUUvGFEijFjM-LFA3q;l$8`k^$gaQ8F?`+cvu(lnd&T;fC4KCjP zXVSOnIMO-1-BAs)HA3dauNw&z9P0HC z_rU$-!gbu)uCOC|lwY2g&AI#ZT;~ZfJ?+~)X3wlyKK^oEBQn>Xs~L+MP~QPBnC-8B z(>BS)ZSe2&8{8d2UKVn*`0yzLn#&oJSN!Lp2r;6>i4-eZyofQQ#*G|1di)47q{xvZEnb*0!$ksu7Gj`8K(NA!mnCc3yoocX z&YdH9bqo@ZU!;Si;_d5aWMC3o`;0MUI;OGjap5%mcM-Vd@xY$4?+%_+yYBSqF^Vq)VdamALqxMr{(@K4^HmRAX*JNK{b6<5 zMssH5+;0iB0#}dE^|{(?#~4JMT`RIT0t(3a=c#TX60}MQiZP~ysRotO7d_|=M9MD; zsZtmuS8hYX2=)Y+oGz9Gx9UN>j^JxS!4lL;gmnqgT8aaKh)joD=n~9?L>iQ1XdP`4=<8=izcyep!- z%AyyTs{{q{U91@+$MMAx&v)*Uyv>HMLoh;j<+Lay^JEX8ve*NGADW|aa@vrf0;#jv z^Y6EPNnF|p$SAlo%OkpWY_iK*u-Mv`!OZp$M8XNNosieYDv9jVz@js&ZdenCy}^^-w_uotL11M*Hl7dg`>K^EpRnruoqY$@qf0F0^3d=0~T; zQV!+5W4UQYQ_VyCJdp0Q&oMz4REnPa6c1^Ff9{z~GEp^8eLQ+D6Az`5MrvsfixQs< z_j>lTd`7`vWb@v*9VP_fC&-h|sczY-f;ur&#kFvJ+0&X6uz&^lyBjNPB|rjF3mwTp4_%2WO&i;aMS3ZxC!dLY3OR`7yIOV$7hm;!5P z&4DEJptqESINpFr1?+f1R0sy5`K7~F$T$bRq7^?D#6TYIn8Cb$MWw_gMg)n;d5A3)FHj-}ZJ41dmEt=iOrQ(?NVE0{2!VH0jAep2z(>}j8$@$aI!F-5oK0+i z@_5G(|I@Y*+Ukm{L{19hc!KgsQdJn#;2}TQLOUu@Vgw_Ik`DO5{SnfT9ZXgtqx6<5 z+VBJ^>tY;pGt3y=(pwp1!3K*-8~!B`VP_};ny z6EY^u%^-JR^4vhUggF;%4kM?dMKq$p3|ydY7UJm0>pp^yU+h8`xM(Qqx)G6j@XjC- z?VXu?@d_`!bE73$-$kZ^ypYZVZVDNNE#z^$c`V~eMS)a3%B6&sA`cmq5JEJ(7ryUN zDhayKo=AbQF7<81I7aWJQ(7BD6j z#-=9gsS|>Q4M(toWW=o$*z}@2%BCeDz`}`*j6pIK2349JM6PE|YupGji>tcz5za~E zD6(Ng6U0CnK?~=^#)t~R{;r@Zy*$M!16i(a9FavznCmJPyNsYtDRDs{T!v(E$`c6k zHeu|+EV?>BVJ&QorM=M^31V4WVRm93YnN5As#U=FRp|SRO4S0@Y!^D5SWyYx>q_@ZLAXYK>zh8n!d4!# zjc_AZTdB6r53Yub4T7;-gReHYsQa1kAJbZ1j>>q(G_J9YZ)_2noPz-ju)qrF*}2bM zKqWjzfl4xRI&BpG3KGC8%@}bko$rk2JnMPSeD1TKLn4#h1)6hV8nTy+tWk?3*&zAw z#Vp9-Iy89%1HX9mMJNsC9$?y{f5x*%JMEB9gL>4YF1141d=OM?1XSx0?$=C>5Ie(q z*0ip*t#6I%TsLIUp!+eQ?b!oE4+POjcCtYzZD}#lgLb>f#g&&V4`1{Gb+kZ7L8RP+ zW9UL0_F(qv8c=~{QyU#nHV8g^k!gg;ZrZ!3_Lq{8y3}z4-tpeWH+q0=ZHwa`O)`c{h z-gDX!lpyu!g)XqsjrcP?-|vveGuR{kncq9!;f^edme!buzyJRafB`6gSwaC^ zGIJNuIWzDAAOL$l_7W6eIyDz;@?dx20DBk!437qTu-9n3Q+vl&X*kz=#rGvmmU@~N zf(dZ}Rn~6lfPQE4WChWB1vh;JQG?)@blJ8GvCumBmUK7BWLd{#$u@u!(SD|Oghi-? zjVFKX(pnwyTAyWCf7Nj%vxHZOg;}VDTj&r5m;e+2dJ6agFOU)q0EROGY{gb@{yjho z;;?~@_6laWfj9SoOSTNj)_dGn5Igq`8yIYNh;s;00rS9Yy6|jDw+r525T^q>H;97P zmxIS3fjBr(_keDkHiS60bFjc^T!;`!NNS+yiK9r0rD%$$h>EGGifQJBV5kD82YUK+ zhGar>{?v25Fbm@Vfdg?m^_Dux7H$DGaCjJr_GS>sAbft9i3|aHEI4;PuyekMI*nL; zo#=?YcW>9$3loKbSvL^p#)AWq0{sRJ=TL5>D2kw#j;qLy?dXp02#@h7kMkH21&9(V z;fk>Mie?y32vCQL=47x}0Xuhs{q#=<`A^r-J507v(BKYv=V&5WjM+&35XfkOwYQ88 zkpjTrWSfJGM2C?7lnv5XjnoH;u%m+%Nr@I!ce#LfVOM^jLja3Fbiat>c8crxXExc6 zQlOJN$&)?llRpWRK`E3&Nt8utlt+n_NvV`e$&^j$lurqjQ7M&ENtIP;l~;+CS*ev< z$(3E{m0t;#VJVhUNsnduez50-ptFx^35#gxkN-#!Nw$IKR(_1w0~@%D8@O|?cYz@Y zfv>ZHlGulSXpwlCiFk>a2XSte#)k{xh}SrgjJAyyRRMKZJGHQI2*Gc@XNox4XP&u= zV=0=WNt&f;nx~1Hsi~T)$(pU{ny(3)u_>E6X_mFwd1!f$D-nkB)Rqta2$vHfmx1Ye zyf>M6IS^>+eQr31en|m<344Nxn1#84hl!YeXb{UNi6?jvk6DsPhmwLRnO#O{ocIuR zmu_1KntPU>sW_YM>7MTipYbW5^GToeX`lCrpRj40`M3l-{|6o8_7nT!|-h;W$?=#XeDSabeVws)LX0Vwb}-I#pR z$DnWOgWqY4DQZzkhJFfx54zWbTqvV=_NS%jqk~GQg=(mWil~XIsEewVLF%X?H>6)! zq`oqsXY& zimlnIt=r12-RiAg`KaMKagn-#_4JmNdag7VsvcT*BMLh9zzpn`aLQQ$-L?xo;A{wR z3|e}j&snEldXXG@s>Zp3wz^Q?W)Kz-ZK{(EoTjkBr~ZczyHMPBtah4n6qs=T#H%}4 z4hk!6wF3L zs|u?S>Y+O8vsp5b*jEtR$D*rfvSik@TKKY2E45QgwN-1iSKE^^tF^WUdl_H?CQt%$ z2!>xvIx%qqUn{9WYY`8c5Ip;VY>N<=TA(@$v~(LKj>wDK2aiu1W_*iTN zF)YI~Ov5#7!#9k>IjqAw%)>qG!#@nfK`g{WOvFWO#7B(8Nvy<6%*0LX#7_*xQ7pw% zOvP1f#aE2QS**od%*9>o#a|4@VJyb}QBuOXyTK=n#%W9v6wJnL?8a{l$F!-&b6jH? zJi-P{$9b&B6A{OK?8ko$$fdi-gX~WD>%VwR$cbEXJUI|TNjZTG$&oC{ll-lUY{|b< z!X|vln=EpS+yg`@Ig~8QqfE-BjH8^4%8*mQsm#iT=gF_^laXV}vrNmiY|E_K%DD_D z0j$ftJaMor#{}WYk8{h#Y|O`u%vI^j%Zw#w%*@YhYQQW729dSIoXppZ&DpHYI|&k3#23yuD30A0=kUC#$C(GyM4fy>YrjnNs+XAUjQ5FIBK4bmYk z(kiRbC2i6tZDSlg&K?aXBkj^J4bzB<(lbrdHSIebUCq`U(>u-6J&m6>4b(v`)L8=1 zKPk&Tjnql4)cQHpP3_cAtrOA=l%c%TRc+N*EtXKN)mzQg93j;?ebiVj)?-c9QQ6gJ zjn-*RXJyUSZSB@Wsn&5V*K@s5Z*A9i-PUxi*L%&^I*r$V4cJND*Mm*ig*_#Kjo67D z(}vC1jqTVqq1cfv*%bZQm2KIVZ4r~L*_(aOnC;o04cYnQTT1~M@B!yo95u)$x%1ts-QDZW-Y=WpF>5(7 zAm1=h0w1uy9szpGV6eC2CN;P_3;f;zF5m-B;069W6|i#iT>>W{-!bq4Wh)ZO%1{nP zc#mjNaG0kUL1{~C;2rMa9}eOnUJ#+P0`u(x_I;cgz~J)T0wF-&8NraVV2%WF0X5J& zc>57&!r>y$<2~-trWaPy#u`cVgPV2R9>$i^UxvuNG&g;GI>%R`{ z!7l8>PVB{Q?8lDm$*%0n&g{+Z?9UGE(Jt-NPVLnm?4ZC5sXmG_LEk8@zlf>g4xZtd zN`hBM={Z;dlBf&MFnC~wjMKn%?cO{1&<;(8ckSSU3~7r$H}2Z5$j@Ny0Wa_aPw)kA z@CT3n@CmQ*3(xQk@9+-~@e%(F{?3Im(cllR=!YzjD=yzJ(C-qlb9x97*mfpe=HxL5 zjSH2&f2a!->AA7mku2eN6raifAMrPj^Et2cJJ0hy@AE$o^g%E5K0om^pM@6R;4B^j z3xJm-uHYYl0v^8+eAvMU0hl?L3^93g!W#1gv1o{>l9H&11I)`tpT{;o^l7j5YtQy= z@AhvG_i-=xJzw-@zl2Di^zz*UD3<|4&f=N_dr|-K5W$dxS@zxufsPo2$v5R*?|LVC zuLVJ&Z(8+sPseCK_nEKxo6q^3@A;n(`k^oFb#M6ti1$g~19|@fA&~Kb-w{;ry$Jpx zWoIId3&r@7ZkLFdu+g|WX$!!mfBB*>{KHTD#c%w_kNn9m@T3p?0C@ThP7pEB0$+H? zDDe8*r^(s~J7@B&2x$!fXOWBe_;+bW2C;6a2573S*|s~iQ05fkbP7ZKvVU9WmTJl5lzMT8fU z^~#7qVM2=_H>QM$lBGn1FDb-)dD7-hoH=#w{+yF)vjgR*6mxkaplgXTi5Pgy#9IhqJ8$% z?_a=y1rH`%*zjS*iE~z15ySE07zkY?sJS$sFN#Ak{F+6svO$U|F>2)KQ6)lrzcSyH zIkWZ5gRfz)lxeWFV%)iP@8;dx_ix}gqwXbM-1u?i$(1i>-rV_f=+UK5pWZk4b?n)- zZ|B~_y4ux7swyPWLlm|n{9_^Dt$B#DSue1%5_UzLFgbAebTJr8d z1QS$nK?V^UjyebD8*+myz0^OxE zohYba9+GH@rWsr^@-du~hU|gQ7o)L;oMUi#CYnWk*~Q2z`17jPoR8d`9k-!z< zboEtOW7V!pG;6i>R$Oz{byr?{wM$J|gB5mIV*RQ>g*hEdkvvr?uwVr|oBS!F4Ce8L zq(5oFrbe9hT&5S$YC&hzLMh!v7IN%ircpm>N$1F#q;-;1_)v9Hwr1rmc3*z`^%o&p zeHD0Mf(thIV1yIK3)p`fcKBgfFHp9J6Jt=(qGuf|;j?M}?S1mpdS4UOB>+9PamrRl zCOPDl|EtYqlOdLQW||ocSYe!V)_G^1d-fSahHDmjXri%$$O059cI;w9leV~^RAW9_ z>UlvXmt?F}wvS^|?NzB&RL z=l1(=zysGSXtWDA{P3eJ%Am0mRh-eW7C<0(zmBQ?+CZ{t%UbiwDW|t(&b!XHr_2#I z{dB>$Spb7b3^IkB1!9l=1bHe6QEjSHQD<-7dGA}QS*}@U?_{Vt#hT&yrsS)*-_DAZ zYue#m8RxHpg`MK1YJRL!uwf?{txnk;{HdT%9-jVRsxp6X^uZGUd#k#KzpCStk7s$S zf=@pCtWXi2{q#+xZgU)>{YvxN?fAxs<4S|i()Kd8O=x()v?ZX zu#;UI>%oW*;chCYkOnpEc*klqP!Ut{9y^v{i&_NG4Ske`Ep!MB8n&%^R*41sI(Wd} z2U^4btzCJoIn0x!AEts(gH;=2M^h1d9;Q_)ma7 z>?IY*fOufw7#NfQiufYq)WFC^kco~aUE3VlR%Nx4%}b*K`r@c!R=R+ORHQvfW9xeG zx&;)&AVfd~Iux*gdK{raa$F`S*`W+?QbiWa@TTq}nUzXjg%q~P>GedZzP4e5l8OWi z+pu>%S5oDY(pVuXmNCN$s^flA{;?`n#kW>9I zm{>uDI*hqab%L`Uzp!gpE}4u)YDI%bb;DfUP}jRk<$CzsiZB})RmY06u6;8hSl#f~ zz|W|p6$CG9@_Ia1W7_D!vM970Q=0DOfGD6*+qM?)ps&`FWDQ48a3 zVMaNTiA=S_6=_M=n9_u(ZUMxY=~zmk)fr9}t6VWG4B4m7xaq=%Xw8c5l&MX2{6eWy z$?kUBY87lC(yTAE>tnTo&8SWVz7K3~Hq#5<_*P}E()G%76YGY!;jpmxvmy1?naQ}l zGZpZ#g!sN|mFLDoz+8#`+wx=)LJ3-8z1nNrI{{qaMZ#hkdRT=xwK?JvyK=*B7_3wx zJmIULB82czpo_KYVHU3=zXK*|-wz z9Y?)LW!|Dpibdu!;*5Jz*r^mDrVz&h^kD>>jir(5TrqX+CO~!+5}o8@TRYSN4{l;_ zx>ZR<16jBZU^tk(*swF6iK*wVw3)+hQ#4f?tymLRrFo5hG*#wW>8os(hlquLiiou#|$S zzkK#qB8=5fkkAd@7`oEtdCwI_?QaKN=!D7kZ?|o@ZVz4Q{|tAS71D|YTtFD;21}{|+&1kd&%jvG z_f^y_H>YOO!RM_Z_HtUc<@Ni796zr)O{}|&v)t-dnfq1XKI(<<7}CBhuhvCN6{qeE zrpo|F>v;wArN>_OdJ--}qsDD5&R+LuYdUfh0(GfVJ&_@wis$Vdk9G>rvXcC- zRkjykz_*R`yxXh1FFQZAKOXcj=DIjdnAk_tJbs_Y%J+{+X_n91uE#XKR+GO$kyk|& z!qnm5YaV}1OT~N0H)J~w=*q=&KJW1~U7E8@6DPxZCH}Jp|AU_r!>71`xR&d+Y!bh# zvm2)(z+I}m!Xm!3I<>_6BWQRBc!<0YY(CdZK@~I;*xNl9d_mS=C>cz;qM<<;yuq63 z{=IQK2-OL`1)(XcST$1%xT(N6tC%eABZX*ihvea#w+SlAlL}n`Bx!&o0jn#*%D%u# z!0vOUw<5U|BDDN6p?1)_L9#6L+c6|uHX@V?BgBeVTOhJJCN5krQJ}aT%0G_V3V)L~ zdZVB9b2f;(!*IHv{JWkDk{}7>ysF?l&x@o8?86hhxTDP0~JN9JJm6pSFQG=!3?n;zIO#JfmtSe6)pIz_AI$3eJN2WqkOal zU&xBO!$nVQNQcZ2P*g>UT)Nv>8B-)0RGdhSloeJSvohNUnS#Zy@UEPK!eZnqt%^VK zE5>+)IqAy^O;g57beooRgUYG|I=Z7};Kvo)tV%2=mt;6;q@QV`hMn}upH#6(W60=> zq?khmYWkoy^EEw$v-sP$wpzSspr+;F!UVLyD8!1fTRFz^N0wv6uRJxce6y4Hh3Rz@EkyEx!WIp~=13PL&NfabJ zO2|oSvL>Tkgs{8CKy0jLq$WE$Ab6k#@*%@%EJMHYOlkm4(PYM`T1;q6OcN|ZaiYq? zqeXcfzmAit!h1RJDobJPLda~pMm$S#D!p|$D)*X-fLy(;_$sV&O}dOu=~NE8^h@i! zPVCH1?L3K&6a`s0huDd!!t4tEstUyNCViVM(K=5)azaY{FYocCOlT{g+B2M6Dzj@( z-*h`O+_1{JN|%gFu+T=$)V1KmE6DpV6~dp*`W>Ufic6Xx+~kUGbi?DEMFIUyM%o~( z+APK*1gl^~s$fK#TTmPOoj3d{k^6%`5UR&i&*_X&88wdT-2P4*y-^&^QQhmkHi{h$ zIEIiEKF-XqPU4^u%+L2hO{1hlrf2{pS;Dze zLQOWEQB_^lwy04ZeN|YERap%w9*v#FNrp$b9j^dOsxTk~;x3uIpzK+no3eyga7<+& zR_;112Bf}a_`9rHs$?}UulTt2vYa4MjwDKp(QhL-x5!NtFsoodvzg*Rq75b~PRwYKLc)3eV#m zYJjm|?Va3YRf?_Hu5i^^%~*}ySdQITAhcMJ4Ox*L*;>Kajy+kFO<9$l$d4simwj27 zjoIp0S(>d`o4r|8Y+0GzS)T1#pN$KX#aW>pTB0pl#L?NGOY;4PWr}-tRpL=Ph65MG&i>-U0?=o;JcXL`;A};HeCWP;O*_-{Iy{JJzxAiV8GSf3ie>& z1>g)`5M}@c2ToxXUg5g{1!kCF7>@p78BX5JCE*MX;SLsG8dl%8yC`u9D=Fkk z#$U`eOI}?%{@(5N_+$9RDfSb&Y-=@>{Tpk9h&Sq64_5o}0lk}d}#Ne`z!j1*7?Y|#Z;$cB{G zX|3LBuI_5DRz(YdoF`I<)^Y)nMv5fy6F?CZ_vnG9Hi*l31*l1i&G?3#zz0uR>qgN9 zaQJG!{%gPvY{3>O{)tf{)(C4nNs6?dg>yLT3#b97ervyA2)n+C&CrExaBRpPY|id% z&;D%C?iYz!nuC^+6L^foK8gxJkCHwK$##m>-i6Ax35I|LZV7GN&TZY^ZQf>((MIhM zXn+cEnuLOuxh@JmSq+APAgb?(#l}3OI&8d4^{2l-5QDU6_VS*>I@t0en!{T_Ch} zNQVa}abL*(Zk)jD>3#-VDDQ%}a6hSqQT>x{kndTbhDu=ul6VDfIgdZ-l#(zA7{_rD z-|+))awmUsDDUK#Nbn>&=!kG|gysqK;D(%_a7keZhnR`jHj?Z96CE*#B+-T0#_-ub z3HCUbtX7E2<_3|j01q$-@|Fd0IEdtilrrb*gGdcsVDcUi2q8C!H|KKpQ0^WWffbK( zNRM<$pY+I;i3_lajj;$U&vKnWkB{&zFGuub2o2cS3_|Gv^dNH}`ILiT^PETl_ud6@ zx$hpp2vtXjMel2b5D0BJh*ZCC^0sZa28L6IYhQ4PBq?@EUv_41c4zNemLRAV!1Rcy z04Dy5ffC3QqDbpcuZ&Q4>t6_S*hq6f_wwb2EFL;AL_*u1x$LRqWfPs_Pn2rW%$sr0)FBzElc82hi z9sqB(E_X(+^^9nBecy?r_7j0OX(jRVgsAP?M)_0saFs{%lm~f^=XgSabw7cI#zuIa z?|Gm9c~yjn3_t;cNGRAEdK57T7hs$Phax2MX6BRb6tQxJKkXPu?Vk_`2`3eUXljUP?wJ7dhoE|hfca4wjff!oo*-{zSCX$+dtqmL zw~u+0&kV883IEn{zi)lle|^|59PnTomiX-?tC9*B?Kt;|%lP=J7kA000DiYE%!iL4 zd4^pAnv?+GGrZI$ryqiK)#u=trM{*@4W&gY5RE(n0Aw@X`t9tICuNTv(iL4yLd z9Yi*;;K6#mU?J#%0ocNZ9zR}KHjCWHk|s~0OsR4u%a$%*!i*_%Ce4~Q{%_*UsdFdK zo<4s94Jvdf(V|9=B2B7vDbuD-pF)i)bt=`WRV zB2TV-IrHYupF@u>eLD5()~{pFu6;ZA?%uzH{}?w!gUE2tqmR)7M8UarVfI~ZP#3QH zzsXS;T=;NezZK^7(gQ8gG=mFglv##ZUp-K;S!b%{HJ~*ld34PFF1z4T3o{1plFe~F z*yD>{(QLTif4%HdOEk9R)|)|=Ni!ldD8BNc1ro`KB19n#7!8TJg%h5TLlRk}kw+q# zq>@WA*`$+CLK&r$Q&QPO2$c0;L3-!GfWU%1xMx>i8O-BLfVt6vjhFfv)&pXSeRJNudNN3C zv0pYstg@Lg`(?9OHkDwm(^6Zlwbx>st+v~8+pV|Xf?NL6u6=1)(hI;+ChSX@LB{T} z(6&q2vhbe7>{HT)o3Fn6^4qV!{{kGazylL(Bn4&px~l~U`+DwU8K@9LmtrF8?y(-Z zJ1@QU8oLy}1%n*2$Rm?nvdJf-oU+P7Rxm=s3&Z6C2q$cLF2pe_Ad|)K#tUu6&UT#A z&Psi}ve8E)owU+RGu^b)PuJR4%jvNY^9TOX%q0vs)3o!?8Xsh=*BkR3?QKw_ownL* zv)#7aZ^Iq;yMMWSkPBBg3z%9xxR7&ALx25j*cCs!VByFzRkYlTGv2u4k3$~0#xHeJ5Gm>{t@c3$Bg!`%kli06vU-6ht`pIMTxqub8vI0w*AYejhQ#IQDUb9-JZ_2v`7_DB+O= zF0g?pAw@Pi_rCzLWC-9`05Log3v(zy11bncN=l)?1&jcL4LJom5^zByoWvC5@Sp!i zFb@YFWE=kLU`blB!}kF(h(a795sL^lQ;5R@^ZSS@5KxRB1OXfxn8z(@k&Xo5?<1|q zz%Yow4Fy~v9=6CvIk;#LFM?5wWHe(*{#=oO46tJv&_IU*vZ#`6ct8O>G{`m-pn_yz z!yFda;{e4$CT3jGjy-4v0>WrTEatByGQ2=L+~JNEF5roLT!07k0Yi@v0UR69qY+DK z%2T2;m8zVU61s7ZZ!FOx-N3*k7O4PDZjz8a2<1H>(SubaN6d~g$)Uy2;6QE3Lt-AIA>2UfP2Fh{Z&38ASyc%!`(Y4={`4TN zq@@q{h*e26M1~sefetB3Oo&QVo@Mn&E2w&qbPCWQHf3u&!9mWnilZNMEh=FPYuLjg z_DB@8pj(#lOrIcetu#5RRZkMX1+dg3k)=))@yFD>_CTUC<)Z@VQ3+C@BLlkp=wkt! z*+RZHB|7Ax60|W7UxKp)9USauJsOTBmI58fIN)Hx`P1U+HLRMYDQNe)jdqSSq2S~q zauaLa>tZ*%+O0~BXh{A;yYi%olAQ@CpfmgiLd9FKqdk}|uwIQo0hyU(@!-l}r zB&{H&e)*e{QE(#x$3W&s)>#kYhLwN=)!=9wGF!T4vZ3WLC_%-c+_W-Rtlj7+dkIKk zC3pjW)!ik38#1W@B&wAc7p9_16aV!8ITh^kFd+@KeD>8+upj

    s4E1X%+c72@b6u!B8pNEAESr>Np3v54$sOM$(zF6*lm%m`qEITFd9 zZLt?B>ko!-gwchz486<1V;Di!(l+U~1TK{4DoPN+ z5|m&C+(e@P0<(Z`Zghj*WkDk=`w=31V*&jjAW2Jp@|0h6Ijy|MBxD`yS2wX3vYvC% zWu4J!{&Nx9!X`Srr{45?6VsE)CZ^J-&B0e6{nhrHU$Worbz;POmRAS%B-^o!TlnJF zz?L>^?PowKnEl~;-#g#??)Sd~KJbDcJmCv(_`@SU*%Mzp<7Xw&B@dd=8~DI#3ZaN( z(s#f;5cZD0Y>O?g6VW~JhUi0k-V``c34Nq9Tm6UbU(y%6?=9mnK&*3*kp9QZDYv;V zt!=gUS{!6IIylJg(qvn`>cd|9z0bPs-g{T+&hIrj_yO&=7JI6~fH$ojL2l;8TiVfX zXZ+BP_pc{D{pw#o``hpS_rpK_@}IxJ8*l&ntIB?*C-jmdX^`{&)g}etM{q-+2~h6- z6&Zc)5zBRu24U7S>5%LRpfBwg>lp+BLPro_gC%jGI+z0`#e*Xhl-$kQZ(W6=73S+cDH2XY`fEWkXtLonc7)X5sVCEH4++p8TPw1pGA;Z^wYniRlS zh&@~0(O(ow;S^F~67H>}oCA)R4_Tl`=uj+SU~(aq14dQ3 z@mMm|oJr_kd=b!vt)X*3+tKZp`N`Ub4Fj+-(lNB#63W`tJ;DnnBE5|Q2_juNXkBg5 z!?Tqg`mq`|dEcyo11-H;a1B?x4brqB03lvqIly2Lf*-tzUnq?L0?wc3#VlNVj{)HhM+T0yNUq=x^ETDr0`Hvcwo|QqLMiJA6iJC_=5gXaw zYvo~c>|ya;n`lvDwHeYp*uo=G9c!_jI9LEX*q|jT1FNBVYgW#-XXvr1yUxd+X8Hp*nz_#C6cziS}MHV93=qi#aj}pq9N{=MgF5MYUD<8 zWJh}BM}lO+`Qk{DDk3yF|2tmXF&AGC?zC2AckW@JeE%fiL7)HdSWzwqVT$Hxl4fa| z=4qlPNFwHHvZiuGqas0=T>)U^H3aF!(&O1=0)eE|a@5P>Mn!Zgs2N&+WX)k7q00V)8)1sddK zy21j*(s|KR4`6}mMJ5Ru#3 zI_QH!=tf@Wgi`2J48a%m-V%wY7A=suY0_ooWCB<~JIId!Ri#04Qxx@HR;j3W(E~Yv z7g#Y=53pQ(ov5lIM}+F=j`C=a`sk19U4;tikRk;tpo3eY&PPD7pb{$O1nQw8YN9IYqNZP=I_je?4x>uyq*7|7S}MOm zYNl%HM*y2gbZW_5YN(3psFLcTZtAIO>Zcxrs*X(lsk-W`!fLECD5}z`qq1rb+-k_k z>aOx?ulj08*6PY=zy}a(u^Q{KB5SewO;lLOHw3GZ+^VX=+o~!awJM&xHN>$s9@6h14;R6xY|%DS$r3v7x^gv5o&>#0!6OEl}b5=pem+O}$Iym@P< z&Ktk>Yrg&Kx8`WMB5cAc?85dPzM9Neu(z_G3Xq}fDB=z@<#L#gOOHoR*}+^fTe zhrYg=z)FF@;wr#?>a-SH%I+)5y6nluY{_2h%eHLG!YRY*?9TFR&*GcNk_^N~?3TO- zr=Wnv)D%;x^8wAw7IVr|Km#L9YY)^hFE%B)fPY}uOa z+3xJrij2?>Eqc5F3&1Vh#sJdNgwhU54^)6eaDz)ot=eu!)tW5Vnyj}DZnnN`%$mg4 zj;+@2tJvxx+CpyRO75=uEy$#6+qSK{UaUymZ4X!oL>xq!(g`hSN<;K*(_%`ad`J(- z37zCZG}LS5Vg=yNEZ7dL;1(|82Cm`~F5w1j&Q5Od3h(eLs_YgF1u#JJD(~_#Z}Tee z$Hs)+R>&^wtwG>}hz!W5)W|_d?TzFHfr!ZV_Q3U~2>7Cg@y_ny=5Fnt?C;X9?qaL% z$}i&nF4+?A{o-%_$|?G`j`SV`#{M#dM*Kn#pu_(v1NCz6E;y@ih;Kq5a6&+B4~zi1 zkPUN455`>ZNWSmC&abDcul%a4?dC4y((DIAhyJ2)3ajv}@-M(#F6Kt8=I%tgE(2#A z$7gKH^)9XFDzHIp#10>ZFBFFVlFsLJjp+=Zot_k;U6o>HQitzeQadoV4 z7Hjbqk7f(I@LTu_48-jild;^=ZB5AQym|=aY6)qb$!-YoB0apP|7<8tvNQ*tHeq8I-Q+os3r+K$v5 z?W5d8#`=heRIfo`tT@0+{>X;xW~6Z%FRh|n2sE4n^j^$Nh|VA%1ui#n{IYM@`fCR} zZZG??;F7Q+YpeZQaxyFPGMg(V_lqW@2M9QC^QP+=Q`g0SsYYcP*+Jxek(`}02owBb4PGlMY< zqlZDn3@GbF-cCecoU+d}YhSGLfiz3cP=K8DfG%`{o)C{Z(+l7LO+{NY*c5T`jC4Dr zG`j@yKo3bkyYx%L^uw|AzC?xz*z`@~bWZE^O@n|>*oJ~ofMt9GmPAGzyD+esC4K=HQ@wuR}0Qc&op?%^jMR1S^ryD=S%cN4^Q-k zKw!k4^Z;lSiw=_nQg`!4ECf-5joor}5tlSoYqeE(%q@rXUkA<-3$|W|G*>G&S__F; zLw00KHa|PIx774bV>V`k0271GV8}6Ey9R??zyX(XR4p(C2n29IhHxbI_!>uFFL7*l za_Nw?Y!fnJKgMCp_F&g`*;IDEPIhn$_gMe7w?MN&AH>`$bWZq%KSbPcD5Lnp)NYD#8Qcd>NJr|iP(qVlMeN^YPEdj~cl1GZPg3+nuF*<|(S zWH=H_k4V#ZcgS~$i#Qj5xVG5$mdJ3tRKO?O#MjLBNxOJ?x3lngv~PQ~Nykf#ulI)E zc3|hWRI_(UXK;y6$A}yGk>@XwW6O!BhZvW!8Sgj6sJD!}bBO7_>1$* zdH=YEbM%l0`Hge7k^?W2tNEIjEt*@)3mf!((=t0>_-gZWisb)DCGQwMsl_c;?^FzwuUc|Uuz7mttcIa%|9yZ-CLe(cNs?9=`;g#PWL z@95M1?(=@{`~L3(fA9PqfB1|4_>+J6oB#P^zV>tf`qQfSqyPKEfBeh;{L_E^+rQ@it3Uhef2O+s z{rms_1B4ra0|^#1co1Pig$o%rbodZrM2QnARM0sW672^dlqe4wOLD6b^8`>T)A`U*0p;VZ(hB7`S$hu7cktbYY7)N zd>C|diCqsw|Bo=`*`{D>DRY^AAk4q@A>!l{~y2r1sssS_zqfyonW|1MIB`} zLQui{B%F}K3N5@4vHb|#ki!l={18MCTUp=&VNx0boCWv^(I*29f^fkGA50L#8g0B0 z#~gKJNJAEV{1M0?g&b0|5lcKV#TALH$;EjkxbL1Q_w+Rfdx>A z$C8tV$i|!nGN6YNl(t!*7$shbw3r?)HD(BHK#&v}M*dJbC7TiySYQNs968Apaxjo2 z7IPHHV4g}Xs1$XWbpw@a z)`2!2O5A{Rpi#U9S6qTfxuzXx+gV1BWN8#=Sxel2WnO_s!Dd@GVrdszc+wTf*?^}V zD4S#yiA5cDlED+=h$WslKRp4x7~_mJ-WW7N&rH&!RLWUE0}~KEvIkSdN%RCnEgD<{2AAcfO#~kVh^#0TRs&3|WDm zTy|i5<6#DxhJkUT6n^a;s9Gsw`IZ`Lsu6fx{uu>2rD1q%u|{ly@TJBUTb{jkYi-lT zS57zf-4>f@ZK=hYcI5OL?7RiaCLVm@p=NA~HQ$``&V{p>c>PC^Bk*?VXOQJ7OEC(&bs zui5(N5k1BvG+pmu2-fd;73+pzq&wV!Qdvh~fk@$3T*3*;hDP+yCWu@&=$G?-b_PB~ z5d%TrCA3yQ!3{)yAiiPW<;TG6Hgiuk9 z^P=CiI9NwJ-Vu)?@gNEL*hfG9QB5WUpXyq%Dii=?h9^NCnz-jFtEJ>pyEBOnd8iUJ zb?SzV93-Jk5;T06Dw2_a74>ZR7bhZU8HvlBz7{Ai2OTb52$B;028KVmA!wCz!(spr zQpN(Nk{!9cmlO|ow#3Dw5(Oz{o7gc+|K$;y(Uj&ic?3vnUK5+y6p|p(q$DM9qiQ57 z74LRd&O|9Gl#pBi21I$nN|OE}8!i~t&M+CPN_G<^o-|d^%t_BCnvWgNqM$CJRnUT} zEtr#g=Hbj}5OS?ii`yavG~NL)cEqEh2oh*5hgrB~8txhfi{5W*>f2cRmP{=wtbqY!=mX^jQTuVLVavEhFEHWDCtmcc z5fsQ8Kk7b)T{M~KBkNerYFCyX7O{!7(@YuL*q9(g7vV_C1=wK@%~*gP=y=HmmN5%* zIF?06%z*MxVv2E8(*9A}sG2dJw@#k2WT-J)XFE69DN2sdo%MXGQKf2Cs)90zoB^nU zV$sZjOz?ia^j~r1L`$|x36}*)>%N|eFqGbvxW+}G6p?EXQQ+%g-9?CD6)Dq;RiUgR%0?N>a zPB^QJXhfqK{=UesF2IqLd;CJm1MX~rle{5rkc=LeID#l%F|wYS1QxzXWGQyYJteU2 z0>CoKC~QH#*jkvjmrU7dWe7gj@o>Yu&F617S-hLt!g+xyF+sE*%_4CV(lc3=G z&`*c(^>KdTPrnyp0Rft>+Iry3@+%jzf%uFM`D#HNP(uF5f&O;E{whEP7;qQ(%fE7u z1KmO^)`yO4PXtGh1hu3CPtZ9k00mfp1zXSsU(f|(Kn8f!imK?rHV7uF9S#QsbVmCy&> zZw$-u4DYZPbO8x>kjzlf5urjW;HU&AkrFGhMjjCpaiaoOUqTkdjS@%EE_4nAsLb-1#G_Tj~%@Y4OMa(Z?ORR(I|yNBuJs=Tr3}((kY+vHI7m$ zF+&Am&?;fj6HVgi26F4(&nI~g9DVTpydfp#3;aAX07N?Wu1~DgD zViXO?CQzA<;H+3N!{_p)7(*Te_Z@(nEY$z!c{tXec8dtI{p))1m zkP5FZH}fn0uudfoF!?qRHOmtwN)tWPQ$4xEJlhj5SQ9>5vj>`u7)MbyeUSHhfcYQ` z3BSxgqahn+@+^OE8GO?s1vEG-vlV|~BySKTzpz04QyOwAC7LrO+OIFs5Ws2@Enh+S zuG0peGwHhQKmSwuEL0^dU>?K_`l8c4UvxcVR7Pi%HD1(4=VJFR00iPwHJPmeI+7~| zY&K1zHjQ)lkf8^@AwP)}A$9R2C}1sj?>7&QItrbGe38) zId^X^#eo7K3mm}G>7cYgAF%h-@w1{7J~Ol>Eb!_E@kYn~L<;&;3VOg#|Fkk_lu!%R zP!nTM6II+|z#Mp#HJ`03jgd*+G_uGP{+3iVzmFIxH5{b$Ksz)+r|uvrp#QW%6_;@} z?{ZRkk9(AKOJ{RTfsywdvK!=-P3wyS7IRJG^cOrUSGP||;}cAwjvm-hQLQ6TlT}cO zB2WRRj?MNA(Y3!5$W}BX2S%d#?xj&sQm6zG`tv z_jOoVVoI;|Ih3_oi=tUG*5IhsV?P#TIl^K`7AgLKF9uq`1X5OISC(a0mIPq)CZH`W zP0>uZuTqOM7N0IxQNR{8m0b&zEv-=^;T0_(G(RCr8jR8R6jnribyX!3>pD_Ot&tU> zQA-ap%VwcKchy~Sl>)ZW_wcJ>!4dutKol#WWh~V>SppA5m1KQ`W1S*y0V8DV)^6{% zA>LMRg97+Yq7(lXaQ(LJf|SkvPz?hNXnhX|bs-QFF}{2@Oo6r+k?+gWVO=Qz9D5)K zrJ+-o3>LR=X(LuunKnbEcJ~Z72iLF-w{*UC0bND$CK0g*^l%4d!6cW=a1}8cd?CQd zL2a}17jp2+lyD{Ywm0V1Brx__l@%qFxBhvT_gM!OZ>N`f@78#)S0^m+A8$ei2iHE= z&j1-v7wW7Y%GFHuQom>+8_Hq#Aon2K70cw|_*U_9DWLfB3v|tN8G67⋘O#cQsqp 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ⅇv4x!~a8JhO%7{0nE$2SE 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

    sl9(-n0hFGtEt_u|9ah2NpJ;rETnIbM4p@ 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

    >A^(GU+25ff1n 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%0D|?e+f;-TmMCuTD2NH~*iO|GRR3fB*15^ndrb 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 literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/poll-new-question.png b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/poll-new-question.png new file mode 100644 index 0000000000000000000000000000000000000000..aeec85e5ee6b12f20ba10fee9322a543438b59a3 GIT binary patch literal 59431 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�LXfiwmz-X}sH?Lv-qQ{Y z@+DD=`s2iDT<(l#iTw?+4O_raW(Krncql;(1_G9j+&5X5s{o2g4eg6H?mO|BeNu$o z7_opoI2m>={av;Bn&8jqx8INbb4W+l|w1ZZ!n2< zg{PN#m_S5dTqYZ#CM_Q%cvH1lK}X@C?#K9PEnK@9@lB$&Pl$WS2)6>pPqx__sOMXv z{vwWFl&@#-%+PXV%LpJhtP+lzmkyfn?#LxUW{^aPlvfaAok*0pS}Vk0S;Avq-k(M2 z(!Yh#hl|HqzO^Gdk~bDj$5M2h1M^z$b1w)1-VnZ=lq8?|)gjtQT4nvLxGxe8-|(9h zY5|1_N|F!O95i?KLq%H^(WSEchxmIwmz-L z^!$2m62!M0TrnZBo9=BAE_XUjCq+J+>_cuuItz7~$glKRvvi1ol!jA~Bm1#Wcr4h< z=D{gL@e#?*b*52&VV+2}&VjSg*d(!rrjWQPCI9vmPwI9t=Ej84&tr@cPinh&)ns!^m|yqv;Q zntA1a5SqKt{MA1(W{~zX^sW+TOC}`JW$pT$U2A-JN3MxND<+Y1&+Wv_O^Nm^f3-1s zCtm1LbnVJrq&ANRIm36Ky5rd2e16W~0!k}zr9xY;pF@(X*TqgAfrxtW&|_IiaxI@} z7S5jZkc|oiZhM*j#Gy`IPd$-W$!71iGu`Ky$2AXX)S1_Ur+LU15Ur8aG`X0XpxVWl{I$ zu^~AkBSq$c$5a#j>nG|NJNd6XfYnW|bD!aVMQy;1Hdt=B`S@=JJ(?fXS&09~=#&Sm%to-`PYx>VkQ|!@Fk6hv$)uQ@VNvB>sLLBXkd*z9kk;%5YyL%%nW>^oBg2noucXA zzTXA9I%=I7AF3Dm7JD7j30V{zI90u6@H_nIxZPzVt=mC#Z-gzWZK<0LFnG+!X5_j> z5=d~kDzn1Qmd|`mTNF=FKt!Q4rb<=rze#MjKTO~gBiFn)Ke)52Z7dt`xM=Gbua!+B z%G~dEF=Hb=W3^5yTd!pE)lNk}aF$9R=JsA_Q4*pva9{C3htjY>-`c8|rl$iaDT_(` z%D9{4w65wq$Euz1HNO~$azaRK5j9o^bBzKMFZewTq_`k!JBtK&^;gf)!2Lq^)a7|c z)84TUlo=bS8iJ^HUpIb*U2y3ap*WrnzG$#Buyyphp+8cROyKZ35TuxMrwKcTc37Gy zKD-lzXybVa?$QJ5hDPw+ram;jkFM8s?VTV4~ZA3eni7hP` zytzVVXa4MXv!v&hK>b+LD$+p_Xgad{8E>#8cBK zi*kB<1_eCg6{Q4eXbiCP> zuKYMf+`4ykj+lKr8T;IOwd8JtziV)AJOU;Urg@`cFbJggl!?<-iW{H{7~-lk=l$Fds7 zU$o*_T`eXYC((FVHJg$m!xocSNHr3*{5m&iBGU5CK?{ocf~v1b&)k zZ$IptzLu>pFcg&l6em;KbVwFSyyB2I_WJ$%I8JEWBZ9s!lRB$m@H<0607o}VnOT6$Hx6a&AMSiTbGa+LIS+^iH8|QgQVvasmtBJkhe^jc@C?3VpizEN6W>=X#`0$)XqJS)4tH zZbd%^An%EdC%41P^ACV(VzC1-`{W*rfa&7?;DR})=qlE}{D8P`3<$>1#OY(^_OYnr zX=Ghnhy*hQ)-)SF+Oy0MLdQzfRYsSm=)+&RgprY-c>|%MrN7;IH#aym%%MopxH4^t z5HQP`3<(Jry|l`CXL)K2N3pc|G31*aA*EmU;Zn!KMpk;ok4?!g zg;+q2jNsiJ)MgiQk#^PgP5QZk&cbk$%gC(K;}8~Weamry&S*j+dgfBz|QW#hKAdsdKJOTTusySZH2VMBH7t6aeLILxM zj8w0W_5->>$O31&n!T4+p^82`q&ZSKO|324ro2ajm!NUPNXsH(RH#BiDuHSbwQ<@M zjs0BV4%%PP{L_Fg%TRC*9r5yNc-(f?W#_qqF*!Kf!`_Z5p6kaH5WO&6kT^ROW1b6_ jmZTNCzU7yFID1QS|FiYPe2}Zgo%I?j0Oi_OHXr^6pVe?o literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/poll-question-example.png b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/poll-question-example.png new file mode 100644 index 0000000000000000000000000000000000000000..130586ab295bfcac8c6d5146910f7c95d91a9be6 GIT binary patch literal 19448 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ⅈ=oH16j}6uO0gSY>z@lpN+41S-sCq{aLQ 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

    I7=eIlp5@%2l&EHQn5S0j650)n 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 literal 0 HcmV?d00001 From da4cbd7292de7fa6f73e7d8adb970843ef8c8d07 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 9 May 2022 21:24:58 +0300 Subject: [PATCH 246/272] Update POST.md --- .../2022-05-09 v5_3_Preview/POST.md | 68 +++++++++++++++---- 1 file changed, 53 insertions(+), 15 deletions(-) diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index 9624b3a45b..fdd09cb536 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -48,7 +48,7 @@ In this section, I will introduce some major features released with this version * PWA Support for Blazor WASM & Angular UIs * Introduce the `Volo.Abp.Gdpr.Abstractions` package * Batch Publish Events from Outbox to the Event Bus -* Improvements on **eShopOnAbp** project +* Improvements on **eShopOnAbp** Project & E-Book Announcement * LeptonX Lite Documentations & Project Status & Roadmap * OpenIddict Module * Deployment Documentations @@ -60,15 +60,15 @@ We've created a new startup template named `app-nolayers` and [announced](https: *You can examine the screenshot below to see how to create an `app-nolayers` template from the ["Get Started"](https://abp.io/get-started) page.* -![Get Started Page / app-nolayers](./app-nolayers-get-started.png) +![](./app-nolayers-get-started.png) -### PWA Support for Blazor WASM & Angular UIs +### PWA Support for Startup Templates With v5.3 ABP supports PWA for Blazor WASM & Angular UIs. To create a startup template with the PWA support, you can use the `--pwa` parameter. Example: ```bash -abp new MyProgressiveWebApp -u blazor --pwa +abp new MyProgressiveWebApp -t app -u blazor --pwa ``` ### Introduce the `Volo.Abp.Gdpr.Abstractions` package @@ -77,7 +77,9 @@ A new `Volo.Abp.Gdpr.Abstractions` package is added to the framework. Anyone can use this package to use the pre-defined ETOs and implement GDPR-related operations for their own applications. -In that point, we are introducing the **GDPR Module** for the ABP Commercial customers and this module does the GDPR-related operations on behalf of you, such as *"Download/Delete Personal Data"*. I'll describe the **GDPR Module** later in this blog post. +In that point, we are introducing the **GDPR Module** for the ABP Commercial customers and this module does the GDPR-related operations on behalf of you, such as *"Download/Delete Personal Data"*. I'll describe the **GDPR Module** later in this blog post. + +> Please see the **GDPR Module** section below to learn more about this module. ### Batch Publish Events from Outbox to the Event Bus @@ -94,8 +96,17 @@ We've made some optimizations for the **Batch Event Publishing** in this version *You can see the optimization results above for "Batch Publishing (1000 Events)"* - -### Improvements on eShopOnAbp project +### Improvements on eShopOnAbp Project & E-Book Announcement + +There are couple of developments on **eShopOnAbp** project made in this version. You can see the brief description of the some of the improvements below: + +* Local certificates have been created to use while working in Kubernetes and also Helm Charts have been updated. See [#107](https://github.com/abpframework/eShopOnAbp/pull/107). +* Order Management page has been created. See [#92](https://github.com/abpframework/eShopOnAbp/pull/92). +* Database migration event handlers have been removed and "Distributed Locking" used for database migrations. See [#85](https://github.com/abpframework/eShopOnAbp/pull/85) and [#102](https://github.com/abpframework/eShopOnAbp/pull/102). +* Switched from Ocelot to YARP as gateway. See [#97](https://github.com/abpframework/eShopOnAbp/pull/97). + +We have exciting news to share with the community, we're working on an "ABP Microservice Development" e-book. In this book, we're using the **eShopOnAbp** project as a reference microservice solution and we're trying to explain our experiences during the microservice application development process through this project. + ### LeptonX Lite Documentations & Project Status & Roadmap @@ -129,7 +140,7 @@ In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Dep ### Other News * Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. See [#12189](https://github.com/abpframework/abp/pull/12189). -* Global Features was only accessible from C# code. From this version Global Features can be provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). +* Global Features was only accessible from the C# code. From this version Global Features can be also provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). * Get the user's detailed informations (name, surname and phone number) from external login. See [#12085](https://github.com/abpframework/abp/pull/12085). * Date Pipes for Angular. See [#11909](https://github.com/abpframework/abp/issues/11909). @@ -143,7 +154,9 @@ If you want to see more details, you can check [the release on GitHub](https://g With this version we are introducing the new **GDPR Module**. This was one of the most awaited features, so we've prioritized it and implemented it in this version. -GDPR Module is pre-installed in the [startup templates](https://docs.abp.io/en/commercial/5.3/startup-templates/index) for MVC. So, no need to manually install it. When you create a new startup template, you can directly use this module. We'll also implement this module for the other UI types as soon as possible and also add extra functionality such as "Cookie Consent" and more. Currently, there are two main functionality of this module and they are "Download Personal Data" and "Delete Personal Data". +GDPR Module is pre-installed in the [startup templates](https://docs.abp.io/en/commercial/5.3/startup-templates/index) for MVC. So, no need to manually install it. When you create a new startup template, you can directly use this module. We'll also implement this module for the other UI types as soon as possible and also add extra functionality such as "Cookie Consent" and more. + +Currently, there are two main functionality of this module and they are "Download Personal Data" and "Delete Personal Data". ![](./gdpr-user-menu.png) @@ -151,11 +164,20 @@ There is a "Personal Data" section in the user menu like in the screenshot above ![](./gdpr-personal-data-page.png) +After you've requested to download "Personal Data", you need to wait for 1 hour by default (it's configurable, you can use configure the related option). Because the GDPR module is developed by considering the distributed systems and therefore a specific time should be passed to ensure all the published events are handled. + ### CMS Kit Pro - Polling Feature -We've added the new **Polling** feature to the **CMS Kit Pro** module. This feature allows you to use a voting system in your application easily. +We've added the new **Polling** feature to the **CMS Kit Pro** module. This feature allows you to use a questionnaire/voting system in your application easily. + +You can create a question, define some options for it and the poll will be created for you. You can see the example poll in the screenshot below. + +![](./poll-question-example.png) + +Also there is a admin side of the Polling Feature. You can easily manage your polls in your admin (back-office) project. You can create, update, delete and show the results of the poll in the Polls page. + +![](./poll-questions.png) - ### OAuth Resource Owner Password as External Login Provider @@ -172,8 +194,8 @@ You can login by providing a username and password from an External Login Provid In this version, there are couple of enhancements and new features in **Suite** and they are listed briefly below: * It's now possible to create a **app-nolayers (Application - single layer)** template via Suite and also code-generation is supported for **app-nolayers** template with this version. -* Suite allows users to see and download their Suite logs. -* Suite allows to generate code via CLI. If you have JSON file that contains a code block, like your entity, you can use the `abp suite generate` command to generate CRUD pages. +* With this version, Suite allows users to see and download Suite logs. +* Suite allows to generate code via CLI. If you have JSON file that contains code blocks, like entity configurations, you can use the `abp suite generate` command to generate CRUD pages based on it. *Example:* @@ -190,10 +212,26 @@ We've organized a webinar for Suite and in this webinar, we've talked about ABP You can watch the event from [here](https://www.youtube.com/watch?v=RFArBh60RSA&t=3s), if you haven't watched yet. ### Docker Compose Configurations for Single Layer Startup Template - + +Dockerfiles, docker-compose files and build script files have been added to the Single Layer Startup Template (app-nolayers) with this version. + +In this way, applications created with this template can now be deployed more easily. ### Microservice Solution Enhancements - + +There are couple of enhancements made in the Microservice Solution. You can see the list of these enhancements: + +* Initial migration on the template has been updated for the small improvement that made in the **Language Management** module. +* Database migration event handlers have been removed and "Distributed Locking" used for the database migrations. + +### PWA Support for the Application Pro Template + +Application Pro template also supports the PWA for Blazor WASM & Angular UIS. To create a startup template with the PWA support, you can use the `--pwa` parameter. +Example: + +```bash +abp new MyProgressiveWebApp -t app-pro -u blazor --pwa +``` ## Community News From 3f68d978ebac70290ff9e8d8c6d9eea5f893ce69 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 9 May 2022 22:26:17 +0300 Subject: [PATCH 247/272] Update POST.md --- .../2022-05-09 v5_3_Preview/POST.md | 72 +++++++++---------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index fdd09cb536..d339a04273 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -38,25 +38,25 @@ You can use any IDE that supports .NET 6.x, like **[Visual Studio 2022](https:// There is only one breaking changes in this version upgrade and it's explained below. -* Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. So, you need to upgrade your projects that uses **AutoMapper** library (probably your `*.Application` project) to **netstandard2.1** or **net6** if it's **netstandard2.0**. See [#12189](https://github.com/abpframework/abp/pull/12189). +* Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. So, you need to upgrade your projects that use the **AutoMapper** library (your `*.Application` project etc.) to **netstandard2.1** or **net6**. See [#12189](https://github.com/abpframework/abp/pull/12189). ## What's New with ABP Framework 5.3? -In this section, I will introduce some major features released with this version. Here, a brief list of titles explained in the next sections: +In this section, I will introduce some major features released with this version. Here is a brief list of titles explained in the next sections: * Single-layer option added to the [*Get Started*](https://abp.io/get-started) page -* PWA Support for Blazor WASM & Angular UIs +* PWA Support for Startup Templates * Introduce the `Volo.Abp.Gdpr.Abstractions` package * Batch Publish Events from Outbox to the Event Bus * Improvements on **eShopOnAbp** Project & E-Book Announcement * LeptonX Lite Documentations & Project Status & Roadmap * OpenIddict Module * Deployment Documentations -* Other news... +* Other news ### Single-layer Option on *Get Started* Page -We've created a new startup template named `app-nolayers` and [announced](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) it in the previous version. In this version, we've added this startup template option to the *Get Started* page. +We've created a new startup template named `app-nolayers` and [announced](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) it in the previous version. In this version, we've also added this startup template option to the *Get Started* page. *You can examine the screenshot below to see how to create an `app-nolayers` template from the ["Get Started"](https://abp.io/get-started) page.* @@ -98,12 +98,12 @@ We've made some optimizations for the **Batch Event Publishing** in this version ### Improvements on eShopOnAbp Project & E-Book Announcement -There are couple of developments on **eShopOnAbp** project made in this version. You can see the brief description of the some of the improvements below: +There are a couple of developments on the **eShopOnAbp** project made in this version. You can see the brief descriptions of the some of the improvements below: * Local certificates have been created to use while working in Kubernetes and also Helm Charts have been updated. See [#107](https://github.com/abpframework/eShopOnAbp/pull/107). -* Order Management page has been created. See [#92](https://github.com/abpframework/eShopOnAbp/pull/92). +* The Order Management page has been created. See [#92](https://github.com/abpframework/eShopOnAbp/pull/92). * Database migration event handlers have been removed and "Distributed Locking" used for database migrations. See [#85](https://github.com/abpframework/eShopOnAbp/pull/85) and [#102](https://github.com/abpframework/eShopOnAbp/pull/102). -* Switched from Ocelot to YARP as gateway. See [#97](https://github.com/abpframework/eShopOnAbp/pull/97). +* Switched from Ocelot to YARP as the gateway. See [#97](https://github.com/abpframework/eShopOnAbp/pull/97). We have exciting news to share with the community, we're working on an "ABP Microservice Development" e-book. In this book, we're using the **eShopOnAbp** project as a reference microservice solution and we're trying to explain our experiences during the microservice application development process through this project. @@ -114,7 +114,7 @@ It is finally here, we've released the **1.0.0-beta.1** version for the **Lepton ![](./leptonx-lite-documentations.png) -Lepton X Lite documents have been written for the three UI types within this version. You can see the related documentation from the screenshot above. You can follow these documentations and try the new **LeptonX Lite Theme**. +Lepton X Lite documents have been written for the three UI types within this version. You can see the related documentation from the screenshot above. You can follow these documents and try the new **LeptonX Lite Theme**. We don't suggest using the **beta.1** version on production but we highly demand you to test the **LeptonX Lite** and provide feedback to us. It's really important for us to be able to release a more stable version. Thanks in advance. @@ -122,49 +122,48 @@ For the following versions (beta.2 and RC versions), we will focus on; * Fixing the reported bugs from the community * Providing documentations as much as possible -* Adding new custom pages to demo +* Adding new custom pages to the demo ### OpenIddict Module ### Deployment Documentations -Deploying an ABP based application is not so different than deploying any .NET or ASP.NET Core application. You can deploy it to a cloud provider (e.g. Azure, AWS, Google Could) or on-premise server, IIS or any other web server. However, we wanted to prepare a "Deployment Guide" to mention the important points and considerations. +Deploying an ABP-based application is not so different than deploying any .NET or ASP.NET Core application. You can deploy it to a cloud provider (e.g. Azure, AWS, Google Could) or on-premise server, IIS or any other web server. However, we wanted to prepare a "Deployment Guide" to mention the important points and considerations. ![](./deployment-documentation.png) -We've created two new deployment documentations, you can find them under the ["Deployment"](https://docs.abp.io/en/abp/5.3/Deployment/Index) section of our documentation website. +We've created two new deployment documents, you can find them under the ["Deployment"](https://docs.abp.io/en/abp/5.3/Deployment/Index) section of our documentation website. -In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Deployment/Clustered-Environment) documentation, we've documented the topics that you should consider when you are developing your application to a clustered environment and explains how you can deal with these topics in your ABP based application. +In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Deployment/Clustered-Environment) documentation, we've documented the topics that you should consider when you are developing your application to a clustered environment and explained how you can deal with these topics in your ABP-based application. ### Other News -* Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. See [#12189](https://github.com/abpframework/abp/pull/12189). -* Global Features was only accessible from the C# code. From this version Global Features can be also provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). -* Get the user's detailed informations (name, surname and phone number) from external login. See [#12085](https://github.com/abpframework/abp/pull/12085). +* Global Features was only accessible from the C# code. From this version, Global Features can be also provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). +* Get the user's detailed information (name, surname and phone number) from external login. See [#12085](https://github.com/abpframework/abp/pull/12085). * Date Pipes for Angular. See [#11909](https://github.com/abpframework/abp/issues/11909). -If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.3.0-rc.1), that contains a list of all issues and pull requests closed with this version. +If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.3.0-rc.1), which contains a list of all issues and pull requests closed with this version. ## What's New with ABP Commercial 5.3? ### GDPR Module -> **GDPR (General Data Protection Regulation)** is a regulation in EU law on data protection and known as the toughest privacy and security law in the world. GDPR applies to any organisation operating within the EU, as well as any organisations outside of the EU which offer goods or services to customers or businesses in the EU. +> **GDPR (General Data Protection Regulation)** is a regulation in EU law on data protection and known as the toughest privacy and security law in the world. GDPR applies to any organization operating within the EU, as well as any organizations outside of the EU which offer goods or services to customers or businesses in the EU. -With this version we are introducing the new **GDPR Module**. This was one of the most awaited features, so we've prioritized it and implemented it in this version. +With this version, we are introducing the new **GDPR Module**. This was one of the most awaited features, so we've prioritized it and implemented it in this version. GDPR Module is pre-installed in the [startup templates](https://docs.abp.io/en/commercial/5.3/startup-templates/index) for MVC. So, no need to manually install it. When you create a new startup template, you can directly use this module. We'll also implement this module for the other UI types as soon as possible and also add extra functionality such as "Cookie Consent" and more. -Currently, there are two main functionality of this module and they are "Download Personal Data" and "Delete Personal Data". +Currently, there are two main functions of this module and they are "Download Personal Data" and "Delete Personal Data". ![](./gdpr-user-menu.png) -There is a "Personal Data" section in the user menu like in the screenshot above and when you click to this section, you'll be redirected to the "Personal Data" page. On that page, you can either request to "Download Personal Data" or "Delete Personal Data". +There is a "Personal Data" section in the user menu like in the screenshot above and when you click on this section, you'll be redirected to the "Personal Data" page. On that page, you can either request to "Download Personal Data" or "Delete Personal Data". ![](./gdpr-personal-data-page.png) -After you've requested to download "Personal Data", you need to wait for 1 hour by default (it's configurable, you can use configure the related option). Because the GDPR module is developed by considering the distributed systems and therefore a specific time should be passed to ensure all the published events are handled. +After you've requested to download "Personal Data", you need to wait for 1 hour by default (you can configure the related option). Because the GDPR module is developed by considering the distributed systems and therefore a specific time should be passed to ensure all the published events are handled and all personal data is collected. ### CMS Kit Pro - Polling Feature @@ -174,16 +173,15 @@ You can create a question, define some options for it and the poll will be creat ![](./poll-question-example.png) -Also there is a admin side of the Polling Feature. You can easily manage your polls in your admin (back-office) project. You can create, update, delete and show the results of the poll in the Polls page. +Also, there is an admin side of the Polling Feature. You can easily manage your polls in your admin (back-office) project. You can create, update, delete and show the results of the poll on the Polls page. ![](./poll-questions.png) - ### OAuth Resource Owner Password as External Login Provider > The Resource Owner Password flow allows for the exchanging of the user name and password of a user for an access token. When using the resource owner password credentials grant, the user provides the credentials (user name and password) directly to the application. -You can login by providing a username and password from an External Login Provider. +Thanks to that you can login by providing a username and password from an External Login Provider. *Example: Use OAuth external login provider with Keycloak* @@ -191,11 +189,11 @@ You can login by providing a username and password from an External Login Provid ### Suite New Features & Enhancements -In this version, there are couple of enhancements and new features in **Suite** and they are listed briefly below: +In this version, there are some enhancements and new features in **Suite** and they are listed briefly below: -* It's now possible to create a **app-nolayers (Application - single layer)** template via Suite and also code-generation is supported for **app-nolayers** template with this version. -* With this version, Suite allows users to see and download Suite logs. -* Suite allows to generate code via CLI. If you have JSON file that contains code blocks, like entity configurations, you can use the `abp suite generate` command to generate CRUD pages based on it. +* It's now possible to create an **app-nolayers (Application - single layer)** template via Suite and also code-generation is supported for the **app-nolayers** template with this version. +* With this version, Suite allows users to see and download their logs. +* Suite allows generating code via CLI. If you have JSON file that contains code blocks, like entity configurations, you can use the `abp suite generate` command to generate CRUD pages based on it. *Example:* @@ -209,19 +207,19 @@ abp suite generate -e C:\Users\.suite\entities\Country.json -s C:\Users\my-proj\ We've organized a webinar for Suite and in this webinar, we've talked about ABP Suite's capabilities, important features and more... -You can watch the event from [here](https://www.youtube.com/watch?v=RFArBh60RSA&t=3s), if you haven't watched yet. +You can watch the event from [here](https://www.youtube.com/watch?v=RFArBh60RSA&t=3s), if you haven't watched it yet. ### Docker Compose Configurations for Single Layer Startup Template Dockerfiles, docker-compose files and build script files have been added to the Single Layer Startup Template (app-nolayers) with this version. -In this way, applications created with this template can now be deployed more easily. +In this way, applications created with this template now can be deployed more easily. ### Microservice Solution Enhancements -There are couple of enhancements made in the Microservice Solution. You can see the list of these enhancements: +There are some enhancements made in the Microservice Solution. You can see the list of these enhancements: -* Initial migration on the template has been updated for the small improvement that made in the **Language Management** module. +* Initial migration on the template has been updated for the small improvement that was made in the **Language Management** module. * Database migration event handlers have been removed and "Distributed Locking" used for the database migrations. ### PWA Support for the Application Pro Template @@ -237,7 +235,7 @@ abp new MyProgressiveWebApp -t app-pro -u blazor --pwa ### New ABP Community Posts -* [Anto Subash](https://twitter.com/antosubash) created a series named ["Microservice with ABP"](https://blog.antosubash.com/posts/abp-microservice-series) and shared couple of video posts about the ABP Microservice solution. +* [Anto Subash](https://twitter.com/antosubash) created a series named ["Microservice with ABP"](https://blog.antosubash.com/posts/abp-microservice-series) and shared a couple of video posts about the ABP Microservice solution. * [Francisco Kadzi](https://github.com/CiscoNinja) has created his first ABP Community article that shows how to ["Customize ABP Angular Application UI with AdminLTE"](https://community.abp.io/posts/customize-abp-angular-application-ui-with-adminlte.-7qu1m67s). * [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) has created an article to show how to ["Dealing with Multiple Implementations of a Service in ASP.NET Core & ABP Dependency Injection"](https://community.abp.io/posts/dealing-with-multiple-implementations-of-a-service-in-asp.net-core-abp-dependency-injection-ysfp4ho2) with examples. * [Manoj Kumar](https://community.abp.io/members/manojkumar.t@shloklabs.com) submitted a new article about how to use "ABP authentication in a Flutter application". It was a frequently asked topic, which you can read [here](https://community.abp.io/posts/flutter-web-authentication-from-abp-mp6l2ehx). @@ -247,7 +245,7 @@ abp new MyProgressiveWebApp -t app-pro -u blazor --pwa ![](./community-talks-2022.4.png) -We've [asked you to pick the topic of the next Community Talks](https://twitter.com/abpframework/status/1514567683072745474?s=20&t=rJfHrB3DYDNsk2EXS8zBBQ) and you've chosen the "How to contribute to open source ABP Framework?" for the next talk topic. So, in this Community Talk, we will be talking about "How to contribute to ABP Framework" with one of the top contributors [Ismail Yılmaz](https://github.com/iyilm4z). The event will be on **May 10, 2022, at 17:00 (UTC)** on YouTube. +We've [asked you to pick the topic of the next Community Talks](https://twitter.com/abpframework/status/1514567683072745474?s=20&t=rJfHrB3DYDNsk2EXS8zBBQ) and you've chosen the "How to contribute to open source ABP Framework?" for the next talk topic. So, in this Community Talk, we will be talking about "How to contribute to ABP Framework" with one of the top contributors of the ABP Framework, [Ismail Yılmaz](https://github.com/iyilm4z). The event will be on **May 10, 2022, at 17:00 (UTC)** on YouTube. > You can register for the event from [here](https://kommunity.com/volosoft/events/abp-community-talks-20224-how-to-contribute-to-the-open-source-abp-framework-d9b50664), if you haven't registered yet. @@ -255,10 +253,8 @@ You can also [subscribe to the Volosoft channel](https://www.youtube.com/channel ### Discord Server -We've created an official ABP Discord server so the ABP Community can interact with each other. +We've created an official ABP Discord server so the ABP Community can interact with each other and create a blog-post to introduce it. You can read the [ABP Discord Server announcement post](https://blog.abp.io/abp/Official-ABP-Discord-Server-is-Here) to learn more about ABP Discord Server. Thanks to the ABP Community, **700+** people joined our Discord Server so far and it grows every day. -> You can read the [ABP Discord Server announcement post](https://blog.abp.io/abp/Official-ABP-Discord-Server-is-Here) to learn more about ABP Discord Server. - You can join our Discord Server from [here](https://discord.gg/abp), if you haven't yet. \ No newline at end of file From 6dd6f249536261c95317fbcf86f46af46c7e2571 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 10 May 2022 09:21:15 +0800 Subject: [PATCH 248/272] Add [DisableAuditing] to TenantCreateDto.AdminPassword --- .../Volo/Abp/TenantManagement/TenantCreateDto.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs index d357b01b5e..887d14bc99 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs @@ -1,4 +1,5 @@ using System.ComponentModel.DataAnnotations; +using Volo.Abp.Auditing; namespace Volo.Abp.TenantManagement; @@ -11,5 +12,6 @@ public class TenantCreateDto : TenantCreateOrUpdateDtoBase [Required] [MaxLength(128)] + [DisableAuditing] public virtual string AdminPassword { get; set; } } From 4f5ef12b75d1e4ac229f3ff25c92f6a67a39e8ea Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Tue, 10 May 2022 07:56:33 +0300 Subject: [PATCH 249/272] Update POST.md --- .../Blog-Posts/2022-05-09 v5_3_Preview/POST.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index d339a04273..78210d56df 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -98,7 +98,7 @@ We've made some optimizations for the **Batch Event Publishing** in this version ### Improvements on eShopOnAbp Project & E-Book Announcement -There are a couple of developments on the **eShopOnAbp** project made in this version. You can see the brief descriptions of the some of the improvements below: +There are some developments on the **eShopOnAbp** project made in this version. You can see the brief descriptions of the some of the improvements below: * Local certificates have been created to use while working in Kubernetes and also Helm Charts have been updated. See [#107](https://github.com/abpframework/eShopOnAbp/pull/107). * The Order Management page has been created. See [#92](https://github.com/abpframework/eShopOnAbp/pull/92). @@ -107,6 +107,11 @@ There are a couple of developments on the **eShopOnAbp** project made in this ve We have exciting news to share with the community, we're working on an "ABP Microservice Development" e-book. In this book, we're using the **eShopOnAbp** project as a reference microservice solution and we're trying to explain our experiences during the microservice application development process through this project. +We're planning to create this book in nine chapters and make it available after the three chapter is written. You will be able to download this free e-book from the [abp.io](https://abp.io/) website. You can see the title of these three chapters below: + +- Chapter 1 : Introduction (This chapter explains the main problems of microservice development and the purpose of the eShopOnAbp solution.) +- Chapter 2 : Running the Solution (This chapter explains the various ways to run the solution such as using the Microsoft's Tye tool.) +- Chapter 3 : Understanding the authentication system (This chapter explains the authentication system used in the **eShopOnAbp** solution.) ### LeptonX Lite Documentations & Project Status & Roadmap @@ -124,9 +129,18 @@ For the following versions (beta.2 and RC versions), we will focus on; * Providing documentations as much as possible * Adding new custom pages to the demo - ### OpenIddict Module +We have [announced the plan of replacing the IdentityServer](https://github.com/abpframework/abp/issues/11989). ABP currently uses **IdentityServer4** to add **OAuth** features as built-in on the server-side. However, since *IdentityServer4's support ends at the end of the year 2022*. Its replacement is Duende IdentityServer, which is not a free software anymore. (see [more](https://blog.duendesoftware.com/posts/20220111_fair_trade/)) + +Therefore, we've decided to completely drop the **IdentityServer4** from the ABP platform and implementing the [OpenIddict](https://github.com/openiddict/openiddict-core) and making it installed into the startup templates. + +We've implemented both open source and commercial OpenIddict modules, we plan to remove Identity Server and replace it with OpenIddict for template projects in **v5.4**. Please check [#12084](https://github.com/abpframework/abp/pull/12084) to see the development made on the open-source side. + +We're creating the documentation for OpenIddict Module, if you want to have general knowledge about this module, you can check the documentation from [here](https://github.com/abpframework/abp/blob/dev/docs/en/Modules/OpenIddict.md). Currently, this is a draft documentation but it gives overall knowledge about OpenIddict Module, we'll complete this documentation in v5.4 and you'll be able to read it completely. + +Currently, we are also working on Keycloak integration possibilities in parallel to the OpenIddict integration research and we've prepared some samples that you can examine. You can see [#154](https://github.com/abpframework/abp-samples/pull/154) and [#158](https://github.com/abpframework/abp-samples/pull/158). + ### Deployment Documentations Deploying an ABP-based application is not so different than deploying any .NET or ASP.NET Core application. You can deploy it to a cloud provider (e.g. Azure, AWS, Google Could) or on-premise server, IIS or any other web server. However, we wanted to prepare a "Deployment Guide" to mention the important points and considerations. From 590d669defca7c46155664b55f06d5c5f91f62f0 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Tue, 10 May 2022 08:04:39 +0300 Subject: [PATCH 250/272] Update POST.md --- docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index 78210d56df..abf4b62af0 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -50,9 +50,9 @@ In this section, I will introduce some major features released with this version * Batch Publish Events from Outbox to the Event Bus * Improvements on **eShopOnAbp** Project & E-Book Announcement * LeptonX Lite Documentations & Project Status & Roadmap -* OpenIddict Module +* OpenIddict Module & Keycloack Integration * Deployment Documentations -* Other news +* Other News ### Single-layer Option on *Get Started* Page @@ -129,7 +129,7 @@ For the following versions (beta.2 and RC versions), we will focus on; * Providing documentations as much as possible * Adding new custom pages to the demo -### OpenIddict Module +### OpenIddict Module & Keycloack Integration We have [announced the plan of replacing the IdentityServer](https://github.com/abpframework/abp/issues/11989). ABP currently uses **IdentityServer4** to add **OAuth** features as built-in on the server-side. However, since *IdentityServer4's support ends at the end of the year 2022*. Its replacement is Duende IdentityServer, which is not a free software anymore. (see [more](https://blog.duendesoftware.com/posts/20220111_fair_trade/)) @@ -156,6 +156,7 @@ In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Dep * Global Features was only accessible from the C# code. From this version, Global Features can be also provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). * Get the user's detailed information (name, surname and phone number) from external login. See [#12085](https://github.com/abpframework/abp/pull/12085). * Date Pipes for Angular. See [#11909](https://github.com/abpframework/abp/issues/11909). +* A bug has been reported to us about a plain password leak on the `AbpAuditLogActions` table for the **TenantCreateDto.AdminPassword**. We've [fixed this problem](https://github.com/abpframework/abp/pull/12499), and it will be available in the next release. If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.3.0-rc.1), which contains a list of all issues and pull requests closed with this version. @@ -267,7 +268,7 @@ You can also [subscribe to the Volosoft channel](https://www.youtube.com/channel ### Discord Server -We've created an official ABP Discord server so the ABP Community can interact with each other and create a blog-post to introduce it. You can read the [ABP Discord Server announcement post](https://blog.abp.io/abp/Official-ABP-Discord-Server-is-Here) to learn more about ABP Discord Server. +We've created an official ABP Discord server so the ABP Community can interact with each other and create a blog-post to introduce it. You can read the [ABP Discord Server announcement post](https://blog.abp.io/abp/Official-ABP-Discord-Server-is-Here) to learn more about ABP Discord Server. Thanks to the ABP Community, **700+** people joined our Discord Server so far and it grows every day. From 93245f25fbfdab82040a115bae0402f45d8f440c Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 10 May 2022 13:54:06 +0800 Subject: [PATCH 251/272] Remove description of `AllowTenantsToChangeEmailSettings` feature. --- .../SettingManagementFeatureDefinitionProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs index 23f0c071fd..3c7b3cd4a7 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs @@ -23,7 +23,7 @@ public class SettingManagementFeatureDefinitionProvider : FeatureDefinitionProvi SettingManagementFeatures.AllowTenantsToChangeEmailSettings, "false", L("Feature:AllowTenantsToChangeEmailSettings"), - L("Feature:AllowTenantsToChangeEmailSettingsDescription"), + null, new ToggleStringValueType(), isAvailableToHost: false); } From 0c2898b2f0d987fddbd0258790565e788f407400 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Tue, 10 May 2022 09:54:25 +0300 Subject: [PATCH 252/272] Update POST.md --- docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index abf4b62af0..e1b0afaa76 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -252,6 +252,8 @@ abp new MyProgressiveWebApp -t app-pro -u blazor --pwa * [Anto Subash](https://twitter.com/antosubash) created a series named ["Microservice with ABP"](https://blog.antosubash.com/posts/abp-microservice-series) and shared a couple of video posts about the ABP Microservice solution. * [Francisco Kadzi](https://github.com/CiscoNinja) has created his first ABP Community article that shows how to ["Customize ABP Angular Application UI with AdminLTE"](https://community.abp.io/posts/customize-abp-angular-application-ui-with-adminlte.-7qu1m67s). +* [Jack Fistelmann](https://github.com/nebula2) has created an article to introduce a helpful project extension to speed up development on Visual Studio. You can read the article [here](https://community.abp.io/posts/using-switch-startup-project-extension-for-visual-studio-52yyw27v). +* [Jack Fistelmann](https://github.com/nebula2) has also created an article to show how you can generate PDF files with the `Sycyber.Core` package in an ABP-based applications. You can read from [here](https://community.abp.io/posts/generate-pdfs-in-an-abp-framework-project-using-scryber.core-x9yh1vfa). * [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) has created an article to show how to ["Dealing with Multiple Implementations of a Service in ASP.NET Core & ABP Dependency Injection"](https://community.abp.io/posts/dealing-with-multiple-implementations-of-a-service-in-asp.net-core-abp-dependency-injection-ysfp4ho2) with examples. * [Manoj Kumar](https://community.abp.io/members/manojkumar.t@shloklabs.com) submitted a new article about how to use "ABP authentication in a Flutter application". It was a frequently asked topic, which you can read [here](https://community.abp.io/posts/flutter-web-authentication-from-abp-mp6l2ehx). * [Engincan Veske](https://twitter.com/EngincanVeske) created a new Community Article to show "Concurrency Check/Control in ABP". You can read from [here](https://community.abp.io/posts/handle-concurrency-with-ef-core-in-an-abp-framework-project-with-asp.net-core-mvc-jlkc3w8f). From 21213cf528387dcfecd435205ecead0a956db4b3 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Tue, 10 May 2022 10:13:40 +0300 Subject: [PATCH 253/272] Update CLI.md --- docs/en/CLI.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 8931220705..01f7a92b2f 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -92,8 +92,10 @@ For more samples, go to [ABP CLI Create Solution Samples](CLI-New-Command-Sample * `--tiered`: Creates a tiered solution where Web and Http API layers are physically separated. If not specified, it creates a layered solution which is less complex and suitable for most scenarios. * `angular`: Angular UI. There are some additional options for this template: * `--separate-identity-server`: The Identity Server project comes as a separate project and runs at a different endpoint. It separates the Identity Server from the API Host application. If not specified, you will have a single endpoint in the server side. + * `--pwa`: Specifies the project as Progressive Web Application. * `blazor`: Blazor UI. There are some additional options for this template: * `--separate-identity-server`The Identity Server project comes as a separate project and runs at a different endpoint. It separates the Identity Server from the API Host application. If not specified, you will have a single endpoint in the server side. + * `--pwa`: Specifies the project as Progressive Web Application. * `blazor-server`: Blazor Server UI. There are some additional options for this template: * `--tiered`: The Identity Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *IdentityServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. * `none`: Without UI. No front-end layer will be created. There are some additional options for this template: @@ -115,7 +117,6 @@ For more samples, go to [ABP CLI Create Solution Samples](CLI-New-Command-Sample * `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers: * `ef`: Entity Framework Core. * `mongodb`: MongoDB. - * `--pwa`: Specifies to Configure Angular or Blazor WebAssembly project as Progressive Web Application. * `--output-folder` or `-o`: Specifies the output folder. Default value is the current directory. * `--version` or `-v`: Specifies the ABP & template version. It can be a [release tag](https://github.com/abpframework/abp/releases) or a [branch name](https://github.com/abpframework/abp/branches). Uses the latest release if not specified. Most of the times, you will want to use the latest version. * `--preview`: Use latest preview version. From 70e0e1cf37c6f8d021d76c7079587af693166519 Mon Sep 17 00:00:00 2001 From: braim23 <94292623+braim23@users.noreply.github.com> Date: Tue, 10 May 2022 11:39:54 +0300 Subject: [PATCH 254/272] quick fix --- .../2022-05-09 v5_3_Preview/POST.md | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index e1b0afaa76..5349eeecf3 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -8,7 +8,7 @@ Please try this version and provide feedback for a more stable ABP version 5.3! ## Get Started with the 5.3 RC -Follow the steps below to try the version 5.3.0 RC today: +Follow the steps below to try version 5.3.0 RC today: 1) **Upgrade** the ABP CLI to version `5.3.0-rc.1` using a command line terminal: @@ -36,7 +36,7 @@ You can use any IDE that supports .NET 6.x, like **[Visual Studio 2022](https:// ## Migration Notes & Breaking Changes -There is only one breaking changes in this version upgrade and it's explained below. +There is only one breaking change in this version upgrade and it's explained below. * Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. So, you need to upgrade your projects that use the **AutoMapper** library (your `*.Application` project etc.) to **netstandard2.1** or **net6**. See [#12189](https://github.com/abpframework/abp/pull/12189). @@ -46,7 +46,7 @@ In this section, I will introduce some major features released with this version * Single-layer option added to the [*Get Started*](https://abp.io/get-started) page * PWA Support for Startup Templates -* Introduce the `Volo.Abp.Gdpr.Abstractions` package +* Introduced the `Volo.Abp.Gdpr.Abstractions` package * Batch Publish Events from Outbox to the Event Bus * Improvements on **eShopOnAbp** Project & E-Book Announcement * LeptonX Lite Documentations & Project Status & Roadmap @@ -64,26 +64,26 @@ We've created a new startup template named `app-nolayers` and [announced](https: ### PWA Support for Startup Templates -With v5.3 ABP supports PWA for Blazor WASM & Angular UIs. To create a startup template with the PWA support, you can use the `--pwa` parameter. +ABP v5.3 now supports PWA for Blazor WASM & Angular UIs. To create a startup template with the PWA support, you can use the `--pwa` parameter. Example: ```bash abp new MyProgressiveWebApp -t app -u blazor --pwa ``` -### Introduce the `Volo.Abp.Gdpr.Abstractions` package +### Introducing the `Volo.Abp.Gdpr.Abstractions` Package -A new `Volo.Abp.Gdpr.Abstractions` package is added to the framework. +A new `Volo.Abp.Gdpr.Abstractions` package has been added to the framework. Anyone can use this package to use the pre-defined ETOs and implement GDPR-related operations for their own applications. -In that point, we are introducing the **GDPR Module** for the ABP Commercial customers and this module does the GDPR-related operations on behalf of you, such as *"Download/Delete Personal Data"*. I'll describe the **GDPR Module** later in this blog post. +At that point, we are introducing the **GDPR Module** for the ABP Commercial customers and this module does the GDPR-related operations on behalf of you, such as *"Download/Delete Personal Data"*. I'll describe the **GDPR Module** later in this blog post. > Please see the **GDPR Module** section below to learn more about this module. ### Batch Publish Events from Outbox to the Event Bus -We've introduced the "Transactional Outbox & Inbox Patterns" in [**v5.0**](https://blog.abp.io/abp/ABP-IO-Platform-5.0-RC-1-Has-Been-Released), it was one of the most awaited features by distributed software developers. +We introduced the "Transactional Outbox & Inbox Patterns" in [**ABP v5.0**](https://blog.abp.io/abp/ABP-IO-Platform-5.0-RC-1-Has-Been-Released), it was one of the most awaited features by several software developers. We've made some optimizations for the **Batch Event Publishing** in this version, you can examine the related development from [here](https://github.com/abpframework/abp/pull/11243). After the optimization, the results are impressive. @@ -98,19 +98,19 @@ We've made some optimizations for the **Batch Event Publishing** in this version ### Improvements on eShopOnAbp Project & E-Book Announcement -There are some developments on the **eShopOnAbp** project made in this version. You can see the brief descriptions of the some of the improvements below: +There are some developments on the **eShopOnAbp** project made in this version. You can see the brief descriptions of some of the improvements below: * Local certificates have been created to use while working in Kubernetes and also Helm Charts have been updated. See [#107](https://github.com/abpframework/eShopOnAbp/pull/107). * The Order Management page has been created. See [#92](https://github.com/abpframework/eShopOnAbp/pull/92). -* Database migration event handlers have been removed and "Distributed Locking" used for database migrations. See [#85](https://github.com/abpframework/eShopOnAbp/pull/85) and [#102](https://github.com/abpframework/eShopOnAbp/pull/102). +* Database migration event handlers have been removed and "Distributed Locking" is now used for database migrations. See [#85](https://github.com/abpframework/eShopOnAbp/pull/85) and [#102](https://github.com/abpframework/eShopOnAbp/pull/102). * Switched from Ocelot to YARP as the gateway. See [#97](https://github.com/abpframework/eShopOnAbp/pull/97). We have exciting news to share with the community, we're working on an "ABP Microservice Development" e-book. In this book, we're using the **eShopOnAbp** project as a reference microservice solution and we're trying to explain our experiences during the microservice application development process through this project. -We're planning to create this book in nine chapters and make it available after the three chapter is written. You will be able to download this free e-book from the [abp.io](https://abp.io/) website. You can see the title of these three chapters below: +We're planning to create this book in nine chapters and make it available after the third chapter is written. You will be able to download this free e-book from the [abp.io](https://abp.io/) website. You can see the title of these three chapters below: - Chapter 1 : Introduction (This chapter explains the main problems of microservice development and the purpose of the eShopOnAbp solution.) -- Chapter 2 : Running the Solution (This chapter explains the various ways to run the solution such as using the Microsoft's Tye tool.) +- Chapter 2 : Running the Solution (This chapter explains the various ways to run the solution such as using Microsoft's Tye tool.) - Chapter 3 : Understanding the authentication system (This chapter explains the authentication system used in the **eShopOnAbp** solution.) ### LeptonX Lite Documentations & Project Status & Roadmap @@ -121,9 +121,9 @@ It is finally here, we've released the **1.0.0-beta.1** version for the **Lepton Lepton X Lite documents have been written for the three UI types within this version. You can see the related documentation from the screenshot above. You can follow these documents and try the new **LeptonX Lite Theme**. -We don't suggest using the **beta.1** version on production but we highly demand you to test the **LeptonX Lite** and provide feedback to us. It's really important for us to be able to release a more stable version. Thanks in advance. +We don't suggest using the **beta.1** version on production, we highly demand you to test **LeptonX Lite** and provide feedback to us. It's really important for us to be able to release a more stable version. Thanks in advance. -For the following versions (beta.2 and RC versions), we will focus on; +For the following versions (beta.2 and RC versions), we will focus on: * Fixing the reported bugs from the community * Providing documentations as much as possible @@ -133,11 +133,11 @@ For the following versions (beta.2 and RC versions), we will focus on; We have [announced the plan of replacing the IdentityServer](https://github.com/abpframework/abp/issues/11989). ABP currently uses **IdentityServer4** to add **OAuth** features as built-in on the server-side. However, since *IdentityServer4's support ends at the end of the year 2022*. Its replacement is Duende IdentityServer, which is not a free software anymore. (see [more](https://blog.duendesoftware.com/posts/20220111_fair_trade/)) -Therefore, we've decided to completely drop the **IdentityServer4** from the ABP platform and implementing the [OpenIddict](https://github.com/openiddict/openiddict-core) and making it installed into the startup templates. +Therefore, we've decided to completely drop the **IdentityServer4** from the ABP platform and implement the [OpenIddict](https://github.com/openiddict/openiddict-core) and install onto the startup templates. -We've implemented both open source and commercial OpenIddict modules, we plan to remove Identity Server and replace it with OpenIddict for template projects in **v5.4**. Please check [#12084](https://github.com/abpframework/abp/pull/12084) to see the development made on the open-source side. +We've implemented both open source and commercial OpenIddict modules, we plan to remove Identity Server and replace it with OpenIddict for template projects in **ABP v5.4**. Please check [#12084](https://github.com/abpframework/abp/pull/12084) to see the development made on the open-source side. -We're creating the documentation for OpenIddict Module, if you want to have general knowledge about this module, you can check the documentation from [here](https://github.com/abpframework/abp/blob/dev/docs/en/Modules/OpenIddict.md). Currently, this is a draft documentation but it gives overall knowledge about OpenIddict Module, we'll complete this documentation in v5.4 and you'll be able to read it completely. +We're creating the documentation for the OpenIddict Module, if you want to have general knowledge about this module, you can check the documentation from [here](https://github.com/abpframework/abp/blob/dev/docs/en/Modules/OpenIddict.md). Currently, this is a draft documentation but it gives overall knowledge about the OpenIddict Module, we'll complete this documentation in ABP v5.4 and you'll be able to read it completely. Currently, we are also working on Keycloak integration possibilities in parallel to the OpenIddict integration research and we've prepared some samples that you can examine. You can see [#154](https://github.com/abpframework/abp-samples/pull/154) and [#158](https://github.com/abpframework/abp-samples/pull/158). @@ -153,12 +153,12 @@ In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Dep ### Other News -* Global Features was only accessible from the C# code. From this version, Global Features can be also provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). -* Get the user's detailed information (name, surname and phone number) from external login. See [#12085](https://github.com/abpframework/abp/pull/12085). +* Global Features were only accessible from the C# code. From this version and on, Global Features can be also provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). +* Getting the user's detailed information (name, surname and phone number) from external login. See [#12085](https://github.com/abpframework/abp/pull/12085). * Date Pipes for Angular. See [#11909](https://github.com/abpframework/abp/issues/11909). * A bug has been reported to us about a plain password leak on the `AbpAuditLogActions` table for the **TenantCreateDto.AdminPassword**. We've [fixed this problem](https://github.com/abpframework/abp/pull/12499), and it will be available in the next release. -If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.3.0-rc.1), which contains a list of all issues and pull requests closed with this version. +If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.3.0-rc.1), which contains a list of all the issues and pull requests closed with this version. ## What's New with ABP Commercial 5.3? @@ -168,13 +168,13 @@ If you want to see more details, you can check [the release on GitHub](https://g With this version, we are introducing the new **GDPR Module**. This was one of the most awaited features, so we've prioritized it and implemented it in this version. -GDPR Module is pre-installed in the [startup templates](https://docs.abp.io/en/commercial/5.3/startup-templates/index) for MVC. So, no need to manually install it. When you create a new startup template, you can directly use this module. We'll also implement this module for the other UI types as soon as possible and also add extra functionality such as "Cookie Consent" and more. +The GDPR Module is pre-installed in the [startup templates](https://docs.abp.io/en/commercial/5.3/startup-templates/index) for MVC. So, no need to manually install it. When you create a new startup template, you can directly use this module. We'll also implement this module for the other UI types as soon as possible and also add extra functionality such as "Cookie Consent" and more. Currently, there are two main functions of this module and they are "Download Personal Data" and "Delete Personal Data". ![](./gdpr-user-menu.png) -There is a "Personal Data" section in the user menu like in the screenshot above and when you click on this section, you'll be redirected to the "Personal Data" page. On that page, you can either request to "Download Personal Data" or "Delete Personal Data". +There is a "Personal Data" section in the user menu as in the screenshot above and when you click on this section, you'll be redirected to the "Personal Data" page. On that page, you can either request to "Download Personal Data" or "Delete Personal Data". ![](./gdpr-personal-data-page.png) @@ -194,7 +194,7 @@ Also, there is an admin side of the Polling Feature. You can easily manage your ### OAuth Resource Owner Password as External Login Provider -> The Resource Owner Password flow allows for the exchanging of the user name and password of a user for an access token. When using the resource owner password credentials grant, the user provides the credentials (user name and password) directly to the application. +> The Resource Owner Password flow allows for the exchanging of the username and password of a user for an access token. When using the resource owner password credentials grant, the user provides the credentials (username and password) directly to the application. Thanks to that you can login by providing a username and password from an External Login Provider. @@ -207,8 +207,8 @@ Thanks to that you can login by providing a username and password from an Extern In this version, there are some enhancements and new features in **Suite** and they are listed briefly below: * It's now possible to create an **app-nolayers (Application - single layer)** template via Suite and also code-generation is supported for the **app-nolayers** template with this version. -* With this version, Suite allows users to see and download their logs. -* Suite allows generating code via CLI. If you have JSON file that contains code blocks, like entity configurations, you can use the `abp suite generate` command to generate CRUD pages based on it. +* Suite now allows users to see and download their logs. +* Suite now allows generating code via CLI. If you have a JSON file that contains code blocks, like entity configurations, you can use the `abp suite generate` command to generate CRUD pages based on it. *Example:* @@ -228,14 +228,14 @@ You can watch the event from [here](https://www.youtube.com/watch?v=RFArBh60RSA& Dockerfiles, docker-compose files and build script files have been added to the Single Layer Startup Template (app-nolayers) with this version. -In this way, applications created with this template now can be deployed more easily. +And this way, applications created with this template now can be deployed more easily. ### Microservice Solution Enhancements There are some enhancements made in the Microservice Solution. You can see the list of these enhancements: -* Initial migration on the template has been updated for the small improvement that was made in the **Language Management** module. -* Database migration event handlers have been removed and "Distributed Locking" used for the database migrations. +* Initial migration on the template has been updated with the small improvement that was made in the **Language Management** module. +* Database migration event handlers have been removed and "Distributed Locking" is now used for the database migrations. ### PWA Support for the Application Pro Template @@ -253,10 +253,10 @@ abp new MyProgressiveWebApp -t app-pro -u blazor --pwa * [Anto Subash](https://twitter.com/antosubash) created a series named ["Microservice with ABP"](https://blog.antosubash.com/posts/abp-microservice-series) and shared a couple of video posts about the ABP Microservice solution. * [Francisco Kadzi](https://github.com/CiscoNinja) has created his first ABP Community article that shows how to ["Customize ABP Angular Application UI with AdminLTE"](https://community.abp.io/posts/customize-abp-angular-application-ui-with-adminlte.-7qu1m67s). * [Jack Fistelmann](https://github.com/nebula2) has created an article to introduce a helpful project extension to speed up development on Visual Studio. You can read the article [here](https://community.abp.io/posts/using-switch-startup-project-extension-for-visual-studio-52yyw27v). -* [Jack Fistelmann](https://github.com/nebula2) has also created an article to show how you can generate PDF files with the `Sycyber.Core` package in an ABP-based applications. You can read from [here](https://community.abp.io/posts/generate-pdfs-in-an-abp-framework-project-using-scryber.core-x9yh1vfa). -* [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) has created an article to show how to ["Dealing with Multiple Implementations of a Service in ASP.NET Core & ABP Dependency Injection"](https://community.abp.io/posts/dealing-with-multiple-implementations-of-a-service-in-asp.net-core-abp-dependency-injection-ysfp4ho2) with examples. +* [Jack Fistelmann](https://github.com/nebula2) has also created an article to show how you can generate PDF files with the `Sycyber.Core` package in ABP-based applications. You can read it [here](https://community.abp.io/posts/generate-pdfs-in-an-abp-framework-project-using-scryber.core-x9yh1vfa). +* [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan) has created an article to show ["Dealing with Multiple Implementations of a Service in ASP.NET Core & ABP Dependency Injection"](https://community.abp.io/posts/dealing-with-multiple-implementations-of-a-service-in-asp.net-core-abp-dependency-injection-ysfp4ho2) with examples. * [Manoj Kumar](https://community.abp.io/members/manojkumar.t@shloklabs.com) submitted a new article about how to use "ABP authentication in a Flutter application". It was a frequently asked topic, which you can read [here](https://community.abp.io/posts/flutter-web-authentication-from-abp-mp6l2ehx). -* [Engincan Veske](https://twitter.com/EngincanVeske) created a new Community Article to show "Concurrency Check/Control in ABP". You can read from [here](https://community.abp.io/posts/handle-concurrency-with-ef-core-in-an-abp-framework-project-with-asp.net-core-mvc-jlkc3w8f). +* [Engincan Veske](https://twitter.com/EngincanVeske) created a new Community Article to show "Concurrency Check/Control in ABP". You can read it [here](https://community.abp.io/posts/handle-concurrency-with-ef-core-in-an-abp-framework-project-with-asp.net-core-mvc-jlkc3w8f). ### ABP Community Talks 2022.4 - "How can you contribute to the open source ABP Framework?" (May 10, 2022 - 17:00 UTC) @@ -266,11 +266,11 @@ We've [asked you to pick the topic of the next Community Talks](https://twitter. > You can register for the event from [here](https://kommunity.com/volosoft/events/abp-community-talks-20224-how-to-contribute-to-the-open-source-abp-framework-d9b50664), if you haven't registered yet. -You can also [subscribe to the Volosoft channel](https://www.youtube.com/channel/UCO3XKlpvq8CA5MQNVS6b3dQ) to inform about further ABP events and videos. +You can also [subscribe to the Volosoft channel](https://www.youtube.com/channel/UCO3XKlpvq8CA5MQNVS6b3dQ) to be informed about future ABP events and videos. ### Discord Server -We've created an official ABP Discord server so the ABP Community can interact with each other and create a blog-post to introduce it. You can read the [ABP Discord Server announcement post](https://blog.abp.io/abp/Official-ABP-Discord-Server-is-Here) to learn more about ABP Discord Server. +We've created an official ABP Discord server so the ABP Community can interact with each other and created a blog-post to introduce it. You can read the [ABP Discord Server announcement post](https://blog.abp.io/abp/Official-ABP-Discord-Server-is-Here) to learn more about the ABP Discord Server. Thanks to the ABP Community, **700+** people joined our Discord Server so far and it grows every day. From 35ee7dd3b1d9b7a0081abb4d7fa4844b1fcdb145 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 10 May 2022 17:28:17 +0800 Subject: [PATCH 255/272] Fix the `ValueEquals` bug. Resolve #12509 --- .../Volo/Abp/Domain/Values/ValueObject.cs | 24 ++++++++++++------- .../Volo/Abp/Domain/Values/Address.cs | 10 +++++++- .../Abp/Domain/Values/ValueObject_Tests.cs | 10 ++++++-- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs index 8d7f5f37b1..ff6fef3def 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs @@ -16,21 +16,29 @@ public abstract class ValueObject return false; } - ValueObject other = (ValueObject)obj; + var other = (ValueObject)obj; - IEnumerator thisValues = GetAtomicValues().GetEnumerator(); - IEnumerator otherValues = other.GetAtomicValues().GetEnumerator(); + var thisValues = GetAtomicValues().GetEnumerator(); + var otherValues = other.GetAtomicValues().GetEnumerator(); - while (thisValues.MoveNext() && otherValues.MoveNext()) + var thisMoveNext = thisValues.MoveNext(); + var otherMoveNext = otherValues.MoveNext(); + while (thisMoveNext && otherMoveNext) { - if (ReferenceEquals(thisValues.Current, null) ^ - ReferenceEquals(otherValues.Current, null)) + if (ReferenceEquals(thisValues.Current, null) ^ ReferenceEquals(otherValues.Current, null)) { return false; } - if (thisValues.Current != null && - !thisValues.Current.Equals(otherValues.Current)) + if (thisValues.Current != null && !thisValues.Current.Equals(otherValues.Current)) + { + return false; + } + + thisMoveNext = thisValues.MoveNext(); + otherMoveNext = otherValues.MoveNext(); + + if (thisMoveNext != otherMoveNext) { return false; } diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/Address.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/Address.cs index 7ec96848a4..cee2c8c379 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/Address.cs +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/Address.cs @@ -11,6 +11,8 @@ public class Address : ValueObject public int Number { get; } + public string[] Tags { get; } + private Address() { } @@ -18,11 +20,13 @@ public class Address : ValueObject public Address( Guid cityId, string street, - int number) + int number, + params string[] tags) { CityId = cityId; Street = street; Number = number; + Tags = tags; } //Requires to implement this method to return properties. @@ -31,5 +35,9 @@ public class Address : ValueObject yield return Street; yield return CityId; yield return Number; + foreach (var tag in Tags) + { + yield return tag; + } } } diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs index a4a0f9c44f..144d4350d3 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs @@ -10,8 +10,9 @@ public class ValueObject_Tests public void ValueObjects_With_Same_Properties_Should_Be_Equals() { var cityId = Guid.NewGuid(); - var address1 = new Address(cityId, "Baris Manco", 42); - var address2 = new Address(cityId, "Baris Manco", 42); + + var address1 = new Address(cityId, "Baris Manco", 42, "home", "office"); + var address2 = new Address(cityId, "Baris Manco", 42, "home", "office"); address1.ValueEquals(address2).ShouldBeTrue(); } @@ -25,5 +26,10 @@ public class ValueObject_Tests var address2 = new Address(cityId, "Baris Manco", 43); address1.ValueEquals(address2).ShouldBeFalse(); + + address1 = new Address(cityId, "Baris Manco", 42, "home", "office"); + address2 = new Address(cityId, "Baris Manco", 42, "home"); + + address1.ValueEquals(address2).ShouldBeFalse(); } } From 76fcc850c30696420d13c5ac2847580aecc849a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 10 May 2022 13:02:24 +0300 Subject: [PATCH 256/272] Minor revisions in the blog post --- .../2022-05-09 v5_3_Preview/POST.md | 57 +++++++------------ 1 file changed, 19 insertions(+), 38 deletions(-) diff --git a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md index 5349eeecf3..b23dab0cd1 100644 --- a/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md +++ b/docs/en/Blog-Posts/2022-05-09 v5_3_Preview/POST.md @@ -34,11 +34,11 @@ See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all t You can use any IDE that supports .NET 6.x, like **[Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)**. -## Migration Notes & Breaking Changes +## Migration Notes -There is only one breaking change in this version upgrade and it's explained below. +There is a change in this version that may effect your applications: -* Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. So, you need to upgrade your projects that use the **AutoMapper** library (your `*.Application` project etc.) to **netstandard2.1** or **net6**. See [#12189](https://github.com/abpframework/abp/pull/12189). +* Upgraded the [AutoMapper](https://github.com/AutoMapper/AutoMapper) library to **v11.0.1**. So, you need to change your project's target SDK that use the **AutoMapper** library (typically your `*.Application` project). You can change it from `netstandard2.0` to `netstandard2.1` or `net6` if needed. You can write to [#12189](https://github.com/abpframework/abp/pull/12189) if you need any help. ## What's New with ABP Framework 5.3? @@ -58,13 +58,14 @@ In this section, I will introduce some major features released with this version We've created a new startup template named `app-nolayers` and [announced](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) it in the previous version. In this version, we've also added this startup template option to the *Get Started* page. -*You can examine the screenshot below to see how to create an `app-nolayers` template from the ["Get Started"](https://abp.io/get-started) page.* +*You can examine the screenshot below to see how to create an `app-nolayers` template from the ["Get Started"](https://abp.io/get-started) page:* ![](./app-nolayers-get-started.png) ### PWA Support for Startup Templates -ABP v5.3 now supports PWA for Blazor WASM & Angular UIs. To create a startup template with the PWA support, you can use the `--pwa` parameter. +ABP v5.3 application startup template now supports PWA for Blazor WASM & Angular UIs. To create a startup template with the PWA support, you can use the `--pwa` parameter. + Example: ```bash @@ -73,9 +74,7 @@ abp new MyProgressiveWebApp -t app -u blazor --pwa ### Introducing the `Volo.Abp.Gdpr.Abstractions` Package -A new `Volo.Abp.Gdpr.Abstractions` package has been added to the framework. - -Anyone can use this package to use the pre-defined ETOs and implement GDPR-related operations for their own applications. +A new `Volo.Abp.Gdpr.Abstractions` package has been added to the framework. This is an abstraction package, so doesn't contain any actual GDPR implementation. It defines some classes and interfaces to put a standard for who want to implement a GDPR module that can run in a modular or microservice system. At that point, we are introducing the **GDPR Module** for the ABP Commercial customers and this module does the GDPR-related operations on behalf of you, such as *"Download/Delete Personal Data"*. I'll describe the **GDPR Module** later in this blog post. @@ -85,33 +84,20 @@ At that point, we are introducing the **GDPR Module** for the ABP Commercial cus We introduced the "Transactional Outbox & Inbox Patterns" in [**ABP v5.0**](https://blog.abp.io/abp/ABP-IO-Platform-5.0-RC-1-Has-Been-Released), it was one of the most awaited features by several software developers. -We've made some optimizations for the **Batch Event Publishing** in this version, you can examine the related development from [here](https://github.com/abpframework/abp/pull/11243). After the optimization, the results are impressive. - -| | Before | After | -|---|---|---| -| **RabbitMQ** | 50080ms | 547ms | -| **Kafka** | 15303ms | 475ms | -| **Azure (Remote Service)** | 116157ms | 1534ms | -| **Rebus (RabbitMQ transport)** | 26094ms | 560ms | - -*You can see the optimization results above for "Batch Publishing (1000 Events)"* +We've made some optimizations for the **Batch Event Publishing** in this version, you can examine the related development from [here](https://github.com/abpframework/abp/pull/11243). After the optimization, the results are impressive. It is enabled by default (if you have configured [event outbox](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus#outbox-inbox-for-transactional-events)), so you don't need to any manual configuration. ### Improvements on eShopOnAbp Project & E-Book Announcement -There are some developments on the **eShopOnAbp** project made in this version. You can see the brief descriptions of some of the improvements below: +There are some developments on the [eShopOnAbp project](https://github.com/abpframework/eShopOnAbp) made in this version. You can see the brief descriptions of some of the improvements below: * Local certificates have been created to use while working in Kubernetes and also Helm Charts have been updated. See [#107](https://github.com/abpframework/eShopOnAbp/pull/107). * The Order Management page has been created. See [#92](https://github.com/abpframework/eShopOnAbp/pull/92). * Database migration event handlers have been removed and "Distributed Locking" is now used for database migrations. See [#85](https://github.com/abpframework/eShopOnAbp/pull/85) and [#102](https://github.com/abpframework/eShopOnAbp/pull/102). * Switched from Ocelot to YARP as the gateway. See [#97](https://github.com/abpframework/eShopOnAbp/pull/97). -We have exciting news to share with the community, we're working on an "ABP Microservice Development" e-book. In this book, we're using the **eShopOnAbp** project as a reference microservice solution and we're trying to explain our experiences during the microservice application development process through this project. +We have exciting news to share with the community, we're working on an "ABP Microservice Development" e-book. In this book, we're using the eShopOnAbp project as a reference microservice solution and we're trying to explain our experiences during the microservice application development process through this project. -We're planning to create this book in nine chapters and make it available after the third chapter is written. You will be able to download this free e-book from the [abp.io](https://abp.io/) website. You can see the title of these three chapters below: - -- Chapter 1 : Introduction (This chapter explains the main problems of microservice development and the purpose of the eShopOnAbp solution.) -- Chapter 2 : Running the Solution (This chapter explains the various ways to run the solution such as using Microsoft's Tye tool.) -- Chapter 3 : Understanding the authentication system (This chapter explains the authentication system used in the **eShopOnAbp** solution.) +We're planning to create this book in nine chapters and make it available after the third chapter is written. After that, you will be able to download this free e-book from the [abp.io](https://abp.io/) website. ### LeptonX Lite Documentations & Project Status & Roadmap @@ -147,8 +133,6 @@ Deploying an ABP-based application is not so different than deploying any .NET o ![](./deployment-documentation.png) -We've created two new deployment documents, you can find them under the ["Deployment"](https://docs.abp.io/en/abp/5.3/Deployment/Index) section of our documentation website. - In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Deployment/Clustered-Environment) documentation, we've documented the topics that you should consider when you are developing your application to a clustered environment and explained how you can deal with these topics in your ABP-based application. ### Other News @@ -156,7 +140,6 @@ In the [Deploying to a Clustered Environment](https://docs.abp.io/en/abp/5.3/Dep * Global Features were only accessible from the C# code. From this version and on, Global Features can be also provided from application configurations. See [#12043](https://github.com/abpframework/abp/pull/12043). * Getting the user's detailed information (name, surname and phone number) from external login. See [#12085](https://github.com/abpframework/abp/pull/12085). * Date Pipes for Angular. See [#11909](https://github.com/abpframework/abp/issues/11909). -* A bug has been reported to us about a plain password leak on the `AbpAuditLogActions` table for the **TenantCreateDto.AdminPassword**. We've [fixed this problem](https://github.com/abpframework/abp/pull/12499), and it will be available in the next release. If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/5.3.0-rc.1), which contains a list of all the issues and pull requests closed with this version. @@ -182,13 +165,11 @@ After you've requested to download "Personal Data", you need to wait for 1 hour ### CMS Kit Pro - Polling Feature -We've added the new **Polling** feature to the **CMS Kit Pro** module. This feature allows you to use a questionnaire/voting system in your application easily. - -You can create a question, define some options for it and the poll will be created for you. You can see the example poll in the screenshot below. +We've added a **Polling** feature to the **CMS Kit Pro** module. This feature allows you to use a questionnaire/voting system in your application easily. You can create a question, define some options for it and the poll will be created for you. You can see the example poll in the screenshot below: ![](./poll-question-example.png) -Also, there is an admin side of the Polling Feature. You can easily manage your polls in your admin (back-office) project. You can create, update, delete and show the results of the poll on the Polls page. +Also, there is an admin side of the Polling Feature. You can easily manage your polls in your admin (back-office) project. You can create, update, delete and show the results of the poll on the Polls page: ![](./poll-questions.png) @@ -196,9 +177,9 @@ Also, there is an admin side of the Polling Feature. You can easily manage your > The Resource Owner Password flow allows for the exchanging of the username and password of a user for an access token. When using the resource owner password credentials grant, the user provides the credentials (username and password) directly to the application. -Thanks to that you can login by providing a username and password from an External Login Provider. +Now, you can login by entering a username and password from an OAuth server. -*Example: Use OAuth external login provider with Keycloak* +Example: Use OAuth external login provider with Keycloak: ![](./oauth-external-provider.gif) @@ -207,16 +188,16 @@ Thanks to that you can login by providing a username and password from an Extern In this version, there are some enhancements and new features in **Suite** and they are listed briefly below: * It's now possible to create an **app-nolayers (Application - single layer)** template via Suite and also code-generation is supported for the **app-nolayers** template with this version. -* Suite now allows users to see and download their logs. +* Suite now allows users to see and download its logs. * Suite now allows generating code via CLI. If you have a JSON file that contains code blocks, like entity configurations, you can use the `abp suite generate` command to generate CRUD pages based on it. -*Example:* +Example: ```bash abp suite generate -e C:\Users\.suite\entities\Country.json -s C:\Users\my-proj\SuiteProj\SuiteProj.sln ``` -### Suite Webinar (Take a closer look at the code generation: ABP Suite) +### Suite Webinar: Take a closer look at the code generation ![](./webinar.png) @@ -258,7 +239,7 @@ abp new MyProgressiveWebApp -t app-pro -u blazor --pwa * [Manoj Kumar](https://community.abp.io/members/manojkumar.t@shloklabs.com) submitted a new article about how to use "ABP authentication in a Flutter application". It was a frequently asked topic, which you can read [here](https://community.abp.io/posts/flutter-web-authentication-from-abp-mp6l2ehx). * [Engincan Veske](https://twitter.com/EngincanVeske) created a new Community Article to show "Concurrency Check/Control in ABP". You can read it [here](https://community.abp.io/posts/handle-concurrency-with-ef-core-in-an-abp-framework-project-with-asp.net-core-mvc-jlkc3w8f). -### ABP Community Talks 2022.4 - "How can you contribute to the open source ABP Framework?" (May 10, 2022 - 17:00 UTC) +### ABP Community Talks 2022.4: How can you contribute to the open source ABP Framework? (May 10, 2022 - 17:00 UTC) ![](./community-talks-2022.4.png) From 7e70cc5edafed66535dfc7a10f5abe565a144cb0 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Tue, 10 May 2022 17:17:46 +0300 Subject: [PATCH 257/272] Docs: Support `diff` language for code highlight --- .../Bundling/PrismjsScriptBundleContributorDocsExtension.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs b/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs index 9309234be7..307720a87f 100644 --- a/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs +++ b/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs @@ -22,7 +22,8 @@ namespace Volo.Docs.Bundling "sass", "scss", "sql", - "typescript" + "typescript", + "diff" }; public override void ConfigureBundle(BundleConfigurationContext context) From a2df4f2166506341b638d10dbe85b4d26258083b Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 11 May 2022 09:45:08 +0300 Subject: [PATCH 258/272] Docs: Add diff highlight plugin --- .../Bundling/PrismjsScriptBundleContributorDocsExtension.cs | 1 + .../Bundling/PrismjsStyleBundleContributorDocsExtension.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs b/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs index 307720a87f..3fc129bf55 100644 --- a/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs +++ b/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs @@ -47,6 +47,7 @@ namespace Volo.Docs.Bundling context.Files.AddIfNotContains("/libs/prismjs/plugins/show-language/prism-show-language.js"); context.Files.AddIfNotContains("/libs/prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.js"); context.Files.AddIfNotContains("/libs/prismjs/plugins/line-highlight/prism-line-highlight.js"); + context.Files.AddIfNotContains("/libs/prismjs/plugins/diff-highlight/prism-diff-highlight.js"); } } } diff --git a/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsStyleBundleContributorDocsExtension.cs b/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsStyleBundleContributorDocsExtension.cs index 9cfde60fa4..eb0436c5ff 100644 --- a/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsStyleBundleContributorDocsExtension.cs +++ b/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsStyleBundleContributorDocsExtension.cs @@ -10,6 +10,7 @@ namespace Volo.Docs.Bundling context.Files.ReplaceOne("/libs/prismjs/themes/prism.css","/libs/prismjs/themes/prism-okaidia.css"); context.Files.AddIfNotContains("/libs/prismjs/plugins/line-highlight/prism-line-highlight.css"); context.Files.AddIfNotContains("/libs/prismjs/plugins/toolbar/prism-toolbar.css"); + context.Files.AddIfNotContains("/libs/prismjs/plugins/diff-highlight/prism-diff-highlight.css"); } } } From 651e77426ff3573285b8040af6e0501297e0585a Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Thu, 12 May 2022 11:53:53 +0300 Subject: [PATCH 259/272] Replace abp add-package command with dotnet one --- docs/en/Themes/LeptonXLite/mvc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Themes/LeptonXLite/mvc.md b/docs/en/Themes/LeptonXLite/mvc.md index b5575cba49..b7260d56d9 100644 --- a/docs/en/Themes/LeptonXLite/mvc.md +++ b/docs/en/Themes/LeptonXLite/mvc.md @@ -10,7 +10,7 @@ LeptonX Lite has implementation for the ABP Framework Razor Pages. It's a simpli - Add **Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite** package to your **Web** application. ```bash -abp add-package Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite +dotnet add package Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite ``` - Make sure the old theme is removed and LeptonX is added in your Module class. From bd243f3ae1e6c70161dbd1391a178e23c5969e11 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 13 May 2022 13:31:11 +0800 Subject: [PATCH 260/272] Upgrade Blazorise to 1.0.4 --- .../src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj | 8 ++++---- ...MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj | 4 ++-- .../MyCompanyName.MyProjectName.Blazor.Server.csproj | 4 ++-- ...yCompanyName.MyProjectName.Blazor.Server.Tiered.csproj | 4 ++-- .../MyCompanyName.MyProjectName.Blazor.Server.csproj | 4 ++-- .../MyCompanyName.MyProjectName.Blazor.csproj | 4 ++-- .../MyCompanyName.MyProjectName.Blazor/wwwroot/global.css | 2 +- .../MyCompanyName.MyProjectName.Blazor/wwwroot/index.html | 4 ++-- .../MyCompanyName.MyProjectName.Blazor.Host.csproj | 4 ++-- .../wwwroot/global.css | 2 +- .../wwwroot/index.html | 4 ++-- .../MyCompanyName.MyProjectName.Blazor.Server.Host.csproj | 4 ++-- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj index 8d541a4d64..7ec32994de 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj +++ b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj @@ -14,10 +14,10 @@ - - - - + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj index 0dcf5f4de7..8d0ceeb07a 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index 30b56f9da5..c377099e4f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj index 1e6c48970d..dac1ff57ce 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj @@ -13,8 +13,8 @@ - - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index 5eed3c7b64..cfcbea04d4 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -13,8 +13,8 @@ - - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index 93f45f455d..4b76b91ccd 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -11,8 +11,8 @@ - - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.css index e33797b8e6..b9d1e6f93a 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.css @@ -14,6 +14,6 @@ body:before{content:"mobile";display:none;visibility:hidden}@media(min-width:768px){body:before{content:"tablet"}}@media(min-width:992px){body:before{content:"desktop"}}@media(min-width:1200px){body:before{content:"widescreen"}}@media(min-width:1400px){body:before{content:"fullhd"}}hr.divider.divider-solid{border-top:var(--b-divider-thickness,1px) solid var(--b-divider-color,#999)}hr.divider.divider-dashed{border-top:var(--b-divider-thickness,1px) dashed var(--b-divider-color,#999)}hr.divider.divider-dotted{border-top:var(--b-divider-thickness,1px) dotted var(--b-divider-color,#999)}hr.divider.divider-text{position:relative;border:none;height:var(--b-divider-thickness,1px);background:var(--b-divider-color,#999)}hr.divider.divider-text::before{content:attr(data-content);display:inline-block;background:#fff;font-weight:bold;font-size:var(--b-divider-font-size,.85rem);color:var(--b-divider-color,#999);border-radius:30rem;padding:.2rem 2rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.b-drop-zone{transition:all 300ms cubic-bezier(.4,0,.2,1) 0ms}.b-drop-zone.b-drop-zone-drag-block>*{pointer-events:none}.b-drop-zone.b-drop-zone-drop-allowed{outline:1px solid var(--b-theme-success,"#00FF00") !important}.b-drop-zone.b-drop-zone-drop-not-allowed{outline:1px solid var(--b-theme-danger,"#FF0000") !important}.b-drop-zone-draggable{cursor:grab;user-select:none}.b-drop-zone-draggable:active{cursor:grabbing}.b-input-color-picker{padding:.6rem}.b-input-color-picker>.b-input-color-picker-preview{position:relative;z-index:1;width:100%;height:100%;display:flex;flex-direction:row;justify-content:space-between}.b-input-color-picker>.b-input-color-picker-preview::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.b-input-color-picker>.b-input-color-picker-preview>.b-input-color-picker-curent-color{display:inline-block;width:100%;height:100%}.b-input-color-picker[aria-disabled=true]{opacity:.65}.progress.progress-xs{height:.25rem}.progress.progress-sm{height:.5rem}.progress.progress-md{height:1rem}.progress.progress-lg{height:1.5rem}.progress.progress-xl{height:2rem}.b-page-progress{width:100%;height:4px;z-index:9999;top:0;left:0;position:fixed;display:none}.b-page-progress .b-page-progress-indicator{width:0;height:100%;transition:height .3s;background-color:#000;transition:width 1s}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-indeterminate{width:30%;animation:running-page-progress 2s cubic-bezier(.4,0,.2,1) infinite}.b-page-progress.b-page-progress-active{display:block}@keyframes running-page-progress{0%{margin-left:0;margin-right:100%}50%{margin-left:25%;margin-right:0%}100%{margin-left:100%;margin-right:0}}.tippy-box[data-animation=scale][data-placement^=top]{transform-origin:bottom}.tippy-box[data-animation=scale][data-placement^=bottom]{transform-origin:top}.tippy-box[data-animation=scale][data-placement^=left]{transform-origin:right}.tippy-box[data-animation=scale][data-placement^=right]{transform-origin:left}.tippy-box[data-animation=scale][data-state=hidden]{transform:scale(.5);opacity:0}.tippy-box[data-theme~=blazorise]{background-color:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9));color:var(--b-tooltip-color,#fff)}.tippy-box[data-theme~=blazorise][data-placement^=top]>.tippy-arrow::before{border-top-color:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9))}.tippy-box[data-theme~=blazorise][data-placement^=bottom]>.tippy-arrow::before{border-bottom-color:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9))}.tippy-box[data-theme~=blazorise][data-placement^=left]>.tippy-arrow::before{border-left-color:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9))}.tippy-box[data-theme~=blazorise][data-placement^=right]>.tippy-arrow::before{border-right-color:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9))}.tippy-box[data-theme~=blazorise]>.tippy-svg-arrow{fill:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9))}.b-tooltip-inline{display:inline-block}.b-layout{display:flex;flex:auto;flex-direction:column}.b-layout.b-layout-root{height:100vh}.b-layout,.b-layout *{box-sizing:border-box}@keyframes spinner{0%{transform:translate3d(-50%,-50%,0) rotate(0deg)}100%{transform:translate3d(-50%,-50%,0) rotate(360deg)}}.b-layout>.b-layout-loading{z-index:9999;position:fixed;width:100%;height:100%;background:rgba(0,0,0,.3)}.b-layout>.b-layout-loading:before{animation:1s linear infinite spinner;border:solid 3px #eee;border-bottom-color:var(--b-theme-primary);border-radius:50%;height:40px;left:50%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0);width:40px;content:" "}.b-layout.b-layout-has-sider{flex-direction:row;min-height:0}.b-layout.b-layout-has-sider .b-layout{overflow-x:hidden}.b-layout-header,.b-layout-footer{flex:0 0 auto}.b-layout-header{color:rgba(0,0,0,.65)}.b-layout.b-layout-root.b-layout-has-sider>.b-layout-header-fixed,.b-layout.b-layout-root.b-layout-has-sider>.b-layout>.b-layout-header-fixed{position:sticky;top:0;width:100%;flex:0}.b-layout.b-layout-root:not(.b-layout-has-sider) .b-layout-header-fixed,.b-layout.b-layout-root:not(.b-layout-has-sider)>.b-layout .b-layout-header-fixed{position:fixed;top:0;left:0;right:0;flex:0}.b-layout.b-layout-root:not(.b-layout-has-sider) .b-layout-header-fixed+.b-layout-content,.b-layout.b-layout-root:not(.b-layout-has-sider)>.b-layout .b-layout-header-fixed+.b-layout-content{margin-top:var(--b-bar-horizontal-height,auto)}.b-layout.b-layout-root>.b-layout-header.b-layout-header-fixed+.b-layout.b-layout-has-sider{margin-top:var(--b-bar-horizontal-height,auto)}.b-layout-footer{color:rgba(0,0,0,.65)}.b-layout-footer-fixed{position:sticky;z-index:1;bottom:0;flex:0}.b-layout-content{flex:1}.b-layout-sider{display:flex;position:relative;background:#001529}.b-layout-sider-content{position:sticky;top:0;z-index:2}.b-layout-header .navbar{line-height:inherit}.b-bar-horizontal[data-collapse=hide]{flex-wrap:nowrap}.b-bar-horizontal[data-collapse=hide][data-broken=true]{height:auto}.b-bar-horizontal[data-broken=false]{height:auto}.b-layout>.b-layout-header .b-bar-horizontal[data-collapse=hide][data-broken=true]{height:var(--b-bar-horizontal-height,auto)}.b-layout>.b-layout-header .b-bar-horizontal[data-broken=false]{height:var(--b-bar-horizontal-height,auto)}.b-bar-initial{display:none !important}.b-bar-vertical-inline,.b-bar-vertical-popout,.b-bar-vertical-small{display:flex;flex-direction:column;flex-wrap:nowrap;position:sticky;top:0;padding:0;min-width:var(--b-vertical-bar-width,230px);max-width:var(--b-vertical-bar-width,230px);width:var(--b-vertical-bar-width,230px);box-shadow:2px 0 6px rgba(0,21,41,.35);height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.b-bar-vertical-inline:not(.b-bar-initial),.b-bar-vertical-popout:not(.b-bar-initial),.b-bar-vertical-small:not(.b-bar-initial){transition:width 200ms ease-in-out,min-width 200ms ease-in-out}.b-bar-vertical-inline .b-bar-menu,.b-bar-vertical-popout .b-bar-menu,.b-bar-vertical-small .b-bar-menu{width:100%;display:flex;flex:1;justify-content:space-between;flex-direction:column;align-self:stretch}.b-bar-vertical-inline .b-bar-brand,.b-bar-vertical-popout .b-bar-brand,.b-bar-vertical-small .b-bar-brand{width:100%;display:flex;height:var(--b-vertical-bar-brand-height,64px);min-height:var(--b-vertical-bar-brand-height,64px)}.b-bar-vertical-inline .b-bar-toggler-inline,.b-bar-vertical-popout .b-bar-toggler-inline,.b-bar-vertical-small .b-bar-toggler-inline{height:var(--b-vertical-bar-brand-height,64px);padding:12px;display:inline-flex;cursor:pointer;position:absolute;right:0}.b-bar-vertical-inline .b-bar-toggler-inline>*,.b-bar-vertical-popout .b-bar-toggler-inline>*,.b-bar-vertical-small .b-bar-toggler-inline>*{margin:auto}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle){display:flex;position:fixed;left:var(--b-vertical-bar-width,230px);border-radius:0 10px 10px 0;border:0;width:10px;height:40px;padding:5px;align-items:center;box-shadow:2px 0 6px rgba(0,21,41,.35);cursor:pointer}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle):not(.b-bar-initial),.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle):not(.b-bar-initial),.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle):not(.b-bar-initial){transition:width 200ms ease-in-out,left 200ms ease-in-out}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle)>*,.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle)>*,.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle)>*{margin:auto;display:none}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover,.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover,.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover{width:45px}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover>*,.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover>*,.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover>*{display:block}.b-bar-vertical-inline .b-bar-item,.b-bar-vertical-popout .b-bar-item,.b-bar-vertical-small .b-bar-item{margin:auto;flex-grow:1;min-height:40px}.b-bar-vertical-inline .b-bar-item .b-bar-icon,.b-bar-vertical-popout .b-bar-item .b-bar-icon,.b-bar-vertical-small .b-bar-item .b-bar-icon{font-size:1.25rem;vertical-align:middle;margin:3px;display:inline-block}.b-bar-vertical-inline .b-bar-start,.b-bar-vertical-popout .b-bar-start,.b-bar-vertical-small .b-bar-start{width:100%;display:block}.b-bar-vertical-inline .b-bar-end,.b-bar-vertical-popout .b-bar-end,.b-bar-vertical-small .b-bar-end{padding-bottom:1rem;width:100%;padding-top:1rem;display:block}.b-bar-vertical-inline .b-bar-link,.b-bar-vertical-popout .b-bar-link,.b-bar-vertical-small .b-bar-link{display:block;width:100%;text-decoration:none;padding:.5rem .5rem .5rem 1.5rem;cursor:pointer;overflow-x:hidden;line-height:1.5rem;vertical-align:middle;transition:font-size 150ms ease-in}.b-bar-vertical-inline .b-bar-label,.b-bar-vertical-popout .b-bar-label,.b-bar-vertical-small .b-bar-label{background:transparent;color:#adb5bd;padding:.375rem 1.25rem;font-size:.75rem;text-overflow:ellipsis;overflow-x:hidden}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-toggle:before{content:" ";border:solid;border-width:0 2px 2px 0;display:inline-block;padding:2px;right:1rem;transition:transform 200ms ease-out;float:right;position:relative;-webkit-transform:rotate(225deg);transform:rotate(225deg);top:.7rem}.b-bar-vertical-inline .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-popout .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-small .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before{-webkit-transform:rotate(45deg);transform:rotate(45deg);top:.5rem}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu{display:none;background:inherit;color:inherit;float:none;padding:5px 0}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu[data-visible=true],.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu[data-visible=true],.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu[data-visible=true]{display:block}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item{position:relative;color:inherit;transition:background 100ms ease-in-out,color 100ms ease-in-out;text-decoration:none;display:block;width:100%;overflow-x:hidden}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item i,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item i,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item i{margin-right:.3rem}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu:before,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu:before,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu:before{background:inherit;box-shadow:none}.b-bar-vertical-inline .b-bar-mobile-toggle,.b-bar-vertical-popout .b-bar-mobile-toggle,.b-bar-vertical-small .b-bar-mobile-toggle{right:20px;margin:auto;display:none}.b-bar-vertical-inline .b-bar-item-multi-line,.b-bar-vertical-popout .b-bar-item-multi-line,.b-bar-vertical-small .b-bar-item-multi-line{display:-webkit-box !important;-webkit-box-orient:vertical;-webkit-line-clamp:var(--b-bar-item-lines,2);white-space:normal !important;overflow:hidden;text-overflow:ellipsis}.b-bar-vertical-inline.b-bar-dark,.b-bar-vertical-popout.b-bar-dark,.b-bar-vertical-small.b-bar-dark{background:var(--b-bar-dark-background,#001529);color:var(--b-bar-dark-color,rgba(255,255,255,.5))}.b-bar-vertical-inline.b-bar-dark .b-bar-brand,.b-bar-vertical-popout.b-bar-dark .b-bar-brand,.b-bar-vertical-small.b-bar-dark .b-bar-brand{background:var(--b-bar-brand-dark-background,rgba(255,255,255,.025))}.b-bar-vertical-inline.b-bar-dark .b-bar-brand .b-bar-link,.b-bar-vertical-popout.b-bar-dark .b-bar-brand .b-bar-link,.b-bar-vertical-small.b-bar-dark .b-bar-brand .b-bar-link{color:#fff}.b-bar-vertical-inline.b-bar-dark .b-bar-brand .b-bar-link.active,.b-bar-vertical-popout.b-bar-dark .b-bar-brand .b-bar-link.active,.b-bar-vertical-small.b-bar-dark .b-bar-brand .b-bar-link.active{color:#fff;background:inherit}.b-bar-vertical-inline.b-bar-dark .b-bar-brand .b-bar-link:hover,.b-bar-vertical-popout.b-bar-dark .b-bar-brand .b-bar-link:hover,.b-bar-vertical-small.b-bar-dark .b-bar-brand .b-bar-link:hover{color:#fff;background:inherit}.b-bar-vertical-inline.b-bar-dark .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout.b-bar-dark .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small.b-bar-dark .b-bar-toggler-popout:not(.b-bar-mobile-toggle){background:var(--b-bar-dark-background,#001529);color:var(--b-bar-dark-color,rgba(255,255,255,.5))}.b-bar-vertical-inline.b-bar-dark .b-bar-dropdown-menu,.b-bar-vertical-popout.b-bar-dark .b-bar-dropdown-menu,.b-bar-vertical-small.b-bar-dark .b-bar-dropdown-menu{background:var(--b-bar-dropdown-dark-background,#000c17)}.b-bar-vertical-inline.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-popout.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-small.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item.active{color:var(--b-bar-item-dark-active-color,#fff);background:var(--b-bar-item-dark-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-popout.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-small.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item:hover{color:var(--b-bar-item-dark-hover-color,#fff);background:var(--b-bar-item-dark-hover-background,rgba(255,255,255,.3))}.b-bar-vertical-inline.b-bar-dark .b-bar-link,.b-bar-vertical-popout.b-bar-dark .b-bar-link,.b-bar-vertical-small.b-bar-dark .b-bar-link{color:inherit}.b-bar-vertical-inline.b-bar-dark .b-bar-link.active,.b-bar-vertical-popout.b-bar-dark .b-bar-link.active,.b-bar-vertical-small.b-bar-dark .b-bar-link.active{color:var(--b-bar-item-dark-active-color,#fff);background:var(--b-bar-item-dark-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-dark .b-bar-link:hover,.b-bar-vertical-popout.b-bar-dark .b-bar-link:hover,.b-bar-vertical-small.b-bar-dark .b-bar-link:hover{color:var(--b-bar-item-dark-hover-color,#fff);background:var(--b-bar-item-dark-hover-background,rgba(255,255,255,.3))}.b-bar-vertical-inline.b-bar-light,.b-bar-vertical-popout.b-bar-light,.b-bar-vertical-small.b-bar-light{background:var(--b-bar-light-background,#fff);color:var(--b-bar-light-color,rgba(0,0,0,.7))}.b-bar-vertical-inline.b-bar-light .b-bar-brand,.b-bar-vertical-popout.b-bar-light .b-bar-brand,.b-bar-vertical-small.b-bar-light .b-bar-brand{background:var(--b-bar-brand-light-background,rgba(0,0,0,.025))}.b-bar-vertical-inline.b-bar-light .b-bar-brand .b-bar-link,.b-bar-vertical-popout.b-bar-light .b-bar-brand .b-bar-link,.b-bar-vertical-small.b-bar-light .b-bar-brand .b-bar-link{color:#000}.b-bar-vertical-inline.b-bar-light .b-bar-brand .b-bar-link.active,.b-bar-vertical-popout.b-bar-light .b-bar-brand .b-bar-link.active,.b-bar-vertical-small.b-bar-light .b-bar-brand .b-bar-link.active{background:inherit}.b-bar-vertical-inline.b-bar-light .b-bar-brand .b-bar-link:hover,.b-bar-vertical-popout.b-bar-light .b-bar-brand .b-bar-link:hover,.b-bar-vertical-small.b-bar-light .b-bar-brand .b-bar-link:hover{background:inherit}.b-bar-vertical-inline.b-bar-light .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout.b-bar-light .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small.b-bar-light .b-bar-toggler-popout:not(.b-bar-mobile-toggle){background:var(--b-bar-brand-light-background,#fff);color:var(--b-bar-light-color,rgba(0,0,0,.7))}.b-bar-vertical-inline.b-bar-light .b-bar-dropdown-menu,.b-bar-vertical-popout.b-bar-light .b-bar-dropdown-menu,.b-bar-vertical-small.b-bar-light .b-bar-dropdown-menu{background:var(--b-bar-dropdown-light-background,#f2f2f2)}.b-bar-vertical-inline.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-popout.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-small.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item.active{color:var(--b-bar-item-light-active-color,#000);background:var(--b-bar-item-light-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-popout.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-small.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item:hover{color:var(--b-bar-item-light-hover-color,#000);background:var(--b-bar-item-light-hover-background,rgba(0,0,0,.3))}.b-bar-vertical-inline.b-bar-light .b-bar-link,.b-bar-vertical-popout.b-bar-light .b-bar-link,.b-bar-vertical-small.b-bar-light .b-bar-link{color:inherit}.b-bar-vertical-inline.b-bar-light .b-bar-link.active,.b-bar-vertical-popout.b-bar-light .b-bar-link.active,.b-bar-vertical-small.b-bar-light .b-bar-link.active{color:var(--b-bar-item-light-active-color,#000);background:var(--b-bar-item-light-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-light .b-bar-link:hover,.b-bar-vertical-popout.b-bar-light .b-bar-link:hover,.b-bar-vertical-small.b-bar-light .b-bar-link:hover{color:var(--b-bar-item-light-hover-color,#000);background:var(--b-bar-item-light-hover-background,rgba(0,0,0,.3))}.b-bar-vertical-small,.b-bar-vertical-inline[data-collapse=small],.b-bar-vertical-popout[data-collapse=small]{width:var(--b-vertical-bar-small-width,64px);min-width:var(--b-vertical-bar-small-width,64px)}.b-bar-vertical-small:not(.b-bar-initial),.b-bar-vertical-inline[data-collapse=small]:not(.b-bar-initial),.b-bar-vertical-popout[data-collapse=small]:not(.b-bar-initial){transition:width 200ms ease-in-out,min-width 200ms ease-in-out}.b-bar-vertical-small .b-bar-toggler-inline,.b-bar-vertical-inline[data-collapse=small] .b-bar-toggler-inline,.b-bar-vertical-popout[data-collapse=small] .b-bar-toggler-inline{position:relative;width:100%}.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-inline[data-collapse=small] .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout[data-collapse=small] .b-bar-toggler-popout:not(.b-bar-mobile-toggle){left:var(--b-vertical-bar-small-width,64px)}.b-bar-vertical-small .b-bar-item>.b-bar-dropdown>.b-bar-dropdown-toggle:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-dropdown-toggle:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-dropdown-toggle:before{display:none}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container{z-index:100;max-height:50vh;position:absolute !important;margin:-42px 5px 0 5px;display:flex;width:var(--b-vertical-bar-popout-menu-width,180px);left:var(--b-vertical-bar-small-width,64px)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-small-width,64px);left:unset}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu{box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);border-radius:3px;overflow-y:auto;overflow-x:hidden;flex:1 100%}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item{padding:.5rem .5rem .5rem 1.5rem}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before{position:absolute;top:0;left:-7px;right:0;bottom:0;width:100%;height:100%;opacity:.0001;content:" ";z-index:-1}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before{left:unset;right:-7px}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container{left:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-toggle:before{content:" ";border:solid;border-width:0 2px 2px 0;display:inline-block;padding:2px;right:1rem;transition:transform 200ms ease-out;float:right;position:relative;-webkit-transform:rotate(315deg);transform:rotate(315deg)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before{-webkit-transform:rotate(135deg);transform:rotate(135deg);right:.8rem}@keyframes b-bar-link-small{to{text-align:center;padding-left:0;padding-right:0}}.b-bar-vertical-small .b-bar-item>.b-bar-link,.b-bar-vertical-small .b-bar-item>.b-bar-dropdown>.b-bar-link,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-link,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-link,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link{animation:b-bar-link-small forwards;animation-delay:170ms;font-size:0;transition:font-size 100ms ease-out}.b-bar-vertical-small .b-bar-item>.b-bar-link:after,.b-bar-vertical-small .b-bar-item>.b-bar-dropdown>.b-bar-link:after,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-link:after,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link:after,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-link:after,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link:after{display:none}.b-bar-vertical-small .b-bar-label,.b-bar-vertical-inline[data-collapse=small] .b-bar-label,.b-bar-vertical-popout[data-collapse=small] .b-bar-label{text-align:center}.b-bar-vertical-inline:not([data-collapse]){overflow-y:auto;overflow-x:hidden}.b-bar-vertical-inline:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container{position:relative}.b-bar-vertical-inline:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu{position:relative !important;border:none;border-radius:0;box-shadow:none}.b-bar-vertical-inline:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item{padding:.5rem .5rem .5rem 3rem}.b-bar-vertical-inline:not([data-collapse]) .b-bar-brand .b-bar-link{display:flex;align-items:center}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-toggle:before{content:" ";border:solid;border-width:0 2px 2px 0;display:inline-block;padding:2px;right:1rem;transition:transform 200ms ease-out;float:right;position:relative;-webkit-transform:rotate(315deg);transform:rotate(315deg)}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before{-webkit-transform:rotate(135deg);transform:rotate(135deg);right:.8rem}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container{z-index:100;max-height:50vh;position:absolute !important;margin:-42px 5px 0 5px;display:flex;width:var(--b-vertical-bar-popout-menu-width,180px);left:var(--b-vertical-bar-width,230px)}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-width,230px);left:unset}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu{box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);border-radius:3px;overflow-y:auto;overflow-x:hidden;flex:1 100%}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item{padding:.5rem .5rem .5rem 1.5rem}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before{position:absolute;top:0;left:-7px;right:0;bottom:0;width:100%;height:100%;opacity:.0001;content:" ";z-index:-1}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before{left:unset;right:-7px}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container{left:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-inline[data-collapse=hide],.b-bar-vertical-popout[data-collapse=hide],.b-bar-vertical-small[data-collapse=hide]{width:0;min-width:0;overflow-y:hidden;visibility:hidden}.b-bar-vertical-inline[data-collapse=hide]:not(.b-bar-initial),.b-bar-vertical-popout[data-collapse=hide]:not(.b-bar-initial),.b-bar-vertical-small[data-collapse=hide]:not(.b-bar-initial){transition:width 200ms ease-in-out,min-width 200ms ease-in-out,visibility 100ms}.b-bar-vertical-inline[data-collapse=hide] .b-bar-toggler-inline,.b-bar-vertical-popout[data-collapse=hide] .b-bar-toggler-inline,.b-bar-vertical-small[data-collapse=hide] .b-bar-toggler-inline{display:none}.b-bar-vertical-inline[data-collapse=hide] .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout[data-collapse=hide] .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small[data-collapse=hide] .b-bar-toggler-popout:not(.b-bar-mobile-toggle){visibility:visible;left:0}@media only screen and (max-width:576px){.b-bar-vertical-inline:not([data-collapse]){min-width:100vw}.b-bar-vertical-inline:not([data-collapse]) .b-bar-toggler-inline:not(.b-bar-mobile-toggle){display:none}.b-bar-vertical-inline:not([data-collapse]) .b-bar-toggler-popout:not(.b-bar-mobile-toggle){left:100vw}.b-bar-vertical-inline:not([data-collapse]) .b-bar-mobile-toggle{display:flex}}.b-table.table{position:relative}.b-table.table .b-table-resizer{position:absolute;top:0;right:0;width:5px;cursor:col-resize;user-select:none;z-index:1}.b-table.table .b-table-resizer:hover,.b-table.table .b-table-resizing{cursor:col-resize !important;border-right:2px solid var(--b-theme-primary,#00f)}.b-table.table .b-table-resizing{cursor:col-resize !important}thead tr th{position:relative}.b-character-casing-lower{text-transform:lowercase}.b-character-casing-upper{text-transform:uppercase}.b-character-casing-title{text-transform:lowercase}.b-character-casing-title::first-letter {text-transform:uppercase}.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:"";height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:bold}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.flatpickr-monthSelect-months{margin:10px 1px 3px 1px;flex-wrap:wrap}.flatpickr-monthSelect-month{background:none;border:0;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;display:inline-block;font-weight:400;margin:.5px;justify-content:center;padding:10px;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;text-align:center;width:33%}.flatpickr-monthSelect-month.disabled{color:#eee}.flatpickr-monthSelect-month.disabled:hover,.flatpickr-monthSelect-month.disabled:focus{cursor:not-allowed;background:none !important}.flatpickr-monthSelect-theme-dark{background:#3f4458}.flatpickr-monthSelect-theme-dark .flatpickr-current-month input.cur-year{color:#fff}.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-prev-month,.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-next-month{color:#fff;fill:#fff}.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month{color:rgba(255,255,255,.95)}.flatpickr-monthSelect-month:hover,.flatpickr-monthSelect-month:focus{background:#e6e6e6;cursor:pointer;outline:0}.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:hover,.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:focus{background:#646c8c;border-color:#646c8c}.flatpickr-monthSelect-month.selected{background-color:#569ff7;color:#fff}.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.selected{background:#80cbc4;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#80cbc4} /*! Pickr 1.8.2 MIT | https://github.com/Simonwep/pickr */ .pickr{position:relative;overflow:visible;transform:translateY(0)}.pickr *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr .pcr-button{position:relative;height:2em;width:2em;padding:.5em;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Helvetica Neue",Arial,sans-serif;border-radius:.15em;background:url('data:image/svg+xml;utf8, ') no-repeat center;background-size:0;transition:all .3s}.pickr .pcr-button::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.pickr .pcr-button::before{z-index:initial}.pickr .pcr-button::after{position:absolute;content:"";top:0;left:0;height:100%;width:100%;transition:background .3s;background:var(--pcr-color);border-radius:.15em}.pickr .pcr-button.clear{background-size:70%}.pickr .pcr-button.clear::before{opacity:0}.pickr .pcr-button.clear:focus{box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-button.disabled{cursor:not-allowed}.pickr *,.pcr-app *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr input:focus,.pickr input.pcr-active,.pickr button:focus,.pickr button.pcr-active,.pcr-app input:focus,.pcr-app input.pcr-active,.pcr-app button:focus,.pcr-app button.pcr-active{box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-palette,.pickr .pcr-slider,.pcr-app .pcr-palette,.pcr-app .pcr-slider{transition:box-shadow .3s}.pickr .pcr-palette:focus,.pickr .pcr-slider:focus,.pcr-app .pcr-palette:focus,.pcr-app .pcr-slider:focus{box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 0 3px rgba(0,0,0,.25)}.pcr-app{position:fixed;display:flex;flex-direction:column;z-index:10000;border-radius:.1em;background:#fff;opacity:0;visibility:hidden;transition:opacity .3s,visibility 0s .3s;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Helvetica Neue",Arial,sans-serif;box-shadow:0 .15em 1.5em 0 rgba(0,0,0,.1),0 0 1em 0 rgba(0,0,0,.03);left:0;top:0}.pcr-app.visible{transition:opacity .3s;visibility:visible;opacity:1}.pcr-app .pcr-swatches{display:flex;flex-wrap:wrap;margin-top:.75em}.pcr-app .pcr-swatches.pcr-last{margin:0}@supports (display:grid){.pcr-app .pcr-swatches{display:grid;align-items:center;grid-template-columns:repeat(auto-fit,1.75em)}}.pcr-app .pcr-swatches>button{font-size:1em;position:relative;width:calc(1.75em - 5px);height:calc(1.75em - 5px);border-radius:.15em;cursor:pointer;margin:2.5px;flex-shrink:0;justify-self:center;transition:all .15s;overflow:hidden;background:transparent;z-index:1}.pcr-app .pcr-swatches>button::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:6px;border-radius:.15em;z-index:-1}.pcr-app .pcr-swatches>button::after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:var(--pcr-color);border:1px solid rgba(0,0,0,.05);border-radius:.15em;box-sizing:border-box}.pcr-app .pcr-swatches>button:hover{filter:brightness(1.05)}.pcr-app .pcr-swatches>button:not(.pcr-active){box-shadow:none}.pcr-app .pcr-interaction{display:flex;flex-wrap:wrap;align-items:center;margin:0 -.2em 0 -.2em}.pcr-app .pcr-interaction>*{margin:0 .2em}.pcr-app .pcr-interaction input{letter-spacing:.07em;font-size:.75em;text-align:center;cursor:pointer;color:#75797e;background:#f1f3f4;border-radius:.15em;transition:all .15s;padding:.45em .5em;margin-top:.75em}.pcr-app .pcr-interaction input:hover{filter:brightness(.975)}.pcr-app .pcr-interaction input:focus{box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 0 3px rgba(66,133,244,.75)}.pcr-app .pcr-interaction .pcr-result{color:#75797e;text-align:left;flex:1 1 8em;min-width:8em;transition:all .2s;border-radius:.15em;background:#f1f3f4;cursor:text}.pcr-app .pcr-interaction .pcr-result::-moz-selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-result::selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-type.active{color:#fff;background:#4285f4}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff;width:auto}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff}.pcr-app .pcr-interaction .pcr-save:hover,.pcr-app .pcr-interaction .pcr-cancel:hover,.pcr-app .pcr-interaction .pcr-clear:hover{filter:brightness(.925)}.pcr-app .pcr-interaction .pcr-save{background:#4285f4}.pcr-app .pcr-interaction .pcr-clear,.pcr-app .pcr-interaction .pcr-cancel{background:#f44250}.pcr-app .pcr-interaction .pcr-clear:focus,.pcr-app .pcr-interaction .pcr-cancel:focus{box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 0 3px rgba(244,66,80,.75)}.pcr-app .pcr-selection .pcr-picker{position:absolute;height:18px;width:18px;border:2px solid #fff;border-radius:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pcr-app .pcr-selection .pcr-color-palette,.pcr-app .pcr-selection .pcr-color-chooser,.pcr-app .pcr-selection .pcr-color-opacity{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column;cursor:grab;cursor:-webkit-grab}.pcr-app .pcr-selection .pcr-color-palette:active,.pcr-app .pcr-selection .pcr-color-chooser:active,.pcr-app .pcr-selection .pcr-color-opacity:active{cursor:grabbing;cursor:-webkit-grabbing}.pcr-app[data-theme=monolith]{width:14.25em;max-width:95vw;padding:.8em}.pcr-app[data-theme=monolith] .pcr-selection{display:flex;flex-direction:column;justify-content:space-between;flex-grow:1}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview{position:relative;z-index:1;width:100%;height:1em;display:flex;flex-direction:row;justify-content:space-between;margin-bottom:.5em}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview .pcr-last-color{cursor:pointer;transition:background-color .3s,box-shadow .3s;border-radius:.15em 0 0 .15em;z-index:2}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview .pcr-current-color{border-radius:0 .15em .15em 0}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview .pcr-last-color,.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview .pcr-current-color{background:var(--pcr-color);width:50%;height:100%}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-palette{width:100%;height:8em;z-index:1}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-palette .pcr-palette{border-radius:.15em;width:100%;height:100%}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-palette .pcr-palette::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser,.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity{height:.5em;margin-top:.75em}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser .pcr-picker,.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity .pcr-picker{top:50%;transform:translateY(-50%)}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser .pcr-slider,.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity .pcr-slider{flex-grow:1;border-radius:50em}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser .pcr-slider{background:linear-gradient(to right,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity .pcr-slider{background:linear-gradient(to right,transparent,#000),url('data:image/svg+xml;utf8, ');background-size:100%,.25em} -@keyframes fadeIn{0%{opacity:0}100%{opacity:1}0%{opacity:0}}@keyframes slideIn{0%{transform:translateY(1rem);opacity:0}100%{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}.badge-close{cursor:pointer}.badge-close::before{height:2px;width:50%}.badge-close::after{height:50%;width:2px}.badge-close:hover,.badge-close:focus{background-color:rgba(10,10,10,.3)}.badge-close:active{background-color:rgba(10,10,10,.4)}.navbar-nav .nav-item:hover{cursor:pointer}.navbar-nav .nav-link:hover{cursor:pointer}.nav .nav-link:hover{cursor:pointer}.nav-item{position:relative}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item{width:100%}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item:empty::after{margin-left:0}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item::after{transform:rotate(-90deg);position:absolute;right:10%;top:45%}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-menu{top:0;left:100%;margin-left:0;margin-right:.1rem}.btn-group>.b-tooltip:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.b-tooltip:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group.btn-group-toggle .btn.active.disabled{opacity:1}.btn-group-vertical>.b-tooltip:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.b-tooltip:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-xs,.btn-group-xs>.btn{padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.btn-md,.btn-group-md>.btn{padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.btn-xl,.btn-group-xl>.btn{padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.dropdown-toggle.dropdown-toggle-hidden::after{content:none !important}.dropdown-toggle.dropdown-toggle-hidden::before{content:none !important}.dropdown-menu.show{animation-duration:.3s;animation-fill-mode:both;animation-name:fadeIn}.dropdown-menu a:not([href]).dropdown-item:not(.disabled){cursor:pointer}.dropdown-menu.dropdown-menu-scrollable{max-height:var(--dropdown-list-menu-max-height,200px);overflow-y:scroll}.b-is-autocomplete .dropdown-menu{width:100%;max-height:var(--autocomplete-menu-max-height,200px);overflow-y:scroll}.b-is-autocomplete.b-is-autocomplete-multipleselection{max-width:100%;width:100%;cursor:text;height:calc(1.5em + .75rem + 2px);border:1px solid #ced4da;border-radius:.25rem}.b-is-autocomplete.b-is-autocomplete-multipleselection>input.form-control{display:inline-block;border:none;box-shadow:none;outline:none;background-color:transparent;max-width:inherit;width:auto}.b-is-autocomplete.b-is-autocomplete-multipleselection.focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.dropdown.btn-group>.btn.dropdown-toggle-split+.dropdown-menu.show{top:100%}.dropdown{position:relative}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend){position:relative}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle{width:100%}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle:empty::after{margin-left:0}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle::after{position:absolute;right:10%;top:45%}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-menu{top:auto;left:auto;bottom:auto;right:auto}.dropdown>.dropdown-menu>.dropdown.dropup .dropdown-toggle::after,.dropdown>.dropdown-menu>.dropdown.dropend .dropdown-toggle::after{vertical-align:0;position:absolute;right:10%;top:45%}.dropdown>.dropdown-menu>.dropdown.dropstart .dropdown-toggle::after{vertical-align:0}.dropdown.dropup>.dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropdown.dropup>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropdown.dropup>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropend>.dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropdown.dropend>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropdown.dropend>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropend>.dropdown-toggle::after{vertical-align:0}.dropdown.dropstart>.dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropdown.dropstart>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropdown.dropstart>.dropdown-toggle::after{display:none}.dropdown.dropstart>.dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropdown.dropstart>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropstart>.dropdown-toggle::before{vertical-align:0}.dropdown-menu-start{right:auto;left:0}.dropdown-menu-end{right:0;left:auto}@media(min-width:576px){.dropdown-menu-sm-start{right:auto;left:0}.dropdown-menu-sm-end{right:0;left:auto}}@media(min-width:768px){.dropdown-menu-md-start{right:auto;left:0}.dropdown-menu-md-end{right:0;left:auto}}@media(min-width:992px){.dropdown-menu-lg-start{right:auto;left:0}.dropdown-menu-lg-end{right:0;left:auto}}@media(min-width:1200px){.dropdown-menu-xl-start{right:auto;left:0}.dropdown-menu-xl-end{right:0;left:auto}}hr.divider.divider-text{position:unset}hr.divider.divider-text::before{top:unset}.snackbar-stack{z-index:1059 !important}.snackbar{z-index:1060 !important}.figure.figure-is-16x16{height:16px;width:16px}.figure.figure-is-24x24{height:24px;width:24px}.figure.figure-is-32x32{height:32px;width:32px}.figure.figure-is-48x48{height:48px;width:48px}.figure.figure-is-64x64{height:64px;width:64px}.figure.figure-is-96x96{height:96px;width:96px}.figure.figure-is-128x128{height:128px;width:128px}.figure.figure-is-256x256{height:256px;width:256px}.figure.figure-is-512x512{height:512px;width:512px}.form-check>.form-check-input.form-check-input-pointer,.form-check>.form-check-label.form-check-label-pointer,.form-switch>.form-check-input.form-check-input-pointer,.form-switch>.form-check-label.form-check-label-pointer{cursor:pointer}.form-control-plaintext.form-control-xs,.form-control-plaintext.form-control-md,.form-control-plaintext.form-control-xl{padding-right:0;padding-left:0}.form-control-xs{height:calc(1.5em + .3rem + 2px);padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.form-control-md{height:calc(1.5em + .94rem + 2px);padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.form-control-xl{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.form-select-xs{height:calc(1.5em + .3rem + 2px);padding-top:.15rem;padding-bottom:.15rem;padding-left:.5rem;font-size:.75rem}.form-select-md{height:calc(1.5em + .94rem + 2px);padding-top:.47rem;padding-bottom:.47rem;padding-left:1rem;font-size:1.125rem}.form-select-xl{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.5rem}.input-group>.b-numeric:not(:last-child)>input{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.b-numeric:not(:first-child)>input{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-xs>.form-control:not(textarea),.input-group-xs>.form-select,.input-group-xs>.b-numeric>input{height:calc(1.5em + .3rem + 2px)}.input-group-xs>.form-control,.input-group-xs>.form-select,.input-group-xs>.input-group-text,.input-group-xs>.btn,.input-group-xs>.b-numeric>input{padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.input-group-sm>.b-numeric>input{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.b-numeric>input{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-md>.form-control:not(textarea),.input-group-md>.form-select,.input-group-md>.b-numeric>input{height:calc(1.5em + .94rem + 2px)}.input-group-md>.form-control,.input-group-md>.form-select,.input-group-md>.input-group-text,.input-group-md>.btn,.input-group-md>.b-numeric>input{padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.input-group-lg>.b-numeric>input{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.b-numeric>input{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-xl>.form-control:not(textarea),.input-group-xl>.form-select,.input-group-xl>.b-numeric>input{height:calc(1.5em + 1rem + 2px)}.input-group-xl>.form-control,.input-group-xl>.form-select,.input-group-xl>.input-group-text,.input-group-xl>.btn,.input-group-xl>.b-numeric>input{padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.input-group-xs>.form-select,.input-group-md>.form-select,.input-group-xl>.form-select{padding-right:1.75rem}.input-group:not(.has-validation)>.dropdown:first-child>.btn:not(:last-child).dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown>.btn:not(:last-child).dropdown-toggle,.input-group.has-validation>.dropdown>.btn:not(:last-child):not(.dropdown-toggle){border-top-left-radius:0;border-bottom-left-radius:0}.form-check>.form-check-input.form-check-input-xs{width:.7rem;height:.7rem}.form-check>.form-check-input.form-check-input-xs+.form-check-label{line-height:"normal";padding-left:0}.form-check>.form-check-input.form-check-input-sm{width:.8rem;height:.8rem}.form-check>.form-check-input.form-check-input-sm+.form-check-label{line-height:"normal";padding-left:0}.form-check>.form-check-input.form-check-input-md{width:1.25rem;height:1.25rem}.form-check>.form-check-input.form-check-input-md+.form-check-label{line-height:1.7rem;padding-left:3px}.form-check>.form-check-input.form-check-input-lg{width:1.55rem;height:1.55rem}.form-check>.form-check-input.form-check-input-lg+.form-check-label{line-height:2rem;padding-left:6px}.form-check>.form-check-input.form-check-input-xl{width:1.85rem;height:1.85rem}.form-check>.form-check-input.form-check-input-xl+.form-check-label{line-height:2.5rem;padding-left:10px}select[readonly]{pointer-events:none}select[readonly] option,select[readonly] optgroup{display:none}.b-numeric{position:relative;width:100%}.b-numeric:hover>.b-numeric-handler-wrap{opacity:1}.b-numeric-handler-wrap{position:absolute;top:0;right:0;width:22px;height:100%;background:#fff;border:1px solid #d9d9d9;opacity:0}.input-group .b-numeric{-ms-flex:1 1 auto;flex:1 1 auto;width:1%}.b-numeric-handler-wrap .b-numeric-handler.b-numeric-handler-down{border-top:1px solid #d9d9d9}.b-numeric-handler{position:relative;display:flex;width:100%;height:50%;overflow:hidden;color:rgba(0,0,0,.45);font-weight:700;line-height:0;align-items:center;justify-content:center}.b-numeric-handler.btn{padding:0}.form-control+.b-numeric-handler-wrap{font-size:1rem;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.form-control-xs+.b-numeric-handler-wrap{font-size:.75rem;border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.form-control-xs+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:.75rem}.form-control-sm+.b-numeric-handler-wrap{font-size:.875rem;border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.form-control-sm+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:.875rem}.form-control-md+.b-numeric-handler-wrap{font-size:1.125rem;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.form-control-md+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.125rem}.form-control-lg+.b-numeric-handler-wrap{font-size:1.25rem;border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.form-control-lg+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.25rem}.form-control-xl+.b-numeric-handler-wrap{font-size:1.5rem;border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}.form-control-xl+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.5rem}.custom-file-label{overflow:hidden}input[readonly][type=range],input[readonly=readonly][type=range]{pointer-events:none}input[readonly][type=range]::-webkit-slider-thumb,input[readonly=readonly][type=range]::-webkit-slider-thumb{pointer-events:none}input[readonly][type=range]::-moz-range-thumb,input[readonly=readonly][type=range]::-moz-range-thumb{pointer-events:none}input[readonly][type=range]::-ms-thumb,input[readonly=readonly][type=range]::-ms-thumb{pointer-events:none}.form-group{margin-bottom:1rem}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media(min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .form-select{align-items:center;justify-content:center}.form-inline .form-check-label{margin-bottom:0}}.b-input-color-picker{padding:.5rem .6rem}.b-input-color-picker>.b-input-color-picker-preview{height:.55rem}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media(min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.jumbotron.jumbotron-primary{background-color:#007bff;color:#fff}.jumbotron.jumbotron-secondary{background-color:#6c757d;color:#fff}.jumbotron.jumbotron-success{background-color:#28a745;color:#fff}.jumbotron.jumbotron-info{background-color:#17a2b8;color:#fff}.jumbotron.jumbotron-warning{background-color:#ffc107;color:#212529}.jumbotron.jumbotron-danger{background-color:#dc3545;color:#fff}.jumbotron.jumbotron-light{background-color:#f8f9fa;color:#212529}.jumbotron.jumbotron-dark{background-color:#343a40;color:#fff}.jumbotron.jumbotron-link{background-color:#3273dc;color:#fff}.b-layout-header-fixed{z-index:1030}.b-layout-footer-fixed{z-index:1030}.b-layout-sider-content{z-index:1031}li.list-group-item-action{cursor:pointer}.b-list-view{overflow-y:scroll}.media{display:flex;align-items:flex-start}.media-body{flex:1}.modal.fade{transition:opacity var(--modal-animation-duration,300ms) linear}.modal.fade .modal-dialog{transition:-webkit-transform var(--modal-animation-duration,300ms) ease-out;transition:transform var(--modal-animation-duration,300ms) ease-out}.page-item:not(.disabled) .page-link{cursor:pointer}.pagination-xs .page-link{padding:.125rem .25rem;font-size:.75rem;line-height:1.5}.pagination-xs .page-item:first-child .page-link{border-top-left-radius:.15rem;border-bottom-left-radius:.15rem}.pagination-xs .page-item:last-child .page-link{border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.pagination-md .page-link{padding:.625rem 1.25rem;font-size:1.125rem;line-height:1.5}.pagination-md .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-md .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-xl .page-link{padding:1rem 2rem;font-size:1.5rem;line-height:1.5}.pagination-xl .page-item:first-child .page-link{border-top-left-radius:.4rem;border-bottom-left-radius:.4rem}.pagination-xl .page-item:last-child .page-link{border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-primary{background-color:#007bff}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-secondary{background-color:#6c757d}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-success{background-color:#28a745}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-info{background-color:#17a2b8}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-warning{background-color:#ffc107}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-danger{background-color:#dc3545}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-light{background-color:#f8f9fa}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-dark{background-color:#343a40}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-link{background-color:#3273dc}.rating:not(.rating-disabled):not(.rating-readonly):hover .rating-item{cursor:pointer}.rating.rating-disabled{opacity:.65}.rating .rating-item.rating-item-primary{color:#007bff}.rating .rating-item.rating-item-secondary{color:#6c757d}.rating .rating-item.rating-item-success{color:#28a745}.rating .rating-item.rating-item-info{color:#17a2b8}.rating .rating-item.rating-item-warning{color:#ffc107}.rating .rating-item.rating-item-danger{color:#dc3545}.rating .rating-item.rating-item-light{color:#f8f9fa}.rating .rating-item.rating-item-dark{color:#343a40}.rating .rating-item.rating-item-link{color:#3273dc}.rating .rating-item.rating-item-hover{opacity:.7}.steps{padding:0;margin:0;list-style:none;display:flex;overflow-x:auto}.steps .step:first-child{margin-left:auto}.steps .step:last-child{margin-right:auto}.step:first-of-type .step-circle::before{display:none}.step:last-of-type .step-container{padding-right:0}.step-container{box-sizing:content-box;display:flex;align-items:center;flex-direction:column;width:5rem;min-width:5rem;max-width:5rem;padding-top:.5rem;padding-right:1rem}.step-circle{position:relative;display:flex;justify-content:center;align-items:center;width:1.5rem;height:1.5rem;color:#adb5bd;border:2px solid #adb5bd;border-radius:100%;background-color:#fff}.step-circle::before{content:"";display:block;position:absolute;top:50%;left:-2px;width:calc(5rem + 1rem - 1.5rem);height:2px;transform:translate(-100%,-50%);color:#adb5bd;background-color:currentColor}.step-text{color:#adb5bd;word-break:break-all;margin-top:.25em}.step-completed .step-circle{color:#fff;background-color:#28a745;border-color:#28a745}.step-completed .step-circle::before{color:#28a745}.step-completed .step-text{color:#28a745}.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-active .step-circle::before{color:#007bff}.step-active .step-text{color:#007bff}.step-primary .step-circle{color:#007bff;border-color:#007bff}.step-primary.step-completed .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-primary.step-completed .step-circle::before{color:#007bff}.step-primary.step-completed .step-text{color:#007bff}.step-primary.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-primary.step-active::before{color:#007bff}.step-primary.step-active .step-text{color:#007bff}.step-secondary .step-circle{color:#6c757d;border-color:#6c757d}.step-secondary.step-completed .step-circle{color:#fff;background-color:#6c757d;border-color:#6c757d}.step-secondary.step-completed .step-circle::before{color:#6c757d}.step-secondary.step-completed .step-text{color:#6c757d}.step-secondary.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-secondary.step-active::before{color:#007bff}.step-secondary.step-active .step-text{color:#007bff}.step-success .step-circle{color:#28a745;border-color:#28a745}.step-success.step-completed .step-circle{color:#fff;background-color:#28a745;border-color:#28a745}.step-success.step-completed .step-circle::before{color:#28a745}.step-success.step-completed .step-text{color:#28a745}.step-success.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-success.step-active::before{color:#007bff}.step-success.step-active .step-text{color:#007bff}.step-info .step-circle{color:#17a2b8;border-color:#17a2b8}.step-info.step-completed .step-circle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.step-info.step-completed .step-circle::before{color:#17a2b8}.step-info.step-completed .step-text{color:#17a2b8}.step-info.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-info.step-active::before{color:#007bff}.step-info.step-active .step-text{color:#007bff}.step-warning .step-circle{color:#ffc107;border-color:#ffc107}.step-warning.step-completed .step-circle{color:#fff;background-color:#ffc107;border-color:#ffc107}.step-warning.step-completed .step-circle::before{color:#ffc107}.step-warning.step-completed .step-text{color:#ffc107}.step-warning.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-warning.step-active::before{color:#007bff}.step-warning.step-active .step-text{color:#007bff}.step-danger .step-circle{color:#dc3545;border-color:#dc3545}.step-danger.step-completed .step-circle{color:#fff;background-color:#dc3545;border-color:#dc3545}.step-danger.step-completed .step-circle::before{color:#dc3545}.step-danger.step-completed .step-text{color:#dc3545}.step-danger.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-danger.step-active::before{color:#007bff}.step-danger.step-active .step-text{color:#007bff}.step-light .step-circle{color:#f8f9fa;border-color:#f8f9fa}.step-light.step-completed .step-circle{color:#fff;background-color:#f8f9fa;border-color:#f8f9fa}.step-light.step-completed .step-circle::before{color:#f8f9fa}.step-light.step-completed .step-text{color:#f8f9fa}.step-light.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-light.step-active::before{color:#007bff}.step-light.step-active .step-text{color:#007bff}.step-dark .step-circle{color:#343a40;border-color:#343a40}.step-dark.step-completed .step-circle{color:#fff;background-color:#343a40;border-color:#343a40}.step-dark.step-completed .step-circle::before{color:#343a40}.step-dark.step-completed .step-text{color:#343a40}.step-dark.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-dark.step-active::before{color:#007bff}.step-dark.step-active .step-text{color:#007bff}.step-link .step-circle{color:#3273dc;border-color:#3273dc}.step-link.step-completed .step-circle{color:#fff;background-color:#3273dc;border-color:#3273dc}.step-link.step-completed .step-circle::before{color:#3273dc}.step-link.step-completed .step-text{color:#3273dc}.step-link.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-link.step-active::before{color:#007bff}.step-link.step-active .step-text{color:#007bff}.steps-content{margin:1rem 0}.steps-content>.step-panel{display:none}.steps-content>.active{display:block}.form-check.form-switch .form-check-input.form-check-input-primary:checked{background-color:#007bff;border-color:#007bff}.form-check.form-switch .form-check-input.form-check-input-secondary:checked{background-color:#6c757d;border-color:#6c757d}.form-check.form-switch .form-check-input.form-check-input-success:checked{background-color:#28a745;border-color:#28a745}.form-check.form-switch .form-check-input.form-check-input-info:checked{background-color:#17a2b8;border-color:#17a2b8}.form-check.form-switch .form-check-input.form-check-input-warning:checked{background-color:#ffc107;border-color:#ffc107}.form-check.form-switch .form-check-input.form-check-input-danger:checked{background-color:#dc3545;border-color:#dc3545}.form-check.form-switch .form-check-input.form-check-input-light:checked{background-color:#f8f9fa;border-color:#f8f9fa}.form-check.form-switch .form-check-input.form-check-input-dark:checked{background-color:#343a40;border-color:#343a40}.form-check.form-switch .form-check-input.form-check-input-link:checked{background-color:#3273dc;border-color:#3273dc}.form-check.form-switch .form-check-input.form-check-input-xs{width:calc(.75rem + (.5rem/2));height:.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-xs+.form-check-label{line-height:1rem;vertical-align:middle;padding-left:0}.form-check.form-switch .form-check-input.form-check-input-xs:checked~.form-check-label::after{transform:translateX(calc(.75rem - (.5rem/2)))}.form-check.form-switch .form-check-input.form-check-input-sm{width:calc(1rem + (.75rem/2));height:.75rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-sm+.form-check-label{line-height:1.25rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-sm:checked~.form-check-label::after{transform:translateX(calc(1rem - (.75rem/2)))}.form-check.form-switch .form-check-input.form-check-input-md{width:calc(2rem + (1.5rem/2));height:1.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-md+.form-check-label{line-height:2rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-md:checked~.form-check-label::after{transform:translateX(calc(2rem - (1.5rem/2)))}.form-check.form-switch .form-check-input.form-check-input-lg{width:calc(3rem + (2rem/2));height:2rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-lg+.form-check-label{line-height:2.5rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-lg:checked~.form-check-label::after{transform:translateX(calc(3rem - (2rem/2)))}.form-check.form-switch .form-check-input.form-check-input-xl{width:calc(4rem + (2.5rem/2));height:2.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-xl+.form-check-label{line-height:3rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-xl:checked~.form-check-label::after{transform:translateX(calc(4rem - (2.5rem/2)))}table.table tbody tr.selected{background-color:var(--primary)}tr.table-row-selectable:hover{cursor:pointer}.table-fixed-header{overflow-y:auto}.table-fixed-header>.table{border-collapse:separate;border-spacing:0}.table-fixed-header>.table>thead>tr>th{border-top:none;position:sticky;background:#fff;z-index:10}.table-fixed-header>.table>thead>tr:nth-child(1)>th{top:0}.table-fixed-header>.table-bordered>:not(caption)>*>*{border-width:1px 1px}.overflow-auto-auto{overflow:auto auto !important}.overflow-auto-hidden{overflow:auto hidden !important}.overflow-auto-visible{overflow:auto visible !important}.overflow-auto-scroll{overflow:auto scroll !important}.overflow-hidden-auto{overflow:hidden auto !important}.overflow-hidden-hidden{overflow:hidden hidden !important}.overflow-hidden-visible{overflow:hidden visible !important}.overflow-hidden-scroll{overflow:hidden scroll !important}.overflow-visible-auto{overflow:visible auto !important}.overflow-visible-hidden{overflow:visible hidden !important}.overflow-visible-visible{overflow:visible visible !important}.overflow-visible-scroll{overflow:visible scroll !important}.overflow-scroll-auto{overflow:scroll auto !important}.overflow-scroll-hidden{overflow:scroll hidden !important}.overflow-scroll-visible{overflow:scroll visible !important}.overflow-scroll-scroll{overflow:scroll scroll !important}ol.ordered-list-lower-alpha{list-style-type:lower-alpha}ol.ordered-list-lower-roman{list-style-type:lower-roman}ol.ordered-list-upper-alpha{list-style-type:upper-alpha}ol.ordered-list-upper-roman{list-style-type:upper-roman}.border-1{border:1px solid #dee2e6 !important}.border-1.border-primary{border-color:#007bff !important}.border-1.border-secondary{border-color:#6c757d !important}.border-1.border-success{border-color:#28a745 !important}.border-1.border-info{border-color:#17a2b8 !important}.border-1.border-warning{border-color:#ffc107 !important}.border-1.border-danger{border-color:#dc3545 !important}.border-1.border-light{border-color:#f8f9fa !important}.border-1.border-dark{border-color:#343a40 !important}.border-1.border-link{border-color:#3273dc !important}.border-primary-1{border:1px solid #007bff !important}.border-secondary-1{border:1px solid #6c757d !important}.border-success-1{border:1px solid #28a745 !important}.border-info-1{border:1px solid #17a2b8 !important}.border-warning-1{border:1px solid #ffc107 !important}.border-danger-1{border:1px solid #dc3545 !important}.border-light-1{border:1px solid #f8f9fa !important}.border-dark-1{border:1px solid #343a40 !important}.border-link-1{border:1px solid #3273dc !important}.border-top-1{border-top:1px solid #dee2e6 !important}.border-primary-top-1{border-top:1px solid #007bff !important}.border-secondary-top-1{border-top:1px solid #6c757d !important}.border-success-top-1{border-top:1px solid #28a745 !important}.border-info-top-1{border-top:1px solid #17a2b8 !important}.border-warning-top-1{border-top:1px solid #ffc107 !important}.border-danger-top-1{border-top:1px solid #dc3545 !important}.border-light-top-1{border-top:1px solid #f8f9fa !important}.border-dark-top-1{border-top:1px solid #343a40 !important}.border-link-top-1{border-top:1px solid #3273dc !important}.border-right-1{border-right:1px solid #dee2e6 !important}.border-primary-right-1{border-right:1px solid #007bff !important}.border-secondary-right-1{border-right:1px solid #6c757d !important}.border-success-right-1{border-right:1px solid #28a745 !important}.border-info-right-1{border-right:1px solid #17a2b8 !important}.border-warning-right-1{border-right:1px solid #ffc107 !important}.border-danger-right-1{border-right:1px solid #dc3545 !important}.border-light-right-1{border-right:1px solid #f8f9fa !important}.border-dark-right-1{border-right:1px solid #343a40 !important}.border-link-right-1{border-right:1px solid #3273dc !important}.border-bottom-1{border-bottom:1px solid #dee2e6 !important}.border-primary-bottom-1{border-bottom:1px solid #007bff !important}.border-secondary-bottom-1{border-bottom:1px solid #6c757d !important}.border-success-bottom-1{border-bottom:1px solid #28a745 !important}.border-info-bottom-1{border-bottom:1px solid #17a2b8 !important}.border-warning-bottom-1{border-bottom:1px solid #ffc107 !important}.border-danger-bottom-1{border-bottom:1px solid #dc3545 !important}.border-light-bottom-1{border-bottom:1px solid #f8f9fa !important}.border-dark-bottom-1{border-bottom:1px solid #343a40 !important}.border-link-bottom-1{border-bottom:1px solid #3273dc !important}.border-left-1{border-left:1px solid #dee2e6 !important}.border-primary-left-1{border-left:1px solid #007bff !important}.border-secondary-left-1{border-left:1px solid #6c757d !important}.border-success-left-1{border-left:1px solid #28a745 !important}.border-info-left-1{border-left:1px solid #17a2b8 !important}.border-warning-left-1{border-left:1px solid #ffc107 !important}.border-danger-left-1{border-left:1px solid #dc3545 !important}.border-light-left-1{border-left:1px solid #f8f9fa !important}.border-dark-left-1{border-left:1px solid #343a40 !important}.border-link-left-1{border-left:1px solid #3273dc !important}.border-2{border:2px solid #dee2e6 !important}.border-2.border-primary{border-color:#007bff !important}.border-2.border-secondary{border-color:#6c757d !important}.border-2.border-success{border-color:#28a745 !important}.border-2.border-info{border-color:#17a2b8 !important}.border-2.border-warning{border-color:#ffc107 !important}.border-2.border-danger{border-color:#dc3545 !important}.border-2.border-light{border-color:#f8f9fa !important}.border-2.border-dark{border-color:#343a40 !important}.border-2.border-link{border-color:#3273dc !important}.border-primary-2{border:2px solid #007bff !important}.border-secondary-2{border:2px solid #6c757d !important}.border-success-2{border:2px solid #28a745 !important}.border-info-2{border:2px solid #17a2b8 !important}.border-warning-2{border:2px solid #ffc107 !important}.border-danger-2{border:2px solid #dc3545 !important}.border-light-2{border:2px solid #f8f9fa !important}.border-dark-2{border:2px solid #343a40 !important}.border-link-2{border:2px solid #3273dc !important}.border-top-2{border-top:2px solid #dee2e6 !important}.border-primary-top-2{border-top:2px solid #007bff !important}.border-secondary-top-2{border-top:2px solid #6c757d !important}.border-success-top-2{border-top:2px solid #28a745 !important}.border-info-top-2{border-top:2px solid #17a2b8 !important}.border-warning-top-2{border-top:2px solid #ffc107 !important}.border-danger-top-2{border-top:2px solid #dc3545 !important}.border-light-top-2{border-top:2px solid #f8f9fa !important}.border-dark-top-2{border-top:2px solid #343a40 !important}.border-link-top-2{border-top:2px solid #3273dc !important}.border-right-2{border-right:2px solid #dee2e6 !important}.border-primary-right-2{border-right:2px solid #007bff !important}.border-secondary-right-2{border-right:2px solid #6c757d !important}.border-success-right-2{border-right:2px solid #28a745 !important}.border-info-right-2{border-right:2px solid #17a2b8 !important}.border-warning-right-2{border-right:2px solid #ffc107 !important}.border-danger-right-2{border-right:2px solid #dc3545 !important}.border-light-right-2{border-right:2px solid #f8f9fa !important}.border-dark-right-2{border-right:2px solid #343a40 !important}.border-link-right-2{border-right:2px solid #3273dc !important}.border-bottom-2{border-bottom:2px solid #dee2e6 !important}.border-primary-bottom-2{border-bottom:2px solid #007bff !important}.border-secondary-bottom-2{border-bottom:2px solid #6c757d !important}.border-success-bottom-2{border-bottom:2px solid #28a745 !important}.border-info-bottom-2{border-bottom:2px solid #17a2b8 !important}.border-warning-bottom-2{border-bottom:2px solid #ffc107 !important}.border-danger-bottom-2{border-bottom:2px solid #dc3545 !important}.border-light-bottom-2{border-bottom:2px solid #f8f9fa !important}.border-dark-bottom-2{border-bottom:2px solid #343a40 !important}.border-link-bottom-2{border-bottom:2px solid #3273dc !important}.border-left-2{border-left:2px solid #dee2e6 !important}.border-primary-left-2{border-left:2px solid #007bff !important}.border-secondary-left-2{border-left:2px solid #6c757d !important}.border-success-left-2{border-left:2px solid #28a745 !important}.border-info-left-2{border-left:2px solid #17a2b8 !important}.border-warning-left-2{border-left:2px solid #ffc107 !important}.border-danger-left-2{border-left:2px solid #dc3545 !important}.border-light-left-2{border-left:2px solid #f8f9fa !important}.border-dark-left-2{border-left:2px solid #343a40 !important}.border-link-left-2{border-left:2px solid #3273dc !important}.border-3{border:3px solid #dee2e6 !important}.border-3.border-primary{border-color:#007bff !important}.border-3.border-secondary{border-color:#6c757d !important}.border-3.border-success{border-color:#28a745 !important}.border-3.border-info{border-color:#17a2b8 !important}.border-3.border-warning{border-color:#ffc107 !important}.border-3.border-danger{border-color:#dc3545 !important}.border-3.border-light{border-color:#f8f9fa !important}.border-3.border-dark{border-color:#343a40 !important}.border-3.border-link{border-color:#3273dc !important}.border-primary-3{border:3px solid #007bff !important}.border-secondary-3{border:3px solid #6c757d !important}.border-success-3{border:3px solid #28a745 !important}.border-info-3{border:3px solid #17a2b8 !important}.border-warning-3{border:3px solid #ffc107 !important}.border-danger-3{border:3px solid #dc3545 !important}.border-light-3{border:3px solid #f8f9fa !important}.border-dark-3{border:3px solid #343a40 !important}.border-link-3{border:3px solid #3273dc !important}.border-top-3{border-top:3px solid #dee2e6 !important}.border-primary-top-3{border-top:3px solid #007bff !important}.border-secondary-top-3{border-top:3px solid #6c757d !important}.border-success-top-3{border-top:3px solid #28a745 !important}.border-info-top-3{border-top:3px solid #17a2b8 !important}.border-warning-top-3{border-top:3px solid #ffc107 !important}.border-danger-top-3{border-top:3px solid #dc3545 !important}.border-light-top-3{border-top:3px solid #f8f9fa !important}.border-dark-top-3{border-top:3px solid #343a40 !important}.border-link-top-3{border-top:3px solid #3273dc !important}.border-right-3{border-right:3px solid #dee2e6 !important}.border-primary-right-3{border-right:3px solid #007bff !important}.border-secondary-right-3{border-right:3px solid #6c757d !important}.border-success-right-3{border-right:3px solid #28a745 !important}.border-info-right-3{border-right:3px solid #17a2b8 !important}.border-warning-right-3{border-right:3px solid #ffc107 !important}.border-danger-right-3{border-right:3px solid #dc3545 !important}.border-light-right-3{border-right:3px solid #f8f9fa !important}.border-dark-right-3{border-right:3px solid #343a40 !important}.border-link-right-3{border-right:3px solid #3273dc !important}.border-bottom-3{border-bottom:3px solid #dee2e6 !important}.border-primary-bottom-3{border-bottom:3px solid #007bff !important}.border-secondary-bottom-3{border-bottom:3px solid #6c757d !important}.border-success-bottom-3{border-bottom:3px solid #28a745 !important}.border-info-bottom-3{border-bottom:3px solid #17a2b8 !important}.border-warning-bottom-3{border-bottom:3px solid #ffc107 !important}.border-danger-bottom-3{border-bottom:3px solid #dc3545 !important}.border-light-bottom-3{border-bottom:3px solid #f8f9fa !important}.border-dark-bottom-3{border-bottom:3px solid #343a40 !important}.border-link-bottom-3{border-bottom:3px solid #3273dc !important}.border-left-3{border-left:3px solid #dee2e6 !important}.border-primary-left-3{border-left:3px solid #007bff !important}.border-secondary-left-3{border-left:3px solid #6c757d !important}.border-success-left-3{border-left:3px solid #28a745 !important}.border-info-left-3{border-left:3px solid #17a2b8 !important}.border-warning-left-3{border-left:3px solid #ffc107 !important}.border-danger-left-3{border-left:3px solid #dc3545 !important}.border-light-left-3{border-left:3px solid #f8f9fa !important}.border-dark-left-3{border-left:3px solid #343a40 !important}.border-link-left-3{border-left:3px solid #3273dc !important}.border-4{border:4px solid #dee2e6 !important}.border-4.border-primary{border-color:#007bff !important}.border-4.border-secondary{border-color:#6c757d !important}.border-4.border-success{border-color:#28a745 !important}.border-4.border-info{border-color:#17a2b8 !important}.border-4.border-warning{border-color:#ffc107 !important}.border-4.border-danger{border-color:#dc3545 !important}.border-4.border-light{border-color:#f8f9fa !important}.border-4.border-dark{border-color:#343a40 !important}.border-4.border-link{border-color:#3273dc !important}.border-primary-4{border:4px solid #007bff !important}.border-secondary-4{border:4px solid #6c757d !important}.border-success-4{border:4px solid #28a745 !important}.border-info-4{border:4px solid #17a2b8 !important}.border-warning-4{border:4px solid #ffc107 !important}.border-danger-4{border:4px solid #dc3545 !important}.border-light-4{border:4px solid #f8f9fa !important}.border-dark-4{border:4px solid #343a40 !important}.border-link-4{border:4px solid #3273dc !important}.border-top-4{border-top:4px solid #dee2e6 !important}.border-primary-top-4{border-top:4px solid #007bff !important}.border-secondary-top-4{border-top:4px solid #6c757d !important}.border-success-top-4{border-top:4px solid #28a745 !important}.border-info-top-4{border-top:4px solid #17a2b8 !important}.border-warning-top-4{border-top:4px solid #ffc107 !important}.border-danger-top-4{border-top:4px solid #dc3545 !important}.border-light-top-4{border-top:4px solid #f8f9fa !important}.border-dark-top-4{border-top:4px solid #343a40 !important}.border-link-top-4{border-top:4px solid #3273dc !important}.border-right-4{border-right:4px solid #dee2e6 !important}.border-primary-right-4{border-right:4px solid #007bff !important}.border-secondary-right-4{border-right:4px solid #6c757d !important}.border-success-right-4{border-right:4px solid #28a745 !important}.border-info-right-4{border-right:4px solid #17a2b8 !important}.border-warning-right-4{border-right:4px solid #ffc107 !important}.border-danger-right-4{border-right:4px solid #dc3545 !important}.border-light-right-4{border-right:4px solid #f8f9fa !important}.border-dark-right-4{border-right:4px solid #343a40 !important}.border-link-right-4{border-right:4px solid #3273dc !important}.border-bottom-4{border-bottom:4px solid #dee2e6 !important}.border-primary-bottom-4{border-bottom:4px solid #007bff !important}.border-secondary-bottom-4{border-bottom:4px solid #6c757d !important}.border-success-bottom-4{border-bottom:4px solid #28a745 !important}.border-info-bottom-4{border-bottom:4px solid #17a2b8 !important}.border-warning-bottom-4{border-bottom:4px solid #ffc107 !important}.border-danger-bottom-4{border-bottom:4px solid #dc3545 !important}.border-light-bottom-4{border-bottom:4px solid #f8f9fa !important}.border-dark-bottom-4{border-bottom:4px solid #343a40 !important}.border-link-bottom-4{border-bottom:4px solid #3273dc !important}.border-left-4{border-left:4px solid #dee2e6 !important}.border-primary-left-4{border-left:4px solid #007bff !important}.border-secondary-left-4{border-left:4px solid #6c757d !important}.border-success-left-4{border-left:4px solid #28a745 !important}.border-info-left-4{border-left:4px solid #17a2b8 !important}.border-warning-left-4{border-left:4px solid #ffc107 !important}.border-danger-left-4{border-left:4px solid #dc3545 !important}.border-light-left-4{border-left:4px solid #f8f9fa !important}.border-dark-left-4{border-left:4px solid #343a40 !important}.border-link-left-4{border-left:4px solid #3273dc !important}.border-5{border:5px solid #dee2e6 !important}.border-5.border-primary{border-color:#007bff !important}.border-5.border-secondary{border-color:#6c757d !important}.border-5.border-success{border-color:#28a745 !important}.border-5.border-info{border-color:#17a2b8 !important}.border-5.border-warning{border-color:#ffc107 !important}.border-5.border-danger{border-color:#dc3545 !important}.border-5.border-light{border-color:#f8f9fa !important}.border-5.border-dark{border-color:#343a40 !important}.border-5.border-link{border-color:#3273dc !important}.border-primary-5{border:5px solid #007bff !important}.border-secondary-5{border:5px solid #6c757d !important}.border-success-5{border:5px solid #28a745 !important}.border-info-5{border:5px solid #17a2b8 !important}.border-warning-5{border:5px solid #ffc107 !important}.border-danger-5{border:5px solid #dc3545 !important}.border-light-5{border:5px solid #f8f9fa !important}.border-dark-5{border:5px solid #343a40 !important}.border-link-5{border:5px solid #3273dc !important}.border-top-5{border-top:5px solid #dee2e6 !important}.border-primary-top-5{border-top:5px solid #007bff !important}.border-secondary-top-5{border-top:5px solid #6c757d !important}.border-success-top-5{border-top:5px solid #28a745 !important}.border-info-top-5{border-top:5px solid #17a2b8 !important}.border-warning-top-5{border-top:5px solid #ffc107 !important}.border-danger-top-5{border-top:5px solid #dc3545 !important}.border-light-top-5{border-top:5px solid #f8f9fa !important}.border-dark-top-5{border-top:5px solid #343a40 !important}.border-link-top-5{border-top:5px solid #3273dc !important}.border-right-5{border-right:5px solid #dee2e6 !important}.border-primary-right-5{border-right:5px solid #007bff !important}.border-secondary-right-5{border-right:5px solid #6c757d !important}.border-success-right-5{border-right:5px solid #28a745 !important}.border-info-right-5{border-right:5px solid #17a2b8 !important}.border-warning-right-5{border-right:5px solid #ffc107 !important}.border-danger-right-5{border-right:5px solid #dc3545 !important}.border-light-right-5{border-right:5px solid #f8f9fa !important}.border-dark-right-5{border-right:5px solid #343a40 !important}.border-link-right-5{border-right:5px solid #3273dc !important}.border-bottom-5{border-bottom:5px solid #dee2e6 !important}.border-primary-bottom-5{border-bottom:5px solid #007bff !important}.border-secondary-bottom-5{border-bottom:5px solid #6c757d !important}.border-success-bottom-5{border-bottom:5px solid #28a745 !important}.border-info-bottom-5{border-bottom:5px solid #17a2b8 !important}.border-warning-bottom-5{border-bottom:5px solid #ffc107 !important}.border-danger-bottom-5{border-bottom:5px solid #dc3545 !important}.border-light-bottom-5{border-bottom:5px solid #f8f9fa !important}.border-dark-bottom-5{border-bottom:5px solid #343a40 !important}.border-link-bottom-5{border-bottom:5px solid #3273dc !important}.border-left-5{border-left:5px solid #dee2e6 !important}.border-primary-left-5{border-left:5px solid #007bff !important}.border-secondary-left-5{border-left:5px solid #6c757d !important}.border-success-left-5{border-left:5px solid #28a745 !important}.border-info-left-5{border-left:5px solid #17a2b8 !important}.border-warning-left-5{border-left:5px solid #ffc107 !important}.border-danger-left-5{border-left:5px solid #dc3545 !important}.border-light-left-5{border-left:5px solid #f8f9fa !important}.border-dark-left-5{border-left:5px solid #343a40 !important}.border-link-left-5{border-left:5px solid #3273dc !important}.flatpickr-months{margin:.5rem 0}.flatpickr-months .flatpickr-month,.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{height:auto;position:relative}.flatpickr-months .flatpickr-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#007bff}.flatpickr-months .flatpickr-month{color:#212529}.flatpickr-current-month{padding:13px 0 0 0;font-size:115%}.flatpickr-current-month span.cur-month{font-weight:700}.flatpickr-current-month span.cur-month:hover{background:rgba(0,123,255,.15)}.numInputWrapper:hover{background:rgba(0,123,255,.15)}.flatpickr-day{border-radius:.25rem;font-weight:500;color:#212529}.flatpickr-day.today{border-color:#007bff}.flatpickr-day.today:hover{background:#007bff;border-color:#007bff}.flatpickr-day:hover{background:rgba(0,123,255,.1);border-color:rgba(0,0,0,0)}span.flatpickr-weekday{color:#212529}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#007bff;border-color:#007bff}.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)){box-shadow:-10px 0 0 #007bff}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:.25rem 0 0 .25rem}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 .25rem .25rem 0}.flatpickr-monthSelect-month:hover,.flatpickr-monthSelect-month:focus{background:rgba(0,123,255,.1)}.flatpickr-monthSelect-month.selected{background-color:#007bff} +@keyframes fadeIn{0%{opacity:0}100%{opacity:1}0%{opacity:0}}@keyframes slideIn{0%{transform:translateY(1rem);opacity:0}100%{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}.badge-close{cursor:pointer}.badge-close::before{height:2px;width:50%}.badge-close::after{height:50%;width:2px}.badge-close:hover,.badge-close:focus{background-color:rgba(10,10,10,.3)}.badge-close:active{background-color:rgba(10,10,10,.4)}.navbar-nav .nav-item:hover{cursor:pointer}.navbar-nav .nav-link:hover{cursor:pointer}.nav .nav-link:hover{cursor:pointer}.nav-item{position:relative}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item{width:100%}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item:empty::after{margin-left:0}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item::after{transform:rotate(-90deg);position:absolute;right:10%;top:45%}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-menu{top:0;left:100%;margin-left:0;margin-right:.1rem}.btn-group>.b-tooltip:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.b-tooltip:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group.btn-group-toggle .btn.active.disabled{opacity:1}.btn-group-vertical>.b-tooltip:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.b-tooltip:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-xs,.btn-group-xs>.btn{padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.btn-md,.btn-group-md>.btn{padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.btn-xl,.btn-group-xl>.btn{padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.dropdown-toggle.dropdown-toggle-hidden::after{content:none !important}.dropdown-toggle.dropdown-toggle-hidden::before{content:none !important}.dropdown-menu.show{animation-duration:.3s;animation-fill-mode:both;animation-name:fadeIn}.dropdown-menu a:not([href]).dropdown-item:not(.disabled){cursor:pointer}.dropdown-menu.dropdown-menu-scrollable{max-height:var(--dropdown-list-menu-max-height,200px);overflow-y:scroll}.b-is-autocomplete .dropdown-menu{width:100%;max-height:var(--autocomplete-menu-max-height,200px);overflow-y:scroll}.b-is-autocomplete.b-is-autocomplete-multipleselection{max-width:100%;width:100%;cursor:text;min-height:calc(1.5em + .75rem + 2px);height:auto;border:1px solid #ced4da;border-radius:.25rem}.b-is-autocomplete.b-is-autocomplete-multipleselection>input.form-control{display:inline-block;border:none;box-shadow:none;outline:none;background-color:transparent;max-width:inherit;width:auto}.b-is-autocomplete.b-is-autocomplete-multipleselection.focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.dropdown.btn-group>.btn.dropdown-toggle-split+.dropdown-menu.show{top:100%}.dropdown{position:relative}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend){position:relative}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle{width:100%}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle:empty::after{margin-left:0}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle::after{position:absolute;right:10%;top:45%}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-menu{top:auto;left:auto;bottom:auto;right:auto}.dropdown>.dropdown-menu>.dropdown.dropup .dropdown-toggle::after,.dropdown>.dropdown-menu>.dropdown.dropend .dropdown-toggle::after{vertical-align:0;position:absolute;right:10%;top:45%}.dropdown>.dropdown-menu>.dropdown.dropstart .dropdown-toggle::after{vertical-align:0}.dropdown.dropup>.dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropdown.dropup>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropdown.dropup>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropend>.dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropdown.dropend>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropdown.dropend>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropend>.dropdown-toggle::after{vertical-align:0}.dropdown.dropstart>.dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropdown.dropstart>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropdown.dropstart>.dropdown-toggle::after{display:none}.dropdown.dropstart>.dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropdown.dropstart>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropstart>.dropdown-toggle::before{vertical-align:0}.dropdown-menu-start{right:auto;left:0}.dropdown-menu-end{right:0;left:auto}@media(min-width:576px){.dropdown-menu-sm-start{right:auto;left:0}.dropdown-menu-sm-end{right:0;left:auto}}@media(min-width:768px){.dropdown-menu-md-start{right:auto;left:0}.dropdown-menu-md-end{right:0;left:auto}}@media(min-width:992px){.dropdown-menu-lg-start{right:auto;left:0}.dropdown-menu-lg-end{right:0;left:auto}}@media(min-width:1200px){.dropdown-menu-xl-start{right:auto;left:0}.dropdown-menu-xl-end{right:0;left:auto}}hr.divider.divider-text{position:unset}hr.divider.divider-text::before{top:unset}.snackbar-stack{z-index:1059 !important}.snackbar{z-index:1060 !important}.figure.figure-is-16x16{height:16px;width:16px}.figure.figure-is-24x24{height:24px;width:24px}.figure.figure-is-32x32{height:32px;width:32px}.figure.figure-is-48x48{height:48px;width:48px}.figure.figure-is-64x64{height:64px;width:64px}.figure.figure-is-96x96{height:96px;width:96px}.figure.figure-is-128x128{height:128px;width:128px}.figure.figure-is-256x256{height:256px;width:256px}.figure.figure-is-512x512{height:512px;width:512px}.form-check>.form-check-input.form-check-input-pointer,.form-check>.form-check-label.form-check-label-pointer,.form-switch>.form-check-input.form-check-input-pointer,.form-switch>.form-check-label.form-check-label-pointer{cursor:pointer}.form-control-plaintext.form-control-xs,.form-control-plaintext.form-control-md,.form-control-plaintext.form-control-xl{padding-right:0;padding-left:0}.form-control-xs{height:calc(1.5em + .3rem + 2px);padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.form-control-md{height:calc(1.5em + .94rem + 2px);padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.form-control-xl{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.form-select-xs{height:calc(1.5em + .3rem + 2px);padding-top:.15rem;padding-bottom:.15rem;padding-left:.5rem;font-size:.75rem}.form-select-md{height:calc(1.5em + .94rem + 2px);padding-top:.47rem;padding-bottom:.47rem;padding-left:1rem;font-size:1.125rem}.form-select-xl{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.5rem}.input-group>.b-numeric:not(:last-child)>input{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.b-numeric:not(:first-child)>input{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-xs>.form-control:not(textarea),.input-group-xs>.form-select,.input-group-xs>.b-numeric>input{height:calc(1.5em + .3rem + 2px)}.input-group-xs>.form-control,.input-group-xs>.form-select,.input-group-xs>.input-group-text,.input-group-xs>.btn,.input-group-xs>.b-numeric>input{padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.input-group-sm>.b-numeric>input{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.b-numeric>input{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-md>.form-control:not(textarea),.input-group-md>.form-select,.input-group-md>.b-numeric>input{height:calc(1.5em + .94rem + 2px)}.input-group-md>.form-control,.input-group-md>.form-select,.input-group-md>.input-group-text,.input-group-md>.btn,.input-group-md>.b-numeric>input{padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.input-group-lg>.b-numeric>input{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.b-numeric>input{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-xl>.form-control:not(textarea),.input-group-xl>.form-select,.input-group-xl>.b-numeric>input{height:calc(1.5em + 1rem + 2px)}.input-group-xl>.form-control,.input-group-xl>.form-select,.input-group-xl>.input-group-text,.input-group-xl>.btn,.input-group-xl>.b-numeric>input{padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.input-group-xs>.form-select,.input-group-md>.form-select,.input-group-xl>.form-select{padding-right:1.75rem}.input-group:not(.has-validation)>.dropdown:first-child>.btn:not(:last-child).dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown>.btn:not(:last-child).dropdown-toggle,.input-group.has-validation>.dropdown>.btn:not(:last-child):not(.dropdown-toggle){border-top-left-radius:0;border-bottom-left-radius:0}.form-check>.form-check-input.form-check-input-xs{width:.7rem;height:.7rem}.form-check>.form-check-input.form-check-input-xs+.form-check-label{line-height:"normal";padding-left:0}.form-check>.form-check-input.form-check-input-sm{width:.8rem;height:.8rem}.form-check>.form-check-input.form-check-input-sm+.form-check-label{line-height:"normal";padding-left:0}.form-check>.form-check-input.form-check-input-md{width:1.25rem;height:1.25rem}.form-check>.form-check-input.form-check-input-md+.form-check-label{line-height:1.7rem;padding-left:3px}.form-check>.form-check-input.form-check-input-lg{width:1.55rem;height:1.55rem}.form-check>.form-check-input.form-check-input-lg+.form-check-label{line-height:2rem;padding-left:6px}.form-check>.form-check-input.form-check-input-xl{width:1.85rem;height:1.85rem}.form-check>.form-check-input.form-check-input-xl+.form-check-label{line-height:2.5rem;padding-left:10px}select[readonly]{pointer-events:none}select[readonly] option,select[readonly] optgroup{display:none}.b-numeric{position:relative;width:100%}.b-numeric:hover>.b-numeric-handler-wrap{opacity:1}.b-numeric-handler-wrap{position:absolute;top:0;right:0;width:22px;height:100%;background:#fff;border:1px solid #d9d9d9;opacity:0}.input-group .b-numeric{-ms-flex:1 1 auto;flex:1 1 auto;width:1%}.b-numeric-handler-wrap .b-numeric-handler.b-numeric-handler-down{border-top:1px solid #d9d9d9}.b-numeric-handler{position:relative;display:flex;width:100%;height:50%;overflow:hidden;color:rgba(0,0,0,.45);font-weight:700;line-height:0;align-items:center;justify-content:center}.b-numeric-handler.btn{padding:0}.form-control+.b-numeric-handler-wrap{font-size:1rem;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.form-control-xs+.b-numeric-handler-wrap{font-size:.75rem;border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.form-control-xs+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:.75rem}.form-control-sm+.b-numeric-handler-wrap{font-size:.875rem;border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.form-control-sm+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:.875rem}.form-control-md+.b-numeric-handler-wrap{font-size:1.125rem;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.form-control-md+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.125rem}.form-control-lg+.b-numeric-handler-wrap{font-size:1.25rem;border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.form-control-lg+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.25rem}.form-control-xl+.b-numeric-handler-wrap{font-size:1.5rem;border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}.form-control-xl+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.5rem}.custom-file-label{overflow:hidden}input[readonly][type=range],input[readonly=readonly][type=range]{pointer-events:none}input[readonly][type=range]::-webkit-slider-thumb,input[readonly=readonly][type=range]::-webkit-slider-thumb{pointer-events:none}input[readonly][type=range]::-moz-range-thumb,input[readonly=readonly][type=range]::-moz-range-thumb{pointer-events:none}input[readonly][type=range]::-ms-thumb,input[readonly=readonly][type=range]::-ms-thumb{pointer-events:none}.form-group{margin-bottom:1rem}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media(min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .form-select{align-items:center;justify-content:center}.form-inline .form-check-label{margin-bottom:0}}.b-input-color-picker{padding:.5rem .6rem}.b-input-color-picker>.b-input-color-picker-preview{height:.55rem}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media(min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.jumbotron.jumbotron-primary{background-color:#007bff;color:#fff}.jumbotron.jumbotron-secondary{background-color:#6c757d;color:#fff}.jumbotron.jumbotron-success{background-color:#28a745;color:#fff}.jumbotron.jumbotron-info{background-color:#17a2b8;color:#fff}.jumbotron.jumbotron-warning{background-color:#ffc107;color:#212529}.jumbotron.jumbotron-danger{background-color:#dc3545;color:#fff}.jumbotron.jumbotron-light{background-color:#f8f9fa;color:#212529}.jumbotron.jumbotron-dark{background-color:#343a40;color:#fff}.jumbotron.jumbotron-link{background-color:#3273dc;color:#fff}.b-layout-header-fixed{z-index:1030}.b-layout-footer-fixed{z-index:1030}.b-layout-sider-content{z-index:1031}li.list-group-item-action{cursor:pointer}.b-list-view{overflow-y:scroll}.media{display:flex;align-items:flex-start}.media-body{flex:1}.modal.fade{transition:opacity var(--modal-animation-duration,300ms) linear}.modal.fade .modal-dialog{transition:-webkit-transform var(--modal-animation-duration,300ms) ease-out;transition:transform var(--modal-animation-duration,300ms) ease-out}.page-item:not(.disabled) .page-link{cursor:pointer}.pagination-xs .page-link{padding:.125rem .25rem;font-size:.75rem;line-height:1.5}.pagination-xs .page-item:first-child .page-link{border-top-left-radius:.15rem;border-bottom-left-radius:.15rem}.pagination-xs .page-item:last-child .page-link{border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.pagination-md .page-link{padding:.625rem 1.25rem;font-size:1.125rem;line-height:1.5}.pagination-md .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-md .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-xl .page-link{padding:1rem 2rem;font-size:1.5rem;line-height:1.5}.pagination-xl .page-item:first-child .page-link{border-top-left-radius:.4rem;border-bottom-left-radius:.4rem}.pagination-xl .page-item:last-child .page-link{border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-primary{background-color:#007bff}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-secondary{background-color:#6c757d}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-success{background-color:#28a745}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-info{background-color:#17a2b8}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-warning{background-color:#ffc107}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-danger{background-color:#dc3545}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-light{background-color:#f8f9fa}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-dark{background-color:#343a40}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-link{background-color:#3273dc}.rating:not(.rating-disabled):not(.rating-readonly):hover .rating-item{cursor:pointer}.rating.rating-disabled{opacity:.65}.rating .rating-item.rating-item-primary{color:#007bff}.rating .rating-item.rating-item-secondary{color:#6c757d}.rating .rating-item.rating-item-success{color:#28a745}.rating .rating-item.rating-item-info{color:#17a2b8}.rating .rating-item.rating-item-warning{color:#ffc107}.rating .rating-item.rating-item-danger{color:#dc3545}.rating .rating-item.rating-item-light{color:#f8f9fa}.rating .rating-item.rating-item-dark{color:#343a40}.rating .rating-item.rating-item-link{color:#3273dc}.rating .rating-item.rating-item-hover{opacity:.7}.steps{padding:0;margin:0;list-style:none;display:flex;overflow-x:auto}.steps .step:first-child{margin-left:auto}.steps .step:last-child{margin-right:auto}.step:first-of-type .step-circle::before{display:none}.step:last-of-type .step-container{padding-right:0}.step-container{box-sizing:content-box;display:flex;align-items:center;flex-direction:column;width:5rem;min-width:5rem;max-width:5rem;padding-top:.5rem;padding-right:1rem}.step-circle{position:relative;display:flex;justify-content:center;align-items:center;width:1.5rem;height:1.5rem;color:#adb5bd;border:2px solid #adb5bd;border-radius:100%;background-color:#fff}.step-circle::before{content:"";display:block;position:absolute;top:50%;left:-2px;width:calc(5rem + 1rem - 1.5rem);height:2px;transform:translate(-100%,-50%);color:#adb5bd;background-color:currentColor}.step-text{color:#adb5bd;word-break:break-all;margin-top:.25em}.step-completed .step-circle{color:#fff;background-color:#28a745;border-color:#28a745}.step-completed .step-circle::before{color:#28a745}.step-completed .step-text{color:#28a745}.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-active .step-circle::before{color:#007bff}.step-active .step-text{color:#007bff}.step-primary .step-circle{color:#007bff;border-color:#007bff}.step-primary.step-completed .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-primary.step-completed .step-circle::before{color:#007bff}.step-primary.step-completed .step-text{color:#007bff}.step-primary.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-primary.step-active::before{color:#007bff}.step-primary.step-active .step-text{color:#007bff}.step-secondary .step-circle{color:#6c757d;border-color:#6c757d}.step-secondary.step-completed .step-circle{color:#fff;background-color:#6c757d;border-color:#6c757d}.step-secondary.step-completed .step-circle::before{color:#6c757d}.step-secondary.step-completed .step-text{color:#6c757d}.step-secondary.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-secondary.step-active::before{color:#007bff}.step-secondary.step-active .step-text{color:#007bff}.step-success .step-circle{color:#28a745;border-color:#28a745}.step-success.step-completed .step-circle{color:#fff;background-color:#28a745;border-color:#28a745}.step-success.step-completed .step-circle::before{color:#28a745}.step-success.step-completed .step-text{color:#28a745}.step-success.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-success.step-active::before{color:#007bff}.step-success.step-active .step-text{color:#007bff}.step-info .step-circle{color:#17a2b8;border-color:#17a2b8}.step-info.step-completed .step-circle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.step-info.step-completed .step-circle::before{color:#17a2b8}.step-info.step-completed .step-text{color:#17a2b8}.step-info.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-info.step-active::before{color:#007bff}.step-info.step-active .step-text{color:#007bff}.step-warning .step-circle{color:#ffc107;border-color:#ffc107}.step-warning.step-completed .step-circle{color:#fff;background-color:#ffc107;border-color:#ffc107}.step-warning.step-completed .step-circle::before{color:#ffc107}.step-warning.step-completed .step-text{color:#ffc107}.step-warning.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-warning.step-active::before{color:#007bff}.step-warning.step-active .step-text{color:#007bff}.step-danger .step-circle{color:#dc3545;border-color:#dc3545}.step-danger.step-completed .step-circle{color:#fff;background-color:#dc3545;border-color:#dc3545}.step-danger.step-completed .step-circle::before{color:#dc3545}.step-danger.step-completed .step-text{color:#dc3545}.step-danger.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-danger.step-active::before{color:#007bff}.step-danger.step-active .step-text{color:#007bff}.step-light .step-circle{color:#f8f9fa;border-color:#f8f9fa}.step-light.step-completed .step-circle{color:#fff;background-color:#f8f9fa;border-color:#f8f9fa}.step-light.step-completed .step-circle::before{color:#f8f9fa}.step-light.step-completed .step-text{color:#f8f9fa}.step-light.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-light.step-active::before{color:#007bff}.step-light.step-active .step-text{color:#007bff}.step-dark .step-circle{color:#343a40;border-color:#343a40}.step-dark.step-completed .step-circle{color:#fff;background-color:#343a40;border-color:#343a40}.step-dark.step-completed .step-circle::before{color:#343a40}.step-dark.step-completed .step-text{color:#343a40}.step-dark.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-dark.step-active::before{color:#007bff}.step-dark.step-active .step-text{color:#007bff}.step-link .step-circle{color:#3273dc;border-color:#3273dc}.step-link.step-completed .step-circle{color:#fff;background-color:#3273dc;border-color:#3273dc}.step-link.step-completed .step-circle::before{color:#3273dc}.step-link.step-completed .step-text{color:#3273dc}.step-link.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-link.step-active::before{color:#007bff}.step-link.step-active .step-text{color:#007bff}.steps-content{margin:1rem 0}.steps-content>.step-panel{display:none}.steps-content>.active{display:block}.form-check.form-switch .form-check-input.form-check-input-primary:checked{background-color:#007bff;border-color:#007bff}.form-check.form-switch .form-check-input.form-check-input-secondary:checked{background-color:#6c757d;border-color:#6c757d}.form-check.form-switch .form-check-input.form-check-input-success:checked{background-color:#28a745;border-color:#28a745}.form-check.form-switch .form-check-input.form-check-input-info:checked{background-color:#17a2b8;border-color:#17a2b8}.form-check.form-switch .form-check-input.form-check-input-warning:checked{background-color:#ffc107;border-color:#ffc107}.form-check.form-switch .form-check-input.form-check-input-danger:checked{background-color:#dc3545;border-color:#dc3545}.form-check.form-switch .form-check-input.form-check-input-light:checked{background-color:#f8f9fa;border-color:#f8f9fa}.form-check.form-switch .form-check-input.form-check-input-dark:checked{background-color:#343a40;border-color:#343a40}.form-check.form-switch .form-check-input.form-check-input-link:checked{background-color:#3273dc;border-color:#3273dc}.form-check.form-switch .form-check-input.form-check-input-xs{width:calc(.75rem + (.5rem/2));height:.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-xs+.form-check-label{line-height:1rem;vertical-align:middle;padding-left:0}.form-check.form-switch .form-check-input.form-check-input-xs:checked~.form-check-label::after{transform:translateX(calc(.75rem - (.5rem/2)))}.form-check.form-switch .form-check-input.form-check-input-sm{width:calc(1rem + (.75rem/2));height:.75rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-sm+.form-check-label{line-height:1.25rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-sm:checked~.form-check-label::after{transform:translateX(calc(1rem - (.75rem/2)))}.form-check.form-switch .form-check-input.form-check-input-md{width:calc(2rem + (1.5rem/2));height:1.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-md+.form-check-label{line-height:2rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-md:checked~.form-check-label::after{transform:translateX(calc(2rem - (1.5rem/2)))}.form-check.form-switch .form-check-input.form-check-input-lg{width:calc(3rem + (2rem/2));height:2rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-lg+.form-check-label{line-height:2.5rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-lg:checked~.form-check-label::after{transform:translateX(calc(3rem - (2rem/2)))}.form-check.form-switch .form-check-input.form-check-input-xl{width:calc(4rem + (2.5rem/2));height:2.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-xl+.form-check-label{line-height:3rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-xl:checked~.form-check-label::after{transform:translateX(calc(4rem - (2.5rem/2)))}table.table tbody tr.selected{background-color:var(--primary)}tr.table-row-selectable:hover{cursor:pointer}.table-fixed-header{overflow-y:auto}.table-fixed-header>.table{border-collapse:separate;border-spacing:0}.table-fixed-header>.table>thead>tr>th{border-top:none;position:sticky;background:#fff;z-index:10}.table-fixed-header>.table>thead>tr:nth-child(1)>th{top:0}.table-fixed-header>.table-bordered>:not(caption)>*>*{border-width:1px 1px}.overflow-auto-auto{overflow:auto auto !important}.overflow-auto-hidden{overflow:auto hidden !important}.overflow-auto-visible{overflow:auto visible !important}.overflow-auto-scroll{overflow:auto scroll !important}.overflow-hidden-auto{overflow:hidden auto !important}.overflow-hidden-hidden{overflow:hidden hidden !important}.overflow-hidden-visible{overflow:hidden visible !important}.overflow-hidden-scroll{overflow:hidden scroll !important}.overflow-visible-auto{overflow:visible auto !important}.overflow-visible-hidden{overflow:visible hidden !important}.overflow-visible-visible{overflow:visible visible !important}.overflow-visible-scroll{overflow:visible scroll !important}.overflow-scroll-auto{overflow:scroll auto !important}.overflow-scroll-hidden{overflow:scroll hidden !important}.overflow-scroll-visible{overflow:scroll visible !important}.overflow-scroll-scroll{overflow:scroll scroll !important}ol.ordered-list-lower-alpha{list-style-type:lower-alpha}ol.ordered-list-lower-roman{list-style-type:lower-roman}ol.ordered-list-upper-alpha{list-style-type:upper-alpha}ol.ordered-list-upper-roman{list-style-type:upper-roman}.border-1{border:1px solid #dee2e6 !important}.border-1.border-primary{border-color:#007bff !important}.border-1.border-secondary{border-color:#6c757d !important}.border-1.border-success{border-color:#28a745 !important}.border-1.border-info{border-color:#17a2b8 !important}.border-1.border-warning{border-color:#ffc107 !important}.border-1.border-danger{border-color:#dc3545 !important}.border-1.border-light{border-color:#f8f9fa !important}.border-1.border-dark{border-color:#343a40 !important}.border-1.border-link{border-color:#3273dc !important}.border-primary-1{border:1px solid #007bff !important}.border-secondary-1{border:1px solid #6c757d !important}.border-success-1{border:1px solid #28a745 !important}.border-info-1{border:1px solid #17a2b8 !important}.border-warning-1{border:1px solid #ffc107 !important}.border-danger-1{border:1px solid #dc3545 !important}.border-light-1{border:1px solid #f8f9fa !important}.border-dark-1{border:1px solid #343a40 !important}.border-link-1{border:1px solid #3273dc !important}.border-top-1{border-top:1px solid #dee2e6 !important}.border-primary-top-1{border-top:1px solid #007bff !important}.border-secondary-top-1{border-top:1px solid #6c757d !important}.border-success-top-1{border-top:1px solid #28a745 !important}.border-info-top-1{border-top:1px solid #17a2b8 !important}.border-warning-top-1{border-top:1px solid #ffc107 !important}.border-danger-top-1{border-top:1px solid #dc3545 !important}.border-light-top-1{border-top:1px solid #f8f9fa !important}.border-dark-top-1{border-top:1px solid #343a40 !important}.border-link-top-1{border-top:1px solid #3273dc !important}.border-end-1{border-right:1px solid #dee2e6 !important}.border-primary-end-1{border-right:1px solid #007bff !important}.border-secondary-end-1{border-right:1px solid #6c757d !important}.border-success-end-1{border-right:1px solid #28a745 !important}.border-info-end-1{border-right:1px solid #17a2b8 !important}.border-warning-end-1{border-right:1px solid #ffc107 !important}.border-danger-end-1{border-right:1px solid #dc3545 !important}.border-light-end-1{border-right:1px solid #f8f9fa !important}.border-dark-end-1{border-right:1px solid #343a40 !important}.border-link-end-1{border-right:1px solid #3273dc !important}.border-bottom-1{border-bottom:1px solid #dee2e6 !important}.border-primary-bottom-1{border-bottom:1px solid #007bff !important}.border-secondary-bottom-1{border-bottom:1px solid #6c757d !important}.border-success-bottom-1{border-bottom:1px solid #28a745 !important}.border-info-bottom-1{border-bottom:1px solid #17a2b8 !important}.border-warning-bottom-1{border-bottom:1px solid #ffc107 !important}.border-danger-bottom-1{border-bottom:1px solid #dc3545 !important}.border-light-bottom-1{border-bottom:1px solid #f8f9fa !important}.border-dark-bottom-1{border-bottom:1px solid #343a40 !important}.border-link-bottom-1{border-bottom:1px solid #3273dc !important}.border-start-1{border-left:1px solid #dee2e6 !important}.border-primary-start-1{border-left:1px solid #007bff !important}.border-secondary-start-1{border-left:1px solid #6c757d !important}.border-success-start-1{border-left:1px solid #28a745 !important}.border-info-start-1{border-left:1px solid #17a2b8 !important}.border-warning-start-1{border-left:1px solid #ffc107 !important}.border-danger-start-1{border-left:1px solid #dc3545 !important}.border-light-start-1{border-left:1px solid #f8f9fa !important}.border-dark-start-1{border-left:1px solid #343a40 !important}.border-link-start-1{border-left:1px solid #3273dc !important}.border-2{border:2px solid #dee2e6 !important}.border-2.border-primary{border-color:#007bff !important}.border-2.border-secondary{border-color:#6c757d !important}.border-2.border-success{border-color:#28a745 !important}.border-2.border-info{border-color:#17a2b8 !important}.border-2.border-warning{border-color:#ffc107 !important}.border-2.border-danger{border-color:#dc3545 !important}.border-2.border-light{border-color:#f8f9fa !important}.border-2.border-dark{border-color:#343a40 !important}.border-2.border-link{border-color:#3273dc !important}.border-primary-2{border:2px solid #007bff !important}.border-secondary-2{border:2px solid #6c757d !important}.border-success-2{border:2px solid #28a745 !important}.border-info-2{border:2px solid #17a2b8 !important}.border-warning-2{border:2px solid #ffc107 !important}.border-danger-2{border:2px solid #dc3545 !important}.border-light-2{border:2px solid #f8f9fa !important}.border-dark-2{border:2px solid #343a40 !important}.border-link-2{border:2px solid #3273dc !important}.border-top-2{border-top:2px solid #dee2e6 !important}.border-primary-top-2{border-top:2px solid #007bff !important}.border-secondary-top-2{border-top:2px solid #6c757d !important}.border-success-top-2{border-top:2px solid #28a745 !important}.border-info-top-2{border-top:2px solid #17a2b8 !important}.border-warning-top-2{border-top:2px solid #ffc107 !important}.border-danger-top-2{border-top:2px solid #dc3545 !important}.border-light-top-2{border-top:2px solid #f8f9fa !important}.border-dark-top-2{border-top:2px solid #343a40 !important}.border-link-top-2{border-top:2px solid #3273dc !important}.border-end-2{border-right:2px solid #dee2e6 !important}.border-primary-end-2{border-right:2px solid #007bff !important}.border-secondary-end-2{border-right:2px solid #6c757d !important}.border-success-end-2{border-right:2px solid #28a745 !important}.border-info-end-2{border-right:2px solid #17a2b8 !important}.border-warning-end-2{border-right:2px solid #ffc107 !important}.border-danger-end-2{border-right:2px solid #dc3545 !important}.border-light-end-2{border-right:2px solid #f8f9fa !important}.border-dark-end-2{border-right:2px solid #343a40 !important}.border-link-end-2{border-right:2px solid #3273dc !important}.border-bottom-2{border-bottom:2px solid #dee2e6 !important}.border-primary-bottom-2{border-bottom:2px solid #007bff !important}.border-secondary-bottom-2{border-bottom:2px solid #6c757d !important}.border-success-bottom-2{border-bottom:2px solid #28a745 !important}.border-info-bottom-2{border-bottom:2px solid #17a2b8 !important}.border-warning-bottom-2{border-bottom:2px solid #ffc107 !important}.border-danger-bottom-2{border-bottom:2px solid #dc3545 !important}.border-light-bottom-2{border-bottom:2px solid #f8f9fa !important}.border-dark-bottom-2{border-bottom:2px solid #343a40 !important}.border-link-bottom-2{border-bottom:2px solid #3273dc !important}.border-start-2{border-left:2px solid #dee2e6 !important}.border-primary-start-2{border-left:2px solid #007bff !important}.border-secondary-start-2{border-left:2px solid #6c757d !important}.border-success-start-2{border-left:2px solid #28a745 !important}.border-info-start-2{border-left:2px solid #17a2b8 !important}.border-warning-start-2{border-left:2px solid #ffc107 !important}.border-danger-start-2{border-left:2px solid #dc3545 !important}.border-light-start-2{border-left:2px solid #f8f9fa !important}.border-dark-start-2{border-left:2px solid #343a40 !important}.border-link-start-2{border-left:2px solid #3273dc !important}.border-3{border:3px solid #dee2e6 !important}.border-3.border-primary{border-color:#007bff !important}.border-3.border-secondary{border-color:#6c757d !important}.border-3.border-success{border-color:#28a745 !important}.border-3.border-info{border-color:#17a2b8 !important}.border-3.border-warning{border-color:#ffc107 !important}.border-3.border-danger{border-color:#dc3545 !important}.border-3.border-light{border-color:#f8f9fa !important}.border-3.border-dark{border-color:#343a40 !important}.border-3.border-link{border-color:#3273dc !important}.border-primary-3{border:3px solid #007bff !important}.border-secondary-3{border:3px solid #6c757d !important}.border-success-3{border:3px solid #28a745 !important}.border-info-3{border:3px solid #17a2b8 !important}.border-warning-3{border:3px solid #ffc107 !important}.border-danger-3{border:3px solid #dc3545 !important}.border-light-3{border:3px solid #f8f9fa !important}.border-dark-3{border:3px solid #343a40 !important}.border-link-3{border:3px solid #3273dc !important}.border-top-3{border-top:3px solid #dee2e6 !important}.border-primary-top-3{border-top:3px solid #007bff !important}.border-secondary-top-3{border-top:3px solid #6c757d !important}.border-success-top-3{border-top:3px solid #28a745 !important}.border-info-top-3{border-top:3px solid #17a2b8 !important}.border-warning-top-3{border-top:3px solid #ffc107 !important}.border-danger-top-3{border-top:3px solid #dc3545 !important}.border-light-top-3{border-top:3px solid #f8f9fa !important}.border-dark-top-3{border-top:3px solid #343a40 !important}.border-link-top-3{border-top:3px solid #3273dc !important}.border-end-3{border-right:3px solid #dee2e6 !important}.border-primary-end-3{border-right:3px solid #007bff !important}.border-secondary-end-3{border-right:3px solid #6c757d !important}.border-success-end-3{border-right:3px solid #28a745 !important}.border-info-end-3{border-right:3px solid #17a2b8 !important}.border-warning-end-3{border-right:3px solid #ffc107 !important}.border-danger-end-3{border-right:3px solid #dc3545 !important}.border-light-end-3{border-right:3px solid #f8f9fa !important}.border-dark-end-3{border-right:3px solid #343a40 !important}.border-link-end-3{border-right:3px solid #3273dc !important}.border-bottom-3{border-bottom:3px solid #dee2e6 !important}.border-primary-bottom-3{border-bottom:3px solid #007bff !important}.border-secondary-bottom-3{border-bottom:3px solid #6c757d !important}.border-success-bottom-3{border-bottom:3px solid #28a745 !important}.border-info-bottom-3{border-bottom:3px solid #17a2b8 !important}.border-warning-bottom-3{border-bottom:3px solid #ffc107 !important}.border-danger-bottom-3{border-bottom:3px solid #dc3545 !important}.border-light-bottom-3{border-bottom:3px solid #f8f9fa !important}.border-dark-bottom-3{border-bottom:3px solid #343a40 !important}.border-link-bottom-3{border-bottom:3px solid #3273dc !important}.border-start-3{border-left:3px solid #dee2e6 !important}.border-primary-start-3{border-left:3px solid #007bff !important}.border-secondary-start-3{border-left:3px solid #6c757d !important}.border-success-start-3{border-left:3px solid #28a745 !important}.border-info-start-3{border-left:3px solid #17a2b8 !important}.border-warning-start-3{border-left:3px solid #ffc107 !important}.border-danger-start-3{border-left:3px solid #dc3545 !important}.border-light-start-3{border-left:3px solid #f8f9fa !important}.border-dark-start-3{border-left:3px solid #343a40 !important}.border-link-start-3{border-left:3px solid #3273dc !important}.border-4{border:4px solid #dee2e6 !important}.border-4.border-primary{border-color:#007bff !important}.border-4.border-secondary{border-color:#6c757d !important}.border-4.border-success{border-color:#28a745 !important}.border-4.border-info{border-color:#17a2b8 !important}.border-4.border-warning{border-color:#ffc107 !important}.border-4.border-danger{border-color:#dc3545 !important}.border-4.border-light{border-color:#f8f9fa !important}.border-4.border-dark{border-color:#343a40 !important}.border-4.border-link{border-color:#3273dc !important}.border-primary-4{border:4px solid #007bff !important}.border-secondary-4{border:4px solid #6c757d !important}.border-success-4{border:4px solid #28a745 !important}.border-info-4{border:4px solid #17a2b8 !important}.border-warning-4{border:4px solid #ffc107 !important}.border-danger-4{border:4px solid #dc3545 !important}.border-light-4{border:4px solid #f8f9fa !important}.border-dark-4{border:4px solid #343a40 !important}.border-link-4{border:4px solid #3273dc !important}.border-top-4{border-top:4px solid #dee2e6 !important}.border-primary-top-4{border-top:4px solid #007bff !important}.border-secondary-top-4{border-top:4px solid #6c757d !important}.border-success-top-4{border-top:4px solid #28a745 !important}.border-info-top-4{border-top:4px solid #17a2b8 !important}.border-warning-top-4{border-top:4px solid #ffc107 !important}.border-danger-top-4{border-top:4px solid #dc3545 !important}.border-light-top-4{border-top:4px solid #f8f9fa !important}.border-dark-top-4{border-top:4px solid #343a40 !important}.border-link-top-4{border-top:4px solid #3273dc !important}.border-end-4{border-right:4px solid #dee2e6 !important}.border-primary-end-4{border-right:4px solid #007bff !important}.border-secondary-end-4{border-right:4px solid #6c757d !important}.border-success-end-4{border-right:4px solid #28a745 !important}.border-info-end-4{border-right:4px solid #17a2b8 !important}.border-warning-end-4{border-right:4px solid #ffc107 !important}.border-danger-end-4{border-right:4px solid #dc3545 !important}.border-light-end-4{border-right:4px solid #f8f9fa !important}.border-dark-end-4{border-right:4px solid #343a40 !important}.border-link-end-4{border-right:4px solid #3273dc !important}.border-bottom-4{border-bottom:4px solid #dee2e6 !important}.border-primary-bottom-4{border-bottom:4px solid #007bff !important}.border-secondary-bottom-4{border-bottom:4px solid #6c757d !important}.border-success-bottom-4{border-bottom:4px solid #28a745 !important}.border-info-bottom-4{border-bottom:4px solid #17a2b8 !important}.border-warning-bottom-4{border-bottom:4px solid #ffc107 !important}.border-danger-bottom-4{border-bottom:4px solid #dc3545 !important}.border-light-bottom-4{border-bottom:4px solid #f8f9fa !important}.border-dark-bottom-4{border-bottom:4px solid #343a40 !important}.border-link-bottom-4{border-bottom:4px solid #3273dc !important}.border-start-4{border-left:4px solid #dee2e6 !important}.border-primary-start-4{border-left:4px solid #007bff !important}.border-secondary-start-4{border-left:4px solid #6c757d !important}.border-success-start-4{border-left:4px solid #28a745 !important}.border-info-start-4{border-left:4px solid #17a2b8 !important}.border-warning-start-4{border-left:4px solid #ffc107 !important}.border-danger-start-4{border-left:4px solid #dc3545 !important}.border-light-start-4{border-left:4px solid #f8f9fa !important}.border-dark-start-4{border-left:4px solid #343a40 !important}.border-link-start-4{border-left:4px solid #3273dc !important}.border-5{border:5px solid #dee2e6 !important}.border-5.border-primary{border-color:#007bff !important}.border-5.border-secondary{border-color:#6c757d !important}.border-5.border-success{border-color:#28a745 !important}.border-5.border-info{border-color:#17a2b8 !important}.border-5.border-warning{border-color:#ffc107 !important}.border-5.border-danger{border-color:#dc3545 !important}.border-5.border-light{border-color:#f8f9fa !important}.border-5.border-dark{border-color:#343a40 !important}.border-5.border-link{border-color:#3273dc !important}.border-primary-5{border:5px solid #007bff !important}.border-secondary-5{border:5px solid #6c757d !important}.border-success-5{border:5px solid #28a745 !important}.border-info-5{border:5px solid #17a2b8 !important}.border-warning-5{border:5px solid #ffc107 !important}.border-danger-5{border:5px solid #dc3545 !important}.border-light-5{border:5px solid #f8f9fa !important}.border-dark-5{border:5px solid #343a40 !important}.border-link-5{border:5px solid #3273dc !important}.border-top-5{border-top:5px solid #dee2e6 !important}.border-primary-top-5{border-top:5px solid #007bff !important}.border-secondary-top-5{border-top:5px solid #6c757d !important}.border-success-top-5{border-top:5px solid #28a745 !important}.border-info-top-5{border-top:5px solid #17a2b8 !important}.border-warning-top-5{border-top:5px solid #ffc107 !important}.border-danger-top-5{border-top:5px solid #dc3545 !important}.border-light-top-5{border-top:5px solid #f8f9fa !important}.border-dark-top-5{border-top:5px solid #343a40 !important}.border-link-top-5{border-top:5px solid #3273dc !important}.border-end-5{border-right:5px solid #dee2e6 !important}.border-primary-end-5{border-right:5px solid #007bff !important}.border-secondary-end-5{border-right:5px solid #6c757d !important}.border-success-end-5{border-right:5px solid #28a745 !important}.border-info-end-5{border-right:5px solid #17a2b8 !important}.border-warning-end-5{border-right:5px solid #ffc107 !important}.border-danger-end-5{border-right:5px solid #dc3545 !important}.border-light-end-5{border-right:5px solid #f8f9fa !important}.border-dark-end-5{border-right:5px solid #343a40 !important}.border-link-end-5{border-right:5px solid #3273dc !important}.border-bottom-5{border-bottom:5px solid #dee2e6 !important}.border-primary-bottom-5{border-bottom:5px solid #007bff !important}.border-secondary-bottom-5{border-bottom:5px solid #6c757d !important}.border-success-bottom-5{border-bottom:5px solid #28a745 !important}.border-info-bottom-5{border-bottom:5px solid #17a2b8 !important}.border-warning-bottom-5{border-bottom:5px solid #ffc107 !important}.border-danger-bottom-5{border-bottom:5px solid #dc3545 !important}.border-light-bottom-5{border-bottom:5px solid #f8f9fa !important}.border-dark-bottom-5{border-bottom:5px solid #343a40 !important}.border-link-bottom-5{border-bottom:5px solid #3273dc !important}.border-start-5{border-left:5px solid #dee2e6 !important}.border-primary-start-5{border-left:5px solid #007bff !important}.border-secondary-start-5{border-left:5px solid #6c757d !important}.border-success-start-5{border-left:5px solid #28a745 !important}.border-info-start-5{border-left:5px solid #17a2b8 !important}.border-warning-start-5{border-left:5px solid #ffc107 !important}.border-danger-start-5{border-left:5px solid #dc3545 !important}.border-light-start-5{border-left:5px solid #f8f9fa !important}.border-dark-start-5{border-left:5px solid #343a40 !important}.border-link-start-5{border-left:5px solid #3273dc !important}.flatpickr-months{margin:.5rem 0}.flatpickr-months .flatpickr-month,.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{height:auto;position:relative}.flatpickr-months .flatpickr-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#007bff}.flatpickr-months .flatpickr-month{color:#212529}.flatpickr-current-month{padding:13px 0 0 0;font-size:115%}.flatpickr-current-month span.cur-month{font-weight:700}.flatpickr-current-month span.cur-month:hover{background:rgba(0,123,255,.15)}.numInputWrapper:hover{background:rgba(0,123,255,.15)}.flatpickr-day{border-radius:.25rem;font-weight:500;color:#212529}.flatpickr-day.today{border-color:#007bff}.flatpickr-day.today:hover{background:#007bff;border-color:#007bff}.flatpickr-day:hover{background:rgba(0,123,255,.1);border-color:rgba(0,0,0,0)}span.flatpickr-weekday{color:#212529}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#007bff;border-color:#007bff}.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)){box-shadow:-10px 0 0 #007bff}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:.25rem 0 0 .25rem}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 .25rem .25rem 0}.flatpickr-monthSelect-month:hover,.flatpickr-monthSelect-month:focus{background:rgba(0,123,255,.1)}.flatpickr-monthSelect-month.selected{background-color:#007bff} .snackbar{align-items:center;background-color:var(--b-snackbar-background,#323232);color:var(--b-snackbar-text-color,#fff);font-size:.875rem;line-height:1.42857;opacity:0;padding:.875rem 1.5rem;position:fixed;bottom:0;left:0;transform:translateY(100%);transition:opacity 0s .195s,transform .195s cubic-bezier(.4,0,1,1);width:100%;z-index:60}@media(min-width:768px){.snackbar{border-radius:2px;max-width:35.5rem;min-width:18rem;left:50%;transform:translate(-50%,100%);width:auto}}@media(min-width:768px){.snackbar{transition:opacity 0s .2535s,transform .2535s cubic-bezier(.4,0,1,1)}}@media(min-width:1200px){.snackbar{transition:opacity 0s .13s,transform .13s cubic-bezier(.4,0,1,1)}}@media screen and (prefers-reduced-motion:reduce){.snackbar{transition:none}}.snackbar.snackbar-show{transition-duration:.225s;transition-property:transform;transition-timing-function:cubic-bezier(0,0,.2,1);opacity:1;transform:translateY(0)}@media(min-width:768px){.snackbar.snackbar-show{transition-duration:.2925s}}@media(min-width:1200px){.snackbar.snackbar-show{transition-duration:.15s}}@media screen and (prefers-reduced-motion:reduce){.snackbar.snackbar-show{transition:none}}@media(min-width:768px){.snackbar.snackbar-show{transform:translate(-50%,-1.5rem)}}.snackbar-header{display:flex;-ms-flex-pack:justify;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:DARKEN(var(--b-snackbar-background,#323232),30%);margin-right:auto;min-width:0;font-weight:bold;padding-bottom:.875rem}.snackbar-footer{display:flex;-ms-flex-pack:justify;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:DARKEN(var(--b-snackbar-background,#323232),30%);margin-right:auto;min-width:0;padding-top:.875rem}.snackbar-body{display:flex;-ms-flex-pack:justify;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:auto;max-height:100%;min-width:0}.snackbar-action-button{transition-duration:.3s;transition-property:background-color,background-image;transition-timing-function:cubic-bezier(.4,0,.2,1);background-color:transparent;background-image:none;border:0;color:var(--b-snackbar-button-color,var(--b-snackbar-button-color,#ff4081));cursor:pointer;display:block;flex-shrink:0;font-size:inherit;font-weight:500;line-height:inherit;padding:0;text-transform:uppercase;white-space:nowrap}@media(min-width:768px){.snackbar-action-button{transition-duration:.39s}}@media(min-width:1200px){.snackbar-action-button{transition-duration:.2s}}@media screen and (prefers-reduced-motion:reduce){.snackbar-action-button{transition:none}}.snackbar-action-button:focus,.snackbar-action-button:hover{color:var(--b-snackbar-button-hover-color,var(--b-snackbar-button-hover-color,#ff80ab));text-decoration:none}@media(min-width:768px){.snackbar-action-button{margin-left:3rem}}.snackbar-action-button:focus{outline:0}@media(min-width:768px){.snackbar-left,.snackbar-right{transform:translateY(100%)}.snackbar-left.snackbar-show,.snackbar-right.snackbar-show{transform:translateY(-1.5rem)}}@media(min-width:768px){.snackbar-left{left:1.5rem}}@media(min-width:768px){.snackbar-right{right:1.5rem;left:auto}}.snackbar-multi-line{padding-top:1.25rem;padding-bottom:1.25rem}.snackbar-multi-line .snackbar-body{white-space:normal}.snackbar-primary{background-color:var(--b-snackbar-background-primary,#cce5ff);color:var(--b-snackbar-text-primary,#004085)}.snackbar-action-button-primary{color:var(--b-snackbar-button-primary,#ff4081)}.snackbar-action-button-primary:focus,.snackbar-action-button-primary:hover{color:var(--b-snackbar-button-hover-primary,#ff80ab)}.snackbar-secondary{background-color:var(--b-snackbar-background-secondary,#e2e3e5);color:var(--b-snackbar-text-secondary,#383d41)}.snackbar-action-button-secondary{color:var(--b-snackbar-button-secondary,#ff4081)}.snackbar-action-button-secondary:focus,.snackbar-action-button-secondary:hover{color:var(--b-snackbar-button-hover-secondary,#ff80ab)}.snackbar-success{background-color:var(--b-snackbar-background-success,#d4edda);color:var(--b-snackbar-text-success,#155724)}.snackbar-action-button-success{color:var(--b-snackbar-button-success,#ff4081)}.snackbar-action-button-success:focus,.snackbar-action-button-success:hover{color:var(--b-snackbar-button-hover-success,#ff80ab)}.snackbar-danger{background-color:var(--b-snackbar-background-danger,#f8d7da);color:var(--b-snackbar-text-danger,#721c24)}.snackbar-action-button-danger{color:var(--b-snackbar-button-danger,#ff4081)}.snackbar-action-button-danger:focus,.snackbar-action-button-danger:hover{color:var(--b-snackbar-button-hover-danger,#ff80ab)}.snackbar-warning{background-color:var(--b-snackbar-background-warning,#fff3cd);color:var(--b-snackbar-text-warning,#856404)}.snackbar-action-button-warning{color:var(--b-snackbar-button-warning,#ff4081)}.snackbar-action-button-warning:focus,.snackbar-action-button-warning:hover{color:var(--b-snackbar-button-hover-warning,#ff80ab)}.snackbar-info{background-color:var(--b-snackbar-background-info,#d1ecf1);color:var(--b-snackbar-text-info,#0c5460)}.snackbar-action-button-info{color:var(--b-snackbar-button-info,#ff4081)}.snackbar-action-button-info:focus,.snackbar-action-button-info:hover{color:var(--b-snackbar-button-hover-info,#ff80ab)}.snackbar-light{background-color:var(--b-snackbar-background-light,#fefefe);color:var(--b-snackbar-text-light,#818182)}.snackbar-action-button-light{color:var(--b-snackbar-button-light,#ff4081)}.snackbar-action-button-light:focus,.snackbar-action-button-light:hover{color:var(--b-snackbar-button-hover-light,#ff80ab)}.snackbar-dark{background-color:var(--b-snackbar-background-dark,#d6d8d9);color:var(--b-snackbar-text-dark,#1b1e21)}.snackbar-action-button-dark{color:var(--b-snackbar-button-dark,#ff4081)}.snackbar-action-button-dark:focus,.snackbar-action-button-dark:hover{color:var(--b-snackbar-button-hover-dark,#ff80ab)}.snackbar-stack{display:flex;flex-direction:column;position:fixed;z-index:60;bottom:0}.snackbar-stack .snackbar{position:relative;flex-direction:row;margin-bottom:0}.snackbar-stack .snackbar:not(:last-child){margin-bottom:1.5rem}@media(min-width:576px){.snackbar-stack-center{left:50%;transform:translate(-50%,0%)}.snackbar-stack-left{left:1.5rem}.snackbar-stack-right{right:1.5rem}} #main-navbar-tools a.dropdown-toggle{text-decoration:none;color:#fff}.navbar .dropdown-submenu{position:relative}.navbar .dropdown-menu{margin:0;padding:0}.navbar .dropdown-menu a{font-size:.9em;padding:10px 15px;display:block;min-width:210px;text-align:left;border-radius:.25rem;min-height:44px}.navbar .dropdown-submenu a::after{transform:rotate(-90deg);position:absolute;right:16px;top:18px}.navbar .dropdown-submenu .dropdown-menu{top:0;left:100%}.card-header .btn{padding:2px 6px}.card-header h5{margin:0}.container>.card{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}@media screen and (min-width:768px){.navbar .dropdown:hover>.dropdown-menu{display:block}.navbar .dropdown-submenu:hover>.dropdown-menu{display:block}}.input-validation-error{border-color:#dc3545}.field-validation-error{font-size:.8em}.dataTables_scrollBody{min-height:248px}div.dataTables_wrapper div.dataTables_info{padding-top:11px;white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{padding-top:10px;margin-bottom:0}.rtl .dropdown-menu-right{right:auto;left:0}.rtl .dropdown-menu-right a{text-align:right}.rtl .navbar .dropdown-menu a{text-align:right}.rtl .navbar .dropdown-submenu .dropdown-menu{top:0;left:auto;right:100%}.navbar-dark .navbar-nav .nav-link{color:#000 !important}.navbar-nav>.nav-item>.nav-link,.navbar-nav>.nav-item>.dropdown>.nav-link{color:#fff !important}.navbar-nav>.nav-item>div>button{color:#fff}.btn span.spinner-border{margin-right:.5rem}.radar-spinner,.radar-spinner *{box-sizing:border-box}.radar-spinner{height:60px;width:60px;position:relative}.radar-spinner .circle{position:absolute;height:100%;width:100%;top:0;left:0;animation:radar-spinner-animation 2s infinite}.radar-spinner .circle:nth-child(1){padding:calc(60px*5*2*0/110);animation-delay:300ms}.radar-spinner .circle:nth-child(2){padding:calc(60px*5*2*1/110);animation-delay:300ms}.radar-spinner .circle:nth-child(3){padding:calc(60px*5*2*2/110);animation-delay:300ms}.radar-spinner .circle:nth-child(4){padding:calc(60px*5*2*3/110);animation-delay:0ms}.radar-spinner .circle-inner,.radar-spinner .circle-inner-container{height:100%;width:100%;border-radius:50%;border:calc(60px*5/110) solid transparent}.radar-spinner .circle-inner{border-left-color:var(--secondary,#ff1d5e);border-right-color:var(--secondary,#ff1d5e)}@keyframes radar-spinner-animation{50%{transform:rotate(180deg)}100%{transform:rotate(0deg)}} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html index 4a86d7bdc6..5927da17c3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj index f4161f9ec7..3a20fdb153 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/global.css b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/global.css index e33797b8e6..b9d1e6f93a 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/global.css +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/global.css @@ -14,6 +14,6 @@ body:before{content:"mobile";display:none;visibility:hidden}@media(min-width:768px){body:before{content:"tablet"}}@media(min-width:992px){body:before{content:"desktop"}}@media(min-width:1200px){body:before{content:"widescreen"}}@media(min-width:1400px){body:before{content:"fullhd"}}hr.divider.divider-solid{border-top:var(--b-divider-thickness,1px) solid var(--b-divider-color,#999)}hr.divider.divider-dashed{border-top:var(--b-divider-thickness,1px) dashed var(--b-divider-color,#999)}hr.divider.divider-dotted{border-top:var(--b-divider-thickness,1px) dotted var(--b-divider-color,#999)}hr.divider.divider-text{position:relative;border:none;height:var(--b-divider-thickness,1px);background:var(--b-divider-color,#999)}hr.divider.divider-text::before{content:attr(data-content);display:inline-block;background:#fff;font-weight:bold;font-size:var(--b-divider-font-size,.85rem);color:var(--b-divider-color,#999);border-radius:30rem;padding:.2rem 2rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.b-drop-zone{transition:all 300ms cubic-bezier(.4,0,.2,1) 0ms}.b-drop-zone.b-drop-zone-drag-block>*{pointer-events:none}.b-drop-zone.b-drop-zone-drop-allowed{outline:1px solid var(--b-theme-success,"#00FF00") !important}.b-drop-zone.b-drop-zone-drop-not-allowed{outline:1px solid var(--b-theme-danger,"#FF0000") !important}.b-drop-zone-draggable{cursor:grab;user-select:none}.b-drop-zone-draggable:active{cursor:grabbing}.b-input-color-picker{padding:.6rem}.b-input-color-picker>.b-input-color-picker-preview{position:relative;z-index:1;width:100%;height:100%;display:flex;flex-direction:row;justify-content:space-between}.b-input-color-picker>.b-input-color-picker-preview::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.b-input-color-picker>.b-input-color-picker-preview>.b-input-color-picker-curent-color{display:inline-block;width:100%;height:100%}.b-input-color-picker[aria-disabled=true]{opacity:.65}.progress.progress-xs{height:.25rem}.progress.progress-sm{height:.5rem}.progress.progress-md{height:1rem}.progress.progress-lg{height:1.5rem}.progress.progress-xl{height:2rem}.b-page-progress{width:100%;height:4px;z-index:9999;top:0;left:0;position:fixed;display:none}.b-page-progress .b-page-progress-indicator{width:0;height:100%;transition:height .3s;background-color:#000;transition:width 1s}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-indeterminate{width:30%;animation:running-page-progress 2s cubic-bezier(.4,0,.2,1) infinite}.b-page-progress.b-page-progress-active{display:block}@keyframes running-page-progress{0%{margin-left:0;margin-right:100%}50%{margin-left:25%;margin-right:0%}100%{margin-left:100%;margin-right:0}}.tippy-box[data-animation=scale][data-placement^=top]{transform-origin:bottom}.tippy-box[data-animation=scale][data-placement^=bottom]{transform-origin:top}.tippy-box[data-animation=scale][data-placement^=left]{transform-origin:right}.tippy-box[data-animation=scale][data-placement^=right]{transform-origin:left}.tippy-box[data-animation=scale][data-state=hidden]{transform:scale(.5);opacity:0}.tippy-box[data-theme~=blazorise]{background-color:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9));color:var(--b-tooltip-color,#fff)}.tippy-box[data-theme~=blazorise][data-placement^=top]>.tippy-arrow::before{border-top-color:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9))}.tippy-box[data-theme~=blazorise][data-placement^=bottom]>.tippy-arrow::before{border-bottom-color:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9))}.tippy-box[data-theme~=blazorise][data-placement^=left]>.tippy-arrow::before{border-left-color:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9))}.tippy-box[data-theme~=blazorise][data-placement^=right]>.tippy-arrow::before{border-right-color:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9))}.tippy-box[data-theme~=blazorise]>.tippy-svg-arrow{fill:RGBA(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),var(--b-tooltip-background-opacity,.9))}.b-tooltip-inline{display:inline-block}.b-layout{display:flex;flex:auto;flex-direction:column}.b-layout.b-layout-root{height:100vh}.b-layout,.b-layout *{box-sizing:border-box}@keyframes spinner{0%{transform:translate3d(-50%,-50%,0) rotate(0deg)}100%{transform:translate3d(-50%,-50%,0) rotate(360deg)}}.b-layout>.b-layout-loading{z-index:9999;position:fixed;width:100%;height:100%;background:rgba(0,0,0,.3)}.b-layout>.b-layout-loading:before{animation:1s linear infinite spinner;border:solid 3px #eee;border-bottom-color:var(--b-theme-primary);border-radius:50%;height:40px;left:50%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0);width:40px;content:" "}.b-layout.b-layout-has-sider{flex-direction:row;min-height:0}.b-layout.b-layout-has-sider .b-layout{overflow-x:hidden}.b-layout-header,.b-layout-footer{flex:0 0 auto}.b-layout-header{color:rgba(0,0,0,.65)}.b-layout.b-layout-root.b-layout-has-sider>.b-layout-header-fixed,.b-layout.b-layout-root.b-layout-has-sider>.b-layout>.b-layout-header-fixed{position:sticky;top:0;width:100%;flex:0}.b-layout.b-layout-root:not(.b-layout-has-sider) .b-layout-header-fixed,.b-layout.b-layout-root:not(.b-layout-has-sider)>.b-layout .b-layout-header-fixed{position:fixed;top:0;left:0;right:0;flex:0}.b-layout.b-layout-root:not(.b-layout-has-sider) .b-layout-header-fixed+.b-layout-content,.b-layout.b-layout-root:not(.b-layout-has-sider)>.b-layout .b-layout-header-fixed+.b-layout-content{margin-top:var(--b-bar-horizontal-height,auto)}.b-layout.b-layout-root>.b-layout-header.b-layout-header-fixed+.b-layout.b-layout-has-sider{margin-top:var(--b-bar-horizontal-height,auto)}.b-layout-footer{color:rgba(0,0,0,.65)}.b-layout-footer-fixed{position:sticky;z-index:1;bottom:0;flex:0}.b-layout-content{flex:1}.b-layout-sider{display:flex;position:relative;background:#001529}.b-layout-sider-content{position:sticky;top:0;z-index:2}.b-layout-header .navbar{line-height:inherit}.b-bar-horizontal[data-collapse=hide]{flex-wrap:nowrap}.b-bar-horizontal[data-collapse=hide][data-broken=true]{height:auto}.b-bar-horizontal[data-broken=false]{height:auto}.b-layout>.b-layout-header .b-bar-horizontal[data-collapse=hide][data-broken=true]{height:var(--b-bar-horizontal-height,auto)}.b-layout>.b-layout-header .b-bar-horizontal[data-broken=false]{height:var(--b-bar-horizontal-height,auto)}.b-bar-initial{display:none !important}.b-bar-vertical-inline,.b-bar-vertical-popout,.b-bar-vertical-small{display:flex;flex-direction:column;flex-wrap:nowrap;position:sticky;top:0;padding:0;min-width:var(--b-vertical-bar-width,230px);max-width:var(--b-vertical-bar-width,230px);width:var(--b-vertical-bar-width,230px);box-shadow:2px 0 6px rgba(0,21,41,.35);height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.b-bar-vertical-inline:not(.b-bar-initial),.b-bar-vertical-popout:not(.b-bar-initial),.b-bar-vertical-small:not(.b-bar-initial){transition:width 200ms ease-in-out,min-width 200ms ease-in-out}.b-bar-vertical-inline .b-bar-menu,.b-bar-vertical-popout .b-bar-menu,.b-bar-vertical-small .b-bar-menu{width:100%;display:flex;flex:1;justify-content:space-between;flex-direction:column;align-self:stretch}.b-bar-vertical-inline .b-bar-brand,.b-bar-vertical-popout .b-bar-brand,.b-bar-vertical-small .b-bar-brand{width:100%;display:flex;height:var(--b-vertical-bar-brand-height,64px);min-height:var(--b-vertical-bar-brand-height,64px)}.b-bar-vertical-inline .b-bar-toggler-inline,.b-bar-vertical-popout .b-bar-toggler-inline,.b-bar-vertical-small .b-bar-toggler-inline{height:var(--b-vertical-bar-brand-height,64px);padding:12px;display:inline-flex;cursor:pointer;position:absolute;right:0}.b-bar-vertical-inline .b-bar-toggler-inline>*,.b-bar-vertical-popout .b-bar-toggler-inline>*,.b-bar-vertical-small .b-bar-toggler-inline>*{margin:auto}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle){display:flex;position:fixed;left:var(--b-vertical-bar-width,230px);border-radius:0 10px 10px 0;border:0;width:10px;height:40px;padding:5px;align-items:center;box-shadow:2px 0 6px rgba(0,21,41,.35);cursor:pointer}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle):not(.b-bar-initial),.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle):not(.b-bar-initial),.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle):not(.b-bar-initial){transition:width 200ms ease-in-out,left 200ms ease-in-out}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle)>*,.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle)>*,.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle)>*{margin:auto;display:none}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover,.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover,.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover{width:45px}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover>*,.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover>*,.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover>*{display:block}.b-bar-vertical-inline .b-bar-item,.b-bar-vertical-popout .b-bar-item,.b-bar-vertical-small .b-bar-item{margin:auto;flex-grow:1;min-height:40px}.b-bar-vertical-inline .b-bar-item .b-bar-icon,.b-bar-vertical-popout .b-bar-item .b-bar-icon,.b-bar-vertical-small .b-bar-item .b-bar-icon{font-size:1.25rem;vertical-align:middle;margin:3px;display:inline-block}.b-bar-vertical-inline .b-bar-start,.b-bar-vertical-popout .b-bar-start,.b-bar-vertical-small .b-bar-start{width:100%;display:block}.b-bar-vertical-inline .b-bar-end,.b-bar-vertical-popout .b-bar-end,.b-bar-vertical-small .b-bar-end{padding-bottom:1rem;width:100%;padding-top:1rem;display:block}.b-bar-vertical-inline .b-bar-link,.b-bar-vertical-popout .b-bar-link,.b-bar-vertical-small .b-bar-link{display:block;width:100%;text-decoration:none;padding:.5rem .5rem .5rem 1.5rem;cursor:pointer;overflow-x:hidden;line-height:1.5rem;vertical-align:middle;transition:font-size 150ms ease-in}.b-bar-vertical-inline .b-bar-label,.b-bar-vertical-popout .b-bar-label,.b-bar-vertical-small .b-bar-label{background:transparent;color:#adb5bd;padding:.375rem 1.25rem;font-size:.75rem;text-overflow:ellipsis;overflow-x:hidden}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-toggle:before{content:" ";border:solid;border-width:0 2px 2px 0;display:inline-block;padding:2px;right:1rem;transition:transform 200ms ease-out;float:right;position:relative;-webkit-transform:rotate(225deg);transform:rotate(225deg);top:.7rem}.b-bar-vertical-inline .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-popout .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-small .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before{-webkit-transform:rotate(45deg);transform:rotate(45deg);top:.5rem}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu{display:none;background:inherit;color:inherit;float:none;padding:5px 0}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu[data-visible=true],.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu[data-visible=true],.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu[data-visible=true]{display:block}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item{position:relative;color:inherit;transition:background 100ms ease-in-out,color 100ms ease-in-out;text-decoration:none;display:block;width:100%;overflow-x:hidden}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item i,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item i,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item i{margin-right:.3rem}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu:before,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu:before,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu:before{background:inherit;box-shadow:none}.b-bar-vertical-inline .b-bar-mobile-toggle,.b-bar-vertical-popout .b-bar-mobile-toggle,.b-bar-vertical-small .b-bar-mobile-toggle{right:20px;margin:auto;display:none}.b-bar-vertical-inline .b-bar-item-multi-line,.b-bar-vertical-popout .b-bar-item-multi-line,.b-bar-vertical-small .b-bar-item-multi-line{display:-webkit-box !important;-webkit-box-orient:vertical;-webkit-line-clamp:var(--b-bar-item-lines,2);white-space:normal !important;overflow:hidden;text-overflow:ellipsis}.b-bar-vertical-inline.b-bar-dark,.b-bar-vertical-popout.b-bar-dark,.b-bar-vertical-small.b-bar-dark{background:var(--b-bar-dark-background,#001529);color:var(--b-bar-dark-color,rgba(255,255,255,.5))}.b-bar-vertical-inline.b-bar-dark .b-bar-brand,.b-bar-vertical-popout.b-bar-dark .b-bar-brand,.b-bar-vertical-small.b-bar-dark .b-bar-brand{background:var(--b-bar-brand-dark-background,rgba(255,255,255,.025))}.b-bar-vertical-inline.b-bar-dark .b-bar-brand .b-bar-link,.b-bar-vertical-popout.b-bar-dark .b-bar-brand .b-bar-link,.b-bar-vertical-small.b-bar-dark .b-bar-brand .b-bar-link{color:#fff}.b-bar-vertical-inline.b-bar-dark .b-bar-brand .b-bar-link.active,.b-bar-vertical-popout.b-bar-dark .b-bar-brand .b-bar-link.active,.b-bar-vertical-small.b-bar-dark .b-bar-brand .b-bar-link.active{color:#fff;background:inherit}.b-bar-vertical-inline.b-bar-dark .b-bar-brand .b-bar-link:hover,.b-bar-vertical-popout.b-bar-dark .b-bar-brand .b-bar-link:hover,.b-bar-vertical-small.b-bar-dark .b-bar-brand .b-bar-link:hover{color:#fff;background:inherit}.b-bar-vertical-inline.b-bar-dark .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout.b-bar-dark .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small.b-bar-dark .b-bar-toggler-popout:not(.b-bar-mobile-toggle){background:var(--b-bar-dark-background,#001529);color:var(--b-bar-dark-color,rgba(255,255,255,.5))}.b-bar-vertical-inline.b-bar-dark .b-bar-dropdown-menu,.b-bar-vertical-popout.b-bar-dark .b-bar-dropdown-menu,.b-bar-vertical-small.b-bar-dark .b-bar-dropdown-menu{background:var(--b-bar-dropdown-dark-background,#000c17)}.b-bar-vertical-inline.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-popout.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-small.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item.active{color:var(--b-bar-item-dark-active-color,#fff);background:var(--b-bar-item-dark-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-popout.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-small.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item:hover{color:var(--b-bar-item-dark-hover-color,#fff);background:var(--b-bar-item-dark-hover-background,rgba(255,255,255,.3))}.b-bar-vertical-inline.b-bar-dark .b-bar-link,.b-bar-vertical-popout.b-bar-dark .b-bar-link,.b-bar-vertical-small.b-bar-dark .b-bar-link{color:inherit}.b-bar-vertical-inline.b-bar-dark .b-bar-link.active,.b-bar-vertical-popout.b-bar-dark .b-bar-link.active,.b-bar-vertical-small.b-bar-dark .b-bar-link.active{color:var(--b-bar-item-dark-active-color,#fff);background:var(--b-bar-item-dark-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-dark .b-bar-link:hover,.b-bar-vertical-popout.b-bar-dark .b-bar-link:hover,.b-bar-vertical-small.b-bar-dark .b-bar-link:hover{color:var(--b-bar-item-dark-hover-color,#fff);background:var(--b-bar-item-dark-hover-background,rgba(255,255,255,.3))}.b-bar-vertical-inline.b-bar-light,.b-bar-vertical-popout.b-bar-light,.b-bar-vertical-small.b-bar-light{background:var(--b-bar-light-background,#fff);color:var(--b-bar-light-color,rgba(0,0,0,.7))}.b-bar-vertical-inline.b-bar-light .b-bar-brand,.b-bar-vertical-popout.b-bar-light .b-bar-brand,.b-bar-vertical-small.b-bar-light .b-bar-brand{background:var(--b-bar-brand-light-background,rgba(0,0,0,.025))}.b-bar-vertical-inline.b-bar-light .b-bar-brand .b-bar-link,.b-bar-vertical-popout.b-bar-light .b-bar-brand .b-bar-link,.b-bar-vertical-small.b-bar-light .b-bar-brand .b-bar-link{color:#000}.b-bar-vertical-inline.b-bar-light .b-bar-brand .b-bar-link.active,.b-bar-vertical-popout.b-bar-light .b-bar-brand .b-bar-link.active,.b-bar-vertical-small.b-bar-light .b-bar-brand .b-bar-link.active{background:inherit}.b-bar-vertical-inline.b-bar-light .b-bar-brand .b-bar-link:hover,.b-bar-vertical-popout.b-bar-light .b-bar-brand .b-bar-link:hover,.b-bar-vertical-small.b-bar-light .b-bar-brand .b-bar-link:hover{background:inherit}.b-bar-vertical-inline.b-bar-light .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout.b-bar-light .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small.b-bar-light .b-bar-toggler-popout:not(.b-bar-mobile-toggle){background:var(--b-bar-brand-light-background,#fff);color:var(--b-bar-light-color,rgba(0,0,0,.7))}.b-bar-vertical-inline.b-bar-light .b-bar-dropdown-menu,.b-bar-vertical-popout.b-bar-light .b-bar-dropdown-menu,.b-bar-vertical-small.b-bar-light .b-bar-dropdown-menu{background:var(--b-bar-dropdown-light-background,#f2f2f2)}.b-bar-vertical-inline.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-popout.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-small.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item.active{color:var(--b-bar-item-light-active-color,#000);background:var(--b-bar-item-light-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-popout.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-small.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item:hover{color:var(--b-bar-item-light-hover-color,#000);background:var(--b-bar-item-light-hover-background,rgba(0,0,0,.3))}.b-bar-vertical-inline.b-bar-light .b-bar-link,.b-bar-vertical-popout.b-bar-light .b-bar-link,.b-bar-vertical-small.b-bar-light .b-bar-link{color:inherit}.b-bar-vertical-inline.b-bar-light .b-bar-link.active,.b-bar-vertical-popout.b-bar-light .b-bar-link.active,.b-bar-vertical-small.b-bar-light .b-bar-link.active{color:var(--b-bar-item-light-active-color,#000);background:var(--b-bar-item-light-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-light .b-bar-link:hover,.b-bar-vertical-popout.b-bar-light .b-bar-link:hover,.b-bar-vertical-small.b-bar-light .b-bar-link:hover{color:var(--b-bar-item-light-hover-color,#000);background:var(--b-bar-item-light-hover-background,rgba(0,0,0,.3))}.b-bar-vertical-small,.b-bar-vertical-inline[data-collapse=small],.b-bar-vertical-popout[data-collapse=small]{width:var(--b-vertical-bar-small-width,64px);min-width:var(--b-vertical-bar-small-width,64px)}.b-bar-vertical-small:not(.b-bar-initial),.b-bar-vertical-inline[data-collapse=small]:not(.b-bar-initial),.b-bar-vertical-popout[data-collapse=small]:not(.b-bar-initial){transition:width 200ms ease-in-out,min-width 200ms ease-in-out}.b-bar-vertical-small .b-bar-toggler-inline,.b-bar-vertical-inline[data-collapse=small] .b-bar-toggler-inline,.b-bar-vertical-popout[data-collapse=small] .b-bar-toggler-inline{position:relative;width:100%}.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-inline[data-collapse=small] .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout[data-collapse=small] .b-bar-toggler-popout:not(.b-bar-mobile-toggle){left:var(--b-vertical-bar-small-width,64px)}.b-bar-vertical-small .b-bar-item>.b-bar-dropdown>.b-bar-dropdown-toggle:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-dropdown-toggle:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-dropdown-toggle:before{display:none}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container{z-index:100;max-height:50vh;position:absolute !important;margin:-42px 5px 0 5px;display:flex;width:var(--b-vertical-bar-popout-menu-width,180px);left:var(--b-vertical-bar-small-width,64px)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-small-width,64px);left:unset}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu{box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);border-radius:3px;overflow-y:auto;overflow-x:hidden;flex:1 100%}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item{padding:.5rem .5rem .5rem 1.5rem}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before{position:absolute;top:0;left:-7px;right:0;bottom:0;width:100%;height:100%;opacity:.0001;content:" ";z-index:-1}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before{left:unset;right:-7px}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container{left:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-toggle:before{content:" ";border:solid;border-width:0 2px 2px 0;display:inline-block;padding:2px;right:1rem;transition:transform 200ms ease-out;float:right;position:relative;-webkit-transform:rotate(315deg);transform:rotate(315deg)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before{-webkit-transform:rotate(135deg);transform:rotate(135deg);right:.8rem}@keyframes b-bar-link-small{to{text-align:center;padding-left:0;padding-right:0}}.b-bar-vertical-small .b-bar-item>.b-bar-link,.b-bar-vertical-small .b-bar-item>.b-bar-dropdown>.b-bar-link,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-link,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-link,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link{animation:b-bar-link-small forwards;animation-delay:170ms;font-size:0;transition:font-size 100ms ease-out}.b-bar-vertical-small .b-bar-item>.b-bar-link:after,.b-bar-vertical-small .b-bar-item>.b-bar-dropdown>.b-bar-link:after,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-link:after,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link:after,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-link:after,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link:after{display:none}.b-bar-vertical-small .b-bar-label,.b-bar-vertical-inline[data-collapse=small] .b-bar-label,.b-bar-vertical-popout[data-collapse=small] .b-bar-label{text-align:center}.b-bar-vertical-inline:not([data-collapse]){overflow-y:auto;overflow-x:hidden}.b-bar-vertical-inline:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container{position:relative}.b-bar-vertical-inline:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu{position:relative !important;border:none;border-radius:0;box-shadow:none}.b-bar-vertical-inline:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item{padding:.5rem .5rem .5rem 3rem}.b-bar-vertical-inline:not([data-collapse]) .b-bar-brand .b-bar-link{display:flex;align-items:center}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-toggle:before{content:" ";border:solid;border-width:0 2px 2px 0;display:inline-block;padding:2px;right:1rem;transition:transform 200ms ease-out;float:right;position:relative;-webkit-transform:rotate(315deg);transform:rotate(315deg)}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before{-webkit-transform:rotate(135deg);transform:rotate(135deg);right:.8rem}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container{z-index:100;max-height:50vh;position:absolute !important;margin:-42px 5px 0 5px;display:flex;width:var(--b-vertical-bar-popout-menu-width,180px);left:var(--b-vertical-bar-width,230px)}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-width,230px);left:unset}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu{box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);border-radius:3px;overflow-y:auto;overflow-x:hidden;flex:1 100%}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item{padding:.5rem .5rem .5rem 1.5rem}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before{position:absolute;top:0;left:-7px;right:0;bottom:0;width:100%;height:100%;opacity:.0001;content:" ";z-index:-1}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before{left:unset;right:-7px}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container{left:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-inline[data-collapse=hide],.b-bar-vertical-popout[data-collapse=hide],.b-bar-vertical-small[data-collapse=hide]{width:0;min-width:0;overflow-y:hidden;visibility:hidden}.b-bar-vertical-inline[data-collapse=hide]:not(.b-bar-initial),.b-bar-vertical-popout[data-collapse=hide]:not(.b-bar-initial),.b-bar-vertical-small[data-collapse=hide]:not(.b-bar-initial){transition:width 200ms ease-in-out,min-width 200ms ease-in-out,visibility 100ms}.b-bar-vertical-inline[data-collapse=hide] .b-bar-toggler-inline,.b-bar-vertical-popout[data-collapse=hide] .b-bar-toggler-inline,.b-bar-vertical-small[data-collapse=hide] .b-bar-toggler-inline{display:none}.b-bar-vertical-inline[data-collapse=hide] .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout[data-collapse=hide] .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small[data-collapse=hide] .b-bar-toggler-popout:not(.b-bar-mobile-toggle){visibility:visible;left:0}@media only screen and (max-width:576px){.b-bar-vertical-inline:not([data-collapse]){min-width:100vw}.b-bar-vertical-inline:not([data-collapse]) .b-bar-toggler-inline:not(.b-bar-mobile-toggle){display:none}.b-bar-vertical-inline:not([data-collapse]) .b-bar-toggler-popout:not(.b-bar-mobile-toggle){left:100vw}.b-bar-vertical-inline:not([data-collapse]) .b-bar-mobile-toggle{display:flex}}.b-table.table{position:relative}.b-table.table .b-table-resizer{position:absolute;top:0;right:0;width:5px;cursor:col-resize;user-select:none;z-index:1}.b-table.table .b-table-resizer:hover,.b-table.table .b-table-resizing{cursor:col-resize !important;border-right:2px solid var(--b-theme-primary,#00f)}.b-table.table .b-table-resizing{cursor:col-resize !important}thead tr th{position:relative}.b-character-casing-lower{text-transform:lowercase}.b-character-casing-upper{text-transform:uppercase}.b-character-casing-title{text-transform:lowercase}.b-character-casing-title::first-letter {text-transform:uppercase}.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:"";height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:bold}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.flatpickr-monthSelect-months{margin:10px 1px 3px 1px;flex-wrap:wrap}.flatpickr-monthSelect-month{background:none;border:0;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;display:inline-block;font-weight:400;margin:.5px;justify-content:center;padding:10px;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;text-align:center;width:33%}.flatpickr-monthSelect-month.disabled{color:#eee}.flatpickr-monthSelect-month.disabled:hover,.flatpickr-monthSelect-month.disabled:focus{cursor:not-allowed;background:none !important}.flatpickr-monthSelect-theme-dark{background:#3f4458}.flatpickr-monthSelect-theme-dark .flatpickr-current-month input.cur-year{color:#fff}.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-prev-month,.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-next-month{color:#fff;fill:#fff}.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month{color:rgba(255,255,255,.95)}.flatpickr-monthSelect-month:hover,.flatpickr-monthSelect-month:focus{background:#e6e6e6;cursor:pointer;outline:0}.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:hover,.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:focus{background:#646c8c;border-color:#646c8c}.flatpickr-monthSelect-month.selected{background-color:#569ff7;color:#fff}.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.selected{background:#80cbc4;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#80cbc4} /*! Pickr 1.8.2 MIT | https://github.com/Simonwep/pickr */ .pickr{position:relative;overflow:visible;transform:translateY(0)}.pickr *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr .pcr-button{position:relative;height:2em;width:2em;padding:.5em;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Helvetica Neue",Arial,sans-serif;border-radius:.15em;background:url('data:image/svg+xml;utf8, ') no-repeat center;background-size:0;transition:all .3s}.pickr .pcr-button::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.pickr .pcr-button::before{z-index:initial}.pickr .pcr-button::after{position:absolute;content:"";top:0;left:0;height:100%;width:100%;transition:background .3s;background:var(--pcr-color);border-radius:.15em}.pickr .pcr-button.clear{background-size:70%}.pickr .pcr-button.clear::before{opacity:0}.pickr .pcr-button.clear:focus{box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-button.disabled{cursor:not-allowed}.pickr *,.pcr-app *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr input:focus,.pickr input.pcr-active,.pickr button:focus,.pickr button.pcr-active,.pcr-app input:focus,.pcr-app input.pcr-active,.pcr-app button:focus,.pcr-app button.pcr-active{box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-palette,.pickr .pcr-slider,.pcr-app .pcr-palette,.pcr-app .pcr-slider{transition:box-shadow .3s}.pickr .pcr-palette:focus,.pickr .pcr-slider:focus,.pcr-app .pcr-palette:focus,.pcr-app .pcr-slider:focus{box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 0 3px rgba(0,0,0,.25)}.pcr-app{position:fixed;display:flex;flex-direction:column;z-index:10000;border-radius:.1em;background:#fff;opacity:0;visibility:hidden;transition:opacity .3s,visibility 0s .3s;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Helvetica Neue",Arial,sans-serif;box-shadow:0 .15em 1.5em 0 rgba(0,0,0,.1),0 0 1em 0 rgba(0,0,0,.03);left:0;top:0}.pcr-app.visible{transition:opacity .3s;visibility:visible;opacity:1}.pcr-app .pcr-swatches{display:flex;flex-wrap:wrap;margin-top:.75em}.pcr-app .pcr-swatches.pcr-last{margin:0}@supports (display:grid){.pcr-app .pcr-swatches{display:grid;align-items:center;grid-template-columns:repeat(auto-fit,1.75em)}}.pcr-app .pcr-swatches>button{font-size:1em;position:relative;width:calc(1.75em - 5px);height:calc(1.75em - 5px);border-radius:.15em;cursor:pointer;margin:2.5px;flex-shrink:0;justify-self:center;transition:all .15s;overflow:hidden;background:transparent;z-index:1}.pcr-app .pcr-swatches>button::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:6px;border-radius:.15em;z-index:-1}.pcr-app .pcr-swatches>button::after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:var(--pcr-color);border:1px solid rgba(0,0,0,.05);border-radius:.15em;box-sizing:border-box}.pcr-app .pcr-swatches>button:hover{filter:brightness(1.05)}.pcr-app .pcr-swatches>button:not(.pcr-active){box-shadow:none}.pcr-app .pcr-interaction{display:flex;flex-wrap:wrap;align-items:center;margin:0 -.2em 0 -.2em}.pcr-app .pcr-interaction>*{margin:0 .2em}.pcr-app .pcr-interaction input{letter-spacing:.07em;font-size:.75em;text-align:center;cursor:pointer;color:#75797e;background:#f1f3f4;border-radius:.15em;transition:all .15s;padding:.45em .5em;margin-top:.75em}.pcr-app .pcr-interaction input:hover{filter:brightness(.975)}.pcr-app .pcr-interaction input:focus{box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 0 3px rgba(66,133,244,.75)}.pcr-app .pcr-interaction .pcr-result{color:#75797e;text-align:left;flex:1 1 8em;min-width:8em;transition:all .2s;border-radius:.15em;background:#f1f3f4;cursor:text}.pcr-app .pcr-interaction .pcr-result::-moz-selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-result::selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-type.active{color:#fff;background:#4285f4}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff;width:auto}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff}.pcr-app .pcr-interaction .pcr-save:hover,.pcr-app .pcr-interaction .pcr-cancel:hover,.pcr-app .pcr-interaction .pcr-clear:hover{filter:brightness(.925)}.pcr-app .pcr-interaction .pcr-save{background:#4285f4}.pcr-app .pcr-interaction .pcr-clear,.pcr-app .pcr-interaction .pcr-cancel{background:#f44250}.pcr-app .pcr-interaction .pcr-clear:focus,.pcr-app .pcr-interaction .pcr-cancel:focus{box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 0 3px rgba(244,66,80,.75)}.pcr-app .pcr-selection .pcr-picker{position:absolute;height:18px;width:18px;border:2px solid #fff;border-radius:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pcr-app .pcr-selection .pcr-color-palette,.pcr-app .pcr-selection .pcr-color-chooser,.pcr-app .pcr-selection .pcr-color-opacity{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column;cursor:grab;cursor:-webkit-grab}.pcr-app .pcr-selection .pcr-color-palette:active,.pcr-app .pcr-selection .pcr-color-chooser:active,.pcr-app .pcr-selection .pcr-color-opacity:active{cursor:grabbing;cursor:-webkit-grabbing}.pcr-app[data-theme=monolith]{width:14.25em;max-width:95vw;padding:.8em}.pcr-app[data-theme=monolith] .pcr-selection{display:flex;flex-direction:column;justify-content:space-between;flex-grow:1}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview{position:relative;z-index:1;width:100%;height:1em;display:flex;flex-direction:row;justify-content:space-between;margin-bottom:.5em}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview .pcr-last-color{cursor:pointer;transition:background-color .3s,box-shadow .3s;border-radius:.15em 0 0 .15em;z-index:2}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview .pcr-current-color{border-radius:0 .15em .15em 0}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview .pcr-last-color,.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-preview .pcr-current-color{background:var(--pcr-color);width:50%;height:100%}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-palette{width:100%;height:8em;z-index:1}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-palette .pcr-palette{border-radius:.15em;width:100%;height:100%}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-palette .pcr-palette::before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser,.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity{height:.5em;margin-top:.75em}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser .pcr-picker,.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity .pcr-picker{top:50%;transform:translateY(-50%)}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser .pcr-slider,.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity .pcr-slider{flex-grow:1;border-radius:50em}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-chooser .pcr-slider{background:linear-gradient(to right,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)}.pcr-app[data-theme=monolith] .pcr-selection .pcr-color-opacity .pcr-slider{background:linear-gradient(to right,transparent,#000),url('data:image/svg+xml;utf8, ');background-size:100%,.25em} -@keyframes fadeIn{0%{opacity:0}100%{opacity:1}0%{opacity:0}}@keyframes slideIn{0%{transform:translateY(1rem);opacity:0}100%{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}.badge-close{cursor:pointer}.badge-close::before{height:2px;width:50%}.badge-close::after{height:50%;width:2px}.badge-close:hover,.badge-close:focus{background-color:rgba(10,10,10,.3)}.badge-close:active{background-color:rgba(10,10,10,.4)}.navbar-nav .nav-item:hover{cursor:pointer}.navbar-nav .nav-link:hover{cursor:pointer}.nav .nav-link:hover{cursor:pointer}.nav-item{position:relative}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item{width:100%}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item:empty::after{margin-left:0}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item::after{transform:rotate(-90deg);position:absolute;right:10%;top:45%}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-menu{top:0;left:100%;margin-left:0;margin-right:.1rem}.btn-group>.b-tooltip:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.b-tooltip:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group.btn-group-toggle .btn.active.disabled{opacity:1}.btn-group-vertical>.b-tooltip:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.b-tooltip:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-xs,.btn-group-xs>.btn{padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.btn-md,.btn-group-md>.btn{padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.btn-xl,.btn-group-xl>.btn{padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.dropdown-toggle.dropdown-toggle-hidden::after{content:none !important}.dropdown-toggle.dropdown-toggle-hidden::before{content:none !important}.dropdown-menu.show{animation-duration:.3s;animation-fill-mode:both;animation-name:fadeIn}.dropdown-menu a:not([href]).dropdown-item:not(.disabled){cursor:pointer}.dropdown-menu.dropdown-menu-scrollable{max-height:var(--dropdown-list-menu-max-height,200px);overflow-y:scroll}.b-is-autocomplete .dropdown-menu{width:100%;max-height:var(--autocomplete-menu-max-height,200px);overflow-y:scroll}.b-is-autocomplete.b-is-autocomplete-multipleselection{max-width:100%;width:100%;cursor:text;height:calc(1.5em + .75rem + 2px);border:1px solid #ced4da;border-radius:.25rem}.b-is-autocomplete.b-is-autocomplete-multipleselection>input.form-control{display:inline-block;border:none;box-shadow:none;outline:none;background-color:transparent;max-width:inherit;width:auto}.b-is-autocomplete.b-is-autocomplete-multipleselection.focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.dropdown.btn-group>.btn.dropdown-toggle-split+.dropdown-menu.show{top:100%}.dropdown{position:relative}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend){position:relative}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle{width:100%}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle:empty::after{margin-left:0}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle::after{position:absolute;right:10%;top:45%}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-menu{top:auto;left:auto;bottom:auto;right:auto}.dropdown>.dropdown-menu>.dropdown.dropup .dropdown-toggle::after,.dropdown>.dropdown-menu>.dropdown.dropend .dropdown-toggle::after{vertical-align:0;position:absolute;right:10%;top:45%}.dropdown>.dropdown-menu>.dropdown.dropstart .dropdown-toggle::after{vertical-align:0}.dropdown.dropup>.dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropdown.dropup>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropdown.dropup>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropend>.dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropdown.dropend>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropdown.dropend>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropend>.dropdown-toggle::after{vertical-align:0}.dropdown.dropstart>.dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropdown.dropstart>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropdown.dropstart>.dropdown-toggle::after{display:none}.dropdown.dropstart>.dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropdown.dropstart>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropstart>.dropdown-toggle::before{vertical-align:0}.dropdown-menu-start{right:auto;left:0}.dropdown-menu-end{right:0;left:auto}@media(min-width:576px){.dropdown-menu-sm-start{right:auto;left:0}.dropdown-menu-sm-end{right:0;left:auto}}@media(min-width:768px){.dropdown-menu-md-start{right:auto;left:0}.dropdown-menu-md-end{right:0;left:auto}}@media(min-width:992px){.dropdown-menu-lg-start{right:auto;left:0}.dropdown-menu-lg-end{right:0;left:auto}}@media(min-width:1200px){.dropdown-menu-xl-start{right:auto;left:0}.dropdown-menu-xl-end{right:0;left:auto}}hr.divider.divider-text{position:unset}hr.divider.divider-text::before{top:unset}.snackbar-stack{z-index:1059 !important}.snackbar{z-index:1060 !important}.figure.figure-is-16x16{height:16px;width:16px}.figure.figure-is-24x24{height:24px;width:24px}.figure.figure-is-32x32{height:32px;width:32px}.figure.figure-is-48x48{height:48px;width:48px}.figure.figure-is-64x64{height:64px;width:64px}.figure.figure-is-96x96{height:96px;width:96px}.figure.figure-is-128x128{height:128px;width:128px}.figure.figure-is-256x256{height:256px;width:256px}.figure.figure-is-512x512{height:512px;width:512px}.form-check>.form-check-input.form-check-input-pointer,.form-check>.form-check-label.form-check-label-pointer,.form-switch>.form-check-input.form-check-input-pointer,.form-switch>.form-check-label.form-check-label-pointer{cursor:pointer}.form-control-plaintext.form-control-xs,.form-control-plaintext.form-control-md,.form-control-plaintext.form-control-xl{padding-right:0;padding-left:0}.form-control-xs{height:calc(1.5em + .3rem + 2px);padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.form-control-md{height:calc(1.5em + .94rem + 2px);padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.form-control-xl{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.form-select-xs{height:calc(1.5em + .3rem + 2px);padding-top:.15rem;padding-bottom:.15rem;padding-left:.5rem;font-size:.75rem}.form-select-md{height:calc(1.5em + .94rem + 2px);padding-top:.47rem;padding-bottom:.47rem;padding-left:1rem;font-size:1.125rem}.form-select-xl{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.5rem}.input-group>.b-numeric:not(:last-child)>input{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.b-numeric:not(:first-child)>input{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-xs>.form-control:not(textarea),.input-group-xs>.form-select,.input-group-xs>.b-numeric>input{height:calc(1.5em + .3rem + 2px)}.input-group-xs>.form-control,.input-group-xs>.form-select,.input-group-xs>.input-group-text,.input-group-xs>.btn,.input-group-xs>.b-numeric>input{padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.input-group-sm>.b-numeric>input{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.b-numeric>input{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-md>.form-control:not(textarea),.input-group-md>.form-select,.input-group-md>.b-numeric>input{height:calc(1.5em + .94rem + 2px)}.input-group-md>.form-control,.input-group-md>.form-select,.input-group-md>.input-group-text,.input-group-md>.btn,.input-group-md>.b-numeric>input{padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.input-group-lg>.b-numeric>input{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.b-numeric>input{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-xl>.form-control:not(textarea),.input-group-xl>.form-select,.input-group-xl>.b-numeric>input{height:calc(1.5em + 1rem + 2px)}.input-group-xl>.form-control,.input-group-xl>.form-select,.input-group-xl>.input-group-text,.input-group-xl>.btn,.input-group-xl>.b-numeric>input{padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.input-group-xs>.form-select,.input-group-md>.form-select,.input-group-xl>.form-select{padding-right:1.75rem}.input-group:not(.has-validation)>.dropdown:first-child>.btn:not(:last-child).dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown>.btn:not(:last-child).dropdown-toggle,.input-group.has-validation>.dropdown>.btn:not(:last-child):not(.dropdown-toggle){border-top-left-radius:0;border-bottom-left-radius:0}.form-check>.form-check-input.form-check-input-xs{width:.7rem;height:.7rem}.form-check>.form-check-input.form-check-input-xs+.form-check-label{line-height:"normal";padding-left:0}.form-check>.form-check-input.form-check-input-sm{width:.8rem;height:.8rem}.form-check>.form-check-input.form-check-input-sm+.form-check-label{line-height:"normal";padding-left:0}.form-check>.form-check-input.form-check-input-md{width:1.25rem;height:1.25rem}.form-check>.form-check-input.form-check-input-md+.form-check-label{line-height:1.7rem;padding-left:3px}.form-check>.form-check-input.form-check-input-lg{width:1.55rem;height:1.55rem}.form-check>.form-check-input.form-check-input-lg+.form-check-label{line-height:2rem;padding-left:6px}.form-check>.form-check-input.form-check-input-xl{width:1.85rem;height:1.85rem}.form-check>.form-check-input.form-check-input-xl+.form-check-label{line-height:2.5rem;padding-left:10px}select[readonly]{pointer-events:none}select[readonly] option,select[readonly] optgroup{display:none}.b-numeric{position:relative;width:100%}.b-numeric:hover>.b-numeric-handler-wrap{opacity:1}.b-numeric-handler-wrap{position:absolute;top:0;right:0;width:22px;height:100%;background:#fff;border:1px solid #d9d9d9;opacity:0}.input-group .b-numeric{-ms-flex:1 1 auto;flex:1 1 auto;width:1%}.b-numeric-handler-wrap .b-numeric-handler.b-numeric-handler-down{border-top:1px solid #d9d9d9}.b-numeric-handler{position:relative;display:flex;width:100%;height:50%;overflow:hidden;color:rgba(0,0,0,.45);font-weight:700;line-height:0;align-items:center;justify-content:center}.b-numeric-handler.btn{padding:0}.form-control+.b-numeric-handler-wrap{font-size:1rem;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.form-control-xs+.b-numeric-handler-wrap{font-size:.75rem;border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.form-control-xs+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:.75rem}.form-control-sm+.b-numeric-handler-wrap{font-size:.875rem;border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.form-control-sm+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:.875rem}.form-control-md+.b-numeric-handler-wrap{font-size:1.125rem;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.form-control-md+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.125rem}.form-control-lg+.b-numeric-handler-wrap{font-size:1.25rem;border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.form-control-lg+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.25rem}.form-control-xl+.b-numeric-handler-wrap{font-size:1.5rem;border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}.form-control-xl+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.5rem}.custom-file-label{overflow:hidden}input[readonly][type=range],input[readonly=readonly][type=range]{pointer-events:none}input[readonly][type=range]::-webkit-slider-thumb,input[readonly=readonly][type=range]::-webkit-slider-thumb{pointer-events:none}input[readonly][type=range]::-moz-range-thumb,input[readonly=readonly][type=range]::-moz-range-thumb{pointer-events:none}input[readonly][type=range]::-ms-thumb,input[readonly=readonly][type=range]::-ms-thumb{pointer-events:none}.form-group{margin-bottom:1rem}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media(min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .form-select{align-items:center;justify-content:center}.form-inline .form-check-label{margin-bottom:0}}.b-input-color-picker{padding:.5rem .6rem}.b-input-color-picker>.b-input-color-picker-preview{height:.55rem}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media(min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.jumbotron.jumbotron-primary{background-color:#007bff;color:#fff}.jumbotron.jumbotron-secondary{background-color:#6c757d;color:#fff}.jumbotron.jumbotron-success{background-color:#28a745;color:#fff}.jumbotron.jumbotron-info{background-color:#17a2b8;color:#fff}.jumbotron.jumbotron-warning{background-color:#ffc107;color:#212529}.jumbotron.jumbotron-danger{background-color:#dc3545;color:#fff}.jumbotron.jumbotron-light{background-color:#f8f9fa;color:#212529}.jumbotron.jumbotron-dark{background-color:#343a40;color:#fff}.jumbotron.jumbotron-link{background-color:#3273dc;color:#fff}.b-layout-header-fixed{z-index:1030}.b-layout-footer-fixed{z-index:1030}.b-layout-sider-content{z-index:1031}li.list-group-item-action{cursor:pointer}.b-list-view{overflow-y:scroll}.media{display:flex;align-items:flex-start}.media-body{flex:1}.modal.fade{transition:opacity var(--modal-animation-duration,300ms) linear}.modal.fade .modal-dialog{transition:-webkit-transform var(--modal-animation-duration,300ms) ease-out;transition:transform var(--modal-animation-duration,300ms) ease-out}.page-item:not(.disabled) .page-link{cursor:pointer}.pagination-xs .page-link{padding:.125rem .25rem;font-size:.75rem;line-height:1.5}.pagination-xs .page-item:first-child .page-link{border-top-left-radius:.15rem;border-bottom-left-radius:.15rem}.pagination-xs .page-item:last-child .page-link{border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.pagination-md .page-link{padding:.625rem 1.25rem;font-size:1.125rem;line-height:1.5}.pagination-md .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-md .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-xl .page-link{padding:1rem 2rem;font-size:1.5rem;line-height:1.5}.pagination-xl .page-item:first-child .page-link{border-top-left-radius:.4rem;border-bottom-left-radius:.4rem}.pagination-xl .page-item:last-child .page-link{border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-primary{background-color:#007bff}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-secondary{background-color:#6c757d}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-success{background-color:#28a745}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-info{background-color:#17a2b8}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-warning{background-color:#ffc107}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-danger{background-color:#dc3545}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-light{background-color:#f8f9fa}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-dark{background-color:#343a40}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-link{background-color:#3273dc}.rating:not(.rating-disabled):not(.rating-readonly):hover .rating-item{cursor:pointer}.rating.rating-disabled{opacity:.65}.rating .rating-item.rating-item-primary{color:#007bff}.rating .rating-item.rating-item-secondary{color:#6c757d}.rating .rating-item.rating-item-success{color:#28a745}.rating .rating-item.rating-item-info{color:#17a2b8}.rating .rating-item.rating-item-warning{color:#ffc107}.rating .rating-item.rating-item-danger{color:#dc3545}.rating .rating-item.rating-item-light{color:#f8f9fa}.rating .rating-item.rating-item-dark{color:#343a40}.rating .rating-item.rating-item-link{color:#3273dc}.rating .rating-item.rating-item-hover{opacity:.7}.steps{padding:0;margin:0;list-style:none;display:flex;overflow-x:auto}.steps .step:first-child{margin-left:auto}.steps .step:last-child{margin-right:auto}.step:first-of-type .step-circle::before{display:none}.step:last-of-type .step-container{padding-right:0}.step-container{box-sizing:content-box;display:flex;align-items:center;flex-direction:column;width:5rem;min-width:5rem;max-width:5rem;padding-top:.5rem;padding-right:1rem}.step-circle{position:relative;display:flex;justify-content:center;align-items:center;width:1.5rem;height:1.5rem;color:#adb5bd;border:2px solid #adb5bd;border-radius:100%;background-color:#fff}.step-circle::before{content:"";display:block;position:absolute;top:50%;left:-2px;width:calc(5rem + 1rem - 1.5rem);height:2px;transform:translate(-100%,-50%);color:#adb5bd;background-color:currentColor}.step-text{color:#adb5bd;word-break:break-all;margin-top:.25em}.step-completed .step-circle{color:#fff;background-color:#28a745;border-color:#28a745}.step-completed .step-circle::before{color:#28a745}.step-completed .step-text{color:#28a745}.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-active .step-circle::before{color:#007bff}.step-active .step-text{color:#007bff}.step-primary .step-circle{color:#007bff;border-color:#007bff}.step-primary.step-completed .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-primary.step-completed .step-circle::before{color:#007bff}.step-primary.step-completed .step-text{color:#007bff}.step-primary.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-primary.step-active::before{color:#007bff}.step-primary.step-active .step-text{color:#007bff}.step-secondary .step-circle{color:#6c757d;border-color:#6c757d}.step-secondary.step-completed .step-circle{color:#fff;background-color:#6c757d;border-color:#6c757d}.step-secondary.step-completed .step-circle::before{color:#6c757d}.step-secondary.step-completed .step-text{color:#6c757d}.step-secondary.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-secondary.step-active::before{color:#007bff}.step-secondary.step-active .step-text{color:#007bff}.step-success .step-circle{color:#28a745;border-color:#28a745}.step-success.step-completed .step-circle{color:#fff;background-color:#28a745;border-color:#28a745}.step-success.step-completed .step-circle::before{color:#28a745}.step-success.step-completed .step-text{color:#28a745}.step-success.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-success.step-active::before{color:#007bff}.step-success.step-active .step-text{color:#007bff}.step-info .step-circle{color:#17a2b8;border-color:#17a2b8}.step-info.step-completed .step-circle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.step-info.step-completed .step-circle::before{color:#17a2b8}.step-info.step-completed .step-text{color:#17a2b8}.step-info.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-info.step-active::before{color:#007bff}.step-info.step-active .step-text{color:#007bff}.step-warning .step-circle{color:#ffc107;border-color:#ffc107}.step-warning.step-completed .step-circle{color:#fff;background-color:#ffc107;border-color:#ffc107}.step-warning.step-completed .step-circle::before{color:#ffc107}.step-warning.step-completed .step-text{color:#ffc107}.step-warning.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-warning.step-active::before{color:#007bff}.step-warning.step-active .step-text{color:#007bff}.step-danger .step-circle{color:#dc3545;border-color:#dc3545}.step-danger.step-completed .step-circle{color:#fff;background-color:#dc3545;border-color:#dc3545}.step-danger.step-completed .step-circle::before{color:#dc3545}.step-danger.step-completed .step-text{color:#dc3545}.step-danger.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-danger.step-active::before{color:#007bff}.step-danger.step-active .step-text{color:#007bff}.step-light .step-circle{color:#f8f9fa;border-color:#f8f9fa}.step-light.step-completed .step-circle{color:#fff;background-color:#f8f9fa;border-color:#f8f9fa}.step-light.step-completed .step-circle::before{color:#f8f9fa}.step-light.step-completed .step-text{color:#f8f9fa}.step-light.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-light.step-active::before{color:#007bff}.step-light.step-active .step-text{color:#007bff}.step-dark .step-circle{color:#343a40;border-color:#343a40}.step-dark.step-completed .step-circle{color:#fff;background-color:#343a40;border-color:#343a40}.step-dark.step-completed .step-circle::before{color:#343a40}.step-dark.step-completed .step-text{color:#343a40}.step-dark.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-dark.step-active::before{color:#007bff}.step-dark.step-active .step-text{color:#007bff}.step-link .step-circle{color:#3273dc;border-color:#3273dc}.step-link.step-completed .step-circle{color:#fff;background-color:#3273dc;border-color:#3273dc}.step-link.step-completed .step-circle::before{color:#3273dc}.step-link.step-completed .step-text{color:#3273dc}.step-link.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-link.step-active::before{color:#007bff}.step-link.step-active .step-text{color:#007bff}.steps-content{margin:1rem 0}.steps-content>.step-panel{display:none}.steps-content>.active{display:block}.form-check.form-switch .form-check-input.form-check-input-primary:checked{background-color:#007bff;border-color:#007bff}.form-check.form-switch .form-check-input.form-check-input-secondary:checked{background-color:#6c757d;border-color:#6c757d}.form-check.form-switch .form-check-input.form-check-input-success:checked{background-color:#28a745;border-color:#28a745}.form-check.form-switch .form-check-input.form-check-input-info:checked{background-color:#17a2b8;border-color:#17a2b8}.form-check.form-switch .form-check-input.form-check-input-warning:checked{background-color:#ffc107;border-color:#ffc107}.form-check.form-switch .form-check-input.form-check-input-danger:checked{background-color:#dc3545;border-color:#dc3545}.form-check.form-switch .form-check-input.form-check-input-light:checked{background-color:#f8f9fa;border-color:#f8f9fa}.form-check.form-switch .form-check-input.form-check-input-dark:checked{background-color:#343a40;border-color:#343a40}.form-check.form-switch .form-check-input.form-check-input-link:checked{background-color:#3273dc;border-color:#3273dc}.form-check.form-switch .form-check-input.form-check-input-xs{width:calc(.75rem + (.5rem/2));height:.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-xs+.form-check-label{line-height:1rem;vertical-align:middle;padding-left:0}.form-check.form-switch .form-check-input.form-check-input-xs:checked~.form-check-label::after{transform:translateX(calc(.75rem - (.5rem/2)))}.form-check.form-switch .form-check-input.form-check-input-sm{width:calc(1rem + (.75rem/2));height:.75rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-sm+.form-check-label{line-height:1.25rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-sm:checked~.form-check-label::after{transform:translateX(calc(1rem - (.75rem/2)))}.form-check.form-switch .form-check-input.form-check-input-md{width:calc(2rem + (1.5rem/2));height:1.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-md+.form-check-label{line-height:2rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-md:checked~.form-check-label::after{transform:translateX(calc(2rem - (1.5rem/2)))}.form-check.form-switch .form-check-input.form-check-input-lg{width:calc(3rem + (2rem/2));height:2rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-lg+.form-check-label{line-height:2.5rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-lg:checked~.form-check-label::after{transform:translateX(calc(3rem - (2rem/2)))}.form-check.form-switch .form-check-input.form-check-input-xl{width:calc(4rem + (2.5rem/2));height:2.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-xl+.form-check-label{line-height:3rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-xl:checked~.form-check-label::after{transform:translateX(calc(4rem - (2.5rem/2)))}table.table tbody tr.selected{background-color:var(--primary)}tr.table-row-selectable:hover{cursor:pointer}.table-fixed-header{overflow-y:auto}.table-fixed-header>.table{border-collapse:separate;border-spacing:0}.table-fixed-header>.table>thead>tr>th{border-top:none;position:sticky;background:#fff;z-index:10}.table-fixed-header>.table>thead>tr:nth-child(1)>th{top:0}.table-fixed-header>.table-bordered>:not(caption)>*>*{border-width:1px 1px}.overflow-auto-auto{overflow:auto auto !important}.overflow-auto-hidden{overflow:auto hidden !important}.overflow-auto-visible{overflow:auto visible !important}.overflow-auto-scroll{overflow:auto scroll !important}.overflow-hidden-auto{overflow:hidden auto !important}.overflow-hidden-hidden{overflow:hidden hidden !important}.overflow-hidden-visible{overflow:hidden visible !important}.overflow-hidden-scroll{overflow:hidden scroll !important}.overflow-visible-auto{overflow:visible auto !important}.overflow-visible-hidden{overflow:visible hidden !important}.overflow-visible-visible{overflow:visible visible !important}.overflow-visible-scroll{overflow:visible scroll !important}.overflow-scroll-auto{overflow:scroll auto !important}.overflow-scroll-hidden{overflow:scroll hidden !important}.overflow-scroll-visible{overflow:scroll visible !important}.overflow-scroll-scroll{overflow:scroll scroll !important}ol.ordered-list-lower-alpha{list-style-type:lower-alpha}ol.ordered-list-lower-roman{list-style-type:lower-roman}ol.ordered-list-upper-alpha{list-style-type:upper-alpha}ol.ordered-list-upper-roman{list-style-type:upper-roman}.border-1{border:1px solid #dee2e6 !important}.border-1.border-primary{border-color:#007bff !important}.border-1.border-secondary{border-color:#6c757d !important}.border-1.border-success{border-color:#28a745 !important}.border-1.border-info{border-color:#17a2b8 !important}.border-1.border-warning{border-color:#ffc107 !important}.border-1.border-danger{border-color:#dc3545 !important}.border-1.border-light{border-color:#f8f9fa !important}.border-1.border-dark{border-color:#343a40 !important}.border-1.border-link{border-color:#3273dc !important}.border-primary-1{border:1px solid #007bff !important}.border-secondary-1{border:1px solid #6c757d !important}.border-success-1{border:1px solid #28a745 !important}.border-info-1{border:1px solid #17a2b8 !important}.border-warning-1{border:1px solid #ffc107 !important}.border-danger-1{border:1px solid #dc3545 !important}.border-light-1{border:1px solid #f8f9fa !important}.border-dark-1{border:1px solid #343a40 !important}.border-link-1{border:1px solid #3273dc !important}.border-top-1{border-top:1px solid #dee2e6 !important}.border-primary-top-1{border-top:1px solid #007bff !important}.border-secondary-top-1{border-top:1px solid #6c757d !important}.border-success-top-1{border-top:1px solid #28a745 !important}.border-info-top-1{border-top:1px solid #17a2b8 !important}.border-warning-top-1{border-top:1px solid #ffc107 !important}.border-danger-top-1{border-top:1px solid #dc3545 !important}.border-light-top-1{border-top:1px solid #f8f9fa !important}.border-dark-top-1{border-top:1px solid #343a40 !important}.border-link-top-1{border-top:1px solid #3273dc !important}.border-right-1{border-right:1px solid #dee2e6 !important}.border-primary-right-1{border-right:1px solid #007bff !important}.border-secondary-right-1{border-right:1px solid #6c757d !important}.border-success-right-1{border-right:1px solid #28a745 !important}.border-info-right-1{border-right:1px solid #17a2b8 !important}.border-warning-right-1{border-right:1px solid #ffc107 !important}.border-danger-right-1{border-right:1px solid #dc3545 !important}.border-light-right-1{border-right:1px solid #f8f9fa !important}.border-dark-right-1{border-right:1px solid #343a40 !important}.border-link-right-1{border-right:1px solid #3273dc !important}.border-bottom-1{border-bottom:1px solid #dee2e6 !important}.border-primary-bottom-1{border-bottom:1px solid #007bff !important}.border-secondary-bottom-1{border-bottom:1px solid #6c757d !important}.border-success-bottom-1{border-bottom:1px solid #28a745 !important}.border-info-bottom-1{border-bottom:1px solid #17a2b8 !important}.border-warning-bottom-1{border-bottom:1px solid #ffc107 !important}.border-danger-bottom-1{border-bottom:1px solid #dc3545 !important}.border-light-bottom-1{border-bottom:1px solid #f8f9fa !important}.border-dark-bottom-1{border-bottom:1px solid #343a40 !important}.border-link-bottom-1{border-bottom:1px solid #3273dc !important}.border-left-1{border-left:1px solid #dee2e6 !important}.border-primary-left-1{border-left:1px solid #007bff !important}.border-secondary-left-1{border-left:1px solid #6c757d !important}.border-success-left-1{border-left:1px solid #28a745 !important}.border-info-left-1{border-left:1px solid #17a2b8 !important}.border-warning-left-1{border-left:1px solid #ffc107 !important}.border-danger-left-1{border-left:1px solid #dc3545 !important}.border-light-left-1{border-left:1px solid #f8f9fa !important}.border-dark-left-1{border-left:1px solid #343a40 !important}.border-link-left-1{border-left:1px solid #3273dc !important}.border-2{border:2px solid #dee2e6 !important}.border-2.border-primary{border-color:#007bff !important}.border-2.border-secondary{border-color:#6c757d !important}.border-2.border-success{border-color:#28a745 !important}.border-2.border-info{border-color:#17a2b8 !important}.border-2.border-warning{border-color:#ffc107 !important}.border-2.border-danger{border-color:#dc3545 !important}.border-2.border-light{border-color:#f8f9fa !important}.border-2.border-dark{border-color:#343a40 !important}.border-2.border-link{border-color:#3273dc !important}.border-primary-2{border:2px solid #007bff !important}.border-secondary-2{border:2px solid #6c757d !important}.border-success-2{border:2px solid #28a745 !important}.border-info-2{border:2px solid #17a2b8 !important}.border-warning-2{border:2px solid #ffc107 !important}.border-danger-2{border:2px solid #dc3545 !important}.border-light-2{border:2px solid #f8f9fa !important}.border-dark-2{border:2px solid #343a40 !important}.border-link-2{border:2px solid #3273dc !important}.border-top-2{border-top:2px solid #dee2e6 !important}.border-primary-top-2{border-top:2px solid #007bff !important}.border-secondary-top-2{border-top:2px solid #6c757d !important}.border-success-top-2{border-top:2px solid #28a745 !important}.border-info-top-2{border-top:2px solid #17a2b8 !important}.border-warning-top-2{border-top:2px solid #ffc107 !important}.border-danger-top-2{border-top:2px solid #dc3545 !important}.border-light-top-2{border-top:2px solid #f8f9fa !important}.border-dark-top-2{border-top:2px solid #343a40 !important}.border-link-top-2{border-top:2px solid #3273dc !important}.border-right-2{border-right:2px solid #dee2e6 !important}.border-primary-right-2{border-right:2px solid #007bff !important}.border-secondary-right-2{border-right:2px solid #6c757d !important}.border-success-right-2{border-right:2px solid #28a745 !important}.border-info-right-2{border-right:2px solid #17a2b8 !important}.border-warning-right-2{border-right:2px solid #ffc107 !important}.border-danger-right-2{border-right:2px solid #dc3545 !important}.border-light-right-2{border-right:2px solid #f8f9fa !important}.border-dark-right-2{border-right:2px solid #343a40 !important}.border-link-right-2{border-right:2px solid #3273dc !important}.border-bottom-2{border-bottom:2px solid #dee2e6 !important}.border-primary-bottom-2{border-bottom:2px solid #007bff !important}.border-secondary-bottom-2{border-bottom:2px solid #6c757d !important}.border-success-bottom-2{border-bottom:2px solid #28a745 !important}.border-info-bottom-2{border-bottom:2px solid #17a2b8 !important}.border-warning-bottom-2{border-bottom:2px solid #ffc107 !important}.border-danger-bottom-2{border-bottom:2px solid #dc3545 !important}.border-light-bottom-2{border-bottom:2px solid #f8f9fa !important}.border-dark-bottom-2{border-bottom:2px solid #343a40 !important}.border-link-bottom-2{border-bottom:2px solid #3273dc !important}.border-left-2{border-left:2px solid #dee2e6 !important}.border-primary-left-2{border-left:2px solid #007bff !important}.border-secondary-left-2{border-left:2px solid #6c757d !important}.border-success-left-2{border-left:2px solid #28a745 !important}.border-info-left-2{border-left:2px solid #17a2b8 !important}.border-warning-left-2{border-left:2px solid #ffc107 !important}.border-danger-left-2{border-left:2px solid #dc3545 !important}.border-light-left-2{border-left:2px solid #f8f9fa !important}.border-dark-left-2{border-left:2px solid #343a40 !important}.border-link-left-2{border-left:2px solid #3273dc !important}.border-3{border:3px solid #dee2e6 !important}.border-3.border-primary{border-color:#007bff !important}.border-3.border-secondary{border-color:#6c757d !important}.border-3.border-success{border-color:#28a745 !important}.border-3.border-info{border-color:#17a2b8 !important}.border-3.border-warning{border-color:#ffc107 !important}.border-3.border-danger{border-color:#dc3545 !important}.border-3.border-light{border-color:#f8f9fa !important}.border-3.border-dark{border-color:#343a40 !important}.border-3.border-link{border-color:#3273dc !important}.border-primary-3{border:3px solid #007bff !important}.border-secondary-3{border:3px solid #6c757d !important}.border-success-3{border:3px solid #28a745 !important}.border-info-3{border:3px solid #17a2b8 !important}.border-warning-3{border:3px solid #ffc107 !important}.border-danger-3{border:3px solid #dc3545 !important}.border-light-3{border:3px solid #f8f9fa !important}.border-dark-3{border:3px solid #343a40 !important}.border-link-3{border:3px solid #3273dc !important}.border-top-3{border-top:3px solid #dee2e6 !important}.border-primary-top-3{border-top:3px solid #007bff !important}.border-secondary-top-3{border-top:3px solid #6c757d !important}.border-success-top-3{border-top:3px solid #28a745 !important}.border-info-top-3{border-top:3px solid #17a2b8 !important}.border-warning-top-3{border-top:3px solid #ffc107 !important}.border-danger-top-3{border-top:3px solid #dc3545 !important}.border-light-top-3{border-top:3px solid #f8f9fa !important}.border-dark-top-3{border-top:3px solid #343a40 !important}.border-link-top-3{border-top:3px solid #3273dc !important}.border-right-3{border-right:3px solid #dee2e6 !important}.border-primary-right-3{border-right:3px solid #007bff !important}.border-secondary-right-3{border-right:3px solid #6c757d !important}.border-success-right-3{border-right:3px solid #28a745 !important}.border-info-right-3{border-right:3px solid #17a2b8 !important}.border-warning-right-3{border-right:3px solid #ffc107 !important}.border-danger-right-3{border-right:3px solid #dc3545 !important}.border-light-right-3{border-right:3px solid #f8f9fa !important}.border-dark-right-3{border-right:3px solid #343a40 !important}.border-link-right-3{border-right:3px solid #3273dc !important}.border-bottom-3{border-bottom:3px solid #dee2e6 !important}.border-primary-bottom-3{border-bottom:3px solid #007bff !important}.border-secondary-bottom-3{border-bottom:3px solid #6c757d !important}.border-success-bottom-3{border-bottom:3px solid #28a745 !important}.border-info-bottom-3{border-bottom:3px solid #17a2b8 !important}.border-warning-bottom-3{border-bottom:3px solid #ffc107 !important}.border-danger-bottom-3{border-bottom:3px solid #dc3545 !important}.border-light-bottom-3{border-bottom:3px solid #f8f9fa !important}.border-dark-bottom-3{border-bottom:3px solid #343a40 !important}.border-link-bottom-3{border-bottom:3px solid #3273dc !important}.border-left-3{border-left:3px solid #dee2e6 !important}.border-primary-left-3{border-left:3px solid #007bff !important}.border-secondary-left-3{border-left:3px solid #6c757d !important}.border-success-left-3{border-left:3px solid #28a745 !important}.border-info-left-3{border-left:3px solid #17a2b8 !important}.border-warning-left-3{border-left:3px solid #ffc107 !important}.border-danger-left-3{border-left:3px solid #dc3545 !important}.border-light-left-3{border-left:3px solid #f8f9fa !important}.border-dark-left-3{border-left:3px solid #343a40 !important}.border-link-left-3{border-left:3px solid #3273dc !important}.border-4{border:4px solid #dee2e6 !important}.border-4.border-primary{border-color:#007bff !important}.border-4.border-secondary{border-color:#6c757d !important}.border-4.border-success{border-color:#28a745 !important}.border-4.border-info{border-color:#17a2b8 !important}.border-4.border-warning{border-color:#ffc107 !important}.border-4.border-danger{border-color:#dc3545 !important}.border-4.border-light{border-color:#f8f9fa !important}.border-4.border-dark{border-color:#343a40 !important}.border-4.border-link{border-color:#3273dc !important}.border-primary-4{border:4px solid #007bff !important}.border-secondary-4{border:4px solid #6c757d !important}.border-success-4{border:4px solid #28a745 !important}.border-info-4{border:4px solid #17a2b8 !important}.border-warning-4{border:4px solid #ffc107 !important}.border-danger-4{border:4px solid #dc3545 !important}.border-light-4{border:4px solid #f8f9fa !important}.border-dark-4{border:4px solid #343a40 !important}.border-link-4{border:4px solid #3273dc !important}.border-top-4{border-top:4px solid #dee2e6 !important}.border-primary-top-4{border-top:4px solid #007bff !important}.border-secondary-top-4{border-top:4px solid #6c757d !important}.border-success-top-4{border-top:4px solid #28a745 !important}.border-info-top-4{border-top:4px solid #17a2b8 !important}.border-warning-top-4{border-top:4px solid #ffc107 !important}.border-danger-top-4{border-top:4px solid #dc3545 !important}.border-light-top-4{border-top:4px solid #f8f9fa !important}.border-dark-top-4{border-top:4px solid #343a40 !important}.border-link-top-4{border-top:4px solid #3273dc !important}.border-right-4{border-right:4px solid #dee2e6 !important}.border-primary-right-4{border-right:4px solid #007bff !important}.border-secondary-right-4{border-right:4px solid #6c757d !important}.border-success-right-4{border-right:4px solid #28a745 !important}.border-info-right-4{border-right:4px solid #17a2b8 !important}.border-warning-right-4{border-right:4px solid #ffc107 !important}.border-danger-right-4{border-right:4px solid #dc3545 !important}.border-light-right-4{border-right:4px solid #f8f9fa !important}.border-dark-right-4{border-right:4px solid #343a40 !important}.border-link-right-4{border-right:4px solid #3273dc !important}.border-bottom-4{border-bottom:4px solid #dee2e6 !important}.border-primary-bottom-4{border-bottom:4px solid #007bff !important}.border-secondary-bottom-4{border-bottom:4px solid #6c757d !important}.border-success-bottom-4{border-bottom:4px solid #28a745 !important}.border-info-bottom-4{border-bottom:4px solid #17a2b8 !important}.border-warning-bottom-4{border-bottom:4px solid #ffc107 !important}.border-danger-bottom-4{border-bottom:4px solid #dc3545 !important}.border-light-bottom-4{border-bottom:4px solid #f8f9fa !important}.border-dark-bottom-4{border-bottom:4px solid #343a40 !important}.border-link-bottom-4{border-bottom:4px solid #3273dc !important}.border-left-4{border-left:4px solid #dee2e6 !important}.border-primary-left-4{border-left:4px solid #007bff !important}.border-secondary-left-4{border-left:4px solid #6c757d !important}.border-success-left-4{border-left:4px solid #28a745 !important}.border-info-left-4{border-left:4px solid #17a2b8 !important}.border-warning-left-4{border-left:4px solid #ffc107 !important}.border-danger-left-4{border-left:4px solid #dc3545 !important}.border-light-left-4{border-left:4px solid #f8f9fa !important}.border-dark-left-4{border-left:4px solid #343a40 !important}.border-link-left-4{border-left:4px solid #3273dc !important}.border-5{border:5px solid #dee2e6 !important}.border-5.border-primary{border-color:#007bff !important}.border-5.border-secondary{border-color:#6c757d !important}.border-5.border-success{border-color:#28a745 !important}.border-5.border-info{border-color:#17a2b8 !important}.border-5.border-warning{border-color:#ffc107 !important}.border-5.border-danger{border-color:#dc3545 !important}.border-5.border-light{border-color:#f8f9fa !important}.border-5.border-dark{border-color:#343a40 !important}.border-5.border-link{border-color:#3273dc !important}.border-primary-5{border:5px solid #007bff !important}.border-secondary-5{border:5px solid #6c757d !important}.border-success-5{border:5px solid #28a745 !important}.border-info-5{border:5px solid #17a2b8 !important}.border-warning-5{border:5px solid #ffc107 !important}.border-danger-5{border:5px solid #dc3545 !important}.border-light-5{border:5px solid #f8f9fa !important}.border-dark-5{border:5px solid #343a40 !important}.border-link-5{border:5px solid #3273dc !important}.border-top-5{border-top:5px solid #dee2e6 !important}.border-primary-top-5{border-top:5px solid #007bff !important}.border-secondary-top-5{border-top:5px solid #6c757d !important}.border-success-top-5{border-top:5px solid #28a745 !important}.border-info-top-5{border-top:5px solid #17a2b8 !important}.border-warning-top-5{border-top:5px solid #ffc107 !important}.border-danger-top-5{border-top:5px solid #dc3545 !important}.border-light-top-5{border-top:5px solid #f8f9fa !important}.border-dark-top-5{border-top:5px solid #343a40 !important}.border-link-top-5{border-top:5px solid #3273dc !important}.border-right-5{border-right:5px solid #dee2e6 !important}.border-primary-right-5{border-right:5px solid #007bff !important}.border-secondary-right-5{border-right:5px solid #6c757d !important}.border-success-right-5{border-right:5px solid #28a745 !important}.border-info-right-5{border-right:5px solid #17a2b8 !important}.border-warning-right-5{border-right:5px solid #ffc107 !important}.border-danger-right-5{border-right:5px solid #dc3545 !important}.border-light-right-5{border-right:5px solid #f8f9fa !important}.border-dark-right-5{border-right:5px solid #343a40 !important}.border-link-right-5{border-right:5px solid #3273dc !important}.border-bottom-5{border-bottom:5px solid #dee2e6 !important}.border-primary-bottom-5{border-bottom:5px solid #007bff !important}.border-secondary-bottom-5{border-bottom:5px solid #6c757d !important}.border-success-bottom-5{border-bottom:5px solid #28a745 !important}.border-info-bottom-5{border-bottom:5px solid #17a2b8 !important}.border-warning-bottom-5{border-bottom:5px solid #ffc107 !important}.border-danger-bottom-5{border-bottom:5px solid #dc3545 !important}.border-light-bottom-5{border-bottom:5px solid #f8f9fa !important}.border-dark-bottom-5{border-bottom:5px solid #343a40 !important}.border-link-bottom-5{border-bottom:5px solid #3273dc !important}.border-left-5{border-left:5px solid #dee2e6 !important}.border-primary-left-5{border-left:5px solid #007bff !important}.border-secondary-left-5{border-left:5px solid #6c757d !important}.border-success-left-5{border-left:5px solid #28a745 !important}.border-info-left-5{border-left:5px solid #17a2b8 !important}.border-warning-left-5{border-left:5px solid #ffc107 !important}.border-danger-left-5{border-left:5px solid #dc3545 !important}.border-light-left-5{border-left:5px solid #f8f9fa !important}.border-dark-left-5{border-left:5px solid #343a40 !important}.border-link-left-5{border-left:5px solid #3273dc !important}.flatpickr-months{margin:.5rem 0}.flatpickr-months .flatpickr-month,.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{height:auto;position:relative}.flatpickr-months .flatpickr-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#007bff}.flatpickr-months .flatpickr-month{color:#212529}.flatpickr-current-month{padding:13px 0 0 0;font-size:115%}.flatpickr-current-month span.cur-month{font-weight:700}.flatpickr-current-month span.cur-month:hover{background:rgba(0,123,255,.15)}.numInputWrapper:hover{background:rgba(0,123,255,.15)}.flatpickr-day{border-radius:.25rem;font-weight:500;color:#212529}.flatpickr-day.today{border-color:#007bff}.flatpickr-day.today:hover{background:#007bff;border-color:#007bff}.flatpickr-day:hover{background:rgba(0,123,255,.1);border-color:rgba(0,0,0,0)}span.flatpickr-weekday{color:#212529}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#007bff;border-color:#007bff}.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)){box-shadow:-10px 0 0 #007bff}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:.25rem 0 0 .25rem}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 .25rem .25rem 0}.flatpickr-monthSelect-month:hover,.flatpickr-monthSelect-month:focus{background:rgba(0,123,255,.1)}.flatpickr-monthSelect-month.selected{background-color:#007bff} +@keyframes fadeIn{0%{opacity:0}100%{opacity:1}0%{opacity:0}}@keyframes slideIn{0%{transform:translateY(1rem);opacity:0}100%{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}.badge-close{cursor:pointer}.badge-close::before{height:2px;width:50%}.badge-close::after{height:50%;width:2px}.badge-close:hover,.badge-close:focus{background-color:rgba(10,10,10,.3)}.badge-close:active{background-color:rgba(10,10,10,.4)}.navbar-nav .nav-item:hover{cursor:pointer}.navbar-nav .nav-link:hover{cursor:pointer}.nav .nav-link:hover{cursor:pointer}.nav-item{position:relative}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item{width:100%}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item:empty::after{margin-left:0}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-item::after{transform:rotate(-90deg);position:absolute;right:10%;top:45%}.b-bar-horizontal .nav-item.dropdown .dropdown-menu>.dropdown>.dropdown-menu{top:0;left:100%;margin-left:0;margin-right:.1rem}.btn-group>.b-tooltip:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.b-tooltip:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group.btn-group-toggle .btn.active.disabled{opacity:1}.btn-group-vertical>.b-tooltip:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.b-tooltip:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-xs,.btn-group-xs>.btn{padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.btn-md,.btn-group-md>.btn{padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.btn-xl,.btn-group-xl>.btn{padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.dropdown-toggle.dropdown-toggle-hidden::after{content:none !important}.dropdown-toggle.dropdown-toggle-hidden::before{content:none !important}.dropdown-menu.show{animation-duration:.3s;animation-fill-mode:both;animation-name:fadeIn}.dropdown-menu a:not([href]).dropdown-item:not(.disabled){cursor:pointer}.dropdown-menu.dropdown-menu-scrollable{max-height:var(--dropdown-list-menu-max-height,200px);overflow-y:scroll}.b-is-autocomplete .dropdown-menu{width:100%;max-height:var(--autocomplete-menu-max-height,200px);overflow-y:scroll}.b-is-autocomplete.b-is-autocomplete-multipleselection{max-width:100%;width:100%;cursor:text;min-height:calc(1.5em + .75rem + 2px);height:auto;border:1px solid #ced4da;border-radius:.25rem}.b-is-autocomplete.b-is-autocomplete-multipleselection>input.form-control{display:inline-block;border:none;box-shadow:none;outline:none;background-color:transparent;max-width:inherit;width:auto}.b-is-autocomplete.b-is-autocomplete-multipleselection.focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.dropdown.btn-group>.btn.dropdown-toggle-split+.dropdown-menu.show{top:100%}.dropdown{position:relative}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend){position:relative}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle{width:100%}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle:empty::after{margin-left:0}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-toggle::after{position:absolute;right:10%;top:45%}.dropdown>.dropdown-menu>.dropdown:not(.dropup,.dropstart,.dropend)>.dropdown-menu{top:auto;left:auto;bottom:auto;right:auto}.dropdown>.dropdown-menu>.dropdown.dropup .dropdown-toggle::after,.dropdown>.dropdown-menu>.dropdown.dropend .dropdown-toggle::after{vertical-align:0;position:absolute;right:10%;top:45%}.dropdown>.dropdown-menu>.dropdown.dropstart .dropdown-toggle::after{vertical-align:0}.dropdown.dropup>.dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropdown.dropup>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropdown.dropup>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropend>.dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropdown.dropend>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropdown.dropend>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropend>.dropdown-toggle::after{vertical-align:0}.dropdown.dropstart>.dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropdown.dropstart>.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropdown.dropstart>.dropdown-toggle::after{display:none}.dropdown.dropstart>.dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropdown.dropstart>.dropdown-toggle:empty::after{margin-left:0}.dropdown.dropstart>.dropdown-toggle::before{vertical-align:0}.dropdown-menu-start{right:auto;left:0}.dropdown-menu-end{right:0;left:auto}@media(min-width:576px){.dropdown-menu-sm-start{right:auto;left:0}.dropdown-menu-sm-end{right:0;left:auto}}@media(min-width:768px){.dropdown-menu-md-start{right:auto;left:0}.dropdown-menu-md-end{right:0;left:auto}}@media(min-width:992px){.dropdown-menu-lg-start{right:auto;left:0}.dropdown-menu-lg-end{right:0;left:auto}}@media(min-width:1200px){.dropdown-menu-xl-start{right:auto;left:0}.dropdown-menu-xl-end{right:0;left:auto}}hr.divider.divider-text{position:unset}hr.divider.divider-text::before{top:unset}.snackbar-stack{z-index:1059 !important}.snackbar{z-index:1060 !important}.figure.figure-is-16x16{height:16px;width:16px}.figure.figure-is-24x24{height:24px;width:24px}.figure.figure-is-32x32{height:32px;width:32px}.figure.figure-is-48x48{height:48px;width:48px}.figure.figure-is-64x64{height:64px;width:64px}.figure.figure-is-96x96{height:96px;width:96px}.figure.figure-is-128x128{height:128px;width:128px}.figure.figure-is-256x256{height:256px;width:256px}.figure.figure-is-512x512{height:512px;width:512px}.form-check>.form-check-input.form-check-input-pointer,.form-check>.form-check-label.form-check-label-pointer,.form-switch>.form-check-input.form-check-input-pointer,.form-switch>.form-check-label.form-check-label-pointer{cursor:pointer}.form-control-plaintext.form-control-xs,.form-control-plaintext.form-control-md,.form-control-plaintext.form-control-xl{padding-right:0;padding-left:0}.form-control-xs{height:calc(1.5em + .3rem + 2px);padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.form-control-md{height:calc(1.5em + .94rem + 2px);padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.form-control-xl{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.form-select-xs{height:calc(1.5em + .3rem + 2px);padding-top:.15rem;padding-bottom:.15rem;padding-left:.5rem;font-size:.75rem}.form-select-md{height:calc(1.5em + .94rem + 2px);padding-top:.47rem;padding-bottom:.47rem;padding-left:1rem;font-size:1.125rem}.form-select-xl{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.5rem}.input-group>.b-numeric:not(:last-child)>input{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.b-numeric:not(:first-child)>input{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-xs>.form-control:not(textarea),.input-group-xs>.form-select,.input-group-xs>.b-numeric>input{height:calc(1.5em + .3rem + 2px)}.input-group-xs>.form-control,.input-group-xs>.form-select,.input-group-xs>.input-group-text,.input-group-xs>.btn,.input-group-xs>.b-numeric>input{padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.input-group-sm>.b-numeric>input{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.b-numeric>input{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-md>.form-control:not(textarea),.input-group-md>.form-select,.input-group-md>.b-numeric>input{height:calc(1.5em + .94rem + 2px)}.input-group-md>.form-control,.input-group-md>.form-select,.input-group-md>.input-group-text,.input-group-md>.btn,.input-group-md>.b-numeric>input{padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.input-group-lg>.b-numeric>input{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.b-numeric>input{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-xl>.form-control:not(textarea),.input-group-xl>.form-select,.input-group-xl>.b-numeric>input{height:calc(1.5em + 1rem + 2px)}.input-group-xl>.form-control,.input-group-xl>.form-select,.input-group-xl>.input-group-text,.input-group-xl>.btn,.input-group-xl>.b-numeric>input{padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.input-group-xs>.form-select,.input-group-md>.form-select,.input-group-xl>.form-select{padding-right:1.75rem}.input-group:not(.has-validation)>.dropdown:first-child>.btn:not(:last-child).dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown>.btn:not(:last-child).dropdown-toggle,.input-group.has-validation>.dropdown>.btn:not(:last-child):not(.dropdown-toggle){border-top-left-radius:0;border-bottom-left-radius:0}.form-check>.form-check-input.form-check-input-xs{width:.7rem;height:.7rem}.form-check>.form-check-input.form-check-input-xs+.form-check-label{line-height:"normal";padding-left:0}.form-check>.form-check-input.form-check-input-sm{width:.8rem;height:.8rem}.form-check>.form-check-input.form-check-input-sm+.form-check-label{line-height:"normal";padding-left:0}.form-check>.form-check-input.form-check-input-md{width:1.25rem;height:1.25rem}.form-check>.form-check-input.form-check-input-md+.form-check-label{line-height:1.7rem;padding-left:3px}.form-check>.form-check-input.form-check-input-lg{width:1.55rem;height:1.55rem}.form-check>.form-check-input.form-check-input-lg+.form-check-label{line-height:2rem;padding-left:6px}.form-check>.form-check-input.form-check-input-xl{width:1.85rem;height:1.85rem}.form-check>.form-check-input.form-check-input-xl+.form-check-label{line-height:2.5rem;padding-left:10px}select[readonly]{pointer-events:none}select[readonly] option,select[readonly] optgroup{display:none}.b-numeric{position:relative;width:100%}.b-numeric:hover>.b-numeric-handler-wrap{opacity:1}.b-numeric-handler-wrap{position:absolute;top:0;right:0;width:22px;height:100%;background:#fff;border:1px solid #d9d9d9;opacity:0}.input-group .b-numeric{-ms-flex:1 1 auto;flex:1 1 auto;width:1%}.b-numeric-handler-wrap .b-numeric-handler.b-numeric-handler-down{border-top:1px solid #d9d9d9}.b-numeric-handler{position:relative;display:flex;width:100%;height:50%;overflow:hidden;color:rgba(0,0,0,.45);font-weight:700;line-height:0;align-items:center;justify-content:center}.b-numeric-handler.btn{padding:0}.form-control+.b-numeric-handler-wrap{font-size:1rem;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.form-control-xs+.b-numeric-handler-wrap{font-size:.75rem;border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.form-control-xs+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:.75rem}.form-control-sm+.b-numeric-handler-wrap{font-size:.875rem;border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.form-control-sm+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:.875rem}.form-control-md+.b-numeric-handler-wrap{font-size:1.125rem;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.form-control-md+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.125rem}.form-control-lg+.b-numeric-handler-wrap{font-size:1.25rem;border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.form-control-lg+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.25rem}.form-control-xl+.b-numeric-handler-wrap{font-size:1.5rem;border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}.form-control-xl+.b-numeric-handler-wrap>.b-numeric-handler.btn{font-size:1.5rem}.custom-file-label{overflow:hidden}input[readonly][type=range],input[readonly=readonly][type=range]{pointer-events:none}input[readonly][type=range]::-webkit-slider-thumb,input[readonly=readonly][type=range]::-webkit-slider-thumb{pointer-events:none}input[readonly][type=range]::-moz-range-thumb,input[readonly=readonly][type=range]::-moz-range-thumb{pointer-events:none}input[readonly][type=range]::-ms-thumb,input[readonly=readonly][type=range]::-ms-thumb{pointer-events:none}.form-group{margin-bottom:1rem}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media(min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .form-select{align-items:center;justify-content:center}.form-inline .form-check-label{margin-bottom:0}}.b-input-color-picker{padding:.5rem .6rem}.b-input-color-picker>.b-input-color-picker-preview{height:.55rem}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media(min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.jumbotron.jumbotron-primary{background-color:#007bff;color:#fff}.jumbotron.jumbotron-secondary{background-color:#6c757d;color:#fff}.jumbotron.jumbotron-success{background-color:#28a745;color:#fff}.jumbotron.jumbotron-info{background-color:#17a2b8;color:#fff}.jumbotron.jumbotron-warning{background-color:#ffc107;color:#212529}.jumbotron.jumbotron-danger{background-color:#dc3545;color:#fff}.jumbotron.jumbotron-light{background-color:#f8f9fa;color:#212529}.jumbotron.jumbotron-dark{background-color:#343a40;color:#fff}.jumbotron.jumbotron-link{background-color:#3273dc;color:#fff}.b-layout-header-fixed{z-index:1030}.b-layout-footer-fixed{z-index:1030}.b-layout-sider-content{z-index:1031}li.list-group-item-action{cursor:pointer}.b-list-view{overflow-y:scroll}.media{display:flex;align-items:flex-start}.media-body{flex:1}.modal.fade{transition:opacity var(--modal-animation-duration,300ms) linear}.modal.fade .modal-dialog{transition:-webkit-transform var(--modal-animation-duration,300ms) ease-out;transition:transform var(--modal-animation-duration,300ms) ease-out}.page-item:not(.disabled) .page-link{cursor:pointer}.pagination-xs .page-link{padding:.125rem .25rem;font-size:.75rem;line-height:1.5}.pagination-xs .page-item:first-child .page-link{border-top-left-radius:.15rem;border-bottom-left-radius:.15rem}.pagination-xs .page-item:last-child .page-link{border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.pagination-md .page-link{padding:.625rem 1.25rem;font-size:1.125rem;line-height:1.5}.pagination-md .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-md .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-xl .page-link{padding:1rem 2rem;font-size:1.5rem;line-height:1.5}.pagination-xl .page-item:first-child .page-link{border-top-left-radius:.4rem;border-bottom-left-radius:.4rem}.pagination-xl .page-item:last-child .page-link{border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-primary{background-color:#007bff}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-secondary{background-color:#6c757d}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-success{background-color:#28a745}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-info{background-color:#17a2b8}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-warning{background-color:#ffc107}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-danger{background-color:#dc3545}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-light{background-color:#f8f9fa}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-dark{background-color:#343a40}.b-page-progress .b-page-progress-indicator.b-page-progress-indicator-link{background-color:#3273dc}.rating:not(.rating-disabled):not(.rating-readonly):hover .rating-item{cursor:pointer}.rating.rating-disabled{opacity:.65}.rating .rating-item.rating-item-primary{color:#007bff}.rating .rating-item.rating-item-secondary{color:#6c757d}.rating .rating-item.rating-item-success{color:#28a745}.rating .rating-item.rating-item-info{color:#17a2b8}.rating .rating-item.rating-item-warning{color:#ffc107}.rating .rating-item.rating-item-danger{color:#dc3545}.rating .rating-item.rating-item-light{color:#f8f9fa}.rating .rating-item.rating-item-dark{color:#343a40}.rating .rating-item.rating-item-link{color:#3273dc}.rating .rating-item.rating-item-hover{opacity:.7}.steps{padding:0;margin:0;list-style:none;display:flex;overflow-x:auto}.steps .step:first-child{margin-left:auto}.steps .step:last-child{margin-right:auto}.step:first-of-type .step-circle::before{display:none}.step:last-of-type .step-container{padding-right:0}.step-container{box-sizing:content-box;display:flex;align-items:center;flex-direction:column;width:5rem;min-width:5rem;max-width:5rem;padding-top:.5rem;padding-right:1rem}.step-circle{position:relative;display:flex;justify-content:center;align-items:center;width:1.5rem;height:1.5rem;color:#adb5bd;border:2px solid #adb5bd;border-radius:100%;background-color:#fff}.step-circle::before{content:"";display:block;position:absolute;top:50%;left:-2px;width:calc(5rem + 1rem - 1.5rem);height:2px;transform:translate(-100%,-50%);color:#adb5bd;background-color:currentColor}.step-text{color:#adb5bd;word-break:break-all;margin-top:.25em}.step-completed .step-circle{color:#fff;background-color:#28a745;border-color:#28a745}.step-completed .step-circle::before{color:#28a745}.step-completed .step-text{color:#28a745}.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-active .step-circle::before{color:#007bff}.step-active .step-text{color:#007bff}.step-primary .step-circle{color:#007bff;border-color:#007bff}.step-primary.step-completed .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-primary.step-completed .step-circle::before{color:#007bff}.step-primary.step-completed .step-text{color:#007bff}.step-primary.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-primary.step-active::before{color:#007bff}.step-primary.step-active .step-text{color:#007bff}.step-secondary .step-circle{color:#6c757d;border-color:#6c757d}.step-secondary.step-completed .step-circle{color:#fff;background-color:#6c757d;border-color:#6c757d}.step-secondary.step-completed .step-circle::before{color:#6c757d}.step-secondary.step-completed .step-text{color:#6c757d}.step-secondary.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-secondary.step-active::before{color:#007bff}.step-secondary.step-active .step-text{color:#007bff}.step-success .step-circle{color:#28a745;border-color:#28a745}.step-success.step-completed .step-circle{color:#fff;background-color:#28a745;border-color:#28a745}.step-success.step-completed .step-circle::before{color:#28a745}.step-success.step-completed .step-text{color:#28a745}.step-success.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-success.step-active::before{color:#007bff}.step-success.step-active .step-text{color:#007bff}.step-info .step-circle{color:#17a2b8;border-color:#17a2b8}.step-info.step-completed .step-circle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.step-info.step-completed .step-circle::before{color:#17a2b8}.step-info.step-completed .step-text{color:#17a2b8}.step-info.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-info.step-active::before{color:#007bff}.step-info.step-active .step-text{color:#007bff}.step-warning .step-circle{color:#ffc107;border-color:#ffc107}.step-warning.step-completed .step-circle{color:#fff;background-color:#ffc107;border-color:#ffc107}.step-warning.step-completed .step-circle::before{color:#ffc107}.step-warning.step-completed .step-text{color:#ffc107}.step-warning.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-warning.step-active::before{color:#007bff}.step-warning.step-active .step-text{color:#007bff}.step-danger .step-circle{color:#dc3545;border-color:#dc3545}.step-danger.step-completed .step-circle{color:#fff;background-color:#dc3545;border-color:#dc3545}.step-danger.step-completed .step-circle::before{color:#dc3545}.step-danger.step-completed .step-text{color:#dc3545}.step-danger.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-danger.step-active::before{color:#007bff}.step-danger.step-active .step-text{color:#007bff}.step-light .step-circle{color:#f8f9fa;border-color:#f8f9fa}.step-light.step-completed .step-circle{color:#fff;background-color:#f8f9fa;border-color:#f8f9fa}.step-light.step-completed .step-circle::before{color:#f8f9fa}.step-light.step-completed .step-text{color:#f8f9fa}.step-light.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-light.step-active::before{color:#007bff}.step-light.step-active .step-text{color:#007bff}.step-dark .step-circle{color:#343a40;border-color:#343a40}.step-dark.step-completed .step-circle{color:#fff;background-color:#343a40;border-color:#343a40}.step-dark.step-completed .step-circle::before{color:#343a40}.step-dark.step-completed .step-text{color:#343a40}.step-dark.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-dark.step-active::before{color:#007bff}.step-dark.step-active .step-text{color:#007bff}.step-link .step-circle{color:#3273dc;border-color:#3273dc}.step-link.step-completed .step-circle{color:#fff;background-color:#3273dc;border-color:#3273dc}.step-link.step-completed .step-circle::before{color:#3273dc}.step-link.step-completed .step-text{color:#3273dc}.step-link.step-active .step-circle{color:#fff;background-color:#007bff;border-color:#007bff}.step-link.step-active::before{color:#007bff}.step-link.step-active .step-text{color:#007bff}.steps-content{margin:1rem 0}.steps-content>.step-panel{display:none}.steps-content>.active{display:block}.form-check.form-switch .form-check-input.form-check-input-primary:checked{background-color:#007bff;border-color:#007bff}.form-check.form-switch .form-check-input.form-check-input-secondary:checked{background-color:#6c757d;border-color:#6c757d}.form-check.form-switch .form-check-input.form-check-input-success:checked{background-color:#28a745;border-color:#28a745}.form-check.form-switch .form-check-input.form-check-input-info:checked{background-color:#17a2b8;border-color:#17a2b8}.form-check.form-switch .form-check-input.form-check-input-warning:checked{background-color:#ffc107;border-color:#ffc107}.form-check.form-switch .form-check-input.form-check-input-danger:checked{background-color:#dc3545;border-color:#dc3545}.form-check.form-switch .form-check-input.form-check-input-light:checked{background-color:#f8f9fa;border-color:#f8f9fa}.form-check.form-switch .form-check-input.form-check-input-dark:checked{background-color:#343a40;border-color:#343a40}.form-check.form-switch .form-check-input.form-check-input-link:checked{background-color:#3273dc;border-color:#3273dc}.form-check.form-switch .form-check-input.form-check-input-xs{width:calc(.75rem + (.5rem/2));height:.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-xs+.form-check-label{line-height:1rem;vertical-align:middle;padding-left:0}.form-check.form-switch .form-check-input.form-check-input-xs:checked~.form-check-label::after{transform:translateX(calc(.75rem - (.5rem/2)))}.form-check.form-switch .form-check-input.form-check-input-sm{width:calc(1rem + (.75rem/2));height:.75rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-sm+.form-check-label{line-height:1.25rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-sm:checked~.form-check-label::after{transform:translateX(calc(1rem - (.75rem/2)))}.form-check.form-switch .form-check-input.form-check-input-md{width:calc(2rem + (1.5rem/2));height:1.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-md+.form-check-label{line-height:2rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-md:checked~.form-check-label::after{transform:translateX(calc(2rem - (1.5rem/2)))}.form-check.form-switch .form-check-input.form-check-input-lg{width:calc(3rem + (2rem/2));height:2rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-lg+.form-check-label{line-height:2.5rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-lg:checked~.form-check-label::after{transform:translateX(calc(3rem - (2rem/2)))}.form-check.form-switch .form-check-input.form-check-input-xl{width:calc(4rem + (2.5rem/2));height:2.5rem;margin-left:-2.5em}.form-check.form-switch .form-check-input.form-check-input-xl+.form-check-label{line-height:3rem;vertical-align:middle;padding-left:.75rem}.form-check.form-switch .form-check-input.form-check-input-xl:checked~.form-check-label::after{transform:translateX(calc(4rem - (2.5rem/2)))}table.table tbody tr.selected{background-color:var(--primary)}tr.table-row-selectable:hover{cursor:pointer}.table-fixed-header{overflow-y:auto}.table-fixed-header>.table{border-collapse:separate;border-spacing:0}.table-fixed-header>.table>thead>tr>th{border-top:none;position:sticky;background:#fff;z-index:10}.table-fixed-header>.table>thead>tr:nth-child(1)>th{top:0}.table-fixed-header>.table-bordered>:not(caption)>*>*{border-width:1px 1px}.overflow-auto-auto{overflow:auto auto !important}.overflow-auto-hidden{overflow:auto hidden !important}.overflow-auto-visible{overflow:auto visible !important}.overflow-auto-scroll{overflow:auto scroll !important}.overflow-hidden-auto{overflow:hidden auto !important}.overflow-hidden-hidden{overflow:hidden hidden !important}.overflow-hidden-visible{overflow:hidden visible !important}.overflow-hidden-scroll{overflow:hidden scroll !important}.overflow-visible-auto{overflow:visible auto !important}.overflow-visible-hidden{overflow:visible hidden !important}.overflow-visible-visible{overflow:visible visible !important}.overflow-visible-scroll{overflow:visible scroll !important}.overflow-scroll-auto{overflow:scroll auto !important}.overflow-scroll-hidden{overflow:scroll hidden !important}.overflow-scroll-visible{overflow:scroll visible !important}.overflow-scroll-scroll{overflow:scroll scroll !important}ol.ordered-list-lower-alpha{list-style-type:lower-alpha}ol.ordered-list-lower-roman{list-style-type:lower-roman}ol.ordered-list-upper-alpha{list-style-type:upper-alpha}ol.ordered-list-upper-roman{list-style-type:upper-roman}.border-1{border:1px solid #dee2e6 !important}.border-1.border-primary{border-color:#007bff !important}.border-1.border-secondary{border-color:#6c757d !important}.border-1.border-success{border-color:#28a745 !important}.border-1.border-info{border-color:#17a2b8 !important}.border-1.border-warning{border-color:#ffc107 !important}.border-1.border-danger{border-color:#dc3545 !important}.border-1.border-light{border-color:#f8f9fa !important}.border-1.border-dark{border-color:#343a40 !important}.border-1.border-link{border-color:#3273dc !important}.border-primary-1{border:1px solid #007bff !important}.border-secondary-1{border:1px solid #6c757d !important}.border-success-1{border:1px solid #28a745 !important}.border-info-1{border:1px solid #17a2b8 !important}.border-warning-1{border:1px solid #ffc107 !important}.border-danger-1{border:1px solid #dc3545 !important}.border-light-1{border:1px solid #f8f9fa !important}.border-dark-1{border:1px solid #343a40 !important}.border-link-1{border:1px solid #3273dc !important}.border-top-1{border-top:1px solid #dee2e6 !important}.border-primary-top-1{border-top:1px solid #007bff !important}.border-secondary-top-1{border-top:1px solid #6c757d !important}.border-success-top-1{border-top:1px solid #28a745 !important}.border-info-top-1{border-top:1px solid #17a2b8 !important}.border-warning-top-1{border-top:1px solid #ffc107 !important}.border-danger-top-1{border-top:1px solid #dc3545 !important}.border-light-top-1{border-top:1px solid #f8f9fa !important}.border-dark-top-1{border-top:1px solid #343a40 !important}.border-link-top-1{border-top:1px solid #3273dc !important}.border-end-1{border-right:1px solid #dee2e6 !important}.border-primary-end-1{border-right:1px solid #007bff !important}.border-secondary-end-1{border-right:1px solid #6c757d !important}.border-success-end-1{border-right:1px solid #28a745 !important}.border-info-end-1{border-right:1px solid #17a2b8 !important}.border-warning-end-1{border-right:1px solid #ffc107 !important}.border-danger-end-1{border-right:1px solid #dc3545 !important}.border-light-end-1{border-right:1px solid #f8f9fa !important}.border-dark-end-1{border-right:1px solid #343a40 !important}.border-link-end-1{border-right:1px solid #3273dc !important}.border-bottom-1{border-bottom:1px solid #dee2e6 !important}.border-primary-bottom-1{border-bottom:1px solid #007bff !important}.border-secondary-bottom-1{border-bottom:1px solid #6c757d !important}.border-success-bottom-1{border-bottom:1px solid #28a745 !important}.border-info-bottom-1{border-bottom:1px solid #17a2b8 !important}.border-warning-bottom-1{border-bottom:1px solid #ffc107 !important}.border-danger-bottom-1{border-bottom:1px solid #dc3545 !important}.border-light-bottom-1{border-bottom:1px solid #f8f9fa !important}.border-dark-bottom-1{border-bottom:1px solid #343a40 !important}.border-link-bottom-1{border-bottom:1px solid #3273dc !important}.border-start-1{border-left:1px solid #dee2e6 !important}.border-primary-start-1{border-left:1px solid #007bff !important}.border-secondary-start-1{border-left:1px solid #6c757d !important}.border-success-start-1{border-left:1px solid #28a745 !important}.border-info-start-1{border-left:1px solid #17a2b8 !important}.border-warning-start-1{border-left:1px solid #ffc107 !important}.border-danger-start-1{border-left:1px solid #dc3545 !important}.border-light-start-1{border-left:1px solid #f8f9fa !important}.border-dark-start-1{border-left:1px solid #343a40 !important}.border-link-start-1{border-left:1px solid #3273dc !important}.border-2{border:2px solid #dee2e6 !important}.border-2.border-primary{border-color:#007bff !important}.border-2.border-secondary{border-color:#6c757d !important}.border-2.border-success{border-color:#28a745 !important}.border-2.border-info{border-color:#17a2b8 !important}.border-2.border-warning{border-color:#ffc107 !important}.border-2.border-danger{border-color:#dc3545 !important}.border-2.border-light{border-color:#f8f9fa !important}.border-2.border-dark{border-color:#343a40 !important}.border-2.border-link{border-color:#3273dc !important}.border-primary-2{border:2px solid #007bff !important}.border-secondary-2{border:2px solid #6c757d !important}.border-success-2{border:2px solid #28a745 !important}.border-info-2{border:2px solid #17a2b8 !important}.border-warning-2{border:2px solid #ffc107 !important}.border-danger-2{border:2px solid #dc3545 !important}.border-light-2{border:2px solid #f8f9fa !important}.border-dark-2{border:2px solid #343a40 !important}.border-link-2{border:2px solid #3273dc !important}.border-top-2{border-top:2px solid #dee2e6 !important}.border-primary-top-2{border-top:2px solid #007bff !important}.border-secondary-top-2{border-top:2px solid #6c757d !important}.border-success-top-2{border-top:2px solid #28a745 !important}.border-info-top-2{border-top:2px solid #17a2b8 !important}.border-warning-top-2{border-top:2px solid #ffc107 !important}.border-danger-top-2{border-top:2px solid #dc3545 !important}.border-light-top-2{border-top:2px solid #f8f9fa !important}.border-dark-top-2{border-top:2px solid #343a40 !important}.border-link-top-2{border-top:2px solid #3273dc !important}.border-end-2{border-right:2px solid #dee2e6 !important}.border-primary-end-2{border-right:2px solid #007bff !important}.border-secondary-end-2{border-right:2px solid #6c757d !important}.border-success-end-2{border-right:2px solid #28a745 !important}.border-info-end-2{border-right:2px solid #17a2b8 !important}.border-warning-end-2{border-right:2px solid #ffc107 !important}.border-danger-end-2{border-right:2px solid #dc3545 !important}.border-light-end-2{border-right:2px solid #f8f9fa !important}.border-dark-end-2{border-right:2px solid #343a40 !important}.border-link-end-2{border-right:2px solid #3273dc !important}.border-bottom-2{border-bottom:2px solid #dee2e6 !important}.border-primary-bottom-2{border-bottom:2px solid #007bff !important}.border-secondary-bottom-2{border-bottom:2px solid #6c757d !important}.border-success-bottom-2{border-bottom:2px solid #28a745 !important}.border-info-bottom-2{border-bottom:2px solid #17a2b8 !important}.border-warning-bottom-2{border-bottom:2px solid #ffc107 !important}.border-danger-bottom-2{border-bottom:2px solid #dc3545 !important}.border-light-bottom-2{border-bottom:2px solid #f8f9fa !important}.border-dark-bottom-2{border-bottom:2px solid #343a40 !important}.border-link-bottom-2{border-bottom:2px solid #3273dc !important}.border-start-2{border-left:2px solid #dee2e6 !important}.border-primary-start-2{border-left:2px solid #007bff !important}.border-secondary-start-2{border-left:2px solid #6c757d !important}.border-success-start-2{border-left:2px solid #28a745 !important}.border-info-start-2{border-left:2px solid #17a2b8 !important}.border-warning-start-2{border-left:2px solid #ffc107 !important}.border-danger-start-2{border-left:2px solid #dc3545 !important}.border-light-start-2{border-left:2px solid #f8f9fa !important}.border-dark-start-2{border-left:2px solid #343a40 !important}.border-link-start-2{border-left:2px solid #3273dc !important}.border-3{border:3px solid #dee2e6 !important}.border-3.border-primary{border-color:#007bff !important}.border-3.border-secondary{border-color:#6c757d !important}.border-3.border-success{border-color:#28a745 !important}.border-3.border-info{border-color:#17a2b8 !important}.border-3.border-warning{border-color:#ffc107 !important}.border-3.border-danger{border-color:#dc3545 !important}.border-3.border-light{border-color:#f8f9fa !important}.border-3.border-dark{border-color:#343a40 !important}.border-3.border-link{border-color:#3273dc !important}.border-primary-3{border:3px solid #007bff !important}.border-secondary-3{border:3px solid #6c757d !important}.border-success-3{border:3px solid #28a745 !important}.border-info-3{border:3px solid #17a2b8 !important}.border-warning-3{border:3px solid #ffc107 !important}.border-danger-3{border:3px solid #dc3545 !important}.border-light-3{border:3px solid #f8f9fa !important}.border-dark-3{border:3px solid #343a40 !important}.border-link-3{border:3px solid #3273dc !important}.border-top-3{border-top:3px solid #dee2e6 !important}.border-primary-top-3{border-top:3px solid #007bff !important}.border-secondary-top-3{border-top:3px solid #6c757d !important}.border-success-top-3{border-top:3px solid #28a745 !important}.border-info-top-3{border-top:3px solid #17a2b8 !important}.border-warning-top-3{border-top:3px solid #ffc107 !important}.border-danger-top-3{border-top:3px solid #dc3545 !important}.border-light-top-3{border-top:3px solid #f8f9fa !important}.border-dark-top-3{border-top:3px solid #343a40 !important}.border-link-top-3{border-top:3px solid #3273dc !important}.border-end-3{border-right:3px solid #dee2e6 !important}.border-primary-end-3{border-right:3px solid #007bff !important}.border-secondary-end-3{border-right:3px solid #6c757d !important}.border-success-end-3{border-right:3px solid #28a745 !important}.border-info-end-3{border-right:3px solid #17a2b8 !important}.border-warning-end-3{border-right:3px solid #ffc107 !important}.border-danger-end-3{border-right:3px solid #dc3545 !important}.border-light-end-3{border-right:3px solid #f8f9fa !important}.border-dark-end-3{border-right:3px solid #343a40 !important}.border-link-end-3{border-right:3px solid #3273dc !important}.border-bottom-3{border-bottom:3px solid #dee2e6 !important}.border-primary-bottom-3{border-bottom:3px solid #007bff !important}.border-secondary-bottom-3{border-bottom:3px solid #6c757d !important}.border-success-bottom-3{border-bottom:3px solid #28a745 !important}.border-info-bottom-3{border-bottom:3px solid #17a2b8 !important}.border-warning-bottom-3{border-bottom:3px solid #ffc107 !important}.border-danger-bottom-3{border-bottom:3px solid #dc3545 !important}.border-light-bottom-3{border-bottom:3px solid #f8f9fa !important}.border-dark-bottom-3{border-bottom:3px solid #343a40 !important}.border-link-bottom-3{border-bottom:3px solid #3273dc !important}.border-start-3{border-left:3px solid #dee2e6 !important}.border-primary-start-3{border-left:3px solid #007bff !important}.border-secondary-start-3{border-left:3px solid #6c757d !important}.border-success-start-3{border-left:3px solid #28a745 !important}.border-info-start-3{border-left:3px solid #17a2b8 !important}.border-warning-start-3{border-left:3px solid #ffc107 !important}.border-danger-start-3{border-left:3px solid #dc3545 !important}.border-light-start-3{border-left:3px solid #f8f9fa !important}.border-dark-start-3{border-left:3px solid #343a40 !important}.border-link-start-3{border-left:3px solid #3273dc !important}.border-4{border:4px solid #dee2e6 !important}.border-4.border-primary{border-color:#007bff !important}.border-4.border-secondary{border-color:#6c757d !important}.border-4.border-success{border-color:#28a745 !important}.border-4.border-info{border-color:#17a2b8 !important}.border-4.border-warning{border-color:#ffc107 !important}.border-4.border-danger{border-color:#dc3545 !important}.border-4.border-light{border-color:#f8f9fa !important}.border-4.border-dark{border-color:#343a40 !important}.border-4.border-link{border-color:#3273dc !important}.border-primary-4{border:4px solid #007bff !important}.border-secondary-4{border:4px solid #6c757d !important}.border-success-4{border:4px solid #28a745 !important}.border-info-4{border:4px solid #17a2b8 !important}.border-warning-4{border:4px solid #ffc107 !important}.border-danger-4{border:4px solid #dc3545 !important}.border-light-4{border:4px solid #f8f9fa !important}.border-dark-4{border:4px solid #343a40 !important}.border-link-4{border:4px solid #3273dc !important}.border-top-4{border-top:4px solid #dee2e6 !important}.border-primary-top-4{border-top:4px solid #007bff !important}.border-secondary-top-4{border-top:4px solid #6c757d !important}.border-success-top-4{border-top:4px solid #28a745 !important}.border-info-top-4{border-top:4px solid #17a2b8 !important}.border-warning-top-4{border-top:4px solid #ffc107 !important}.border-danger-top-4{border-top:4px solid #dc3545 !important}.border-light-top-4{border-top:4px solid #f8f9fa !important}.border-dark-top-4{border-top:4px solid #343a40 !important}.border-link-top-4{border-top:4px solid #3273dc !important}.border-end-4{border-right:4px solid #dee2e6 !important}.border-primary-end-4{border-right:4px solid #007bff !important}.border-secondary-end-4{border-right:4px solid #6c757d !important}.border-success-end-4{border-right:4px solid #28a745 !important}.border-info-end-4{border-right:4px solid #17a2b8 !important}.border-warning-end-4{border-right:4px solid #ffc107 !important}.border-danger-end-4{border-right:4px solid #dc3545 !important}.border-light-end-4{border-right:4px solid #f8f9fa !important}.border-dark-end-4{border-right:4px solid #343a40 !important}.border-link-end-4{border-right:4px solid #3273dc !important}.border-bottom-4{border-bottom:4px solid #dee2e6 !important}.border-primary-bottom-4{border-bottom:4px solid #007bff !important}.border-secondary-bottom-4{border-bottom:4px solid #6c757d !important}.border-success-bottom-4{border-bottom:4px solid #28a745 !important}.border-info-bottom-4{border-bottom:4px solid #17a2b8 !important}.border-warning-bottom-4{border-bottom:4px solid #ffc107 !important}.border-danger-bottom-4{border-bottom:4px solid #dc3545 !important}.border-light-bottom-4{border-bottom:4px solid #f8f9fa !important}.border-dark-bottom-4{border-bottom:4px solid #343a40 !important}.border-link-bottom-4{border-bottom:4px solid #3273dc !important}.border-start-4{border-left:4px solid #dee2e6 !important}.border-primary-start-4{border-left:4px solid #007bff !important}.border-secondary-start-4{border-left:4px solid #6c757d !important}.border-success-start-4{border-left:4px solid #28a745 !important}.border-info-start-4{border-left:4px solid #17a2b8 !important}.border-warning-start-4{border-left:4px solid #ffc107 !important}.border-danger-start-4{border-left:4px solid #dc3545 !important}.border-light-start-4{border-left:4px solid #f8f9fa !important}.border-dark-start-4{border-left:4px solid #343a40 !important}.border-link-start-4{border-left:4px solid #3273dc !important}.border-5{border:5px solid #dee2e6 !important}.border-5.border-primary{border-color:#007bff !important}.border-5.border-secondary{border-color:#6c757d !important}.border-5.border-success{border-color:#28a745 !important}.border-5.border-info{border-color:#17a2b8 !important}.border-5.border-warning{border-color:#ffc107 !important}.border-5.border-danger{border-color:#dc3545 !important}.border-5.border-light{border-color:#f8f9fa !important}.border-5.border-dark{border-color:#343a40 !important}.border-5.border-link{border-color:#3273dc !important}.border-primary-5{border:5px solid #007bff !important}.border-secondary-5{border:5px solid #6c757d !important}.border-success-5{border:5px solid #28a745 !important}.border-info-5{border:5px solid #17a2b8 !important}.border-warning-5{border:5px solid #ffc107 !important}.border-danger-5{border:5px solid #dc3545 !important}.border-light-5{border:5px solid #f8f9fa !important}.border-dark-5{border:5px solid #343a40 !important}.border-link-5{border:5px solid #3273dc !important}.border-top-5{border-top:5px solid #dee2e6 !important}.border-primary-top-5{border-top:5px solid #007bff !important}.border-secondary-top-5{border-top:5px solid #6c757d !important}.border-success-top-5{border-top:5px solid #28a745 !important}.border-info-top-5{border-top:5px solid #17a2b8 !important}.border-warning-top-5{border-top:5px solid #ffc107 !important}.border-danger-top-5{border-top:5px solid #dc3545 !important}.border-light-top-5{border-top:5px solid #f8f9fa !important}.border-dark-top-5{border-top:5px solid #343a40 !important}.border-link-top-5{border-top:5px solid #3273dc !important}.border-end-5{border-right:5px solid #dee2e6 !important}.border-primary-end-5{border-right:5px solid #007bff !important}.border-secondary-end-5{border-right:5px solid #6c757d !important}.border-success-end-5{border-right:5px solid #28a745 !important}.border-info-end-5{border-right:5px solid #17a2b8 !important}.border-warning-end-5{border-right:5px solid #ffc107 !important}.border-danger-end-5{border-right:5px solid #dc3545 !important}.border-light-end-5{border-right:5px solid #f8f9fa !important}.border-dark-end-5{border-right:5px solid #343a40 !important}.border-link-end-5{border-right:5px solid #3273dc !important}.border-bottom-5{border-bottom:5px solid #dee2e6 !important}.border-primary-bottom-5{border-bottom:5px solid #007bff !important}.border-secondary-bottom-5{border-bottom:5px solid #6c757d !important}.border-success-bottom-5{border-bottom:5px solid #28a745 !important}.border-info-bottom-5{border-bottom:5px solid #17a2b8 !important}.border-warning-bottom-5{border-bottom:5px solid #ffc107 !important}.border-danger-bottom-5{border-bottom:5px solid #dc3545 !important}.border-light-bottom-5{border-bottom:5px solid #f8f9fa !important}.border-dark-bottom-5{border-bottom:5px solid #343a40 !important}.border-link-bottom-5{border-bottom:5px solid #3273dc !important}.border-start-5{border-left:5px solid #dee2e6 !important}.border-primary-start-5{border-left:5px solid #007bff !important}.border-secondary-start-5{border-left:5px solid #6c757d !important}.border-success-start-5{border-left:5px solid #28a745 !important}.border-info-start-5{border-left:5px solid #17a2b8 !important}.border-warning-start-5{border-left:5px solid #ffc107 !important}.border-danger-start-5{border-left:5px solid #dc3545 !important}.border-light-start-5{border-left:5px solid #f8f9fa !important}.border-dark-start-5{border-left:5px solid #343a40 !important}.border-link-start-5{border-left:5px solid #3273dc !important}.flatpickr-months{margin:.5rem 0}.flatpickr-months .flatpickr-month,.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{height:auto;position:relative}.flatpickr-months .flatpickr-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#007bff}.flatpickr-months .flatpickr-month{color:#212529}.flatpickr-current-month{padding:13px 0 0 0;font-size:115%}.flatpickr-current-month span.cur-month{font-weight:700}.flatpickr-current-month span.cur-month:hover{background:rgba(0,123,255,.15)}.numInputWrapper:hover{background:rgba(0,123,255,.15)}.flatpickr-day{border-radius:.25rem;font-weight:500;color:#212529}.flatpickr-day.today{border-color:#007bff}.flatpickr-day.today:hover{background:#007bff;border-color:#007bff}.flatpickr-day:hover{background:rgba(0,123,255,.1);border-color:rgba(0,0,0,0)}span.flatpickr-weekday{color:#212529}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#007bff;border-color:#007bff}.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)){box-shadow:-10px 0 0 #007bff}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:.25rem 0 0 .25rem}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 .25rem .25rem 0}.flatpickr-monthSelect-month:hover,.flatpickr-monthSelect-month:focus{background:rgba(0,123,255,.1)}.flatpickr-monthSelect-month.selected{background-color:#007bff} .snackbar{align-items:center;background-color:var(--b-snackbar-background,#323232);color:var(--b-snackbar-text-color,#fff);font-size:.875rem;line-height:1.42857;opacity:0;padding:.875rem 1.5rem;position:fixed;bottom:0;left:0;transform:translateY(100%);transition:opacity 0s .195s,transform .195s cubic-bezier(.4,0,1,1);width:100%;z-index:60}@media(min-width:768px){.snackbar{border-radius:2px;max-width:35.5rem;min-width:18rem;left:50%;transform:translate(-50%,100%);width:auto}}@media(min-width:768px){.snackbar{transition:opacity 0s .2535s,transform .2535s cubic-bezier(.4,0,1,1)}}@media(min-width:1200px){.snackbar{transition:opacity 0s .13s,transform .13s cubic-bezier(.4,0,1,1)}}@media screen and (prefers-reduced-motion:reduce){.snackbar{transition:none}}.snackbar.snackbar-show{transition-duration:.225s;transition-property:transform;transition-timing-function:cubic-bezier(0,0,.2,1);opacity:1;transform:translateY(0)}@media(min-width:768px){.snackbar.snackbar-show{transition-duration:.2925s}}@media(min-width:1200px){.snackbar.snackbar-show{transition-duration:.15s}}@media screen and (prefers-reduced-motion:reduce){.snackbar.snackbar-show{transition:none}}@media(min-width:768px){.snackbar.snackbar-show{transform:translate(-50%,-1.5rem)}}.snackbar-header{display:flex;-ms-flex-pack:justify;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:DARKEN(var(--b-snackbar-background,#323232),30%);margin-right:auto;min-width:0;font-weight:bold;padding-bottom:.875rem}.snackbar-footer{display:flex;-ms-flex-pack:justify;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:DARKEN(var(--b-snackbar-background,#323232),30%);margin-right:auto;min-width:0;padding-top:.875rem}.snackbar-body{display:flex;-ms-flex-pack:justify;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:auto;max-height:100%;min-width:0}.snackbar-action-button{transition-duration:.3s;transition-property:background-color,background-image;transition-timing-function:cubic-bezier(.4,0,.2,1);background-color:transparent;background-image:none;border:0;color:var(--b-snackbar-button-color,var(--b-snackbar-button-color,#ff4081));cursor:pointer;display:block;flex-shrink:0;font-size:inherit;font-weight:500;line-height:inherit;padding:0;text-transform:uppercase;white-space:nowrap}@media(min-width:768px){.snackbar-action-button{transition-duration:.39s}}@media(min-width:1200px){.snackbar-action-button{transition-duration:.2s}}@media screen and (prefers-reduced-motion:reduce){.snackbar-action-button{transition:none}}.snackbar-action-button:focus,.snackbar-action-button:hover{color:var(--b-snackbar-button-hover-color,var(--b-snackbar-button-hover-color,#ff80ab));text-decoration:none}@media(min-width:768px){.snackbar-action-button{margin-left:3rem}}.snackbar-action-button:focus{outline:0}@media(min-width:768px){.snackbar-left,.snackbar-right{transform:translateY(100%)}.snackbar-left.snackbar-show,.snackbar-right.snackbar-show{transform:translateY(-1.5rem)}}@media(min-width:768px){.snackbar-left{left:1.5rem}}@media(min-width:768px){.snackbar-right{right:1.5rem;left:auto}}.snackbar-multi-line{padding-top:1.25rem;padding-bottom:1.25rem}.snackbar-multi-line .snackbar-body{white-space:normal}.snackbar-primary{background-color:var(--b-snackbar-background-primary,#cce5ff);color:var(--b-snackbar-text-primary,#004085)}.snackbar-action-button-primary{color:var(--b-snackbar-button-primary,#ff4081)}.snackbar-action-button-primary:focus,.snackbar-action-button-primary:hover{color:var(--b-snackbar-button-hover-primary,#ff80ab)}.snackbar-secondary{background-color:var(--b-snackbar-background-secondary,#e2e3e5);color:var(--b-snackbar-text-secondary,#383d41)}.snackbar-action-button-secondary{color:var(--b-snackbar-button-secondary,#ff4081)}.snackbar-action-button-secondary:focus,.snackbar-action-button-secondary:hover{color:var(--b-snackbar-button-hover-secondary,#ff80ab)}.snackbar-success{background-color:var(--b-snackbar-background-success,#d4edda);color:var(--b-snackbar-text-success,#155724)}.snackbar-action-button-success{color:var(--b-snackbar-button-success,#ff4081)}.snackbar-action-button-success:focus,.snackbar-action-button-success:hover{color:var(--b-snackbar-button-hover-success,#ff80ab)}.snackbar-danger{background-color:var(--b-snackbar-background-danger,#f8d7da);color:var(--b-snackbar-text-danger,#721c24)}.snackbar-action-button-danger{color:var(--b-snackbar-button-danger,#ff4081)}.snackbar-action-button-danger:focus,.snackbar-action-button-danger:hover{color:var(--b-snackbar-button-hover-danger,#ff80ab)}.snackbar-warning{background-color:var(--b-snackbar-background-warning,#fff3cd);color:var(--b-snackbar-text-warning,#856404)}.snackbar-action-button-warning{color:var(--b-snackbar-button-warning,#ff4081)}.snackbar-action-button-warning:focus,.snackbar-action-button-warning:hover{color:var(--b-snackbar-button-hover-warning,#ff80ab)}.snackbar-info{background-color:var(--b-snackbar-background-info,#d1ecf1);color:var(--b-snackbar-text-info,#0c5460)}.snackbar-action-button-info{color:var(--b-snackbar-button-info,#ff4081)}.snackbar-action-button-info:focus,.snackbar-action-button-info:hover{color:var(--b-snackbar-button-hover-info,#ff80ab)}.snackbar-light{background-color:var(--b-snackbar-background-light,#fefefe);color:var(--b-snackbar-text-light,#818182)}.snackbar-action-button-light{color:var(--b-snackbar-button-light,#ff4081)}.snackbar-action-button-light:focus,.snackbar-action-button-light:hover{color:var(--b-snackbar-button-hover-light,#ff80ab)}.snackbar-dark{background-color:var(--b-snackbar-background-dark,#d6d8d9);color:var(--b-snackbar-text-dark,#1b1e21)}.snackbar-action-button-dark{color:var(--b-snackbar-button-dark,#ff4081)}.snackbar-action-button-dark:focus,.snackbar-action-button-dark:hover{color:var(--b-snackbar-button-hover-dark,#ff80ab)}.snackbar-stack{display:flex;flex-direction:column;position:fixed;z-index:60;bottom:0}.snackbar-stack .snackbar{position:relative;flex-direction:row;margin-bottom:0}.snackbar-stack .snackbar:not(:last-child){margin-bottom:1.5rem}@media(min-width:576px){.snackbar-stack-center{left:50%;transform:translate(-50%,0%)}.snackbar-stack-left{left:1.5rem}.snackbar-stack-right{right:1.5rem}} #main-navbar-tools a.dropdown-toggle{text-decoration:none;color:#fff}.navbar .dropdown-submenu{position:relative}.navbar .dropdown-menu{margin:0;padding:0}.navbar .dropdown-menu a{font-size:.9em;padding:10px 15px;display:block;min-width:210px;text-align:left;border-radius:.25rem;min-height:44px}.navbar .dropdown-submenu a::after{transform:rotate(-90deg);position:absolute;right:16px;top:18px}.navbar .dropdown-submenu .dropdown-menu{top:0;left:100%}.card-header .btn{padding:2px 6px}.card-header h5{margin:0}.container>.card{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}@media screen and (min-width:768px){.navbar .dropdown:hover>.dropdown-menu{display:block}.navbar .dropdown-submenu:hover>.dropdown-menu{display:block}}.input-validation-error{border-color:#dc3545}.field-validation-error{font-size:.8em}.dataTables_scrollBody{min-height:248px}div.dataTables_wrapper div.dataTables_info{padding-top:11px;white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{padding-top:10px;margin-bottom:0}.rtl .dropdown-menu-right{right:auto;left:0}.rtl .dropdown-menu-right a{text-align:right}.rtl .navbar .dropdown-menu a{text-align:right}.rtl .navbar .dropdown-submenu .dropdown-menu{top:0;left:auto;right:100%}.navbar-dark .navbar-nav .nav-link{color:#000 !important}.navbar-nav>.nav-item>.nav-link,.navbar-nav>.nav-item>.dropdown>.nav-link{color:#fff !important}.navbar-nav>.nav-item>div>button{color:#fff}.btn span.spinner-border{margin-right:.5rem}.radar-spinner,.radar-spinner *{box-sizing:border-box}.radar-spinner{height:60px;width:60px;position:relative}.radar-spinner .circle{position:absolute;height:100%;width:100%;top:0;left:0;animation:radar-spinner-animation 2s infinite}.radar-spinner .circle:nth-child(1){padding:calc(60px*5*2*0/110);animation-delay:300ms}.radar-spinner .circle:nth-child(2){padding:calc(60px*5*2*1/110);animation-delay:300ms}.radar-spinner .circle:nth-child(3){padding:calc(60px*5*2*2/110);animation-delay:300ms}.radar-spinner .circle:nth-child(4){padding:calc(60px*5*2*3/110);animation-delay:0ms}.radar-spinner .circle-inner,.radar-spinner .circle-inner-container{height:100%;width:100%;border-radius:50%;border:calc(60px*5/110) solid transparent}.radar-spinner .circle-inner{border-left-color:var(--secondary,#ff1d5e);border-right-color:var(--secondary,#ff1d5e)}@keyframes radar-spinner-animation{50%{transform:rotate(180deg)}100%{transform:rotate(0deg)}} diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/index.html b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/index.html index 040839999f..f843ac7b81 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/index.html +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/index.html @@ -8,7 +8,7 @@ - + @@ -22,7 +22,7 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyCompanyName.MyProjectName.Blazor.Server.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyCompanyName.MyProjectName.Blazor.Server.Host.csproj index c0aa9ba822..383fb4a1e2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyCompanyName.MyProjectName.Blazor.Server.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyCompanyName.MyProjectName.Blazor.Server.Host.csproj @@ -12,8 +12,8 @@ - - + + From 085021234326dd08f791445786646057c600b6e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20=C3=87A=C4=9EDA=C5=9E?= Date: Fri, 13 May 2022 08:55:57 +0300 Subject: [PATCH 261/272] added --prerelease parameter to dotnet add command --- docs/en/Themes/LeptonXLite/mvc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Themes/LeptonXLite/mvc.md b/docs/en/Themes/LeptonXLite/mvc.md index b7260d56d9..b264e0201d 100644 --- a/docs/en/Themes/LeptonXLite/mvc.md +++ b/docs/en/Themes/LeptonXLite/mvc.md @@ -10,7 +10,7 @@ LeptonX Lite has implementation for the ABP Framework Razor Pages. It's a simpli - Add **Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite** package to your **Web** application. ```bash -dotnet add package Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite +dotnet add package Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite --prerelease ``` - Make sure the old theme is removed and LeptonX is added in your Module class. From 6797665af6ef7732a7ead1fb5a34c5ab913d00bd Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 13 May 2022 16:34:32 +0800 Subject: [PATCH 262/272] Output warning when `actionApiDescriptionModel is null`. --- .../Web/Conventions/AbpHttpClientProxyServiceConvention.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs b/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs index 9650377580..08dab1fc82 100644 --- a/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs +++ b/framework/src/Volo.Abp.Http.Client.Web/Volo/Abp/Http/Client/Web/Conventions/AbpHttpClientProxyServiceConvention.cs @@ -6,6 +6,7 @@ using System.Reflection; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ActionConstraints; using Microsoft.AspNetCore.Mvc.ApplicationModels; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Volo.Abp.Application.Services; using Volo.Abp.AspNetCore.Mvc; @@ -122,6 +123,7 @@ public class AbpHttpClientProxyServiceConvention : AbpServiceConvention var actionApiDescriptionModel = FindActionApiDescriptionModel(controller, action); if (actionApiDescriptionModel == null) { + Logger.LogWarning($"Could not find ApiDescriptionModel for action: {action.ActionName} in controller: {controller.ControllerName}, May be the generate-proxy.json is not up to date."); return;; } From d7f3c93b9987dac96018fc92aa697e8bcb7ecae0 Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 13 May 2022 11:36:43 +0300 Subject: [PATCH 263/272] CmsKit - Update csharp proxies --- .../BlogPostAdminClientProxy.Generated.cs | 16 +- .../cms-kit-admin-generate-proxy.json | 224 ++++++++++++++++++ .../cms-kit-common-generate-proxy.json | 4 + 3 files changed, 236 insertions(+), 8 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 974d0a279b..ba54e8e334 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -55,20 +55,20 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase CreateAndSendToReviewAsync(CreateBlogPostDto input) { return await RequestAsync(nameof(CreateAndSendToReviewAsync), new ClientProxyRequestTypeValue @@ -95,7 +95,7 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase HasBlogPostWaitingForReviewAsync() { return await RequestAsync(nameof(HasBlogPostWaitingForReviewAsync)); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json index 1a2814324d..0e93081b39 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json @@ -1941,6 +1941,30 @@ "bindingSourceId": "ModelBinding", "descriptorName": "input" }, + { + "nameOnMethod": "input", + "name": "AuthorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Status", + "jsonName": null, + "type": "Volo.CmsKit.Blogs.BlogPostStatus?", + "typeSimple": "Volo.CmsKit.Blogs.BlogPostStatus?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { "nameOnMethod": "input", "name": "Sorting", @@ -2041,6 +2065,206 @@ }, "allowAnonymous": false, "implementFrom": "Volo.Abp.Application.Services.IUpdateAppService" + }, + "PublishAsyncById": { + "uniqueName": "PublishAsyncById", + "name": "PublishAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}/publish", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + }, + "DraftAsyncById": { + "uniqueName": "DraftAsyncById", + "name": "DraftAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}/draft", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + }, + "CreateAndPublishAsyncByInput": { + "uniqueName": "CreateAndPublishAsyncByInput", + "name": "CreateAndPublishAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts/create-and-publish", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + }, + "SendToReviewAsyncById": { + "uniqueName": "SendToReviewAsyncById", + "name": "SendToReviewAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}/send-to-review", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + }, + "CreateAndSendToReviewAsyncByInput": { + "uniqueName": "CreateAndSendToReviewAsyncByInput", + "name": "CreateAndSendToReviewAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts/create-and-send-to-review", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + }, + "HasBlogPostWaitingForReviewAsync": { + "uniqueName": "HasBlogPostWaitingForReviewAsync", + "name": "HasBlogPostWaitingForReviewAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs/blog-posts/has-blogpost-waiting-for-review", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/cms-kit-common-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/cms-kit-common-generate-proxy.json index ba052dc973..6b7b45220a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/cms-kit-common-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/cms-kit-common-generate-proxy.json @@ -7,6 +7,8 @@ "Volo.CmsKit.MediaDescriptors.MediaDescriptorController": { "controllerName": "MediaDescriptor", "controllerGroupName": "MediaDescriptor", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.MediaDescriptors.MediaDescriptorController", "interfaces": [ { @@ -56,6 +58,8 @@ "Volo.CmsKit.Blogs.BlogFeatureController": { "controllerName": "BlogFeature", "controllerGroupName": "BlogFeature", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Blogs.BlogFeatureController", "interfaces": [ { From 3178a3fdef2792f58503e6fa967055e53822d46e Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 13 May 2022 11:38:29 +0300 Subject: [PATCH 264/272] CmsKit - Update js proxies --- .../wwwroot/client-proxies/cms-kit-proxy.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/wwwroot/client-proxies/cms-kit-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/wwwroot/client-proxies/cms-kit-proxy.js index 6b2e3f1b04..e1cdae5ec3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/wwwroot/client-proxies/cms-kit-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/wwwroot/client-proxies/cms-kit-proxy.js @@ -188,7 +188,21 @@ volo.cmsKit.public.blogs.blogPostPublic.getList = function(blogSlug, input, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-public/blog-posts/' + blogSlug + '' + abp.utils.buildQueryString([{ name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }, { name: 'sorting', value: input.sorting }]) + '', + url: abp.appPath + 'api/cms-kit-public/blog-posts/' + blogSlug + '' + abp.utils.buildQueryString([{ name: 'authorId', value: input.authorId }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '', + type: 'GET' + }, ajaxParams)); + }; + + volo.cmsKit.public.blogs.blogPostPublic.getAuthorsHasBlogPosts = function(input, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-public/blog-posts/authors' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '', + type: 'GET' + }, ajaxParams)); + }; + + volo.cmsKit.public.blogs.blogPostPublic.getAuthorHasBlogPost = function(id, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-public/blog-posts/authors/' + id + '', type: 'GET' }, ajaxParams)); }; From 57af11f10f2bc8f870c917ff9eeb3bac4548e935 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Fri, 13 May 2022 11:50:28 +0300 Subject: [PATCH 265/272] Create 5.3 Migration Guide --- docs/en/Migration-Guides/Abp-5_3.md | 7 +++++++ docs/en/Migration-Guides/Index.md | 1 + 2 files changed, 8 insertions(+) create mode 100644 docs/en/Migration-Guides/Abp-5_3.md diff --git a/docs/en/Migration-Guides/Abp-5_3.md b/docs/en/Migration-Guides/Abp-5_3.md new file mode 100644 index 0000000000..8646727d90 --- /dev/null +++ b/docs/en/Migration-Guides/Abp-5_3.md @@ -0,0 +1,7 @@ +# ABP Version 5.3 Migration Guide + +This document is a guide for upgrading ABP v5.2 solutions to ABP v5.3. There is a change in this version that may effect your applications, please read it carefully and apply the necessary changes to your application. + +## AutoMapper Upgraded to v11.0.1 + +AutoMapper library upgraded to **v11.0.1** in this version. So, you need to change your project's target SDK that use the **AutoMapper** library (typically your `*.Application` project). You can change it from `netstandard2.0` to `netstandard2.1` or `net6` if needed. Please see [#12189](https://github.com/abpframework/abp/pull/12189) for more info. \ No newline at end of file diff --git a/docs/en/Migration-Guides/Index.md b/docs/en/Migration-Guides/Index.md index 17e4d70dd8..c24ac09eee 100644 --- a/docs/en/Migration-Guides/Index.md +++ b/docs/en/Migration-Guides/Index.md @@ -2,6 +2,7 @@ The following documents explain how to migrate your existing ABP applications. We write migration documents only if you need to take an action while upgrading your solution. Otherwise, you can easily upgrade your solution using the [abp update command](../Upgrading.md). +- [5.2 to 5.3](Abp-5_3.md) - [5.1 to 5.2](Abp-5_2.md) - [4.x to 5.0](Abp-5_0.md) - [4.2 to 4.3](Abp-4_3.md) From 71318b90471d7b8ded6b278bf90ef6439675002a Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 13 May 2022 12:17:16 +0300 Subject: [PATCH 266/272] Update LeptonX Documentations according to @hikalkan 's feedbacks --- docs/en/Themes/LeptonXLite/blazor.md | 23 ++++++++++++++++++++--- docs/en/Themes/LeptonXLite/mvc.md | 11 +++++++++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/docs/en/Themes/LeptonXLite/blazor.md b/docs/en/Themes/LeptonXLite/blazor.md index ddea346585..f37c94a632 100644 --- a/docs/en/Themes/LeptonXLite/blazor.md +++ b/docs/en/Themes/LeptonXLite/blazor.md @@ -23,12 +23,17 @@ LeptonX Lite has implementation for the ABP Framework Blazor WebAssembly & Blazo dotnet add package Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme ``` +- Remmove **Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme** reference from the project since it's not necessary after switching to LeptonX Lite. + - Remove the old theme from the **DependsOn** attribute in your module class and add the **AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeModule** type to the **DependsOn** attribute. ```diff [DependsOn( + // Remove BasicTheme module from DependsOn attribute - typeof(AbpAspNetCoreComponentsWebAssemblyBasicThemeModule), -+ typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeModule) + + // Add LeptonX Lite module to DependsOn attribute ++ typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeModule), )] ``` @@ -53,19 +58,27 @@ builder.RootComponents.Add("#ApplicationContainer"); dotnet add package Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme ``` -- Remove old theme from the **DependsOn** attribute in your module class and add the **AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeModule** type to the **DependsOn** attribute. +- Remmove **Volo.Abp.AspNetCore.Components.Server.BasicTheme** reference from the project since it's not necessary after switching to LeptonX Lite. + + +- Remove old theme from the **DependsOn** attribute in your module class and add the **AbpAspNetCoreComponentsServerLeptonXLiteThemeModule** type to the **DependsOn** attribute. ```diff [DependsOn( + // Remove BasicTheme module from DependsOn attribute - typeof(AbpAspNetCoreComponentsServerBasicThemeModule), + + // Add LeptonX Lite module to DependsOn attribute + typeof(AbpAspNetCoreComponentsServerLeptonXLiteThemeModule) )] ``` -- Update AbpBundlingOptions +- Replace BlazorBasicThemeBundles with BlazorLeptonXLiteThemeBundles in AbpBundlingOptions ```diff options.StyleBundles.Configure( + // Remove following line - BlazorBasicThemeBundles.Styles.Global, + // Add following line instead + BlazorLeptonXLiteThemeBundles.Styles.Global, bundle => { @@ -84,12 +97,16 @@ builder.RootComponents.Add("#ApplicationContainer"); ``` - Then replace script & style bundles as following: ```diff + // Remove following line - + // Add following line instead + ``` ```diff + // Remove following line - + // Add following line instead + ``` diff --git a/docs/en/Themes/LeptonXLite/mvc.md b/docs/en/Themes/LeptonXLite/mvc.md index b264e0201d..5c2c515613 100644 --- a/docs/en/Themes/LeptonXLite/mvc.md +++ b/docs/en/Themes/LeptonXLite/mvc.md @@ -13,22 +13,29 @@ LeptonX Lite has implementation for the ABP Framework Razor Pages. It's a simpli dotnet add package Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite --prerelease ``` +- Remove **Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic** reference from the project since it's not necessary after switching to LeptonX Lite. + - Make sure the old theme is removed and LeptonX is added in your Module class. ```diff [DependsOn( + // Remove BasicTheme module from DependsOn attribute - typeof(AbpAspNetCoreMvcUiBasicThemeModule), -+ typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule) + + // Add LeptonX Lite module to DependsOn attribute ++ typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), )] ``` -- Update AbpBundlingOptions +- Replace `BasicThemeBundles` with `LeptonXLiteThemeBundles` in AbpBundlingOptions ```diff Configure(options => { options.StyleBundles.Configure( + // Remove following line - BasicThemeBundles.Styles.Global, + // Add following line instead + LeptonXLiteThemeBundles.Styles.Global bundle => { From 3f841ba55edd8fdef4a3cea7250e154458b1b79d Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Fri, 13 May 2022 12:53:02 +0300 Subject: [PATCH 267/272] Update Abp-5_3.md --- docs/en/Migration-Guides/Abp-5_3.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/en/Migration-Guides/Abp-5_3.md b/docs/en/Migration-Guides/Abp-5_3.md index 8646727d90..acc69504f0 100644 --- a/docs/en/Migration-Guides/Abp-5_3.md +++ b/docs/en/Migration-Guides/Abp-5_3.md @@ -4,4 +4,8 @@ This document is a guide for upgrading ABP v5.2 solutions to ABP v5.3. There is ## AutoMapper Upgraded to v11.0.1 -AutoMapper library upgraded to **v11.0.1** in this version. So, you need to change your project's target SDK that use the **AutoMapper** library (typically your `*.Application` project). You can change it from `netstandard2.0` to `netstandard2.1` or `net6` if needed. Please see [#12189](https://github.com/abpframework/abp/pull/12189) for more info. \ No newline at end of file +AutoMapper library upgraded to **v11.0.1** in this version. So, you need to change your project's target SDK that use the **AutoMapper** library (typically your `*.Application` project). You can change it from `netstandard2.0` to `netstandard2.1` or `net6` if needed. Please see [#12189](https://github.com/abpframework/abp/pull/12189) for more info. + +## See Also + +* [Official blog post for the 5.3 release](https://blog.abp.io/abp/ABP.IO-Platform-5.3-RC-Has-Been-Published) From 21e684733b336bb3dde618849e7b3713156a579a Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 13 May 2022 17:57:34 +0800 Subject: [PATCH 268/272] Check the `ReturnUrl` on `Manage` page. --- .../Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs | 2 +- .../Pages/Account/Manage.cshtml.cs | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs index 8992ef062a..ff1db3a772 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs @@ -45,7 +45,7 @@ public class AppUrlProvider : IAppUrlProvider, ITransientDependency public bool IsRedirectAllowedUrl(string url) { - var allow = Options.RedirectAllowedUrls.Any(url.StartsWith); + var allow = Options.RedirectAllowedUrls.Any(x => url.StartsWith(x, StringComparison.CurrentCultureIgnoreCase)); if (!allow) { Logger.LogError($"Invalid RedirectUrl: {url}, Use {nameof(AppUrlProvider)} to configure it!"); diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs index 48729aba46..746992822c 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs @@ -1,5 +1,7 @@ -using System.ComponentModel.DataAnnotations; +using System; +using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; +using Microsoft.AspNetCore.Http.Extensions; using Volo.Abp.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; @@ -32,6 +34,13 @@ public class ManageModel : AccountPageModel await contributor.ConfigureAsync(ProfileManagementPageCreationContext); } + if (!Url.IsLocalUrl(ReturnUrl) && + !ReturnUrl.StartsWith(UriHelper.BuildAbsolute(Request.Scheme, Request.Host, Request.PathBase).RemovePostFix("/")) && + !AppUrlProvider.IsRedirectAllowedUrl(ReturnUrl)) + { + ReturnUrl = null; + } + return Page(); } From 4bdeb40a4889733b676e91269f285f4cb64b0ba2 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Fri, 13 May 2022 13:59:11 +0300 Subject: [PATCH 269/272] Update blazor.md --- docs/en/Themes/LeptonXLite/blazor.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/Themes/LeptonXLite/blazor.md b/docs/en/Themes/LeptonXLite/blazor.md index f37c94a632..7bc374746a 100644 --- a/docs/en/Themes/LeptonXLite/blazor.md +++ b/docs/en/Themes/LeptonXLite/blazor.md @@ -23,7 +23,7 @@ LeptonX Lite has implementation for the ABP Framework Blazor WebAssembly & Blazo dotnet add package Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme ``` -- Remmove **Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme** reference from the project since it's not necessary after switching to LeptonX Lite. +- Remove **Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme** reference from the project since it's not necessary after switching to LeptonX Lite. - Remove the old theme from the **DependsOn** attribute in your module class and add the **AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeModule** type to the **DependsOn** attribute. @@ -58,7 +58,7 @@ builder.RootComponents.Add("#ApplicationContainer"); dotnet add package Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme ``` -- Remmove **Volo.Abp.AspNetCore.Components.Server.BasicTheme** reference from the project since it's not necessary after switching to LeptonX Lite. +- Remove **Volo.Abp.AspNetCore.Components.Server.BasicTheme** reference from the project since it's not necessary after switching to LeptonX Lite. - Remove old theme from the **DependsOn** attribute in your module class and add the **AbpAspNetCoreComponentsServerLeptonXLiteThemeModule** type to the **DependsOn** attribute. @@ -73,7 +73,7 @@ builder.RootComponents.Add("#ApplicationContainer"); )] ``` -- Replace BlazorBasicThemeBundles with BlazorLeptonXLiteThemeBundles in AbpBundlingOptions +- Replace `BlazorBasicThemeBundles` with `BlazorLeptonXLiteThemeBundles` in `AbpBundlingOptions`: ```diff options.StyleBundles.Configure( // Remove following line From 5073616e69e9ab7c73e4d675187802297a9d5fd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 15 May 2022 20:29:29 +0300 Subject: [PATCH 270/272] Update Road-Map.md --- docs/en/Road-Map.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/en/Road-Map.md b/docs/en/Road-Map.md index e7aa25fb0a..55a99be8b7 100644 --- a/docs/en/Road-Map.md +++ b/docs/en/Road-Map.md @@ -4,15 +4,18 @@ This document provides a road map, release schedule and planned features for the ## Next Versions -### v5.3 +### v5.4 -In [5.3 milestone](https://github.com/abpframework/abp/milestone/65), we will be mostly working on the following topics: +In [5.4 milestone](https://github.com/abpframework/abp/milestone/67), we will be mostly working on the following topics: +* Providing an OpenIddict integration to replace current IdentityServer4 integration. * Maturing and documenting the [eShopOnAbp](https://github.com/abpframework/eShopOnAbp) project, writing a free e-book that explains the solution. * Working on the [LeptonX](https://blog.abp.io/abp/LeptonX-Theme-for-ABP-Framework-Alpha-Release) theme and making it as the default theme for the ABP Framework UI options. -* Working on more examples and guides. +* Improvements on the existing features and providing more guides. -The planned release date for v5.3 is **May, 2022**. +The planned release date for v5.4 is **July, 2022**. + +> After the version 5.4, we will be working for 6.0 which will be released in the end of 2022 based on .NET 7.0. ## Backlog Items @@ -20,8 +23,8 @@ The *Next Versions* section above shows the main focus of the planned versions. Here, a list of major items in the backlog we are considering to work on in the next versions. -* [#7221](https://github.com/abpframework/abp/issues/7221) / Alternative to IdentityServer4 * [#2183](https://github.com/abpframework/abp/issues/2183) / Dapr integration +* [#6655](https://github.com/abpframework/abp/pull/6655) / Use Typescript for the MVC UI * [#236](https://github.com/abpframework/abp/issues/236) / Resource based authorization system * [#2882](https://github.com/abpframework/abp/issues/2882) / Providing a gRPC integration infrastructure (while it is [already possible](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) to create or consume gRPC endpoints for your application, we plan to create endpoints for the [standard application modules](https://docs.abp.io/en/abp/latest/Modules/Index)) * [#1754](https://github.com/abpframework/abp/issues/1754) / Multi-lingual entities @@ -31,7 +34,6 @@ Here, a list of major items in the backlog we are considering to work on in the * [#4223](https://github.com/abpframework/abp/issues/4223) / WebHook system * [#162](https://github.com/abpframework/abp/issues/162) / Azure ElasticDB Integration for multitenancy * [#2296](https://github.com/abpframework/abp/issues/2296) / Feature toggling infrastructure -* [#6655](https://github.com/abpframework/abp/pull/6655) / Use Typescript for the MVC UI You can always check the milestone planning and the prioritized backlog issues on [the GitHub repository](https://github.com/abpframework/abp/milestones) for a detailed road map. The backlog items are subject to change. We are adding new items and changing priorities based on the community feedbacks and goals of the project. From fa242e4f27793da2732ce37c3be67caaa06d02c7 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 16 May 2022 11:51:51 +0800 Subject: [PATCH 271/272] Make `UserEto ` class inherit `IHasExtraProperties`. https://support.abp.io/QA/Questions/3087/IDistrbitued-EventHandler-for-UserEto-does-not-have-My-cutom-Properties --- .../Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserEto.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserEto.cs b/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserEto.cs index f6289f8584..6bcbe5e655 100644 --- a/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserEto.cs +++ b/modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserEto.cs @@ -1,10 +1,11 @@ using System; +using Volo.Abp.Data; using Volo.Abp.EventBus; namespace Volo.Abp.Users; [EventName("Volo.Abp.Users.User")] -public class UserEto : IUserData +public class UserEto : IUserData, IHasExtraProperties { public Guid Id { get; set; } @@ -23,4 +24,6 @@ public class UserEto : IUserData public string PhoneNumber { get; set; } public bool PhoneNumberConfirmed { get; set; } + + public ExtraPropertyDictionary ExtraProperties { get; set; } } From a0529a0431a5b00172a0c28b516f9973bf3a6f02 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 16 May 2022 15:46:14 +0800 Subject: [PATCH 272/272] Fix the problem of `ValueObject` return value. https://github.com/abpframework/abp/pull/12510 --- .../Volo/Abp/Domain/Values/ValueObject.cs | 2 +- .../Volo/Abp/Domain/Values/EmailAddress.cs | 25 +++++++++++++++++++ .../Abp/Domain/Values/ValueObject_Tests.cs | 5 ++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/EmailAddress.cs diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs index ff6fef3def..4c9dab3487 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs @@ -44,6 +44,6 @@ public abstract class ValueObject } } - return !thisValues.MoveNext() && !otherValues.MoveNext(); + return !thisMoveNext && !otherMoveNext; } } diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/EmailAddress.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/EmailAddress.cs new file mode 100644 index 0000000000..68a12326c4 --- /dev/null +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/EmailAddress.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; + +namespace Volo.Abp.Domain.Values; + +public class EmailAddress : ValueObject +{ + public string Email { get; } + + private EmailAddress() + { + } + + public EmailAddress(string email) + { + Email = email; + } + + protected override IEnumerable GetAtomicValues() + { + if (Email != null) + { + yield return Email; + } + } +} diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs index 144d4350d3..11b2581437 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs @@ -31,5 +31,10 @@ public class ValueObject_Tests address2 = new Address(cityId, "Baris Manco", 42, "home"); address1.ValueEquals(address2).ShouldBeFalse(); + + var emailAddress1 = new EmailAddress("test@abp.io"); + var emailAddress2 = new EmailAddress(null); + + emailAddress1.ValueEquals(emailAddress2).ShouldBeFalse(); } }

    ZSIv(Tb?D;e3(4t3^E^YcW>eQ-1599&lNR>GX zB@3->`!?>}x_9&L?fWquIrQk#r&G5I_j=p7+U0KV&i%Xh z@N>t>G+h6)%o}%kUxIC!KGa*~1Td5urpC2+j5(jDZR|D4~TKdMKia zD!M46jq*k#q&4QqBacN|dMT!vYI&L?G+t=@Mfe_FmI zS%;I%@ud?^9I>mbz54$8E3m;DvFj1J_BqES9n$6~v&}mDEVR)|J1w=kBe*y2xGA~intLv~=}x6;l=TVQE38@iH!GK2&T%Ui`Bt$nzy13AFTeo{JTSop z8+@?A`C@U#y$LDH&~E=oJTb);TYNFb8Ed>T#~pk8F~}i{JTl28n|w0LDXY9P%PqV7 zGR!f{JTuKT+k7+5IqR(QwLSaH?6;JvJ2cTn8%-p3p(;Hp)1;bLDymVZ$1Z*E`WkP4 zGD!xYEM3bo3D{waJvP~8n|(IgX{)_9+iipGwL%_39P!R|+kH3QdF#D5-+lZ2H{gK_ zJ~-ip|MN5AiT)cJF5^KrKJKJZ37w-T&~0x8c3}{yXr&3qL&Z#T$P-@_{S9Jo7DP`#e$IO7A%J zkJCu`=Gkk%{n1G`{rz{LyE{6SrO$i%)~M&cKKt#v|33Wj%RfK;>!-i|IJ#8^?f!wMd1g$5*>-C6x7Q7$^Hzhvuk&Xz7!BW<4a=#Ih zu!JT&AqrEd!WFWxgu)>p3}Yz68Pc$ZHoPGYWrn~V^3XU9gkA)LxD?1`u!u%HVskpR zv?YSi{yQ7wVEH__A9?kpg;u;G7PF|uWfdofUi=~$!zjivlCg|7>meG`*qaHmQHXAA zqojy9IXNP+j&`i$6QP(NDT2^+YD|**%N^DCW^=KdSF%nUTJS8eqsmfKdvXvDpB`jk(6G_stmbR26B^6l7 zAL{awY>XWCIw{Oyk}H&=EDR}Ya=T?Rvzg9(CN!fd&1q7zn%2A~HnXYCZE~}l-uxyw z!zs>jlCzxVJSRHSsm^t>vz_jICp_aR&w0|bb+@EtE`R9DHv+SQ#QY~fyXQIYg)ayG zcY#vXjyXy`#_D{sgpn&FD$$8jw4xRr-a|90(UaVBmz3NmNHGb=er8f~CJkmlQ>s$2 z7*nBwN#;gfbkUj8w5B$_DNaWg)1C5kBOU!IP=gxDe124=`4g*;od) zvtvC9Vb5Av(f*Q-Y4xXKQ;R9aI`v9tdhBLJgxT5Bwzjstt;AxhTSa=dx4!=Ms#r-| zz0<0;xEExtOZD>uG{N?T6N?DN{EFM@Qn$L+rRi?7i^kt_x4VHIEHA@bRN=<4q{cn( zkC3ZS#9&D?e$3xfW*4$F%5 zn3x~<;Kj`ij*#Qa;~@K(%+cN0kH;*s8xMInNq#e&<1FWvF}cpyg8nj|^NdfjikHtL zo^pw=jMyx5P)tDJ@{2MtaAZ#N;a>SlGe1|-HO}p$DXr=GTAI;|o-?RJE$UHY z+RmnqmY!3cYAOF2T*MVLtXbMtgo+NXe`)cdyNo7911HRwo^hr#J!wcgI@r(^GpCdN zYeob6!K8jRw4+_&Q&am{s=l^wSq%-o%bE8%v zEicYr9d->m{H+oHIpp{9!G^lo(;m0G<$L^gr8m9qkG?y``7Zj=lRk!jKfQ|tulm*h zm+)Q>^x}&)c2|}C=R@GjzKU2c z{po*rsD8fw>qo2j*q3GYRjPfv_YsZvO$qn~fnPus-bq-;EgkT|U9l+}@3Ei8JspwJp9NkZ2IkED zZJ>zkp9gN8>lvO1me$w(U$_OJR1Dy&NL=LA2Lf_nO=O@9&L9o03=H1jaeSZ-?%;1} z+lXx+3aW()8V30B#Z!r&gW+II)F2Z!p%WsV5=P-~@E{ddVGmj#&H3QX0in(f;bE|# z?Tyb1N})?Up&6cG6Oy4C?uHe%p&Mr52y$T%LWdW=6c|RyOCjOVtzk-_p&$OC1@fUF z*2Wta;_8K<|BYb6CERJ9AOJ2^9X{0^8sPq5jNu@j1R!RjCYIhMc4AK$A}EHUhan=M z$svkGq7f7z#NC=6dg4lKA}q!t)wv=q-h?RLA}-p}0!A_@LqCq?2U8sTBI zVl85#EG{E6?prcGV@%|tG)`k!9b6)s;2fqv9g0ch;bC0m-uOYIM>HcjmSd=iBRZ}G zHLjx}ju$Y#Bjb1*>=D@Icp*1No-ux7+9hE+ZiG4hBS0QmKMrI`u%kg9WN&FCrC#3BF7~1p_8&Z!U_W(V<0aJhb))Uk9!uUO1Jp(|QletQrDTpKX_lsGp61_KrfQOpRhju84 zW{Y-?=z*4~e4=G3Y9oFc#)IbPTc#(5#;Azb_9Yw+ zDWtfj8#R@Aj*frUD3dm+lRjxWeyEg!D2ei@j{+%{QYMO?)oHaV{frnjY#> zZYhm~(wjmk`7G)FokpspPAa8x7NHI*re5lY8Y-vWsHavbqK0as^4Sv=prbyjoK~u; zt}3gxs?TU>pY~~{&Z?$$Scs zyvD1%;zYTUtG(8%xq_;`-s+X2tG~J-yO>=!=Hq&~>%1N;!X~W3dc?OjtixvOpGGXW z;_JP3YQO#~#_pi1RNUF&qphW)!7i-Gjx5O@EXCrh#qz7l@@U4ktVb4AeDr`1_(0IP z<;MbR$>#p7&hD(MKCI9FEYLQr#ER?5-s_a6tji{?XT=8($ZX9LY-5Ei&rU7XRxOzl zt%u60(H1S&Zf(Wp>&k+y(vEFM*~MKr?b$(X)QYCnwyoQ~ZIcGA+|Dhx4lS&DZP$t| z+3xLc34{)uEzRo1$L1m1!mZ&RF5&`c-r{Yc>g~RED&Iz~#tsDF0)g7v8qOxJ=58+M zjwaoHF6f4C=-REsE-u$XuH^ox-=6Ic7@&(5Y~gmU?9MLjCMDM1?%k3uTA@30?uk(hl z`2LRXnfk8zS}(aGt>fNm_O@>=Z7;38Zo7gn`PQ%f-Y>vOum0{Y|Bi0Bo^SdFulpV( zD!!=Dl_q2+umYbF{whlU{w($8?*Hm8`c^Oimn)7oF7N{H0Ow)>f1lLOd*mV$As%z&BvUdf)7Sf@awQM4E59-< zW3dEpvK)ulSu-{d2MKh5o_cehf^#>2GdUBpIiEA#Qm`@;F(TV?U`cZ&mhwhw^ETIW z8qu>o`vxo@b0+sQEwA%3Z)z=rsyhShih6JIhVd@1ay~coAK|k@>jpYcG(}gm^s4he z*K!gcwD)GN2s3mQtUa}$2@q9w{_u6!{09i}W^6*sV`?0;H3!FZUP3l2QnRB_HcMD`<&8Gn(Zpuo z^-XY0j}fES1NC%QH+5gPb!Rtq7d3YiwRip>^>?$jcv~?>bFyP& zsct8qOh(n{qR^d+RrJPpEwN_epGZ2@E(_6S#nb^?@fi zf-ks&A9!j%I9OBkN}F|BSNPV}wh?o&TR&2I%QYY&ACP(W0)F0q!$f?iABy*$12SNc z4JG<1V2ZbR`;EAWuiq-;_XOH_@Dbn9ft=+npaeP~1lpU8wHbh$GJhXAPK0-N8}?9- zHd40|vtzfjH#@XH`*t%qwSzZ!Gdi{p zGLXhL#w*3=lH!Vdq0A?!gIucKRm=oyu=H*fmi&Y8#=~cyn{zL$7j2v zQ#eyky2!)uOWQVXV|sULx@1F3h}Ye`&H8)e{)W1{+r9U?yW@NN$tA%Lcfc1Ny#M&C z>$Upr_|F@=yVtw9>-?&N^v%b5!sC3yLnFgSeMUsP)l0ikXMK}veYSVK*IRPP!?Bge zoXW5FWFLLf-#N@r{co2#o<|_CZ#lfJxce;~&(q!SQFg-P_t3jIxd%PKw>jOP-y=7D z&(r+DQ@zxqyW*?F#7lgEQ@rG7JmqUV$1A#Of4%0{E$4$gGMDabqjjajv`k}fo|Qf2 zRg2ss{;#{A(X;(4y1mH3J)A2&)So-;KfST_`1uw6s_*;kt9hQUIMBa(?ic*~75}a$ z{_QuuC&Iq-OGF0%_4Idh^-n+bXaCjyZ$H*|Klgt>c5l7-SNoH1zWH}6V~hQ5*YUUC zY?c?w>eKt-w?6LIHCFQQ<&qYCl0|_EDxUk?rh7KLNP#6)S zz=aVR9z;m6p~Z|7J!-UwQKH9+95a?gc`;ve63v~S(U zg*#VnUAiRjy3LFCEnmNX0S6X5m@wWDfe#zzo0tS+$BP?BK0H}+Wy+T=XU4o)b7#(< zHHX+Nx-n_dlTD{aeOfhZ*RTFz$Cf>tc5U0YU*pKJgNF|wL52_^VuW~c zkRU*O@Ys<92UqJ*qqyZQ4pqrTq= z-XwbQEbC+MJpf%IP^AJ>s!u%w6^v=6@gR&)!U-v?(83Eb%+RRxH0;pB4?zr3#G6X! zpu`hROc6yCNl3B95?}0~#TjL+k;WTs#7jmU`Py+t9)bK($ij#$(#Ru`Oj5}unQYR@ zC!vhe$j1~@474jfD{VC`wZtt1-FWj2IN_En)66rCXzsb_rmJqm>l9p2PVeaSj-&7% z43R?w`J)d&`m&1;zW(zDy|ceV|4eYegG91VyZr|3uFj7BEcB!JrSmcpO7P*6yQ7-Xhl~Y_9-GrI~Je{^@3^jruceyY*H!aK#+g+^x?#;|*`Ruvx9(xpBUQxyI#V?yhCk_|QLo?r`|;0TO4euZ|1#jmL@weDkT_mbmz%toKu@(RZ6y;J^BSl?2~LoL z6|^A!;4YX!4U&v=9rU2)K9{RpjgEw*`<1Xxr#}_0P-&`zOzZgf7|J}0cK)+r4WmUh z(g09v1SFsVlea)A6%m~nMJaLxWmUA|6|tB_EpCx!U7Xn$ zWfsPo(X4%Cbe|c~c*ghPOnz;o9}D3a$EUr}bvT5U4p+lN;rWnwKm^+qD+fiL><5qq zE94;&nMg%8MUabhf|AQH^et zqaD>=1U(v33UZO8B{k_ut;jN!ri`Ut6eAh28Phb*RHkPf+BWCMO&|GXrv>%tPm46l z%|uk9=c4G>a4FIeWmKt6b?Q^0%1Dq#m8zE8=T)(q)z0zra{%?K2?Z)FpbF-ou0!Zq zGqcc!uJxf(!(%I3`K8^2D}Y7a+AXW9wyEZouYL9FUoi++!8#75g-vNom;Sj@Whz#h zjh*KCtf@Zr(Uh`86B^=+HGU3&=k~3{{p&MQ4ZjiOpwXRkS zn_ca0m%E0QSruOj#xaVwvgNI*d3knIo#vFifYEGl;TxsoDpxtoy>3;idtd$Tm%kg! zZ+`)d6x1$PpK-W;w%&00zs9+$#wtsN`pOJC&JH^3l!Zihh}ViAw( zzautrPP&_7EHakGh;8v>VeD8LLo>29n(TRxX4&>)HoiUf@vt(i{$b;A_{2jgagmXn zWF>Ft!%KE@S85w&+D>`4RfesBv7F@&B6zn8_A*~im%<;9d36vLs)S7$WFZ$&v_X8b zPoNiPInSBSb++@J@tkKp@0rhi_Vb?s9cV!hn$U$d^q~=*XhkoY(T#TWqanTMH&0q9 zDz@~cF^y@KRk6h`9WQ!u3~EuUcgO1u5>LsTY7(e<%|xd3t6?2$SY} z>$bPOE?t8M3f~78*UXhsYlYK1*R1Vv%^PmBMQa^xX-}Kl)t+{yv7K#_b~>>x_I8ZH z4cYYBIMn6N=4DOIV^ph}-Na(GkX>zUdC!~P^|p6(!=3N`8CzM({HF4iYpZL4QnEELGEdoic!?&HhCFIo!L?c z=DiFz(!=Q+@r%!#<~6tZ%_|7-u>^eJJ@@&~39eg%f0^iDHhQr0H|z+XdBPT+7R;3^ zbDU3|>Q%S;)iu^}t#6&v-d?QNyRC1r&p4VjwkBm$&f|2i+vROvwX%ap%VrPRctZff z52T}mq+*@#efRs{0WYDk51#Dh^Y`I(j(DIi{Yx>l@$TM(9q2vq zo%j6bK_B{{aGms}H@&tu4R)4=m*nI<`Rhxb-gEx1+>LB+d*$tVdFT8<^E$|Z=z$-6 z;Sb;MgnuUD`<-~@GoJa)zcrT+zTkv2oVZJm4DNG}PTupt_r&-9_rV|jd7qyA<o?(nWnbRY^yun3Lt2$8U!3~=xmunCtB0--Pp z1x^B^kGCoiocIU-@{gi=4+n7I25Nu?#Qty$$*>H~@C?x~4b^ZB*{}`W@D1TG4&`tT z>97v%@DA}X5A|>l`LGZD@DBko5Cw4%39%3j@emO)5fyO}8L<%^@ev_05+!jGDX|hQ z@e(od5LIv!IkCIYZ~Z{=#Sm~53Ge-GY^LOo_PVM5EU+-NP@?pYI&J_AYoHcw@fLA0 z7j{diLn@s@feXY8I^GvnXwt2@fo2p8l`a>sj(WZ@fxu)8?|v8 zxv?9)@f*Q09K~@Q$*~;G@f^`H9o2CivvB}b@7qW*9+yxa7trvOFZmo$3iUB_9IpzC z?h42370pTaf*=Te&kJWUAr*2V{u#0%9r7U|G9o2%A}O*WE%G8UG9xu|BRR4oJ@O+# zG9*QEBuTO)P4XmBG9^`VC0Vj1UGgPiGA3nmCTX%JZSp2@GADI%Cwa0bebOa6F(`#{ zC^_yExsCN|1_o(x2AQ%3)o#aZ4@m@aAnOi!e2+T3Fe|lkE4i{Oz49x;GAzY%EXlGg z&GIbKGA-3|E!i?FbKouEGA`wEF6pu^?eZ@1GB5RVFZr@B{qipXGcW~nFbT6T4f8M& zGcgr&F&VQl_p&SJvMnWZGQl!1Df2QhGcz@FGdZ&}J@Yd`Gc-kWG)c2GP4hHSGd0C> z9$Awf!OaQru>tpSHfeMIt3=43CXm6x?C9`kDyfnKc_8m};3^%nIF0i-kuy1wQwMgS zIi2%4p))$Ab2_QBI<50Mu`@fhb33`SJH7Ke!81I?b3DnjJk9ew(K9{Ob3L_lINkF- zo%22Ab3W;_KJD{9@iRa16FiAiIsNlL0W?4bbU+ETKn?Uj5i~&+bU_i5C>``cQP3#g z(H+6ZHQjIAni6PI@dmjmD&fdCYf1NjFgk*hJx%mPQ8YzWbVY;n2VC?;VKhc%bVg~k zMs4&)aWqGDbVqr#M}721fiy^kbV!M`NR9MJku*t_bV-?%M|&VRp)@#qzz3c*O0D!t zu{2AybW6FkOSS&g2ZEGDS9DCtv`o$POwlw=)pSkSv`yXgP2u!B%a7aW6dqgiPA$|P z$p@R8cimRdrQ|hX@K1Mi=$&nsioi6bOcZk6ab+ICWQfwO4)h zSAjKHg>_howOEbySdleZm33K}wOMx+LZLNUr8Ou&PUKwhT5%)>Gju6sP)86oQGYN9 zottQwO{@9Uja5?1$JNw zwqOnRVEz#{VHI{^8TMb5;0Wq&2%JM)CAMNM_F^$MV>NbTIksaxHaLzz2?+LKiGW9%g|_HOYuZ}oO>`L=KU_HO~VZk^x=3W#Dsl~oBy38G+cqd*DJ z$!j4uawT_iDYtSh_i`~eb2WE!Ik$5?_j5rvbVYY`Lw8zD_jJimLTxq_$LD5sb`;+a z{_SRuLs{|El;&uW_VPsZV|llCefM{PH+Y42c!{@ojkkE)6$_Mid6~C)o%ea6H+rRa zda1X1t@nDdH+!{rd%3rJz4v>;H+;o+e955s}jrfR>IEj^biJ7>Go%o5NIEtlsimAAYt@w(uIE%IZc#FBX zi@o@Ztr!cUAWbTEI6_tl&^V3Nc#YY(jotW-;W&=j*a@Nl3%s}rlpsxfc#rwGkNx#Q8|@Wd6ikYm0kIjVL6s%d6s8cj3G8+h2xCnc$ay(mwnj@P#FuHK#xhe zn2q_EkvW-_d6}8HnVtEWlNsAAn03EygEd%#6|iUdRD`)1Q2Q}AJsEMud7R0)oXy0P z&tMMJd7at0o!$AJ;W?h=d7kOHp6&Ub@j0LMd7t^YpZ)ot0Xm=sdZ7LZx}XjEpb`3? z&p?cwAdiXJ2tu}DCHh_KIHA?~460yo&3U6ax}!b%qd_{PMS7%3S_3Khq)~d3EqR(T zxTUXIvdHc1Hrb}0(pz_s*-AR6b$X|ZDrD2yqJcW7g?gxox~Pr%sF6CUm3pZUnxWnG zVIMl8Cz@d^I;aowR)?$x~skVtHGMSQd;9ydP2kQrO}!-v)O~S`N}}Jo2O9d zO1M|TIjrsauIbB^nR>7Jy088EuK_!-1$(fC`V68VUZMJjjX-3lI$;<0r-fRKp&G9# zyRt3&vN1ceHTz7)y0bm|vriY3u{9}OuPN(#vr#*zK~yZ*IZ`?X;^wq<*^Y5Srx zT3#Jmca6XW7`w3x_LPqr3zWbGQoFc~`?!%ixs_YP=G3fNI<2953D=ru**b*b`ns|E zw3mCkcUlRmptiv~yv2LG$-BJ68>8)&aCKX%eOqAb7_y7nunCvD>ASw|`@Zp;t3i9e z`8!(6`hr=iLao^VWB252I!xj&zZKlFk01)*+q@w>!Xa!+xuUE zJE;xZp%;9_NxZ~O{KUN#dUn{oB#_f{KtVj z$c22!2OA4++g=lU!+X2K`Srt<8ol3l$EAGAsl3XS{#(VdJj=CQ1&^`?v$foE+{(p# zfY6!9&HT*KJk8a7pV3=i^LV|NoXPREs`py5=X=cYJkRxf&p&$04-3En{KW+w0cE_c z+4`+*Jkcj9%=x_0jpGPdd(9<%(kZ>tExZa2dtY<=@;F@1>y^&=8lxxM(Mi43P5snU z+|N~g)%%;ppIg9T+!Sks(NP`GL)OPFJ=b-8*LhvAF`QpDoJ``})8*C4{aTo7J=v9g z*^`~sLEF`xyLDlF&=YWHXFP128+{rzl4Le|ioj8V_*xl9G z|60`VyxZk{-s!!>o&DbNJ>R2MX1KlHOB~Yv!M)rCe&7k7;M*Kvlbl>So!CJ=u%X=F zAwJ?I-njLB+oC09zn{CBUHqDJfH~=k2XnsG8$94ue(9OM=_ef14R*eDcj4Rn zv11#fqx|T#e(Sj&aeH3Np&jF0n%Xs9$~u_3J-)_4{wsza!85SyOYFVVcckIhEgE;w zv2C+s+qUhbVms;B>DabAwr$&X(jB8yIkmrUjJ?M`=k8pbeJ+0W54<&2)tv8K>sim7 zI|I1^w->#)Lmz8!oa;oB|Kz|7Yk zIpN1!-`8g#64>GQG#W*CJpM?Q!oe`9SR7J_h4I8N40_GjV2k+CI08POf3U12MD!#g_EfadYyi7Y-Q7#?10VgD7Nz1Tz=p8e{k#-^M&FucmmPvm5Zg^eBA!<997Ge z>eaeE(HzyQwfbE?pYWVD>kZ~pSpqSfH=2Ze0l@FL5ESFTBIU0(dt$ii4YL$~x0Aqe z|K1-6MZgz~di%NE~r$(bS8~=nMiZl*} zXBsySDbJ+P4TX0<%@iw;snEgDNI5MqL#bOeiX@AdHjSdni!_ZEcpEj1Vd{l7i)Eda zHj7h55WSJ(+lNAMR&_r+)FGA6f{?eePVp}|x zm_SJURQ+WdFJqZ$nHObg$5}UFne70?B5-j*;-YqSWAe1}@G%@a%L{mhqwx+7=c@2N zOqDY9yFP){l@%z11NopU43{Pv7)INaWjRdRl&ASuQl@GOsvn?Yhufk^68P{Y$(YE( z13>#hvVhv=o+vrBM&0%J1+V24hQ&)+`$W;n zIt`pb>q%fL^7}Xp+0YG?N=^Y?FVv4 zJDK{vyH2xq#j;>gH^e?f$%-#543mF-cbgYQw$GR$h~Tvilg#0zOcX_Uw4YT~QgB~E zoQri|)lFV;$i17r;&6L9m22&_$iKpNTdc7EF1nIYss2S$jz^eAz_vlD-cHg3;od6X+9wch`f+tv*~Ez?pOkH+LyObc`H=v2{X%DLJ?Xk|&|0IYo*y6qS>N z4i-D#nFWbOUY5O3w!Jw;tJj!DxJ9p~o!2^~O){t>%Cy4wfT2qwH&j@D$z z*$%cI=ALwpH`vreOO+<2QVk7KR>%3i1v@Sb&q|AbE=-DSGcHc%k{B&tq6Ysa%_!@V zl)?~$xArWc z&cOReFe=m$PKf6O&o)CE!;v|)Sk$yRUGk3&^3vyf9Mt|w)<9;8GLHHv1#%Xb>}Ee% zMpw95r)V|00XGd!Ld$70CfD3+J1ZHCQ~57O73p$_d0>&(tlwo*^wBjnB*+^!$Y&wl z{GWwLm=^y&)Pw)f_E|%b6dGx#YY|3jG2v0AfSN26`x3@M1OfcwuPjGM3dTwqIa}$Z zvd3R^CuMT@6XVj8%lYiJHuYGYB5P4@nkaGB5`pmQG0{lHGTp0I*E*t(4bJ8A_Lp0o zJWIN=z?E$EmP(C!_%s9f#~5Qa8bz*l_42gJazVr@ow?4wLbRv&_-HCsxz|F?X!kld zfmIo;Xswi9w|bTvfO>WGNkG5`(C7D2k z?S1&R(qRi)ql7Ij(CTT^G~tZA3}c&5VqhZOX0BDNfV3HdJff@@wI#i$xn z>%XVK0KBL4Z&{s)?eyVda1#?Lnta`3PqSMkq`(b#jagz&x=UOq-0IlM%&*KBQ8UaX z&o{GCRO>=417cYIcA%Mv=hbM0~@X!?E1Nbb-M7!j*w4KE< z)K4hBvgv=)Sj$y!_8L00RCoAU<11+|#Kkw)dUDtZO4+YS{zy&aLA*9*9$y0HpJrEb znKps%c|=0O(bwk_9%-?0uhJ=8kdx}z6YTkH@!b}+5Ed|F$3My z5QX1$Kt}tw!MW>i1_EINF>~hvBB6^;y59wDKJ8RK5oUVd_J)`iT!3TzQ;jFZ8SmNp zoY>$KCj#cF2J?qv!mh1t1kVLW-BV^Ek|)=M=M3LfT{b4VTT?aEk}mMBYmYDZtS*A? zNI zhZ&q(G_;1`pL>Y5bBM1qsz+Gxi3Q7#hp(N4DplYj(ctEVdrf2g)QyZtKMM2B@W4Hf z5RwkxwhaFx=@Gh$4OkD4I@fiCjlfn3i$e8qmlh38j!3oU@r#VgJP$Lj2%+L~`nirD z0_%8(ZPiN^5gi%5qTv$<8%B?Vn_O&H$1ScB8kS}q(^?eO;pN7I6F%wgEtuh}j2c>S zPG1D;SmS0J`dcs z@?060UxPK1d5xStkG~m?oXbE_88;s+GQFt~dQOY`h-BS4Pgt@F49KuwFLQyGiRUzr zB}Wa0hhchsjYrOu2bqH6M8wxu_#nwBqzonCdoz8VClXJD?XAbe4gdU^@vBzV1}@wN z6E2bQO=gxmG3#ey0%}ybwTkyxB99I|$wczvSQI&2e1=p~&})>V=Pxzqq*^rVmJ9{- zAIVH`sWab{e((r0L*QWngB6qyXC#Ry0$jDw%BIaDKGw?B5eR;-)87 zI#)@hV-%)BAI3g%OQC>#N-r|0&@u{Xv$nL;oIK`U#}J1rtgW1=!=e?)!eE$7Nc1x+S>M?m}i09?vQ)UQ)%ycQkYoT$Rp;rPb&0wAN0kUv!}V+pMht1;)B%#X+dysBcJgF*rL zBr@!x!wzflj=+jcIcQxRqoktW$0<~oMM}C{$au*Q-V`Wa35v1`lI_KMRoH@;rAD1G zfixv#bTZPHl(7>f)t;WplV#QH=|6aLwW~#{v+-dtKSc-!LiU~~J+ieEUnPFZvec=^xPdM-XfD!~;#la>6N<@xYcK-i*ns}x&F zVt1{g%tkIbUa{!tO4!AU1iI=_((EMO%KAU+{SP2HC+`YGLSfyw+JJj*X{dsWf`t(6+0 z;4&g8JpABlMArHz-TIcS+Qq8+CGB#CvUo6rM#dk%$>kb5xU0sZ(~K8>vq#}(UrMU4 z*UhUoU;%1hqU%#OjXLQ(_IxT1@EQ$u8bv-zsrkxEvV5fgznB^ue}Ttn95#)h)vnRj zgT~b{QMI^J_4BNSbgi}XZ#6;)jdUcbe`6lNTEMcsb%X8gf{hG`7k% zQXBO78Wco}Um}~_pz4f)AN3aW?Z)rr7Pu9YlfnQ!+!;%5Hf(lRxi+QF=#9-53^6;M z>U1D{d#yTvrC_@b!)3* z=c8k{3%r27cmJyE1keki(|lvm4cXXI4RV5>>h?V9oHyt(oJQz)v)$G;%AO}g66e63ci)-IhEX(eb1E; zTYQ5DfWhsUK_GR_;NH|A`1K&OzJFv)buv2L% z>2x+r>~NuP>xHi`m*mj*Mt=OIKJsAMowEV8siD=&Ay2+x5&a(j>hvj_VI!VF3%gOP z*inj{K|sx*-E`01$0$|Ku&Z62+_tpRHtAFd^n@e|*EBJzeArHE)mzh$&c9!JIkl@F zY`l71lTbfr*hYDA$BwoJ-Rvfgb=zgir6aOi&3}%e@$wXrQ-1$GPy;^j-H-ITZR|(2 zP?+8LbmaJ=?}#p67@wX>!gYV*v@@mt=)u%fU(KjJ!?Xkc^vLvRs^7!}Lwi0!KAc%X z#dbevf;_Vn%dliO6CX7han>n$JXs$b-Qd^vJ~ZYB&Bhh9)aJG{J-D;(nJdN)NzZH++D4kBVt1Xo7;1*u7w>8OWH7?@z@HQ!U_iBG-zzb zp)h?R-^+WmLIk(GO1CVg5bz9GmdpKdv>jyaFHmsUt3>FkDX`FOw>185#q+a^wMNN9)!ref89r^Kr1)n|FRsilo~Gjp=*6NBs;pE zMIrYtSwy`b21iwCN5GvU4Z|f;!DAgJe+giTRQz#P*|D0>I&)^9s^)<;^e#Km$vgXr z{q3n^-O-f&E-}*BMeWJ(@a?(C z?uuvcg7Z8LTTYd11pJ4W%cv~HB2>8$4ShawlHP4 zAT8j6H0|O(qrP5a6Uu+8g6fjM@^XM^!4-I3XTSEFX{T|vpxN;1-5q#!pAit#?)PK2 z8t(IInDKg}?q=(De&S||3$gbb(ZzUP)Z}d5^zQY_$yp$9aV<478%fTbQ2iw+&z12Ykyi(b0vm(`H-jdjPw^Z@NPW!Qc!TeI)3+X z_wHo2?k8{(ocT}O)AgM7W_;?hj?B$x6-&VNA2-Us%*-pAb(i+r2M2<;_(JVpz#J0d zdrOY{IquVbh0H$zn$c_bOvn#1^^e=T=We%`qVW&4We>9x4+39mLVJ6ifiGg;~L zPv+PD*h@B}zwCRL@4!nZp&de{mxTOikGVtL`sgtGb@;v5??NMicd{XOZ`=WY3-e!N zm=9xx(p-?=Dw(CUkt5LZUIx)(425Fo``&VhrSlU$I`W_GzMgx8jw|Zl2lCam@Hc6V zX4_~RWU;m*96lo0p63#t=b1kjls>H-KP~*8L1!3Y34e+6R`+7!1(a8Bup*_DZ5(wY_}yYudTz0u-$w!8D;dFwHfKy9@9&-?LWrQT}p`EGw88g4G# zC|}U@Uo_9%+1{Rz*_<$XTq#?I@2xNty1J7H5C-4vj|eQepHtgDUGty8h$xYdl_!i5}cJji^ioo%xERJ4UB_oON{-`3IeN10VO%Kf=I8e3h zCaYNgxGc*ohRMOk@{OWaNnH(eXs)T}?mokRmg24%e(CqL8e4>*BCc;TBBLx3g6W}c z8pF{_N8qi_IYyezc)vk9m&B=RTdi>qWPW40anl>T|8P@x8p7n-Rvo#1(sx_Z@HFty ziA&Y=Iyz}F(Er+A(e&ZzzM#mBe|j+rg2d961R!v}8i%55;`GWld}2*S5F1`kI@81a zX<~spW;2TCdww6qC)9hgwlA>No!VI{B&3 z^wGhUn!#k%ew60xAQq?j?$G_P`mrg8f4gPUUmeTaSB22`zTASY<>x$#pATo(K>mej zG`6tJAwEgpb~AhtRQlmMFNO^isLGeS^VT8uC-8AE`q}Ke*<3h_o!MnS3x zlCxImM3l>YD?zwQtQl}v7GlP06q1R>n%~?EnH;u@bX0}$r`X{VySCt>m$5SrdAP zGAe_{q}9t*Q?KzTNGa1hG|;FM>GVw)_!fnJDmx~19aB;)yviBFuw~fR97B${Ou)G` z`sT?O5sKOL3ItT9oHkl;)Oydzb_|N-3NGIon)0Q-DT$h7HJ2jFe2V94xVx zpzoA4vwV~iln0*jA89M~SzHNvEgP^)jLe0Vsh85<6bXNe9;B&AD6Qc^jl3@>&3tB4 za`?y>_kUM2qm0q1bUlOQxl}2k(x`Mdp%UZ?!%3M{uL51`U3|3tUh4nX4{JI#I zg3zcjqfC*Q@zHE9dy>Rqq(e^VTwdpB$vo5}TPdp2=ssP^wi4dbI7!#&SzIoKyP?vU z+F)*^(rn;Wr^nmaSdD#0sY@=cfsWJWn}%_y%jyIe3w-DZtB%*xFfdq~ED2@rx+QAF z;o@L_=&l=k?P1Y&&3Nrk3tQ=Vr}Wu{vk5u-iMwU5PKmKi3-yFe%J>)UV*J zQcN7!0PSjh4a$~Rt=htBC=;kecEh#0Gau!wvV9F7k&vk;Ysp-fuFB3IF)6v9uH6XV zm9I}cOdQ+rISPeN=aSL(7jm3|J^ z2MF-5eywu$?{Hi?Ao!VLs9pB^oBa+m_;=_h;Wao>%@V5+dhoW2-29QW5#e96j`B@s zoQ#MricoqVW6XWz1xnxGbIBCHX&zdw%q6wf&w{~-XEI9fE|$E!kFmZi=U(I7%2{TI zxLl`54C^!!dRx+qN@vzp5IJSY&x*gka>@`1KjR@M>xbA{51YMp!it}@Ory?1jO8N> zFlKs{tLtxi_}or;Sns-f}UPd!@|Ig+h$ooF7vrshWM(8C^v0 zj6IE#Z?v^O!taGH$%5=S26kC3-SzFGm@*@OJ99p%(VAN}<7C9W0n7FQz7waqT7LmU zE4?kd@W=XMi$fE7g{BP7=cXBdhjoVRjam=R&aTL#1^#wn!|tb+8^ShnJH4&m_-4-m ze1{-F9 zA4*83N=W3K19~g(IKl_yozCQpD5}$nKr53i=iFU zUBHabr?mpKdF0Vn{#OQ$ZZMp{t%SStiKAKX?Jey~ zP#R{O>sR}ZI6h?oa?dcA;@?H;uQPg?&lwR@2z-$~$wgxDr`j){Yig&P#`MQNQfBY= zUEs@6g4d~cLSb(*@hi6ju)$UF*DU4Urs*6nmikxH^_kIE^sZpk77{R^1x4ryzn}1- z`=R>RBe^hF6h}5&8*Wm3U9!+M8ebcD=SMNz`BeYqmN4RV|M^G%#a7?&mC!9;*(PK^ z2D&h`zQ_fyu+CorEWezdC9;qYzW(I?e28vx7XCvyMAUyGB*!}Oi0H3_%r(6%P+~tGh1rgU*}sb*eiz}~ z?kDjR7$p}COlH71&Lj5|SHQF z@)eV<5pTg894#I~?-~-i9#-EJ6O@mHdK9-t?=8R|)&jEiCL81G$%%Iiw8s`x zp1O)dP4xdD5M$>TGnkezeC+2e5tQ2o*_IA|RS&@*imS>?GC_6)$N(qhLz8XDEkk+9|eWlSLDQZsBq!K1*BV;(B$!B9wPC%OM;$OB4T05#Ey zq8);#mj;KA@O!s?cYHvNuv7QgA(&VQzjUa)beO(0tKB#Y#t?goI7-SmC&Sn(pHwTo zs9AH2dyZ6sTfS$g)ZVYL1iSVlRB?zLF0o}E`+ri`^P&h8h`|_AMkUhOIpQ(XGP%u+ z>+~Y9MLjnc<4FXv2bHvm-;t6iCO!2=eE7RlY6c~927n(fGG##{HF5${IcAQRr#cB_dY7lu=j8_9 zb_6u*~vE@k2KXtPb{}_Kgys#_M$^^ zPeUmj|HGNRmXDC0Jl2=3$(HO^A6dTa4Co$U>6{I6Q#b|mX8NVpyGiRUD>M?wadgX! z$lW+=)qt`Ri!^+hD zs$_cIiR6RG0xI-3$*7bnz2r0Wm{BiF$!gb&dU%W2{wgE_YV6R9xCToc3Tj-?i>z^z zr2a+UYSs99miXf4FREp7u9u>^QJ+H>C6<&A{>dC3m(XFVNpK`Htf)@wEJ(COX8&3! z>+YAf=i&EP7Qme1I95RTR2RlnS0R*o1^Q8AN-xVPtiXBmNHMBps;x*yGsCHoGKH;} zPpRwAtng#b{Z>~sGEmJXSZShLk*1fl5Y^CA&^&{k&>SJKz--z<7nk;5g<(?#2&mfi zXxh(cIw*{jON=Yb%oy${2w`fv3TWM2O^}Lc+S+Sv8jsGht9Z`HRf;Q@=d5WhY54DG z1?*_(*UVpCExSl)k&>^LKu(sJX!#jvuk`=6)F`pB&<@9&m!(vVa{rCqzZ%Q27&o)- z@Tm#-6#WIg5s<2E2)#}rF!$3yCl5|N*na~>O)jiQI}1_a!FRnTW<4u6qzP_VZFwWt zpfZV2x9CYL`E$)kL03>iDWio3D7vF;rjeD2s9O~$2|2tGR;`=8BGucaRVz_%kGPe9 zsn%7N_TuvsquO=LK?euhLjb z9TL#@hn9=P&@LlfS5Dm`@zu?b-E1h>>O6Fod|qroJ(nyYm#Pzh%Kbg=i2pvt7Kczhhs5d&uYX&!AR!$Bt1yNkad` zU>7EAr&VI3)M9b#h9i-Fd4o^=@3_ICyVfq|M9t1_c(Mk|3hy5dngNd82L+=?1EZ%W zO;`aP=aXe;jybAa!;cjp=MCeYxx04G3U|SZQC{hKU5hrDX6f?H`m@Dezl33nh2ggV zV~Q}N`;?uwp1toHTKUs^5WUOUH%4(=`@oWgg?~mU0r?98CK!q)n1%-!k~<3$1~|{_ zI7~bCpQ|nII|1&7=Zs45K=rXtH3UH|M5Y6#n|S8hZC^@bv_350XfN3A0S=NJo0l5)-JQ-e^33t3HO`aJ~-O&-^ z7VW4>__1)wj>%}MArsOuKI##tOn?b@fEi!!F~8z2 z{jT{*?j9qI1_=<$yh#;HG{C&$+VIX@RIRsR2}6R@(BdQ0Tqn;$x6B+P?*MZ41h4Ff zuh&FjSBo%y{QT)axz0!>Z>x>MMEh1%JzVNc-}3CxNXO0GnkY{<&0IhJK(6eF|J2-3 za9d&KkPvum29tHU6Rlcz>S1?k>1XL~D9iy|5Dz%3>#($QIFMaE@!PcwI6VoF+zR<; zK^Si&m}jiabe1b`c;TW6EqYoqIN0NUx}k~EHcvi_E5B&4Wg3UiDg zVZF(E0nD@%A?G|Q4bbw>(I_C_FQ3KE>9y5U+zGrrU+ppZ1++EBx+sKMB}OtYt+Ras zfGl9HHl;6M%mIl5wjHZyd8g;Ky?{W)Ekg%mx?TkaA^;JmWyx)OQ#fE2U>%`pF%*Dk zBR&shaWTS_*pX*9*=r@&3aERw_`Q2Qe4-Kg&pd5pelXsyBiWKI+-{L73OvllM&f4K z;n!q5Xs_EQx9%#g*UtX*wC?n(5Ye)+Y{!`KbU?CTA>bx$OCUAC`Us|Z#lzxG|5hv0 z{-XDMYxJ5I#&&krp&0Wlk?G2q!Qq^VyI0jlMg96uTHJoIx=LuIx1b|Zro(I9$z~Z4 z@V;x&-RpP-N;!%*0s;Yr&+2zX4#p6UFJ*j{iVhD2aT9B~ z;2^kA5x6j&<(~?=#5w9nZJ!jfZ0t~4N$|#C=ZmP;LucI zyL*h5c2i|`uL*a?P529Vy0~(9pVzAPkNb#`aV$h_#bGm=_Ryz7Y?V36Lk_qb>gzTlG>F$>9if`m0 z?f9%+{)qa^Gth|EvgHL3=!JZ-0cm8GS>_dk;uU}ArE2BsZ}?;`r61Pzpo4sa;_4Om zMW;Xa)NSAm=X@1C^77}|E1Szbxb07(l$Qnb8~wLGQR?0qd-O&x#y}S0_rpI^lyy=L z2?{0ok=Y6F;@`YKm|orb?sE6cJUu;3!e8vs-^<%dZQGuokv_K1-Rl?^-h6Hg(|y_k zeK(mrx#xWH%3TD)qBPBXWs1!_+leP-ly9|%tv zAp37cd<;82xc2!}ui1y0zc^88)k{@RMEKJlegOUbj}p9(5dMYg`j+oKY~=@B_MPV3 zed2L_UNZsB_&C%)0`90evIu>#)qy9}sC_A)f}z0J`nStKVBjn9^LG6m$U2w)?45`c z{C2OI;VSU!B`_$1+=*l$7zUY4zQT!gC>)7cG?vDhY$O_s*)-Iv3>5uDBozFe)`ems ziAt$RUZ-&~GnUC{FqYPpY9@=*@o>7*wS1P%>bLp9av)OEoH{024o=^yqy_1<#YMD~8Vr^FG`D&ff zP&}jWvsk`x7#gDwd!@x@Zy+Rc06OE}!_fqCr8+;Lw{zR<+NQm)C$Hhpj(Uu~5CBz{eB$WS{4E9af9d!Mmfm`aq#CAXh_5Sym7vS|lC-NSaX) zjKKQ3s3Z&>nWUmkvQiL+ZAydgitn;s7(pD2Q{+4+Lrv(pW$?0Nc<^JjD2ADg%E&xf zBdsuw>oB7@9wAAyAVCP?V!^!UM!O_Yip)k$6$1v7R7Ole+bl^<6)xLeBr2mcP0wYc zG#x*QMk~rR3HLN==V#ktG)phHp`k<7OBo#NBFK`|^DwhK&s!9yBtI|@OCrn{O}C;D zhiQUBidw`QBg}&cud)Pbqm0JE$TX|6EF0*;Tb4s1P)zM+a~C}U(lqIha*LtNW zz4(jG-^g=*4^H{pnzkVyaoAR&qgy&ugPRd#A>g}iH;fU75HyaHC+9RI3XNnp)~d_{ z8mE}=s+jv?Z^N0Ux%gVHrzIG-o92Wd5$%W8bpeb9XlizU`?%R^(I=F|2wRq!*!>Tb zVybeU5;`?^TGqVoJ@f`hMK)-{fHMBM&*D+HU2Gd8?->$>E5i@!qIcH39p52;8SM)GzVkC>4OFq)D8hHt{|Aw-?$#+G`WL*B(m z4VRl_{)2mIMnqlLI9=K8HeuZGR?d+J;Ec6(&?0mQwpx!`)w2j)sJT$@M4SrzManfbuQZz4v0pD$C4{tM!2 zf$3Ebxdj$HS081;G8h@Nf91^X6;aeP80}sq=*1*)FaTaz~XBAkKMWG-VX$?0k$+S?E3+7 zvL8{J3&dZ7l!L(Bb05JRGE9-BVjNQyX}lUT?5+%y7ibk{zGIV<=yQp(_B*eS;Qaf@ zb2Q4qAMq|wg%<_wop;iIV|})d6zVcYaAso?f{)Ek2d%R>(Nw}hLg5^PxN+MM>HSl( zNhD9LC*({U)f{w8HSXKTm4fd{{olz++HfY-6c>X3^5sk8QFenar;~?u8y6gw3$j^K zBzJC?eu`R4t(MBLt+ty`O;F^h3Ur6q7+^eKT(+E=2O=!uo(SZ}v%E(ov2J^C) z9{LuFF4)MX4!VVLA6LA=9Lut%Ip<|mpM?-iWZkb#_UGw0JPXmc4~6)j`3La2!tx&MrSvmQ5@x(}v90XojA-Z5*cF1g zL>!f#sTXRF-brlQACbGij*NZSL=7bz5)$)F;1>N&{z^WgY-6k!AsTS2=RakohMfe|DWuNv z*Q0vAkxJw~Zh1y)AIVE;#_A?p_M~x$fmV zC`|VpctG6>Sc@A#1t~mi!TVyqe@9arFC&14`>cr8V?HCUNk?E|^ceq!nB%*#ui%pi ztnuU5`=;@v+s zY@zoBUf_fGn(rQD-}~lE<73wx?WLoT$6AE{^N=GD+gIo_1LEuL+spe2Tkq#RSJV5| z9Od)e7vP8*bYc1K3uDU&EE*R0Nj%$4_^(Id0dpVXJq?VvAOeL1GHV)`X!s_x53Rcj zX-ncNP6Bg?5TsA^rBm=NsX*U;AI?SR)<7N(YkroLMA{A?VRGNB&=?U->f5YwJ;6Q# zFn9Z8ANevB5#B^+p9Ezz8sUEbjf_obicubfY$_XkyN9m5J&*8>7ZjmpGZpdZi2mH zLb!WCyc>yQYWN+^lhlpyQT=kIphbbPfDJ7Xsj|>@^?IHF1JY|sy zRWMn=dN_h~(f214+Q!4zNK@=2Q+nViZaWzD?SV3T9>b;Sb2l0G=poZ644SUV7r5CE zEM;cV174A6S#m2JQ|Qw}4wvG6J`y>5^bt?l z3>Ul!cafQz`4MTB8Q&!NQbjRhBdD()M)D}4J~R{ZQ4m<&7kDRE=q5jX+ZQG~UIU|m zhc_4P9RA=T|6W%lrg~h;cnrg7E}tVG~O7&$~p;)S^b%0!-FI-sM=(R75kHvfi%r)BQwNRa#?^_(!~j9+9lh>Yh&U zF>b|)u40Ma;Yoad>H7qwM1Td|sF@*rS^Txd`;&#JsJXaoi7b+(nW~nF$DYaik%E^6Vrd5)qrLE;;mdpaeQakI+7YX0TBhP2DNOjQ6YS1bmAl%P~ z$UlwD*Q3be@+`;}CUBP89gQYPv&vnb7hOa&Pgl}A9R zg`st1r(`(RZaAGLfOkQJk-+FoYHsVG9(sShl0zApSB-}bk_|QHJ5afzlG~Tw}l`8zu~WbqX8Q5t{TVyjdWLy ztbiuot0qxEv+Px~DxgL8s>QUraS;r0S-8yy(6%ew9(~oG1n9`R>L>zqR$X;A0=hb{ zx&{H=lULn~fS%2(o&2G%+dMwy(JogbNLgLPz%l2n0SpzCb`AqoCly!C}zRvrvxsM~0;Y3>>E3Rs+01SR+Tb*tUna z=tw2iY$ToorI7MxgZ7av$2@pQ2sqXmQ9rzJe^6i0*J+Or7&vqq${svTw=lQ}I5h#A z-xQ881RBJ5Sm}Oa)^AXTU7Yg_{XdUGAY~a?GK51lXYt^4t)1LQLXaEaf-`;%48tII zfLp^RLO=`#{TJ%LfvU?82muXN1cn3tzfdnCB8P)RK0G`wE2{=VJqY^<2-x)W9QF0h z)YLyfNC%;QWMl#a{Qn90iHT_t>Oqhn7#NX}Q3U}X7ncHr{r?8OsHi*$`_t2NAjpI8 z4nloqWsI1$Fez2l%}dYPLk)m zI8IiUq&-Pd*R(lF)wZlWNz?bZI7v4Sr#;OuPrJYchpv(82eT=Y3Ien1qy@{d&w4q{ zao*&i&U26VJj?Tb@1QR54}Li-_=(3$QxxXmd0v1;ad}=8qDgY$k-&sEP`Y8!Nduo_ zcy>`lAF8`k5fg8G=~jUhEevT>ExC4?1MBzeCnTgX?>TrR(*9L_hwaN5IGp_N@^1*C zp41JKg27;6jfETcQ0GM;?6LZVTOqhnZag8a=gYxKuRChJ5m{Ku z;ZZW24B^r2lp(&6KQ zJ-&kW@8c-s^7JoQN@denP&@r_n@;7kICOSFitAW0Pe23+g@q<5s)PW5#f1s;z#n zF9;HWNWT5|!B8YRz2S6w!_n9;a=ASDj>eOz3^u_3OYV(#2LqpkgyK)<2Mcn$gsK;- z%k%FvyWJtq2|?cT;(r@CougK)2eSBrVKtKnAO{8e4LyR3w<~cA1!4SyJ0%9Ahk{)X z0*f^+FoGol8wmD8^a}ch!$Kk)2!m_<3yi>HoHQH?H>e*9TB9JybUUhD7y`Pm|Ii1l z0#+ED0?esDmU?y#9AXJ|zCR9(<c(;VWpV^hjP=z;1(8E%@@mrae{xMQVxfNQ6+>=DIWlbZiBy}QKek} zt)#M=Lz8%<(@YXI=^mqOC!1=4-^*c*O(t37`&Je=sa!9L;P0H}E=}4n+W(E5yAJk^ zBzgjco>>3qM&W4)IWP4;yFXx13*ThW`S-ygA;F1X@b>8oTJ6^p5b%Uq3XP$mIpOkl zdPqbDFh)Z{D3J=l;K06RLALRL(mTtc@Wj9Mlf21-W5bYQ!>au5f82-RVJE2=6oGq$ zm5`oyGKGYF{ieV_{s-LTzeNtr{~!%*$RO}FaLWHrNCVVef<(@LPnP~8a{hzU|6f%A zL>l0*1k(Rwtn|M%n9>bJBQgKoU=|O9L-GGtgE^5*qXud)8!3apAw)ZKWSYumvbkL^ zb9lgnr*nlv;0a}$D;8n|{3rP*oBuEN-UBMiZOaxeid01`k(?|M$sj5@35sM8$(ce) zf*_K!MGg{*oROTP%AhD`cYuAaAOA#QQxu{ z0t(CsHd@Khauk2Jk#eKJ)+k6zBh72F_Umlyb8PsoL+#VKo|tnAZ_r((h3+`TS2L8y zSftd{5F}$7`uMBf`w3b&TSn9A-gKj%@%!{A+Sm{lqLPeO#98;&{sw6>ImQ&=`asYlF)u*mFfa(8Pv?r%8q^fwOKt9|jSuOOmc+gUZf!+Ia64uOvgPSSfv9pc zTOrsKyqN(+X$4=xg=9LVu)&3Ml2CF1)5j6glx`>pnWbGj9vnw^0VN|NpYtQN@$q_a zmwhQ-e@|xqF~S}wFe?qmrxGngpCl(y_}^CoAdaY2#B#o_NV$ zp6C%+t@IzsOQ!EUO~j;hFzuCDBJqigP9ZpzP!PJ4Ta?q@|uM^X#t`%%$hlai=rK3@bX zx|B3}kgwT008P{C69$F8&j!#m;wncZd4Vo~rg>y=_9;B3)g$Gmlc!^N z5|#*fYyJL8Ne3lFQoI1UF`ja7c93EJ6BwTbqahfT0nGG?O7eY{k#PpaU0vu;pht*< zaG1bANX)pn_zr64N8;lTNwN1v>uxh@y3 zqif8%xeeji%XMd)Xuq+XPiZO>hVK7wiA~gHI^l9In#Y@G#G5; zYBm|Iq_q2=Mj;EY$T515}I{(%!Y#>Q!Vuk+m-<8^v`1!)fzg8P`! zxWau6+3Vqc>cS^*e`R^0s{yjQu2%!4p449r5_LPd8q6Oe#1z7l}DYt?uLap zTAI0~1cS+gTr86^@?T-=CzV@+KL>gW68}eG>(7|=-{(^O`AYuPC-BFxg}UkkCI+Zn zxyncPz}RrTA5^X^7<|k92bC*@y2_snP`OM$sa&NKvgLu4+t!nvy&rQ1)5QJkFQ6I) z4@0D1G8!tVBR}S=+zvKXpfFLxqRP|y%&}91gy=P>9df|$>r~4266idqv{9`A%T+tQ zyu6JCby(}u@BnoN;$a`O1XzLAksZOLgxjaXAYXz957=~?$a5d#6Q*bBND7xC`$1%3 zFgr;}-`=!Ycgc)Okl!$v)=uTK0}?MT^S+q4a!MgCo(h&2awvrzkAPmuk?o=9nm_D{ z2H$U}+%yX$=<_pYZ~Q9~%dUG%+Uc^d(ih#2wnSTkuFQV%JUe8a>3;QQ-W&6c{oo1` zi;)lRgG=TJ_l1Hh;C{Fg5R(^VDmumil(j)7flD^y8B&bi1#?Iy0>CaEQo1td!A2{T zF1cR=`Qmb|h%GyWZx{$$H?|Xp+$2c;5{Z6F$w(o6AQjNfKO@n<`knsg@Bi<80>6($ zTyhz$?LR~%266~wM+kuVG0RCJeotOXh&6L^gW5 z_g4Oc2vNVIi?xq=s!7sMXg?>JSgIu`x)|A=@tF-3gPBxI32s>pk?S{@AJ94ik%+7p z@A`Aft$Q`1q;i%U0#^;N@FkyG@@8z0XW;phP%G7!&xY_414ZP%zi-D?O%CS@1ZyZR zs*xa(2;K&10+WfcP{Spc>lk4MT&;7UUc5y41c_2RBwi9!dXt>nLtrbIk{X4x1G@Wc z_RWBe4{c#f>mVUUZ)H_49MdpmmzPGKG|8fON^|r016{EhCmtx%Sm4b zD;-3@wLGd{2@e$r3&f=egc&jr9ViGW(g4xwfA6=#pRexE6Zlu107MtK4v?RURVUxe$_@~Uc(R0zv`cfRZI^6m#nq*=vqJSdi_R4DB`v>Gchu5)J~j4v5~ZTY@PlfbF) zW5v^&w*ecMq(HG)L~x`$0)&mte1k+M1K#G-A$N_5y7eUQZXlsHBN629%AFU$fvw?J z{JgtBZ^zC)aBmNQJ327*!P5&Vbyudaun@S=MMXsg1qA|vqTuf!5C*%bu;}>s7`WCS zKYq+B&a->&2;BR&&aUOonhUHsm}|`D`jP6 z`NjFI9bJnns}>edOwBAyOG{1r&8n)Z*4NjQlarN{Rf~&@zkdCiUzD$@r3=K8*Ev=E zU-(y7R||^@fuQ2y;gw%hP@7#_QBh%J{K&zLD3|2;lA)2w>({R%BT@SLMg_$M&g8R^416=XU*Ky!Cd&YF_a+`oR~MA@|LJQm<(z|R{ z2IG_S4z+!y{gf1%JlvR zIo8ica+2@G9NX^Gl^%>}Xe)o#P^KdSy#-5i*L*?*aUVU?H8aHf!2V3|X!2>@H@!jK zdtS&X$1$5aOPMP$FsAG3fY&t+6d0?Q3i2^ab0i?u``CKSQGq}sa|zQT}XJ2nKwKrsjd5m|P7VbvQ+E#lue7vAx?`9+dgLK1ub z>YT$hox6BBE|TyMCDz{hb6;_o_#nwU{v2Q*0@MzYR|$kActQ_WLt&FR56KE}>PdOC zyzb513BpJcMNx+OcplC|T=*3dmSKf2D7*#a98kfvOA>zKbPg3jv9vcO#L~C?YD!o=Z6y zxR0A2V`KOB$OLi|P>r+_)Pn-(simS^9dlR&dvC*0CRkc1Us{3SUM2gz*n-7GQk5ZW znhcX`DxIbr7V`aZHaOUov1Z&Zy^6^BTM4_? zGvwb{@hB$mSLF%Rt#Lk0j!u~)S}AF2kb4ezRg~?qh>Z0PY86(c?S$ovt;oN3pWIJB z!3^X}9QVHWKHGl z3L{ODa|JNABDDks8VK`Tp{iMtMm`61z7`0C-D9Oy2-x8+U&jK~7io7ZjJ{4jEU{EB z*0YX9Vhtcl?ZU0q@gzYFlZR!}nVd$)ePd~>HRVX+r%D)(@pjrHW`FULM^uDSowtrE zQT)M=uPIJ+tJJUM2iYuef~KShHClDhgH<+bNA{RYuIbqzz`Rvoex4Z~IH(Bq}6 zPF4Me!M1gcbB3!f9g0SN5p_+g#H(%}`;ENI>Y8_&S3DLJjok+8T22gCy!QKN?Y8UQ zfNGatU@IXkNa|Z5jLSZk2j=v6>f2xvOMcgs=4Djs+o_!w0&WkOaN5>)z$NB`?kPPw z53lcJTb>C~ANVp-THnP>GX3(g(gONj{aYcUsc?sZ$HiOq-I6Mkk$y^xX~YdZaz+zT zF$0Ui+zq{|B;zsJN@i}#4ShN?+WOErA1;s6XEp(Cms*sT(V8H99fTAwPT#&DKDuLJ@R91TsCBC`8(539|;47lO^z5%qyHKq1d3>YVLg`^bxgkPDK|-Yg!WBM3mEIy1-eM)*61g6C z(p{ud9VL^V--&-F5%W|WWhEAADjKdU{8CNurIJAK1Abps9#2&cmj|p4imcD%*e&jI znM!az65}utVMhqDAp}?qZn5a!VA18euEW8s&Bm<7!mN3nS%aBb?b`JR%q+^+Sru5= zW!X6IaoxCc0TF&-ApucAeh~paA$~p~K0cw_w}o!r6y)Z*$;rmecAcGt={oaO zW~Qsm@IP!gGaSy$c;z|+BMZY7Rz^4nBm4#<{5B(8kP$A*2p5MlNnd4FxW=k-ja!51 zmi|?K6S$Ds711YG#B3SwI5J9kFy8fNl8R)#8^nQZ?h)SuDJURa~1!R(vcf6{1jQWdcU1WrjSE#W^ zkcnG>sf&+=llK!RPisea8wXb#dneoHj&}Br_6|-CPEL-_&Q9*`PF~(FK0Y1+zP_O^ zf+IX%Mz}?UIYov!pk6*ly|hDx{@lRlz*oW?QQ^+0a5q$hH!8vh6%l}ne2I#Th(Mvj zP*Gv1=+dQ9OfRB1+7b%sAW)3YPX zu|LP=eeRQwxn`qzk06N!LEB!M|?`Ic3 z&Mr*M&CbkCf0>_L`7*k-II_1ge6%)nvib4s>*(3uCx)R>DSY<{j-bX^NZ8- zZ)X?ZE-oAj#0E_`dv+FeXPTm!^ z-Z|g?@~JKXp_yWm#Bg9~XZg^V_sX%49PiW5Zk>>`4|qz56oUp+BGcPXqNSLL|A49d z^UnF_cYtyCS;`gq_>tHemu!)k0_^Rfo4F3%Uw--vXG*ZZ|xLYp;hn;ptv4Tcq%c zq|>0BWvjsFZqk8|&|A;)+lg|5V$MLINM0g@-&bJlN0NTk`qNJ^P#*ak}p?3sgw4W>R0;tNis9!=^t7{(6a-)|hRezIs^g_&$M zAVN-M+490Z-qwFd0-5N$MkO_uI-(;KO2`L!pXOa~W%8_`xqd{@*y}pTwn^#1ZC^N% zRxI{Su}PNNRy8PN;?rKUzUndC^R4=ovh(ex0f5(xqHK7=-q)Se%z+3>B%J*+4 zE9KuY7o1}=C+Jh-?|5>pVA>rdL@5JI)zgYs#KP&A6=nl>CCAs>@ueQfz!U6gBXQsH ztMY;OGwaY@^4;-gQ_3XJ?rEn)?*#CMWfED)b*?Zg-+c*~H&S=Yy}gyZ8)m7LO*;l) zD(KyCyRdBf6}fJa$=wLofo#U(o^FXV08=5#f#b{f+@;+^1uNw+Q305W$X*mGEQgs@ zzE?qSFFJAH2d2`i;=UJ?L6plTE8nM<3}7lsxg6TPeOlFqZ<+e>IA%Hs`^A9zH&4`3>Jw-R~>%mGYgC@haJAHY=f_LIj408FL#ovr&mfT`pQ zb;}Rh1DMLHQvMH2#TmW-zlo`QOQ&D~Fcp~}mm?A7T8JSy@!Dzmc3=dq}RnW!Sb;EgJTL)lg(bSvwI%oKmGt|og<6+;#amQDBSy;w*={5z#`;u>< z409Z1k&q9JsD1Wpkqb09BY+Sm%Q$b@h4Oss>x*2)FLacG=(fssW-U(Gs8KeRs^qSu zsllTe7=InE@CKXM%Mk`D93rsF4Hls`eIGbQQ~HoJS3C!duX=xkQ<2|9r>6U0^;Q%8mZ0s9(S=d z373X(8a8_nva!11p$!p7@?>0qLs5pqzDLO&A*%ODh?wx2 zMq$IAmck0u;>7)uqdXcy#r6lcx zj~&~gukor?uyXNgYgQUC5zk5e7>?&yGcpN>KTYeHTz;on%A<7$Hr5zF%|~+Q-r(d{ zug1FrC(m%X;7ZNyFPhwiHAcaYVG%{Rr#>HN<^UK;=vL!4^mA`2!2X(>zZK7uY8% z2i!||L9H%#5)hvfT%&5Vd+|Xe^^OE%x} zadFZOwmVyPq^0)4;Nm~WkJqeRBFM6MIyL6w8|)vE5Ex%C{^BrTK97z(0H;nB7KW!$ z#~T`cYNl8^ z=edTWsh+!0J>|I$6AmykkTFfxw5T2;kgqjmbT(CGFR!$;?XGdGT7AS$b6OpJV}Wsl}C__(!iA`tU7YT*A4ls6V2x6eogT4nrp~G z&=a|uum`J{z^wrMom?YnNtnu^;XDQQrlt}96R=>?V+A}Do(kloPRLU`qcZrN`~1d} zV;*Z}nxAuHUbV*DS;pJZjFU+UpAigZIgMkLw`Z=8j%V|$sj_oerPE#UM@+;^9E7t! ziMDnX4V0s|=<>5oN)X2hye1oOkQiE%9VR79zn7N~*pSfWl=y8Qj}3;4eF@JM6dWp? z#1fwvn{>zCDe{rI3CJxe{WPhb4=)B}u}Wbg1x+qUN-kjNqH@tQmva( z>y}cVl!9(ZX_`oBIZbJ$No^NS?bJz3M+l-k#jIxvwsc$zvylQt}zHlmw0>XtU1 zls1WJNSmHWn>kIJqe=fFoW7`=zU-F1nv}lYkiI#QzI~d$L-T4+_|<{#t0T8pCrPi) z8eUyYyuzHm0?}rGMKW;oGVt6pAjug7=nSIC43e`97;Pq*NG7>nCZ&5Ob#f*xI+K1f zlkqGQPMgIflEti-#p0gDmYl_b&f=QP;sM-!X|r#MWb^4|3%F+sC1;DEv&AN}CC;)X zX>;z1TlPhyY*DXl*}ZHvxojO>wmDh0 zeO9(ZTfQe!exO%=_|XxQVowvCF`oA9o)eT(&`Fm)K2v(td_jLT6_xkFoSd*gj=6MT7mSo z<*c;xs4}=sijXALx{T-1U-#Uj-jA+sU$q`KRd)u$dqIcyyuTjGNjilh!SSgc8mh85 ze_hMl5Nlo0w1X=L!&Bvi$xT%iHKOm(p|Ml&CNoG6GYB6cy$c)B^;76Fx(Y*h{R>5? zm0e>!@ZZtc_`L`kgCs3VA%4KyG^pS7cB4GD0$RNBdN3}f@q=i^8XStYYn~A$^-pOA zHxe7e8fQeC)^~8eh*mVg@K)_w>idals#>rV3FQ&ZJN^9i2{(R=x(qqvsbpdw`sXPUQZ9|ny=Hqa?mpy3gN zswDe%B$E};8vS+%A#scE_g15b^go#;R( zqqw-NgoGR=S$?G!ic~E@BPix zaaEG^Na*?BO&ukk29RD!1;#G_w={M9Jv8;7+=l+2Dfii|-Pms2`62f?7`6V|e6n2p zwdLYyabYo`^5>gi4!gtg>H2l@}Wk1W@2C%N|1-7ad2l793>EWn> z%huu854q2{X@bqsgk^r|54q3Q(Ue^`_wh6!_c{LTx>9m_yDXB!pW zJm;H#gr@LsT=)75++@z|{U ziaFouzVZFH(A4o)z*dwf1BCy3Xi8+q2Nsrr!z$NC@Ox+qPLv6em1`#hx9 zBo47%M9Vi#l9Z@<_M_j$&fk7QqfDi;pYX|Zp8rmgvW-er%CIMkP>1lqbB>P*%gifW zALTm?URR~%d#(^aWdFY{_sOC?ERa(MyCSVRKGkjbQ%N zi=d8j?7I*Hq@UW~e1lX#TtA-7mXMn`L4e!#uLZbif4lewxI+L7@P_@dPR{@zpdahx z^z`WTD*^Pg|dN=^bc0-y!vA1*8`EHD_1i;D||LJ0{8iHV6}FxchGchz;^Db*^X5%Ket|o;_`H~I)>H7lA?K~5x)s49q%S5VFMVG|MpjNv zURha1^`V-Erk0kDp1y$*!sL;enVGq{g@uKsm9@2vjqNkL=Yaa$$;sK>-QCN}>&1%~ zK0ZEvNWVb)(3pFfDXiuHWT�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

    xVdUpqH1tfLU#4pEto* zjCFX^dO*C+AwdePb^*RgEqWcX%*NZc*P+!?o1zWjz*pXCcQ#=n0oPRru2Tu0fxw}m zET6u8l)EPKWD{oKCQzu^)NBV3WD^G2q)9$y@xGnC93AQ6t=S@fc50U2eda1Ze|wFe zzkQVMl*Q4JF8=<5yZN0TU1h!6#Gmg$RMtoz+6Kgx*izD+vgplNEhHcypH9%5wn%IB ztyP*7>ox{z#W3)~-lV=*ksCvm0pr$g>R@9@7xEd4J9qapvs&TOLMdpXWAEc$==!`i zU3KUJaux*Z3$~+}r_>eGkntN<*9Bf!`k=8bSe-CDn3Q|bj{XcO%iz*t*<0U`q!K23 zhO<;^4%b#HYLTn0VLf+-K-SS>TLb+V2dbTej75#qn@<$o-KfAn?{}T z$En>R^QCj8GW;ZzGqi#fmq8GU&LmL_Eg=$>aUYstMGKGdt%UltofOM{y+3h_5jqdp zbVOnlnww4`y+d_gr-eABNrzF*#&8Iq_@vRiW8+{W3=<(t@6$W$*EYtjF%5BxSh#ff zHwW6Uv2%c`=<{|)-dc!mz1xa148uT(6s~tgT1e2`tPJ+s>!e6*Q`G$xP|=o2cR`K3 z3BK8m%b$GnBKvmaIkLBp)G4%Ul;GM$$a` z;5ZN6J4`BRGCg16*^`Uvxa5{Jv<2^OOM-;eIj=7>U3FX*(-54yvcZ+>Mee_Qh)@5- zF8X_tv1Ls|kVq)J2?LhbYOJo;Ik=~rM$=`Z*rZTwGSHjCGz_lIl(~Fe8ObAqX+{Q8 z*v$~qgI=ix4iSuBxbFdrMTpiWf4tAfHQ6t2@lhR}lj0 z4ToIT^zIC{-xGG@F-lk|?T~aH+|uV2LvBTZ?pU<_rEL2WdDnIwLsWbya$q?}1o<1HwGR(gI3<9XxF6WoZoSZIjZLP{iwTT4!vk4}8(%dnY z=l1b#x{@aM@9Je|Z<;TjoZ&A{FOW?b{LHN*q%DKHCwutGBSZY@8*_yA0Ry4cZea)k zbz9PxP4Iy|eH`D>!$^0Ev}J%$XDt>>4c?wD@a*L^W(qaZmJvajcJ+Z!0TlYP2_D$n z&pkWxjC7?)Y4t4>8@x4J;Q1@7%&yl-Cya=a7)}k_VWca?gZulrXGaeMxdcg%AvYYC zxs5un-`L=VsWq004F%s8LZ~yT_;?Z6t_sdD(VOPraE^(dG`W;XrC~F-(cs)diMc`@ zq_;5OhGt(#8SZp$v~${IYHixLt!i!=CY`Db(|feBPLn12T}D2)P?F+`;L8)qM{gVB zlgB4nE;jf-|JU1WRGXL(7^MOtXHm3{gh{@0ZzAtqDM?u-w@mb41j?XNJB3iLS&ruG z?>AGb*<4+!v<2qsG;aQDLqNhb_{1F}jQ6Ja*WbKI!*+2c^yL!#;`=6;U9a)^C$C~? zLQ0~~z&M4jbv02ND-7im9lpn#1`>&o(3?xpmrIbe3~X0Ysy10IHEBAM=)$`|EsmL{ zL0>jOK5LOM4VsR_da=%Gv8FDk50&ziT&eC%@69F2=Mp4MLDQD3mz%7W>*{<`)Pn|v zj^1pN-duuI!oYDQg=&+vVuPk52^ZO9-s$W!QX*xUbfqkcHJhdee~g%j#c-(p*mScZ zHcWJ(Qw;v^SUT8DkZSKbqDeDILY`4uOaj?HT|1{u5w&TNsGNyCj;ezt!?=rc^x9_A zn>5m*Q@@?b&O`6ut-0+QglVX-->| zwM>KcVuP=I{|dkH^G6u$Q`ZUouP3ka*7+44IWZC7NTROr+&R`oCT+1^Z15LPUu9{n zhGiPO_U{cMJmg1}7RkpwK^pvLKvST#MCqJ@-JCF2{%UIMK4&VCG3@@Hq!tv&> zze{}g(LR3SA+@_|nu7V|Dqs2TH7;E%Zc`$(j3ga(ar(9oc_+sYD^qQlCTVp z9O&WRV}oQ;o#PF-QYwAPYpYmlGP6+S$bnwE1zemeQm)vfQYz4tiif1e!!*@B!GVtF zqhGX+Md&c%O| zTAqG7H`}hvmogdz%P-re-EODCb}1JHOh6Qat>02XG}N8q(Sw8hk5hB3&O}$%?;qg#t7}|YtzzO4KtLQ3MOG*S@}9{a{`UKKGTDq_Je)kPz zIli-ppFBFuAHH~W5cXR3B(jg7+;%Zwk(a?J|%{^7D6%^5DJ!@@WgpPzxIpNz;+6SDL&uwZ>Oo zpJ%aHBW0Ok*`>K{w(9p`@Py))0xmKcLJe$3xzyjal+#vN_%_fssYh<|d#j`=##=QN z1CtPt&m>tbH*j1x#4sARL)~`CBn)+rb{vF}@ejR>C>;LucU|c3O7dHe9;7#$2tgKR zRN*%l7Yh9AZ=9vnjGUv11xU?LA3H)oPsWP0r&c)oatXCK7LmPe-PndsxjD^5RVWd9 ztoQ;XOu?b?E++dkn1;6igc9D1g$C#6N|b7j29Kh-u8hUu@oq+XQUJKF1JXqfrU1PP>Xv1ntNN=)c-)W~+bod@Snc6e7 zpV0*U4$silI$Nd)ZRna*CsOJ#$va_sYdE&YcQ)ft!8_Uhtb@v=l+tY&CtGsHh}sa$ z{%v$iZ1O9->KE4=?YERj930z07&eBHRM#j8fsE7>=G-E#w)WpXa)nkVL}zjQXA2qQ zi|f#Fh_JEIxvthzVVFo^;7}(x%=cbX(7zUKDEUe(ZNnXU=Vu<-#i8AK?mFDZ`;Mud=IMnB=ckIAPSes=f_C)}Pq9?YYc0T(z*BFfokyIhReF{LGZl0Z3sm_sg%j*e(3-Lyffe$6Wf;Dlv@jgwj&qu+$`uv zNNHDdx)lUV&$vm2(YIj*C*HL{e->i9(w}&q@#MJNJK4j|-gIze(I3=&%EFauw`Xd# z!oPg_G8b1WoY>LBPahrT?#W)#mJ&MErpuXy65n`tksn@KVS1y+-+OQuw~ltxleYNV z_wVE%edhvSd25cNquq3;Ovdvm9@yQ-^m-k~b>nBar<6O6%L9A*_$LqVr8{Nfcm!3c zJIod901R~{$t6uJLonH!;$J*^kpKG9b-w=2Vq4u3xOYbnpSWcRQz#|bm6B@HWuaKd zm6FkXnryhimA5|qf3+io1_y^K%7e)~Xb1O)pfvpwVOJDwHCwI~ruVAS>5wUbwJ~Wq6A?K+|=(ZL*ic6M0^}yuyv; zisyQ-4Bna53U%8>nMQh-;~NcM^ATt72=BQFz6URZ{BeeZE+HZcXJ`ncN{5dG9S-Rk z-U`};X>e?3HTAZ>9RecnVkK#1kZV8}&aScHv= z4wBpFWBQI<gz~zGXH*=~zY;?4}(jk`tOHi-1vFS7t=y~MXHHKH{IJyFd^ufIjr8hwlK zn=m}l=be(I0(?p%To-P=z# zWAehOWmeYfYT=gFm03C0~DPhA(|{3deOxSbknGgr;L`mZHjCyHW_A&R(r6c^wxV zwzabgAHIJixOPZx!oPjJx7JY6pLI9)sp&F}ri)>y@BYXO&nOM)X1W;j30Zpe3nlGD zBws6km@D`T(!nR9HCMg9NC}OG%eSAJW^Sp9K(JA)Q>pnoz`C^TAVYk-cMzp<*;_TY zKkuY^x9HD z#iIuY=}xumcmv2KP41b@bLT{!Z=G4>zrQ}qzkPO!fBMKi_6%eg>rV0Lp+Ua<<{Ur1 zy2|56hH+fU?c;gAe_@&BawFUk&A1T2@twW=?fZ8s=>z*RF4b&x2?U24_1ok_e04 zZKP;_VkcIVhDD%{=;ybCbMD$?MhH)b^??@Q_dwJ*>U_pE%60uJMNnllaIDsHOI;Rf zQR0oMbxZ-K$Mg-LZadtutCvsTw~P7pnlga>HY6OUhXnutAOJ~3K~zyqB~-uuBhL0Q zgkYoE00&M`5NWooeu62|(Jkvq3m z<@B`;Ds?-+!&+b%sJd;B?3YCWPKJdp+&l=4CD9$&j zT+gcyMKDRW<{YirxAjRe)gKWk6134>j7W}~-k!nYQ;G_<*HY8<{)H6lj_qvH{-#Al zpx{J%5~m<-LpQm}jGH9iT0ULl*Zc>IIoeEfkik_m&`5BBkUUp!0GZXH(< z0`j>8CyuF|Utz$FxiU%1;PHnh0(i<*o0F$kn4YgNy;x;vAkFbx2l(tK_j3Bu1_Qk* ze)2;TNGVw>G`KibqTX4be>uohlEjXgEnhxomG*55Pn38=)(c zAdzT!jI{75B4w0LQ7ShBhYNkNEC`Y-6@4{rwM%cB>P~1wsOROfO)jUIdcFwqbk-0# zM_5-70bFZKSJS1GBs{O&rmccy*^Z0tx|}+*%Jgi72aXS`^S?5Bx;spz)J2T7TNeFGWx4P;p=sYrX$m$ts~BPBhV1V4M*2xHyK4e{mc>-^Cx z(_CMxBBk1)mO!cD@ZGaZoV>BYr|%f$XOE52pRxGV?W5dSuW@y?8j36}QHH}amsk0t zmv1n;Q4hufpj5B%7jMt=^0jq-`S=7MJ~&8!Ho+%v8)0gt!a_+I?Ze$E{@U%M4CU1I z4Nsh1;!j?kVZqy(R-46wV%_HYnyT+tPE7Lf{(c6#l6>m+5oXq^ER`C%iXR!rND`9% zY?5ENdyKwpfc=Gt17&)&C#V-tDaoGy3)yIM5j zNH2n~289r`0+kV7VRu}RxLAha82~MXQFw0HzJh8y;og`6&rMrrGI+aUYVpN&-N5w& zBnBdIOF_yYuiu8@x2Y#d&`(oDW~1JwP%wp_J1%(l$=R;Av*b3bR|=ZWhMu+^kfr? zcL^Bl&teF{)MA-x-3dnmm6G}ODwBg*2D?*ST`Wb3BAlfDMd5h&aE|?B-CSKLQK{MN z8|x0EYl{@CyheX@W>zu3+r2nCRTJ1tA-8K0$=IT!(C;W|#6D}aEHv7QO>xq`4TcV7 zHBMxBJExtB)ztQ%MAD4ht@*}weJ45Nc-#)dL{ z>SH^p)ErVt<&M3$TH{OKo?>~UPBv{Z)Rzu+Pj`-G$!09p3iZHK(2+3IpJJ##rQDo> zTMzVd>w(@7ObaVD-oCibMzP6vpPgl7AkE}RhDRS9=aKtHmHV|Js5cy*J-NuG>qRU} zaClEXz;|zVf=_;IM_YgY+h1Ja`b>#qhkBKcYrw=vme2m&zEHk;!(n#5%F0H=+d1DP zZNYECbS2p+HShy+w$4uzzz)#glL{8+Taw4CLEAZ&vc(}*H=2P9v)@*Wd#Jy)y2E;* ziIgxgl40jWj^2EdO3h|@y-qr#&KPGi7P}^M3=gCNS9sO7s@e7E!*8#@C&|G*-Sp&> zUS1in%uL2&->zH(H5)AXsVY1iOf2_J$jQiWqy_NEexeNwMB? ztJBvEUcA1>8#4tyerSjf9~dBE2o}o?zVhZAFWuN+-Buyix=q1}@jRcscaolr#RvEH zaek@HU!GpzN0(Rm$)m&U>dSD)L^t0)v&7l?5_e4I=}KAb>Cf=ewRNw5G6cIV)mh}* zM%9k)xur6{|J)QS_dN zw@_lCSjRM40lOqBD)ueoITEJ9>DeNExg>Y&$TOBtv0iQR#*G5A>$PBl-7?a}(TOgS zroqg5o!6$;sd{*l9#u-<$XJeqVQ_Z7M1NP3J0|mt=2NUzn!Is+gM~r^Ar!oaN4vOn zyqlyYnBQpd>eL$Lx~p)nA>!DMJe9h`wbg2H7RK*K!W7&#k;j#ib8{se&&?{EG`VYX zfaQ$}SC`7{8Om|Tu0Haa1S`clr>8f#u~G@?15!eF+TxapJo9T+rj{$@GYR&ObkTHN z_6+ApS_Zd_=Mh4XFbx(9H8v_u_6~P3y;@;mLqC_KjlYnX!r86G92m*5cPI-2=GJPwGhJZ0*kGbB!+2kcD~lD1RR@6x zZFsb3(^E)@?B#i|m;#RO%#%%-TwAWPw9!Bab$&jdNpNgOo{9c65|~}B@%Hrsg=({P zURt)=(Ifu0g-Z+UAwjWbQ?)Bp>b6>N(RPP@KIppYd=}EdZrb#u5|~1=QmO}0B%{Wn zl#=B_jlq11Y|^4sRc^(FiVAe4+^NH2Lm<3hVbZ%ZQbAs-Ho37}rdVmV*#r_L9396c zVa6=*Y>`I$GVB@cVt%d4`RM{pkg|=QHphG?2`t+m#guE)Gyba5P1UCxfO=t_@WZ)dO1FbW)a$6BF*?YQ`wh-nziES6bZ ztG`Y1l5yYjqDN@f2IG z*chguUUyhrskQC&`8s*6?$EGX7bb2u>Gn$xrNLWGIbk2u__|V|A_0*^3+O-`&m6eqyJ()y9!rxLlxGvqN($ z(3v{v5Sz~Ht;a9Gzt&8YYlip5V;Ox+%`wl~+yu}SiOrJ)lBVFuNLQp1-{ncNQL}k* zYMq2>@aa3o$R{=jOemvvPrq^pZj0z91k!c6XGagYq=DnYS5D0{ zU#thwox`S#Qo9WyDAyhS`^jnU81E*NFt}$&o^PIB2+(Z^L9OZXr?1VjTxzO72{8gz zN-zQ?OWS z@IPLk;a`2?AlZb;ZR2@fGe_yl_g zGgzj9D`9S<#vi?KgEy{k@C)~h^V4^Xl1>+J;|KQ_W%FDQ`X!u8cEUwq*PC#Tl=xqHU>^zm`h9wV_`$%XkLe&>lxtd?yI!&4Zf z2aiQt}V~*I7z+2Ukk^a|!;*V~2V9(lQt3i+u8) zN&0e0?-F~-YN^40d+rK9JUfpi3|tf=o#@N(n;$vI^XHfN{qLXW=s*v@_M!cZ^`uE! z21(1{7w+GU?M3x{^V%w3eD*58_V8XVEtL58-#e#VY$9Xnx^Q5;i{F0iFt1%%dyOUg|z0`cdczDjr6;xqS6@*khN$~!lT zVdF-lFX=&}nv($obX-Z&GWezUPx7&2!k98^U1tDlU zl1uX?{^02;rdO&FVHW9hMEUe#vmME$`ARIq_v~3{mFKSc@w0{=+Ch6yLH-LE@2p$B8lTPk#3W=1wgI3fb?Tp z>a+t<^9Lp#l!NP-{5Bj;-Um>=?~4K9mLE+1D3YSgESE zHyQd=!r+}t1^)5Be+!B7`0~fzbtP||Tj$K>0{uNH@;QrI-C=31POagn{(8p!rE5jj z3QbC7o3B1`!$U?3|3bj!8zuhbe>xpyR6#z0#C6r~uD`>1;aZW)H%j#96ZGbj)ank4 zt99xPH}G1Mz?Z%`#sB=ywKl_A)#@#pHrXaU^fNyUL4iEC&nuc=-yY zCQtu(j)Y~fvRcP5;q}w2{O2!S?7Dy}iP7uPoAZT&8Es{Mk3Ia_6o6oWD}! z)aezb-(O*2sYbow^2X^^O64Y(ri!?(%Tv$Kfso|8l05g)0(INvj$3+}U#gN?Z}9zR zXSr}i9ksgW*Z?#06~6t08Kjgv{lYxOvdwLWdyx{p_oEqJeq$NiZt>SR+#?I6tnj#J87ax%o-118;>`^2$soe*?`M@mW3G}z_u2B58ocx4w$4KA-% zxOJq9-F+&&`l;C>&rfeKzER~<&s?Oxpj-wQdvkpA!F@b;eVym7tn!hAgX|s1a%ecm zTeC&xiZyokW!c%QjDYElYS5oy&&9-bWNQh*OQvCPaHtC*1T%#yZ_O4-wOwtbOJdcF zq-AhnslwUC5_eDbux}tsZ^jA&eF0ovDf8}pk#xdPA>Dl(X?I2X;3O@8^hQq$|lLEN&UeabvB_^m^HA|MZo>J=!0? zv}Ls9xP~f$3Y6sP_>*dpq&sDDWW1ZZcJ*;)uE4k7m|>+<=eEfnK6PRjf9InInBS=K z?o5${DLey1kWHC^2f$LH&bQx~0Yh+nPe1qU>Ej1y7MNNrlduHSs}*L}Dx8}u@_|D` zeEnn>7v_ttz-Xw|+=hgQjtrAcTD*9ESzW;s^0jUs{(#Aco`h-Q#DM|+&PVsqn@#eq zHy3#A$~vXG%|u_CpFKXtKl`bJoS7+-Ng6GeZ*REt)jsJhz3LIWrMKJClePHuhj;V- zgZ;dCah3n@#8oN{+rzuduRpwtLt|Zh?bTVHKfj7A;Ul*V@yX+3JbvdWUwr18wu&6p z!UZyN{;ste?He32nAW;!Ugk3(ssZ+z_VZ|pCXwsST5FarHe^;M?7K|AW;icM<#n{*be7s3N-E3 zae_dX@?Z+&p3ZCHwCRwEtRtueYX}JMQPhDfQj)eY^%baqyuIC7$rh$_n^?xb7NWf` z{)Z-TgK<`Yu@KTbW)P)0y($k^Tb%)ox=cvoj{SFZomEAAIkklwX*`l6DWqg*&vY@| zB9xFSCEGC(rH)Yjp&(?PV9|RM2U~=XMTa4H?&8`FT;X7v34~#UYuB!q2_DAMhu<4X z?6~9O$@7L0gxnk3?}^>K$2XmXz_gM`N2oi4BW(q{XF@|izPF4F^>WJ;w{x@wxkoAp zS_-4Pg$2=;pTHpW4MgyF;^JFzT&aQ=;a@e_GJZ@$u(nZW*)x0%p(6F#-c`%~mAAczjX_ zxcf*yBLgY^@GF;DE7ZxP%(fj?S9*AfH*dU0GN6HAKU7MV*Bi{QcnbiA5soq~)y*Q< z;VL!nbH8ekP-{f50*pyIFKK(;`V#1-M9E7;et8QOj>|Wmyus`5tg>fE7X!UX2K!TF z(-z63foTXVGa4XGE&4l-OQR{NHyqXr4Hj2w%rDotaHT-4;fB1$3ltBeu` z({mO6_7cGBn%StaZ!k+wCPB(FsoTvC`CDV>NEqx&kV~4ZRh!hB z4pE1o_U2?DymV4-IxatP>o7lk`zX&}TH*80USqLX_agR5&MlOAXQs&C`oK>9`h62z zU8(Zg^>r-&Y9|T3xg%>8{lKd#yC4y2%XinUCCr$hKFt$=G3({E-e;=^V3_CT1#mL@VAWx(AS;f zQzv%dO2I$-i}SpCWsQWXqE?@qE%CyIH9q_BP9DEwM8Qu)020=T^c_WyLfFxt<5xbg zlf6S(zWVYEUw(N;T}@=Edv3Eyle>2JaA~p3H(r~kTz5dgpFDSi^Rp#p)~bp(wDCI` z0i=a}O&tc`ScrIdND1S;N%jn;Sz52MQfMfJOSXcdv=K#n6Tv%OO^#D`O;fOEsEeIL zS#GRUSXi$|7AImfdI2N7Y4(hCv0A9JxLzZnZ~w;W6cW-&lRNkHkw_T4b#;wmRlBOG zgXSHf5;|rKr4BMkwv4E@^}N_x;@a?UaNGuemUzS$ZPhL~ z*e-@?AxtYmV^Kvg&WO-|$IngaEn4Y(xWzZ(p^KeWAb$WNgqu*-HsNYzmEqqqnuCrTPqM9y23s88_w);0i}a04-~H7;hZW=@OT&7eOlTDAPOJEQIiOwtboD1|m>O0(W88w|fk*ylb-j4*4h+0_6dqjiW>v z!#=Dn9Z&+2gm(p(szcJ1wbUCIQc06^N(M60FjQQZKvkC#%d$W!x=3W(@#&Wp0@5jM zq0d`5(y$eSb6Si(Dl*?o3b7c~YTFc*q5DQ6N!J#l3_%k}!4)H002{Ig{k+m+{QEnNz0^W zyTL`%>K@$45P8~@eq-Utjt5XcF1 zmsQ;&h%^wPVV(KJyAXKPtq-|W6U{J$I=>jBe?=KoT)!MwGTfcyXKo*5p;+fnUYTK~ z+$3$8Dv*|CkWLs}Uas(GCugx8$O>8mEC=<~IMOaY#vtfRt#<$;`p<1^| znFf}Jn|G$ynO(1PXslb|ByzUcPlhnaCQWiFwO|5jcP^W>$R#c1elG;4r#Cn^Q{dqv z!`wR2L&IsUtTr8&kKH~-$})NB;xeV0tu-V&5U>b+1k~=GX>GbLckS+D_fQw#czuqy zt{3P^TO=)Ikf)O-u9W=Ab2oVFdOF@9E{YKDL*Ue2OnTd!4Vm zGUMSyc!F5X$+dEmd?vxp!HkR|b7BAhAOJ~3K~xf6p5S`<(i%5bYAxeM>Ju{B+t&OK zb~T09Z*5oFl`cs`a$q>g(TN=Er8*a8i`1KrCl55{D`{DBdXmvE5@fq^g^E5J7w_e7I0^`-FDG6;&x3#Z7)fLv8 z)e5$N)N3-zill7EOtjYMoZD7=+k#)j*5vPIMAX~Rh_z!dP9kkWKWz+bbLF|yt4Iw< zz;SGxX5Bk88-;okkUO;!8MJ_9M5@yN$B$3Uv-hHi3NXwBrj-cS87mVyjn@`%MJtO@ z*E-kIDjPNALO^W^11)_l4)~7!l>~RSYX8(^69N2wA8bdme`lWMwK{K|U*Wme=Tz(r zM0Zp$>+ugtl(DQe9{BwWn_I)$d=YX}jURYE_4--3(tH9(Njx zC~ZV}j)-Q8RX;YLzny`Khe@NLP=3D;mSvDhnq*QY$%Khvs9<>N4rH($$NMi;uupBH zFOg99Ag9x+Y@ojc9&Ldn56J{w=h>=bejeAw(-Wn)_@LLX?S4zeS^Nzn|Ej)l(&Y6QYh6_PI0lNQs%UF@G($1#*4Xtlw}y`E>Bk5Q0+OrP^>H zn_x7bB4G#`(ZiOp!=S?B4||cQt4)_;!zPnV2Kh(2Q5d z#Tyr$prY^?0xAs$+i}Sym9g50(TiKgk!YhWA=E_NGmvGdJIRZe*SNY|CS{ofcL00c zFb%=^g)&!`D;yljG1Qgh`dZb4MHw*X7s{<29}mV--KNrTIXhRPP_tEtcz zp(zA&>s1yvYC#=-TTR=g-gL<&Eeu28xE_;~5yM8bBK`TTD5czIZ7Qu-8vO9g0(b20 z#p$80Y#*nRl*l;O~uvjhSfwdUaXgtqaxyjqp z1uRn#3BrtN3MvhkSFfzIYcSKApAkh(>OcIt$GSN@-c7CP@cE~%a(=GVwvulMbyn-^ zug~$T5AEV_KC+vWSJrv+dVy<86^d0`iyRph%Poc`Je;cQk>c?I;5ZI_8H4>}Ir_Vj z%&%6tFjt^lb0WJC8ok6VO12rr;W_4KbtMdTB{?{eC!bAlW4XfB`6BhEY;!5|OS)3h zn@ezTtec^HnuU!j=VyylYWAiwLP|&_Ob$=x>FY{z`uYZQtF@4V9;;LYLN+eP&8INl zbhRbS(6&>1XP6?)(I@I(;IDRm`M6zZsi+APIzlMej6Q|VZF z-m!|C)eJh+sMDmbUu{#lX|FqmUu-vt@K@RTLv&PpV?xpzC%p>kszrI>x@tFASO~4e zO~WW6pMCDp2Crm-^);JmEv|Nb;^nw2_f`# z?3TaF8Z-a(GEzk9(0PP5|3d(`zR17`R-cK4!5e2+ID2Is$B`7uO?(7O>EJpxrqw!M z9&IOd)S<0kov`1k%W)+uUT{cX%yeG7+ba2mWAL^GRAP(welrr!X1JqG8srZaPXhH~DG1Fw|Q}>wU{A+vm3oP}MH2MP~yz!0&q?(9TIChR9gju4J`p z)0;_4v&(nIUJo@MgnK{4D;&#A^Hr#2lovi zgkYoA5~E$A zX*e!>`!n1+))nM11k{=?mscuG_NKkFw^`ntDU$S~C&wVwukYYsjst_r9sJsAg=#b0 zj{`$F#(Pp+U8x4{ym5?Q2&gq3?%L7A?*1$i}s8MdH$iOXf zQ#;cVW!yWie`QdsKP|&d0}dG&)j2IP7g#RVHTUQ(xPS+=@HJaqQ4xavT#}7ylTyuz1IZJ39cwBsT1RT`o0N%>h4iy*J^z2Vd`Qxn~e7*IXsca6oPZp1+FcXg8O~rP#5|kp-mI%aIdsKHv31r zI53{Wb>Zxd4Q9P42!Zg@Fo@bBavRZ6#d7&6zf2S13E4BHynZyd41iH~F5gqU8j<0KT z0KHFrML$&5munte%EckXGs8V;;~4SJ1KdR0^`FVuq7e}tsmX(O87fh8hjG;a{I4rGu0%!f?H4(Vbw30H9!xXqq10vTXweoBqtaifdlp%%}$Nbi5He9lU@)b>O zOt}+W`uk`s;JD?8)>}ge%GD;7s_l`S4AmuF8`m{3gsFiLqiA&oECQu=t)TzRAauoH z=W6^0JIRL#PPaMkv7Ajt#xhjtdu2ZHX*0g#OOe>M;P=1_vssgL(gJS`DwQUUrVMQw zs=9rhUec9KkV>{>SgEXTs>o){fHyaqF6D|7hQ}+ANn51TW}q`Q8V=2-OD1D^HbR)k zM3WFusXD=V_nS`tyThdod5Et-N1e#e-O&IJ^)ot=VwhG`FpDTF@fC01AkdXx1P#Y! zdZWso{tW4a!B}^Sa>M1#xdQtJvOy1{=hOs(s%h}`yLa;9;SnUTnoW`rf`9yhT^tz9 zs%XQrMXs(?d1QY-qxlrBE4jK>r5?EtcD_(o=QyMN^Aygv=Zbvn&;Uux{`vPVc-QcR`{UQ|dTxrJxo3iurJ})}nJdzC z)IoWn=kLI<8cm0j*Vg%&W1}1$?`H1oa{LuY(QPKFjCsQ|plom9A*H!BwWg-HnHfcTdHEb28-`6eux!rc(t?#XXW-tbFCmiIy-xIe|wI9@QK4bdiyB< z>FJA%_h$LX(P0)gYCLmh(L0|K7U7#3!oiS8ul?5UqbtEO3>9$84=Ekd!leXD_;)%> zC7eCf2CAkumcEzt$t&x;dU>6H^b`B}&5!KnKR$VtspTrBj{||4XHxB+eEsAc&zxE2 z&fPuSf3Tku`}_FKkM1F137$Kbg-r*cacJ#1OZt(8) zbyiAEbrn&YBIF&D5NZcJfYV2YmecTv!EwW@xt1w7Jf3IoXg6!6I`3TDV71)v?s<+; zwWSK2wQH!0qdR)2)NS6ny23)C7M!;a8ja}X!7c%6ajfPo%=LFABlAM7Et}p7cXvj4 zE+{^BlM=CmjiB#3wJVsqd}^(8`^JnAvc(^W6m5GDlPOeC$61`B>nWZ>0LslUklRAz zRY6U0Dq$z3Gx9!Ev|Y|cdeLTfh2BTYZuNVs6g}*#i9w&HI#n5w676to+r2Kfa9piu zoVu+{c${<`>f@k@)ZZl)hJ|57!_(?Liqe#9&*J@#P*yBnblk?GC{kxk%aK>%V_d3E z1Jg?5*bSs>M+L6H_Tt~@)S&4V8q-qr z9>uI^^+AKewHt^;3V{)in>cpS32F@~TQ0=5m)`uR8 z4xdIsMReiQ()FVAKc0wN9qp$%T@l>|N9Q>g{ImG_F%LU2LHz=_wxRGhSc?o zmf-8(yTSP@1%CZA2k7Zew0Z04eQ;eBXzRa!?JD1R;s#wgOD(Evy^fV3!F-ciuij(o zgys&sMgP9p1r{AE*c^_S(@`OyWJ{X)KnP_BomnUc*$=^rj~p06N|-Oz`R>_8QVD~{ZW#uk+;BKOSJeF5 zl^ejdwJOcfK~|-NN&yK0Z_O4svrxuyUGARj;qN}Un_SYn2FWu{TDwY;q$&8N;}d-3 z;2;ti9EO)JBu#@iXA4|fu7HI5clYw^_wOWanE^BQcQB-fx|C_~+4t?>;r#|Z=9GUX@(D^6Tqrmet+e}B*%C5U^_1F&X;(5w%B$Duqxcn zy`)sTxGztwQ>;5Ye(Nw}J?YT>wz}x>KV4VSm$mr2AKcBIlX(mQ(`z*vw#$*xF7hce za`lcX=|~vNCD=Qdqg1z9E;RyLkdl_saicc@_pTXiMnUfQad*2rCAlbkStO@DSaZB;PqT&047uEMA2A*oj%RDaaDvB}%%I>6J3W`6Q#gso>m*2!n|L_6%j! zLI5axK^ICw7veJbZ)YUcC%FT{f z2?+$XrVSFh(#loRcMfRn+^X^I%2>DvYR%SSm}#h;--*F2*A`2>d~t=&$;)$oaRl=7|aYZK!PBGNDvI7z_cZik|;}} zMQOEi)mrlIR_!0_Emv)MUA48Y^;%NN(z@(r(V`?vUP+`#$|NXK1V|77k;5QN&hzG_ zc{$y5PVXO`zE0lJGM;*47VlhLb@;jo#AFe0Avt&6!%n~;JHKQw zf;&mAhgdBJqI#g%mOJnqdLJOCr)zkMQ<8rmdiB^|QVM3QT4M&pWN$TAj> zn^17QC}TictAlx+dlR2(LTN{e(5)UE$#CdcJ|vV`DQ}*3M81o*4M_-HV(rTl<;TS+ z9C^1BT{TFubq4yG|0^iZ5xTtuA6ivT;+2|KUI?GP%fadjIPb+jms2Nbj1j7PiPI#2 zttH|lWp%=G2p8BMP2k8h0qQj-&NZqhxIDFixrG+$HL>)0$F_bPIXLVr0Ad&(s^Q?? zLDXvueT@X|4#!)kSD+4JZPXL}ua+|MPYkR#>f(@63Jtu;Bp@j7fU=IrDH1UnMX7S%Wd;k*zHT;A3?!m$Fe*B%Jw<$N& z4%AZ|-#Lg6ADzSpZxQr1S~BA)3Y0R&;C(7dUPB9{?q~zrVjQJ zhoIFHhL7F89lJ*x`1%{OSlAGqFsp;-d3+&(>gp2T8guZ#<>p?IHP9gWNt%qwX3Y^< zbs=Od=NvODZR{NF!*E}Ujb>L2UT}_jn&5*+w_&g$4(9ULraDRkSf1P;uyA?s=K@4g zf#pq8)9kDi|3c| z{JACEe|QXojT%-qy8w4;lX3W!&cU-T@~n$I&#`l?56Ab8V1BiU6PK3deUGy3oc&sA zWy4l0!+NuWJre_%UfROyW=9`(2LKt*F)~=k-fe?e+w5RN9!kbJux+>x`zMERePI*t zTw6sqQ%k?eND-;7Jm(l268H74Zg%m`)fH^EGO&c{J@b@F)dmS;m>8}jO%p7vw2&be z2Yw)TQka&>a*nPX-0Z6J7((EyEKpD9xEWG3B9=wYtO|;%g65p>+9)VHB^q6U7?(R? zlg!r`uC?bN-J16KG{^6d=#iq7m6DU9c#QQBDEJPKEryYOwQN|$$g#?B^0k_e%ipxq z;$sH=l^ZPVoy{P>=UErXGbBk3NvigCas=yu%l{lVVJ*p~hMBwaVagIL`nwR6E;1&r zNy@X1JR!OVJ&*7gTfI~kf{Svcd>YCGB9b%R|wbUP(q*BSiZYP8Wju6kTUD zzw)LCfEVUPLGX)sV|9WR1JqwyJaDZOE;Uh~MyLH166S;=#kgKwrf?|dSY7Mj!sT@w z+B+l$pi+jrkB{TEx0f`rEX#3l?+|wH9MEYmUt7n;tLwPq*cdp(L0L%>_c3}7!*K6a zc-VSJUiP5VR+AOVmmQ6^aHIq5yVfGc!op!3gg0{)FhKQMf(wgVI6c3P`}T}te4vI8 z-#USR^XwYFb9x?+9oeQY$EG>uTpY}kCJejfAx<3P4y<=(H}IDyrt!k%6@2iP34H#( z-NBkmW1ybkp@U;MzGDb; z>uoGVwZS>V_+TA-NBb}~P(wXQ(9LuF&50R2eQr_iSr(eE9P5pZ4kiZcs3i;^ zI>0uIY6~k{9poI?HrT-4F+;E2&GBb1UB{0vEgPZs>|fXX+wb;;+PqSvpH& zQF*nx2^JyU-UjEuKqJM2N5=8RM-O74o?5ew5F@QgP<{D;}o5(q^XS@%$?i|GOW=GxwNgWV1Yvw>O zjvRTn3!aPkX#(sV?-#2bZfqjUa`e{|YfMnpCC|COJGzr`T)nZ0yAF)ut^;E@JH3Y0 z%?`3$3@%L!ioL`GjTC3Euc9pv_TvoLDQ)8HauX?INb6GWk(vsT+^Q?Q_Dl?*zmekH z^g24-T%H!rp>7GL-nk=r+%eXN+xCs3znoPRKTn#4s zpe3BX7{&nP@Dcrr(x$(uVGMOlRJ0HPf^(3hgL1660f!k4Zan3G?RVOgmyo3Zvr=c} zCOcA={shX;jJOq0pbWSSMWXi<+(f36_2lZ6~Ju z6tOKmw4_ZiJUto=WOt3{UKwLZ(grx>zF_gzrBI!}ihgv{YO#jJe{pbp> zn+LVGZY=wVEzUW*-Q2oWqb}`myW^ixBXaH{NjcKAj+(rB$L34qKug%|W@J#5qgG4A z^*Ky+ZfGY5XmxUNV*nGBYBez2itX zh{xb|%`u1*m+2B+aT5raTMdOSC5gDHBuyfH8qeN_B87d6-tI*HSF1MFUVkeE;g!tU zSkXL@3UHzjqOd}~|LJsdoVmD)_un^(k)awA#&G1&2u6qMSY7Xkz4@Hu)vZ^*>j_s&yMvE#J58J@kgjQ8vr1q1N&_w2?~=a=y8rDZTC4jrO7F^Get zzVga-yl>wqc8@l|IWWE2!aH;8c=@UTx}UmZ2mayxd$DbxjwDHNVrB(TonOSx;XbT1 zI}*e*yg9vw#m!E{O_&n5vK(J~a~9KUE&TQe4r0$pKXwc^uzj!&jv=|8KbK1b7?w8M z_|gkgxNG+?K6S?q)YC-Xn<{c@c5?jX>ob^IZsNBdIe@)m{n#ZljsFlFx6L|LG63)zR;5Q#WfXSgcb`JMp$52CpY$;LFAYET+;s1H&GJbq< zNrF;FNjX(OYR8eRrOgh$^xRcUueR{ThxXyu9^8kYzi&6@*4tQbb!u6FV(ge6=atM1y`*3!C z1Hb>|MJ#Q!ktX8)R>m0mgH;uO1@oK0qO33wy*B|$5Iq@Bw9 zeXZG8h}+)8TI=hHRj%>r{?%#v=A0Ef~`3>wD@5ik>2Jy_fCA|OeIEETE zy{{D<;$%N?G-@g3f&g}gMw-YI(;<34+!#pZJRxU$2O23}zr2Lg*H`fm9yyFhj_p7# zVK_Uxj(`2FQ&#yl+g*JB?OFWJ$B*O6!UmptXAb@K)C^P>87Iq@Fw~Pow1qx|jOqGp zwKM$X^H(uG)Q3;ry9*z>Z4zf@Hqh#1IJkWPyGHwP^7!}#n2doVs&$5)=diWkl=;fE)0;G=i#z_DG!I6JeBRyW7p z`$sT7)WCmy_8OKq+hV^aH_FMuz&Hn&KqAk&;8_P0J=D_#!+mw6NrKz-e3Sm zhw2z;q`2qMxY<(R8aNJYv^sd>(lR>T9AiUuBn&vRdl-jy43T;yt0z7+LZf{EbcE8a zqYjg<*5O)-95Re_s<@*@f!{rco9YDGp>XE62mBKb60AqS4}rz;usTJHc)05F~f2-sZWAz*wNxNyqIxxZMgyV(8i5#&B`Y(P*T&_m*uK z9jpV4q1Eo<#Mvb<01w|cDe($997)>|h9s@y($prd&u@yQtbzN0IRy5*``9?{JTi)r zp}M?kX&Fm}LlOW0AOJ~3K~z^~Hjt!D^|HVK+35fnLFc|@xc`m`+&aQ5<=@dF&#y}cht4~`&77_Lrl;QZBf+;LcT2k);g%y zNGG_0jf&Y9uKzEw!cHE|mRNz=s3&BAf=U~`Q6pwxLlW&rJ%4!}i_0yH$bGq!<9*n* zV*sn`9gSP>IyNRKF^0{pE?$0P!3r$B#{7_eh@v_QK#SY&7wsi%a<0TXVR&)Wqys3zrwS(Cp@zUTx_S zDK!i7y|W8=?fM!%ch4?-_~@;~Hqo!{I+L{OX@Xa;tm2=2^E7_p z{yli;@Hh@{8wVf;HvaU*DLnD^99FkFNRmX?UzX)KF|~?`rG}n4)9f>G$lAI24a}{z zbbTvXN*TkHI*UV@)1IPSY8^8PA^Z5Dq?ZG2Q#_{N}Ni1)5@F&kt;RmM{v;pa=CAJB$*~;+R z1e31%n0wVg~f;!WJ&htz&+* zMOF-}%Hz1P*2e$+#07l#(kec2&raNPU_=bkEH&|G&rRWLFHhs)qZ2qhwT|Vju1K2a z$XJ4_H@2|e%#g#}uib2Cm|AS&!rUhGN_lPu&;Iqd&SQ3^g?kT-;=!Za@ZC4(@CV;G8!DLqpzlg_uB72s zd<16c3@ror%1}T-2(?8Sz9-RWiFGnr?-smpdqNe11>-DqYJ(rIe`oPx@~6$FZH!e1 zZfWc%?D`O5HV-zc)mJaz!zY{}o;> zTK0#2xARc#U^=|&^l*uUr4M8z{|~%p7rywj$1pb10OuT2bDQ`V|MpdYGyJ1pxE&K? zp*u26_z!<`5!dE6#SIPatTzJ&`%--2Gl%h^_w7WZZZ?{(tab3$-@Ssrdu~SF(7}-B zId)I><2QfdR=nr739DXz=@SR=rN6p>XJ4NW;{7}a?!R*azx2t2sMiy`^7bNr|4&XM z%Y+Z?bU5z3bqxRgFCPN{{Owayc`0`Grm+WQFmrT z(R2low$x=I+{JiUzR`KA~o2>1+FHMlG`lXBvYSt*hn*u0Ob#|sPsP=>$J`*0mK#;~y2 z!SreiOPiwOH_%rLEcd0*7Z_}$m|tt--#>Q+fBpJ2b`Cc%J}733ZftZgzt+NvyxX*| z7U}#JS3@ui)Kbi>w(#$sxq|=HUl;cS*AjHPIX2swxQ91k=&z?5jM92&q`=%-3xD{7 zOZbz48U|_!z!Ge##=QA?N{q%fei)y?s5e{=;5kV``eoZ$?M8y)F=vxhmRQE4Pv2>6Iq_k8hs?=RjX0acCxZXL=3)`#0C&E*eQ7 z1_J)glNa%)&(~2;6Ku6ItjMzc{`W45PQA=CVGK9c+xTZ+eH(eV<5xHncR~O0(-*^E8|E(F($tE+mDsCe8nttcR9G*V4AWjEnzPyr3&WSk;Hc~Jq1|Zg(nOIszfi&r_@H|7-ZEHwK?<{8!`(4jmSEJv?%j*6S zhnZ!yy9J_d7{kJ96N_stak``AwbjkRbFN42O)7>{Q|_Tsrra?#R(C$rcvk0w+vyo& zSl#O2)$@x0#DRus63CULQ$A~9y@iGKmgc)engStK3ZtzQN>s9OiWf%dhg>;rA7=m7 z%Qx(}`eblxwTMmE0GzmeFKodIQG(_GWx^Slerb0ld4j3rPrg^r1cmc*wUh*Q=7$0>L( z<2ud3(gX?W^5C!B?(8@}t!lC;M{;0xt;*%&z=a`6RTB-)+>MF3XS^a_6$ioGa%1^&py5n zpa0Y$x&xFg24HEqjjw+D z3g#D@o_DgU!Yxb4wN(w4AcX0;gKzrkO(&QRFyWjGW_W>ut3Zd^Fh~>lxHCePAp`Jt zXKvuu$w9sE_h;|iiFU^ES0`rhSWlE2YD$+r1A`n7^w`?gdqj6(aNyi zGU@wji3cE68r2~RQ{~9$-6GZ(@vQGRWlCWA$%uHF&LoYk`~3V>Fpi-(VH$NP^= z;M=cHe&Mxa(1>~o`k))-qG#RUr%KH5E_66r#VGQgr;`DLEUEZ zz&s%9sso!C8Z|Mfq7KIrx|cZY%DU$A6wWL&H5W#0bk(#bk<)10(6obUFR{<2-N{T= zjDaPHwn>qLcWWaS$ED#uCt&EvicSL{$W;yX&bNbAxFYc!S+5d2u~Y4&L5n&FE=1G; zIzXhi<#v1w5_KkoonU|QDGToXtuF;2Djqlu3Q(nzow7w5?BwwqH7vLnvRD2iGu)m0NkY1(wvn(wdhuO&f0+MO*$2 z`S!~Gz95%Ce;~+hS`#6u_Zp?iLuPdOIC-*xS3l`o?cAZr2U7=Jb&cKgHXl&g?) zj=_OCUV3XDC(bP5qYv%H=ull_!?mq0zVYN`u}@cKua>ud=COkSI2Kpin3`P$kfGBR zK0TLqx!ulj_t8;&>|xRQow?D(_g|R7{8Ago4~^i__wB&wP#vFt{2*RCwT#vE4j#CB z8}2wVii9!DEHv@`=V!69-p0Mh#_`a-lc=Q(pL}#L-Z{U5rPa3F-e=bpgW7sVTS5Nf z%*@tG*?r^mGFCS_=yY=2dT<2y92ZM}CZ2iuhPXS|X|rP6>}Zc?bHZ}O zIY+&o;P~MY00PJD-Z6mD;W}2<+OPzuNDQqGm%Fxu+9@HE34nLbE@N@IjlH`D#B%h# zLl_&WVXN82{r600($jNWc<1c0n8*qEhtc6W?m9m1lna=e*+ipJe3_8pzu;RzrBf{l zn?K8<~2eYkDM5C-ZAK6m#{ zObpcV=dWGIAHO_>XD=HrT*# zKd=uUJvxce{uE1FU8D)HCNGF)LGMZV^TD$qn!Pl4c=iZfLQPg8USkS#VITewsy{XI zW|o?$C}9uheY5l>5}b0Vy|9*?a6d;?GVW}mu#AHe7uTpWB{%VQPaH6-=+=@1Kli{s zY_@YeclHKaos8^X7cm)4P!?i*IO#<+`(Pw%rid&T25GY}?byi!F#Q2WfwVfN{6lO<9&!KAL{H`I_=h(1ym|IODmxO?DCl#xJft#Jg!Re&`aW7L+vB0 zP!O>=c-{fynVt={o0aST!`?7ZLDjOiixS`sKwyt_I9N58q)1rbm_d1e_Cqjfy;p6%E<*^k?A8O2L)E#Tx0a|P{Aj)aLrupWJ22gXP1U`&+ZkH2;Svp1UhfXR{A9vc)4sHp7!HjOV7LK%`u6R(ch4~X;`M3#;QS)iTN(Om3I5=jOE@q#fYE_E zc%EaeondOFg_+eRR$Cbc8z~+;GJ!8Xun+sj`Zd^}T4`dl(%!SUiS-XL;TE`!(h9Xm z)z(DdeE?uF&H=JixC{p9Z!u>W!T=S5cDW8H3Bj5u81rn8tYhw`ic{k5XDCx5K5|Cl z<+)gvmDs1{`h^QrLa6-}ZB8#eq0Uj!ix)$63K`*FM~JAL$BLpslBm)N(KQ*iI~g9m zV<#RsGKrVYFW|!Lx&h}dVeZzFd@7RPp!`tS=9fj2mhG+#agY`>@w^Ch_}1%iI8iNv z=1rb;kaxRbgG=qEMOW5~*C>HU7JjEYN!(89@=>PmHx**0Js`qmd2=9ewRqK16uVlZ z$)=m+H?LXRYL-axa`Ya`GMFYNb8zp&D@!Znc#wA`HJ9pD$Tz-ukJWD3MhOZEGW@0cd>$Z@lbs(uD z1U^d*n;W$v8_`^1>6OijeP#?`DbjjBvTn;p;K7W{LlMiKC5iG7gUkhlEl^`u9+d|_ z4@Wum{i0-#FbCA0O3vN13b=@L-HhY*TgLH$_wGWsn`3FUji+9`j^(vB?m4y%zw^t- z(bq`uQ}<0G&pDoaaSl7S^+TNX(8Yyo>&Q7r0*1|I7gwe?@&3Cx8g+)96MaY$hS4E$ z5_zkg;q{Y?U=W@0`NbA4O>N-Vp%FCdiH>L0V9z}w0G!F2O~hF?dI`9!k4&B_ok7f` z9@;mAG-23k<@oZ~F5vpi7HTzvw^r9X_{;BH#&fUE+?ee4v!_zO#ayMh0uRaCHM)&2B{lYs)%w{_5`v7pS)k$THx?Hx}^mNB1B} z7zX+o4(}Vr?i~ZD*F-&UwKAMMzk-Z&)U3THQZhNmg)8g$n9y;@$vX_{Cu45eDaaB*=9|Mc6Z z@xT4_QQWp;2mr?|+XnH!e&kks_O4xc;`BUTzPf@d%T1iUu_>zBIw^kp@0? zY&#ymZ4!6x8bQh!y1Ce&_Rj1&{^;2&SZikT9@&DL^2!HNCf@+sog8>Nqzr?%@}>fY zDhlF0SCT+%u+S`Xhn0xx2AY@?rU{`Qg9bH@WsJFsLbUB!*D?<-($Iqu0O@}qmh&_9 zE*DE$!4jD55LKKqKu#hFC^rvN3SlBi!|os`a7IDB-M%r*Z5$^|^~v~DU8&g<+~9EFJ?O zI96$He40?kSNB;mY6}?QFOZtnvcrI{gjQ5$XsaRz_;#RGX=(h-N`ezjwM$r_om_o0 z3CGt)_>6&5CCK6L?(Mnu6M1VX0-UlG8D|HSGV-1S-Ux-3#qjnQcX_yXYa1u|0x zH#udMbA%@9LuQ>h$-M+Fiv__imTiyhc=po7Sf^6kA=$VF#t?%V74HB|-EJfeBOO^UBq#7pCrr2J&tjEXk47>hK{bClqLF5~T}`r1cnd6R4_l zO)@i{21*biVI3Pql*;TT^oOXhdnaHIwZp4VqF_E|@9rn^+wHk{N z04R8(N4&;-lCpWiQxEjl@c0M!V{D{>G)eIGxka44w1RFo$6d#^VQ8R+b|=F?e+|2L z3<6L$LWr5;PFHMO$<>xEvgcUXDq~YPXJ~iGx17tvtZWXo8;ps!haCc7Kw%%w<<>4+ zHCY05yBs^V^N@hAqft*C7eaKB3N90KScU?jCk2_V9@Kk?A)tSnGMu@vifhvw z*tcg0;K2R&Y(uk|K~=%bToV_sZXjhM4cCkqUe-1`c=q-Mx&^|ITxq7GIY`I=2{tI{w=Qd z1)-v&v{+X^^gcxebBOVWGU-*gVUfBCSD1CIj0Zj#DB9uxc%FghU3sZIrA-Ud%RBlU z(4<&#-QERDK+T}5Ih8^I7|{VMMnbg|xP8$rqgHG@VNb^5hk+ zNVs@BT8Q0Hg_HM%fF_b{PoX#Ui<58|jN*^VffI&cz)zqi=s+Yrx=!;Kbb_S)%S6uQ z$x3hN<#`vpOAg5LxTTB)T6h?&n-!*2N!|Agwi!ciTP5gICqe@a4_N zz;2BoN0eBk{foHqU4gC@r@M#>l``85TIywQy7#3HW_{Ni$(eC7E z)Kk2E@&v0GaUU^K7Xec~ z4Gw0Ep|6o*a3BrD6iwA?x2?34V?b=NTi@v7#n%_`+1=tQszdvS^lCrGI4)jY!}3a7 zFBzwmq6TZ~wFKiM4fOZro^Rj)TCEJNb{5>`83=?9Sh#qr$w)O1JW*m?5h3Fk z>YXoR1svMUdYWRH3*&$|#2&=?jSl|sxhwe5#Swh$*d*@RJ&c`04KM(cgLQGz^DZ;8 zE><;4gCdtwENyl0_Ut;II=6sVuB~Fdl|dYu=Wfi8mx@AHJzMB~Gf%qCiew_>+x!d* z1Bci%ys**6A3bv!jWofv&kfq4NVWU%7eWUq#zX9tcro+2uHTuxm8YNrl@tw#*@QLgxaH=h#BIhiIqNcSl6s@ zz@Bzjeys;K0f2EEe-V4f^Bg&EAxY|BNsUZIl>v9BVrf}^lHiDDsXVEO02oV=)EZ)- zk>^G(qePhJs$+HQw75eh!caV0m@RL9E;b4bbWbc_`R>ZiNpIxaD8qI=dW$qZNVf~X5ztY1~ItH3%UqOzM1z~ z{m}ctVas7zAIT0RrBjtj0<3R!(Q4;tG*TScJ&69k_*I@s3VnE1kUmW7aO+Kx)F^=~ zD-`pJAf9QR%O@sgcN>iqk3V(*58uDXr^dty%)j^LQ_gz>aur8u%J9+~3wZpoy%-#* ziSjcs5VG0KaQghJ?7Rw&7)h;g_u&J>_?_RlJ$U#oW5D12;5wdqZWe#KNuY7J-RH?Z0gr`?8b=_q8<(gE+L zz}|y0o+a6q1+jOJfxhZMNt zPQ0Fsmy<3ibhHtmJ4I?XHMBe2)CVQXNn%%SLb4bDHr)H+7mRac-L{zZb&BLpY$|)7 z4AVjY03ZNKL_t(l&E5rGN7$(1Q%YR)Pu@o=Q~_Iytzt;w@>U4kwB2*$r!W|Z5#!Gg zb6YncYZWpL?O%2I72;^qD&z3o41sa)|4KO*^C5U4_5NR!p$PGSZ0lvKB$*3ogIxi# z$J6!4y%a3Wsd=jo1I)8F7#B;T3z4Ub96jF4D_&~`Q4!0`5_+ZA%f&V?mR&23;~tBWM5Bj+hv@>Y%hMuLHU(OFIth8(~^f1;P%sw<1s z667>x7#*%-eXEOFB4!td2gGSoJO{en93g?~c5}Hkk6~z_hBQgg;Te)dEV&*WsLARO z*E@N(Ga`m*!Z5$k#NuijgM&33-am|o@7shuQAU0TCEw~t$@zp~oK#VZ@&IlvM{UD_*I^_&BP{V9$d90qr#m5Y^u&%bgbax;y? zdMuQ|>Vl*(a-|Wt>;P;1r9(D|sPs*uC{qU|wV{VL6}YAEfz5V~*RQYP_3LXGtf$y9 z+`!?90gMgQ#9gLb-1)n-*~XRSCT7>#XzJy_q0Us0NvF}o3$HI!;Ff&S?&kTQG|0Ru zR&cCm(Fn80hZ{Fk7fzg*@s4F{^+QNvpBE*7ZY_mt);2H!=dIh2ymDsn0f?o~S=Y#j zCG?~cbQUTe$+J{b?RahxRsDGN>e8jSD)89=v>pOgH`wyyneHO`)Yix9BT%JodaEl! z(3ail3>{eG=msOdDPtADHP16W69Eo=_yY)8b&!^xfi9xSNn*;b`#XrA#L5$$XUP=O zPi|uzVy**-V1kg16HB#;{U;xN{2dSgLx^NTbE1-49`yb@PGqH8N_deq8^rE1SOZCp z_0b8#BIs&=k=KYY?wUa6`mShHkIU$X3i_i%iR0q|J8Mp2j_{Xc zaA5Z!>NSR6|J)I94m|(*4RkYcxAfut!}zUVI*LPkhw#ydcjK?Wa|Pf2;dM0X=E@&# zDOs5uxd66IstC{tIe3!1R!fmEafK?AE8#@ng z5PiQXti#kbND+U_-B-lnSV}HO$AUoJ!#g4K5N6-xYsX9E5`kux_5&dhHheGCkSqvl6b-k9dAyM< z*6ch9)o2x$wpGPotqP!`P2<>~P5ul<#smJ}&&=W2F`0JBEAZ~U5uABfdC6~f>y*@@ z(s>T(St6D|%%@OK0r)MYmTq!yS-71+=yyqQ{Xk3{NwcV{zAW{P`K4Zkim0Bac2qQU z1N)1NRXI%Ofmn05e5F-o^08!!DFaJ92Jtn*7E)<3HD@e(VvMGx+oWb0gEe(p8l)VN z<&D0a(&*yOVAL8&lGM(IR;p(_3Oq(AeZU2}QS2Hk2rgY&*J-UGPKV|u3bUi>m$rRm z@Z}?{-F|_XS1(nUtW%7ktPJ;Jz`_Ph|F7EF*c1yNFreAW@X1FH;Lf8H;5o;SUYW*= zZ_T5>FGZdUiEOoVJo>Hmawwc#`s7BpL%pJc1`wU zYHkyEA05ZhgTr8q;lj0boV>6C062MJ1rOc34I@K!eEPAy*tcr{bBis!_l^lnjEXaM zW)`+EJ-4Mhzp9i;%5dT8I7#*(Tw|?;m9(!O1);GJj=lD3rM;qXrQi|6xVOv6X14?YttKe=j<}{SrHmj*cc&67#5b= zU|^V<*}~hWmyzY->Z9e=jy2%P!H}lFTW6N>;_Eli-GOQM`~$;8w)Kla1n}4{7ev}hUlx$q2^)cr%N(~X^Vn?4{(5?nBIG? zoHOfvxzQs|Mj>teN!@2<$JX@a`!r=3Oj7|knK5`dgyD!C5ECAGbDzT{&>awqMuFq7 zD9L!V5JfB$gb;V`^2=B@p+GUJuFfjO3l04e8&6jjgh`MkQWW6?W`cXD9*Z8Q^t2WU z+2b6@J8k`5oU#cAlyahcq%y2oV44R4&-N++SLSc3qe2o9oMzqy+KpmdsQW zZxPjRE{{i_hKr2toA>n6wIbS_&{26<9WLe+3gL<&&w18CuJ(clO{{VPBpnAr^U-#C z$NER>x4gou$cyWeZ#INDiEkBiZW~DJU`hBO9Y1YB1G&DXAZlg1 zQ|ezB7)z0+Vo$KCSD%n|^d14|)VKK5V|;}w-px4-klbCR8ZvkphR*n4)^BwOD))TkW>a>gh^tE&u+{A1PrrE)|KtnDv1_s)gZ(w!f7do$>TZ@}d9{PD|NS+rt+(|R zMNH0usv61d1E&ElYWLigHT=hKUc#^ZH-~U=&kz#EaObUKz^!8<8W&5g=N6jy+TUHp zo2Qpiuc;MDcI}(L0Si>LGAY=Gxc=zq!Sl2F zU7mAs(zlK)R=-}E+Q1+Dhf~_SFfe3!t~kI7vja5N~;F8j~RhmxPKe;K4!+}~DO!&dVk)e-;=^bOzGb&>i6^p6@I$Sme?MHc@ z%_SQvkm6A?O6gFi#7#kz>5CH7^xnPTndl-s?Z%Bf7iLz{&hBS>cA6K&4CLh!h&p?3 zKCY0z5DPr(faie|>@3g4!xbGO7!9twGg4!|hMXwLgW2)jYe2$E;=f`bDnV$3tPYcO zdp0sw!5pP8sxI0#A)lkcBZw1IhS=@|S=m~6#nEj|ItTA|k>_2LMy6wKOL65SP1h!@ zD7I_0d7?JO*4{{SxYWF+yD4YzE(PvB=qd|YrWmIowC`jPlpVQLOaeJ$-fenja4(`` z9`li)9gr(vuB?;xWsb7C7|SbMnWDJyod(Yn>L54OeRZlenFDfkfe3! z`>uOzOTs|!@vG!h5{D%lQLR|aImgV6EwtMi=9gONcEy2U58b;H8=GCMuC3z5H|KHY(h3qPww$9;OYp*p zdE9ku0*CjG;L7wmPMls4`SBdzfBrhU8OKBSOk(F`Kk7AxRy)VVYwLLGr8&HPVMTVL zI5wMI{N)o@aAUEB2kxH0O$-<;uXS+#@*19fWgh3QtRqcH=a*4gaXqPO4e{H;WS&e= zrE+au$ezfzjtS4Xq8(Nowbx(&VN4$MORQ9Zc#A=V5Q6Y+lXayk=;#A;o-3Gz9&HVG zsxVX=>JU*z{CFt_a+;cb_}{-6WzB^u20O}Mp$=p)QAKDLism^5pN7arLLItCEHrHt z6t0MKa)i@eO6;a};fM{|DIbK$O*$fLhPD6)mGTuMUM;4VkC72c%8>yV+E-j0J#9t0r7GTf2-)TsLd-1PV$h;RUkBi(tETyX0fna40m!g zth&ydN@XqbV}4EB&1c$M*&2K4vni8#seBIotrWGyN$XFhLad^xZ;-lFqW?5YCV62j z0jt%Ku(VS9l}4dvt5CSwt1(BC|zcz16*ufBC=rt7=ErhWv;*h6_(LSW9m<3*1Z6nWfjE^+LJ+c7SHapnd>V`|mfsvs)c1{jp zd9{tDl_u$kC#d)JV{EvA?Gt_IuP4}OW|&)OVq>f8wI}Cd&*{WyLw7FMHo90?Zee3H zGkZWI?Z_ZHR0I7rOpY}$K2k@LGOVq4v9Qv@+D2E)Jf*{Bn$h7pI5@VNIW{&s!GS!U zbJXjJ=CQ9YL93l(X{C*owT?LH7@?sxSJ#QZ;^wvny92EL3n3=@+kWTS7*B7QHW|dz z1gwu+QEvV=&CvU($`WxW@FyVg6_mawA7Q7n?Vn@+t%~$DJ*xYbq2%QqV3D`k1nm-6 z3Tw@tRWhs*0OUDW`}inz%(s15w-FQdM;K+|C3MD>Ep9jvtOE|Q?^Oe-IAwo7gQDf| z7|Rp3K)8!(T`&^@QblmUX1XwDG+0Vv?1$5q07}6p<%4-YwN@6wN5YeJ1qFT2k#}0M zQ>kQGEm`7V^#+opVh6Z_F|gW!f*0mI2TBIW4sh1>_kCMGss~f%z`Fq7J%wKRk&Lh; zL0apB@Tdedd-|_<3qki#P+o;O{zJUWyIrwdkjyIC_75Z-X-UU<^;B>zmoA-X38JzQ z()UoDN^Mz`Nu-D|O^hD|Rhb)D`tG9pAP>F-TVtWR993#9#!~MJXFAW+_9=!a^rGL@ zd&#s_nNB?@WiIIeYZ2xpa&xob#bGVvkKFd~zI*&QpikFBtgID$7y(dp&m85$&e=2i z4n11nP>Et80G!l)8ZFPLgR(rxDiVEFbVQp z+G-acz_1xx-dd{VF`O2S9LXgzsOkGFAD!8Ie(4$mF4fzX%;+{h_}x7^6U`E_w49Uo zW%Z+Ei$iP`3x<;VQj-E442c|Qa96|G0kx1)z{E&%j0FzCnEKu)6tLb2Tm;lCpP9^$aDN&@e1CMc{fe%qEf6t^%qg@~YgCqA>) zDB4s!#(>>?wy0C15y$`vj8a2a1a)8=Yw9e#)-DT%C&swRnku0qg9_4w$pxe1GS)qpQjs!k)Q;Z1JV7G<77zvqivf=tgJJX5qF% zp6Sl7c_}a9F^SDb4%3Eo-JVOlBxnFCQ+a-bb8r?I8VJcj%s@wsn3Ik5jnf|t_MlB! z@j~A#gBu!O>N^8CXQs*>{SRR~eL}Q_D~M6i$Pl2*UwOA9JHIL&mnoP@XB9}%b-_$o zL7j^9_8JxkY92!l$hFaK9aVNlMc%Cl^AM*;lj!CP*!A+DgppXr+?)M-{ z@p96?Lv~s7Vl%5jzMDhT_Npb(ePBuAq>D&|+mnvS4t*EaQ0K9V$s`FBg(OMA(z>{p zJ=AU`I3$q5*cFd2)9PBknE&0BTB4lL=!5slJs&{+w!x5PTLl((@l33-m2?nWKvgHt zkh2UdNh8;S`oUC_YoChK*>+jp$l};K3x`>znGq;h?qd~?iTo`F4hS}6fZ4tj7DH{_ zSm13G^SS!(SY88WBm_~kTrcj_2l?XJMJs8v6aikz%EU<9n>_siilF`z5%;<}QF~Mn zND-OaALxk)VZd?uHM$fm6x@pU3Qk9>dSQs{)#L6rtLnpFdXP^wy6+vI07OzOMJ84##d2qaCyz z3}usyFd#dYJkP~`B2t&C(-ke8)n0yq%Bm~WHWmGj!;ehM;SU}<#=aoA$Ae`(lH#`J&=uH>3hw91@ffSz^?7N!~2ZT@>V%iIh$)-RG)ftp4Wuq;z+QuO;Fk z!HU{}UfMHYor&1F8f8-sDR(jt z@gn6Q&ss=$4J>U$`Eg6j$p?2#IRZx_3^=hW;vk)pGq9v4u7u0F9!+Yus@p;5w_BAA zMoxGnHC*G-bZ7aj&rWSx3#IipAH3R3 z5p4?%CF+=N(-oD(xUpiSOWy@Z7x)fSHWQ(uo3$g|EVzgWKQ(F|7_DmlEr;WzEg)e@ zjGnO-U@Y%;fIOGZ$w<8(y>*+`u4og8K2#f_bZN@GDaMI9BZ4|~6oE$E8J%8CWmHaN zVs5f24zbLNjA1DADAOz|r@`fZ76Kxuh%{f~Y>Othc4RUwC%5#eCS#ddeDWS`8)@FF{O z6T#7QyZwA$5VT1lH(6QmrQS=MpwDI?`MayA+-$>kvMT5;VU+5D2l9v}5`P-{9(o&= zH?9wqVoBX=Yd?*xTcNsl{Z47H&2Eo@AxY~1IPxs>#x7l$8V`|Jx-irUk_@!9sm^$O zR=#TBfwcA(L7kVAmFrGSUoJZ^f19yEuC}eYClIlVSpn?xmq<2OuCo+c8Mv#;23=?(LjF<8-J1~RmkBf;M%>KZpu&7{4uE|6zd`Z!y> z#E!@hRcE-k6lTSkGnB3|HsvSO4qBvL*^X~lu+#z4n6h&gLE+i6)V5>xGFjrdNK(` z!>PK;m~Xav&8OE80gEj1+r5dEt5JH@sZA2mL1d7BnTbux7uKF4KT%W*A|25vCp~wg z-c%?%0bgHP!Nip^MkP3q$iI+Ft8*@9lJ!Aw@;+l@ZY$(fEK@}bKq`fR5ZJR6RiU=j zU8&l%^BYg)R)hkgK($iP^sXT-UX5q+E9S6LkSyd`7mRapLbN`~C?w&eegj#nl9aZ8 zOkXM%hZ7PE3`yDm=N<68OA%v)a0UEoB`dOYp~J4!Z`wwVf2cHl<;YRY5&ALXG*o;B zvdT@o%d;*RO9JPeRNysW%5F9U2MAocRr9GB&u*zedo$C9hPEpYZkvY~VbYAsuB5~P zw#@jrHXMF3XRLjsH=|+785&@wzk(XUi4GKXjCu&6z3DyU4hJ6_U<1@F`(41NRp@ug z2HOm>Xhm^t^^~JlO{l(e8^p*O^JlC=ty00|sUC+z!jGUpt;+tmgy$j41JWJ#hz#S#tb>8YE}?fDf{ zp4W_=yyvjaUn*;Z!tWM_59zR<+A10|??UF7W)TNqsx?JDYAmXNJ8l0wL*8wJS1GuY zpIV76TCsS=3G@zD-0q{ScALGr#m5qmRBl7ho;{PZA_* zrq}X&5rA3ds6)6X#FUeSm&OTzhC(KaBb61$_;F_aWt;=4S^c0o!kp(~uqe1cg3t~0 zY&qw0c3nN&DY^9&;IZtbUXj5A>?0IS0~O9Uz@xD@4S%l0Arps&(dyoAu0))auB)IXTQy9WPhGfP`KZ@)g!9 z^EQkp4L;-ETN{g(AxR}G;%8{pnbKcoQrHxjFUxt>0b^;kRUbWqw_vmiex`EJv{a?U zxUe$~deIo@@W51z!^nFDb^^=j{JB+kPB^@w$EIJ&c^Fna9>kYIe^C?Z#Gr4sb1z;a9}5N5>B@XaEu*a#;w7p>R6UvV#-YjG zRtnoX2888;4#(@~5I4rW>vmCiPS%9lcSl=U?DsSVMVCecq5#-&jaRhrqJX?4E|7ho-CWtw`;b(%68>o3$`}`!c*|c~`Ed7oxTu_)k}z1EBTfM) zy=B+L_kS}}Ci+9So21A&vW`4Glp7kJ*;n6ew)9GrxFQDyH4rRCv9V8uV1@wwtb8}$ zV^BIos?a^LpTaaLzIIy2MtD2jNZniQ=r*rPPaGyE-^`&j36g|?Ar-S&@^ByR7-ej| z6k02wDIv4+WHb}Qgj*`6{6P#*@c_TDJ8P-}-NY4aaanLRB&OGap$;b4!r zKE<>y)>g{45qlm`V0T7ZS*y~ZZF9h1#q2T9kaandTEm(NR(z;xRy=CnJUQidIt1Fa zvaFl$CW_gHr=J0&X#-u}lKbFo`|fA%z9N}xIdU1Iw#28&$uA*8M&s;d^&$Ci{}u&a z5}nqR!>JozV-lGC)M>2{>szMN&aQ}KkA`JCZ^}^-dJJ~EXr64r4`ElEeWL$L=F}Bp zl)le_m5=$!{Ak)&FfDhXtD$fKuISyq203ZNKL_t*O zm~Vc$oqGbglcsVAC`XY83UK&eFBoV+{04=0`pL|@R9OqGXu+5K?}EN~?wfnc>Bs{p^DjApA5EQTG5? z%7I+Y4)Y8=C(^-b8b{2nBK!JZ$V=>F)F<1|{y+`aawEoESu}NdhHgni6kMYj-n&^1 zJ@sI7Dn{j8td2=*4X878IiTB7#4$8EX>yubCH;4JDw`GZdJ|J{)e;0(jNL@> zx%Yz-Gaq6Adq9N0WE~W!I17A>=3E*xp1g`Jk#8-rr4F(fWf`9m2A|>}V(uj&3k@Q4 z%U@ghSNIw&iDJEAtD!Y#=Hlnj#4Kb7IQ&TwV}=V42n4E!JImb^M`7X?sZs#px$}st zPy|^(!E}7?r(w~rGLHQ=SS940C2u#oxzE8#6uY_G6RJDU^1SSKM6v==bl@UR=pd2a z_#v??)mfk|RqH7Jc@Ca+9r+A2x&}nftWcmHsusazG31P@gC2*af&@W1CN|TtgHfKm zz@6VE0KAO1DC{780nseV7CD;do;hHB79-nP;IvS?BP5-H0yT~h+oPTZjT?CD4KPIN ztO!5_BsTax#9gHjF^91gA08l;^?vh^fJn8|QxSW1#jXB(0k*F4X^foXU*#AIGoHimrpOYW7%AdS3n`EM?lA~w$bxld^CsIv%K`J5k1l-< zNoMF-EM-%brzIlG0Db4LUvRU5-!Fp~)V{N#sE+7qhgc$4syupz(Q8~&&$d|&vp|z+ zp1J$6T>mSFLLlfwrM}*0$;i6(tYnCibsdz9$Hf63YT0|-%En61tr$$}8n4iX9tkf? zE#h3i@)8z6Tk+m8slByb?=CJVAJ(#@JP7XndX41El@2q2CE||CB$4qQdl9lV@;`4O zzh_rMGGmo0@ST7dXV8TchO8vCZ8#}{t`5?|m286@X!}!Xbr-6+)#kQ9B}t%7=hnTN zm1ijcE0nRpnk%q~y$g!|ngPlp#JnVy^#>+CP`3@4M^{U5W8f zzf}8&m~@j@lrNrhWW0lv0Z3|={iWoCtr2kPeg?6`;o!BG@}*8J2ElKVa^xA^>QdFK zQOps>81~yRElaCelfqe)e<=(_+EEEp z#GzAfA&?mzJPm859WO{P5Ex^!1KcYP3VC;%vW!PS2W>nH75JRSO#&Zww0PdFkWleJ4^j#-7Xd>mPJrh^Y{TH3jX(^NU1|DV_J_P zW+CKpt?!Qh2Rb2~ysm72iVEk(;cn+QM$Z1mWn=tgdc>e*sEB_~V^WPLT$SkR&CQ5~ z2pOJeD64Kx27?4Y!U}O>uu82q=@~Ls154y=uUf)L?Epo=2*|Q)Rww{2bdY629ncuX zR|v0|A_eM#&~fC!CQu&2?O(iJA+G-cMGPU0BHzdWa5>}4n7H?pbL2b|gOKtXCQ}<; zjcADI@xmhSO9LbS+wXX=rb2uE0?t`iq>|5=pDzK*Zfvq|nwBzr7EoptC3`?aQ?B_PLum9nkEGg7cZl>ZL`jk&b;uyzQJp_Fr{av!X zqNo}|CW)&(z#%^qpl?IXr+lN+@;?-5Isw{e-&Sur}CmvU1*_SnC#hrJAh&6*x zE5W!JHPfR^2X{MJfLIchb4LV8h3fxJ#c*(^Q))Mk-DxQRAl%dq6$h)GLXO@2PO7KU zUMW(oZhT9`sKW~7?W76a3Sje1M?0Nw?h<-hA>^k?1)XvvR2&jEeO|*(TH9GtwW#Jm^HPdvw$p9 zC*=q)oX8wtNeY&Tj<49ar_w2dXVap4;O#S1Oubu6Z!gx(bULOTa?c%7)Q) zqrDVbsz6&Zn!V23G3KuF210@AMdKE=Ba411ArcCtY!)tK2@;loC1R;`o@ZjFNgY_E zy{fx*z-@o{V8!EshvRUr#X#qywz(*~M8GKZ1j>6^_fJ>_)P!NzVTrMXu|i_&5Z8Q! z25fus|1Fzo7Ff>gVm_}6Q zz@SD3IYcoU2;oBF1@T@J@BI(F){y8W#)JTB5H)53aRLD%W*iY2#%W-j9+*QI_vXa4fw$s_AzIkjj1cL`R4r#;^B9^5L<-Y8+cu_TpxkIk zG`f}>>-CGw%XfLpsm;9IbP>mlg$FV9Fu4dx6s;Q;S1BSy!;S(hGTIPbEn>1&?puS% zt7p!|tJ8bYlhkiSPQp~>jc&J%Up$C#@~A_$GW zcE!(VXUsXro$w-qKI=Pq%^>$Z;f=Tjq5bhpw;K`N@J;ZdRYtz;BEK#ahfUeILA2f8 z&_U$@M1>)&fV&}wu-bH_w9+2D`)~h7yhm@XtYD0vOyUq`SZ;f)FeI(}TY@gfgJioE z-yEr2_kWsiTsr|8uKMS~=NUAdSX%>-efQc}O)t~768QW$n zy3!-of_)#pBI;%sOGgEDqV+-(m*RX>kcr~?;7IpX!q)<4G*Gy#&kVNYF2Yi4fhy$3 zJ$48XC2FyKn$batsRHdTL(-YDB}X1ARR&w`pUg4kBLxZZn5|?n=}H37D3xy0FZ}{5 z3X5E^NuZ2&Z(hO=$|hP0&v@c!$CXl-z&1{pL}p{y^dUj4`AIH{Qzr2*9ii*2qEx_w zGh)0MAqrCzyHPXx1Cu0PJ2f$&kFijzKLx^p466=}F|%N1)JY*lHf;4fntj=GI98w| zR#>)S!CFOv{YEtY))?Kj^xx&OT1JyW;Hq9>npp`t_25y1f_-m=&iK;`)*jd~m(S|p z#MiG?=4r<UKLy%y8)T`#*+{vx=`wmXviXmnyH^ z<557I57qB@nYe)K?N;B^l{dm=vLX~7rb#dk{m%^G_z3CFqICY%)$nbgIZb0}=BI;C zuO;PX_rvsB{Ye#~^kLthX`?%Bw>L{z&}~CfH($e`aia=C*vZehxouCh3z7X4iz3qf zd1ke-eHVKMRMHF_b##i-Y_O5ISdw}z)W->ls}JFi$1~lYJ~F5QQPss6v+WJ2vVQ8W z{>?S4rw8Gbvmg#RFGXe4jRhHlq+B zlKq9~IG_kpIdLvg_Q}LowE+r(hdG|ATY&l0%@KL~eQU4waHU=q$LT`16<t65l0aLYqF?ur!Oj@fsy#q%q zCXv~*?bo|toW(eH)$LzOLBCdfLK81<_aejXUYAKfs83qbIBGLEzt;iQ&`W&qTqNiOMGSP1<%_shU!!B3Q&x} zjzWO@9MWXne9QzYmU9>ai!(hYtRd2uASPDXt6&@~0{XZ9Qw!Z{rF!Ukt6l!wm9cw&A z8{E}UN6L}tLKZ6*;!_j|;&i60%}XUud?(eLl*aE#6Uu~{c)QcK-OKM;17vjJM3lp) zaAK!el4Cm(q!b`9)mh`4r05U&Hm?#s-c4ib1vF{7M)(_eL{;hv?7x;Urhxr-*^K;% zzy9{D?%BU>H=?6Vgr$AEJzU~A>k;ad#uDK^?aHHnyllpwTR)-p1cRt#{b|eU%|vg9 zGeZ97pzUdhFs#DLQ^nn(zRLbW2NP}EJ@(S@fFa~>AeRO60vndRb+tM(&%>&{uz%Gr!~>A-Rf7#=*s zox7-V;|`)l`*HG!IqVTki1dLbtu5k`6rCc%{aC zY=x+P7G{9sL0%ss((mBm6BE2-c9Try8QNR0YKUc30D+8gbB<64( zBLk~ay{AJ*yJ|K%04Nrrk~Y3BJE$F~cF$@!t+OPfj1Wnilo$t=^3{}EMk&Qw`>zaa zH-XZ|88pJb@9I|E_isnRA-~u!V1jv+-egw%nnXaRhe+LB=nJ@3(behk0(eGz!H_egitOe z)usx1>`V`Rqym`muvFJ3qU}bvZKHOW(Q(*sd0T@6!J>LOwGROek>YJ&l``%%7q{_P zpDb4TCduH3YYen+gvJU2^nWw!lvo5&>4nK}NXGhy#|s@ds&9hL7|b?!svFe{2jk!F z3KX|`9DZ(7a{}&%>2`afgO0I62y{d>lvxsVvqdos&jb^Un8qw6fuqOTbNg?MAqLUx zzta9i=s0%T+QA2g<@kBAe}CBYzUL?Gcu5$!L@Ngyo`gAsHi?lRo$o$u*Ln7U2ekk3 zb8utt$927i*xD^%0K!I>WNM!!Jm6OX6=|GC9!E>XV4c7{DV+$!irt9bIYc;T3HzW9 zD6!iy7}s~aaB^*QQ0Ks@%v0d#fPi;ox*yi*bj4K+5oy$)@i3?ov@52KIhE+!tXh+7 zwrV=#(Y0?fj3bL!wa&(81cevbi^@iHGS{IqHSps+BIwY zr~FCt50Iw{1&p-&Qa;&mJf6vGPK&nQ`6+uwnq2it1WGTt2y!D3$k%YUK=GgVTf1{c zf}t82=!V-#&U_=@yiX4IbT);HBCk>|23;QUBZ4~WZ+F*G1kS?zMDMuK)NqFh<5{C3 z5I=2%pYZIGv+A@&ghwLNJJqKXotV{kcp>nSij&mgKn>oAZ*OS3J(WHF$0I>lb_~7V z=weYvfq6A#t|JkvrwO%0O@2-M8~QyXZg@%n=_nM-x>vF0kc1~9BH3RGhuhr`VL&IH z=uY1jjFy|V`R@5K&&F`OzacqftSB&T7|!%>qu36z5xii?u!H4oNpWV@tV^gn&YjiR zCo8c`r{j3(XE!t)FyiZZO2rYRwK&^;Mh*u3@`&~4EU+7rSlSr|8!eUoVr{!+a$JoE zNVf67zfC$&YM;fhaVvUok!dWp5Zv%hL?MgyW&5$Ji=mE(sp+O4Po&W3Y!kfe8~ z6x}GK6YkkF-O7Abb1J8>DJH3gr21+l|CciJ5=CZx%1<@Vg zGCLM?N>~sETF1VagJh3##9?l0SD}m{7W(pYg%BC1ee>-`+x>&`-*%_?B+j{WBVPvf)Jdo(fq$};tY>A*N@Q6epEnnbQs+SnfXxinfX8~%;?8@&b8}@?>-hpM<&7L`3Suzw;M9Q+~ zJuahc`!;fwAx{V^%B-`Y zHRiH(dzWW219FmJ+===YmN7%m{KYjdAN`)z5lZJinu|-wqg5KA@!0EuSn-!rXRb^Q zn;KwVV9AWB!7_gNb@|uIa@|Cv^QHVZ@<2q{!IS!3Zyrlyu9~oUQU>`L0i`{hn@4aT z50_=5$e?1ZR8F~pH__<{C93{t6u5Q@x1v`iDQyPdT>h}hcP$25y}ZWa%#ktt`<_xo z+kGGevKjLt#a8McmPv1)>{UMFc_vcjc*H39D|}vn3TP5g%Iw=(wqqoiHv>ZzyR(8n(pn&n8=vT zdNmd5Q6ghKHX4ZB9KL@RCquchTOoaEB zvb?n|e?t{mhQuSTs4eWe$c3?MC?>FfDbXy0(v8Y#0{?ntpD$Kt0@ogph)1?u?T=@= z-HDiQl?T?90y?J*xv~I+)Og@nTJRGjCSodQ6pR>xHF4aGYjXOY=>_s})?=<%DzoBw z{o#J)1lC;C3uhui$MHhj?PhNP^&xxb(t%)Bd#de$$(`d+nh~9mL8I%!EBNme~LVJ%&KS`zt4o)bjBN_=|%-y&K(=-1K)&} zE%TUNM+j`3U;@q|J;Ir22CAyO$>W3%E_&Q${D#MU& z1()h`JR+I8seGB-v-NBou>7qgPv$_RGO3b}+W> zpcLKd@u{TFnR>H;4l8$Fz>MP$G4?n}Ne7}S$-uF@rg|A)7>jMSh;_CI#83T~ZKBJ` zfEtT6(6NcBPNe35MP{PLu)Td@vjn*VpEiQ~PRGkzYI+%cYfq(U-#Lvi*J2El?III+ zAr#0`OkzBgZL-`swdLS`97M6rgxErI?U`xe1b4CUg#=oPaY+gvs*inDfcn+tg zM!8mPu|Rx@<|Hb897!A3%EK6mzEf^GH7@~&?OpY|J)zzOzQ$bR-zfHHJs!@9b>T(u z(CMlMJcQCC;@`RUF?J6s#=Tgrb?=#Pbi3b3qPk~KG%mtBQ6^Z3XNpN#*=FQp@2SARDrF*|o4Am4k9 zL7a7#jjlQccn4gx3NWYRp!sWhp_mZ7^!wAr{X%9m{V@0~FnUK)jA%7WNO4(3X51rNrm!Xa zE)FqjR0tl#&H^2T6d|uuOav!d(TZTLJj#Rqq93yFbUYpog1JM}LLQ06>B@$0SN<#~ zzrP9xRE0pLRkp@!PG4U={1M2@^eW-4J3g|e6CENlYK{N_E>NTd;K$ohX`qo-DCkFn zG)BL0={))~a5w&-Bug7Q{Vt#r`C1@yS&xW3uaM_L1hBBR!>w+&x{OnZq&}oDcB|fa zo-vNctWWG8j{&oEJ4o!lBxu>`1ll=(rJ$%IYzFAnzlF{MOV-EvtZ!(^j zSir$w)!&BqS_Lr=t&Bf7Z=5K85OTsmkk8wVZhY&jM40ye5VTE(&pzvg_Fu4QQGX zwn8Tp<~}v_lV}U&< z9V3D>X^zHPfi~c0y_xuECfcTPkHPqnhbTy$1yH*VlBEAH2R}$Wprtb>jZgTK5~TWG z(hI5UW^@?Jw36jX#&570k+`d2P>LE{(DVd0j=M7FWi;c1mSz!n><0zVwV;x;E+Qm* zd;1&ELfMK{gw{diMNUAhq09bxo?6mNCw?OG*rC2oWDMq|#*~9Go{88M#7JhqTx_=L zUXew$F(Nb35U48w2p+}c*lB+}Q}>n)Af!vObti@D!5zW4xb8)t<(bfqvLzZ*#ZPR< z$d4V%_WQNCK{YHHy}D0syOqO+?(MK4?1%|IolxS3h_pbQZAD6|TJnkY5AT8_f+>u2 z15!#M&z2SdT#sLK7A~am{%f^--mK3vIg1Tx^Bs1A@qx{7b~ov$4PiOAd^OqbYDquFK<6gYvIb|1kn53-PX@+13l!Nw{wL-!p3UJV-CAeZ5uQmJ*tqGd{=l2PVFy{ zc&f4ZJGhplJoY!G9G}MKRz_U&*yDawmvix_B%6$rb^j~Md1hjkCk@W+SAZiXGIW@< zH!0V7FB;g>-}`0zyZPgR57%Nfq5;+7qzd%zowRNVXO%+5|6;eiKh2(lc&i&@d);g- zEo<-PdaD!R?e?ZD--mv1ST_)ckj`UMhgCsExw|7ICs8X_R~HsVuYgZTufeWfw{mSO z+Yt^r9?x|WoYxuA(Qi8&^o);6^eS!#v1SC^sy%O8Sq^RL<0I{2nlkzbJ)ATHM^tJBOVF|8M|G5BSVv)@%&1?EpqGKTl(_TRMz=_IwEZYqHa)ZPOkl z*K@)5csZpJ(c=Yu&)PJt0FgPp1P7iJSxyN~C@;Gg6&RneOwJkzGXrqCsUbI*SR(Ko zlAcM$D3#cJs~j3wj7D3OL~t9l9X=9@`71IUVf;eq>2=2JX4+Kjp?Y^1e1nG-R_2OQ z>u;(*@1U_w*FZRD)Iv6*VNMFiL1Kc?MBoI_5)@jn(i#=eMV?$dTaPF`IFi+)3(4{j z+V9*WGW_V1%W&NEr@mC%_P3&*^yrLtBl6*c0&vnXKpn$2`E_p;Dm0 zM9eYhp*9v9X*4}D`(OQim9;9Ei}G7=8?h!|RPX-C5kuVxuWJxdHF90KYdHY{aVPr@ zh%am~a$RyfoRnHwH=l5&-cOpXjM1ud#d~oUF=F#mv49K$R%fO5dVtY>dZ&u1 zFz{g{k4Cc*sO{N};{wHu)0qJWyRRz@REnPM|AcoQe~|U!xAnJV?e-(3sP!Ldbwfaw z%`%5z8Xvtn5bQ-2`(9euNB1;GY=@DLnXyOtWgw-sCkN57_j?S%kDCDP*bL!$0r#fo zR*Elq7zHSCT{kvn-nTYsf`+g?xZU-fgK@y7(fhK!nYC}2cSEOTSte0i7RN7Ij)$U*Tpl6C5z%UMWK4!?Qva-L>?e-?%WDr0gjzef21mh2}S`{T$fABnq)+YM7?RKYK zcJuIj*lYXjO?w0B&Xh3y%KEAvw7R~4u69m|qA7k4+f8Mpz71Y7=7jAa_PZ}_w3txe z0@HR=_D@|ty-U73Z>b&^2Z*0 z)@5adX7P}8%qQ(P_S$sK^AYqqc*8m?KRpwOwYra&Mi;;H(}Fy5-UQ_2cn5Ca((`4uE&e1HEipEQ$q81`WzXS0X-r_@^~q4_os(J zMD~w42!v!bAwdv;d;MWf*3`^-^b0Y!hhR>tLnF(+FskkJ3c@j$<$rv`lUr-uL?2vG zUWpefh*RRGrMgl7El}uberzuvxe#1U+%!;esBBa&vl8-5%`rKb;QKXfV^eQ!)P=u}wJMhgRkD=al>~IYYS?I=`46tt`{6pVgwM3`;r2ECL2iVW zfTIQ)#v>lji=i!e5irjdj96Zdz3%R%y=nVo84_AQ>LyzL zq6sShVQE=Y0KR;_;mtJ?WwL9B8xe>h{T`D#Q;M7HmE0^K5IP>ujuSAuGa0 z$GD1rq9;nINwU5L+YJL2=DfzwzR$$ObffL|K{>H?yXihB3e09)=coqkk%PhxUrZdb zVW_`>F?+ybo?4~_3}XI5X+UkBTm-$1qgCV2?)Lji?~Uw*_@Hdw_^t-?Fv1T}%o@qS zW{YWOeqBNmNyt&%Xa~LBZcpIsjUFd)!fVrbct8G&Vqg+)(tDEx{+(z+%;b6(iWaRS zjb#!3X;h&b$Noac{=gQYIAVsF`B)-2R$1_x$vLurrfnj0vX;cBKxuxt2!L`7X zIH2yBEh6{qj6M}L3ZLJ*o&Ix$vcbreGJAigSjx~CzMf~@Q%S0q5cTwLfGw>4Y8^ze zFDM45kLaiikmc+oQq*Kql3U&tZLOhEjB3G~nWA>m-~L8AtCr(&%}JwqV;1sGfRA#I zy^AOPYxac$o#3uBU@~Sf&K^4a{gW!6@VCsLOGOFo>%M=9HLEp9~x;>2pt}OjtoDFX& z-~}Ctlu(kgVQ1n;6GBucysYObNeBp+B&(*KqV)Kp0jJ&9bpm26_hJ+-+CUkQTJ@4v zms=A{>0JPg^`&qTdW>w9SigsMeP#*x+bl(GYUq?C!Zo$o`sT0geIG+?eN9k*B|+2e zQ*OFPlSP0Rnp{3arZhURLc8R5PzRfgJ2)O~5*&?1E!jSOWN@Q3bI;?9>lpwHDAc{; z%-g_5P{?ZnoBvu~faGN065l$jtEmkS7~~f}p4FYDMa*c^vA;}7uE3%wiNnhMj#`%8 z^fu8djnihFI{nBZku5wUd9|D9(k z2-RSeey0YVyvRbz7`F+q)Yh&>MYVYZ9RS5T0UX2J%IZu^-D)X{-X72}Pz+XvKkn0k%(M! z#|D;m_vxmg&X4G_q6@Ttnd28m`im)s0Tqi@gl2jMW=%we2V=y@_Eb}|ag?({6HY1J>@6!e*rUe}MG23a7(+1fkjZgpTxJdp48fvZ5_P-% zBZ?p0TT6>si6x0U7Gc>0W_84d~udS4ZmYai{dItv~Y z57|0ySHpK6k0xrNAzV@|2g&|Y4O`P`bMHPzt;=n^l;b+*DIMczk7!VnZHD>j<^tWW zS|LO#o+_@`K^?U(_X{cRw#jTXGX)EI8WgH)uM<$Te|BYY%^ zRU1adYqVB8k3(`8WSxz7&=I>dp98Zbl#vAaeq?8pn0{+zmRt#L+nu)i6ZnU5xJu~p zYbINP3i|9eOwLmaTJ66HkLyk$aVMe9WzzwpRv?rimt-=maI+315uH=#hF1HAtfn% zqdeOdi~a`Dk#3$v`+LO`yfNPBPJG|!*k9Dw1$>X<_<{ZipGrnA{_zZgP*&N1H(tc$ zgjb5EN|T*~42g_vQDSODj6d{sTC+kz`~ILCZxDNijWI(7XM3S^)IAZqC4#*oMzmy< z>pHU4!_tmtq-PfunqNU)mWHPS1zjtR5=*`s5@l+ zQl#e-LE^e|8BN)p7a`6Nrtm@ZnMyAtWT&eHlZzWjn#tdD=RZg$&9&66sl^du+KR-Q z6xmRpNF(F|&32?%Ws`37$8BsSkd!y=blHp2@ybmfTh@+<+Pud_~f+dtR?5pwgv^sGF??z*8msS9>Se>75tq;r|l=Jz!SgJ zcpsi%F?BxbTi@H8ZU+O(o$w=um zz_Ye`%C^S0VK?)q9Keu33vDDKW$+Z@5<$A^M+1Ftu|wn_k>oQ)=dV1e%kqj^ANWbT zD>O5028_Vg;05{-Njq}}6&T;{#C!vq_RZeeU|7w+;z_TSFRfir4ypb!aoL_WrMlG8 zu|LM`_Z8~Ubd&M#FVpI>w_$fikHXGPy`*NMEvxIo05CDYM$n*rJV-qb=MdCjsuK=f zj2qmg8ZOx?EIQNHb3Lx5$Kf=zDh1MD(&l>zIHD z(AI(q=+V2vLevqwjMkY%9OikiO3dZ0@9nOsCJkh61^p7P0a0X}?pb?{K*q#3Ai1=d zP=8Crs4H{2sy>>ea(V4-wDhb|3lAH_{)toH+`rg#?f`5F)04GiD=zqqFjdi8o67(= zJ`^fHn(V>^_s4_sWXG>sOIMAvQ{PL$@DnyX z?!OL1`Uc&DLDz$m=~NffMTVG2jt3n()rSjlNL#gH&CuDnCih|4h^P^%Z-GVNK|zF4 zP`9GC=d6rNU*A%W$jmTav=c3)6!^Mn4WKCvJRT3C?MAr025DZ3ZI%%gi@hU@Kj|}R z*siO#ne61gbfl2F`l zQz5uLsWnZAsluLT*v>VmYin1OknLjgR!e-W%A3z`DZFN zGmUm6Aqgc9L_`a7HJmw9hyaWw322#l9M0GMOVT!*-_i1FWTrY0PZeVvHqe~5?f;4_ ztWfp!szjG1kDXdoJ|@?|Fu4^Xwb7Z{COY=LJXDY-Go;~d zVyzV(a!xtsM0b?^7AW z<9J-qhHDA;JZq+aIWqV!8d&B37Xy9AIQ4IH5dgN@_jmPBMVf2<9b(uC-kPNhBCS(! zB5auv*gRn<8`{d|nCIK7!i)Z{!B2vL93ouS7|w15quC6Q=IOS&gZ11q(B@!8X)0A^mvXHTdrhoNuiw_*%;8f@_O zinGj5#wrt06<-W5CG9bp);^t3DLQM-95jV_;C$C^I>AM<{8Y zu71%k1*uWpxbF3BbYJ5(r4OrXgVog;(c0%u3xGlxYqSwGY|(Wc_kcNj4SSNLfOpsj zm~7T0)N^%%sRH=&Em`R_1Uf(i@w=D)~{%s?^F)@Eo_6AG71*g~Py31V+rk`I6 zXoTq<#%>mZvT&l>b#aDIbW6)#AYYCbl8uS^PR&+w1d#Dz$1ec|DIO{L;930L?M~Zv z(4qE&N4jK%yEahq+r5#Oc}h;q=%g`AejY|mHFXWxp`ZD2>_po^_K?N*kghS%C)(1CI{Z+W)ntr8!v2A4MpDH`A<`3;|A ze<9(!YGleH2Czo2X})$|&7GCuH`5*PNo7fyX)8EXO9RnFvi)s`AnxdG;hv|+{-bUx zrM;*aF7BH)I&=}DXc?K}Dfiu)XNk0BkzWu*BpXlBfX3+IMPScjMn-=*lE7bqPI38= zyc|0*9lfo75Co1D$|RbMgbbQ8?q`WMc6r^@XY_7Gz!#EJ)PxnKP^`$3&{zdX1U7WC zK+$?h$LERSRTbAgj@;COW>V#Ua0u_j5HMQk>e7nzeC`iu#Rh}&r)$Bxu4GIWjFFjA&tkw(!p*mza z+NxQ{J?Y+JXWAf&yWIjt=U2@AIxzdO54(~&;cffr(u4zHW1TMM<3;Sxaa5Q$Y7=7K z+E)!r9;>m5WM!Jl9NG!sh`1afflafmqj_ZU@kEyq_oL{I_I(7Hq}g~x)97#9o079_ zblX0tpY?g6KD)ODT>av(XK|EG)H7X|=+^awUE|@m{Lyy{DbtN9kI|xT?sm05Ug&<` zhVR0`TZ0Y&R9d%-B~D_~&wLbO`wVhO%I5vy%i0ur>#zar^nKm@Q*iGVG781egM&pj{mM>D}G0% z5dp;tpqF6a!qXga0qoh~EW_gxZ`fXqK?a6IB~NMj0JNNJ*s3m2J?yraB4wl5pYp5i zH`C0foQl`Esm7$#ea3yQzs6yT8Cb^xn68awz0|}yriNpk8t?+K=n4otZTl5Ep{fLq zr{k)Kfyi-YzTDOgQYucIFb8^-!yDVc39yuq zwDxied|;GtJF4fa0$s#iDgar=CVROe9bd*oVAMf;T_S6Brp+{%`cfwcoO(HOcShGy zr$OkiO^9bKQx=J|iH6-j9`I@bSi3vk_N_5p4(xd%+O`2Ig1`~Ql75e&9tYz!WrxF` zo&1>zGS!C#^<+{Y;`k7(mT6W1LW$y_X`=R6jtLW7ItpJc-?WsQOyXB;yT$?P{k6F) zr1uFXsX{dpFd3+fKX5h>dPD(}gWEph6FYBC;+n3AAb2-C*y(u(p*A=KI=K zdbVWXcmpFSu{Qn&U{pol%OLA4m4mK$yOqf=G}P_<1js1abfCc9t@muJhoJj?^@Rlq zX*ZaZjXQv%yp<-1fJU9fV*LTsPeeK1;2uO&C%$R}nf^$Pvi*>5Te(14fob+xe2>(x z^rPifPuzGo3fDsWsL}V(ZS`$&d22j?cMKAyDGHfHGeAV`0f=zMVd$?$Jn zKYfuFX2jS)-_@!6mt&`cn6}%SQN{t43AM;|yOj16Dl*XWdbHi1=r|4%*#m#grilxK z3Vds<>IVmR6&V?V_i_rlW}*=M?> zy-4JR#;2$J-EPbi7pnP=Mv$7PQwT)lqNh~!>X@gT7aQS1%`r2 zO@K4DW}by%jsnpVL2tb$P~Ou;`4!WP001BWNklP{+i{Hft`e>zu+3_312)b`4=pB0oiccPn?6w8)lT3oAHo2T&$-$dX|h8Hyr{n ztVg_oKkiM%G#hdQo_krZL(L0}@%Lk)y6)s|X&ObzWNQ7J3{PZ5eKlmCCJ`dO(RRDj zw%rDmjDeI+fcF|x9reWZbTq+A)&XV-wW3@X+ZJC8$6rj>Twen}QxRL4=pH0T`Q0bH z5khQqdGOS`t(-dwOUxuD?6SWG+rHw`Qx~#j4H2~^+eF6znMdhIS#`n0+pUZSpB`ce;ApKos)NV@) z+kBTm4rBuItE4aap)f{Rdxk6f_O}-AOKGL7>|)-Cx7qsutw2)07zi#=JEy&fG?WKr z#6$!*0&3sxPqaS{(m2)lzRWUJwlAY|W`1ze#w(JtArrepEMnOp0sv4hkH>@f&5fA0 z1>FK!HbA=6wdCz@qz;SmsN)ozfCr-PaD#^IymlE$8n+X^YQH+9%_I;r&x>k4gV1+1 z1tB_(gRjCnr>XQP>_YQZ3?p0vdAo*9W1)zkjUXS5r;|Wsnn<-ts(}#oM86R{MWFrC ze<>w4-_{Gf8~W4;6kbUQ5M>az+B#@?u^FeE0`vQ9FX~f*F?k#Nm4-Uase0U*m5hSF z*A0BJBL>;XK0ZOwhE~0434sKg$ObfVY+6=wTCl}4F5IoCs4}f{2hTxK)Z3`~R68(a^bcJB|>E>?HNA z&6x0J{7H2sOti^x6@jX1PA(=JX2nxU!;LXRHwH*Ivvarg;2@&5VvC9PmogdQ8}Y_O zd^7v;b%V=#5TcWX$`kqfx4%(TFG69=YPzK`L+BLqR2_;4l_k8qkvyJD9?-D1r|k)b z!;0g~;a^B_B!uf-Gz#;#zpqPSIF#n8h>piw;wPr@?OhvbY5Yb<5jwXS7vSgWSoIe; zM9x06&)jI+p6J-0Jv|i|1090Pa#xp$)ZAjhQRc#+oS0a&(=O6kw?%&1&_T!kC~;~v zMJsz02YQm@^;YV?2E9&2l_!nJC%O! zV3HE5s0xo53!@QQ9p&iSD6L&mh>DTYv$kacPEgebIsCzW@&L=0l2gD_{BgSeH@a{0 z1jc;4N$5+}h)AS-GC{R6(C;8y^BDC<2|?nz$eQvT5MX6g>$-CGcs(1Rg)wvb&o-FlL<&5p!umL1 zI}@g|vkF&R@< zfhar}mE%El5D~qUx5L}LE|;zo6xI(|!gs(nUMb$ZVD!VJ=6J;v(-yA}x*B>_?xDVz zcDr0MVP(Hbm1iy-+-^5I_#0o!~&yR=}$M5+|&( zv-pN2kNrX0Z38|sp%`CH)C~B9FQ|_Ubf3s-nQKVnb|XHvx}qc&3bQ2epp>`AUS;va zVjgGPS=lIE(5Xxv9mYs$*3VULM>&IFlFG`v`n$VkP+({z{CY?&-}cTs+_V&J11UCP z*M}KhKWN1JbSb#?M!2j}Y}ts9gzIj^S}q#r6d|TPwq1=3F=KB=2l^#~^S{y)?SCd? z;@Y*&C&D7*m-g5VSJ3bcW);!BH4=iVj`rE#b8oUnu+e>pIxxQd#_Ba!1TL05Z?FQ= zhf}27h6M%nElYiG#nL{vAhI3C(p zNCAY|cN$N8q3?|JE)N#?SO%fnc6>Ga)A!IIhDG+AUu?V`GV)Dhj&$T#GG8M>8T3+? z7n`j8*EhFgk~?JRtAqTr6KdT9me_J~(VD;qt`n6Ga8Df1ln+jdG@S&$oGM-9 ziR;$`@UA73ej-m}hnW5LE$T{cW4b-nPbKZ`vpK;Uk(miwzkDHCjvZ8-`h_#UGV=vM z$M-gVU*g7%>we(p`j9UIx{;?X)S`B^Uy)i8dC@i+H9* z(34Iw^H=|T)2YTh*k1@$dM zJxKvwW>qDW3X9;}k@IMLP6C2Su$KTiGCMgOq zkcV@AjlD*En6@#|iR0LbH?y*6!5`$14K=0au+L{K;LxM)t-=xWU`#rWM$^+=KOHVS zO)G+mvgSvHDHx-g(7L9#BPDdO8dGB1(FQXgdpoUZ?8+I6id#Lh3*3a%Az0q=d*zuo zs>4a`q!7_&%R*RlPwXSgS;`$m_#IGE<27%_1*a397!8VQ@PURRpqe!67?rTZJ0~H6 zH(+}FUl%en-D&yJ_(DhFt)J9j2y2dAF;+ru7As=_h$wt;p%fLz287M$>Jig3bZmbE zqfv%w6##MCl3761vV27biKZk#FHH{AI2R-I zqR-Y+WOd4NWWs0#XNmb%PDgF0JX<};Skr1u(a2c-TxOVJI^`DF8&Yj13Drtg6sU#V zQx+~`Nr%*>&2@S6Os|Og3M0jOkO7g%(5cJa7IBD;d(QqP&>VDIwV3TmY9gy4GE2eW zquXp}Y1yr^0|W|@>_mHA?t7H|o8>U0c90fRT}MrGt)J*8>J3w$jN{gWn6mUbLADOm zAs_RBpKd3ot$df8xqLcjKGiG>b6Am+@&&~=hFc?)jiT{cM zYf}kHPkAdbRF0ka797?X)<-;N5veYx{kCt~(RJRU`G4O^!3|?O9@Za>xG$8eJDW<4t_d!2y* zEAN&kQV+ixRu$+g&ZnJ=P%ACpIoV6##V{kGdM9c>u8mO%JJG zGpk)&y_D!;Lw21puh(l{I0v46IIK(}b+d`pAAb*H%_{)IEJf1QySk{3Rej&Ml}Yfn z1@PiZqtF+IF|rT0z4_am<~&6gamj*V6Km1{pn0UGaeSxSeWU&HOt>Gt%QN#^DQ^og zlxP6aW>04;IcDiZmm;o| z({IPyvEFFA-Qhqi(&`h*&EP(T$7lA9WtMCk3Y`r7GTv+DQC6qtz)(3$V7uk=5Op~9yjf%L|M0)Gk|I7hP(!SMOuQZu$C91XV_aopK#JVZlBY+c;{(1~P zG>&@Nn@8Us@wFVsa72J7z$DhzYYBJ*Y&+K1tbta5@*|WO&6^gaf)&S_{@XQIvJnX) zMW`A2dwaH+J{y(PzG%f%=D;F8%qI5E?14e^~*tDnprKo6KQS2_d3pjYo={FiLkFw4@JXLS)*}bS< zfY)&AGZEFN$E?Ut`N)DmD3&&6%~o4G?X+;+Qd`>3-B)B|90?+`Aqn&f0}C=PCjRQq zjywu7!Q<@M5WQ2mRv z)eqIk6D@TqJv`E|na7oS+uXDI(rL_SuEq&vE;X97c~n&6cZ>Bl6sdQ3s0MWz>p>6V zt-TG+8n>OPK8N)v3HT-*qU$&lKIX88;h5ka9`kaFmOz?-R@;o%D!u1O#OkVpG~bfDUwx9Q#6#| z`?H-`ktAK@78{YzV|)4J+)hkw5^QZxw~S*p__N0*HQ$ak%s0Lr5YKu!2Ej!La9TLa zk@~;xRl>nDKw&y|@y)|Q5hk~?$@J*dr7SjY<3J~<0>Bu{?xkd|LmBi)!O=>pJ^^*I zxe{ytc67!B7#L82P)&d;IS2SWzuK_D#q^Of<`+JtoCE-)(;}mLsqAc2FwUrFR}imXfJX?oo)x#dn6_#(F z-1O5l!$M@g2iTf8O@SX=PMnMn!=D-5?4HGTGP^mh$X&6KH`0rOBDOILMnoiV8h9V0 z5ps#}X(Nn{*{hj_=v5FQMCMSGNqx6h+xnq-(89EBH{$!k=OdCaZo1+2*dgxdc11AU zP(Z!ahjEIWS#1nMf;!EatayfW^pj$t@)q$?CQog$5Ox-IBD?M57ARH!i&<_@^s?Pv zHSjpSb36!mUg-wz^|z}|t*h|UPy zoizf(*2m_{R{c=~X}V72x)deza&^LjmkXxj*lD}nDO-sZQL-hu-z`_T#I+x!tNi;} zf`Ck`3UYwCp6@($tn#UX)cRt9Z?xyL21UehM4(g=aNsSVlO&7b zY52g*G*q>0@%%gDs@|;$c1(Hdk`nv1)6k4p1S|ldB7?06zB}og~ zTvi-#T%aKxixaGG$t@=&c!h<JY4~A>#m5 zFHx$xX%6!8w|o=F>nL)CV=R|L-suB^ z`Tc&%F?=_VMd&ylllm(W!Ad(RpLP^nFzN-H%qViaMr{mx7}L8>SG%)dY)%*p&T0j6 z>Kl~2=Zw#Fn0eR}CRP7|MqdNu+mT6dVT*8P`p|-&Z6(m{&Pn2#UvH`#-R^IK2|;6q zmi0@Zf|DG)T^B;IW#pvVNXFEaDOAVmAWhe6pU_b!z9a{!&*Jr}v(B2aL}bJWcY#MV zEamw`0iNhPh08W)(@BNbSj>`=y`qc+x?uTZS3c4-a>LVOiyS1o5FdM=Jn(i?%;dZF zbps8G>Wv{)_hV#Cu^|bpS`c?%mu!yN=oPR45PFP#h z5r;r8)8PeIG%+7l6>(`~RXV3me%ncz5p8Q)OFC77j?zm*U-|NYXgox5O7;(r>J?no z2VDEhGs)vE(a}I7+M*-w`Ro2)gOA7ywJE=jRL169qstvXxs_>wZ|O2k)yW2XZ{ZicWZNuD^pV~&!D&lQ1?)(Mz>UuZLCL%XLYXpXU%Aq ztZkJy;7_#O&ED464F3DT23cbKktjzPOkh+v#ybqWI|gD`U74XEDv+0C!+A8fw|z?X^jYI)@7iS_PYhS933lOUe88k~LJ^(o?)! zOuQ)gX)$<6fHl(4igDW3dk=_+iTWGH5z~gJ)lij99)VNg7+-`fqI09_tOBj!a)^?G zFpr1gp}pzT0VinR=0)q%TF`F4?ULtECE;@@iWuec$bM&O;@Emqz}u2qSVclUd;fzv z?qj3in0v6$MVht6d|A{&G#-XwcC$}3O2Jx+Ovl7+I4iL6PS6Zc80cD`1A&BZdgg2`k_PsUgMkVHjMm*FToH_p-721(l|aUJ!jZ27Pin(h>a%iEmiGU=tp9F!C! zij4#j(lrIE0;)bWz0~J-Ha^i0Fb%oH!p}uv$_Mgx_6=nsSAipm`mJxItga^nq22vO z5h1Cb9a5kuMERqwGE_V5kMf3SyFC%p*5AnD&R>6;cl}&m8@bw%KIv3r5eX|2XrKc% zdpzUuenMzynzR3&(XfFKZFl0kkUU-}K5t}_SWDEh6H!{GZk2FaE@>%?Q`OdDy~;Qg zA`v={x*wP~iZrv0KeDC21zv5xf73b|tz2JimX-Oo-AH&Nfz!SfZ=hFM__YvZc?igQ^JkZ0MFNJhe)_6{&lH$1>;$euO;Pap~?KK@oJ+t^Bh5SoXBe>W?fXHr;fK z%b6tBpS#sn$^L7{45*@7v6q5QXK%%o@KtPgZQ%PFAy<1HPJw?uMypJM5# zhLTZLPQ)5?py&~A+-k%fk8>}^iHL#;iMEH)^-L5?DHu1V92{p&xraZ~P>?h0Evvri zdwEO8{@lOy+(3>k->}CRKLNFxC@GIxc_)SsvY#pvrEk7|Iz$aM_C1C~x9zF;fJGQK zP1ZNiWLS_bNp#>9dWNAim%(eOGEqAx08s-h;SeYqanL;ixE>~SLkZA~cnPhwoZ*o7 zLZcm3yYW29{l#u z;qBi}y!8kQsTonFl|jlY%Abw>Wu3^Jz(qS$?b?;M#@<)`PRP@8j5GSc&HuL-Rh~ei zU9sm?16ZTvIms3PTHwe6C4iN*qbE@r`aT?6W}Y1UBGW&je4?H)0xSuIFOTf+rNH#s zeL)#H3LMjGnwT@~3Jf@)GcB2-^F@H|aFDV*u7QwA;~~Zg%Jx}6;7BbETv;&dvz<(| z-w|DlwM?>l*&k$bFm`9D>vPsX&O_7T=&&SC%@rDx6O%^yXLM{tv9{R?G)JfUl7;sZ zg_pshOx6|DvxXy0X4@|)YfPW|_T$Z@* zFVE#WsK-wF;}NZvVI0^2n&6_?;u4_JLGO9^uqW%rUbr#fgxzmuQNREqRf7I0@Wn}c5cpZ>y z3GxrOWat1B`KO2{me~aFz@+rU-5MS3ZA|k)$`I_UQVVI3`cD!*AaL(G&P@4?c-{8k z+BCdrjXI0pSUX_QRUPz-8Vm;;KNumSL&0y`0c0&QN{aGyT#R|w=DDmXi{lqklsNk4 zc<|icYgZm9XxcGN+YfES_%UuCUVPNtBCVBf;DDsMa*XF5(T52Xo1*>z7d5n`3IiE- z#4`b-VIMbq2%>whZ_8^1pOQ}27m70sHAI%5ga)7=IwA9AA1+Zwn3Eo2eIF9;s zP=XXu@zm)*4*O=*%B!ie?uL&lbE*nA_Fz{J3UHHBdA5ZXuu}Y3o=-23mqxCE#6%g5}VYqy~Gm$=j{G3BLTaa}e$JcghaPL-d44kz6s!hrM?E>YEIJ#7|H#RyeV@6t z8xzrK^N)L?vJ7}A8U~ZPcCSc$qFU{JnAY%4nxsI^ic$+)+)AqaTvcafcoFP*u(bbOzYwJf}-c-J~obWz^S|yWo(P zM#=j7DDpaHyf#?=lrBTQqLI<<_+=(*D->*yV|{6ioElSRd;njHp5lO&!m|N z!SfUqp-%tIb}}y3Mw#7@L`Ev*9JzRw`HU+{XygXW^hks&h2ZgG^T)VESytA@_r-oK{{{SHrj4)=7foq-^kv=ynC-Nq&mT| z(~WmZOr&S>UD1f-C?{yE0Bl=rSfc{t>a*0e*v>Up84DCZKTO(ayWJZMSNtG}e=fXW_8YT=ebluPx;COr`t=8=}l|?e`4q0 zX0z=Q?`HQa@n0*pD{UA!|AxSzFb=`Oi7=oi9AbTJfCm=#cms(7qkCm)XA-1z-Tp3r zbnt6bETyTEw41LSJsWFAa)ObpqE_*5mc~*;AquxQ7Q2T?Iwv>b$x>AkjZv^F-hR&$!?U0ZF z>+`JrPIPiVVG^r#7YwR_hvZ--yZ@tC>?qa<26eov%1UrByx@Il&)SFX`Qb@Jn zZ0-2WpIFMyFSI&b_J}RL<*`LVA2p8ZKuPNb4BT&Upd+3WaEfgOM5bHj`q&>N`wNjY z`43+upwQ0csD4GDLx6|CNL#(8bM|}!#%}?d&RC%-9%f!!;wxJf`zpHD%w@QHHbczc zt4XXaVf=!)LApyBuiZDeF^#On=jc;Z6ZwnK@pz_#_p)R-v|Vu&oa2tg_S3;8FX~N)H=oNGwX~6}KxcFImKA<8-o0{kVal>nSoBbb$fq z6^+&3Z0=BB<(<0TlmXJ}1AQ!S4$EO!yxoY&KR9t?!X*~@A;3nkc9hqCm6$fV0&%02 zQDz*khH2Y86?x}ZT&79-UjI0g8Z2|#_+pB2S)9(uA8DoGRRR0+Rlp5S8z}9?7z%<_B9F?dfZG zToIB$gW>+i`A$1PMiy#$Tc&uk`;%nFDn$CFppe%O8sb*VJ+N5hP^L-{4DqBdHdrm` zVXKL+#hhN88)63<0BE^_CH?7?iPMYZ>JD`?ye0em(1lo+qTLJAcAI?X7x}{Ls0%H) z!CMGX`4Ds>rl)#3af+s1Ygy!={pBqkkLToolU84R|59Ge_;s6)HO?Mn)0Syz@GtY0@jTAg)G8kbhmd-?Slmpf3 z!|Rax~N1=RPBwCcDd%QwByO+Do))oRV zQ56J~Ps6lfpNG7V96N2>y?$B+IL`3X$(#O$Y$Bf9mJ8%aYpBr1RNrtFDmQL^RFZLo zwwvh+5pQ?8-MQ?cw-`wEC(dt_r^#+Fo5TV|waP)@Fuf)>0b2Uu6IYvTa!x)tR#zW3 z(>`hd+F;*dqbG9I&+5bo-+wmHjC~R_`n^sT28JLnm<_1du-%A{8&NyN4HU*|+$9Wg zA?5h54`W)ehTT`aft)H|)f+i>;@j;6gYtmHf&w)1&$eK6;^0@@-W2dfB7rDyR4Wfn zcxu2UjU{=q_gnv@H#a!f(SPRu*B*dHLET@Y2-nnLwB32MLOqE+ecUsxVD#mqOoY+K zHI5y1oru2!90bsi5yw0ap)oYvaZ3~xb1=T1n%pu$ClSjn z^87gH>9)})e!~+n6MgILPQU(krw^XA{coGru>Bx<`+U&t#&q8*s@iUJyS*WiX9GTm zZHWjSNsK2E+P30UjsqW}k`W76_r!D@+7^U}Zm^o-@hHA{BQ8o*eO8Be_1Auk5IkJp zX!P+AdU+i5!JFU|d=h$j2tD05`nHe0Ats`4e)yp0=bi3%jrNY?QO2CNI)cOJV>z4S zQ>L2{UNz;C5XQu`Z8zE~kGs|ox&!_yRX;2IA$ zE6}f3V+yQ1!#XyUmjK{isxpz@t#zrtY$m`dWBP`B3TmH@VII{rTC{D;d zm2QO^5~(%A$qF*j%2{W!Fz_qm65+at@2p8XMz)N4ng|VKUB0Z(vjH^|7lk%gl-$tFMsVr`dk0kuhNhIBoQKEA-`G{ubSCt&J2k}kEnf}}VV< z4eLXQ{8~oT0gJZ1j`tN6rZh7V)z2cyvBz)h!W9YckT47;MI4W3g)XyY>l34YRC&lnL<3UOaL4jDoOM26wnp@@B>VuGb>uzCfS!qp6Jw zhywV=#jmX>H`Hu| z6!3&1p}AS!Yervc41C$P{gY8!0{P-Vc4jQxUd|yT4O|$Nq2vgW-&+BVMGxM(+ykAk z={?{OA}*gg;w`7=+~1^OaPW~h8yO-B?4|ylxm-m^$ep}RM6y3<@1LX5Q-LDds;8=ZINQyVDhzKck>JP2(b#|O#Rropp=+AvV<=Txo07j)8R%+1CS z#NA1OUkJBb2q|7e`^Q&Aw!=MEBz_^uab4(spN%O?zwHQAyFOl?iEjsdiYE3kY3l(L zam9jI{n!us;qU)V^q>6cFP68vRrf#tT_2?%`uaTv6lzn`yuor|Kexq zKm1c)q;LD!oBl@nw|v(p=m);|Y5KE&>1XJF{OeyHy3ADG0?UnrjEa|XKgsL%1a?`=4aA6fD}y3 zL0nkg;NJ{JZis~I|1lmxkJu7#RN=bSQ4hqtQQH+BNTrvya^{$pmP3R$v@nnLGV6~R6cQMNfHXwoZ{wSVda#Lcyh=1i7lVZ|7F z&Iy$!D0LD~LJqzOr*2xH9HPibP$$B>BHLKWV_q=IEVQA(t|6<+L_Ap{k{6k0mim!M z+2rMiF_0Np(K_NxG6__U94Isg_kA|Son+0^#1)-w^|sZpMK*WKY0uH}z6p`&{)*8G z{9!1nfLmN=Mz3E=dCPLtQ%whi(c~E#6}!hb)ScIOWdnSw4Y&!Yvdwpl{!^nC_%~>K zQd7y$>Nx8%Ase%9MP|AnhKZXPKQh1QC`5rHLk%>*VhyNzl5TN;4RoWv><`+HowoZE zG2dxAeugbwvN(iD>;rd{CCI<=<4^Rb|LEswW1?UE`dj)xzVvl^c^vfHKKF6@)VIB% zuYUb)pUepny?uU=2+=?O%D3p}e(Bfg&7J8BpZhp{`ja2fAOF$M(Jy@UL;A|Ey(J={ z$6l5&|H{`tq@VkRZ}v9tw~fB^cWhW7$ z51)7X>7V_2nb z{fN{Rc92ehP4RXVhMGUb6aCp1dM~MMfy*@96*tVZ%;LrG{bo>~RbgL1Jz-r28k2H} zn*=jPowT+P5t}C|I6ru;Ld=@0pgHXN(z=8dglovQTHFr#G5J+~10!AlnqteNvr#`f zZEvnX&Ki?>($zkFB%0xYaoZc?Xk#O?6Lk>>=p;F{Qyo~Wd;&=Epev=5f@RLeY8Azv z>(!8PDc)_RiY%^~0o;05;C*s?LW)mmaq<$r*^kkG`XB!=ecQ*L=(m3E6Z8{5^;J4{p-+ACgRP&@hIWzYaDpB`>&_^386STk_{^HF+5Oj32h#pg0IlCb!732*oms(7%P7(4*{ zY9m__05WQsW}>ZF0-8e(eH*9~T zg$x`)SojKmGRDH`SwJT&7o}6*7pvX44eq09pF0SvqK)0}jTsJEKrdS}R~_@ZKpFn3 zR#sy|azBHG)0n&3PD7ImVgbAv+HVLDSHx}GFKb?D_!VgQWUB>reJ=l+5Yau)4Bp2K zQW&@JKXl$1M2hk-f4jY*?RGa5UI8XflA_2G$JnUSipZ(~9>)vq`?L8z_n_T|SG&a0 zKwlaORwc`54@16n+GkE25LCY&I+N|!Ydkvta?(7;)a-$0lx^dfEy6QVc~=`#ue@?l zc4b#iUI0pjLt!ILm8$`LO@Fl8L21+z+zCH$hBzhR8YV}_{!$Og@;cneG`c*|t+M1U z8DAoLdD(mI@B5yQ)4%ZppP^5G@(ummFMW&t=HLAlgO5ia_e1FUA@ue|=qLXEuhKvL z)`LEHV*2<;?}~omf$8b#4c%{dx@~3R|MEB#$B+G>-}0Rwr{D8CzMb|%=zsmYU!kA; z>95lLzR@50z28l5o^I~YtTq70LG*im=eN_J`nSG7-}bR5`q^LjXY?0->>trrzV;yv zIB9sIvKRTb5#4S~+s5?a^8sVZN)K<$bYrHEedJEJ8`B|W8F!QMhtE5GtG=cFy}$d@ z^soQmchV<6@&D5Ht}(k^$9dQ@d%xc~qz>;QDNz?&v}9dvNtWa|i5(}loZ3bc6tSDs zMvJzAQ=mZGKSh8RZT~fYiu`B;6os1vy&_JU$gz{4fz#TKfH-b^fiIFQSr^K>QzUhG zNS;F;p6`42p8i<3nOQSy@Ao^*BKV#C?!DH`tXXqg_pA8oGq>>RFWwM`bV>bAl<~TB zv*B$8p|&M`OFJ?}47~!;CNHS#b2B(C^S#V101;~OttF}O*qE(Kl0G>QAVuUwuk`?*C(J~CuSYdS5oF)l#(2Ib4NkLUyR2)3lY+#|xlDbQiE+~pppd)li9LlT}1le2%*#vc)c z0!C4|H%8t_g~FmkTP&6|jserjH15j2H`oQBrV*6TX3MJfSp<$iAx0Qs)ieGGSdZ=M zqrT0e3&70_PaHkn@XGArPxUS_37z#cbjw&kqVGVRA_o>|hkK_Lba-4|b$&vH5E zrVAp-Mz{?_m96}nvstPlM5h1j&-ON>7#LbRoo!Mg zS=nq~Gfpv>I@MA}eySd^e&;<8)8$F4WNGuRHOBQ>9I)tgV)k_X$sV)!Gky;88sC;8nbG=ZF_>U36$a_|Av$U;pLz zfIwK+1)uuD4gCDCehIhltTpE}5&qcw9>c>AT*bx3ieLVXZ{Uf??!|Y%<6*q#$%pXa z_dJSU|HL!6C!fA7>-na~UWdQ*XTJjvJ#ZD@df`?4&7c26eEFL%*V$@MULU;w3jXT9 z|J}G)R?HLO#hVxS@BX(>;NoIY0q`^tzUw<5#(()UAHZRr@aD&_;V@5l{>5`V_0^kL z8JLK0^W_Wt%inzlf9XfR1Mm2@2l1c&)O&H`#XI=5-+KoC?AN}A8#mAMsnVV&V64jp z=EJ1Nzq-cr1lV~eQnV7Fc{qZqVSDWyVvaCq}{1e zLiKlw37Hp6JSi4O=6@gAPLQ|3>nN-f$GGl*)#G(TP!qP5Fr`3q)hPI%n8yKD1Mu9;pWXS%Q zY%_^GG!aC)KR05F`6lB{<=drPli>x|kZmJs6wFd>=yBFl)Ka%XV7cd4-vip*kUF{x z!$t~?a$n4o@=>a_o949dx4xu4(-468%{qhH$HqEaZ;_j4t?C%*g(M<38?P&PIS1E+ zu5=h+N%s7k=lYZPureU?RcUNQyBlGpp!Uy=p5{{sQ|4mBX`N&g;JcNM@@)uA)Ab#O zC1TayWXgEE4iay4#gt5udC|4QAdqn*l`Nqu_$xldo`EXcO04@(hg?W|9vEGb*5w@F z6?8}kWO?>h&60QS(U+036#0Mur(ebd!ViA%QCvBj@U|ze;cZV`!=L%^={Q50S6L8G?a+!e#@4JGB?z@t< zJrUvhi+3>36Uv|wGvo1x?!ouI?=f7xGUNaI#IyLs7oNwnH}1tZp1X~Az3mEq}(m9vc0@nmM)b9KhOS7%HFJa^+ZzWnqpbI=d!U`mQV81qbc@+}Wkr}pwI7ogms zFN?RPy!`y(`>*1W2d>too;O}P$It!KFW?iOyI!T>Fcbdq$G?n69=M7>{(;AF?>z@x zyY~z~{p0uH1Mhl0e)jKw24DT=EvT&x++-KLdN z^Lx%#oYINVwf*mAz%{ft8xgm)W0#F_TntLFd$PFQ?_BI)(W~w-tm;EcutVZqgx`{4 z+OhJC)$3xBeSa!#Od&}gl4TjVkCDd3yQ?5Q6UxG`)d%7(-(}mg-${~T^LQhr^&*n5 zew%HzqYzN;RndBK|BMKWN4F7We{yI|Uj(Dgyx0?r6iB5z zVN7n|pClB4e;?W%=YtzJsW#e*tQ=H!W(){!P|+{K0I$$d2MS8&Eryw(vl3F^iZAvz zvkC+hAc9jNc6dx0uKh0gyk+QX9$}VqS@Fq-L4EaXB2(5CuRZd~Lfd40t=!FuJqq* z`-t`!(NOXvXCwjw$4Q1nT3HBFby;a|;c{W1Tl-%^m-1YQ)%@?q&5F=%u6Xg}i*>oG zY)UM|{r~_V07*naRGNW|2nR}c%JVH=DM8l8_(Uw=e}~Yb|Am-)tfjjMbT5I_`Top5Z?Iud%?_j z<<1cw{oXg>o~s8e>xy+*@jdT;J>K`^L-^DeU%=U+cF{mYc=q}$_|n&J;sft`J>K=U zhwz{M)cf$i{G-p|#!Gj4ZgLv5xc%x8zw?>vI6tNt;F~X>>;1ySSTj$*{PZonco6l{edE2R1WjozTm~IfFYTxh}>AVCJ!phRgta4FH?3(eN!i z`?gJo*ArpYRx5mq<#eU|{dj@}jPI-Ui5bgFGv5Jc6~;JD8o zv|H#@%FI-Fkdx4%0eoG60Sj*wR%YLkn&Py7#zX1Km$=#Jp-s&8@c2egdTQ( zSdEQgszL99ntxG+8O@CfAeklQy+K~k3Do1Z+i3|+<56+ zb&fv!m7DnF7hlA(FkZNMflog5BA$8vRV}w!5C7ngUc~?W3r|7X$aR@&o~vgwKJwnj z@W8b*0KgA@_zC>bho4ZCo*f83_~9q;xv#ub<*?N6<=aR6-GBB)eC3-j`eppg zPrM87|ISD7=l=A!;p@-6jNkm!b0RciOq5Qz{{7EBk57H!1|EL!Dt`LM-j09cPre!N zd&k3gwcs*SY z2e!qkkqrN~BRU7@sd{c#>qu8)St@?ZYpHl$z%)UxHru+r#KsXi){!e%w?aiy4ITx0 z{_8D%>5G;2Gxzd7;&NqEdlg~TANGeRF$@vK9P$AVq7g*kRoEBw7{&PAuAHzCGolz_1Y z$zJeatI#V*5edJ9yo`x+2bdM}iUi1WC-z+18ldY8ZzWqA;7(kXbw-o-AVosD!%(_% zBj^cvDeD&zS3Hdw1W{L%3B6Ym($%SVGO99i*;2Pw#R)8IdB~+vf<6M+UE0vUlXrf1 zvCL3_B70>i^w>?9=BwSP^$1m`iq;+v3<=A89+B#uaAN-2q4aZIur3$iRZmZQD}SV; zks+TOkO7w*bd;V}83y&eh*^&}$$XMyZeVuN5@f8ba1?Wo%S3OIJiS+NPU4-0sutc@ zb#zdAFhUfYsShypPZlbtsqs`}oWo=|Wx$tLtjk3@=Sb`eE=c`mkhW7iG2_Zi_@NI! zjz96f*W>U0@>lT1ufL2Nw=Qt~rSm$|oc_@eKlhcJ_=o@eYdEe9UWJ}H>U-rd;lXQX zAW)uFB^-|{UcSv(j^}vm8}GxrpL`I@%J}5xpU17+$2yR?tcEX_y@oIN4U6H@l!wkc6|Q_-+*Oh{ICD`^LXXX`B(9!Z`{O0go%J3`raq-&bK{; z|M%CwhCllHOg&qj{JI`7(^Q$bZ-C2bYR{F4)GVOJ z(FQMCxneVEnt^2*n)^MZMJdsgpj#a(de?OlE@P`h;;HG73^60yP;`zLfDe!}O`875 zM)h@-{z(^a(>I#`@~M^6t4>Btvaxj}EG>Q`QLJ0h>0of>fC|jJPKr?JQH3gW z!N5@(#zhjD$k>(H6I|^^G)ki3&EqKM001T$2cva~p|aE)v;>F+oKRHRocbrhRovDz z4TuWbN&&DAO&FdiFy#tx2fQ#fCp}zxbbKCIVl2x!Cajp| zGccxFk^PVv$CdE|A9xf$_0ey`eXl#&ovEcphco=`}KlunAfA}7}@9huc>Fci~dZa%9VO@cb{py!6 z&xC*HN52Dq<|9wwxUBdaKlcZ?dS%Wt!O1J!ckdbgi@*H->dwo|=3o0;zlW#4^-6x% zIuq$SryKa2ANvgctH1I=yyLC+<1hU1x2IX;7w_PYzyERk%wKpnuAEKyz&jto=fC_S z=EH>Vdi%p*2A=xrOdeCv+!P%Y2vYgZS~5@P#E;!Et%_r|@x}sUS8(4F+u;lV@oexYESD0^)$UuudIt zX&zc9su@Jxb7{{_ZrVu%Hg4kXXUlat2Fk7VQP*cE0wcE>kfbeJ3|4}$VlomLFP7Xa zRPn?@U)-!+$rQs9#OyFcc)((B4 zD=%}^0g${`x?K$7;`BOOb}+>f7+81N`q6!zGPlbqNocqxtS@JIA2}guc4#`QGe@d$ z2V8hLMPHDg{hyVlp%V~+4P@K&HRE-`ay&PB-|~r^qO5*u?bTq*Wn@jq8!hsHn4UI6 zZ>Oq}=j#=-$anKyGF;gVTl-`Mp#p2Cy;>dj^k(QQY{p#>B(3Kbk9G)DS0#Ow`nQJ!4Mm@g$-p?#4hg1UwUKgy)m=0Gus`jL5B7EwLFX1y^ zehD9bcUq$ReGgtm+E<@CzaRVfSMl5ncQ6rwFyU}WbvYbJxmCGmG_juR(&GE?J>dS= zo#hIojE_EZ70ke6kKBhJ`Mx)U8TgG)J%<-=-N9j+u&${?dYA~G_`(hR?jK&q2j2Mz zzVEvq!*74)Te$Vg5%V+t;_d;@;;PrL;L!r%Ud&*HeO znDgr5D`zv_^!PPJ)9pJ)oE^%EzJzt6##Mi$(0;_T`L# zbeLa0SgD_^k+KD?2Fhv2a;z`l*;s}s?FC-$!0Mj>tdZ^zacxmW1W4?69!?SR zAT@QgdgDh8#?9oHjdJD%WG<%B*&Tk_AgUU}R#M*^Z7Z%J>n$n_^)Ww>#}hqIAYWyA zf)K`{Q;=B5mJL)c*`9WV5RvATZOO=ok$Bcb2L%)~YI(C0Dm?~Pv5X(uS>N9>JCvL9 zP84_Yf)RtHZ}5JOpM6dmdGn15RN1@NV?sKihWgi{olaVg8`jM?47<_*c@%JM7PKBW zgzSSXC&g)2nHfXbaO;})8XBn2ePe8b|SK-C*Tv$zmAA@WY=rnc8HJ)iE`C#MV$hWzKkKaamRB4-LOoxMS z@Vi3X=ON!D+O)~qQ3r)>#_~v5j~D5%t7?OzurB@f*sY)!7|JGy%*CVb8Yq=yXeJTa zj+~|}itQ4MWKiQFJ3$d`Oca<$*N5%L5-Xq0Mzd?_~-6p}s^3}!21wp9Do z`+VuAMh?I;yh1>QymAh_`FM_bK2uv7_DIDtTHOT@R;yxCA_N z{Z;&n-~Sdq_m!KN=Tw=M8UNzV=gnkQ*w1OhvrT2^%F)i^$p%xmI_(7~QNo^{hY ztw0mZR;qgRTZX26gOul#!2sRAr=}-4KbKR~72ozky_9V>bU3W5SuP_iET&zKK z!Jv4KC~R4Lsj?$I4vY7tO9&MsjmXyGEWgNw;r=o18dB6|C0Pi%{kyJ7A;^)t&VW>q zjP-Z~AJ50y?tY_&Px=f?a?t)Htg?&NmdXE4hcirvGe7SrWf+wNOB-U@;T#Nk-GTs=$n;m-M*4#=8x zzS21*LOoonYoA=jb>)5rivV!4n{z%@dRZB~EC64moQ?pNe5D-FmRKXxBDbKVZ|!-W z(jB`ir&-xTs68NRp4+VJvZS)pgnSKDD#Ku`OIs;Y=m8kZn)dr%IZKRt_0Ce4PO9vVs};hNh$;XQ(^S-Lj)YW zFv8Qf`c93cnnJdh&H0_>f%+}D@3h`Ydf5dK<0!?Qa}rf>S65t?rW1{f5=_ajYEbm2 zSjV+(wopT}Dl-+w zb*UjuAJ=p^>_7C%(6#AkvZz^G9kxg0EggB~eCQ9aix!ryFx;jap-S*&7#MhF7lM;m z+U1C*y=^MiG+ZjkiwoJkTS9DyW~l+#$Uxo0Fo}3C{T{nMD8nLY+3n<_3KYXvzIlMQ zZbN4ESPpNI=aG0>w^GtE-AK(kGQca=<9QnNoDQaD8|^^IOPhgLFV>20c8ZnRV8tEd z;;PM=^qxrXa5$oLhc0Hqa^yTn+NX&o(5x9&%c5uHLtb8S2`vea+s1YxpQa9bfCqt)b{qfie^p6as<^82x}P8CuKLS1b8=98_#Y< z-a*GmS0XLT5x^>~R0AVfwnN5;(z#_qF7F~kKy?e1YlI?#(rS#fFg5Bl*oGE%Y_LqT zY{!Y>=9mRJb}IuYC-KUWQ>XlHxTAI~@-lLFWaO!^&GB6hcej%T?h+9})ERr-+e)>U zA%2faB|qgxb9WIl_C|^9%l1+FcoGrf7J5R?FBh!4JZ-_V&x+uS6GTe7wpjbGH7Sp| zlZs@CoDZcY7M5nJKOaemIN`QpUf$9~G?(pUWYGG7V^MPNyktLvPOco;D0d%-`lAFj z)Eiz8Mfpy_H_f6_Cx5P%O_hr?V#OD2=(L!S^M9QDos|w#D<85{u`PR--dO5~xAJ5s zCS4oGG#%1Rg8O~+a)8US#Wu*Oh-FzQ;%VmB4T?iSD<7$QwmG+3%fJ|_q7Ex%C1d;D zziDr?oI9ehorD6D`5E|c(^WB_BLiSi?xd{XR5;jwuBY$Q4w?7bXBS-qJK+kgeQ(Q~ zybOf!ccpR?MT6JmLLYgU^korjNVBkVRYETV4FaKc+8i?cpL?q|)SoniR_#=0@BD&M zlUGwzMK|Y^TRV2^RU{u;F9e6v{#`4xb&p^RlBLOSs+x6wT>xI4!xbfIM&@cf!s`FN zs@C_Cehg5i(3LRdb0l7?aJvhM*pQK{vd5dBP8Au$s3W}?yp{`I*Q{r!(vYpMsGJO! z`glmky{;z_3Q%pM&10V#XxDNX0-{*2_ERWm8wtDn=)T{j>GEeq!Rb&lmyXvq`Q|Y? zv{%~Kh*Q>Qa8rW7@E%-qB-WKE6<4!rMR*G5gi&#qzY0jekI@>rG^qs0t>rYv{8+mcSSqa?y3mS$EL zN_`O(Ojy`^lC838zd)v>72)J?K`?=F{!17veU!4Ks1PDpbdh@5sxYKilEEa5TnPFq z{8pBDCkH)SAP=R2FG8+n(v10VMZID#Z{(b++*$+e*dRlP+qw#rlcS0}W4*YON7bcZ zZa9waZ9-W7O7}=k?wG3_p@Nl9pjZIw2O`e2bU3m!JF`kE`gg zN?+IFR6O!g&J|`ddn9HN=yGR6F;|VVB6CEOOQS3Oei1nFFW#Fg%xGQ_i#Cn zvs_>9BhRZs+KjRfhQVnjcs>K>G!v|w&v6pfQ78KJm2*BzrO)x?O6J=cF@T6LAI@;R zDEE3xX!}!b3Bg8rZie*priA!yeUe1LqP|7msg`WzN&PBq+dAW(4bnrZ>$;@bZyDSr zr-;g7DGVA}R|To>MHEPs?@Y5(eE^{80MsohrVOEHt&^fp)D!FbL@!??D~c~A2B7v> zWkhbyLm#TRH7FHkFdsp5rs=45MCR2nxFVC@qR}Tcl1y1-@Dw$ko49|Lh9cyzpC!i0 zGSfcN+@#x8lG-lKAf;2gtVSd|Y%}S0)2&oi42X9`O4NLMtRTxuQ88S7{`_t#@TJ>u z13RTiITv{!efO+8zkLqMaIG))lMpr%6mOB?Ls6BkI_^5gp5{;{T}HYud&4MkW**nM zJL>WJP$gBYE2Jz^5e8iY3Vw0rIRyXZ?1I2qo|xNRqfrM&!nNc}TIKt)XDJez(pj&+ zS4iPk)faGw#)!<1(y=7yF@>%k37Kst?lK!((h~Ko4N{hhT6sMKUD1v3c0VKl^2>IH z-Vo|IB3<4{ay4GIp#;3bz>yiMeA9a1TPh8TK>37NL9*i=)aq}`1Fw;(k!_P_e+%iA zu8x z6UU@TI@jd_yd3*HO%?RJN)o%-J?aMp)O^FHuw@tkO_*jmV7IrudfHScReqxr;Y#@$ zR7A@{XjFwCvW?)#952oHlg#G$C+RCf3MoI48X#~gF-$~Lx)<0(A!#}x?atoWwEc)8 z_s`<5%FjYvHXR3HT^2J7EPbeBEq2IN$#3Zmi*$B=7xAKm57{3F-6=4aa9wWM+#&xXtZQv~9zg@}5je4gr0RSc`wB>KEpTf$y-nx5%^RZ-oO*n9M7L}v##?0JL++PFJ-O#62>xjxuH z+ysZxNlX4kt2UyDO*v*;me5D&#$=QNTtu_19Vi{NHqhf#w3e;TumnMFM7lpkZY_0w z^~taWe=!t=@S=H&+D4+_+8*4-3YL_%QABO#r{f)BLt2zSdlT2WSw;) zNk`UxPFKx%pnL3>lZ|m2`yHSy&OM7h(CN^N4pzDZy^c_ouFvb}^-W^WjCmWV^=FwJ&vBR`PR|&kB#s(*Vn6h8>9< zl_)%-_OnlA&l?)UN{}Etm_GC>f`qzPtE&sEe@q@(W~9Na<>M~+Wo2TT5B>;!P*wp^ zFB^H?Z}HBPMP(DIxOh0uEVs$JU|pQfujQjcq-E11RiWACB?k>rWyp4XV*1)u7TP9} z+^=N!UcFZ7H2`@x@k?m3H(oVa9`Hr_&etS~1Fovi8kZOb#B6_9fL^Uf)NMDX&67?~ zKX3Lf0$?h_-8ZMAA`snbg5hUx@Nqf=O`}8mdWdl}*UoHcC?hBAv`JUFv9+sTIm(MX zfT{w(4n|4qdTguEB&j>oR{RH;=65<4ZdsbfZFHhqcG->V9$zJMVhW0Mvv>nWM_-fw z+CZX>?__dz?4q*Jo<`zU-_}NYiLdlb4@*)5@N$ z9+Z#l{r*5vBJUN%R@Mq_nj>*K#gT6Uuz%KU+rr7wl`3osWx3$IK-5<)xC9er(R6wU z^0`^{T~&}Bx)N`D2g9^_3>t4wV250PA!k)g2abJL)5uO=$Mf`e959{mfy`@?|JVj_ zuoCBv3ajjeKT^lbaw#s}tAnIc)=M^bD0II=zVXi33yX2H(^JNuNChL>pGKE?ZFtN zk0ifa8R^c;2CH?1a)eU`QAL}IucD-`LJ1f2my*HAhg*xC$(2t{i}&4K2zea_B_03( zAOJ~3K~zF)vnkCCzpE7ZlMt7>x}v@mC5^FjftENADm-A;XZ{<}3#cqYpy?XbVbaHy zr~k{|hUUPFfE3PIfsLXC(mx@y$DsoiTqYOG2a8g1h_*eOge%H=qz+@pNH{N}IYN;Y zi#&v+I|iM4k;q@*l4wVn*ArBhh{d-$3SPS1NhXTqbZK2{nfkYAACcd0VFqDsy!G_R za}tEHL#k~hA|b~)wDX<}tf-8jQ)VeGV^`=8#nU#2RWU2~LIB$ncM?(R-M})M+%QBJ z6r~eFl2=L*Wy9n=Zoo^GGC7vfNY`{Lkrf5fw<2p2ykNR?VjEW#bu8@g=My^jM#mlk z*^UzF5MHB1imDrA81^%empzNx8K=_d=!Mu@e6A~#+CZL{*H+)KAj%@O29i_3Ztp%- z$7S~&T56Jrwx#oJd{u1QIVrhbW>?z8Rm`<{K83x$TjLi+g*$$%%d zJZCY;{y+}qs>+J@g;I|hye3#u2{s*Xu?J4=o7+N9PN!WOYHqxBxkxjK>;a;nv?PrL zJap}6o5ac1*V@`bNi;ENn(}GGK4sGWTWOZ~HS`Uc=(3T?F7M>k{-S21HPK(2uh}Op z@)el8GYUp6r^&+c~Ha z`Z(zVMNVy%Vo+1u?w;)`Tk$UaBVYD?~%o>%_Q_*e^e>?S?HI;l>D z%G+B7sRXWplT#mEeWfz8$kXHM{C{BCSp2PztoLz|k-pSC!iXsb5^BXHDGvJ?U2DnB{5D0bFaqL|MmcIKMoA z`I$+L*lwp9)hbvdf0uUiXsQhGe2BTZ;Ic{DUx!8GU{WNZ{Lw1dzCb|B7McyS5(dFM z5Ri@3EIl>e*k%*@Y$V5pCL*z*Qc(<&+n&;sB%8 z$xE)gt4tICJs+0e(R7A1C>Z(mg3IfQY$b00Y*t?Us`T5Cy9{HAFxYcW<+(0u?mc}aCvWbC>^DQu_=`ICsPTeBpBRJbOK+Q~dpwb@9KHOqtwQzE4_ ztcp#MXj*h8O#-KGUeB(@pmw<{+MCh9uIk!W1j$KPFVt?o0)`Nvt~zkb=?|0eO-?4^ zkQ9ZZ=4&o7N?w>1+iwz-QE%_5<=K^@_(I6>NavbOFc~G$r`jSfIM22{wT5rtO2D^I zP;D*BQ?Xz|+z54Vog$tAnwqmJw0WtRAzqph>)q>sYHM5MsGPMqL1$V@a~OP5W6eq7 zpYRdoH;FduVC@AS9ZcoI=^bw!=MY(#+WTT7EQv$%uM>2?N_H^&rtSVV=(_o}r_PVA=u$Ad#W(AbT&E#j@wJ=T|Vs;&p-@+acH4 zi{5GqsVq}=iSv*STx^}y8N$YD*W+ZYBa+P@#Hm2nMG@@-*s zTl_kqZJA+PpH%iF_Hg%*(@4mSZISUaN4ZW&C$_K3s)At69}D&*_ao!569^3LZdRzs z>oQ71Hopj@W-3e298sYT z#wImQeprGe!(dBSe($Yv5S^zkrV{n&De0e!^rxlIW0i6NZTWyAzG5)Qv6g*6<9Ml5 zHl2pLE@eh4XvK75Tn}H1@Hn0WK%eSHn#3~5VSWLqdJ+knu^EqiZu!f z1br^U$%F{ddGe$vNi#5tY&q!9;qqltW$LT$Iv8sQZK1uiYlx#r%Lm}RJ2n0*a3s4N zxDideX+0rlWxWaCwo1iQfY7`O?}+yj)!A}Ep7roqyS-T!ONhxp@}WcsBC6D?(?cvv zOga%Iv<}6ox@G)@C+EYes;q`~&&KZ~rRSh9tjz>RS|OJohr~jjBpugKhAgEOIPY}< zc;(iX9SlYhRs!Wy7rBucYM(XU+_X3Hdw}0~K~g>rRtC|@g>>pe|7tB=0eY%j3j03H zqi~hrgDSZtUnGK~P$CX`ZIBUfU{ExPfVTvil>gTIqzSNlZuD-iC|S$yWa)I>&SjeH z^8uI+8s3Rc$4wqf;mcn7&FH4kI#`@fHnmqB*(3tgOOQ%M|2-$Fm1=_qSz{S7+OqPp zBYXIv(KSXI4R-DIKz5=asnAnq6v}JQEpB5O;INQR5V9_?YUM{R(KDTXK)a6sU3L%s zrQ8N3)befM;YI`jlbf+e6mmSJY`Bb{sG-{e`D4M~3d5J&^yc#5Kuavxsb9mvvA+M7&uJO|b# z>%7q9wl<9rMsA^J$okAMV)au3G?~pi2E1TgNlJ5E9Smzr>ig0JtbdOy(2pJpu1VeFM3HG{w@1TL07hlcIq+SUzv?D@J%+F~6&g>8*VsQ=Kd7GFd-&RV$!H z)@8ZCOytboISysR#VH(4GV=$0BllHM83^fWxAm9?rlsqRug7tzw3MN?pYjuE?{^r( z)_Oe?bZpdONnJaq{big=$cB``>yqV=I((tJ8nH4S^7N$IZ%xafX&#^DARmnobw`H` zWT{Vm4eVrEiJP@Al6)7C3N2<8TGM|U(D>Ghc>zcc40Hm9UUInmQYmE-gVsty`-HG> zGhn7?jw-m`hjfLFY*pHJ3>*!~DY9Dqy+&jC6Q&XB7gX!DmOT%?L`{*u)OpO3X|E6l*{YrH`n^CPZM(>hjxT7x<)R~TuvE@iFt<$)wz8&Xbq`nF{xNN`rH$BX9c2FV7RE+x5ef5Ri*ZI21Q;~(#Xp%>{hR2*|>$O-^Ml_u$HmZ*# zBr%DHq+fSN(F;-?ZU+KTC)ld%W(8q0$vT}VV0%r%Nnm#^DH!X&93Zw6dd>Vtr*xk{ zt!uB1ObJ<;`d}A9g`+^De2#@~*pWCTDJG)H=_#Oh2S9$&)5A>*L`F!4fULVs)!JW6 zhYV0dx|A@G`6La64ORT+vLk{cp0(xAhO(&8Xr$`|t?t|_^>yi}l7RrENEyTt9hrrl z)2N@l8MYq(X0m}|U7ZorN5T8{)sY?>ht&7-r6R^fQm<1Z5bDjOcnLiVf) zDv!KiU6*iImV(BBJw)v_Ny^V=o`|*y!wpidwC3&3>lgqT)raMG!Ml-{ZB1okg!WGU zHI$qD@*C@OWK3+LXAK)QRNrpIT{ebNKgfA^x*Y7X&0f3Rt=~YCi_zH~e%fmftkC%o zdw=c8NCdlNN%Bx{H=%7orw!UBaR{}OL0&4cWoa|RcCP*M)WFyR{gIqPqoB_1!TF@0 zBGQV4*FsKkHI~{j)L4r<+q_L*71PK#I6u3=6Cu>xM1YvnUAl&#)S|@|MZp8t zNUfd3Y4WO70G>=`94ugnvO1=WPKY#w+Z09!nqI3tswPC34hKJ83-OuY%J_V{JXpqQ zzI^1jGLI8Xuj`U#n=~;7sDKqZcaN_&5Fw=Nja-67iW)%{l)*8htf8y&C%-|Sr@gNc!)sP|$g913Jbs7ZaoQT^YYJY)h@Z;N{X+R1A8n_!U)}qvZ3(}}+HUOz*9HHwWsZFnh$@f|zgm2w6{ii2m!BhMnm&OoudaNv zw#+y}3oqdmd=P3A1vL8;sei_)jc#t`_eqmRNBlI)h3jUYfL7V}(~!4iS7dVnRq@>b zugvRiD>%;`1;H-}%mb&#n$~ zsFRdnI~D9Ar-;itym|H72E0i!FdmD(6pp=`NG_>HTP~k2S=?1m^nvF#gv`B&9S*or zTv&9r&Fe^?JMs>ITB2IB1yS0-(D%`a2y|;G)8-7vvKTAzUJ2s$*jUzK-mY9+-io{5oUPDotM0?_NpPj{DAC%%qNR9`=^0JrKB;q275V?FdYdsbY!>72mKbht+T(9!nx0U@} zIL44|<^(LtxfR)pYt^??d0T9gsIZJn1!3n}yQRcD@@Fci5q zMv>-wUGj{p)x>m2V=Hd-U$uw+w(b9Qrp_V|g@<9O1%4eU>RED1DrUQbQR=6O?ha8k zK3UsAD@75ZwqnU1tm~2nt1C3wh*JOcAO=BRb0zr3w#~Nuhpej*{f2fp8RE%Ax3y>x zgA7w3a61>{c0lSbm2@+cTS|b_Pt#-sGi@Z5U$x3BFQJ+IU$(pNZ7rPQrc| z9TwGBR3_?wmaLA&56qMY$@kGa(nxOD$s_65<>W>l%H*kn{o?Z zSxW^5xY)cSOqdU6eFl@!3po5FoP=eSLysiAuv%wqn#RkqziuToo-&Jd5`FO)z}7Yi z`^}5Uxcv_AXOtC*EV#8)9Tx|5ZlDyYvfd$s#Z%%cb#O$SCG03#045?QB@d>}n*eD; zVfS)1&uT*lr&R|mN}b+}YtT*=HUaizQ!Oo4NsV=3`QD2R0^b6s8^l06)>?Z4vRNEV z{aZ(Q_oN#0FxKT9^WiGs9IEGg`0W($!-x6MGRm;i(-@j2O!FC*U)JOe+M{3meLH-T{3aB6ye!w5VMU}45}SkkRkxMonBAEo6t1} zkbkf@p5I{U0Bq!)$Db{Q!{P%trFJg5Q9E76SxSVWybKV!>mzKQ!s~iKz?Q&jEUon< zxDqV)KvZ1E#pm_H$Pgzic0N?f2LhRODsdv8!^x=#P$5UfKK-hNE(t%|=P?yjG?hRr z=aB*7Ry_q#L|OZWWi%bt2jpMO>Ps#XRjLIhY2`_w*O@)bozi}k(?szWr~5l>1wLb5FNJfDb3(5f>0PcZQ#y2MTJyC) zKFn|+OxY~S?SaNtQ^M*Kqw%KhI}`ztluNw=#1WdEjIHFaNAP?lj{kP2fy5Pewxh8L zNLM1Q3s}fxwdMI&idPzE$O0)J_9Ppsu>R=zG*>P<26}c7qFxb0jE=7>c#?jqAhIhU zqi&TWpCW$iEA30dmV8tU8TKxDih`6O22(JQ`EH_?b>_{(-L%kkX!XT~+FvNwAZYW# zh~25KE*nJxTTE=U9u$@CT5Jih_fi&B+~9tPLbzn>* zJ$ID2GtM%I+aFETZ|>}`%tp%YTlW~k-9qmb6Nxz;SU1gA%!d;LJ`J=Xa$_a=q4!<2 zh$%bG2Q2wSEba;FHryL(Nk!ZT^(HRhfVXJP~VgOi|1=GYvPxN3&q(U0& z&X(OFS40yqO~AUuS!uwlA$+IvkejeOuMz;0ICYoX$^teSTg(^Z+5Y0_bHU4NI=l_i zR78HoRw5S)!qJ{G);|>>|F_k#P9jI4+0YO9*@xEBX-Dtl_R6+Wj`M_zMr@C2>qFP} zqpxCaH!8NktC9EKCz7k*Y=IS38U=je}0@|c1KA9g1Y;*o)M z(Xlw6NTY1v$fz3!>t*Rk4nO*EEGgB;M+Tz{3dm<~%|>p08sZI}5umOrD6ycIv8Z-W zv?0)FSDgti4u;i$h(*)GWDuq-?<@ki5=?K%gsETm-b1;O2x-XG$~P~cMef+0YWLOVhg35yZ<=_R|XF!*(gz>beZ&00IMZ(zUd|bM>#J^CH-o==_(f zEwDCtGtz22;{xCH3kMuN_$M_`JkoIgjl;e3)`sn zCCV#I*46iuwKG?&&$j-KbiBi`5m;T$+R7H)px5|90AOCgJY%E)ci%+Y{-|ZuO1T-& z)X+)JWCw<5D>Sm1q&n$PKGdaCQ%_PK;P!9w<_1!l1-bgP4}L~8kce}=_K=aKy@kMT z-2@Kx;G-JsiXg=bqJ*UoQ$r@=gf#G9mO$+YoXC83`qFqjfI5zN2ZZgiLZRHFx0kgeQHtnrvsB!5kgRhyeJX)I zbcMO$&>>EdRI?M18ASQuCUJ!pWw=9DY>7dxw>7&`msxzN`Dns4JJ%j<$>->MXWG2$ zU&JrR_sMSzr0b4Wd5^7=l*f~L@4RyzI~8*E4j7ab9I1R?mx!j`CdjFUo)XUoP?lFM zT|L&_2E`#w8ie+lh%nIsG)*9yVNa)Q+1<4-&TlWsaU7Ka(fmen=*55PVy$>?$2#hg zXRGIYor>)Y%R9s^O|}l=gxhvNj$RVU)&J{56rFh@p_n%TEJgqTAOJ~3K~y7t8HPlO zbLU_5c*|tC3`i|h@?NTs2K8PsvsER4mkWR+E~K6Z1uSb2}`^s)*z_CcFqT=_&l-g?*&lK?;3bfqbZ*T z-Hxfz=MFTfaEz+@88t@#-m_Bsa{64Cs{w2Ko#4hgl&Y%2Lz&Kp)fB=G=}`LZ*`A=J z%}TPqJsm?>#inH6R;5fD@vez&`%BNQ=YykN<=CaM+&v&mW_lt&&n{bF;{{cKp*(Pb zDY$C0kH{yd9H|TgIs^Y+KGokc$|OT?NTM_bWO!+bEw63mx6O1j9EKp0Cx3E#@7FMU zi?y|lijoAvO1CTvD6d@Yr7Hl2ezO;r5X;!9#>TL-GghKav~w=cG9z^?lXx1>(3O|P zl#Fpdnr^{U_rU}kk-sR;g2Z$F&}^gDL+!zH!74;KB;r1+O46`L4JiiQx`i%InetP1 zewF`-+C`>_ra_sIeDNU18^B11UM)uqI5Y-s2==nYrp?N+4Mcaj&ivJ$t=Z?dOXdsg zDtf#0b=yXm$Wqy$iRRSloo1DBZ;iWmHZTbTg)U>mD{P-i|83|;I_M9XZi7WSJ^0#0^qs%9;+Xsq1osiwUquc0rI?4)*i zUXB--&j{Y3SS8=Km)=Ez1_~8&sJgMOGo?WvI42LsRC=w2hb+i`vY=>}F}Wl>gu|$UZfjROANH3~U$;b@{x*{f1<3@@$Y~`(4)V$bhiE7>8tv zfL#*Q+Z6pn7+>ShYS`!E%fB!z1yNeD#T`BY!4ymfwwR6 zAQPJyHR>wErS((n7&nfNCQ;ivjri1j1ZvY{8&kd1@E`dRwJ02 zN|!YeFwJ>s^OVdCk5z~BzI!Gb1 z@1pFa%rTkW4i;gIrul%S%E6w%vk>M-SG+NJ?SAch<~#LYK3sORm&o&z2z7 zF4eI5^afN(OCncx>1ePvniccTV)`_*RS||4Ds-mn6k$0rn_Aw-n)wx__)a_I|8CO8 zc|B37L`c2#IU6WyUzNgzLRB(p$I_)-p1Bz&0r$kw-=t ztjpe2lZv+MMONOWy1OeCCqa9AM>h6Tcx#qyFosk_j8IH$!7WhU5!}LgP$!X?17c@u zLVE8Z4_f6l)4#OLPj(PG{)}+#32H*j0~Eq%Gq~ROyDLct)7|^kjGDO+rbFH8M&?CC zY)lZtfswaOw9|{b3g~*2`!{#DeWcyGv598TG-IL($TOm6_zi)iN#VkD}B?3n&(b zojhe0C)aKR_6DjGljnBp!C~tHrWx3I_@0GxGHr$3=w&0a6rdSIXJ9@@pY|9&i>)z) z#Jgf1n!X4@?#k}1I1Bq#0wb$416Z8e2-93`gP#U6wTILVk?cANG$XAX;BLG+#x4Ey zAhBQ6wqnz`2%p6(Q)neo+sv~qIjHSC#JT{}q2{y0BYllMnno$`PaAD3{m4ln!oX$i zPBtc#u6KlZPf#4vVjzoUv^E}fgTSukJYV41{?Zrn$)pah2dzzDP0b1UfHjx2<8zZy zQYogp+I5HCx@il+33k+_XH=em%|4HGNVHX;nd?omXDeB_ zo@uFHCw(a9MA-ZH|w-p2}~-^d2p;+BSUnolo2sL8?p_OZ@0+b)_gAFg6PTurBl ziU8N6%i`;wJ)zW2ei(Ro!K5L5I}C6ZlzXZrZE6S+>9DWqka#p->6U{>Lg$4oE+O4= z8aDrq@z`?FN&maHHruq(oC7lajGSC(*{fL2JV=9ECtS6}@Z0pn6oOE)ky>$@TjwH7 z)IFF_JvQHeCCXUJJ6YyaAax!n>C2!iUOU6Oc{QYbiuzE0IS>!hkCCZmFZAmXHWm|T zn!8n4gXxO^`D>79i+`2|>-|RhZ=HT*2N*y}7yAdHLc5C`S@@%D$kp-6)PcEVeAc|4B%mCYBCYpALW%FRO6{lzqQj*_D zW$Y+CEm;F1jB44tL?W_q{p2VPVl)q=lhkLEH#dJXOaYvdN7O9u zlk4f~)IwG%B+gN0`7KCt9~XX|+offho_FtEKOjjpZt8-tRWVOT{bp<>~ z4C*qxLo=$-TmM)x+PcU#x;*u+OH#D{*E0kR-_(GbGz$RG1&^$-86%Dm;crJ4`S}GI^iBp_WP_sG6tiy0z<#y6?ZFd4GRp1rtnyyAN+U6%? zPg?L`g{Ft#7DbZPDl=?LCfhyDSFkR3y47OkPO7SvN%WE=6?j$`4np2zCmZu8zwB$9VXh6Anr`h72NIZ6& zO5Y_w7pt$EhIA%C>;EP`vM(x(h^o#{SV~!bv!2;nHm|&paC6vmk&ECEtl|(&V-9dy z-I4!VvI(&&+-OX>S?!S*$>n(=|na#_Gx=&zhFk5#xGn-2LrMiKV@-hir3!+ZBDU#*Y68P>!|9 z6qamKXbICifu;ipQh>!E&=w*mFxV;**(*SI8Vwv?j$oSHvj{9H zDv-(ngEX(oAJzB%oz(7lBWycnU72RkIzta?OIkdFJ-eh0io#XxF&lTV1t-WR{B`7N z<(o+VnRA_KLJQJPNkP0+!VfDCJ4#Q}jJ3)#PCPX@XrEd&-%wdKC6N`dA?~Rb(%b18w*b3sF04L`pyI6#plT~uyIUe72aG51=Kj)X)j>TlR zMzavq??Pg+ku{IN(Zn6qo{dP*} zlGc^6g5AC6)6{nuUK1OAqKr8v?={9}xf@$Ot6kGH1C;KGO{YhvPJ*5ZE_&y{E%n;0 zU~e!3*R5PuLm~B_6pT%DcasVY1M?=+x}4`hIe)Kd=`1ZvyIStb*@SzpOt^BGaOKL3 zxgL?tI4vevL_nkUnmR{MJ<5CJqF@}QiPZ=;S4pOyu6^k)f;ME`=+ zlNaAuq{6mUq~bbGMYS<2De6j9ibP`AUH6a%oQ=EW*H?bZ}XsEoPU2YV&w+?a69$TvsbQn}UZjdpmp})tE9sN}_OVNsRTm#fjt69r zWn?63A<;qU0^U>X!QI)sMw|1)f@ZPwxTB-~&Q5QWei97mJq?>4fILDx1!AIn*VvAM zDf@pTDEliYboNgwvUSCta`vvPTqRN3 zhu{?3lQxaGr9iwZDkJP?+3Lp2n)m&B9TEdgzV7JoEU(dXNWN&B=`PuH9g{|cH#kar*13MbMuVibot7dO38m~LL>j`(pPN&JMB2| z)TN0CO3qrdQ65N|!0U>2xoCr)ca_Ep#Zi{om*UOf5cYk1RR_u`@Z&T#GCGn^eLb%1kPR>twT;@0gW zuD@`OZ@q8_UwZmweC3<3;QEW_I6tm9%&E-2MKF{OjH9W|`gn= z{5!Hg`ettdM77->{>b+6>Y%^b{o<+}d9BOAJ?$^y3>Aac-Fxnq=)7ea0NC;ayAInM zp+7Mdnmk{TC~35Bq8l|y$K4UpIYxEhl~~f=+q{`7^F6!`k=J^qaP=ujq!L2>O|eg~|Y zLTidTd9mHiz&7&KEAS`~#iUmn;iCqx@|jeoes5LFHcnoEBIQmv+VYmmMfIU|c5tu| zMC{UO`_Xr)1ey<**Iy6#-NFJ|Jd$S{@<_#rH0{ryY(H!9sQXss?5u5D`L4Y85R|Ot zu2@uAtVhPk6$0FbFM8->-&`%?|J9nkuDvs0nVxcF={MJ{|B zT5qOvdr5OumX*(k3F}(!tB(AI-@<<0jo^xM`H)``^Bq|ByK6ky=*33d!o81(O)TY8 zp%+j-nf`cWTpU-t{=qAF|2rPSN8a-Y-t*)GxcBOeD+j`1okNl$59 zM$8u}o^5qCw!SIjvstp2*5Y^4wP0NCbqSJ1*reEamrW`FeH+pn%w!qJN22a8ar%*|ZMEY)6=!8eg<`@F& zU_r6r(r1j6;}SHgiH2d2xncihure%HGmG!mzFYgy@*ebueXZ5{Gy<8JMYQy{TtbLE z=5nLtN8kM@KJ=Ccure@Fxk3Xt%oD!y!fpKh-+3AriwGR4r@p{inDNF3uHvUZ^aReP zDR*=e0qY7(6Yzik!E^ZJH*Ttt)zGKz5f0XZX7}Kzu%JXkU0ahbpoZx@NRn>Jm!j~x zy%KJ&0cm<6<$%qzri&^MS12ngHz{@2RW$ObLxldj;$Md0Z7)?uopc$`K}!S*oE)7O zI%Kz#7C3FPo%^=yknR{aGy^Cc45-+>$z=dT8Q&7nR^BrDQQU|cWld2|L1fWUWyy3F zjP&;WDN&R-9n0<{*CE1FpBYmf%8xvKRN8#D1VrD;y9xculaeLZyPf*H!$}lgk$K-C z?yU^T!;(nP&NfvOZP)3)ttjcwq0%M0)10qSKw;M#*4WUl3|zZUe@58q}ehrII zGh*QJ2e05i`mt}vfBSQv#r2oYF%zW@8z&pjD`TE1j}>w9E1U{@M}gTi{BFgVjJ*+s zBd&V2mf>1A-y!Xg^ba9nGPb0E*R7infH2t6FD_}ZcSmSFT z{_x{??#3Pb>Tf@TU;WKz@$8LPahS=_qveE%>a1h8J!9y%Bfmyj{k5WKKPubZGqNJC zC_lSUg>|Up&| zyP5?h+}clWm+4mq*)*zrc~=Z#eijYIGM|b~%#zmplw@*pFv&yS3Xa~E#I#E&#ed~@ zY`^sol>S@y4b!$8agLju5UG2HlOsxQ&oB%j8|N@^a{zaU26S3zlS8wNNpf13V+_b8N)VPiA&K=?a4n0q zHunq1MvdjmNQ19Omn9Yrq2VI&p)3XWNzih-u8eoS^+CMlvDaZ;Sq)as6JcfG_4i-J zyWes@e*M$ebI~=ANE4=6(l7y7LaFx>1u#r*W(e97lZqU9Bv>=QpalVqnGmGrlIq0JUgc+M3a?F}3GE zOP&ptO8#oan;yG@AN-y-;)g!`I39lB498``OE2HTor@zDvDa~)rhJuK3j32AZH|pd zOcWF}yy9Y6F%jXB2hZ>qKl&E@nGZdVU-_+P@f)AIj;FtMJD>C)1iCckS>Q$M=$8HK ztE--x$+qW-Tj16>uyp*Xbl3iJ;c9Qd?OPHr<@37c+4)V~5fFFsXq2i=HNr_C&@_S9 z6xYd{u6<`ZM1Y>pt!=8Sq=XCHIx==5r|J4wzZEK5l!cB}JPOB~h zm4B#hxl+Zlk>nOH65yQzZ6h~XKVNC;8+%X7_Hya2lJAI5P;3+klF%eL7MByPcWuH zqIVqy@=cTj%Tnz(GeMpWF-*ju!vQnTX>V}3%X&z7Y3uZFzuV5*d(+tgy5C++DjtSrcEorm z*$$O(O9`~_5qm(cE923J?!ga#?-TgJ54{mjJbDlAoS)Nh90VJh-MBMHBxHT?FqhTIGlgG@lyK{S#RbQ z%q!$Ua?CdWMhr4a8;Wdew`HSiTkarZggF{Aio!elJ#L#oZaVoU^WFO4(hj{C`8=XP zh1e(n8Jc?CPGXgS$#^1&C;$M5zH&QSCb0DFjya2_RLFZDq|$*A4qV3U2_maS5Xv4} zfvW+5KJ~LMgBubReTWT$+n(Zs-R9WHq`-zaxGaJS$T}yx@TfdAVL2_}6TtunClgA8 z-o58Op8`$Q5tQoGr8+X$$PWbdNd?_X0Uh6A6?9ijG*XjD0ZN;OaC)Lgv~)oj8vR5v zhjdCFpuoZOoY7>~_K-7rR*E8=0<4?0XK-}rm0!EO_t*0Z!!`&=9+^l7o~mAEiQJ=J zu9b_!Lzve%F&sX zYxEb@F1jrBjSFoK?dc@%GcZqh@#Q0y>}1QC4P}qhx-u>n#?9MDReleXHne0P0D*FZ zL*}>YC-Yb}>DwvI?!Eu*58cviIKT7x7x4AxUco$j`x!kaq`!MXOv`R4q6zbS z1uISYkgVt+s)$)Vw@`k0Oix2i6{+TfW#^Z#&TSMc}^W;29E2BbzPI*O@!2$%zUo{LxjU& z#_{3~UU=aq?z`^+y!r8K_{krBE57I5kKkj!{8jw^=Uy-eKcz|%O_-(w*5yJ~TFZre z>f5C|*i#&azUQYU_C~y-U09($qPTP`{ zwTuXdR_R{QSv_b#9!cfhaCf6eTjyotM)G(e>6Co!49Pyv=+m`V8d#H0`41Pn?ZVk% zKWm)B~uBteVI;yPK+fZce zlO0k|EwCvkn92YoOe0iI!BK~0S7OF`JPry+&>Wp|c}50`6j};$_APCZ%+rK_@1t+W z1FtJCqu3$F)6d_=AAIQry!6UN9#ACVZCF4d0kXYeB|T8@(oFtY>JR{U>gikf){EzO z@{O;t&@JjVPP`)rE(j1A9o0WXJ@V31APB#%vFYw4ukxG z?|u|N`2I&Vt~?lZ{lz=@(l=km;ZVfK#T?M?!mji{eJw%|MolZv0wfwKK|R!Hr5nbAz+#hdAmkZ zs{Vd>k5{7NgseK0eR+BrOT@^*mY?Ic^tOc*Ts0OOY>G_z%BjmD*xr+jsCZ#R2Z`Fd z5mjj!^b+O>X)$rBPN{DGkOl3oc0(xP+IJEr3;Rr>RH0`eVhq?pF#_oTJDk~)kOM42 zw$yPhVZ8O)Bq?dTLj#OuE7q^bqDy#zR4UygQzB|P`+gLl<-B%Ja2SN!<q_MCLjTxwHKPhheb!VLion0<1P6hm>szvr{^IF!2mTVNvWw}5vr(&Os_1a=H9e9)>pf0rKU*DDr6M5Nh%=D( z)0L}5hC1!MvQ5yHm)BRNr~jX|_YSk{xDGpib;HY@^K?&7#ze#!3^Cv!5s8@uNl_Fj zOC%L6?ON-w|Ll5guh(8%>u=Zk)?Qn(C3z*UL`jrriXsS!0!a`60U{8227}3YI_G}< z;=Q-_kGi4mefM?uK&tQSe(&8|;nb;9r_MQb>Qs35Z3vKvre@28NTUP)jQ}Y%EUgCfK;yyCA8P;M5L8b2U zt(PXbF<-|tG#Em|UrIF8MDHUHinJ8*^$nMjmU1clBgq~U@<4m>B&bya2BrbF8FO$) zpw2|6^*1>x(b&ZS5;8vXld!~tUIjb{|CzwBvc5}nGa*o<*O&g5a7m1@^mXbZ%$vOZ zVBI1cqy%pCC6tZH!88P)ePlbIeRv0k@R*pMpy@X0>gvKYErd|Pt<;^%sx~8HBB;?; z6U;zH=jx<~>$-TZ?Yp}R@B?BYB~l0+&!yRDB1{82lcCwDQ>#^R9CfF2cd3)FergBB zyvdW#PhuJ>;9P`s17TQd9JRGc!$u50F(FgOzlO8uf|4}qN@KjO>rcCR7&}iIOB(+X z&~hX!S)Eh?K80FDttVM>BzVy_0CFS-dg zrA>hz1v&)+8Q?15S`h)nyQGuqI^p%(jYKbl$LyHeNBBVMTp{EkHl2>sg-{L-pw6`lM! z=~2vQc;dlv9y>Nlvr%PwVHzO}3WWl;X(56uZo-l&N67>#YIL(fwNa-cVRdzt+1XhJ z2K(vmaw(RIWbBL&j+$ex=i;~yO}By9bk)Xy1j8_BG-}l9RhmwdQmKodesn8Y+vHn6 zydHJNUyuyb!j%rK$6Q(w5cNI!MWR$diMsR=uPcevG(nFx2H9ILf)6T=FOcsGjqN7arVgKLs#+TYYavy-@y#FS56$dGBvrCytU_AY=$mo9>ObplNy zwGEkt?$52s5Xm}xE2Hi&rgbO4dANkiB&o+22Yo`QzQyZJV|)6W7N~uJTrZ!_hW&R& z;@Yp)?xyxnPmxVQ#QLP)T_4XM?_3+Px-Hqpcv9?PYrfF^E;uiwOPxu{FI9<6Yn=q( zGWIyiD&yIFI9ddTlr{{*q=mLNll-ZmyHN$xLO=5w>rUc|%$8wGNHbD82s~}fBbwb1 zZLL2dxD)d?mG(8Igv9&Q$)J7P^x7TX100*oi8|X7uF7SYzRPpu0vbkj^sCI6g7cGW z{MM5fDHSXXAy}<6sWv<;QwzcEOAG6U!AeDbE67DGcZoO-&sF0wwsSWRXoG zJjm9vA|}hGj;A_0@WeyoJbL#K6E`lgRxi`t-9t8;1ym4DAtb_8^sbKa`W^N8QM1wD z^5v_XIenI?sVSzXW>{WYW^Qht`GtA5j0`h8JjC(i$GGR%2N)b2#4t>xQ~^Y7)4S}?3Hn44wXiS;Ojmf8((@_H1VrqV!@o{KP2V#OxAuns-76%91PN}We3 z&y=ymfVTHDYp|pdu2#7}v)k9Bzia7VyV;iLWw15{%qrj?AwTi!NfYFSR=%ZvRa6DS zvZCi3P0V&FASoSuz0WQEU+1Nc|FAC6W{{I`w$2lgmTjH1X&$I&PNlVoN|GQ1Ll-Xh z8^X9At*j4Ri=njz-y#G?zk#!Tips7tvo*KNkn3+$-3Cu%u;0`$wbY}k^0&BU9K`gR z+ar79Q1@D1AJ>knT}tn_Y6yX8fMpm2R}DvS#RpDG@JJEPWFWT%jDZ*h1T}bGYq@w3 zi=>dE6dCCyTuU^*VHm!^lcZ>=ebLu8&x;{Nx!oz8IGz`|?xGfU%P=qv5gNPGUD{gt zhn|AET~GQ7r10w&{@sQG50I`*RZ2yodtqCiOz1O`KbMH(^w0h#h1NvII6nMLt|xJQ+6~<&5g3NR z6vB@@tf4;9Kx*|qLpFrK^IRIuraH6d1+^=|(DZ57ND~rM+VOk@#bg6NU*N|P2%L^9 zaa_+IFICnPVLh?9>X{qzR zhA`B4xZzE-F}~rU;A*%Y^D7NN(We=-o!X_uA|AL+0Ya*~Qyo8uRuENLjXzkXf6uB& z-)(HgMKX^XwdD8)zk*dDt@GGic=w%4{-r7&k^YElVvFm7Tgup+}l#VSm z_5#=Sa6B1a!2$uk)%854DZoqOCcfSY!&LLYZM2+W)aP*gMSDIL>*Ge5-jD2+D7K00 ztxb56&pf=1$L`s}iFaP-8yzSZ&f6^-7x5`baAo$Oul&EO^MvA202F#>OnJY_ zq~k6rhw3_m^OdL7!wBZDAUo^_L5hDnSuTzKO0dZusx`Gu`Cm_rJsty6-!OnpK-31#7ELWObnyqkVYK_&ZL)P*+Rfyu0$sR69YTOM& zkTtahHnvNmlx{E7&XW@({#!~(&NjmZP{_Cq&y~=0yclc(XnIOe?#$cVGSb7gfg;^S z8_P6Ut2LQhsdHvxh3gAdnyyREHhtls{m^BDG1l6bsB@`JPvUx71n~r&XDtK6Fyac0 z4{yVX6uOv5CH(VqX~drbry-!;RC8vaGsEuTA|pL{Itv!2fVG;-x0uxq5ma8HiBZQ)AE{7RjRQ)Mnrm077a$(RDmG}_8{ zYWfK>whEgDp_?bqeqm{=o90OIU4Ir9i2zHYD9ei$mMH*gB9WpS5T@E>jD2 zPF-1Ha9fJ&~#jF9><4Q0GW)5DMV!4)Obb1Q3Xu{EYl1P zVzwn>_aP@!#xlrfP4c!Gp6d+xb+c8O3C6~gl4iprm$le2Tw=#ak^ZhMwk2>q$#U7@ z>U4!mlWQ!M8(5|?;)MJ>Tu=kdfDi_Tl|?#@4UPgthzaEQq~lOpkJl9!-iP3rTBK!Y z0);_0_6q7vmyg^##!o%6lX|1dTkpKh#YDB_O;p27$gjV z6b90dVbChV=`jc*ogyHrq}yg}SGWzs6WafFfvs*P#gvF(4A<4&q`%8(rVw9(|M>MK zb)9x1uk`0giz#>=8Cd|rH1XW_I+gUm@vp2CfMu!rUDw0)6o)rW-K{$zL&Un7Y$V8= zltD;55137&Z@PC?m@_W325+NUlVctUjh>XGUsSb$f|1OvfxDhw(IS1x)-K*$((xIe zKM^3JrJb}UW8>DAQR>8h^U$VGm0-R{XUW?i=uBxeCM&14);@*DbA#+Y&O(}r)!ABK zn;l?DxR)GSn**ZM39Gd;BK9q1_O>s&4wxEb2`hKnG>oBs0|X@RPfQzOf%JE?1P|`+ z*M6W}-=9eIn#Zyn?DTSwSA zSW>QB+E__{249<74z6x3i@ukLSZ6rNlA}PF`Q)pZ?iNnvSb>@;#5oZyn+9J-P=_ zJ3hfxF8PeXbEg;hKb|_zU%Y~)X>md*&#qF=h7q%9V)q`Av9Jdb^29em`DL5}X}p{JBd>KMOXSXibQc9+mYJBglNuGXvlIf)ymVr`e z!-^vud!FQ<{>-i1w!K@?i>4?|E!Ox~Uq6B8O1}E|EB0ojLy5mu_WCUvyMx(CZgY&hhX5 z;sUERhfm!<$}c>&ol4EY@ZDZK&m&_SJoS?)e&??)`>xQ0W1XHP(v##f79Ts>&!>)U zVYnyPl54f<@apLW{`|)iT$-+s(UkmPY@~!-#^CRMbSL*7=nZ*VFjY-M@Nd3;hL_%3 zP)3ySz2Z%Momu|=XLhrDv=nPw2t|MY;6J|2>~f8x2mAQNk8G!yw+ODt3FbjE83O*^ zXLj?epW5ZuCGez2#uS{oy2`))!!y*HE^$MlQgAy977u)2fJcrDF+NlvO~;lJW|wL_ z|IQrGygtK?xvEmeg9+P4J`h$09RFN!GM6UI2<=&5=?`j66S-q`Bov((02>K@Ddm## zS)|NG10C!%G+mE_JG=S0kL^a_a^=Q#8cm0Kz0UITGWkM*Y&NS5fPQm^VPFUYiSo8^ zoFQO6L%zel`v44RII=kq1g+~7Dv>QMTgHu^)2 z++)f@yE;6NR4vPwheDc+$&B%8MdCC1?*C8fqB@a>%}E^B_so$dNQaog*M}*aH5nZ& zVOs|ErpL9(GOjBb>@U#Ul?4e?a}}0X8wrmQAC{Pmt^?LiscAPWlNbmDy+j?M{1;GJ z>*Uq74{gdRp}=St+%PH3r$h|!n@ZEcV!aJyaJ@!dj$Ti9TbI7#8C%sA5tUECmMq!vdL3Yjcy{Ln#VyqM#-) z#sNv6;E5h>_^4e#imcb$!Ul`UEQy~N= zZmcq2ZpMYFG-M^D70WQVcV91GxMv&tMml|R@eKwN%~e)iV=~@fv`22spN}nCp!m~aOj2g`wNf|k+q?PZtJkqi!{2R+ zDwYzptL1a9fRar^?KT#C0Y5rVtahxvbZnH*9T_2?QM;b5zi}zTg&jtE^8DQoZDZG9 zfj@eAf`xJ;6=^MJDttxkxibsgzO9>_9qo_>V{`Y;ZnpI1xI9%yBpFyZ7bJy@$%pS4 z!8Qe!VYVy^XC_v7=jswtdP>+5P|TWqYSN_R4X+kPcgl`Qw?(m}D%YC11nwT6VmYE3ru{ z5v3*dVyHXIM-LD2(L0BHoC}Sv06&7DQZV3-ZCxA~?cmk(i~Pl_lbo3-w->xo3eUl< z9enoK7Vh5N6S{b*xe=_mer!uaFx->pXCK_j!?%y{$Io5n$ERkfG*Wix`~kO2!;gX- z(TS82%M=_xFvv&m9%Z0A2QqT$RrpoqI}0`+zI&A0cJ}bwPo3k{vva;8r(m;81Jg7p z_`GiYB*`XV36ibtW*b7)8|2k_muUz}Ig`Khp>2HV_JOdj;QX)Ju>gES7C=55Nu@$q z;ZAiRjf$jjsN+#6v3SRDkxzeclv}rV`tHJ!3q1b#mvSZ_x^s}bc6amNUYy|R*QcpB z+^CD~w8TH@gG3p_)~a<( zQ+fR?tW;Q7TBW|`}oJmXS3AmbuyNXWm}krO+Hs(adDAyxlB(_ zH;M%5w@iWWSyAlct;l@f{ti#zxCld%k@ z=c~MTamk+#ejXGryYKK8EX$<4*5JgsMQZg;cn-uMYcp`|6rHrJ(j)ZfNS5~tr;$_~ z2HjONu52aQYjUSND79rU&(5t%vAsT3=G58Q7Q>X3g8uFt|J~m?#OP3wYg1+Z#lL@@ z<&_4Hd~lRcd}tdI_)lMZm*-xY#IV%nOqxP8s@=&NZ8Y+I#vlNI08;A(PnO4GW>SUk6$k~~|+ zD@*N9d!-|;Tx+xv!V*;Ozu%D0i(qNg!IbgOwu)mKAw~k)-!y5PjoLG{SXe?ZP|8qq z+!n%58*kT>^p)&XD|W09fx;Li%YaAs_4CCeqYQRrBfEwS&f2BG?*HG~o9CC0Z{^TP ziQoP4HD=2VETPV_y>MZX&)>C$tgX8rD&?*-Z!zARXKJM$GD?Bk!5i$zuy453LWojI z_6?U9>&|g)u^NjC3NYH8qq|_^dCL7IC?kFRJa=|pU7LY6ddUkZwU?gf(Ob;$#beue z?9ebd+wk$Cp;X{2RFSY7r18E2|L`MwIl8--|MKibCYP%%V`*CkpSo+5FB}`EGjIF5 zO8!|%pU3Emyp)puQkI`RzTH=nqTRrN(Z;4qghcT1U?v3q{aZS?V_PRV%M9U9r6Vb^ z4Z$Oa2Cz)Q?>u{jwYnZ8tR0I0+c0?N>IxTU*4Q&#RBNq>a5m79;r_jSoV&hAw$)QR zg#Fg>ZuXCLhP!XUd!E+aR{?x4I&g@GAo(x?%UC+bxl@{02#vvdQ-5{al?a&KcSE%&ealQKj z5T@C>2(~a-HNS7$*2&L&aEyIpCACwi@nsS4&y?}9O{E;{7%cG3mnZqbJ2U?Mvm!?K zwq@|x?E^e<&lUzcGqFV;2*Qm!~3=kGtUkN@!PGraWPY{D&3R|XTP)jc~>V2M0y;%9Ot zipK?pmH>BI+u$pYZs-0({V_hFaOw+>iMl;WXbf?^`0hZ|TJV`zCxkNoeDc@`#hj(V zA2bu;G~g{=C7Z82x{dzM41f0gb;?yIZXA%&oRJZ@38O$j;4LU^!J~d}dq5x3ZzJGU zdYNQBNyCLQ@+4R82rkPs_~gA?`1r9AIt#WYu>0c`2$~{}7YTHiGJO8QF~$c9{OJ#` zF}YAnh){_n1csr4FexQC!hZl$>kgxW<)(%7gh;bt+CY|XQJ%ElrYU&n?qT-t=;qwT zbIdI*P%M@d%^N0`odFD*P33}|&1A7M%0MWkI_hE=2IcY^KYZp#xUNz>g}=UJErXJ6 zlCw?fuE%1fL9O9nATfm%{Cw^J03ZNKL_t)bQEyUrTo4udtPUn7r+M;Qf6l&rw{YvN zcVdVJmT6)cCZ=VP%jU6do1Hs%($P`EbscQWrs-6v)C`Us=;8d)A^!ZC>tr$}U?7A^ z;07J3zEMmLooBSjXF}~__I2g><FIw9z)8JRWaDZIK;L`On zS0~@5-f%U3nm(YS&3AoHZg#kXQT9B~_b^JEYpwOQu2fN7>c7r6+5i^RClsH1r<FkuOg^-?kItOMZ#;8}xzz@?X>fVI%GsGRw~cn9yOkS4 zP|BL@>@V>8)s;|*Py&$TmZ2hjMWx8S&Q4oI=Q+~MJERV>>eo6SIi_7QKgJu znXmBfL|L8TBC=G9pkfgM079Kl>dIMs`S>`G9vV_gV>oW2MfghnE|qcN{=EZOhQWXQ z{yAn>>S})a?Hs?QpU>PqMrY2B2~#?Mkunm~f*>=6jM)N5urLQ?7|k<(!H{vmD!@@! zK7I#aJN6$ajkbXM_x5pqrow-FbwZt$jprmS&6k_JercI){rPa`TBosx4)pQOm#?r| zsbM6Uy-+)C_w4DTkg-~DZU|VeIz0RCj0zwmCEdjg|KOwhII^o(1+mc}ij@@e z2!oOC9AAED7p@1-ot%n-fN9Ev`i$TW@E*Fx8ByS$D9MmV>T_G@aKzB4gtC^TGe=+e z-!%XrLEpYq;O8G0XXj8s@q$oeiSo5nBXuQCvZW`-&p)`8ylwE!S10k0SYa6Ioacjw z`uW1~F}e!2285<^v=Md!V^J}0@$enPbQEmZMe$- z{+9kkLP2N2=7|rEb769oxs|#v)CWRYJNL4U@D*3O!~6>B77vuI19`R&7F+66^E()$ z$WV}ME99WDvg%=~WnZctrjCLgqpRdv(ptad@xwzbm79F$mC5iJiXN#r=xEaDrw9HC z_<1`##c<~LBjD)CjqNl=w{4OVVdx>~f*uP#d;cgOyJwhU&QkD4tkFM867|XRq;FV> z4s>K}gJTDK0m<)t=MvS1w~jEVI;76Q3OuK-o`wQTS|4P~uMGvkl(e20lJ-u7|JH*> zrJ>#&$8R5|*{pKz@+ErudXYlVXg0&Os@ZHJ46yAC2tx(M6CMU2e4gYuE|p3JHwbto z)cW32uqpXx#TTnhRt-UKAwwx=Q}-mbri!I1VzSjuT}vHlFlw+$NT3u)MN_WQmcXZG7VXExd7Rk*hNmY|Bt?&|Y*7I2|i0 zuvcUm6eRC>jch_ezSh;X{aD4S9O=*e+tPdBEaVg!r~=DG7=KhOO52Et0z>({5p zw@IHT!q*#(2oExli!`ZN8>evHNaO7qpNzj(j6_u%8A>8qngpMWW_GKb6^v|rG1Tpg zGAy|{Wh3yG4UNm|jfDnB>%&bq*^<(Vy>C7G{gz9XZy|tW3Uq{<0H7^@*X6L*@`3R+ zX2wW}g2A}Qwz*P4iB{k?eu!GFg4EHDB6!A&{cWXoLW>ZBoMo_gu)zMIBKwDm9PmF| z{)YYc!$o%X<&`_$CaKDmu)Dv&&m7)DecyIYacMR;EH@OT$r zIW|VtcX6#YT%JF_nA%U<5bWwNP{@1gN%9yAiLcj9pZjSEh^Urt2`x=xB+(CoS zI6f5|gIzg(@!_599PUto+qCzQ&YU)xwO2REuoIMkFqHdqP*wV3BC$=uR~{N?*KpB~ zW*zUhK9>U_-wV#z5{+vqCTEo?K{M#M8n z@C+4D=-&MUeC5$ynjvHpYf`MwI?N(QSGr;+gkaZ52S@hwMaCh8T0Ad~lhk%-<$GV3CoS_jm5)%)%kW^^#m;>t3f>ryBb$mMdlj)UVgsa7l4*$mlS4%4>r1h~?} zl^zZfN2<6Kxk7=@{?ro;5B1aESzza27kdUf+1gv8r;8FaU(WR;RBH}vRVRu+0pNLI zJ+32hv_IEXe=6F3)Qy05)EcU-x__j_^`sA@uB@deA;57Y`*(FQHe3kjo^2W2cVviC z!ScO2B3`1eJ28(Q;>Jvgq*`-Xt2AjgwPR@hxkBl~>N*~->mh`S$5O9*F}X$vwNBJ( z4r|pWwVLW@con8UkHVP$;kY$ft2Al&c!_0~>dd>kZAJCNaXcy&hg!pl8Wt+Ld9~(H zskwge*v<2cgdTm$z#aoEwSzqD~>QUdV@WJ|0LRcVTd#&Bp7ll}xvfaz}t+jpkzRe<=FKeK7 zbG~rb2qRrtHKAf=A@$n>9LFU%fnXW}OSHQ98A7@19o^Q=;qfkBy0}Qj6uf?AiIv(Y zojL8?mui6V-aNepo3*-POrDhV6*KG~E{2L~OwsdqO7;$x=qqNJUTuVy$70T6tUITI zNd!zrDyZv@#~W9d)ww!f>eX3hY%qL*Xh&axhYt*r@fGoKM@eHmo~N$P2;7!ULtvP3 zl8ts6C662$=8emX{N&;Sj^}aT-hTFubO3R|J9NDR8jef3=2B@mbQdz@GbXkfkeZ0Y z)ncg!@!!|>0)wW}sDIQ{HBTe)L?IX=eui8U6=4e}Y2UwLdhT?M;E2h!=b>3AUrwL;v+3z)u}`bUn8^5%s_ zetc?1?bPdZl&C*UemkC&R4WckYfbW5gHq1+4RD%L=l3O_F}Qta4==tu!%DS@lq!;K zD7Xs9`e)!v(WI zk6OcHX|0JNpsQ$;)B3B!X&8cmt}GAVG03}@S3!EoE1^^S7eEs#3<-<&db1$tnLy#% zaiQrb!7<|-Rnv@wPGEdYXm-NCr_c2y+lLE${-Lp!@eP#SnWZ|&+e^LoVmP$Wf};>Lb_3$i(n~>JiH>t5!^%&dPyWkPRK}Eij3H;^sJA1 zplI(L>tuYSM5F0(_VNs z>B~#3t~C)rcW0Jcws(=um|VWT!u9D&C`TB=W6Mxc@!`arMyPZ0vx{{a4HsbuTvw9I znjG5QMPE;r+4&mhua@b|nRFB^gb>Uw)~MB6kMij$lQB7dxF5rSwQ3W`k#u+3j1HIB zHrBzZ^NX4?5eKcE%N73fso*r^pi<#L9=dLWb7`jJ?irAJxweB!8S7qyPiSEuU z*CxxXuBq{FHa+@#^XwY$BA+)YSDKu?xXj9G1Isc9F4zre1i_B65@RDJOj9s7U*+Pp z73vKyGQJstfu20Mtcl}DZcMGQeQO8X$2wS9ZE)(`q6(rWVW2O^o}Imzrpd*tt4z&Q zLqm0XipDRoY=%?@n`0NTCUk}9W_eAU{JK|myY7U|ij;@z)SdoPq&K9=$e~A^3|_3K z*!fIZSvA6Sy|wu?q=}Sos=eT7Rp7QBh?(tGJiY#?HY>I1L`}i_WCXr6_Ox!=fG9$J zAl|43)`l(IbP@ujX3a7LRGS|6?d;*+oxL$DgYb6-JWn!PZt(p11zx(e$l_X)T*hGU zP>B!kAK;e3BKn!Npx*Ah&4YV-IXSV)TEpeqQjK>fS2?z$$Im6h^cNt|#fr+idSIFjH7&dsbP&LXGJU?G%s z_5MA*jCSY3Jjq3GVyVXW-<{%(D~l|yHON~g`?qxQ;oFAUIams>SHXv`-jrOLDf@_{+?7!stuR-Zmja+ z=><+-FXOl#L)}@9?Cjy#zFzt}GJY4Lb5;xG1~(RJSe8N4lYIQnL3WRn!t8Bm}Tf zZt&DAH+cTUG%M96rXkoj*2OP;csFDH1r2|Z(mC2+ptG1^xzgl^Z%^{(`FXW#h&uoL z>tDT#-p*{SUC)!uuGIN|zIB?3`6^~O6bjCjN;5ozY?@X~Pz&IW)hFTlT$L-+70NXS z%M^_CLF6nrS{Yv2l(L9Igr8+-&bCwt1onxh<+UYFX+<&N#NA4V=zbli# zm7?JzxAd@YYl(L*E&IXs*red2hjiIEuC1;=zIlF$3lnSpo$bm~;ENA$<(>n5E#*8Z z`Mtlo%&YG$_{uFIE}9LOrlZd0f9TFZx;rwsnxQ9v>6P~u`2Fu*=GtsU8JmO}^OsL8 z^2(_NzVzrg+lGr6+FIawlHQIC4<8=nPoB9J8WMuO=)r*Wz8i*(XG%QR(cVP#zM%lv zD&Ise{|3tMMo9=2A^*eoZe_SH$6|SjoNZtU7fZOf^(NJ|ReHKRu}le0onpS=8}0-` z7=92e-&+I7=d*n8+fQ=l-IKVk%iPKu9a)3<)hZK9YONGP-FZK?T&0k)*xK7cE@Scb zwRxISP^~qPQW;7N%R)+loypK>)IoTZ%d2EEHbNM5mP&M%ivAtV9?fRM-&tE@c6NgC zt+#OR?R{LhUPekV3=_|d3u&Uo&=F!NqH-B={~)Jf2rSEY1vh+ESt@S=p)c6l-|#@5 z&wqFqhY$8sD%eOVxiPcG*~=>&+TBfWcaA5Yxx#P%*=f3p8Gi0lySaT|AD$=q;VTo| ze`J{6?i^A|F5g(?5C7r<9VMI3Ji48+ks^i=EUh;9=F^w>{*P}^uRCN+$v^t?KKi;d z(Vg19f!Yv)O3mfp{{Cq$Tv^2sg4_0Y^XW&nvS+-6Wf?S@9&f(4fNdG<+u4chN`CW? z&hh%Y^S)Buf;JjWk2?RSysvppZ~}>y_y=FTm9dc`@4Pq9#cQj4;^A?c zj^wxh=sjL}YnrZ-&13g(<-ud4^!Ma2O|?@yyHMlX-@nWYuTCii-!~$R4wv}UquaRi zP(NKA>PTL_;d1)I5`XdZCEh)=2qQ{ ziBg@`hD?4H8c%NDOfY`yiDc_)XQ{3q?P}1Ob}M4y?L^Nb*wT8DK0sE;jx=gW8;jNm zZ8tF@e;b1bF@f@LD+NM5I!=0I=YuWkPHGb#CYrJ)1C5q^Z;Oz7oFJD^X zEBB1?*#7<&f{;iKjC8QAH_xfbGSZX$hbGJ*ky#^-5bmNhwq=`^o^C6A?57kDnC9y$5-#)!NUjDx#5Q6@!rG=&!3**g)?(3 zRT|VCkHb59+1i&UTwr9>{&JR?z`;>1WT1B-+A)}Z(Lg7AAV#nM|SqL z?D&K!_AIWvC;Kab6W3Sy%^zH5VyPY~LCaN#|N5h=l(HuG@9o1t+b#Cf*4{jwd7E<0 zX=zetIKh9@6ufnHnR8QR?%LiR?g9t+wJn1O_Yd;!wPidnP%dFhPoDi_U2%5d!?9L( z`1Whp!%7Z}cCmf1h(vih#8{0GeCPG+eC^SfUw&vOTY3vV zyNHYgrXl$B(J|hQEJ2*RU z1Ol7d@vb#oo_uYZZ@oIf(pnH@RC0B`#+#Q`c=f^}zxL6c40UBez|3NuH!d#m!s!Lh z+$d9RxO5dP?my7)*Q>*!6oPAW6@Kffvz)lH6uQ<)1m`DL`N`RNe&NyG+;?a&uE+|7 z+iinIb`E#&&ZWf&Ya!XT()iqJgWr1UEYF{q_JwNo{JE3UR2vTe`%wrc6IUX7bikjR8?HZO{=6~m^MgtMN(SMO{JilH!E}K3^dW`dhNTeq^~Q> zWA}{WdJc};z%o@t@?s%Fty-g6S);eF7ehMaY?FM}^dmtB(VzXJH9jxP_oyL*5;Zt3BBFHbWuTg4Ct zDx!Fkz~e;dixp_|ATsj!r)w4e_X%y+cqhN~xqUu;MT2IV0?X24AE^5CS(C3kaSKNd zsc7-#N|V*KCOw^59y&VW8{0%^^btak%bKC0{Lu%-sn#5pR~wXyHsf15_?4g8k6}O| zXE8Hhqqi$dcSnX#J-m&n*($G{m;vdkc_LIWY$?@FeLiQ!6bsLj>>2Oi%TMfNWI$c3 zwzS&7aU^%{@5QnLx*?3ek*etUbM4~~jFPoYmR1_P@$MowrmH-1Y?z*|42N#%Wq4qc ztCMB_(hrGF_@S4eM#Dk~j^90k>w3&D)+pv}iUo_Kw-1raSp1hiJtIah3A!aV z)mjb~&6I7Y>})1a z*iC^eB|{wjJmBEe-clt_6kOa_I%&=>q z$cY=PSf;`0sWs--8Vq)1G^Igx{=i6yylv2MJhGO-p5PjzghH;@ZwkSV{sM)J$!g8P zGz7PecEP0BbAlg<pnBF#*?p2u~KnDZwsB7|K$7D-ng*L z({ImkZlX-J>4po%Xm6g;-drp=P=H&mU@GR>LmWo$ELCsx86=a$&LWsXnZy9L|Q zYgRDawxf$e)ZBIHU<8%98>*yK3^BU`AbU4=s=#n zu8f*bA>B%UXU60HJNlJ(Q0U{WXiNx&!>*!=79E}m)ntb8p#mLwi-pyOf8|fSFRAzu z0>iSAjzoH!zw)Lq!nD?B&4^ z3{l9o2C_`jZPWEQw7Z*wd%EzXh}JXqz6&=y~?y3g39@0)>Lj zXFsxo@zD;(MvAPIn|%G-=eclYjfanq@xVPplnN&McXjgiyNfu%aifr|f)yhDtY{l? zW#hDIgPYE%5|7eyYxTB0-jOVmT!vcoyUo=TuQS15rEXG5Q~KJf@@;@ zW%v}VZVHZ8sU+xMV&bG%w#oE2D3+E2w^XU)LI?;>V#WF!3DrRmtQID#?J_!^WP4wM zQr2n_lm#%i*5s{gDrCPAxUFcDHMr;Zg$oPZIo72qkg6Wb5R7)`l(J{Q)Jlyj^Hl~r zGEqA|JmbB2#{J#mEnOM5_2sqqDFTF0ZqVbsc}BXkEKW2T?#QrvunD+cLtdcEYo!LU8KF3a2MlLWM{l$UrBXTCVaNe|4I2-C@x` zA0~r(Jhiy*8Z4!b{aVB2jmwLy)|^z5lBmei7pBXcn_i{Aqtz`i>{nP`P2{xp3`0<^ zG&p&E)mH?x{`g-m&sAwSl3Z}1n1}>)JGi?P5l-Cz(nwGbObJmCnHSD3@R{i~b`KR} z^eT}Icjq}c*2Tnp#ow6|d~jdC?-Cu2mFG#SO_%3R%}{H2mAFhNK-kWFM7t#~O0d@cJ3-8S{xlrTM zY$bH9io7NyTl@25Y%SWgk5>WAuQqt;y}8&t)AUkILvUqgjUT=<#m_ywGuC$@)K1b! zuL|Pl$abeqRpv^~;l!nd$PGKBHP!ou=W%gzl{iOq-N0`=+1^wpF=o&9(L=_F7|KhY{j216bD8K+dqS>>Apx$lFwQcau)NejpXV> zeCEfK08A^3=SZZNp!Zb6N1N|$(z?p;dgU|_^ma0~$&vm2AfVc);`n^UkrEFBBb%et z*?|<0&F8T!OBow9qVwRDnLosiY%UBA} zS%X~0q+D&VT2ogY)#?p$S&QD@PWlJ>snwgfQj*Q*sXGpi)_Rs^XmMiFiBof7Q>T;#JEfFlG6oME875v(+U z*{i(#)(lO@W7pPBKKJ+zB=FX$dA|4Jb?QxznfWUB9T}#-C&yr49@8{%JddB8n8h${ z8V#3EJ~YbKks?wGPG4B&8-IP3a-~Ucca{UYJ24EwTc;QK|GssRYF)XkU%XbPyEDVR zcl1a73ZP8Tl_3NV-7`qWHmKEIPM%$+Tye-)2G71S%>zdV=<3LD&t1bj`^uyWCeR49eiNd%EfF%2KO);an3!@QtS~@Y;!4GPcPrJGvMhE@GMnr_L_$^mEs# zH=$aG`;HD`ng(5+S!~;&>1gW?x~kMln+f~F&87EUFeu!5_2l2Y-qtqs)XISqb6DtW zNBhNQ-JM^Zw%2Jn!~xNMax@}B`_!ZvU$#!h*ifS!)sogu@Fuu3CBnQ+$GOg&Lj#}w zK5bn~8U;3!w1prQbRjrDQ|4cP?-DgVa$U**2b!Mi!H&K>|M>CUbY#sIr09Z@^d$YI zObqpbFbgofT4yD2X$`Gyng}n!1gy_oq~)h80^fo z7%Ds@YjuZ-#VXR12s2WAbmcT~X}!L%hNQ36?i32Bfl8_?8}TJuN|;z`uv&L8;&abO znPjczgndX$G4dqBZ9onIeFdNxLaAPNhU$P*t?#&LET_9@r(Ch7@?Mx&W@)VvT@w}4Hq@VC2+mwzj$bbm8dIRF zm?2{e+&aD-qp%luAy%%tvnvf1rPl{A#u+_WS!>2%h~}DN{*k3whU>w4SWaCB0AW}d zhDD^7Ci<=+VPUn-`H3<)+tiMgwB|!fq*N~C+R^f~obffQ<-KHnxk0(=_-=z~Ylq4? zyHsbj>aaybYY-^B*_KIPXO`LJdUAaZ^Texcb9iW@H8PMRVnR}ysuAS#GwQ|^BJDkR z+L5F-h9R+25G=I+AYuU@BghohZvhNaugu4Z-Z_b3+PJb2&!49JCJ}lQ zaz{*D5v@g1l{hVv>q!Q?a~#^$tM1S>npjzh=?MxMK|Z4lOIh2b(RAo87L>t3irDT> zM5hwNFsRpS%w4_4aBnAFg(BUihpgAgSuomD!mtdo85Q}tkhRHVETo8N%M^m)t~}dI zS;j{P7#teJFil+7Mc~nF)D{00f=07JwN|CkXi#s|nO|67c5aTQ>riii6drR+S9s^- zyKEi3jgErF!iu`PSr{hL^+LflZt4~B#TlXThlpn0I5o%Do;;7|uU~c&45{nVCZ^YzoT1OSyk`syL-BOdd{7lot>Q>EU=4Xagn&U8CuX`4j6PWE+Re5~*<(J=)`Q?|;3f-#pxz^ASBf8oNe&SsV{L;^! z#I^;SJ3apFYq!|g=@SHs`RO8KRVRd}MbDL?%e11`m)uxx@$dt4@t8;Q)tt?NRNQrB zjEBz6B9#s-_lZZB_{jSf5aCrw)o|7QzPqQn|MUz`zr0DQV2|Q3DVn`>E%7EQ7HwA6 zJFKj?nVOho@lXZF7Wh6fgS~#c$@SYUDixa`fNIrYEId+FF5CRQPo9bEGml19%MRn! zB8zi6pcTNqr>430)O7A6z7@MBt}RDn2^mjj&nRrdlp3RcNTciF=A4n%`Sv%zQtrK};t@lM@DfhZ5YLsO z!!uWFeDYmgP992j@1up7dzU6SJ~vLiQ{&?g9ZjyMFc15@_Kt9>#G&{0eC z_)w@+wflaYcT{@<5uWqRq_9AAg;)BUMnK0682FNM(T)|sNZHkm3M`=K1`Gm8*|Ia$ zgweX=iE8#P>WlWE@O(*cpo0kI$DKIfS|E|GH+mYngD+iaIAgD~h&dUsx9rR;=+bO*2}f;p;#JL_}A z7^IX1EGlPRE-;@D!9a>=IeY9rEd94sY41~>$iY#RrKFMY~3lx;%A zJmEno?Z2iJI0e|<+~)SBH?V-oN&&~~q8y8X>rpHT=EtfymQB^RDHlsv1sma5RDH?9 zWR+txRn8t7XU38o+uFe1UB{ld8?WD{-EK2htui?^1ws<|1H6HY@4L8z0XsWe^m{#& z(w=sfU0`Nrj0+bp^6B#rGe1*euQ||0p=BeaAIi`yMpZ`enM!gZoI72g>#Hr4)Ga@lw#loL@`jz9a0%@C}{YCz$~a`q6{Q& zKR3y*{M<>ZWt(Ql=dZrK%q1fbo-dO{w_+Sz)QT$6GC1V3!?IB0$P$8w-#$mBtj{sq z7NKi*I?2$}=c6Ay%JUbtVmTbwmYwrqDmuxMg_PQ8jLswb!O*OTcT)A5nhF;y^uleY z?HF@DVEneT))*o>j)~eDKyTdgjRbH2j~QFT|eCyfvae>}Pfjm%Q3P(o^ z!OZtuCG5vf5$bJ=_|DV)GDq}b3xn@a0!F`SiP&n5;O)4intF zFvh(L<2-bHa;OhNz;0*2we4a%ib;g+9SukNSXh&>XL>x@RV6IHJub}Kg41N3hpl52o6eFYsXNguz+Z$T?x zTH!0?owXHu2UMiL*+!Sp%BLla zMWbvt%^A$f+<>AKxNbmi5YQVa zl#tpeux$FC&%o0Pz4Y}$l~XLnR|V-KB7)}L9<64JW~+PY$~3hS}9Q} z+Ss;5;CcAcM|l=|tu9je+_N~#q*RopqTqTowzj$54Y=^qE3`U2PMkQ**>h*GodN@Q zz@Xp78}!-Q+UC38{XUm2-Ng3-s+BT**QM{eEHB@pTntz`RN?g-O>8S#s1EshY*Lw2 zmJ*urUtv57OCL{@mcoh*V5tq<>^KcP#m&_=hYwXbwpitXGc!E#+&Y2O-UbidKgaZB z6t&$f86F3TWvPysY{qIxdXnZ@(fMPk;I1QMeEQ=jI6Pmb-Szp?uiW6tA8qTH8R(!^ z+j}mx=77q4g}0xb=6laqxxL;+088@~&fhboqb$oD;tOFpd`OpdY@wq^zg~;)5ss2= z3(nj%$>Lmzht413zSGmZcBPi8GwlK$>QT1E`yN{4+HwoGuid8K_s{~zmc~&^UpeIY zp{$7w=uifP{Jq=tX*6A65(zx{{01*x+=(}n?zwA9#F#^^ z-sel-yvg!<8g;vgXJ04fII^4fBL3CAaq|8(c7Qg)NB^D;a z>t|HtLJDgQmkX;+-g|1AGYeyJASoqaVY0|)-gAV>a^&Tn?*Hw*9y{&9@XpviD3VGW z-FeBe1V?8olpT#5m6;5Qkt?|8@Hp+B$MT*I(1yg(nF^QI zn&~-Yv|)+x%;a=Mi@eO_P0>_{$o*(I!gcQZJK;3(#22YKXu>cw1WM!cg_{jN{`Lh9 zPp93^ZAu@XzOl{j#bnMVP8;aNzjv|IeBG+rKFdlO;jCo2UeDh2K8J_7f`vWDKp zbr`<|;QETL8!$6g7%F2~g8Pn6aBZWT&$CJB_WX$nu5NVbxPf+sjx*^1Z-G=4jB^YT z>?aq-n5q_NgjWKk098>$Q8;~cGCmfN>b8P*&)XND!;p(q8)iCS*)S(%eK^v|5_$nF zs@bxOSVAi>2Mf-(2FHGnqf&MuO}~TLi6UcVn|9Y9UZ~c&0GOXDF;Q`H1(N4W_S&AY zvoM@3;z846g~Y`Zl^UMOszbSC=O`N(XwMPi?0+ScsmsR-qoIs6Lk}0*vQzB}0e|!K zIxoIiqg1eCFPUtL>h*mYds;+tPD)9=9o++*^j0^YFhZ4qG22^VJ6K3m>UyLsZVZ6l zLee5N%{`*7nsDV;t0*{v#n}p$C8&3r_<@J8Z9J(M1lps+mikO^pui2F=PL%iF6~Bx zAPAV8o~2YNBUJ#x!jaJKd-Mk`eRsfCqm3IYfLgD#7(uZCkS*_`7 zil#~hrUn7H1NviQT&;Pm-@L(%8|w_*0rgswo!u5=6JuCNdc6)(!S?npE6ZD~tZeGL zvE2cF;9=P|E32!tn|0=z?U_@{d1qgunHXqm)ZFKl`B*T)tLk!M#vd%kqY}e!|9V624lt>)aqs=Z< z9!0)|l+n5GG<*6@T02M<^^>Yi>9xPRy&+UbDbl$NJm+0j^k>CDc3gAo8Xo0b12|L{ zIB5SW)lLM|9U}k0G@_2EdbNMHoa%BcjkwO_gJlVB)%x`PfU=Xhzfi#8sS*zyndG~d zcMN4BRHj2CvuF!``o2ThIXjRFSZ}xl5*%CC>j#RLmYe*{{qu}xt|zf9!6Rqp^v)B2 z5V6bI#kD5e?E$Z@HhJXCY`o(v&?~C%zk524q#7lu^lr-wx0>|5AXZ#QBRnDEf@N`Y zTi-z#Df;mWDuTD4nC7m9aW1Yja73~b94j)GHhliUqjz&?qQqBTTIFjmtV615K;K>=DdUFTY3y=m8M7;=QJ3djF$iVxVcP#Ps7uG|AI&H}56>!B*oSSEQtQeypIsXf8 zAaw+25|?;Q04haC7J|j;GUcKj2ik~nso>P%amqz2R}iUCfOEiIunFvfcHd`Zx5u%$ zN@}sd5@0(PkKBKVC*Rnm)A!>Q&nQ^}x^BRuZ=2`8{=_L>UvBZGXVF4mvG(=RGsbPnQfODuHyf=F;kV*g|NUAIRaZhjaX{ z#R@`t1il};c1H90#C(bAu|h6cC#_`=81f7AnxVLi(t!!bDz?5d%>p3}MIq!B+clR? zKcHg7#!#WMvN&7j((N|mW$hWFl89th5NE_O=SuQ_QQ{SVUMBtzHjbD%P7_w(2beivGaE zE>1C3C}CS5Wq|KXqyisFy+2^L?Q&?mjBtGhQc)hSVmI|=Di=9&c!{m88Y^pCNGX|{n??nSz3pw9%_j3RGg@zmWV^7D1VFO0 zD^iF{ehVVa@}RNP<)qR(rFyq(G$$iR`~f3oj|GNcux>0EGNC- zFO~LS6GDV%{u4bn9`k6JBil6AZS)+Qohotqqz-N+m126T$VcC|7*?ToiLc&nap6jX z$DiBezSEPOy=#&)C&xK;OrKlU(b$#VDOCm*!Zs}-C>AUpJU64yiUW^5wL!f(pcF2U z#n~0S^!gs}f9Md4b0yw+{~=BsnF!^CUa&S#{YCObN*&et!|y*z5XkWM4LzTKbYYtp zF6_h`CfRuqvo--wJhR3yzQf*fS}5%-;cq^n8vMw_;oRt)^_5JE-GM zEU9ds998rGpCrW;iid0(aY;Cp1-=Aic&0uzH;O8T9aC55F26Uiuk!>Q~btH-AxeDSs1BYNQDOepMUq!_`GZ4QmSFQyw+s1(bsNyO0m}-XqZi7I&AB%g)t7#R6>}E zT`D!$1AxeK9@=$2yAU-RusywyuqfxWD^J@1cda&}cM9U}PE! zEu8Q$Unb|ROnx#oR^a@}X)MdewjC^yEHapRBZi!-q#Oj6@n0BmW;LhKeu{R{vG~*n zk8)(LjO$D65DW`_CVSvZ&K?`%(YGH8Bf2O2E)u-2-)hlu1B6hx1CLgBU_?+)FfIhV z^WGU2W(s(okA(yzN(Ph*@bG=JOjMoNC{Ce9fb?Bt;GtxIGK@f}^upFKPBmY9_}nad zgHDC~IP_8qHRH&D&$b7OpMK9Gk3Kk0*Y!~l&kNhqXD_8x1Ofc~2bTDs|H0e%^-r8) zyzIohN@1nORZqX+MTtDu_dIcA+eL;5C7)dPO(`~@!b%J_m2KNp3RCqc9YAQT;?V2& zsPApkZtT)+)(E^Fy>^}Y_6EI9gTcV1wzI>|>MH9uud%bSM!mL;@B6fyb=GfQqrSaH zzulnS+@slSaCLQ)_3b?tOC|2AmN`@|a%;EEGt0Ydb^1u4I~Y*w_F1mCS#NalrDRON zWYNZ%s9@i9FWhyOfmAdo(Fhzmet<*=5mZXydI84dq#_H&~fw6!ytSAfgnO%J>O~*M97W~=Q zuJJeDyB*T5rl8wvZNC2GGJ6eIFGMBEtPb`yko4Vv$ zD>!<%%H7Acthjo+&GWD9QY$^Nr%>0cHwJv^TQ~Xa7cSH3c_0Lxp2zR}@ddv1{bd?0H^#H)OKvW=_?K(F?RVSDCKuOvKNfs5GuL=#6Ua0(VWg3jI6Gb zs!_Ka<0yhee@Q#uL~z>$g6Ipb)z?Y_k^{>PuWhcCUd!KKYE&7McW795|c z@U!RVdE}m1!#D^P#cUM|aS}$%-3GLFl*BxYlURdSgN}aYFP_hL_XRCbdfhB(G{9?jfrQ+=23I64$&hy;0 zJ^tdETU=Ui^5Ts>)*C&JOjlCMie>5Zr@#5pdsvt%^Tg|$G(!gISb`ICRet3ICwcd& z*?18kt4t={G6*%44%u_6Be_miGs{UD-x*cFAT_dcQ<$%#-F|p=xyg;49uI}loAcU9 zw+UbU(F)x`K)GPYOe50b-du07y4z)DEFG;mqSaq~-w6&)l==EgYi!i@6;G2Dhj-jH z!>8VRoWs-QRGFv`fmD3wl}$QsK(%0FTX1Wu9ivDX_?1d=c&5T%08odygWtA!Z9jwSfmgA2U#^b}utev@y#yv1&#%VRIDac1dk zYF9o=C+5fa@Bg#=`P%cVT)b7M-S;Tk7AF_S`S?4J@ZPhB^bv;4RJ1L@@^+USo1N4- z&3q1-C9Watqs`+g;#F2==8P1Ggh+cxsqCY zkZN3H=9&reorsT7#&0y9Nxo6tN?JHNSLT2C^jSXly%jF6w&;gDxRsL4*<<7U%7;%d zpA-3B0R2J04==8xe3w87d@o>ar;Q&-Y}<+D4QO6BJznHDK5>RWee625mX2;bJyGOu z|HN_Ld3G*$u`UD{DFbBSBC$|PyBb@T4a%n7^TYG$hS43i{qTLW{G(qu&39hfrV+a7 zmkSnSWryYMF58VhS6ADdIy|P0Tr&bW@ZbKOdpLb$jAvipWvAiAie<52b8NoKBk!2! zk#`)z67Vw*ALh_hiO)U0%+2*qOvjdpcKpm;-tmMF<_2rPg$jD1_3Hf&cKYF7u5atgtXwA@C*FS6aA(fUiD&8^;#3 zyFQh&O{e4W@Bi#I%Hh?PJGDNRrCpkT_~IrPuhdXV(e8Mll3;QF`+s;vUqLjG_!4SO zm;dRvpVvFhc2VnM;XRHK{WaPHibd_kcYV3TZ~gHlPArWvGgYM49B^y3L%F0qWjDDz#=MbXM=j=cG#T)$P-&{vYA9o;WcRl`(Ke`a_s`h$5 zjxG4>Z{FmwCsz>y_8J2Uj^M=7IMu4d=608r%?>h%cz_;<|K)dIq+n|t1kt(RNJ|Nc z;0xcl!S|nA=jh=vsuhP$$75r=%U)d{CA7o%7Z%WL>+6)h^4Lul=c^P8Hnm!x^{pGPPd&d0DB4{wtY6^{0{+GS`Vy99(|3J( zz5IAJ2}zC)1ScfwE1D$@pC#;|!SjSaOShG5CfuF`o9FxWCR8acy_ zl+>oB05u|TRW2B&QLYSoG%-z59s>e0vS5^41xJOudqQEiSg z+N1K>I$?CwW>fo;3d#kWr?1y|;dX=f-8GXc7a7cV&sF#*AG(XJ_JH0Xz_Bb2jTfjE z?O{U-Z6GxJK9677i;cFpX`z|!53bhug|{!p?kHI$F)|(mg73e%N6QVU7A<;%fTyqR z@zJw7w0^d1O5sQFu`&}@z)ZEkuRn5% zpE|$DR?|f)#aPMV*ldNVN+GxJ`}Hf#IP@%H#Vu+)r}W7BM>UsL0VCr(VX6u73ZT~Z zc>2vf&L5qiV2k+5hdjex2)MM`;K?_(lKWiERt0P~`#k>ICTEr=C>89~)jdK8EEFF) zzredr&#>1X;0KCI(PnYF90q_&@CwBA_`>yF9)E3vl4BuJIF`kw6}{U$T`i=rZ3%&} z;6raa%$XyTY}U0$!Te;2V{=t~PqD}!yJ)vLcUVRcvtwJV?DqJ=GpqdCqbG(GWg+w# z=#M?P$a~MsQtx;KQZZJxnH?{t?+;grYxCShi3d+j@!bnsSVHmbm)H65I}UT-v8ka2 zFo1iGOz@9BaWC7AKK+577tuLxvjYi^Vc-XR?YR}2-SD2`a6uz4!gFdtXT-My=euA? z+p>h9>-xNWy~acL%q0uE#+Jm=T!ml%nNw^xTsnOp5R8>=zWCHC-+Xb~fL(V?q;~fW zqwQee(!0u;ufr9Lo|_S#?^+z=pM2^bR(Ev0E@F_j?IsSf__BrV=s#6U+4`KD1yM} z=0<~7cabU6Ffsb~bMHIM`|h8m-qv(oE!pfe2mISVzf8vsc=FX9-hFnKx$tT;bK$jA zu=&(a9_2$19%83H(7WBhc-3KPw#<0AYYhV1QapTamZiBeUwvwwAH2FlFB7;YNqK!u zD@9o`E(9pcK_F2r>h@D6reOS{tDK%yKxyiT$DBgR^3`_b8A&Ev|5&?-SwR=C=%~8 zrPyt_pj;HhfeeMvhIG5*h2_mF?i5>leXVB;LN5wf-|2z~!8pH-&R>pN*pH9y=aFe0L)K5XD>(gks$Uq1lQ%v`exj z1dYysy3uamg^O2eM8i|NVESm@7o8u2%bAM%Cn!-+UBS-DwAg)t1NHBBGg&T=!s$o^XU%6 zs<5HlMZ3D`VGXY)%T4X9hq-r0Xt)`SeL=FiE?Vk6<8=G8MsRP<|`&$<`c-N^} z?pvCS)eNRS3@m=V*-k);~)9)8A9#@1W|?lo)vmb-P`5 z_jVCJh(ZCk-=NXlrR#M;jnQ{?H0Q0|P3o;0I~$t>ZijZmVPD3Vt0&1bEGH z2FjuuxXg_^h(d{(sVXZwl1{%%!FG_+r`>Gf4N7cmZ*cY6O{9`En{{^gb|~03f#>16 zu09Ts!H_YfZ~yGmmX0@;`1X`RQLoP=3vQK|U%aQ1tCGKGNH(hqWQ&l5s8dX5$ zd^2XresGP@q4rUZi1|V4wP8F&*%X?oytdxr3$JX@9t24+fk-(}(fM4xD`$z!InOW! zQU@7$X{Es*J-wn`?6MtD3QH)OJ&z}^?M1IfDE@*At4&rLeeJ)F76Lo%0ngs3lUP^j zq{7ZWccadBdyqPV9QXbJg+fV*lHg0p*IrrUsW*2}LSG4`iznxgbrflteDOys>~#i1L0%#S(d?-pQO4r?E{E`ExJbrTMnWP#;&3h# zjpj_AL{7C90ho?fn5BEQkMV6=uu<>x)RjF1=>SUEbalPOlb5zAJGQ=yYlzcojP=}r z|LdDqdG%%uOIQR_rsz5nxV9z2;A`n|jgpj-ddK5Ge)l?Wt~YhSwWx1OD;-~aX4!Co z4JpA`!8gY-I!7k=5nK_fMqYt5LY51mgIRs{@!MS6>|jP2HR(25!H-tM%~j;c!y!^s z{^&cmc;-qCA#{M2f^Bi}R*gS<;yMFg>R=}s81!y}z_zS-M?Jfv85toze0_^Q{N|g< z{pAPBpHPhD8pNap(Sg;7)OZyg!L^MR-+y%z5b=&@+_&&Q(JqSKiHLSovT$S@6p7xG z)4%=9mfRGPhB6*Tq@=4NHH`)7U}RAWq&_qG%^$7t+O2xnPQq`xuFsc$csqQ~fEA5@ z25)zyQj9PV2zR`me039d5D)|^-VsS>6LI@FQ<*RQaE&Kk+KSKiCW?@Xd1Es7!tu?K zchQ39#p_L8yVay%dZHLSFp4RXuw#R9?1LK(hoyIU$jLA=4dd>u=siPaBlJj3AKh-3 zORqf7`mHy4^U?*bzxgJEo@8&cL3^)-V?nuMQ!Ez((HS9QgN%+;kB(6m$utn+Gucfy9t({@A-7R01KF_7I4NV7@sUM zJ6WV!7~psIu)Q{CX3CsDI?bu2MHXgenVdR=RbC{pEN17XSy)=4Qms-hRT!U~q*yB8 z4tlJut@o+CPYgfY+4U_sErhTw0!f-yyoJlGLe5%Rp@TF=@I7}6~nLM8b^J*^9{i}hf0tK zgW1i<+B@jph|HwZglHJ-_BvjCW+V-$03~p2i|1}M=!U@yhIaeH_MW>{r$3M> zKUf&DpVc2zApf7fR{#G4x7hffra&eX>C>j55^*ny>+gEtvjZKIYMYBiIfufjO81E5!zISPxuf4pA>kl)g?2b%iWGbRyTIpT*bP^eQR3JpY zaXG@E%D%|EbJ=W~`{KxNJ7yifXuCv)!mKQsD>5PVq3-M=ZjbM3Uu^O7pE7TV4L(v0L2U?t#eR2N{DWJHJuT z_X7UUuU+G>pIgVVKn4Mk@U(5gH(p%l^H1K2g9i6 zWax8+&tBf)i%;H0O1(&A)|cnLt(3l>JA2DjDqp;?nf<5#`?aT*dGX3F!V)p>i~4Hz zduU39AEkuf{o*yAczHX#DIg8ZkanOFm$V4hAkeh?#7o=!?ib#~4-EPX8&*pH+fSp) zWwQ}!hTXO-2O;dyO3ncakce?&7_$eHVe(yR4JD$9a;e1b?i$NCFR^^%GRwDCXg31f zwxYIEqgij`dmce=k3rDIsagb%WKbGlRec=W#dlpgtxYP<+KFzMnUfX4( z(c{K;o2^EVffumd=(AGma%-nc$Mu;i!s2w9iP;(MI(-jk&!6Ye!VD6Rc4LRj7oTTy zsnvF=)pr?q9*$Gccf^{^ zo`|+AgCb2#W@t7Z|3p6KjLb*9>C8I2|(f)YJ1(b*4}8ac4#AVw(C!8$w zh=L;tm9Z;QfyyFsG38%QFNDzJa==8+qYY)e9~y}vmV1ZTGfi8M>slN*4HBuu2AF{sS%Ue?Rb3W@(!PWVV!}m z^m*3ooFy68l4Egwr^B0D9UeF`5q3M_>Ow%H=W}7DMWtX7=_pD;*|B(iqr*zQ$I~(zp?!(7eoGKg9CljqDQs4!O zje4K&U)tg)&d#$mU5UAjQs$LND%D*P5|^em72{MWk=m^>OJqqsrqj6ZNq>h^hH(gi zP^MXz#-VLlY&2Y+zqZFm&Mz4ACV_RW*5gOlb`gj$5L$Lb!$M&>+tPP{{??b@;8%b0 zEA;Mt8FEH;^)o_6WIolqZsTqX_XY!_Gz2 zXBJf$l%N-MHfw!;?<<%2^rLt2j=N`cP%((_Y>sdhUDX!N%UH~ZbQH))s(~=i-tC(- zoYDA8slqEwLbr6|ZfIfrN|aNH31qA5^TaFLyzSH^rw&&Qx&+gpj>xp$9`OBFxA?Qi zt}*a})Z$u9$_k3M#h-lhD&?ZZBkwp&rI@3*hKqnoD%w4t=P&Pa`p5()7RN{=KC%1d zP;l;~Wf0(clHdN^YkcM-r})Wt9A+kr)N8u!Yq6(vlqEZ0VKTn43pu4t%2j(MFD2YbuX1$|`5>q^Kalxk%w(C0~{C zRz*e3VYS0nSUQX=G4p%y{l7r6_!O%#2riU61QK-65j1 zgkYnUglSJ#Z&0$qM+N#ynOn6UW5wvQi>Qds*mZ-{7$6cPIzsUHl|5ctZ}Z4Kb3Alx zg5xt4X2%Lt3dvy&UrJhikImMAH#XY*@LG-6*IW4EdA^t*8K6g30z|NSf#UJYyESeW!DR6_B_^VJzl<5=jp3ET;J*- zi6Z9as2AaQeC4H8-dJt$=(%~`b=NFQ(`6-hP8})u_*G~W)*XQO=2gkBf^k&-@JFP)3exen-K*Ft^E)(V9snqvmW+5Vp?wkOY zjQ`L)il>`mtYqu+&VnI@O#!dmtZ{p%LuAURY>f(SET}}uw}hb9@%V$suJX*49o}24V0M{KD5aJ2KmGnqZf$q? z;C=JleR!OyYB4^C9!N!_JK*+qhsR#o;Kl2E{8t}8lcShwdh5BqVN_+(C|%Wf@7RK? z>m7dUt5-R9bb=3@o#o7tapoq9OjevEx;fBu1NPb;x3;^yabK09OvzLYdN12$_tF0C|q?(z<=-EQCqGFCED zc7)L5w^{3PqvE7+Bm`_X`a^dsr!Xj>+4Z@((HU|zS4xEetV{$Zl%$&%Tw81LJ72oQ zyY5@yp}S`}xlmzxyhzEh;yLU2l2*^x(T>BiexO*})9|I|rM`}5KX*GV@3i67?0DSV z?55_HHh=}S&LE{D2%!VX-Q4P?aRu}S0nc5o@r@s?@ly}Z^N!Oq9GK#b(2@G)^xP)h@Yz*RX_+lU-HLazsjwR4iBF@#EHc*rpHU6QL1s#?0PJ3 zcKF`Q8@zV2&Zj?eD);&~8SbtQQ+q;pmIb|jz-Pa4jpyFj;o^<#^e|dZ z3ksz&gMq{kJfzfjp<9lk?{!hWk2~<_bo-Qw7QP3)HWaM_W!na6Gw4WqZJ)6z3$JU_ zu0dc+Yy?sU2um-PPgjc^ovm_eew?}SGP4t7%ubIJG@E?qPkzXW2kz!pr^|(lSLh7} z6pIB^(56sarq-wv$bfFQ!&tRQuhZt{m6vGu1Os=#&Ta$W3n&(f2r0R}yhY$CY|CM* z?&ABAQW|;nD1>E`^28X%cINjeCOs+{gq1N`Vm&vbNB*ZwL(oZ5XLVC{XY{PtzgsGA zCWth8A`5>cAW?fZf*{@r(~*A9Q(XTs*lx4ds69-eGn(Sm_U*A))jXx^WtnS2P6 z*ZH1*`}OR{%9uj#KC2k&;Ncf$=KUH^4eFhb)u<#88M2CWxgkw_M2(4E5)0c1PL-vn zVOf(roBc^q6S-r4uuDaL%E~1`eDwF9HTg#FP>SrY)RM^oBOGQwaD_i(08Nyg&{$1F zF96q<>~%doX@oI2D#@4bjNW~n8!HY))QiTg-u04*mC;IlT&I4JN?{AZWVyiNM3JSb z5>sU-KIhaONVeMpR%<=>dOogatbz|QojmrWP)aaXw3w_o2@G)(biIH^*Be?@jDAj( z9md0O|7Ht9K)WB%?)yfiIo8yOq@+Z8ZdjR05t9gacZ-h2WTn8;beW~83gZ@IsWpZwi|t#J&z!e`uYY%hK7ba8llw^ zFj*~dVt$MxGgYc38-ZRZ*r@lowcTN_r6Wnsju$C7+6;-#q1a9l%d)Ap2lPFeAMHKM z$VO<{iEg5(79Hj$3oK5RnV&4ii&|bFX>@&7c6;o!2DG~#iRXtdFMSs!eX=t(Y9k6} zHBl+BG+W{DbeZY#qQ1I8>U%IZ>OI!?dhE4aeSfymsUdgOkY;BmN|Xv#%v&Qt8c0R0 zJ&4ccrw3a1cf9N{Q7sI~Tcs4uj==|wu^f^C!oqS&REic;V@2jB3XGMU_;YU%P;Yze zwg&VEfgV2r(-Q@KwOqX7uRGv*0kxKQunMeTykaw1Eo$S!7~kj&ZnNW?(}~HdLp8Oa zsFPHRdb3ZrKcHYM7H7&FUl`}mWQl@pA(djUHDG1C!^WQGEs+~>EYs4gFbgfVWid5Y z;Kaf>hi5BPih6XrZop=($L*~y^_Ghef|>Cmj+3UNNcY{T_qFFzj@*dnb_9>ouGmv! zMW)A#OpO(^+pE%7{53iQ>TQo!UumT|<|oNcyp)Q9V=+;2Sez-bFjHo->gd3W=z40+ z0b6yKz2<;c*H10Fng~%4U+#Q>BR!FZOD`E+&&mIHGuRpbBuJW+E zU(zu^e)AX4@zM7j=I{T;XINXmNx?4A?|HbcPv8dxGQcV6Ncgq|gMm-G+XE!UVi5EQ*6K0Xqc#h^lcvxlr&%uiO3fe$DaCQB?%Rv0fkj8{t(9h>>t38tpTSYEC1 zC*QuvgX8m5-*zA0ef?G1^*u`E5|(9ADitV{ibxsI@41wVMQmHk6?dSpg+sUBr`zc; zF;=4B*wouS-gf>0e)sqPJx{+L@VRd->)?qQ6bF73jW~^CAuXdsi4`a z5)JMxD9dkAueK})%PuBxWb4UoKFfu2kTL3rKn{E}Z6O%akLUE>tp|BYkq8)`u92$b3^0%PwKtg)mFnJ~_w?$u)lVS8v{0eP&e# z&q*+!-n>Y`JKAjcv6HzNqT=?mSW-FAgus{#AhiNCRB^WD@SDo-Lv{)%<3onCr)f$V zpcu$f+0r^?AQZa zUrK>pkl|UgEH1))=qnbs^LB}&CRFmQnY;=E7)P{WG?+y!+C#NkwD{Nq3$aV1#<~7$ z3Bg9K$EDR~dZ8)RR}D=!(@i0K(Rb5pGKM8rz^7AGOe$z} zeO|p;=an1vBv={Y_!)w5H@xN`LbVVUb^)-=`zH5ED)TqPyH%)2TL}6CpOqb-<*i zZ^q)d6FF`P&EtA*KfP-ZTW*P)d4!Kv*Q4F@lY9!4l1P7`chrOq)+|dP14*OfQEz*^ak~}I_gJ|QX`Wy%Xr`e|{~gBDJ}EVShvknz zVA%x%e~^m0eJ8YJssV4!lPv*a;7iuF+XM>E-}^S+xcDkgp+w&uP%IR%EP>|-beaQ{ zuN(9O?KUkH$brN{(H9bdLLZuUPX23_6Nqb5%|(P1ETOKn9c@i?LFH zV!@(dJFM?^c;ogCLI!x2qS0(}PoVhVBOm6{Gmq15G$`05RNzsx$FYkAL}wkxmGLoz zssN-*xd?N`3bufPBbaeYyz9PG%uLU+TVFNgbsEz`IDnsdXO2k3NYeUOo*H8E|G2q` zALb0!a2@%xGWUI6!v~a39eoM^GfE8=`@&=Vj&KsAYk1y|1W#D8v@lly1)xN}mt7ib z`^w4L@gfFVc@`&Uz=aH>VFda?kXDO-3PW;u&S~T2#$!k*ujq+tjSR6Pe(EzIWadbygGbni*4`Gf%FnafB7?KFj zd4h=S!VEZB!rONmWGnqKi6L8OZugV{s%fYiN^_ht131(GfD)+aFma|%Gh4i3rlN_G zW?iOHt35b{QD=m~#2`*6EM3b;!W0Q{L_Lk}YSx61Owc?UJLp`-P{BJK!~LTHrei`1 z0k$xwQp|>RPRTxJ+LDwvRien-`rNk4d^7MM6{cw-Qhi7_9+R~ob&fY1*lW0uu4{N4 zqDX}L$(+9;dw@s4&?>57aZ9Cm+wm#R9vM&0_J;k46!j-w-=r2t_D&pGj0O^;C}vcK z_Gjh`4Ro8(U^aG}b8(h#=D-vM2eT~QhDpn#qT1^zWFeJ6NMjD?(a_NJPv-wHK}Dmb z|Hij+r0A9eU0J%3fgyDBI-9^0;or8i^_V;M25%F|wE)?v7Y$)Vou(UN4tGp|3299w z9Wrao5&Xtpg27fS%O<{f)##%o(n38?;nKp%h=hNK{3oj*WRGK@(u#4?wTQmL{1T)J zkluh)aEXwwTVgoIL`<8hDWl7n3QRVcGfN1euS1D})VNE!AyW04HiQgDJ zCR{wu(sk6141AQ7*o7isC4()@t3-q$>mnJcjN#AFUdBTx)t3;FX;-@(he<=+r3N4+ z=ff5)8zF4KT+|ssSSo=t9=oucdGhq2BoN$OYcud9_n$rkjXq+^fkA-pOD#h@NkxGj z&RJiAuRtQe_hb4XT->je${bxf&WY_7*ZbSFghT|2daK9rnKFx0WqJb-4~ZKDSb<*P z-)!^GT4eY5}L+<y|B@?jT-FQFw!`?$0)DT9*KL9l@d84` z_I2>g@T|8CICA_1Jk@h6> zK2!QF@T91G66Yk-OoW0VJ#e2iR7dh6q0^)f5${7JK}VIz3nLvQ)u-VOnv3VAJc$t^ z%(BD%FeOjwmmz-jbD|UF?wTKneB-;xER5$U(BSY;j?(9hx2A3_?r6jg1T{4s_F17D z=F#~e4tWr`cj5WQIQ>HY5-|1 z*KA{GjmGF*7LCST0{IMSi0BpNTNh`AZz!x)d05*(3*ftDm7U8wL$9sN1WiiZF(T-p)^CgLzj$v6sRL@$N{ z6Mat+cSPUu)?2PdVRR^;0mSNS&e#q0O9(`sS41Xr49*aL$YuOS^&vEQd@jF8E(l4} zCS53GFwkzK0+eKkH>j}msJ7Cp_(@}Vyfv$z#ltG1=!Fqom~%cWy@wH<&0z_1kt9u5 z=3a*~{u_;XqyzgZ7^A+WXNn0?_$K?=R6yeSpfaU| zzJe!^nfK|G9aE{m8u4v3_S3KlU}dvIr|0wbhu+EJ!aVg(i;86t$N;m?_3%ls$NB#Cr|1SQr7+e;*YnwHyUb0MsZJ=5JY(>?d$eR!vK$(1N-x#kLjSF+%Xv?2^^VK1-`HVoS@2KHeM z1BMM4FzhEk8HR0GE3LHJU0K$0NnJ>h91SnS;c!UKt?!q*bXA=?=hQhTGs6#=5%I?# ze`MyVrr;R#)XB(*KmPddamk3Jzk=Cl2tA#-m{vLY=r8oKxVVO%Qh48oKaL0c6WrfB zv0K`mp)_@q=6J%$JJBQmbv=ozs$E}2QPyyYGp{Ex%!IElniv&FBS{rXt=viN)&Vr= zKYP-;tS4W@0+GBX=~599)|TGYReeBizt|&Mr4*EAlf-RCvo2)#UQ+c^@eWDHlQ~=G z*Hae%+LQ8~1KkisX#E1Tz!yej$mIJ~ULTle(J`KC7;f+jy8yuPlTtih_wn_8nCw4z zcfws62>RE1AKp(~@RYK;fG!s0WwhT)|9}OR92vkoLWm0)B!;ixsO%>_@nRM#qGT@dZ`Qf{n)}Ntzt$`=mNo_WjxJb3*}g! z+mau)bFd1iC&prTV@quZNHCU$r@qgFw1zI5kCJOPU>+)7@!)N3m#ob?1r%9XR8uU< zYeEA^R0@?OLILH$_C)Pb0|^F3idovMt}aWI#k8KZP_-S31fUR5W`4?ibF08e+9gp% z>(qgm{ZXFlp_58Hyfope1`RfSN|yN)Dk+gHAzzF zvS{>gMt^vS!fkZC6`|c!VefE?H{N-O&%FOheBguc$E)A|2GGx-3n14TX)i^V7U-o3 zv`UcY1!l;gme-&bSCC{2$QIYIe)cRTg~o%!31&;{NH(|7yEVX5NrqtxoG4&#IKh=! zj`M4)C{AX$_i&5^2?`AiP72)I8{*yFV=U+dKN=rnZ#u#>U&g)rJGlJRlQ{e0$MB)E zmrx8JVt;=RWzxsN-5a?3-dmVXr%27#d;m$>$CEF-jORY^GR~dd#QQ(|QGETi0S3dO z-l|9>O}qF)sT5k7K^PBAwaxeAzq+gfP%2zFw}hv!tmFG{?qM*T!VOp|4kZe>dU*}w zNr7AUhT?#wX<*UoDLnVo26pyNaCc{jEOq-N;{5l6@M^K7M754Ij}hpoTSVrQMB&U@ zABV>?Y@c1gW7|vk!J7xjOYMqkR0~M;L0Dc(WMVO<+fP5Sj$W4Fr|%tBSD5ks)HXBh zW~H|ay%bxU3s_$6;pC*i?!yzDOsX9Yr3O})dpNhbSe-OJm|*{Kg2G;v)|GftM8%63 zxeRSN<#5!MKH}J-EtT~y#<^2#6&3kiJ=6G4Q~#$W8tKRrfy-^P9Y0a}D{xp~)c`&g zbi4~$F(+dv0P36S#xiN60Ig?HX%Y%y#!o4@Q;H>rU;hqv%UI#9a_ldU*u;bR#pkDw za>Ssg@iu{(OLT*gpo1U}kUSN2zv}45o5hG?7ct-7R)YCbFzeqMFcaK4T9n@$9E-~& zY_-7eO81mFVJU6JJYC|UxBGU}Z?O6w<)xB-i=8vCDkJ%kr#5h5W5J_~2?P#@Q~dGw z?+S~bO$y<*TG|!WSkTxMoKwSK0#oJv@j&<($iHJKC{(K?;(&$9OC$(tT#SH|Z9|WE zw_T1o-PJ3_9vy8$ydvm&9>Hf1ap-n(P&E)xFt`DJ8sf5VfRgiYDm5#FtgT=tfE8Bv z+-a9ehcbwFJCH41tUn7JdUZ9WszVC@>Wv+I?&S;ko1gz8-n(%fd09f$-}?5_1ggw2JUjr39BbzvNB{9> zF-li3IGJIl6P%R5Y&gU;&yg*yK^GHD#zSnY1X&5J0k}Ju;qauuXjWotV}ugG&i)W- zI>00^aWtM`G|jP4XcWa1-zz3~d^*J@Cb;v~kFm9N275;*c<1^q^vMwxQiTtG;zQ_v z@-w*e;~(JdSHFp!TQ}^ArUrl{#o%~|Pk-tYK(c_JT)&O!j2@E58HH+stW=KffuA8| zZG2>erP{t)*5CJ(HIS913@b}L>>ixhmGjMw1@wm1xh{#Szg}vQ6BGX=iNg7VpB&h)I9%Mo z&he%0srDOQ`{q44;>Fv6gVw~^->vsr;>pIXQD+sAn0Cl5jAQ=4piG%;P~9|DOsxe3mkO?$CxfDg&CHpGvR zX`&#+)#)&tYqyQO4ekFuRg&rkK0+o4x3l$C(83^?LXcxwuu?=3gcLF+0~3~@ta&sT z+N23nD5qVSL^Ttc+CBO+x-vtN;|QNZ5NsoCD%i}Eb7fRPMUyMwzY zFkF}}sI(ZLn3ISl3oD>Sai$0TaO*9>qA?XGAm?{WbmaBU+v>+&YRJ2FIwwwN_AcVo z+=Mn$YFd>Af?*-jFp11IR(km8)ida&N|cKK_qBVtu{*>HxmL#^;bgjEyKETfPK!qS zALXO#mBn1>TT4vP_%6Qc*> zjqiOQD^EO)#j7u2G%IoNUunqj2GEJZq$ttT3VE(E zm`$-ioI>3jSdNsa?6^jWBuTJcDy*E}hCa86JG=Y1dG|iXfB7n2{rcB&>Dsdx4aZ1P zqQA0;(cl2f7cS$O1M`YC3b9M4Bkv-y7lH&Zs(!O>3N4U%)d@tmA9n zzKc?q$g6%Rnw)$mB*Gb z7|t+0$%!B<%x2XM1X-$3?LM#imKW6-HDy^%)@E6C<3drC$jfRwewr$jMKu|K1bFMc zLoXaIa*Z@qm=%S?R{?oZqAWDhEJ2zm6otm)7gn*kwt!cDu!Ez)6pITfe(qxz@!0kX zZrmB*6CXN{~(|{|j4q_vR7CCnXZqaNbHZ#hkwOc=EFV*;YJeA5`!% zoJ4t~WV#twwJJa2|IA`ahz`?h$woFg0Pm%{{>q+P;sL4R7&aHn`XV_1-lsNVhVL`! zbvz)}og5J$#2cY6^xB|c#Xw5->S3i0iMFq;XH?cpnpsH)*8IO|j+i&1A~?C;X@h_` zDl&pW0~b@D1|tHYqo~CK-R5CQg{QXk;SfCt%BLCUZ_pygMG4uO6;V!cs~KZgnI9wX z|B56DNv_1Dubp<~SD6x3Wjo1G#cp-2TqL8PtJ zLwb64EkJ=L- zC;M#W!<9=?b9Is@JPv;kBoP7)gbu-fEj>%}L#0S2RR91W07*naRLe;A#O9fm-`ND6 zQ%p#OVoI>@)D;EttO0MYbnL2=KqEPyhQlzen2|2c|Ed>C&K#`vy z%@z?Hh~wGW5SslTVP^X-9OVm;#Dhj3Uo}vz0?%v~wb76AU0+a*z)BN^hldmV@i%Yd z*T3)-p1AxNzVVH>@$lgR?%uqPTQ{!b=le)i$DL1xO(*(zWU02+}j;9*_Q}Pe1($Bl_jvel;PsmGSWoh?%o&*8cY2QI|nCN z>Sx$Gvw%AfM%X&DhzncGSX|6-?eZ#Sg~q+zksarpKf8zvXO}P-<+#5$Mqb~8e&O5_ z^1QmP3jq541Q)heareQ{+M}Y>IJ>ckOBa_hJ}Gd2cZBKGU9aY}s2Zeht}kHw>>|n% zxVJmPaFip-0F)Y8s_@wM64qBT48{fS@19iG(P>~|A;so;52JB`bDIkQG;ZA=qsW2F z7niWIlwoIof`h@dI)u-Bil;S}mol8)=;J#-+_$UW8rA9C*Pd8Izn9>_-U*HdQz)g7 zqzNvb?PG8}#o|JS<;4{DcE>16jdNRzIKR1!(MgV-y)o8Sdl(F77>#pmto4v(2_7Cy z(Ca0*aB&H{4<|UkwTLuLaOc4YC*vHKF05d6rH2Q*V;mh%tvh+=<`E7D6DTMgk8K18TXAhnIq2`e%YxcCUvki&F3c*g=raHEL!G}kFyF`c-_)8vF&{{Haz02xq7sJwb54*8TRYkFx>roPXjHb<+3lJ#bef*c+jj zB{0{a`o^<{X2&Y#2a|P=7%f7=`D+;(YDgOuyHU9=sT65LKtYioO)?rl<~)N~*^@Z{ z&_y@^7SUr7IDr<|XkGJ}TzTa|pmNjHIMp`8d!~qDG6eLGI8jMLWS78%oE4xEZ>{sQ zld|wTHcz!RpmkBL{K|^no+Q&v&8ZGwOV2(`LEglM`6=$CFrBQe--mMZCkzrxGz9yhsyxroz;;Ly<=vDT{prx{eeg59y<(m~S$@7~83 zKXV!RWQ;%j-QUID{d+(@Lz4Be@x(PudrLUJe+N2Im`-Qt_ZKmpj4(VrfZEzZ(qF^Q zop*6O7$eITu(Gs(#ZqH!GR1}lc1w*zrO`tQC{J6R?lC+ z?!hsZ);FPwL-ZC(U||tUX@Z4?Mf6wCAzfO-jq7(%ynPeB{vw{Z`Xp46U^F{MMJhjNv%P*Iv1gyr>3xj^>glRDenV;flCwmAAz9*(JRE(m51` z#w;&!>B0)KEWvbEVCU6)*j(@9lOH;d-~ZR|VQZt0^IMBpTuAZ6r8P{a)%T@ZYh1dp zg2&G&DGLPxdjH7I^8IO$>%J?7zMP09ae;;pbkyfPeY58+IG_wae>x z>Qc4kdU-L!Q44she{3}@CB@V;j^ zu(Ft8JSlLgpWw;Imhr~hN7z4@VtpmUCqH-&N5?bF@)GN-Jv{N)3ib}C*xKkLO%wsuuGN)1q{wvZ=TpXecDcEEcV*l>&* z#bnNH>e1m>(t|Fh;nzC48%KzFcTi&$YSHSY32yHU@o&C;2fy(0NANd4{b~HsAN)Sj z{sOXdSD-d8V>CPhR0^%kitQqbVu~{t9>dDU76uRRp(udf;xf);8P2ZuakzhkWR@T) zbam2onOA;Z`R7mcl|rEsY;JF3vC@A0$v(OY+s;~2gEBDB`nICBo`Tj#L3xsI~T zvA?^A@pz2cG{<;6#N$`4pw|Pw_Q&7GGgqI$3m0}| zWv#X?iK@oGj6r3ok!1-!`o3*E*c;*XpFTuhXsj(~_{>KxVlpkPOjp-3DZF!QfKmh3 zuB_u*-+O?fEK!!#>E~&p@Xhb-U@)BG+~yKK^x_sa*7|s`H@3WV*LG<;K!dKfMi)hi zS6+L7lSzrig%lroaSI=O{w)6DJNKaKUgd?xQ{A=~_G=IDV7Iz2{>jHzab~@b zyXg$iJh6(RDDn00?%-rnV4O?;#L7~JFMQ@AX1T_< zzQ2dO(D>}f&*SMUt9Y<`0-)L|eP+FfCoe7ImDl#Gt<$y8_p$_cADrOEoguW=xVXKD zkAL7C4vweT-J2oJ6p(9t^Sk$OGAVHR;tDQoFXPqM9$@ESf;3UMdSwk8Yklv2cgovD zDeUZy@uRm7u)f;E&wu(7l2qXvuU4_gCqH}vPhMWb{oN6C>gc+;v49Uee-_hefxGvI zH6IkTE^+ScBA&f^25YN5y!rM4^1Q6Jq@U&!mDrMJ-5)xL;#+S+zi6E2X`Of6vIQ|> z*VI&4=(Dj4O<=rc3@FmjX}SKYlLSkMoaQYW5yOfUs~%2ZF`V?&lMAE1=v-4H}>(F8HhFYj;-Gr z1gwkX8(8gw0kMzv4VQ%O%IrcGA4DbJ+RKycvfmw>j?6pQcQL*(G^6jl%%)M9R7M)7 zM!@s@aCj9r3jEvp1i)xk;Q#!_ZBWVs(8FjU-@`9FnN}t!b3P%7%OFk)rE~aqf8#gt?LYrh96a1dvATiTc!bHx7-@eI)q!0JN@y&up26DY zHuC8R)A2E~EQ8X0=p@0xXo6u5?4~^|=ow~~re)oHwVIkLU;zqgmSJ^$1228xMP#bP z_JTYY;B)Gzo&5b?mY~Sk5LvS%2MOOy$9Id-oor;0k^K-#@6~O ze(~@AGCue5PhvdF@P~hPrwX3E?eLr^MAxj{_NlJ5#@g}%HdcH1=JyAf%u1w*!tTKY z*Y6CleRjzQgZlf~`d?m@^*6Say}rLU!qIUxpgS5)s%_={)P5?Y7#)sG)S_LN8Zx3+$eu6CPVRbpf zTQ`m|9Op=s!uX`X?FVDLbZs5IUIMLw>8!-ges%KkaFk=Eef{4^FVNUu`$e^AdOO4{_zAa5Tk*b4z&c+8ONZ zjj{jm#D1sUDJf=;1;sYo z1553f;s1aZ5oma+5f3ai`$1>)=L$x>y(bFfq!s};iD+TuZ0{=-YC73fq{@5-zAQDS zvjWpuiOH*$Uuv;7eCZR5VN?HlQOA zv8Vu$sb4s+RnfMRy~t_8l+O0GYfkHo!|C3EQzstZ zw8@Ru+8g}VnNefW32wxna~+CWdEMq5C9L9>)#*Cm41i{J;nk@~AZ(Qm46KAtZRd1R zoun<$fdY*!wue};wrN30Wje?j^^!@Fo?1Rd{paRYkP8Li?(PVG@!flP_Qm((%m49z zf^*M)1Vxgen4MrYomx<7Zvks(&S7O^3$xi2qvJ!QX@ZsYGgw?%1A2Yv-XgNaWem~; z_W_)sI#?8_WnF6&_B8quND?e8FXQz$-^I7S|1Oe+C2X8o$L6_hEU&EN?74NUtu5l< z;1IhH_L0wu>ZT5*kmos|3mhE{aB?z5Srqu>M?QpSpLrU8@U`2xerJd*rITO+aXtGN zvD=1FfSsJM=Vov*CiPvsT(5lB8Piz_^QoAke6lnu?UhW4N-FwUozeBGs;c2?Ce;C5T2}{LsoF=6Cwb)$>gPn&*GMS^U7CYOt0v15?(T8o<5BBOS-2HE zU23ea_ON|+5pVqT(8a=aKg*(;5Ks!$fLYUXDXQn`thDeFRjsI_mLXL?`&?Ay|J8)3 zldlTj$)vElQMF$^q)OqXXU^h$@0@t8ejFS2BF?g)L+~g;`z=rmx=~ zATLTheqp6*V;&O;Vq>ClCEb2NEd!0cdDp4mm=B+-ycInA`_wK{vOi7w6uk58zs*(N zDI!6N;%h@;?f11YIjgUNJoDrS74{64PJ_;QUP+k>i5Y;<@qioMC~pR}86DO|DIRCe z!emLoL;xq~Ovk{Y_GX&F@rE`wwj zedPkeiDWFLl3xp*)56fmRWB{L7(2{S=4NGrEoxduH!heX!ci4IQVN995b1De4}Cec zv^IZ3D{JJ#Z1=IH6{(>r#jc8|5F4%_{AEo{#}m{Jj-gAw5%p8O?bG{)iF8?Mvg4J# z^@u7MB9m2jxLK?M?eVDFro9ykwYjFeqs~Aw1p;8repq!ibYlGU)R;D;>nKL*IdP&o zWVnZb@;GVA800D$aNE^s52SjWPlCdjs>CMvfxbJAg2n<$CDr$zN--KT$DoYNBIE}t zBfB9vb#a3>X`sx_J-M6Pa+o>DWPe|LXrM zUH@av7^4Ni4b&rkMgzLYq05;>9*3!s8z^vyjiiXV%2Oo`l@OVY2vTb^O$I9huhbe} z{i}O;_wEqC_1pgdf9u!&eH;x(05r;?sP55L30Bt60V>1(?tP2~50UB;D=VwW7M9Ro zK7*CD4J<4!Vs&*HX_@1=oFOq(tw&JRB&bHF63j}CS(X63K8{BPvc+YrtgU0FGpsBx z;)NHV!sV-%aPRH|+`MrInoA~ z=#s=tRsmFP&NZgf0*n0=x;_c{;`wDH^}rOm8q_{@X$^@2^1QMeR~}o#(eV_MNrBCc z1zfqf3Z;PiJ0m=Hei@tV3z*HSf${mRC4BgWEtDFVObR@Jzi-{0Njox^qlqNdWGqOr z=oQ;uxu3Nj)E$BqFhv9N+$$5P4R;oN8<_7~Jsdn-TAa>lgg5Ax$9w??(tMB~ zD<}q}%^fh`z_+oGb;?|cI22<;=p}c=j@PiP9YAFOseIVe=m{d)gUG2&0v>K)g;W-^ zdUB1QpXn=&FSji;JDjLVp&z!+nf|77K#%2XoRelN>8cJrp@DTi*d(JKVu=hBQ%l`Nb_94raK1=NN8M&PjMRQC#J| zduxD~-?xpAymStU0=CaCVlpdWCVuilV|}HM&%AsQ`-dkuyRm?^sGmoMLUY zhqaXqufKIzT}6b76lNkDs=A`h^BW|1Uth^^ZnKX!-a7QR2dfJGSzh9WYwI|7b^%%g zR~}o&jXNXUc`!mhQ}rO+@#OZsW1Qbw!e?H-fLnJ5==W1x*jl#NF4?MfwwN+aw?Czi7*4<;g^1TQ6zzbVAv(dwNoMZd!5{?E_ z+^n~h)9V-+L3|P8dKlOV8vAN!Y0|aH%*|FS_Mz9Kqh*OAqvGvhBF6Il&UXh?oieQ4I1^~OYxIeD*>*5 z^AC5spoNes9^qv@v%IVR&-Pl+&m$)?Br(_V)N zc>O1D%CdmnL)D#je)Pmp11QZ2(9U-GbsH$7X;~^0emQ=kZhYOe3nhJ`gx~Tu@l+v6GbBmsCT|*A zisRZ;{?VQRK$kP0zk z%{~NMvzvXE)fHV0yp&3yl7#s#t_yN+`4C+!IA@~1$l?qQUB^F{HIypF$q@9 z2}XH=Y-tH^zxg)q-F<)()gTmQH2~}NdstXp#LCJFE?(HifB6soLp=Y?^Z1=Vxry(* zc>pJ4?ey?PswAI_P#dH$9L;cVZ;Vm{(^-MHZXBWCPtfnBxN-Lw8o+o`;Nf9)joD;c z;BYWQzn`Eefrm#EN`04c{3`bM!9ZXP`)%NG> zw+1+w2Y7fmt7KhkOlBnx2D5r_T5Umocr?Yyw6vR$j>kC$$1^;A zWer*b@7x+ztJaLP2ZI@I-Wg(LsfR36xOsPkpT2i&S6pYa84d;$Os5r(XNAVj-Wd5z zV|AsE*-Yczn@4zfIKjcu1k+iywRt$2;dnHIhQ?%CV(;O^9==r+8V83{Os2X09{G5b z<9IlOQozZi`aCNyG>W1+r(`tFF+9m}a5%xdzn|yN>+bFWq2vMTf@n&V;ZuLV14qfyLG;FfgxEDmp?g5MZg33vrr1_>jJ zq<|NfMETE{ZE2#&>pIHuyJqVrSszK#^N}=l?QiW34q`#8uHPB{T3!VJjR=LK{vw}1 z=d*fc!(=;tR9)hFTbs95nKUyP2t_Sg+;2-1H}>52p1)0di;TX!NV7b5YOjGb{s6eF zx7n6V2&GEgFv^Bf!p97NnM6ctMP`S{E007Xy__ZTT2TqoYyoCPAl%6G*ONMoJ8aTr ziK3VQWt$U_A%<$-%%?VY=d~wp#hQnDhL6fQDk#fBv(n)3^A%TX7rZ!}!g5VI1P<3! zNh;ZZy`x);Ae!{QvrlbIf|hH8Pj!tGS|^iR@Mw!MBJY&~e&usd;8#C?1%L9jKgU1$ z@BT-ObB$gKOvgi%vnh^86MXFDm+;)x$ML6s^(N9pVYLVB+`NVT+jsCW^l_{U+(LoF zRN=TR0IiUhB`&HA7gT};t?{;vaqaH}K&XU%(%H?G}Fj-`vK@q#(hnk!c+#Bn?T* z97R42i)i5aYa5tOOWe9QL|&BGTwlazKXws6e&+x`dgq}V^wrHd?d6xCH87{Hm(=1- z;qiiW1z830uOcd9cKg&@sZ|xDrM-pP*P7G0HM~#iy10WnmdH|t7p|@2-fneh6+bf3 z=(UEfSLV$MY859Lo2Yf^QOfL8as0k-A4ijQUA)m$|oZKobEi^>q2#$#HM{!8qU>W~J z{Za>J_(2Lh1JN;=mNE-Z6Gv%@7iqL>>QF}vc6f#X2%qVpe}jYE?H zv{s5&5m?4T2$M(+t17Cw@fbZ99!UVaR*! zx_omAv{QL0@ZfE^cB<84_HD31RPqsXrkJ~Hif_C;4U}ar^eNUF0Y+7dzL-n?TiWv+ zJHvq^5`$rjl2FHrfSW{hkSPCYI~4iFn3DhiAOJ~3K~yGb*JFaj5kVm|s>z@tN0L_G z5JomoH1sOs!#l-5u29?*sCvUwf>IZv-)cNfs-6Kf9?!`9HYq$3k!XW_a9>S-aTxq6e}7imBMnVaHus>l^`#x>+Y_o z1ebM!910IqiGiMBu)l+~t!)fO3PlD$WmuRMc>Bjc#nIs*o_Y3JJbbUZT|jA#R2Mkh z-NExuJ&xc0`~Mz3^3n_Vqp#n=@BGP4?@%Vs@x`bad~*{yIUYb+03UpQ3(r2ef!VCY z#(Ez+dt&V|l!0a$3btT0Oj8eqr!~G6Rw{6ef+`!JYMIE_E5r^-#2@abM5lznBvH zpMWvuw56`Wg@@Ig@E$QqJBEA>=^FWv%3ZqQ1uKrWCXSG0-fzH7D+%#Mv|-z*fH0*1 z*IJh<5jf@QxByQ|ahI-;QJ;S*9AeNTjFZB+ps4c2CMe_u6|ojvSzEkTI5WU7ww!+6 zrb$sBQ^A-?zePMWwU$BbTK#Y{i+~}4Z)U=4j)df)+l8Sz{N?p6AfN-!TL{pr)r!X5 zUgYm*k!n>wJtRVTe*(J~%8?2UWPr46rgW_o{xvc_bZ1mlh)7W0IGlv^-v}LPBls2} z0O~;7DQ&4eBE4N!Kbm$7bV!^^JT&bbboxkD^oVWO=L*YXFQMIFMxG-@0)W6_X+Y}| z_I6X+E;SmA|H{6m_w;H9hnDteA2X<&Ny=9C0};ukFy~Y2mo2FPWxvza)!o0QAN63) zzB{F?#Idm`1inFJl}7b_XOV}dSpzC*z>fwBv?V5Mw2z&;>g_a9eiKp2Yy`+yF72-2 zD+^Trji=LskQu|=A?OhpUY2=%MONzDL#Fo>tH7^vHZb&Ll&H_r0XaRbQVA4_7K#gR z<55$4UGgSN6n^h3?_p!5hkxsDe*xR)&*MM;C;vTe+`fz6LW-=^`1TLpL$;8jzqo*v zRO8Owdzcg@`YJ`KfWB79pfEMO($!UYgG3`K6$WJvpc)*X3`fXkQ>cC)YnjFr38s@7 zhQl#N#{;Cj1>{K|)fJY@EG-FaP~7<3sOzAO7g;ck#de-n-~!Og9>158^+} zqXvm*xZMHXeCGhS?+@|V_7Zx%6mPu!5chUR)z(!KlZ8}fHnU5jE_RMO!9*m9OMIWN z>ebd1mR`IezDrDyD+;$HJ6e2Eq?5wh4$5r-5ATQ&({ls79}-^1dsXjs@UF(g^pU@% zeB?IpwEiPzFNEZL?kSov=FtPl@F42X%Tnn#R19q`6?Os9U?pBCW4_<6|8J^zA__{j zFktbtN}m0P7dJ_9NQitGs#u~n$&=6qB|{Vc1)m{_NQHr}z5(_Ccl61P<(hZ}xi4WU z6=tTd;`MXvtRX!m-HEV080tqEt+B-c*uGc zuTqxwWL0WOg7Q3&X)NyxkSBWdl>)dAZQ_+jjwZtxAkT?b{Z71ZfK>p~q9yn{&ganK zFr>)}wf|k2tElU5fW7x*V#PSa>cm%H3B@kc-wiq&trK*`&y4A1*YH0{GDrU|iKwKv z(hDN*^n)W$Ubt0a605*;!M>@Vd2eDtwJ+d`S5E#+cu&6n(UMt~SV zA8P1BWd*j?gC$ytvTgWMSyonOk|e9&HWJ>6zX0xMmXy(dV*pgOOQ5k?(s#*icWO4? znNn-K`Q9OVslumTej2~@*-zu%gB{$saSP+o5dGyvEH1C2C}uc0*v0P74oa|Pu9o2OpF|T4*pri; z{de%H0XfLENP!=U>A%2yMc<3vl6+LN9dD(2G)Sm%Y_%iRioCZ4T5_MA1Rz8qppnSO zF7j*oqnZkJLQ?hsVP1uP%nu6V8za+=KDA?S75AoboJDvhYi|2owa9&VdhPH2_CFT! zZlX7TXJ%OhJ+lEx2QWeEFuJ#Jf^R%4q)Y&3XQLX9Gj!;O%(PE*V4+OAlq)gulT8_) zC6P(b>S}~U<&N8~?g-e_L@_I3RketbtS_&VzT5C%8v!6}kOf?(k>U>#UYqwZ5mlxM zs>n@x*&u}O5G<)Pnq>*bgZ}mi5*suTqa*aa8hn)mL^ar@)l4$SG$o?kHMDJh(nmAd z!p2iEGB%lyj-&^mssV74#2fVh(IBOMR!noO+}qaztp$0h;gw|x=mH|ag$WW`$ft?< zs@B*l^FKv!uKw}UbX{Trkio(G?HhX;FBTP;uBDkB*tFXxALeNih1(=c=66}lssJzA zWGsRbD#X+=s43Bt+5ce1K#&y?0U{mF*#vEe7&$qi(hn$iPp1alc5L(7=oQ76t_=8X z+wK3RxS^T(t}v-qznW}}XF^C!3PufKI4d0s*>{)c^yIp?sB9f$=EzWO#dO%kMu@=rSUWY2H4JvA&)D4^2; zpb|L1qf4NVNm9iN^9T=*2Ry&Pbx_LT2vQ$ZqAcn6+Z;+j7$L9js~0c&I}xQ{Qb)tL z9qH7;e8)fq1K=3^*qEZJJS$+rJBhMVzOD};tZXS8%?G;DL@N!ti?DM0)wA8^uKaF> z`ptCO8{<%pOESWLxg2Hvp@g?I0Or&Z0*`=K&2mJ0$|ETSR9m1Wc=3JXaw{~3t6Q_6 zrAgH&?ARF6yo+T=q8H76xKkmy)0c7Z-gsZR1L6J%T3K)guwntJGm>Zp-v(1)QOzZW ztHzr`q3t{Rm;r-pyy~Kce9en%&O1QCX8PDU9c^AGkj4=K1)64m?4B3p_`}OnK-#qs z$IBR*#zGOS`R^tebkJ__XM!l|ha!xqo?CS{XrE~(`7WSj{HG{%Rn-P+M3RCF(wp#x zELREO-BqVh9hAfyw=`BP&u>_11$w1N92tT?9IG|Ur_IB{?PX+;=VhDk z#0X||z*Dzj2T-vd_4Sco$jd8A}(#lvIL2bWpl$Eb2X2|NhqA4yS#28yR@A!bdsTwuS z0{>N#K$k@~)7{y=)5HRwNH{o|7WnEbcktew0eKv5J} zU0%ko{mPf{E5G#fxccbXBZMD03;!W zxp;!ME@4Cf1U|=)XLL|LfZH{&2=X)(5@&X4>>?305{DVSpDNYu1ffPN#I7|c?Wo7B z%9~F-6XU{#K8BEeXQQ>Yi-kP?^C492I(j*WSGB8cI19jq=bBQO%Rrn;jd%zCzj=$b zMtu!Z5Sj~&BbB?u%`x1QFBmXaoMq69<5sqKf1 z?2sP%w-pb^GY@sT1)375{^9;JFB&>7@k3fE^6>F-^R_^<@_tsm4O&3My!W@+vc!E? zSdZ+y&$9_d{xj z;R05l>Nzc@IR6<@RDv|^p~E!F&m_g>m!+hk>#fgok5bx@pnsx8LK9WznrnrkIz0yx z)JHJe#C=uumdZLQK}Cm-5>;$xK}4gO?)aOnTphRC60;bQMDd#^g(DS<7p0W~?57J} zUQ5iKyO!2)p_i-}S_~eJL;d7sU8K3>+M=?G+!dpN5AqIzscv59} zJnP|%N>C;V_Em{RRb7KrXpKZA$P}=y5=?c86Rj~pweu%QQ#^I`Ds+-zHk$(Z6wAv? z_|g}@fdA@0{YUuaFMa{(!Ulf#E4T4~{Hq(dzdvCe)&XxlAs~Tm^&IoiHMFvblG1Eo zG9ecqhsl+sjKBf3)M>2U%6i{b)GMP&7F{SnRZN7@yyEWQdo`)-26C+Gg$uJ=iCb3V zA3{u=k&}IkAE(CBocbSF);dob=XHQ&e=7y0QlBTCU~yTG)FH4Wd6lYK$eyccLWxld3)eGO71 zmhcCseAE*n=KZFBS$DWP27_SfC17vE;WIwAHvjNX8grPz1RHKPC*B6{jSoljI;K-h z0^AIsFXY`$L}SGDA~QmZ4zL27X9vf+zV@XMc^5z?BGPq2l;S|Zh;qX#H11OHfHZSh zHoqDw>mx~f0xp!pP4dI2S#L=ewlY z+yCN^F@Ex*at$1n1qJ{LXpANk{Mv8)IyN7F z0yp2efzN&Xqxj`7egRKky^7&D$6vm-i+}#LJGgm&jD>#U5G5p#_i6Efl*_H_qs`L= z^4SEwfdP@r>cPpa_Qcm~4s@z4l1{iz6H?; zCmonY&_#6xSYTT~Xiw^Oq7@(hGP?ta@r#UOhtz?WF)6JMLQIgRiy=Kj1KJ)>m~yNQ z`}_#qjQfZ-zro6BT2{JpN!vG7$u^G{af-HFjEK~SDN=%3L1$xlsC`9wOzGreve4YOR0@PG#IAO-56^P25U-dpv))k;2#M`0X)BowlOi5*=#|cI+=r*PItnG z@KV?J0B60Rt|f6@C5}(sId6c=dcZAdfUqlD%uax!aDGf%Y#ZuI3~Fg=PFo-b5RtaK z8ak!Y>YmY#ZQ9h}tW>O$hiYBWqmhCxaulL_$K6{bs3^#u`b|Lz4MB2U=HIsSI~zBth4g5BHmQxy+|1 zi@e(aSkM!WTNAb%CqfOcgi^pPF98ia`@}jv|H;Sk{%6kO>_#8?@DOjk_Bww0%~$a4 zpS+28Zr{e8`wy@?9AGvpkSbt3N%20NAy0sv1UOvk0=1vtg*l@yP*B~eCcW_1WwHDOEnMTpD^-k^sr zM_!x>Z6Z&n9bj~;CdMBc^#FLm(e$)FLvR3M*al~dTW|c8ge^caq#O@bDqM)4X7^Y7 z5HKxK3^eU7(?@GFEC;S)*HUCX7xxTl?i|KW8crG@l`bp$`CPlM5W}kxm)lr*aPmd=1_V(ZVUhqv z^cbd$=v*7I4U#69p3?2P!>=0J6>XuC%Qk(^76iLuoKrKM3aSSnq=qLu205-T9-k;I ziMp&EuTP2*h6xdu2{FK|03<32-_7A@;sI3rH*H3dcT^m;E>M!Ktn&uDeo;p+CF4H;@q4yrRV$TyjaD&9HQWfxNT>v`s>{080 zbFLu9!L+8Gh;w6|B!!Z`8<+5r@*?WcB*PXj>q1$4qJdso*}1oF9^t(^$GEVyglC^v z#|uww;L4L9!skEoNqi|QFgQHG-u^@E9UNdd9HN*`(N7X=Y6aEHpjMW#cxD3|8yh%# zZX1(4#m>VCUU_4LpIpC>pWYbY!Ttn!u90O5NR#?V1gCNS3c17-9sX3x@}ItR_PAOd z)j|**(5{mloI+q&ZQhh*aq0Llx~-YoS#5l$U)IC6k)(nR5OXE}1ELhQjF~;Q^c)ed zshFRkdd;cjY=|ahsGqa;K{yj8o+1TK&*r**iy`ldi9iNR)xeF;(U{nXNi>RbdGe8% zij7xeYpbEA`Y^bK;?&^YnL?)%wSI7{h}`&fB=5(XlL|;m+>*o*no`JUV{@^N6xM>E zOQ97DAw`(>3W#Xunzc!UEfkN=&qy9M_7!>XUVs>2cumw zC>6CP0^+?OrjB}T?hq)?d5jfJ&S7|6scE9X?N>$Dxol#q;q?)f4k!y&>L|RxyTzOd z4Xm3G3XeR~A~7AW6``XuJ{^OEU`C%gE?%5LZPI1Q_jR!^PP~NDCf115rL;S(8xn(E zt)b}wSe^`owo2=2i=vSw@eEA+{e$mNngSB{%n0FcZ3z-x2u_J=QV;8d>v2p&s$uVoV14O#o9xqt%%r9IZM02U1X_Fhp zIxRHR^nwI5)F#u?=9kvh0cA;&uM;Ghf#a~9< z0WHuFuo=FlX?1YV-JKEc?vC-T*B@YYv4;y=i+F5%1>2hoIJ@Up+@X!+3RnXX zCfWREbqj4mk4^834L-Awu#9!Kv(IQbn?y*Gv>G%t1bfnf-VxNI6=(=<%C~mGiziPL zt(f?a0<@ya%CXon0#AAGTY@duYxo0gXU75ml*mOwL#0O~Ta6Yt~ysPH2RuCN#wN_+2%lJ&nwyi4bNRyh+GB!T51$1lgx_guuQ+|Z1ofBdZ zXq|pTv=r2qJy9$;R$d*B4G(tW@a4cusvkm<0*fkuQb1V%Nd^-*2dgkGeCx7B*|RMI zTp2{dRw7&QX>nN5z+1|*la&%?jPLcytFxKL!+eJQqX~Za&H)svL2{NR_5dAa2a*~^ zS)KA+6hM+KAkEz7J}6a9$Wa7s4Aa#!lOB0++UnL5*Y(6Uw>`Z5>frw-n3C)ZcA-U% z<~AQO7fbX=Yh9h9FD?)e-6A1dllKnuX>8oVVZ=Vo@ZwiWFx`3Qxr5+N`&IO%_I`9s zk-=|AFmjY@0@OLs=-z;B#V$nr%p%lwTS4;zz9~{(2>-l-L7!qeMhQ^acPYMbkGhU! zI|>zy>a>(?^C75XE>hg6j45F3P{u2FPSjVjF{{@YWa2lv+E!XQhY||~c%BTB?mst$ z1qjxt$r$s^YSISgN(!}Sl){oNkv@ghq-X399AlgU1u=XxsF_s@8nh??rG_?xcW?h0 zQ9MRMDb8T7&a=;+YB61+Pp$r~DHaScs`2o0Ogq&oUey=>(gA;PQP=V&O&Bu7(`i*- zHDe8w_E>I=Y4|-GHD(S|Gh?c2*@_-sBHg)QXhaD>+vQ>;BxVAF{8l!IiPefl2ran5 z?6A-X;_%L?HptZqaKzcz=Cn6~Q->5VL12xNg<%Nnw)}@$BD6w8mobPqJ%3fk(NkAK zXy5q*2;;2Cy%$}~k(c6(q4XfViSook(y%9>`-Y|?Zfy>ekg>@pX$Wq>vWz)FkEiBU zeLV*ak~N5K*8Zqr2Zxgoclx}1&=e0=d|YJyRQG0xn~}6%()!N2@2c*!uKkBrY}Wv1 zbQk>Lxz z3a5Z0@{AfEP<=ylm=@U`=jl6vL%Sb(ZFap36?`MZ09aJP<*6V?$kDhK2SRY*d6bFtuO_Y)Wj}!u~|{r z%F2(8|3EB_XnHw39XYEVr874P{b})SIa$m zqIxCJ>vXoQy|k}JZr{7yIK}wV{2893NL(cmjIS?$H-PUzGp8qrmZEMnSaJ4r!q& z1#&UG<%#wnSxZ#+PSNO+emA5Ta7ik-C|Njl4XtaO+j`iZ?CL^8)h@cz%Fk#mPLqa2 z0t1g_{Clj<%Fb}HeATuMim8Lojkp#9O$OH@ru=tNWp%-1z#xMs+eTJFayG#~G=rh6 zm^@qA?V948uBkT{G*h!A-*3kBp*8V_V`S7F!Ao`~sN{I5J$nHATmIySA{%0&2%VKD z5>1-cOnL7xE^qaS*CW2u^NW@I8(swi>9%O4L*l&mcI+#7SATm+DHq@iCYon=!J%rq z=B*aGMPd+QJ?7J<+7B7K=APX@ki4?gC`&R(CT67eKrNxVDQOySD8?FalWu+?Itgh^ zin#HOw;xMlT^IN_1qe%ie9yZ`0Z#bUHy3wjDN{BT` zaUs@maOu>#s`V)n07g5@{Uah}X4v#yn6%#hzK%LZQ~8Pvc_+GXORYZ(jTw z@*AN^&Vs^f4Z1?3WCp&ph$D#hSV9GYAKnl)6$?apt4>J7aZ^p>>Q4xdgfnqm#MBTd zN1YvOl-RFuifM5RB|q@9kmsetE8kL$m&=su{XoL&=ovvg3h4Fb_^uQQ%rDR?7} zM@&s2i=$uZ>Bp%Wk*dag7b|PkI&RY1fqL-$ZPK0u7`tcehKEJh{;RNRJL0w2h!&3m z3UYalE(R&qK|I8 zhvWn}L3j)R*l(RgL|rR1es;La>nw5hpGGj+>xd=VsC$uK)4IRKS(! zouxuU;e0HKGnCJJGkL3ZNg_wji`61oMMt6a>Y`io@O3@~p3*r%N zmaio|ap28{in<6MIW|Y$GFCRA56TE}iX9i}I>$`O);+9!PE5*`_arr^5X>|L0|CFk zG91`AQJT0&qDV9)CH{=cmpNUmwUyKQdjW_XUbvi4i5n!_+6u`)Nr5E&;XJVtM#VwP zG0lr*Gl6w2dZvVTR>}YXAOJ~3K~z9cEoHwqvK0fl*K&+bZM^SYn^P01>IY-UV(ho^ zyriRD8WfZ3q&1|BQ`O}Y7RrmD8Gk)q`Lt0% zL7AZen23BijCCVFCm%tU~!P1YEtycF9QviQhwpi)M&Fgx28_NS^H zu^(Q8P3KouL0a(Q7c!I`$TH+}G>x3w# zZ35GVqW0~)7mx}~gh7q+3kFiH>wrSBLOu)yB176gzq5K7o-%4Tn0Nyh9TL+%$VB28 zNi&Ar@EgR$L)V!;=~8>V_r9AV4Oc&vpD)lf8YIMIfai)_Fp zkj0mE&eB3N0?J);E1qVnstHMB9h8D04!lW`NQdfYvqhxI<%aof$~v!EGFsW`M#Rw8 zkl5e;ZLm$9fTQFYjW~F+&*Z|2l}Ka>J7PUdMak&a^%To*{NVKIZ;7S8ZF^fjxAFgK{#}F4+R#`s8lJKq$@U#KI5VK~ze&K8k{jylwU+ryo zWn7c>h4V>5DILj|nrL1zkKx6D6C22JA{G@b!s3!N-imfeH#}7t?kZB(zHFo8(W{R{ z5Eu&>m`Fpg8y({$KbL`_&aY#VLYAho3OMB)TsFSfcEA z_{ADE)`~G$bY>KWe_)bk-_NSr*o1deYj2 zyld=4fLn-CR2ZBeWuF^094Ny39K+4(u_gz#z#9)c8DU0GIa%>J#POmXR)kk38X`P2 z#c3JZUnW=9ycpj~42yVWm4uU2fZ8Y$-I_-y;?=vDTkFDxdCGZp$f|0a%e8nLl5qb; z9ha3iRUgu0=o%Spd&pDfNz%ze2r63&Fc;LT+CC_4v`%W9wnYLg0Cp9|;^kX3D}Ej< z6O?Ikz+7l_y{&o130bq&MbYIX`H2>@;=t%rZmo&CiRI@k%v*4_qw!ZqnLHkg@8w?4KYjM`QARl?0M^JGM5**=_S^_qD1P zY|Ku_?xx4zI3v{Ik$`lGkpB>e<>zyr$6^kFuV{>B;*HuSo4ldl+bY*T9F5|o*#w66 zsMLaw*nZP{0b7Y@1dQp;BOQX(gbq_ZuTHdHdz{k=pizVv4gr2mNGbkO!xskEf>D7g zSN@Q8$#ZO0R*k^zaDuS+YVc?RpN2;!gf?hZ%rw(*tg} zn4UX)IYRE0ZW{bc2Fdd|%FpwvQbR!lCOI&%I|-z3Vzq08N}Dr1tQ_sGU?r>r(e7Q7 zYRu)=PmvlYyXzE$1{!vOgR;WDH1)Jb^{re(P-P#xId^w1ZwyhY_pVf^VFD6HUILvX zwdurx_G(#1$|^{-k8fvtge1AGM*A-$U3Odjr8ErnyeeS2)g>PBOGNBH(Z6{hMjfO0 zIui77+%zhMQQ>5oUzhiVgVeR|kjXC{){1)>XBTx@3Jh;|8Xl&kp`cC0o?A$7zpFNe zu9a0WAI=mB8X&sYyxmu7#U$QQYQwc(hT>&KQrYu}WEs$`n&gXUVm`$B1r?w`3mVz6 zny8)C^S+Os%f1NxWhnBZlASeO2z&!g%&s;k>!7`MyRx5`bInBlI-# zB{WoluVRq!Ff)%jes(8Zq=L;+5sh@ZH7WF)+SfUZg*6R|$A9olpi=4-E5J1^?J8>| zppe{cXZWW;if{gF3L82#W(=BVt(z^1Y}f00WXe(c7`quCp@If}<--@SvDB*%;;7nC z3fLRY@TWiC!)RIr;Re@@W`QKXVt&u)hxSz^kco&Mc~mv>MB)p@%SZqu%V1*(<(KJV zQER|ezcqQ5I?)u(5`u}%@}t6NJ;7*;ALZ$Qr>)MngLjtnm-gQN)#mQzum^IJ?Rw;# zzT!Dz;)5E1i9$nV5tAUZn^DriFQ!9{P0@gd!XQzVQ6xILrS02KGz>v}j>%*oxYEOF znh4&IBpH#w#cYL#nbvLq+yx&=JbW`jiI2m@V2)7*J)?&XY@g3iu+L)B^DA;x=7&qhljCMn7 zCpIm8RM^p09IFaG_agzC-kcBDO7v+&Z9s%J=+rfT@y0rlu4YuY9T(LN=D~ z&_D-a^r^4Cd`*xMuYwImeNw7}hM#+33;6%X3wL4`Ibvlj%d zXwu@(#=M}d*3>{b+ilSeH6~C0Jy^7|5@JFbpXz?)dQc%YuE96{I1}z1rlK!dedoe> zFC^r3D2r5X9pe5o>p#WVcb)vuqmG`MCFZJw{JBCqT>|F&-}zCAS5vA!o56*ML9p0h z^MehpjK;APP}F89=C^1-$zd|QjGUU9n)fA!2`|G9OelkrxsJA_YW^9yZ3$kwviFo? zP_?6^TOVY8#Y0GCiR^+=kCl+Ot_ZT!q!dwkYVfJ_wYb$mv{Dg3k+x207pQ-YOCTVvw#xGu3-NA5@v^aWmzvHu5dh+OhJ3wVzKyp@ez>ew zP-0upT|es5bn!!6d5(LsDC{|3nb(y4ftZtLio<+cpd<3j6`3n~GfW)^+>8ooQ29uZ zpT2lB7?&XErqQd^di75V4-_<9;9N4z~Ao8Sv32*07qg3DWN^e_b<&?g`HlPU%k~v>^ z)uC}7C3y%qI8JvpARYW;v1@G1`8?i!;NfEwmJNWhL5h{-ZctPg$sB4e`hgfWViLMA z=MLj`fb6ZoDQ*^sb{RKe$Um3b7+*0@9g0J!?b!K?X`_I^ro>a$#TSOIpuaF2BlrEp3V778Pv{mGw4+o40RI|Z1hD_Q2qh2AbzoyV!5b7GV?-X+nUG3Awo9TCWB}&;m zD}1#v)5bGvZ72LR0dJeJPDwedp-sRjZyQs9XJA}!SdR@jMq@8fC(TOdbl7fi61i6V zj?l_n4OJ~Il%BSo*p)pTXF*F1kAi7K1%Ke|8yb3ng6j#9DQ#w6m7f=4z~*rX)TWOg zDPaV~=0PFFlfHi>2VsF3TthCKaxsmh=i2z3rH+Co74@XvHX@>{PCexFP)Rg`3*TjY2u7nsA4e(PpuXEt6e!~BL)5kzbRblk#_w5nv-^U zM**hZF^I_cR{s-N0TUhluZcZB*7bedI&6&nY?Lm!^I18i9HXl`UXX zFQNOABr_{^C7rj8rDRwBB)96dF+j%0V@BUPrIdQF>!qHTX45*7W#&kz|6Z$0%V$+$ zk7-x^Dq=2@lNWkk+PmE0Kulet_`%h0LjJpK6)Uf4oLV@!`6QtU#5QMVPCg)*X6w1( z3x$@vX<&OPhLhIx_=j6Qt6}1jl=?#={$Cm@8eBWLoqP{Xnr=&m*<&pE-IB&oGTv=t zA;wX#mfc^fZ(O56FuYz@5?%9$F736*;Dqy)y>KN0e43C`C4rSiQ#3s!TdV4FIT2tl zh3$G<0oI_WP7_RdbVm`YO=u2lky z`jSK@-U^Pgk;DqV!+@|6Odw6P&u-!~*K-PS-Ks1j>B2Wn4vFTZZueE$4SxM^m3j%} zrjwRv{Y|vuy&&qOGqJi@{m5Qqus#x7LG?VqQ{K5gXEf64`YebBl&-6G>ECs=nHdzU zYl>G7FW1g;)GNii_PsZIM$B?=rzOg`9QC=!eP>2 z8TMJPGE8nS&l>;sk&Iqp1DV@0WhTHPhSmMO@Q{!xy5(tG(n8m#^O74k{d=!6uzNN& z)-r70ICWnEwz<$HL$&v*UDAW_vg?Z?hHH2BW8X*_oycUBFk*P&!Uks7o3c>$Fv>v8 zH3evtw}pl+K;k@1`xZ|_$dx2b;1+Tex9%H8wdlzaMF;_p*v{~eCswiA=orC;WZ`a2 z5;#aHk<{9Wt}vWMW4JpXB@mY^OGD5BDplw>U`Xf2g^LE5z_bfZ#T&1y3V~-KWWS=& z1!xM<U0ZAr%ry>Oh6v355zOv5hpu>*C5nl0kemkBxlDcID5hkObxHn~V!g}w?=f+3E(R5|`N~NUy^^f)zrh&Oqf4f;hymXA&@nhxSEngu?2(k3804{`bn~N2kSwNTPO|KFlE$BjnXB!wB!r6gVqBT~1Jrb5d>l+8ZBoIq0Np;`u6)uu%h7_gZZOoKTgCBl zOk69G>2{pdj)G6RjPtaSW#f`~PKB5a)Z9^EeM=Ov3uoY#nbB1!-r=grW&m9lZ|w?Q z&&<)GT@hBIPW#RK&$g+Oskb0lI({(6z_#q@UTg_LOaerV;jV)txcks3A`$5+K2KX~ zg;;L}m|bs5p_kU5T_eHSk#me0sSE?yKKNs5qPRFmK(I{&hJsJ=(d#EMJy=X+?}QOv zy;Q?;y)Cyk+kM|%9|&TI?aRujv0Kx<>xlch#GVGW8#P;kxY#072^i&LfRZ;%Ln4Wq zhCokv>rR6MJGV`n0zah(7*V>!Dkqep!ICZuEI}}xC%dU$1(&eocI@nQIf^e0Oe_Ey ziDw@GeH)^aKlHwqO|}(s#)#2rt`*S@Z@w+w6&}QtykbL>(}*!TSVx?xZ*mW#g*O9? z$aT!claRx}w9a^A_}176NhZ?_m>#=Q)t;WYx2vNv(zcbes8x-BU6=M~L#HN#u07Ey zS)*;hn36diWV+cV_$A9^?1r!^>zZG6ajc_d85tO|T9BIL__J@=+-9=XF|v8n##A<` zi=DF#i38J{w~aKH^v#Bz=mf12lam26Q z@aQdvtZsX=Qf5&-7t7!oE%hD+T5GMe$Kv011+wBa40<#o7y#cRDCQ`lD3aS|Lk5JA zy?@)Ky2#~^O__Ak661~fZs9?Q#<<+6(DM-x%7%_O1aK|@8^D^kC zMjhyiKSoEnv2~^xU8Y$?h7-&*8aQO5s3$XcVVZ1pWoIzYZprc*ZF(7F!Z8sv$`F3i zq%h9(rZk8NT=bV(M0~ObRAY{rT$L@F?Kb^lNm3() zFVq%aS@9Fc1%aJLYt|XT@hseYlALL`S8zb+KZT9 z(n@SA8SS@PkxazES1;+lR!qyKIw2F2?lYY3lxbKg0pJ+6y{OhCnl^B|hx7ubd1}|k zASXnO6%@Ng?mpKgkG#{?LU(&--4f_)3Lp!JTa((QdV!G6CCR?xtCwc(v^ov=MiE|P zHs5C?LtxnbM6AEe!qGgHtlF;nQkuyL1Z`#KkO!Ih?GpMgVt`QkHRfibeRCsc!P11Q zt*hP0^qz#6b*SMa9R6fGZ{sCkYPbJZ{YJn-#&q z9N7w8G|4J!L$pEJqA$HYy(ODernt0(rO$XOmSnOus;v|v=FTo4TEtQk zLNPjFc1el7iLRYTIyoBf7)O1psy;r6st|l<0ZXjvTP*-X1Ok$5TrXNg!(7)Jiv5y6 zEXm@A*R9_yNW4&*Tt`=5%t;@E`Srd?2q7nCT6bx@&cC=!6#hFI0EQ&$6T&@A^ph^%yRo910+#aVVjJiq#KuW4A#l@e9Fl;a zmYAjh<5n@flr6Nipoh@Mm{#79HHt6HKsk0xlzcFdmqJA6FaAAk(~&K=b)HXjnyt?> zw+?FGY*^cnO9qu}J3_+Jje)ctbi5}n-c-Nr5^1{AJUZYS(=MDG??e+^ zr%8tzbBw+KlGsk_GBA4V&o23swupnyIzQ?|$pIr1BZvJVziZ<>QwwF-TH-aap3DL% z(1}nzuJ20!n{bKtTPtVtI{^32A&YWS95AD(7~t+xnJEL`#>M_*WXtZoq@K|5%`BEj9$A`S{dTErn`sT! zk+3c1(;6n(w9BeRB8ZbU!Qc{J2F?rs6)T=Z1)_4*>qN!9#nP4Ed`+D6vjZ6#gDEZ9 z9jfzChEj9|z)C2ils4Z^Hki>d z-3Bso$RMT7oibhoH(<)aK6!`t>6WiC{&{)`Jp)_8Zo-##0Uh zQ0D*v$%G$sR|a1juP!$^L|>Qes)hR4(V6WsQ&wC7@jFYJ^hO3dXGSgJ2$3PPwXv@` zJ>oxipe$8K;)Vc{%#$SxO(SP}DO0ugQ0{Uo{zcf+03ux&7sM`lP-9gw-b_hP%*@vK zPq2)1P3(GYIOaPMs+Ytzh`LQ7Q!{i){{;HqH4L_ydfx)A$wYm2&qc0oaLhzx?=moi zk*XtzkYSAQAXz~q%}os=iJcdr0GX;s!#9i=BDuFR34;*8Bl>0|lTnnRz}Y}4J{JGx zr5Iy~qDbN#GJd|5zKclh}%I!&T#CTa2VZM0DYgmEw#9V?+Ay|i%ux(?I_ zp)e@pJ`2Kll|bM{%&S*q9kT8&K}H;SIOT)|MD}M2bTNblE;`>b^*{A80)jB&*gEQ> zG`=!~@&0r=P6Y7f7FwlvR86)S5pQi11||3cq~M(}WQf8@bDTI7k61>B0BH?QIlgpU z&#KEmkgswo#`~>2Z2XL&SYW?2*nn5gJZsSeqRl_E*Q4lzrL%653 zo$Lu4#QB2QFMF!dMqP;JZi|;fCpr;z)uqu)$oEK$9Vwp(3V9#C2lyV1cfB!$VT2%L zXtqOyu>nQFKqCf9iN!iuio%5~|E}yXp$%e=m+FeiFGiaTxhxGmN8>eR<3iIytrzJa zN$S|8n4Ww4Nn)Qks&+ZRlKQRpvP>Fi<}HHhBia0J$#i=_C3q+e$uyqop1WH~q3euv znWl#T=!AKhu+s7A&R+)0XQ&c0w@op<<70lv8cV53R}gBf1A;HaIda`*u<`36Bta6k zQ?CfR`pYHR)Gs%dJv+b#i5=-D@ zp)E{{Mi616(NP#_GKCU?kTHZI!*JQho{=(kkCZT6&LKw$+9AVwql1fUO`Kk;W2M#x zV#moODlzKhuk_ATOj9j*=qvhQj2q$uMISyTNI3T~s$+e5Y&47TJtApCKu~K3*lL9u zbb*JPsO^BEl%qI0QN@9Y3Wh2<_>`j24l%dh#EJPWoL^~zF&5*4?t>-n`ye*9CkBd` z87^VhXaz%+Jn}w8JBYBl)yAdO22Rh{uvBXSj3MVyxuY~w7r6{3Yh26L6UfPep=tqp z$12zygWL!J03ZNKL_t(JQpRw#fV@x84kD~ZrFv>jIN|MVax2TQ0FJ%9mQ%@7M4Eu5aK)3%x~e+N)xRhLf#{Wk!!0LN`R665>Mj&=U5RV{dpAg6aYc35nz6;h4YIITwH3P)d`W4 z{L375^pLjg?COPL!%>$pJ?UfD)Q@e_sk*p|5JoD$E>H2QOZXBEhHWUgEG`$~`ml9RW%84Fy!g#&BTaut5?@lE})Lm@QO!Twjd&LK~FzD>XU?OXjvq ziflo^9olL+hmnB-c1~6>IabE_P!au=9Et@Gg}euk^0*QS_-?%@7+*4BRX(rG%i-3GwdhCh@WBcc}Ifpud!yd!U4% z;8Xn0{rjYY3C4vs1MrO(X7Sh0&8jU3Y4ncidF}3geDbDg>>sNj?-A*=Fc1V`gw1Av zpPpXDUq3sGxwRJZzU2hRbQSz5jQ>`^aB#AU_Z;7W+YXMRl=o1`QBZ9qGK?77L4@U6 z3(uTh!MC2jh%<{dl=FUf`!>ruGUx@gg9wvDCA{aF9k}!G7>25O!j|7Cnjl{pCFVmrq`e(SbsuU9C=t zfBU7EaB_B2(I)PUFl5+0TEg#r;!5kbS{ITl6?|KZyw@aS_FQOtRY*9b!=U^p~0fcLy( z8rK~dis?<^d7OV)q{i=sr3RjSZ5iKxVG-+%HcB}UA|Ssaxhb1FVT5Ad$Ng82;qK#O zm>Mpkkf$=h9|M#8+h~V4aiNCCo}0(BCs#oTHFn+flq^N$Iv~YW!po#kLcOghdF@jOFQ`=|0?eDTkhW1M zc%1NCrU>I>HjKDDYj+}CT5RH_lk0fy)n%NUt)m@;DCWInoQ_1ByD4YQebS8Abh2mn zXaanXS(8{LpMm70g^5=$`YV}7!jG-*R40xI8E=~6T_n#o@KiP1R~==olBr%aVaU1+ zU&waVdg)L5o7F2BxMgJFxzYj>Wuelmnc^DHzeviEMQL)+l~Zw#B})>OK{#jFz6PEQx^$?Cfa=I)>M`Xxl09kd`eIt zKwrVbBR9?9j)Nokv!~AEiIXeH`!qg#qnS~$5L7{wOiFna7_Q{_N)2()OyrG?+rFaj zloh^56+d>_vvKc{5q#{%Y4jDmL>mFX^C^mbd3@;FNnEpg0RP)JPvG2AgKsgFq|*$w z80Rozc>gt1_~kqIVWe7saQG7NJ%YSP(O2}bcdUx{9^Zlg@Pm_h^u;+zFO84WlOb=F zg-Zc+q6oJg8pE&NcM#LVCAq?$z$HhJ_krqo1)sh506uWtH2&z(6L{*x5?^()c@mrt z1}Z+P1z$R14160}d##E093RJn*H2-v?8o;v3-ky)0^|xFss$gvblVKB-#dUm{N7tQ zyV#HpY$8+;Q}o?ETEc&S&mLUAZx8@?cJ1VO1UU~VH6b z_`kmTDlRP7rBT*X(v4xl$KO52r|{b!Jc3feL&Ovt7JUH38Z+FY_I-kU zj^fzvejMA~kNd72$DjQD8N766136FOttSGY6EN(VsNl2j-HR*t^vC%$t1Qmxd3;Qk z@*ZwII)a-H599kUEaES}e-3N4j>BowIKuiV{Eal#!n8ufDDRfVx_=_SWhzPy4=rmV zu$VA;B{?)Du1aWzF$0*`WfXH@;^45$s8E$RDkKA-9YmMy}=xP*T0?M7R6c z#zkOceiKos(}u>*nbqllw1=3#g4iy& z_4ouHxP1m!?jJ%v=YbKR9WgWlhD}Bg1V9^_?$_)h0w4#1d_0L>Di9p)FW~6@eth)a z8N7089gqHG7O$MzK%*J(-7C^oLwW}!$QSdBKK}Hvz@Q%?v+zyyr;VcCzs!Wov^-3wh%3met)vwt4V~e@z^vT?R_7%F z#l@mYEE2Tx_Py`ZzwfHY#UHL5?uNtUur6AafUm4f^c8Ubkx}G4v6`3?phuL`@~FH7 zXIC0{^7NWC_!xk^Px0XKNqqjk{TS~n$Uz{CcYY2{)hCS8hyjD89PT(c1VVt53-x%* zt%ZYJ88-22hY_xs8NhYB24c8oT}Je5;T+rTib?p&r5awoxGC%U;5C!zFZyb(A0Z^6a(cPPR?zj)rq=`l7y9^eo#vAk(+nn*YCdq!_}Np2M%0B zeqs3am2_iP=vwngwiZIe&z`m&}UOcmk zt!CKsY@=wl$ba88lla{G52KXl4k{%iwY>tjf=_XDXFqDq5U1zshH@Zr|ILh)@VWQz z$E}Bl`N}(E>AXQm?2L0t9+;})$V?y3E;QmT$$>?GTjm?fd(u`f&SI6B=(TgKVoA;FhCf z*fCN@#27qErQD)~;HlRZaq7|ra-Ijqfa%c^e&eAd_`uCG$oW(flv*@Va!5H#L)9E^ zzj6#AV>mmvg}^wcExQ%B92vpqKXwSa#!JR~7vG9H#NYipspG_4A_c*S_HHs z!1pPp#!9&T+A&;pZ~zfwSljHN)sCQMA9`w#Mi`wA;)U)iSTte`EDC$9Wc$fN%lt;n zXJa_J{HX*Wt?wLp^|}dByl&b8Hjb97MXZeJ?x6KoGm>OBtrix>a#X`z^8)MG{R}s6GmFoS$~l<&!<6nNnH6h3jw?s)Ynqrsw? zEcvNa@bNF+wGY2?*Z%lSp{{^3CKeFm%Xq+}hi}=5hi=@7VlHhMBfe*YdEn5ZI*V!n_olH38i7vJd~}!^d!Z&yZRNEsIe*#xb_2WI)PiN52kz$z=MGRN$ z=)*^D*(J|~Qk$`zOn$TuCUl^mgiwnUG1Dr3}T@9sIG~1K2rMmblyUM5xM$G3?*bhu`|} zQQUlF6fB--PzoVA(WpK1cEJ?bCSwP27RklSc{eK0bzDeg9qzRD7j&iFWqT z;$M5hk3|f7CoA~u`}bo1jtZ0}u=zs!WWRSk$1hw|m0)amF8GP$(t_$y3~wdB?ULHq zPOFRn$!#(^ONCHVW9(TL<|uH+F^)Gv$J^V zO5FvKSzi_ZcBjQKfsq$Msr+VeP<@yF63z>#d5*NzB5-u{liQ zz^S9Jb2@S+Ug@-Tw~%OA(`1@i+NI#KYz9pM*^DcDKOup&Cmk!zR(09MPM&krua6_5 zF+i^(U9-`$baby^6J7{`;#DwXXt)v5Q-;t=R$`SCpET#Jmnk3Hu_PK-ab-$y`+;G6 z;HnAaJV89QRZwgj)OCsQXNZnZtXAHAbPNldZG7YB^9Y%NxHhVEV5(gtRuoyQ+OF@E zh;533Hts&LooUe>w$lyk9gTx&Tshs3t9SO{$0t{fCgnVW2d|&T9f!x2LlNT=iAa-- zq23A*MhvAmK!>PDwkh5^df!!(I5oeC$6lUGIz1u@8hvG7 zj!C^N4<5(Rh|f6|^PU^*2WFSHu+O+&&J^{Fzw z8jD#;;p2iqq`cM*PNsiPg&O0>kQ~FQ4z3%PiY~8T(c}tTV#CtzdUV-IF2m2(?^Y$^ zvlFhKPm`zHN?p6sMLS~PW`NU4ui-?ra_M!b@lU{G1Wb*T@z6cHam(=uRH`{_F@jp4 zR(L(1A&Ll2ymbzbKlTJpy!0B@SJr?|fRHids(rZbj$81+`|ifh@iB+p#iY&w7$WeM z;dV$+15oum96LCGU6UnTe{>jM{fG0oxKQUY04yF$(xXdn5Dk^>cHHIKkJhJu`lReG zl^7Bcc2f{YHD%-S(!5Ckat$J<<>$s)z_w*3u~!&vX(R=+6K*<=Y01iykY!1zi7I*^ zg{El}ts_RBUKuSV{o*Ra0AqlZq={Q0J5flREZhY@IuJAzq%E6}_^s=! z0)j|v3DnIkO%+?lzHpouHdAqY_zhBap(8VOB?v^OS5=uVGHdb#7MP(n+}ZN&LiXKE9MOR2!Q@l4i6lk!c!-f z&}e6Di?YTkV+>c$4B&y|Qz-bkVu)0#pk=CI<`1`_z~i5M?6<9GI-&fvd;ym7iXM5G3u8 z;oVn{VdrRx^JCoMg1!qIE&TAcCA@NG6)T%{l=40f?&!yRubaZmNZA;2qR$Uc_v0N0 zM)3E~UrNdbt$@xmi~)plM`d<(3!9A&M*E8xA1KOp+k7)UQpS;)e!OvEU7b1YlDPBi zVfT0yc|W;&97GJ?dUg&!d3_oA9L2$@D&Bp~I3|aR=!6lz@ysm#_Nhx~1)-V^1VbU` z;e$6$;^35u44{wqFz%Bm4iqD{GYb$(hH=G13BwHshw<*~rt!tc-$JDj&lfsqr$`&~ zmf7MSs3HWsu4dBZvF^YNXH`v7K$awg;LfYZas9y&cwzz&)|iRg-wq-~5sS~4Yhy-L z3dR@)%051E#|%!K-^B7}8|8wBcV9n&$>E|VThuOv^;!r2@WKLKe|rOKwGIk-4+o|y zc+ZWKm>e!hxIjE{MS+_RkK!kA)PM*czee-*G?gu}@^6aHJ_>~937$~7A zRx0@6-^}6ko2T&E-~1Kq-!Z}MASYs)JYft0Ay^F=Y7sD8$>W{Zj$+qT34i|0vv}py zI&2@9S+H~mN!ZldFIhOr!OZ%dkuowFcDy6IF{wf{JT7NkyBsaqy~N1ESN35QNH)Zt z^vTF+RoI1c!mcrp)*YS%cP9XtJDrpr;uaiM<@R?=ml;{LylGHf{*wCWZif?=jh0PT zxVza--K3bgu+)naq@kf9pk$x$VRX!NOfC2#pL3f-!b>yj*Yi42?@lZ$Qi>|)n#Ifr zVy0?hj(0JrUT3GOvE-5TP_8dS#0W|`if_F* zkMF*+2o~c$Sjyr5c<3;84iytPwZaJh(|>&(C+6$?Y9i%I$5*SEVoeAx-8o}1u$8Sg zzVP_l`042tbV9z}`OZTl_^tc)@vB~-3~7KHaeGF~=qvhYb$DGl-^1NU#<642#+3)Z z`r0#Z;|u?A3aucNk#oav13!Fy9zQ*`gx`A4A&gcF5>Jt?oEgMby9V*2*B6W^wFXmY z&jdVh&h1CWF*8zzM|6Wjcq9x9Yfb#k)93NilZ#ky1Q;mgaLb`leCUR0Ob(Plb*7B* z**#XqJy%ZPFaGfi$^~CaBoS3yZ?nGT`Gs@q_|lUXaALNGAY$++!NJKYK7R8KT)%e^ zh#f9b7XhE3dFSB~Jod^W*0wqbScE;JCER^%3@WQ~PTri|#2-I;7B9cO0m9m#EJDP9 zr%x~A@1DDe-}}fh+cX*G%D8?%j`4eCAo_H3IHz=X@F)04_ynRZRHZ#nqxOKP$%!*r<2#wVzzV z+!~LD{F66V@a*X|{PqX-R7=m+FWjh67VoJaFvLxx#AA}LZrG+iL{`NW=?EuwM4o7wlfD(d%at^m0n?R}H17OCO5tDr9=4<%c zQA5zJA;U8onXnQ0==LyFmhC}oKtU|u49_%V@j7eK<0184nuhh|GP+~B^Y_wg( zfr}y0Y&t{h&lI`ts)7*lMwj!Vzmzy|`7<`<(~-9Id4@c7P+7SVD!Yz3R( zI-~1CRGoq7sD$3$V{5J0A!>nVrWF6tiBya=!E)q9#sv%w-eRlU`k@p5O85Y36LWc zH}4&C*2NgZt8<(9_dhs`H|DmG_xb9`W;4Lq?z1j@<+J z+VgoVZ*`nRmTb;|P6V`q0OCAe-lN7DSp%<#q0x>|ZwIjhtOg8$zO^@NUc4j#03ZNK zL_t(TTQFd$*1`Y&os)Rs?R6A$9tijh<+px551$hJ#=ZNHSbQVEV9Cc|$;Z+r-#R;7 z$>YF8U(9&Avkg4{+8qAV<8Q^+QmM1UJW8yGr%$cm>p#1IPu;c$rM$1UYJx{GJ~rKt z$6uQ_Ego0mor1$18aL%o>7#;a$f@(O2>fVngRac>#yMt9=R6#CaWB0ZFj@&u?hyOc{EyKEb|o)8-49DeCtdkor%KARbxG(pK{wdXvG79xfef0t{7h_~&=+ z!q2jjud$7LPtR%O_NV5V;)1a3#;LJKEKco#SN)WuaFYMhwrMT*3eS zx36Kf9->g-6IEMFO?>f(Z{x)?Yxvdo?Zxi#GCWF9Z-sbkb_?HrdJfN>T15~>AYiz9 zZ$J7<+`*PgivgEbn)u7_pTq2G3)Psv82}#y1&^TBj_}1Fyp5T$5_XN1ln99FaOK`1 zl=2>0oiNpbOG}D^4pZG}w7|+s%tyme)eWj%urbT<66*hM?3sF0NIUA%g^T`E=RIbK zScY_wn`&Cx%6=Pq-O10wzF->1rx-|S#*G2Xg%3;pkzfr4f+XH0XczzA#K+BR1bhToGq~{u2K7%iqSs4?lo%F%Na;E;IW#Zj3N&1#J)%`@s6G0oX5TF}m264OS_>3%eQ(QP1@3Mxa)}O@wpg-#dyxj&dNn*%)l4!DA zKuK{xjIycU?WEiTF?ns0S4TQ|GB_(4m=OC*H@slw$;uZyFs`Z`NM(M{sDYQYdRg>; zmu7UsNoHb5A&cFw_On~ixg|+&luwq>3wJBc60|Z=v(5ykVPoi3WY^_=3MD=`e(#kdgL{?vd~im4MuI51Yh72_4DUG?p&3$-@B z`1B>5S#F?G@YKXG0dk&)rCJ+*`qX($4ivC!sA%;7!_+_l2gWOyJ-Lix&XZe~Io(uV zVPtu6AQ><_$dJ`0!nYYyLge{6Wj3i5VOIbH;iv@>!*^d8B>Er5MmkvVutv=$EPHoE|oM?EubAnC~4J* zulpzZQ1Cs|nQ+Ki0w4%N>=`X%dZ--Zq6hsUm|bn+kG^*Tv+GTi^ICs0z$YF~%+>J4 zADzXozxxVI3>J+ux{NXG8Y$!Oj($A%){1c+-0B*93QG8j<-YMUCgS^MSr`H= z)X?Eh_j1>IG6GsetKdN4_r5e z@qwbGKc^kv(q77YXu2HW6geM+4C`C%6fzUscl8*q+SQNqOAVY`tmDl57EaG^VQ#gF zR=^EHy^=zn;=qn7e9si&V$6Tp@M{1RLF>Md zR9r0~k_p~%XawJR=3=}HgQ)NNil^9>RKEveb;M8*^%YuTK}tNuZAnuwyWG8=?+G~Hfv z+nCdg=g*E+U1wfnpQnanPkLOBG-|i%a+A`>&QGdp!ypyT*|yTQtV50F#5DMc1(tGf}n+Vy9E|TAOt9Q1fvBH z6IF_Vavu3y4k2T>xY0nPwTYko!}oFM@NV34(=}j`0~K)ApkUBfi2)uos~&MY2P!%I z^AGODKsASNK7J8Fz^wR3j)BIKUtRssQ`c<6-b~AyVOk{$_rzlfUyf+}5%ae;#N_T8 z<2TPs3}(}TXCUc%?{rLEh;x}^+K_OttuCvy4BN5)jpfwsJ13^Zgu!aIRI{O{xLamE zP5#@HslRa2CpesqaMx!B)iQa*cKC?(*ZdWicj-Teh;kfc&~OrYm_x5R3`Z9}_Uuxo zE>*C%CBF3<1?jfWc2*E93(;iV%Km9?U13Ei(9}L(&tbVx}v?Q z?TQ6S($q0o)&+wBSgUvVbxDL6cgQkuh1cwaczd~#aDWLR@F6N-rd80pKy_XwiY^Ghm4444=!prdN*x7# zE3W3G5km0lg>{@>sPQwcFoRc7N^o$hil=F2O z{)LSe9)E2a`^PH@SUHbkd>{{>5>$#lW`+ySEw#gyJU({wv?hNv=FtXc&NJ7BtqGPln|Sfu8cKODahEb7!0J{9t6Od3Jg`WVz+4$lf=`gM6GV9Z{5ozq zJc>%eHzJw}I*j+{F)@(Gb^8XeQ4g?EYvavJH9Y$Bd7QkoB`1;yxRXB8mzVegik@p* z9sJ*%yQKoFor7)n0D&i*nEPmf|^co5ZU1=YSP ziuoMo7MJnD`4!BrE#N0l{0LWHbp^`Bl7vkiT>>aw!26rq8!bk#27*DK;sfuRL8BGo zyFZ@Q91~0FbmJE-F`JirOli9mY=_8QsrBq00vXBW9w6hLSc!Gm4bJ*3WO^ZwA+MMX z#lldG9UUW=z_ZJx$P5F9>l;fxW-7g8fHj7+AK9;yGSBe#oO$h*_LdmT3$S}cQ2XeT zB#9dsnCe~ClXmLC5l!Gly6~Dd;D|{dr88ZH&5kzc>e8(w4NmvuY;~`K$dP=75Yl;D zt0xr+JCps~C8aARl0hri0OtRX0E|@f61LtCA!9hd+Qe2nOgJ4}ka4lm34sgoic`T) zGVX9C2cL4LQj=ckR1z0dXE}TB5aaf5^IV7Sm@@`!G(#+Hwp05lV#!rQ-B}ilO9;hK zr68RFJ%A1+1cf*{uX{VFs-0NxMee?$504Oph?4ELl~ue2+C`s;FqvFjko$J{Y42k_y-rQ;fwFbWf+FnH7332rq*oVZxy zQjwUrM-jtNwZONH3-;0`a(qhQ<-2Ppmy<&XpNK0Ly!h-f0fTj)Wv_;#$m{;0R_=R& zX$*F4&xW<%)MdP@X^}Jqt9ehVG8ooKhGA-`Z)2vFDO}~&7+2CIUxpEoYK6E!TE<-p zyvwv-wx5KO)PC!v)#fswy-t8YhEq%k&}>I|$5mta?88TpD|lE82wM6s2#sD89H;fQ zH8k5z6j+EWCI_)^d;mjzB@9>l&{r;_P%ffaDxq91qgW_lcyJJ2p^V4hTEzJ`-o)zS z5-Pi9ESeIf&%y5s*5lH6fRy>|h+zf5SdQQWcTQt&sficfScR~P1nI=;(6;1Q51DPQ zcW=>8cVZI5$NHX%8UrY02*Y^NKm*{~e8F^vvFg#skQgeQR`ISEAwP8FP0^tl!zs=N z16-@DYT}mzwR0%YTvv!2P&}%5I<;eak+pUQ+Ru)xdcQcc3O;7ZJljD@*?P&;lV4-x zCW*&xI7qcY^qwK6{OJh~0Zo_oM12zV=yh1U#-M+*)qZ=L;;#6<9U^JaM_53bFWm^cOq%621sE?6f_P4uIM)=BOx!^k?hY>@w6KRG% zk^kf_^!QIFDYtx$(V%y~iWwR(s@^F=fBsv+s9MLaMLZLumgCd6esR9B50w-pSQm zA<%ufN@&tAj947Bi)j2S%s8cN7z66YwJN+VVimcR_jnylt=PC6oklB+Bj?8bYm+jr zvfc{N30cAj1XQ%@qEFJdTtm@Qf41oyM*KW}x;kVo_tTl39*KgreR%_hHMLk57d zk>Ca0lQ&s2I!ybgJrV-Utv2zcC(dGZs{=w{?8LBFnS~)i089;)@R|Ge;Lal>h?u$= z)E+J(BI8y&G>!qt2c0C0N1zYlZHKBnPm~Z;ie9Fild?)`Y&G^3Yp0$2G$3iMPOFPg z=mcTpv=j*uV-@nRY!72-wnNk!fkuXeb*Es(|JPNnDB)4aNf;N7z5Ek=tN)84h9Kn8 zx|Pvj)}q^hMEfV}NAkPLAh6$L^l#jYk`d$HbnuF4@i48l(g-HDMkmRf+;|~QW7kZo zZl?1!F?EjMJ=@$-P*}vgZXo&Y4i7eRs%!>~sS%2}lwc{dXz05Y?@Rz?>M`W2N4 zzJt(N4nh#l%e$s3_{>KRp;+{=91t|MtdxlRdih@wzN*z~fkpxLPYvPtff>w9jbUnh z9DUV(czzz#D**5jg%KhEG@nDYQbK_+pxHpHz6Fl}9$_3l0Vs(%N$7Jh5W+wiOcZ0%D2v=_KNz2+Vlj@zA@Y`dRLVZ`e!PL)wna6yqQ+MI9~1Tt zljD!0LckJt>+)|=$P`UC-z@##mX2%D~Pb!P^+%Sw*Qz0TsBE;0HS7q z+d+h_miv6Lo%GfJM3bx;@r3c}=-Vgl=tOous-3U zZ$}3BS@n;-a|S17w{U)`jtETgl7S#WIq%7M0{ZqM!5e}_it+u`V!Y~6)g#95uvPe{ zbv!hFi2)NOJu0PK&&EF&TxR?AiirHbD{;OPK&5eBu&ui%)i zXI3G}afXq`S%+!Al1UicCNl9CDI4NZ&C;Os(7ww}HYwAr;matNDBF__lFc{_3`E?| z%H->mB#cn;lM}dF_VLmC_F{CXh_wzwBZ{vYBe3Q&m^4oqfI=aMLNSMGwE~hWAYc?h zL{ad45Xz7Cgb@(JM<*hPC_!JfguWt0Jz`){6x+hw+7MQYkAa7*H&D*gM?^-=|pJXyMZQma^j= zX|OMc$+0r>ISzkn1zgC$7l(^`|0DTR&sdk#~1LofBzN$;FBLb zfV*#<#@P#-_>W(H9T(@faA;pYe&ypwFg#em-+bpZzWTj0=&R(_L}wRX8yhNMY`6%I z0t+iG%r7-T^bKmVJg3Qy@e)Rcc<{ox#Rk?l+OgrN_)MSBx2O!cAS869Wrs*5!H=Jr!~gr0*W(*9>;Yv{HSR}Z!qy+tOuAl@t-@Wtc^2tYEL)heSm+p% zlA{aMgv@cta+Oc_cWwN$o-=XLct_}*Bw-So&_>+&nnqVc4l-#yIdJSrXu3*e@<>l& zT_%fyS!y1!=caq>+f@B#+7_mYgog3t0BOS{gs-6Gea=~GV5`OxLadPmK+=|&47{Hm7e!2*vE?P$UBRvTgB?l-7a0Y{5<{L+$7U1!ED8W>O&&W4j@ zTc(cE##`&PSY@&kV?ezX;;)~68*k2T$Zj`{TvZoij60SzK3mNA7V6DrU~GN0uw$Occ3OF=XMJ_&IrFu%| zJs^rA9GI-iJEb|@V%iXbS~EZxMp)i#p&dpjQnj62wDIKJ7XHhV7Z8LT$1v=Gg@M64 z!XXt`)DQ|VrktM(%XRb?T1fzOyvj73y9fW^YnRm3J-QRj7%)9t#2v?m@n_$!q0tWIozgZslS4&}_ZM(>u?|lcc0zG6UTV*H z83mu3Y!|PH3-}~fcxg>01n4j4B+uFH9v>_wCu>A9l$xt0MonG&G-3>EwPc_%0*1kA z9(yLLc;)OWJd%!2x!_^nR0Zdk>R8?g;8QhTD5Y52>Yx=wDCRxO5hHl+q<;MJgY&BnVh5HdVG;!_4#)YO5{ed{3_0a5=^C^K4u-k?m_7Dv}4F83K6#w_Q7i z*G{kFiJvW?koSz3B8n8<>=ZH1lwKMcEZ}pG97Cm?!@_a{U-;5%ICX9Vz8+U2rb{vJ z;luau!!6g2qfqehkI&5E3txH-d8$H*IoZngNf_XJ1S3O5R7yT7MIT^5sp#YO8>i4; z&Ex9BBRF=&FixM_Kq2p8WT=4tY96Jc4;Cqll`(DPCz%W&zztW8-~;zeqmZLGb72dA z{8uNjverrjL5�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 LK^n#_jZgRI_2kXUmP3VbL*@ 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