diff --git a/Oqtane.Client/App.razor b/Oqtane.Client/App.razor index cef437d1..14f64da5 100644 --- a/Oqtane.Client/App.razor +++ b/Oqtane.Client/App.razor @@ -15,7 +15,7 @@
- +
@@ -39,6 +39,9 @@ [Parameter] public string RenderMode { get; set; } + [Parameter] + public int VisitorId { get; set; } + private bool _initialized = false; private string _display = "display: none;"; private Installation _installation = new Installation { Success = false, Message = "" }; diff --git a/Oqtane.Client/Extensions/OqtaneServiceCollectionExtensions.cs b/Oqtane.Client/Extensions/OqtaneServiceCollectionExtensions.cs index 40db5da5..a994ff33 100644 --- a/Oqtane.Client/Extensions/OqtaneServiceCollectionExtensions.cs +++ b/Oqtane.Client/Extensions/OqtaneServiceCollectionExtensions.cs @@ -46,6 +46,8 @@ namespace Microsoft.Extensions.DependencyInjection services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); + services.AddScoped(); services.AddScoped(); return services; diff --git a/Oqtane.Client/Installer/Installer.razor b/Oqtane.Client/Installer/Installer.razor index 1ced68d1..75343a49 100644 --- a/Oqtane.Client/Installer/Installer.razor +++ b/Oqtane.Client/Installer/Installer.razor @@ -158,8 +158,8 @@ if (firstRender) { var interop = new Interop(JSRuntime); - await interop.IncludeLink("", "stylesheet", "https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.0.2/css/bootstrap.min.css", "text/css", "sha512-usVBAd66/NpVNfBge19gws2j6JZinnca12rAe2l+d+QkLU9fiG02O1X8Q6hepIpr/EYKZvKx/I9WsnujJuOmBA==", "anonymous", ""); - await interop.IncludeScript("", "https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.0.2/js/bootstrap.min.js", "sha512-a6ctI6w1kg3J4dSjknHj3aWLEbjitAXAjLDRUxo2wyYmDFRcz2RJuQr5M3Kt8O/TtUSp8n2rAyaXYy1sjoKmrQ==", "anonymous", "", "head", ""); + await interop.IncludeLink("", "stylesheet", "https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.3/css/bootstrap.min.css", "text/css", "sha512-GQGU0fMMi238uA+a/bdWJfpUGKUkBdgfFdgBm72SUQ6BeyWjoY/ton0tEjH+OSH9iP4Dfh+7HM0I9f5eR0L/4w==", "anonymous", ""); + await interop.IncludeScript("", "https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.3/js/bootstrap.bundle.min.js", "sha512-pax4MlgXjHEPfCwcJLQhigY7+N8rt6bVvWLFyUMuxShv170X53TRzGPmPkZmGBhk+jikR8WBM4yl7A9WMHHqvg==", "anonymous", "", "head", ""); } } diff --git a/Oqtane.Client/Modules/Admin/Languages/Add.razor b/Oqtane.Client/Modules/Admin/Languages/Add.razor index b3c9c533..80119785 100644 --- a/Oqtane.Client/Modules/Admin/Languages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Languages/Add.razor @@ -113,7 +113,7 @@ else
- +
@@ -350,7 +350,7 @@ else var localizationCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)); await interop.SetCookie(CookieRequestCultureProvider.DefaultCookieName, localizationCookieValue, 360); - NavigationManager.NavigateTo(NavigationManager.Uri, forceLoad: true); + NavigationManager.NavigateTo(NavigationManager.Uri, true); } } } diff --git a/Oqtane.Client/Modules/Admin/Logs/Detail.razor b/Oqtane.Client/Modules/Admin/Logs/Detail.razor index 91e4d0e7..e2623a02 100644 --- a/Oqtane.Client/Modules/Admin/Logs/Detail.razor +++ b/Oqtane.Client/Modules/Admin/Logs/Detail.razor @@ -10,100 +10,32 @@ @inject IStringLocalizer SharedLocalizer
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
- -
- +
- +
- +
- +
- +
@@ -111,7 +43,7 @@ @if (_pageName != string.Empty) {
- +
@@ -120,7 +52,7 @@ @if (_moduleTitle != string.Empty) {
- +
@@ -129,26 +61,26 @@ @if (_username != string.Empty) {
- +
}
- +
- +
- +
@@ -156,24 +88,25 @@ @if (!string.IsNullOrEmpty(_exception)) {
- -
+ +
}
- +
- -
+ +
+
@SharedLocalizer["Cancel"] diff --git a/Oqtane.Client/Modules/Admin/Logs/Index.razor b/Oqtane.Client/Modules/Admin/Logs/Index.razor index 920ec709..311e73b0 100644 --- a/Oqtane.Client/Modules/Admin/Logs/Index.razor +++ b/Oqtane.Client/Modules/Admin/Logs/Index.razor @@ -51,11 +51,11 @@ else {
-   - @Localizer["Date"] - @Localizer["Level"] - @Localizer["Feature"] - @Localizer["Function"] +   + @Localizer["Date"] + @Localizer["Level"] + @Localizer["Feature"] + @Localizer["Function"]
diff --git a/Oqtane.Client/Modules/Admin/ModuleCreator/ModuleInfo.cs b/Oqtane.Client/Modules/Admin/ModuleCreator/ModuleInfo.cs index 81b82a6d..7eb2f372 100644 --- a/Oqtane.Client/Modules/Admin/ModuleCreator/ModuleInfo.cs +++ b/Oqtane.Client/Modules/Admin/ModuleCreator/ModuleInfo.cs @@ -1,7 +1,9 @@ -using Oqtane.Models; +using Oqtane.Documentation; +using Oqtane.Models; namespace Oqtane.Modules.Admin.ModuleCreator { + [PrivateApi("Mark this as private, since it's not very useful in the public docs")] public class ModuleInfo : IModule { public ModuleDefinition ModuleDefinition => new ModuleDefinition diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor index 1f194dba..57d6fa26 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -22,6 +22,7 @@ else   @SharedLocalizer["Name"] @SharedLocalizer["Version"] + @Localizer["InUse"] @SharedLocalizer["Expires"]   @@ -35,6 +36,16 @@ else @context.Name @context.Version + + @if(context.AssemblyName == "Oqtane.Client" || PageState.Modules.Where(m => m.ModuleDefinition.ModuleDefinitionId == context.ModuleDefinitionId).Count() > 0) + { + @SharedLocalizer["Yes"] + } + else + { + @SharedLocalizer["No"] + } + @((MarkupString)PurchaseLink(context.PackageName)) diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor index d3cbfbac..5f2a8536 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -3,13 +3,14 @@ @inherits ModuleBase @inject NavigationManager NavigationManager @inject IPageService PageService +@inject IPageModuleService PageModuleService @inject IThemeService ThemeService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer
- + @if (_themeList != null) {
@@ -151,10 +152,27 @@
-
- + } + + + @if(_pageModules != null) + { + +
+   +   + @Localizer["ModuleTitle"] + @Localizer["ModuleDefinition"] +
+ + + + @context.Title + @context.ModuleDefinition?.Name + +
}
@if (_themeSettingsType != null) @@ -170,114 +188,136 @@ @code { - public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; - private ElementReference form; - private bool validated = false; - private List _themeList; - private List _themes = new List(); - private List _containers = new List(); - private List _pageList; - private int _pageId; - private string _name; - private string _title; - private string _path; - private string _currentparentid; - private string _parentid = "-1"; - private string _insert = "="; - private List _children; - private int _childid = -1; - private string _isnavigation; - private string _isclickable; - private string _url; - private string _ispersonalizable; - private string _themetype; - private string _containertype = "-"; - private string _icon; - private string _permissions = null; - private string _createdby; - private DateTime _createdon; - private string _modifiedby; - private DateTime _modifiedon; - private string _deletedby; - private DateTime? _deletedon; - private PermissionGrid _permissionGrid; - private Type _themeSettingsType; - private object _themeSettings; - private RenderFragment ThemeSettingsComponent { get; set; } - private bool _refresh = false; + private ElementReference form; + private bool validated = false; + private List _themeList; + private List _themes = new List(); + private List _containers = new List(); + private List _pageList; + private List _pageModules; + private int _pageId; + private string _name; + private string _title; + private string _path; + private string _currentparentid; + private string _parentid = "-1"; + private string _insert = "="; + private List _children; + private int _childid = -1; + private string _isnavigation; + private string _isclickable; + private string _url; + private string _ispersonalizable; + private string _themetype; + private string _containertype = "-"; + private string _icon; + private string _permissions = null; + private string _createdby; + private DateTime _createdon; + private string _modifiedby; + private DateTime _modifiedon; + private string _deletedby; + private DateTime? _deletedon; + private PermissionGrid _permissionGrid; + private Type _themeSettingsType; + private object _themeSettings; + private RenderFragment ThemeSettingsComponent { get; set; } + private bool _refresh = false; + protected Page page; - protected override async Task OnInitializedAsync() - { - try - { - _pageList = PageState.Pages; - _children = PageState.Pages.Where(item => item.ParentId == null).ToList(); + protected override async Task OnInitializedAsync() + { + try + { + _pageList = PageState.Pages; + _children = PageState.Pages.Where(item => item.ParentId == null).ToList(); + _themeList = await ThemeService.GetThemesAsync(); + _themes = ThemeService.GetThemeControls(_themeList); - _themeList = await ThemeService.GetThemesAsync(); - _themes = ThemeService.GetThemeControls(_themeList); + _pageId = Int32.Parse(PageState.QueryString["id"]); + page = PageState.Pages.FirstOrDefault(item => item.PageId == _pageId); - _pageId = Int32.Parse(PageState.QueryString["id"]); - var page = PageState.Pages.FirstOrDefault(item => item.PageId == _pageId); - if (page != null) - { - _name = page.Name; - _title = page.Title; - _path = page.Path; + if (page != null) + { + _name = page.Name; + _title = page.Title; + _path = page.Path; + _pageModules = PageState.Modules.Where(m => m.PageId == page.PageId && m.IsDeleted == false).ToList(); - if (string.IsNullOrEmpty(_path)) - { - _path = "/"; - } - else - { - if (_path.Contains("/")) - { - _path = _path.Substring(_path.LastIndexOf("/") + 1); - } - } + if (string.IsNullOrEmpty(_path)) + { + _path = "/"; + } + else + { + if (_path.Contains("/")) + { + _path = _path.Substring(_path.LastIndexOf("/") + 1); + } + } - if (page.ParentId == null) - { - _parentid = "-1"; - } - else - { - _parentid = page.ParentId.ToString(); - } + if (page.ParentId == null) + { + _parentid = "-1"; + } + else + { + _parentid = page.ParentId.ToString(); + } - _currentparentid = _parentid; - _isnavigation = page.IsNavigation.ToString(); - _isclickable = page.IsClickable.ToString(); - _url = page.Url; - _ispersonalizable = page.IsPersonalizable.ToString(); - _themetype = page.ThemeType; - if (string.IsNullOrEmpty(_themetype)) - { - _themetype = PageState.Site.DefaultThemeType; - } - _containers = ThemeService.GetContainerControls(_themeList, _themetype); - _containertype = page.DefaultContainerType; - if (string.IsNullOrEmpty(_containertype)) - { - _containertype = PageState.Site.DefaultContainerType; - } - _icon = page.Icon; - _permissions = page.Permissions; - _createdby = page.CreatedBy; - _createdon = page.CreatedOn; - _modifiedby = page.ModifiedBy; - _modifiedon = page.ModifiedOn; - _deletedby = page.DeletedBy; - _deletedon = page.DeletedOn; + _currentparentid = _parentid; + _isnavigation = page.IsNavigation.ToString(); + _isclickable = page.IsClickable.ToString(); + _url = page.Url; + _ispersonalizable = page.IsPersonalizable.ToString(); + _themetype = page.ThemeType; + if (string.IsNullOrEmpty(_themetype)) + { + _themetype = PageState.Site.DefaultThemeType; + } + _containers = ThemeService.GetContainerControls(_themeList, _themetype); + _containertype = page.DefaultContainerType; + if (string.IsNullOrEmpty(_containertype)) + { + _containertype = PageState.Site.DefaultContainerType; + } + _icon = page.Icon; + _permissions = page.Permissions; + _createdby = page.CreatedBy; + _createdon = page.CreatedOn; + _modifiedby = page.ModifiedBy; + _modifiedon = page.ModifiedOn; + _deletedby = page.DeletedBy; + _deletedon = page.DeletedOn; - ThemeSettings(); - } + ThemeSettings(); + } + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading Page {PageId} {Error}", _pageId, ex.Message); + AddModuleMessage(Localizer["Error.Page.Load"], MessageType.Error); + } + } + + private async Task DeleteModule(Module module) + { + try + { + PageModule pagemodule = await PageModuleService.GetPageModuleAsync(page.PageId, module.ModuleId); + pagemodule.IsDeleted = true; + await PageModuleService.UpdatePageModuleAsync(pagemodule); + await logger.LogInformation(LogFunction.Update,"Module Deleted {Title}", module.Title); + _pageModules.RemoveAll(item => item.PageModuleId == pagemodule.PageModuleId); + StateHasChanged(); + NavigationManager.NavigateTo(NavigationManager.Uri + "&tab=PageModules"); } catch (Exception ex) { - await logger.LogError(ex, "Error Loading Page {PageId} {Error}", _pageId, ex.Message); - AddModuleMessage(Localizer["Error.Page.Load"], MessageType.Error); + await logger.LogError(ex, "Error Deleting Module {Title} {Error}", module.Title, ex.Message); + AddModuleMessage(Localizer["Error.Module.Delete"], MessageType.Error); } } diff --git a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor index e70165b9..75273207 100644 --- a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor +++ b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor @@ -25,7 +25,7 @@ @Localizer["DeletedOn"] - + @context.Name @context.DeletedBy @@ -34,9 +34,7 @@ @if (_pages.Any()) { -
- -
+
} } @@ -58,7 +56,7 @@ @Localizer["DeletedOn"] - + @PageState.Pages.Find(item => item.PageId == context.PageId).Name @context.Title @@ -68,9 +66,7 @@ @if (_modules.Any()) { -
- -
+
} } diff --git a/Oqtane.Client/Modules/Admin/Site/Index.razor b/Oqtane.Client/Modules/Admin/Site/Index.razor index f6263f33..ebe7548f 100644 --- a/Oqtane.Client/Modules/Admin/Site/Index.razor +++ b/Oqtane.Client/Modules/Admin/Site/Index.razor @@ -34,15 +34,6 @@ }
-
- -
- -
-
@@ -240,243 +231,246 @@ } @code { - private ElementReference form; - private bool validated = false; - private bool _initialized = false; - private List _themeList; - private List _themes = new List(); - private List _containers = new List(); - private string _name = string.Empty; - private List _aliasList; - private string _urls = string.Empty; - private string _runtime = ""; - private string _prerender = ""; - private int _logofileid = -1; - private FileManager _logofilemanager; - private int _faviconfileid = -1; - private FileManager _faviconfilemanager; - private string _themetype = "-"; - private string _containertype = "-"; - private string _admincontainertype = "-"; - private string _allowregistration; - private string _smtphost = string.Empty; - private string _smtpport = string.Empty; - private string _smtpssl = "False"; - private string _smtpusername = string.Empty; - private string _smtppassword = string.Empty; - private string _smtpsender = string.Empty; - private string _pwaisenabled; - private int _pwaappiconfileid = -1; - private FileManager _pwaappiconfilemanager; - private int _pwasplashiconfileid = -1; - private FileManager _pwasplashiconfilemanager; - private string _tenant = string.Empty; - private string _database = string.Empty; - private string _connectionstring = string.Empty; - private string _createdby; - private DateTime _createdon; - private string _modifiedby; - private DateTime _modifiedon; - private string _deletedby; - private DateTime? _deletedon; - private string _isdeleted; + private ElementReference form; + private bool validated = false; + private bool _initialized = false; + private List _themeList; + private List _themes = new List(); + private List _containers = new List(); + private string _name = string.Empty; + private List _aliasList; + private string _urls = string.Empty; + private string _runtime = ""; + private string _prerender = ""; + private int _logofileid = -1; + private FileManager _logofilemanager; + private int _faviconfileid = -1; + private FileManager _faviconfilemanager; + private string _themetype = "-"; + private string _containertype = "-"; + private string _admincontainertype = "-"; + private string _smtphost = string.Empty; + private string _smtpport = string.Empty; + private string _smtpssl = "False"; + private string _smtpusername = string.Empty; + private string _smtppassword = string.Empty; + private string _smtpsender = string.Empty; + private string _pwaisenabled; + private int _pwaappiconfileid = -1; + private FileManager _pwaappiconfilemanager; + private int _pwasplashiconfileid = -1; + private FileManager _pwasplashiconfilemanager; + private string _tenant = string.Empty; + private string _database = string.Empty; + private string _connectionstring = string.Empty; + private string _createdby; + private DateTime _createdon; + private string _modifiedby; + private DateTime _modifiedon; + private string _deletedby; + private DateTime? _deletedon; + private string _isdeleted; - public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; - protected override async Task OnInitializedAsync() - { - try - { - _themeList = await ThemeService.GetThemesAsync(); - Site site = await SiteService.GetSiteAsync(PageState.Site.SiteId); - if (site != null) - { - _name = site.Name; - _runtime = site.Runtime; - _prerender = site.RenderMode.Replace(_runtime, ""); - _allowregistration = site.AllowRegistration.ToString(); - _isdeleted = site.IsDeleted.ToString(); + protected override async Task OnInitializedAsync() + { + try + { + _themeList = await ThemeService.GetThemesAsync(); + Site site = await SiteService.GetSiteAsync(PageState.Site.SiteId); + if (site != null) + { + _name = site.Name; + _runtime = site.Runtime; + _prerender = site.RenderMode.Replace(_runtime, ""); + _isdeleted = site.IsDeleted.ToString(); - if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) - { - _aliasList = await AliasService.GetAliasesAsync(); - foreach (Alias alias in _aliasList.Where(item => item.SiteId == site.SiteId && item.TenantId == site.TenantId).ToList()) - { - _urls += alias.Name + ","; - } - _urls = _urls.Substring(0, _urls.Length - 1); + if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) + { + _aliasList = await AliasService.GetAliasesAsync(); + foreach (Alias alias in _aliasList.Where(item => item.SiteId == site.SiteId && item.TenantId == site.TenantId).ToList()) + { + _urls += alias.Name + ","; + } + _urls = _urls.Substring(0, _urls.Length - 1); - } + } - if (site.LogoFileId != null) - { - _logofileid = site.LogoFileId.Value; - } + if (site.LogoFileId != null) + { + _logofileid = site.LogoFileId.Value; + } - if (site.FaviconFileId != null) - { - _faviconfileid = site.FaviconFileId.Value; - } + if (site.FaviconFileId != null) + { + _faviconfileid = site.FaviconFileId.Value; + } - _themes = ThemeService.GetThemeControls(_themeList); - _themetype = (!string.IsNullOrEmpty(site.DefaultThemeType)) ? site.DefaultThemeType : Constants.DefaultTheme; - _containers = ThemeService.GetContainerControls(_themeList, _themetype); - _containertype = (!string.IsNullOrEmpty(site.DefaultContainerType)) ? site.DefaultContainerType : Constants.DefaultContainer; - _admincontainertype = (!string.IsNullOrEmpty(site.AdminContainerType)) ? site.AdminContainerType : Constants.DefaultAdminContainer; + _themes = ThemeService.GetThemeControls(_themeList); + _themetype = (!string.IsNullOrEmpty(site.DefaultThemeType)) ? site.DefaultThemeType : Constants.DefaultTheme; + _containers = ThemeService.GetContainerControls(_themeList, _themetype); + _containertype = (!string.IsNullOrEmpty(site.DefaultContainerType)) ? site.DefaultContainerType : Constants.DefaultContainer; + _admincontainertype = (!string.IsNullOrEmpty(site.AdminContainerType)) ? site.AdminContainerType : Constants.DefaultAdminContainer; - var settings = await SettingService.GetSiteSettingsAsync(site.SiteId); - _smtphost = SettingService.GetSetting(settings, "SMTPHost", string.Empty); - _smtpport = SettingService.GetSetting(settings, "SMTPPort", string.Empty); - _smtpssl = SettingService.GetSetting(settings, "SMTPSSL", "False"); - _smtpusername = SettingService.GetSetting(settings, "SMTPUsername", string.Empty); - _smtppassword = SettingService.GetSetting(settings, "SMTPPassword", string.Empty); - _smtpsender = SettingService.GetSetting(settings, "SMTPSender", string.Empty); + _pwaisenabled = site.PwaIsEnabled.ToString(); + if (site.PwaAppIconFileId != null) + { + _pwaappiconfileid = site.PwaAppIconFileId.Value; + } + if (site.PwaSplashIconFileId != null) + { + _pwasplashiconfileid = site.PwaSplashIconFileId.Value; + } + + var settings = await SettingService.GetSiteSettingsAsync(site.SiteId); + _smtphost = SettingService.GetSetting(settings, "SMTPHost", string.Empty); + _smtpport = SettingService.GetSetting(settings, "SMTPPort", string.Empty); + _smtpssl = SettingService.GetSetting(settings, "SMTPSSL", "False"); + _smtpusername = SettingService.GetSetting(settings, "SMTPUsername", string.Empty); + _smtppassword = SettingService.GetSetting(settings, "SMTPPassword", string.Empty); + _smtpsender = SettingService.GetSetting(settings, "SMTPSender", string.Empty); - _pwaisenabled = site.PwaIsEnabled.ToString(); + if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) + { + var tenants = await TenantService.GetTenantsAsync(); + var _databases = await DatabaseService.GetDatabasesAsync(); + var tenant = tenants.Find(item => item.TenantId == site.TenantId); + if (tenant != null) + { + _tenant = tenant.Name; + _database = _databases.Find(item => item.DBType == tenant.DBType)?.Name; + _connectionstring = tenant.DBConnectionString; + } + } - if (site.PwaAppIconFileId != null) - { - _pwaappiconfileid = site.PwaAppIconFileId.Value; - } + _createdby = site.CreatedBy; + _createdon = site.CreatedOn; + _modifiedby = site.ModifiedBy; + _modifiedon = site.ModifiedOn; + _deletedby = site.DeletedBy; + _deletedon = site.DeletedOn; - if (site.PwaSplashIconFileId != null) - { - _pwasplashiconfileid = site.PwaSplashIconFileId.Value; - } + _initialized = true; + } + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message); + AddModuleMessage(ex.Message, MessageType.Error); + } + } - _pwaisenabled = site.PwaIsEnabled.ToString(); - if (site.PwaAppIconFileId != null) - { - _pwaappiconfileid = site.PwaAppIconFileId.Value; - } - if (site.PwaSplashIconFileId != null) - { - _pwasplashiconfileid = site.PwaSplashIconFileId.Value; - } + private async void ThemeChanged(ChangeEventArgs e) + { + try + { + _themetype = (string)e.Value; + if (_themetype != "-") + { + _containers = ThemeService.GetContainerControls(_themeList, _themetype); + } + else + { + _containers = new List(); + } + _containertype = "-"; + _admincontainertype = Constants.DefaultAdminContainer; + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", _themetype, ex.Message); + AddModuleMessage(Localizer["Error.Theme.LoadPane"], MessageType.Error); + } + } - if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) - { - var tenants = await TenantService.GetTenantsAsync(); - var _databases = await DatabaseService.GetDatabasesAsync(); - var tenant = tenants.Find(item => item.TenantId == site.TenantId); - if (tenant != null) - { - _tenant = tenant.Name; - _database = _databases.Find(item => item.DBType == tenant.DBType)?.Name; - _connectionstring = tenant.DBConnectionString; - } - } + private async Task SaveSite() + { + validated = true; + var interop = new Interop(JSRuntime); + if (await interop.FormValid(form)) + { + try + { + if (_name != string.Empty && _urls != string.Empty && _themetype != "-" && _containertype != "-") + { + var unique = true; + if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) + { + foreach (string name in _urls.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + if (_aliasList.Exists(item => item.Name == name && item.SiteId != PageState.Alias.SiteId && item.TenantId != PageState.Alias.TenantId)) + { + unique = false; + } + } + } - _createdby = site.CreatedBy; - _createdon = site.CreatedOn; - _modifiedby = site.ModifiedBy; - _modifiedon = site.ModifiedOn; - _deletedby = site.DeletedBy; - _deletedon = site.DeletedOn; + if (unique) + { + var site = await SiteService.GetSiteAsync(PageState.Site.SiteId); + if (site != null) + { + bool refresh = false; + bool reload = false; - _initialized = true; - } - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Loading Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message); - AddModuleMessage(ex.Message, MessageType.Error); - } - } + site.Name = _name; + if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) + { + if (site.Runtime != _runtime || site.RenderMode != _runtime + _prerender) + { + site.Runtime = _runtime; + site.RenderMode = _runtime + _prerender; + refresh = true; + reload = true; // needs to be reloaded on server + } + } + site.IsDeleted = (_isdeleted == null ? true : Boolean.Parse(_isdeleted)); - private async void ThemeChanged(ChangeEventArgs e) - { - try - { - _themetype = (string)e.Value; - if (_themetype != "-") - { - _containers = ThemeService.GetContainerControls(_themeList, _themetype); - } - else - { - _containers = new List(); - } - _containertype = "-"; - _admincontainertype = Constants.DefaultAdminContainer; - StateHasChanged(); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", _themetype, ex.Message); - AddModuleMessage(Localizer["Error.Theme.LoadPane"], MessageType.Error); - } - } + site.LogoFileId = null; + var logofileid = _logofilemanager.GetFileId(); + if (logofileid != -1) + { + site.LogoFileId = logofileid; + } + int? faviconFieldId = _faviconfilemanager.GetFileId(); + if (faviconFieldId == -1) faviconFieldId = null; + if (site.FaviconFileId != faviconFieldId) + { + site.FaviconFileId = faviconFieldId; + reload = true; // needs to be reloaded on server + } + if (site.DefaultThemeType != _themetype) + { + site.DefaultThemeType = _themetype; + refresh = true; // needs to be refreshed on client + } + if (site.DefaultContainerType != _containertype) + { + site.DefaultContainerType = _containertype; + refresh = true; // needs to be refreshed on client + } + site.AdminContainerType = _admincontainertype; - private async Task SaveSite() - { - validated = true; - var interop = new Interop(JSRuntime); - if (await interop.FormValid(form)) - { - try - { - if (_name != string.Empty && _urls != string.Empty && _themetype != "-" && _containertype != "-") - { - var unique = true; - if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) - { - foreach (string name in _urls.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - if (_aliasList.Exists(item => item.Name == name && item.SiteId != PageState.Alias.SiteId && item.TenantId != PageState.Alias.TenantId)) - { - unique = false; - } - } - } - - if (unique) - { - var site = await SiteService.GetSiteAsync(PageState.Site.SiteId); - if (site != null) - { - bool reload = false; - bool refresh = (site.DefaultThemeType != _themetype || site.DefaultContainerType != _containertype); - - site.Name = _name; - if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) - { - if (site.Runtime != _runtime || site.RenderMode != _runtime + _prerender) - { - site.Runtime = _runtime; - site.RenderMode = _runtime + _prerender; - refresh = true; - reload = true; - } - } - site.AllowRegistration = (_allowregistration == null ? true : Boolean.Parse(_allowregistration)); - site.IsDeleted = (_isdeleted == null ? true : Boolean.Parse(_isdeleted)); - - site.LogoFileId = null; - var logofileid = _logofilemanager.GetFileId(); - if (logofileid != -1) - { - site.LogoFileId = logofileid; - } - var faviconFieldId = _faviconfilemanager.GetFileId(); - if (faviconFieldId != -1) - { - site.FaviconFileId = faviconFieldId; - } - site.DefaultThemeType = _themetype; - site.DefaultContainerType = _containertype; - site.AdminContainerType = _admincontainertype; - - site.PwaIsEnabled = (_pwaisenabled == null ? true : Boolean.Parse(_pwaisenabled)); - var pwaappiconfileid = _pwaappiconfilemanager.GetFileId(); - if (pwaappiconfileid != -1) + if (site.PwaIsEnabled.ToString() != _pwaisenabled) + { + site.PwaIsEnabled = Boolean.Parse(_pwaisenabled); + reload = true; // needs to be reloaded on server + } + int? pwaappiconfileid = _pwaappiconfilemanager.GetFileId(); + if (pwaappiconfileid == -1) pwaappiconfileid = null; + if (site.PwaAppIconFileId != pwaappiconfileid) { site.PwaAppIconFileId = pwaappiconfileid; + reload = true; // needs to be reloaded on server } - var pwasplashiconfileid = _pwasplashiconfilemanager.GetFileId(); - if (pwasplashiconfileid != -1) + int? pwasplashiconfileid = _pwasplashiconfilemanager.GetFileId(); + if (pwasplashiconfileid == -1) pwasplashiconfileid = null; + if (site.PwaSplashIconFileId != pwasplashiconfileid) { site.PwaSplashIconFileId = pwasplashiconfileid; + reload = true; // needs to be reloaded on server } site = await SiteService.UpdateSiteAsync(site); @@ -518,7 +512,7 @@ if (refresh) { - NavigationManager.NavigateTo(NavigateUrl(), reload); // refresh to show new theme or container + NavigationManager.NavigateTo(NavigateUrl(true), reload); // refresh/reload } else { diff --git a/Oqtane.Client/Modules/Admin/Sites/Index.razor b/Oqtane.Client/Modules/Admin/Sites/Index.razor index f6d829a4..09d7946d 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Index.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Index.razor @@ -52,6 +52,11 @@ else private void Edit(string name) { + if (name.Equals("*")) + { + var uri = new Uri(NavigationManager.Uri); + name = uri.Authority; + } NavigationManager.NavigateTo(_scheme + name + "/admin/site/?reload"); } diff --git a/Oqtane.Client/Modules/Admin/UrlMappings/Add.razor b/Oqtane.Client/Modules/Admin/UrlMappings/Add.razor new file mode 100644 index 00000000..efde8b66 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/UrlMappings/Add.razor @@ -0,0 +1,71 @@ +@namespace Oqtane.Modules.Admin.UrlMappings +@inherits ModuleBase +@inject NavigationManager NavigationManager +@inject IUrlMappingService UrlMappingService +@inject IStringLocalizer Localizer +@inject IStringLocalizer SharedLocalizer + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+

+ + @SharedLocalizer["Cancel"] +
+
+ +@code { + private ElementReference form; + private bool validated = false; + + private string _url = string.Empty; + private string _mappedurl = string.Empty; + + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + + private async Task SaveUrlMapping() + { + validated = true; + var interop = new Interop(JSRuntime); + if (await interop.FormValid(form)) + { + var route = new Route(_url, PageState.Alias.Path); + var url = route.SiteUrl + "/" + route.PagePath; + + var urlmapping = new UrlMapping(); + urlmapping.SiteId = PageState.Site.SiteId; + urlmapping.Url = url; + urlmapping.MappedUrl = _mappedurl; + urlmapping.Requests = 0; + urlmapping.CreatedOn = DateTime.UtcNow; + urlmapping.RequestedOn = DateTime.UtcNow; + + try + { + urlmapping = await UrlMappingService.AddUrlMappingAsync(urlmapping); + await logger.LogInformation("UrlMapping Saved {UrlMapping}", urlmapping); + NavigationManager.NavigateTo(NavigateUrl()); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Saving UrlMapping {UrlMapping} {Error}", urlmapping, ex.Message); + AddModuleMessage(Localizer["Error.SaveUrlMapping"], MessageType.Error); + } + } + else + { + AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); + } + } +} diff --git a/Oqtane.Client/Modules/Admin/UrlMappings/Edit.razor b/Oqtane.Client/Modules/Admin/UrlMappings/Edit.razor new file mode 100644 index 00000000..1ef1b79a --- /dev/null +++ b/Oqtane.Client/Modules/Admin/UrlMappings/Edit.razor @@ -0,0 +1,83 @@ +@namespace Oqtane.Modules.Admin.UrlMappings +@inherits ModuleBase +@inject NavigationManager NavigationManager +@inject IUrlMappingService UrlMappingService +@inject IStringLocalizer Localizer +@inject IStringLocalizer SharedLocalizer + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+

+ + @SharedLocalizer["Cancel"] +
+
+ +@code { + private ElementReference form; + private bool validated = false; + + private int _urlmappingid; + private string _url = string.Empty; + private string _mappedurl = string.Empty; + + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + + protected override async Task OnInitializedAsync() + { + try + { + _urlmappingid = Int32.Parse(PageState.QueryString["id"]); + var urlmapping = await UrlMappingService.GetUrlMappingAsync(_urlmappingid); + if (urlmapping != null) + { + _url = urlmapping.Url; + _mappedurl = urlmapping.MappedUrl; + } + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading UrlMapping {UrlMappingId} {Error}", _urlmappingid, ex.Message); + AddModuleMessage(Localizer["Error.LoadUrlMapping"], MessageType.Error); + } + } + + private async Task SaveUrlMapping() + { + validated = true; + var interop = new Interop(JSRuntime); + if (await interop.FormValid(form)) + { + var urlmapping = await UrlMappingService.GetUrlMappingAsync(_urlmappingid); + urlmapping.MappedUrl = _mappedurl; + + try + { + urlmapping = await UrlMappingService.UpdateUrlMappingAsync(urlmapping); + await logger.LogInformation("UrlMapping Saved {UrlMapping}", urlmapping); + NavigationManager.NavigateTo(NavigateUrl()); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Saving UrlMapping {UrlMapping} {Error}", urlmapping, ex.Message); + AddModuleMessage(Localizer["Error.SaveUrlMapping"], MessageType.Error); + } + } + else + { + AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); + } + } +} diff --git a/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor b/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor new file mode 100644 index 00000000..327f7a37 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor @@ -0,0 +1,140 @@ +@namespace Oqtane.Modules.Admin.UrlMappings +@inherits ModuleBase +@inject NavigationManager NavigationManager +@inject IUrlMappingService UrlMappingService +@inject ISiteService SiteService +@inject IStringLocalizer Localizer +@inject IStringLocalizer SharedLocalizer + +@if (_urlMappings == null) +{ +

@SharedLocalizer["Loading"]

+} +else +{ + + +
+
+
+ +
+
+ +
+
+
+
+ +
+   +   + @Localizer["Url"] + @Localizer["Requests"] + @Localizer["Requested"] +
+ + + + + @context.Url + @if (_mapped) + { + @((MarkupString)"
>> ")@context.MappedUrl + } + + @context.Requests + @context.RequestedOn +
+
+
+ +
+
+ +
+ +
+
+
+
+ +
+
+} + +@code { + private bool _mapped = true; + private List _urlMappings; + private string _capturebrokenurls; + + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + + protected override async Task OnParametersSetAsync() + { + await GetUrlMappings(); + _capturebrokenurls = PageState.Site.CaptureBrokenUrls.ToString(); + } + + private async void MappedChanged(ChangeEventArgs e) + { + try + { + _mapped = bool.Parse(e.Value.ToString()); + await GetUrlMappings(); + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error On TypeChanged"); + } + } + + private void BrowseUrl(string url) + { + NavigationManager.NavigateTo(url, true); + } + + private async Task DeleteUrlMapping(UrlMapping urlMapping) + { + try + { + await UrlMappingService.DeleteUrlMappingAsync(urlMapping.UrlMappingId); + await logger.LogInformation("UrlMapping Deleted {UrlMapping}", urlMapping); + await GetUrlMappings(); + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Deleting UrlMapping {UrlMapping} {Error}", urlMapping, ex.Message); + AddModuleMessage(Localizer["Error.DeleteUrlMapping"], MessageType.Error); + } + } + + private async Task GetUrlMappings() + { + _urlMappings = await UrlMappingService.GetUrlMappingsAsync(PageState.Site.SiteId, _mapped); + } + + private async Task SaveSiteSettings() + { + try + { + var site = PageState.Site; + site.CaptureBrokenUrls = bool.Parse(_capturebrokenurls); + await SiteService.UpdateSiteAsync(site); + AddModuleMessage(Localizer["Success.SaveSiteSettings"], MessageType.Success); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Saving Site Settings {Error}", ex.Message); + AddModuleMessage(Localizer["Error.SaveSiteSettings"], MessageType.Error); + } + } +} diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor index a661c325..3f138c34 100644 --- a/Oqtane.Client/Modules/Admin/Users/Index.razor +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -3,6 +3,7 @@ @inject IUserRoleService UserRoleService @inject IUserService UserService @inject ISettingService SettingService +@inject ISiteService SiteService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @@ -14,45 +15,65 @@ } else { -
-
-
- -
-
- -
-
- -
-
-
- -
-   -   -   - @SharedLocalizer["Name"] -
- - - - - - - - - - - @context.User.DisplayName - -
+ + +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+   +   +   + @SharedLocalizer["Name"] +
+ + + + + + + + + + + @context.User.DisplayName + +
+
+ +
+
+ +
+ +
+
+
+
+ +
+
} @code { private List allroles; private List userroles; private string _search; + private string _allowregistration; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; @@ -61,6 +82,7 @@ else allroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); await LoadSettingsAsync(); userroles = Search(_search); + _allowregistration = PageState.Site.AllowRegistration.ToString(); } private List Search(string search) @@ -122,4 +144,20 @@ else await SettingService.UpdateUserSettingsAsync(settings, PageState.User.UserId); } + private async Task SaveSiteSettings() + { + try + { + var site = PageState.Site; + site.AllowRegistration = bool.Parse(_allowregistration); + await SiteService.UpdateSiteAsync(site); + AddModuleMessage(Localizer["Success.SaveSiteSettings"], MessageType.Success); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Saving Site Settings {Error}", ex.Message); + AddModuleMessage(Localizer["Error.SaveSiteSettings"], MessageType.Error); + } + } + } diff --git a/Oqtane.Client/Modules/Admin/Visitors/Detail.razor b/Oqtane.Client/Modules/Admin/Visitors/Detail.razor new file mode 100644 index 00000000..d1adf75e --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Visitors/Detail.razor @@ -0,0 +1,123 @@ +@namespace Oqtane.Modules.Admin.Visitors +@using System.Globalization +@inherits ModuleBase +@inject NavigationManager NavigationManager +@inject IVisitorService VisitorService +@inject IUserService UserService +@inject IStringLocalizer Localizer +@inject IStringLocalizer SharedLocalizer + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ @if (_user != string.Empty) + { +
+ +
+ +
+
+ } +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ + @SharedLocalizer["Cancel"] + +@code { + private int _visitorId; + private string _ip = string.Empty; + private string _language = string.Empty; + private string _useragent = string.Empty; + private string _url = string.Empty; + private string _referrer = string.Empty; + private string _user = string.Empty; + private string _visits = string.Empty; + private string _visited = string.Empty; + private string _created = string.Empty; + + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + + protected override async Task OnInitializedAsync() + { + try + { + _visitorId = Int32.Parse(PageState.QueryString["id"]); + var visitor = await VisitorService.GetVisitorAsync(_visitorId); + if (visitor != null) + { + _ip = visitor.IPAddress; + _language = visitor.Language; + _useragent = visitor.UserAgent; + _url = visitor.Url; + _referrer = visitor.Referrer; + _visits = visitor.Visits.ToString(); + _visited = visitor.VisitedOn.ToString(CultureInfo.CurrentCulture); + _created = visitor.CreatedOn.ToString(CultureInfo.CurrentCulture); + + if (visitor.UserId != null) + { + var user = await UserService.GetUserAsync(visitor.UserId.Value, PageState.Site.SiteId); + if (user != null) + { + _user = user.DisplayName; + } + } + } + else + { + AddModuleMessage(Localizer["Error.LoadVisitor"], MessageType.Error); + } + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading Visitor {VisitorId} {Error}", _visitorId, ex.Message); + AddModuleMessage(Localizer["Error.LoadVisitor"], MessageType.Error); + } + } + } diff --git a/Oqtane.Client/Modules/Admin/Visitors/Index.razor b/Oqtane.Client/Modules/Admin/Visitors/Index.razor new file mode 100644 index 00000000..d09d8e0d --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Visitors/Index.razor @@ -0,0 +1,144 @@ +@namespace Oqtane.Modules.Admin.Visitors +@inherits ModuleBase +@inject IVisitorService VisitorService +@inject ISiteService SiteService +@inject IStringLocalizer Localizer +@inject IStringLocalizer SharedLocalizer + +@if (_visitors == null) +{ +

@SharedLocalizer["Loading"]

+} +else +{ + + +
+
+
+ +
+
+ +
+
+
+
+ +
+   + @Localizer["IP"] + @Localizer["User"] + @Localizer["Language"] + @Localizer["Visits"] + @Localizer["Visited"] + @Localizer["Created"] +
+ + + @context.IPAddress + + @if (context.UserId != null) + { + @context.User.DisplayName + } + + @context.Language + @context.Visits + @context.VisitedOn + @context.CreatedOn + +
+
+ +
+
+ +
+ +
+
+
+
+ +
+
+} + +@code { + private bool _users = false; + private int _days = 1; + private List _visitors; + private string _visitortracking; + + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + + protected override async Task OnParametersSetAsync() + { + await GetVisitors(); + _visitortracking = PageState.Site.VisitorTracking.ToString(); + } + + private async void TypeChanged(ChangeEventArgs e) + { + try + { + _users = bool.Parse(e.Value.ToString()); + await GetVisitors(); + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error On TypeChanged"); + } + } + + private async void DateChanged(ChangeEventArgs e) + { + try + { + _days = int.Parse(e.Value.ToString()); + await GetVisitors(); + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error On DateChanged"); + } + } + + private async Task GetVisitors() + { + _visitors = await VisitorService.GetVisitorsAsync(PageState.Site.SiteId, DateTime.UtcNow.AddDays(-_days)); + if (_users) + { + _visitors = _visitors.Where(item => item.UserId != null).ToList(); + } + } + + private async Task SaveSiteSettings() + { + try + { + var site = PageState.Site; + site.VisitorTracking = bool.Parse(_visitortracking); + await SiteService.UpdateSiteAsync(site); + AddModuleMessage(Localizer["Success.SaveSiteSettings"], MessageType.Success); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Saving Site Settings {Error}", ex.Message); + AddModuleMessage(Localizer["Error.SaveSiteSettings"], MessageType.Error); + } + } +} diff --git a/Oqtane.Client/Modules/Controls/ActionDialog.razor b/Oqtane.Client/Modules/Controls/ActionDialog.razor index 5cda1386..4e21b91a 100644 --- a/Oqtane.Client/Modules/Controls/ActionDialog.razor +++ b/Oqtane.Client/Modules/Controls/ActionDialog.razor @@ -17,7 +17,7 @@ @@ -30,16 +30,17 @@ { if (Disabled) { - + } else { - + } } @code { private bool _visible = false; + private string _permissions = string.Empty; private bool _editmode = false; private bool _authorized = false; private string _iconSpan = string.Empty; @@ -59,6 +60,9 @@ [Parameter] public SecurityAccessLevel? Security { get; set; } // optional - can be used to explicitly specify SecurityAccessLevel + [Parameter] + public string Permissions { get; set; } // optional - can be used to specify a permission string + [Parameter] public string Class { get; set; } // optional @@ -105,6 +109,7 @@ Header = Localize(nameof(Header), Header); Message = Localize(nameof(Message), Message); + _permissions = (string.IsNullOrEmpty(Permissions)) ? ModuleState.Permissions : Permissions; _authorized = IsAuthorized(); } @@ -138,10 +143,10 @@ authorized = true; break; case SecurityAccessLevel.View: - authorized = UserSecurity.IsAuthorized(PageState.User,PermissionNames.View, ModuleState.Permissions); + authorized = UserSecurity.IsAuthorized(PageState.User,PermissionNames.View, _permissions); break; case SecurityAccessLevel.Edit: - authorized = UserSecurity.IsAuthorized(PageState.User,PermissionNames.Edit, ModuleState.Permissions); + authorized = UserSecurity.IsAuthorized(PageState.User,PermissionNames.Edit, _permissions); break; case SecurityAccessLevel.Admin: authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin); diff --git a/Oqtane.Client/Modules/Controls/ActionLink.razor b/Oqtane.Client/Modules/Controls/ActionLink.razor index cf2cd1df..0ba0dfbe 100644 --- a/Oqtane.Client/Modules/Controls/ActionLink.razor +++ b/Oqtane.Client/Modules/Controls/ActionLink.razor @@ -6,101 +6,118 @@ { if (Disabled) { - - } - else - { - @((MarkupString)_iconSpan) @_text - } + + } + else + { + if (OnClick == null) + { + @((MarkupString)_iconSpan) @_text + } + else + { + + } + } } @code { - private string _text = string.Empty; - private string _url = string.Empty; - private string _parameters = string.Empty; - private string _classname = "btn btn-primary"; - private string _style = string.Empty; - private bool _editmode = false; - private bool _authorized = false; - private string _iconSpan = string.Empty; + private string _text = string.Empty; + private string _parameters = string.Empty; + private string _url = string.Empty; + private string _permissions = string.Empty; + private bool _editmode = false; + private bool _authorized = false; + private string _classname = "btn btn-primary"; + private string _style = string.Empty; + private string _iconSpan = string.Empty; - [Parameter] - public string Action { get; set; } // required + [Parameter] + public string Action { get; set; } // required - [Parameter] - public SecurityAccessLevel? Security { get; set; } // optional - can be used to explicitly specify SecurityAccessLevel + [Parameter] + public string Text { get; set; } // optional - defaults to Action if not specified - [Parameter] - public string Text { get; set; } // optional - defaults to Action if not specified + [Parameter] + public string Parameters { get; set; } // optional - querystring parameters should be in the form of "id=x&name=y" - [Parameter] - public string Parameters { get; set; } // optional - querystring parameter should be in the form of "id=x&name=y" + [Parameter] + public int ModuleId { get; set; } = -1; // optional - allows the link to target a specific moduleid - [Parameter] - public string Class { get; set; } // optional - defaults to primary if not specified + [Parameter] + public Action OnClick { get; set; } = null; // optional - executes a method in the calling component - [Parameter] - public string Style { get; set; } // optional + [Parameter] + public SecurityAccessLevel? Security { get; set; } // optional - can be used to explicitly specify SecurityAccessLevel - [Parameter] - public bool Disabled { get; set; } // optional + [Parameter] + public string Permissions { get; set; } // optional - can be used to specify a permission string - [Parameter] - public string EditMode { get; set; } // optional - specifies if an authorized user must be in edit mode to see the action - default is false. + [Parameter] + public bool Disabled { get; set; } // optional - [Parameter] - public string IconName { get; set; } // optional - specifies an icon for the link - default is no icon + [Parameter] + public string EditMode { get; set; } // optional - specifies if an authorized user must be in edit mode to see the action - default is false. - [Parameter] - public bool IconOnly { get; set; } // optional - specifies only icon in link + [Parameter] + public string Class { get; set; } // optional - defaults to primary if not specified - protected override void OnParametersSet() - { - base.OnParametersSet(); + [Parameter] + public string Style { get; set; } // optional - _text = Action; - if (!string.IsNullOrEmpty(Text)) - { - _text = Text; - } + [Parameter] + public string IconName { get; set; } // optional - specifies an icon for the link - default is no icon - if (IconOnly && !string.IsNullOrEmpty(IconName)) - { - _text = string.Empty; - } + [Parameter] + public bool IconOnly { get; set; } // optional - specifies only icon in link - if (!string.IsNullOrEmpty(Parameters)) - { - _parameters = Parameters; - } + protected override void OnParametersSet() + { + base.OnParametersSet(); - if (!string.IsNullOrEmpty(Class)) - { - _classname = Class; - } + _text = Action; + if (!string.IsNullOrEmpty(Text)) + { + _text = Text; + } - if (!string.IsNullOrEmpty(Style)) - { - _style = Style; - } + if (IconOnly && !string.IsNullOrEmpty(IconName)) + { + _text = string.Empty; + } - if (!string.IsNullOrEmpty(EditMode)) - { - _editmode = bool.Parse(EditMode); - } + if (!string.IsNullOrEmpty(Parameters)) + { + _parameters = Parameters; + } - if (!string.IsNullOrEmpty(IconName)) - { - if (!IconName.Contains(" ")) - { - IconName = "oi oi-" + IconName; - } - _iconSpan = $"{(IconOnly ? "" : " ")}"; + if (!string.IsNullOrEmpty(Class)) + { + _classname = Class; + } - } + if (!string.IsNullOrEmpty(Style)) + { + _style = Style; + } - _text = Localize(nameof(Text), _text); - _url = EditUrl(Action, _parameters); + if (!string.IsNullOrEmpty(EditMode)) + { + _editmode = bool.Parse(EditMode); + } + + if (!string.IsNullOrEmpty(IconName)) + { + if (!IconName.Contains(" ")) + { + IconName = "oi oi-" + IconName; + } + _iconSpan = $"{(IconOnly ? "" : " ")}"; + } + + _permissions = (string.IsNullOrEmpty(Permissions)) ? ModuleState.Permissions : Permissions; + _text = Localize(nameof(Text), _text); + _url = (ModuleId == -1) ? EditUrl(Action, _parameters) : EditUrl(ModuleId, Action, _parameters); _authorized = IsAuthorized(); } @@ -136,10 +153,10 @@ authorized = true; break; case SecurityAccessLevel.View: - authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, ModuleState.Permissions); + authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, _permissions); break; case SecurityAccessLevel.Edit: - authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, ModuleState.Permissions); + authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, _permissions); break; case SecurityAccessLevel.Admin: authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin); diff --git a/Oqtane.Client/Modules/Controls/Pager.razor b/Oqtane.Client/Modules/Controls/Pager.razor index fec95246..40dc54ca 100644 --- a/Oqtane.Client/Modules/Controls/Pager.razor +++ b/Oqtane.Client/Modules/Controls/Pager.razor @@ -4,7 +4,7 @@ @if (ItemList != null) { - @if (Toolbar == "Top" && _pages > 0 && Items.Count() > _maxItems) + @if ((Toolbar == "Top" || Toolbar == "Both") && _pages > 0 && Items.Count() > _maxItems) {
  • @@ -101,7 +101,7 @@ }
} - @if (Toolbar == "Bottom" && _pages > 0 && Items.Count() > _maxItems) + @if ((Toolbar == "Bottom" || Toolbar == "Both") && _pages > 0 && Items.Count() > _maxItems) {
  • @@ -164,7 +164,7 @@ public string Format { get; set; } // Table or Grid [Parameter] - public string Toolbar { get; set; } // Top or Bottom + public string Toolbar { get; set; } // Top, Bottom or Both [Parameter] public RenderFragment Header { get; set; } = null; diff --git a/Oqtane.Client/Modules/Controls/RichTextEditor.razor b/Oqtane.Client/Modules/Controls/RichTextEditor.razor index 793761f5..82afff0c 100644 --- a/Oqtane.Client/Modules/Controls/RichTextEditor.razor +++ b/Oqtane.Client/Modules/Controls/RichTextEditor.razor @@ -115,24 +115,24 @@ public override List Resources => new List() { - new Resource { ResourceType = ResourceType.Script, Bundle = "Quill", Url = "js/quill1.3.6.min.js" }, + new Resource { ResourceType = ResourceType.Script, Bundle = "Quill", Url = "js/quill1.3.7.min.js" }, new Resource { ResourceType = ResourceType.Script, Bundle = "Quill", Url = "js/quill-blot-formatter.min.js" }, new Resource { ResourceType = ResourceType.Script, Bundle = "Quill", Url = "js/quill-interop.js" } }; - protected override void OnInitialized() + protected override void OnParametersSet() { _content = Content; // raw HTML } protected override async Task OnAfterRenderAsync(bool firstRender) { - if (firstRender) + var interop = new RichTextEditorInterop(JSRuntime); + + if (firstRender) { await base.OnAfterRenderAsync(firstRender); - var interop = new RichTextEditorInterop(JSRuntime); - await interop.CreateEditor( _editorElement, _toolBar, @@ -140,14 +140,15 @@ Placeholder, Theme, DebugLevel); - - await interop.LoadEditorContent(_editorElement, Content); - - _content = Content; // raw HTML - - // preserve a copy of the rich text content ( Quill sanitizes content so we need to retrieve it from the editor ) - _original = await interop.GetHtml(_editorElement); } + + await interop.LoadEditorContent(_editorElement, Content); + + _content = Content; // raw HTML + + // preserve a copy of the rich text content ( Quill sanitizes content so we need to retrieve it from the editor ) + _original = await interop.GetHtml(_editorElement); + } public void CloseFileManager() diff --git a/Oqtane.Client/Modules/Controls/TabPanel.razor b/Oqtane.Client/Modules/Controls/TabPanel.razor index 4fd1cf6a..de41b392 100644 --- a/Oqtane.Client/Modules/Controls/TabPanel.razor +++ b/Oqtane.Client/Modules/Controls/TabPanel.razor @@ -40,6 +40,10 @@ else { Heading = Localize(nameof(Name), Name); } + else + { + Heading = Localize(nameof(Heading), Heading); + } } public string DisplayHeading() diff --git a/Oqtane.Client/Modules/Controls/TabStrip.razor b/Oqtane.Client/Modules/Controls/TabStrip.razor index 2d423818..b9f24956 100644 --- a/Oqtane.Client/Modules/Controls/TabStrip.razor +++ b/Oqtane.Client/Modules/Controls/TabStrip.razor @@ -43,16 +43,12 @@ [Parameter] public bool Refresh { get; set; } // optional - used in scenarios where TabPanels are added/removed dynamically within a parent form. ActiveTab may need to be reset as well when this property is used. - protected override void OnInitialized() + protected override void OnParametersSet() { if (PageState.QueryString.ContainsKey("tab")) { ActiveTab = PageState.QueryString["tab"]; } - } - - protected override void OnParametersSet() - { if (_tabPanels == null || Refresh) { _tabPanels = new List(); diff --git a/Oqtane.Client/Modules/HtmlText/Edit.razor b/Oqtane.Client/Modules/HtmlText/Edit.razor index bc94cebc..9c3191a0 100644 --- a/Oqtane.Client/Modules/HtmlText/Edit.razor +++ b/Oqtane.Client/Modules/HtmlText/Edit.razor @@ -30,8 +30,8 @@ public override List Resources => new List() { new Resource { ResourceType = ResourceType.Stylesheet, Url = ModulePath() + "Module.css" }, - new Resource { ResourceType = ResourceType.Stylesheet, Url = "css/quill/quill1.3.6.bubble.css" }, - new Resource { ResourceType = ResourceType.Stylesheet, Url = "css/quill/quill1.3.6.snow.css" } + new Resource { ResourceType = ResourceType.Stylesheet, Url = "css/quill/quill1.3.7.bubble.css" }, + new Resource { ResourceType = ResourceType.Stylesheet, Url = "css/quill/quill1.3.7.snow.css" } }; private RichTextEditor RichTextEditorHtml; @@ -65,8 +65,8 @@ } catch (Exception ex) { - await logger.LogError(ex, "An Error Occurred Loading Html/Text Content. " + ex.Message); - AddModuleMessage(ex.Message, MessageType.Error); + await logger.LogError(ex, "Error Loading Content {Error}", ex.Message); + AddModuleMessage(Localizer["Error.Content.Load"], MessageType.Error); } } @@ -91,7 +91,7 @@ await HtmlTextService.AddHtmlTextAsync(htmltext); } - await logger.LogInformation("Html/Text Content Saved {HtmlText}", htmltext); + await logger.LogInformation("Content Saved {HtmlText}", htmltext); NavigationManager.NavigateTo(NavigateUrl()); } catch (Exception ex) diff --git a/Oqtane.Client/Modules/HtmlText/Index.razor b/Oqtane.Client/Modules/HtmlText/Index.razor index 57a95cef..4428d033 100644 --- a/Oqtane.Client/Modules/HtmlText/Index.razor +++ b/Oqtane.Client/Modules/HtmlText/Index.razor @@ -15,16 +15,16 @@ } @code { - public override List Resources => new List() + public override List Resources => new List() { new Resource { ResourceType = ResourceType.Stylesheet, Url = ModulePath() + "Module.css" } }; - private string content = ""; + private string content = ""; - protected override async Task OnParametersSetAsync() - { - try + protected override async Task OnParametersSetAsync() + { + try { var htmltext = await HtmlTextService.GetHtmlTextAsync(ModuleState.ModuleId); if (htmltext != null) @@ -35,8 +35,8 @@ } catch (Exception ex) { - await logger.LogError(ex, "An Error Occurred Loading Html/Text Content. " + ex.Message); - AddModuleMessage(ex.Message, MessageType.Error); + await logger.LogError(ex, "Error Loading Content {Error}", ex.Message); + AddModuleMessage(Localizer["Error.Content.Load"], MessageType.Error); } } } \ No newline at end of file diff --git a/Oqtane.Client/Modules/HtmlText/ModuleInfo.cs b/Oqtane.Client/Modules/HtmlText/ModuleInfo.cs index fbe6cf9e..36e674fe 100644 --- a/Oqtane.Client/Modules/HtmlText/ModuleInfo.cs +++ b/Oqtane.Client/Modules/HtmlText/ModuleInfo.cs @@ -1,7 +1,9 @@ +using Oqtane.Documentation; using Oqtane.Models; namespace Oqtane.Modules.HtmlText { + [PrivateApi("Mark HtmlText classes as private, since it's not very useful in the public docs")] public class ModuleInfo : IModule { public ModuleDefinition ModuleDefinition => new ModuleDefinition diff --git a/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs b/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs index 73776394..85583f7e 100644 --- a/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs +++ b/Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs @@ -1,10 +1,12 @@ using System.Net.Http; using System.Threading.Tasks; +using Oqtane.Documentation; using Oqtane.Services; using Oqtane.Shared; namespace Oqtane.Modules.HtmlText.Services { + [PrivateApi("Mark HtmlText classes as private, since it's not very useful in the public docs")] public class HtmlTextService : ServiceBase, IHtmlTextService, IService { public HtmlTextService(HttpClient http, SiteState siteState) : base(http, siteState) {} diff --git a/Oqtane.Client/Modules/HtmlText/Services/IHtmlTextService.cs b/Oqtane.Client/Modules/HtmlText/Services/IHtmlTextService.cs index c663882a..80d725a9 100644 --- a/Oqtane.Client/Modules/HtmlText/Services/IHtmlTextService.cs +++ b/Oqtane.Client/Modules/HtmlText/Services/IHtmlTextService.cs @@ -1,9 +1,11 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Threading.Tasks; +using Oqtane.Documentation; using Oqtane.Modules.HtmlText.Models; namespace Oqtane.Modules.HtmlText.Services { + [PrivateApi("Mark HtmlText classes as private, since it's not very useful in the public docs")] public interface IHtmlTextService { Task GetHtmlTextAsync(int ModuleId); diff --git a/Oqtane.Client/Modules/ModuleBase.cs b/Oqtane.Client/Modules/ModuleBase.cs index 5691a4f2..30adc2a1 100644 --- a/Oqtane.Client/Modules/ModuleBase.cs +++ b/Oqtane.Client/Modules/ModuleBase.cs @@ -136,7 +136,12 @@ namespace Oqtane.Modules public string ImageUrl(int fileid, int width, int height, string mode) { - return Utilities.ImageUrl(PageState.Alias, fileid, width, height, mode); + return ImageUrl(fileid, width, height, mode, 0); + } + + public string ImageUrl(int fileid, int width, int height, string mode, int rotate) + { + return Utilities.ImageUrl(PageState.Alias, fileid, width, height, mode, rotate); } public virtual Dictionary GetUrlParameters(string parametersTemplate = "") diff --git a/Oqtane.Client/Oqtane.Client.csproj b/Oqtane.Client/Oqtane.Client.csproj index 21f56ced..a2366502 100644 --- a/Oqtane.Client/Oqtane.Client.csproj +++ b/Oqtane.Client/Oqtane.Client.csproj @@ -5,7 +5,7 @@ Exe 3.0 Debug;Release - 3.0.0 + 3.0.1 Oqtane Shaun Walker .NET Foundation @@ -13,7 +13,7 @@ .NET Foundation https://www.oqtane.org https://github.com/oqtane/oqtane.framework/blob/dev/LICENSE - https://github.com/oqtane/oqtane.framework/releases/tag/v3.0.0 + https://github.com/oqtane/oqtane.framework/releases/tag/v3.0.1 https://github.com/oqtane/oqtane.framework Git Oqtane @@ -34,11 +34,6 @@ - - - - - diff --git a/Oqtane.Client/Program.cs b/Oqtane.Client/Program.cs index 68bcc7a2..162b9e2a 100644 --- a/Oqtane.Client/Program.cs +++ b/Oqtane.Client/Program.cs @@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.DependencyInjection; using Microsoft.JSInterop; +using Oqtane.Documentation; using Oqtane.Modules; using Oqtane.Services; using Oqtane.Shared; @@ -19,6 +20,7 @@ using Oqtane.UI; namespace Oqtane.Client { + [PrivateApi("Mark Entry-Program as private, since it's not very useful in the public docs")] public class Program { public static async Task Main(string[] args) diff --git a/Oqtane.Client/Resources/Modules/Admin/Files/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Files/Index.resx index 68f20205..949ce2a3 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Files/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Files/Index.resx @@ -159,4 +159,10 @@ Type + + Delete + + + Upload Files + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Jobs/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Jobs/Index.resx index 3a89c54a..a3da62e9 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Jobs/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Jobs/Index.resx @@ -168,4 +168,13 @@ Stop + + Delete + + + Edit + + + Log + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Languages/Add.resx b/Oqtane.Client/Resources/Modules/Admin/Languages/Add.resx index deff0806..54d9910a 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Languages/Add.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Languages/Add.resx @@ -153,4 +153,19 @@ No Translations Match The Criteria Provided Or Package Service Is Disabled + + Download + + + Upload one or more translations. Once they are uploaded click Install to complete the installation. + + + Upload Language + + + Manage + + + Upload + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Languages/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Languages/Index.resx index e22197f3..6b8e887f 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Languages/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Languages/Index.resx @@ -141,4 +141,7 @@ Default + + Delete + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Logs/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Logs/Index.resx index 116d0c24..84d9994a 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Logs/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Logs/Index.resx @@ -189,4 +189,7 @@ Create + + Details + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Add.resx b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Add.resx index c7abab63..6307e0d7 100644 --- a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Add.resx +++ b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Add.resx @@ -138,4 +138,10 @@ No Modules Match The Criteria Provided Or Package Service Is Disabled + + Download + + + Upload + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx index 1d5b2e3f..73e0a543 100644 --- a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx +++ b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx @@ -183,7 +183,16 @@ Runtimes: - + Definition + + Information + + + Permissions + + + Information + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Index.resx b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Index.resx index 839a8fc4..834bbe33 100644 --- a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Index.resx @@ -144,4 +144,10 @@ Delete Module + + In Use + + + Edit + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx b/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx index 55987b3c..e6838ba4 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx @@ -1,4 +1,4 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Redirect To: + + + A fully qualified Url where the user will be redirected + + + A fully qualified Url for this site + + + Url: + + + Error Saving Url Mapping + + + Please Provide All Required Information + + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/UrlMappings/Edit.resx b/Oqtane.Client/Resources/Modules/Admin/UrlMappings/Edit.resx new file mode 100644 index 00000000..400ba0d5 --- /dev/null +++ b/Oqtane.Client/Resources/Modules/Admin/UrlMappings/Edit.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Redirect To: + + + A fully qualified Url where the user will be redirected + + + A fully qualified Url for this site + + + Url: + + + Error Loading Url Mapping + + + Error Saving Url Mapping + + + Please Provide All Required Information + + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/UrlMappings/Index.resx b/Oqtane.Client/Resources/Modules/Admin/UrlMappings/Index.resx new file mode 100644 index 00000000..4ee3cbfe --- /dev/null +++ b/Oqtane.Client/Resources/Modules/Admin/UrlMappings/Index.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Are You Sure You Wish To Delete {0}? + + + Add Url Mapping + + + Delete Url Mapping + + + Requested + + + Requests + + + Mapped Urls + + + Broken Urls + + + Specify if broken Urls should be captured automatically and saved in Url Mappings + + + Capture Broken Urls? + + + Error Saving Settings + + + Settings + + + Settings Saved Successfully + + + Urls + + + Url + + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Users/Edit.resx b/Oqtane.Client/Resources/Modules/Admin/Users/Edit.resx index 5e19826c..86f18fb8 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Users/Edit.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Users/Edit.resx @@ -177,4 +177,10 @@ Username: + + Identity + + + Profile + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Users/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Users/Index.resx index bb13df9e..70155229 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Users/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Users/Index.resx @@ -126,4 +126,31 @@ Delete User + + Do you want the users to be able to register for an account on the site + + + Allow User Registration? + + + Error Saving Settings + + + Settings + + + Settings Saved Successfully + + + Users + + + Delete + + + Edit + + + Roles + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Users/Roles.resx b/Oqtane.Client/Resources/Modules/Admin/Users/Roles.resx index bcce499f..f842dba1 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Users/Roles.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Users/Roles.resx @@ -177,4 +177,7 @@ Expiry + + Delete + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Visitors/Detail.resx b/Oqtane.Client/Resources/Modules/Admin/Visitors/Detail.resx new file mode 100644 index 00000000..d392f0b2 --- /dev/null +++ b/Oqtane.Client/Resources/Modules/Admin/Visitors/Detail.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + IP Address: + + + The last recorded IP address for this visitor + + + The last recorded language for this visitor + + + Language: + + + Error Loading Visitor + + + The frst recorded date/time when the visitor visited the site + + + Created: + + + The last recorded referrer for this visitor + + + Referrer: + + + The last recorded Url for this visitor + + + Url: + + + The last recorded user associated with this visitor + + + User: + + + The last recorded user agent for this visitor + + + User Agent: + + + The last recorded date/time when the visitor visited the site + + + Visited: + + + The total number of visits by this visitor all time + + + Visits: + + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Visitors/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Visitors/Index.resx new file mode 100644 index 00000000..7f305a74 --- /dev/null +++ b/Oqtane.Client/Resources/Modules/Admin/Visitors/Index.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Url + + + Visited + + + Visits + + + All Visitors + + + Past Day + + + Past Month + + + Past Week + + + Users Only + + + Language + + + Error Saving Settings + + + Settings + + + Settings Saved Successfully + + + Visitors + + + Specify if visitor tracking is enabled + + + Visitor Tracking Enabled? + + + IP + + + User + + + Created + + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/HtmlText/Edit.resx b/Oqtane.Client/Resources/Modules/HtmlText/Edit.resx index 0439bfae..e2eed7a2 100644 --- a/Oqtane.Client/Resources/Modules/HtmlText/Edit.resx +++ b/Oqtane.Client/Resources/Modules/HtmlText/Edit.resx @@ -117,7 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + An Error Occurred Loading Content + - Error Saving Content + An Error Occurred Saving Content \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/HtmlText/Index.resx b/Oqtane.Client/Resources/Modules/HtmlText/Index.resx index 7c534702..1e0f92e6 100644 --- a/Oqtane.Client/Resources/Modules/HtmlText/Index.resx +++ b/Oqtane.Client/Resources/Modules/HtmlText/Index.resx @@ -1,65 +1,65 @@  - + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + @@ -120,4 +120,7 @@ Edit + + An Error Occurred Loading Content + \ No newline at end of file diff --git a/Oqtane.Client/Resources/SharedResources.resx b/Oqtane.Client/Resources/SharedResources.resx index ce8bc2bb..5b8a3da4 100644 --- a/Oqtane.Client/Resources/SharedResources.resx +++ b/Oqtane.Client/Resources/SharedResources.resx @@ -318,4 +318,7 @@ Blazor WebAssembly + + Settings + \ No newline at end of file diff --git a/Oqtane.Client/Resources/UI/ModuleInstance.resx b/Oqtane.Client/Resources/UI/ModuleInstance.resx index 3ce75ee0..fc0994f2 100644 --- a/Oqtane.Client/Resources/UI/ModuleInstance.resx +++ b/Oqtane.Client/Resources/UI/ModuleInstance.resx @@ -1,4 +1,4 @@ - + - - + + @if (!string.IsNullOrEmpty(Model.PWAScript)) + { + + } + @Html.Raw(@Model.HeadResources) @(Html.AntiForgeryToken()) - +
    @@ -44,6 +46,10 @@ { } + @if (!string.IsNullOrEmpty(Model.PWAScript)) + { + @Model.PWAScript + } @Html.Raw(@Model.BodyResources) diff --git a/Oqtane.Server/Pages/_Host.cshtml.cs b/Oqtane.Server/Pages/_Host.cshtml.cs index 6fa559ca..8c878dc6 100644 --- a/Oqtane.Server/Pages/_Host.cshtml.cs +++ b/Oqtane.Server/Pages/_Host.cshtml.cs @@ -13,6 +13,11 @@ using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Configuration; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Antiforgery; +using Microsoft.AspNetCore.Http.Extensions; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Net.Http.Headers; +using Microsoft.AspNetCore.Http; +using System.Security.Claims; namespace Oqtane.Pages { @@ -24,8 +29,11 @@ namespace Oqtane.Pages private readonly ILanguageRepository _languages; private readonly IAntiforgery _antiforgery; private readonly ISiteRepository _sites; + private readonly IPageRepository _pages; + private readonly IUrlMappingRepository _urlMappings; + private readonly IVisitorRepository _visitors; - public HostModel(IConfiguration configuration, ITenantManager tenantManager, ILocalizationManager localizationManager, ILanguageRepository languages, IAntiforgery antiforgery, ISiteRepository sites) + public HostModel(IConfiguration configuration, ITenantManager tenantManager, ILocalizationManager localizationManager, ILanguageRepository languages, IAntiforgery antiforgery, ISiteRepository sites, IPageRepository pages, IUrlMappingRepository urlMappings, IVisitorRepository visitors) { _configuration = configuration; _tenantManager = tenantManager; @@ -33,15 +41,23 @@ namespace Oqtane.Pages _languages = languages; _antiforgery = antiforgery; _sites = sites; + _pages = pages; + _urlMappings = urlMappings; + _visitors = visitors; } public string AntiForgeryToken = ""; public string Runtime = "Server"; public RenderMode RenderMode = RenderMode.Server; + public int VisitorId = -1; public string HeadResources = ""; public string BodyResources = ""; + public string Title = ""; + public string FavIcon = "favicon.ico"; + public string PWAScript = ""; + public string ThemeType = ""; - public void OnGet() + public IActionResult OnGet() { AntiForgeryToken = _antiforgery.GetAndStoreTokens(HttpContext).RequestToken; @@ -54,14 +70,6 @@ namespace Oqtane.Pages { RenderMode = (RenderMode)Enum.Parse(typeof(RenderMode), _configuration.GetSection("RenderMode").Value, true); } - - var assemblies = AppDomain.CurrentDomain.GetOqtaneAssemblies(); - foreach (Assembly assembly in assemblies) - { - ProcessHostResources(assembly); - ProcessModuleControls(assembly); - ProcessThemeControls(assembly); - } // if framework is installed if (!string.IsNullOrEmpty(_configuration.GetConnectionString("DefaultConnection"))) @@ -69,6 +77,8 @@ namespace Oqtane.Pages var alias = _tenantManager.GetAlias(); if (alias != null) { + Route route = new Route(HttpContext.Request.GetEncodedUrl(), alias.Path); + var site = _sites.GetSite(alias.SiteId); if (site != null) { @@ -80,9 +90,84 @@ namespace Oqtane.Pages { RenderMode = (RenderMode)Enum.Parse(typeof(RenderMode), site.RenderMode, true); } + if (site.FaviconFileId != null) + { + FavIcon = Utilities.ContentUrl(alias, site.FaviconFileId.Value); + } + if (site.PwaIsEnabled && site.PwaAppIconFileId != null && site.PwaSplashIconFileId != null) + { + PWAScript = CreatePWAScript(alias, site, route); + } + Title = site.Name; + ThemeType = site.DefaultThemeType; + + if (site.VisitorTracking) + { + TrackVisitor(site.SiteId); + } + + var page = _pages.GetPage(route.PagePath, site.SiteId); + if (page != null) + { + // set page title + if (!string.IsNullOrEmpty(page.Title)) + { + Title = page.Title; + } + else + { + Title = Title + " - " + page.Name; + } + + // include theme resources + if (!string.IsNullOrEmpty(page.ThemeType)) + { + ThemeType = page.ThemeType; + } + } + else + { + // page does not exist + var url = route.SiteUrl + "/" + route.PagePath; + var urlMapping = _urlMappings.GetUrlMapping(site.SiteId, url); + if (urlMapping == null) + { + if (site.CaptureBrokenUrls) + { + urlMapping = new UrlMapping(); + urlMapping.SiteId = site.SiteId; + urlMapping.Url = url; + urlMapping.MappedUrl = ""; + urlMapping.Requests = 1; + urlMapping.CreatedOn = DateTime.UtcNow; + urlMapping.RequestedOn = DateTime.UtcNow; + _urlMappings.AddUrlMapping(urlMapping); + } + } + else + { + urlMapping.Requests += 1; + urlMapping.RequestedOn = DateTime.UtcNow; + _urlMappings.UpdateUrlMapping(urlMapping); + + if (!string.IsNullOrEmpty(urlMapping.MappedUrl)) + { + return RedirectPermanent(urlMapping.MappedUrl); + } + } + } } - // if culture not specified + // include global resources + var assemblies = AppDomain.CurrentDomain.GetOqtaneAssemblies(); + foreach (Assembly assembly in assemblies) + { + ProcessHostResources(assembly); + ProcessModuleControls(assembly); + ProcessThemeControls(assembly); + } + + // set culture if not specified if (HttpContext.Request.Cookies[CookieRequestCultureProvider.DefaultCookieName] == null) { // set default language for site if the culture is not supported @@ -99,6 +184,117 @@ namespace Oqtane.Pages } } } + return Page(); + } + + private void TrackVisitor(int SiteId) + { + // get request attributes + string ip = HttpContext.Connection.RemoteIpAddress.ToString(); + string useragent = Request.Headers[HeaderNames.UserAgent]; + string language = Request.Headers[HeaderNames.AcceptLanguage]; + if (language.Contains(",")) + { + language = language.Substring(0, language.IndexOf(",")); + } + string url = Request.GetEncodedUrl(); + string referrer = Request.Headers[HeaderNames.Referer]; + int? userid = null; + if (User.HasClaim(item => item.Type == ClaimTypes.PrimarySid)) + { + userid = int.Parse(User.Claims.First(item => item.Type == ClaimTypes.PrimarySid).Value); + } + + var VisitorCookie = "APP_VISITOR_" + SiteId.ToString(); + if (!int.TryParse(Request.Cookies[VisitorCookie], out VisitorId)) + { + var visitor = new Visitor(); + visitor.SiteId = SiteId; + visitor.IPAddress = ip; + visitor.UserAgent = useragent; + visitor.Language = language; + visitor.Url = url; + visitor.Referrer = referrer; + visitor.UserId = userid; + visitor.Visits = 1; + visitor.CreatedOn = DateTime.UtcNow; + visitor.VisitedOn = DateTime.UtcNow; + visitor = _visitors.AddVisitor(visitor); + + Response.Cookies.Append( + VisitorCookie, + visitor.VisitorId.ToString(), + new CookieOptions() + { + Expires = DateTimeOffset.UtcNow.AddYears(1), + IsEssential = true + } + ); + } + else + { + var visitor = _visitors.GetVisitor(VisitorId); + if (visitor != null) + { + visitor.IPAddress = ip; + visitor.UserAgent = useragent; + visitor.Language = language; + visitor.Url = url; + if (!string.IsNullOrEmpty(referrer)) + { + visitor.Referrer = referrer; + } + if (userid != null) + { + visitor.UserId = userid; + } + visitor.Visits += 1; + visitor.VisitedOn = DateTime.UtcNow; + _visitors.UpdateVisitor(visitor); + } + else + { + Response.Cookies.Delete(VisitorCookie); + } + } + } + + private string CreatePWAScript(Alias alias, Site site, Route route) + { + return + ""; } private void ProcessHostResources(Assembly assembly) @@ -149,7 +345,7 @@ namespace Oqtane.Pages { foreach (var resource in obj.Resources) { - if (resource.Declaration == ResourceDeclaration.Global) + if (resource.Declaration == ResourceDeclaration.Global || (Utilities.GetFullTypeName(type.AssemblyQualifiedName) == ThemeType && resource.ResourceType == ResourceType.Stylesheet)) { ProcessResource(resource); } @@ -164,7 +360,8 @@ namespace Oqtane.Pages case ResourceType.Stylesheet: if (!HeadResources.Contains(resource.Url, StringComparison.OrdinalIgnoreCase)) { - HeadResources += "" + Environment.NewLine; + var id = (resource.Declaration == ResourceDeclaration.Global) ? "" : "id=\"app-stylesheet-" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-00\" "; + HeadResources += "" + Environment.NewLine; } break; case ResourceType.Script: diff --git a/Oqtane.Server/Program.cs b/Oqtane.Server/Program.cs index 14a64abc..49a5542a 100644 --- a/Oqtane.Server/Program.cs +++ b/Oqtane.Server/Program.cs @@ -7,9 +7,11 @@ using Oqtane.Infrastructure; using System.Diagnostics; using Microsoft.Extensions.Logging; using Oqtane.Shared; +using Oqtane.Documentation; namespace Oqtane.Server { + [PrivateApi("Mark Entry-Program as private, since it's not very useful in the public docs")] public class Program { public static void Main(string[] args) diff --git a/Oqtane.Server/Repository/Context/MasterDBContext.cs b/Oqtane.Server/Repository/Context/MasterDBContext.cs index a7874100..58b80d59 100644 --- a/Oqtane.Server/Repository/Context/MasterDBContext.cs +++ b/Oqtane.Server/Repository/Context/MasterDBContext.cs @@ -70,6 +70,7 @@ namespace Oqtane.Repository public virtual DbSet ModuleDefinition { get; set; } public virtual DbSet Job { get; set; } public virtual DbSet JobLog { get; set; } + public virtual DbSet Setting { get; set; } public override int SaveChanges() { diff --git a/Oqtane.Server/Repository/Context/TenantDBContext.cs b/Oqtane.Server/Repository/Context/TenantDBContext.cs index ca8c822d..dc2c219b 100644 --- a/Oqtane.Server/Repository/Context/TenantDBContext.cs +++ b/Oqtane.Server/Repository/Context/TenantDBContext.cs @@ -29,5 +29,7 @@ namespace Oqtane.Repository public virtual DbSet Folder { get; set; } public virtual DbSet File { get; set; } public virtual DbSet Language { get; set; } + public virtual DbSet Visitor { get; set; } + public virtual DbSet UrlMapping { get; set; } } } diff --git a/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs b/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs index b38d5b62..89f04da7 100644 --- a/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs +++ b/Oqtane.Server/Repository/Interfaces/ISettingRepository.cs @@ -9,7 +9,7 @@ namespace Oqtane.Repository IEnumerable GetSettings(string entityName, int entityId); Setting AddSetting(Setting setting); Setting UpdateSetting(Setting setting); - Setting GetSetting(int settingId); - void DeleteSetting(int settingId); + Setting GetSetting(string entityName, int settingId); + void DeleteSetting(string entityName, int settingId); } } diff --git a/Oqtane.Server/Repository/Interfaces/IUrlMappingRepository.cs b/Oqtane.Server/Repository/Interfaces/IUrlMappingRepository.cs new file mode 100644 index 00000000..f954d87b --- /dev/null +++ b/Oqtane.Server/Repository/Interfaces/IUrlMappingRepository.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using Oqtane.Models; + +namespace Oqtane.Repository +{ + public interface IUrlMappingRepository + { + IEnumerable GetUrlMappings(int siteId, bool isMapped); + UrlMapping AddUrlMapping(UrlMapping urlMapping); + UrlMapping UpdateUrlMapping(UrlMapping urlMapping); + UrlMapping GetUrlMapping(int urlMappingId); + UrlMapping GetUrlMapping(int urlMappingId, bool tracking); + UrlMapping GetUrlMapping(int siteId, string url); + void DeleteUrlMapping(int urlMappingId); + } +} diff --git a/Oqtane.Server/Repository/Interfaces/IVisitorRepository.cs b/Oqtane.Server/Repository/Interfaces/IVisitorRepository.cs new file mode 100644 index 00000000..d50ceec2 --- /dev/null +++ b/Oqtane.Server/Repository/Interfaces/IVisitorRepository.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using Oqtane.Models; + +namespace Oqtane.Repository +{ + public interface IVisitorRepository + { + IEnumerable GetVisitors(int siteId, DateTime fromDate); + Visitor AddVisitor(Visitor visitor); + Visitor UpdateVisitor(Visitor visitor); + Visitor GetVisitor(int visitorId); + void DeleteVisitor(int visitorId); + } +} diff --git a/Oqtane.Server/Repository/SettingRepository.cs b/Oqtane.Server/Repository/SettingRepository.cs index 34586f6e..4d1e00b6 100644 --- a/Oqtane.Server/Repository/SettingRepository.cs +++ b/Oqtane.Server/Repository/SettingRepository.cs @@ -2,53 +2,100 @@ using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; using Oqtane.Models; +using Oqtane.Shared; namespace Oqtane.Repository { public class SettingRepository : ISettingRepository { - private TenantDBContext _db; + private TenantDBContext _tenant; + private MasterDBContext _master; - public SettingRepository(TenantDBContext context) + public SettingRepository(TenantDBContext tenant, MasterDBContext master) { - _db = context; + _tenant = tenant; + _master = master; } public IEnumerable GetSettings(string entityName) { - return _db.Setting.Where(item => item.EntityName == entityName); + if (IsMaster(entityName)) + { + return _master.Setting.Where(item => item.EntityName == entityName); + } + else + { + return _tenant.Setting.Where(item => item.EntityName == entityName); + } } public IEnumerable GetSettings(string entityName, int entityId) { - return _db.Setting.Where(item => item.EntityName == entityName) - .Where(item => item.EntityId == entityId); + var settings = GetSettings(entityName); + return settings.Where(item => item.EntityId == entityId); } public Setting AddSetting(Setting setting) { - _db.Setting.Add(setting); - _db.SaveChanges(); + if (IsMaster(setting.EntityName)) + { + _master.Setting.Add(setting); + _master.SaveChanges(); + } + else + { + _tenant.Setting.Add(setting); + _tenant.SaveChanges(); + } return setting; } public Setting UpdateSetting(Setting setting) { - _db.Entry(setting).State = EntityState.Modified; - _db.SaveChanges(); + if (IsMaster(setting.EntityName)) + { + _master.Entry(setting).State = EntityState.Modified; + _master.SaveChanges(); + } + else + { + _tenant.Entry(setting).State = EntityState.Modified; + _tenant.SaveChanges(); + } return setting; } - public Setting GetSetting(int settingId) + public Setting GetSetting(string entityName, int settingId) { - return _db.Setting.Find(settingId); + if (IsMaster(entityName)) + { + return _master.Setting.Find(settingId); + } + else + { + return _tenant.Setting.Find(settingId); + } } - public void DeleteSetting(int settingId) + public void DeleteSetting(string entityName, int settingId) { - Setting setting = _db.Setting.Find(settingId); - _db.Setting.Remove(setting); - _db.SaveChanges(); + if (IsMaster(entityName)) + { + Setting setting = _master.Setting.Find(settingId); + _master.Setting.Remove(setting); + _master.SaveChanges(); + } + else + { + Setting setting = _tenant.Setting.Find(settingId); + _tenant.Setting.Remove(setting); + _tenant.SaveChanges(); + } + } + + private bool IsMaster(string EntityName) + { + return (EntityName == EntityNames.ModuleDefinition || EntityName == EntityNames.Host); } } } diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs index bbf8c856..0fcf9cef 100644 --- a/Oqtane.Server/Repository/SiteRepository.cs +++ b/Oqtane.Server/Repository/SiteRepository.cs @@ -615,13 +615,70 @@ namespace Oqtane.Repository } } }); + pageTemplates.Add(new PageTemplate + { + Name = "Url Mappings", + Parent = "Admin", + Order = 15, + Path = "admin/urlmappings", + Icon = Icons.LinkBroken, + IsNavigation = true, + IsPersonalizable = false, + PagePermissions = new List + { + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) + }.EncodePermissions(), + PageTemplateModules = new List + { + new PageTemplateModule + { + ModuleDefinitionName = typeof(Oqtane.Modules.Admin.UrlMappings.Index).ToModuleDefinitionName(), Title = "Url Mappings", Pane = PaneNames.Admin, + ModulePermissions = new List + { + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) + }.EncodePermissions(), + Content = "" + } + } + }); + + pageTemplates.Add(new PageTemplate + { + Name = "Visitor Management", + Parent = "Admin", + Order = 17, + Path = "admin/visitors", + Icon = Icons.Eye, + IsNavigation = true, + IsPersonalizable = false, + PagePermissions = new List + { + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) + }.EncodePermissions(), + PageTemplateModules = new List + { + new PageTemplateModule + { + ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Visitors.Index).ToModuleDefinitionName(), Title = "Visitor Management", Pane = PaneNames.Admin, + ModulePermissions = new List + { + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) + }.EncodePermissions(), + Content = "" + } + } + }); // host pages pageTemplates.Add(new PageTemplate { Name = "Event Log", Parent = "Admin", - Order = 15, + Order = 19, Path = "admin/log", Icon = Icons.MagnifyingGlass, IsNavigation = false, @@ -649,7 +706,7 @@ namespace Oqtane.Repository { Name = "Site Management", Parent = "Admin", - Order = 17, + Order = 21, Path = "admin/sites", Icon = Icons.Globe, IsNavigation = false, @@ -677,7 +734,7 @@ namespace Oqtane.Repository { Name = "Module Management", Parent = "Admin", - Order = 19, + Order = 23, Path = "admin/modules", Icon = Icons.Browser, IsNavigation = false, @@ -705,7 +762,7 @@ namespace Oqtane.Repository { Name = "Theme Management", Parent = "Admin", - Order = 21, + Order = 25, Path = "admin/themes", Icon = Icons.Brush, IsNavigation = false, @@ -733,7 +790,7 @@ namespace Oqtane.Repository { Name = "Language Management", Parent = "Admin", - Order = 23, + Order = 27, Path = "admin/languages", Icon = Icons.Text, IsNavigation = false, @@ -765,7 +822,7 @@ namespace Oqtane.Repository { Name = "Scheduled Jobs", Parent = "Admin", - Order = 25, + Order = 29, Path = "admin/jobs", Icon = Icons.Timer, IsNavigation = false, @@ -793,7 +850,7 @@ namespace Oqtane.Repository { Name = "Sql Management", Parent = "Admin", - Order = 27, + Order = 31, Path = "admin/sql", Icon = Icons.Spreadsheet, IsNavigation = false, @@ -821,7 +878,7 @@ namespace Oqtane.Repository { Name = "System Info", Parent = "Admin", - Order = 29, + Order = 33, Path = "admin/system", Icon = Icons.MedicalCross, IsNavigation = false, @@ -849,7 +906,7 @@ namespace Oqtane.Repository { Name = "System Update", Parent = "Admin", - Order = 31, + Order = 35, Path = "admin/update", Icon = Icons.Aperture, IsNavigation = false, diff --git a/Oqtane.Server/Repository/UrlMappingRepository.cs b/Oqtane.Server/Repository/UrlMappingRepository.cs new file mode 100644 index 00000000..306d8f69 --- /dev/null +++ b/Oqtane.Server/Repository/UrlMappingRepository.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.EntityFrameworkCore; +using Oqtane.Models; + +namespace Oqtane.Repository +{ + public class UrlMappingRepository : IUrlMappingRepository + { + private TenantDBContext _db; + + public UrlMappingRepository(TenantDBContext context) + { + _db = context; + } + + public IEnumerable GetUrlMappings(int siteId, bool isMapped) + { + if (isMapped) + { + return _db.UrlMapping.Where(item => item.SiteId == siteId && !string.IsNullOrEmpty(item.MappedUrl)).Take(200); + } + else + { + return _db.UrlMapping.Where(item => item.SiteId == siteId && string.IsNullOrEmpty(item.MappedUrl)).Take(200); + } + } + + public UrlMapping AddUrlMapping(UrlMapping urlMapping) + { + _db.UrlMapping.Add(urlMapping); + _db.SaveChanges(); + return urlMapping; + } + + public UrlMapping UpdateUrlMapping(UrlMapping urlMapping) + { + _db.Entry(urlMapping).State = EntityState.Modified; + _db.SaveChanges(); + return urlMapping; + } + + public UrlMapping GetUrlMapping(int urlMappingId) + { + return GetUrlMapping(urlMappingId, true); + } + + public UrlMapping GetUrlMapping(int urlMappingId, bool tracking) + { + if (tracking) + { + return _db.UrlMapping.Find(urlMappingId); + } + else + { + return _db.UrlMapping.AsNoTracking().FirstOrDefault(item => item.UrlMappingId == urlMappingId); + } + } + + public UrlMapping GetUrlMapping(int siteId, string url) + { + return _db.UrlMapping.Where(item => item.SiteId == siteId && item.Url == url).FirstOrDefault(); + } + + public void DeleteUrlMapping(int urlMappingId) + { + UrlMapping urlMapping = _db.UrlMapping.Find(urlMappingId); + _db.UrlMapping.Remove(urlMapping); + _db.SaveChanges(); + } + } +} diff --git a/Oqtane.Server/Repository/VisitorRepository.cs b/Oqtane.Server/Repository/VisitorRepository.cs new file mode 100644 index 00000000..254c48e7 --- /dev/null +++ b/Oqtane.Server/Repository/VisitorRepository.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.EntityFrameworkCore; +using Oqtane.Models; + +namespace Oqtane.Repository +{ + public class VisitorRepository : IVisitorRepository + { + private TenantDBContext _db; + + public VisitorRepository(TenantDBContext context) + { + _db = context; + } + + public IEnumerable GetVisitors(int siteId, DateTime fromDate) + { + return _db.Visitor.AsNoTracking() + .Include(item => item.User) // eager load users + .Where(item => item.SiteId == siteId && item.VisitedOn >= fromDate); + } + + public Visitor AddVisitor(Visitor visitor) + { + _db.Visitor.Add(visitor); + _db.SaveChanges(); + return visitor; + } + + public Visitor UpdateVisitor(Visitor visitor) + { + _db.Entry(visitor).State = EntityState.Modified; + _db.SaveChanges(); + return visitor; + } + + public Visitor GetVisitor(int visitorId) + { + return _db.Visitor.Find(visitorId); + } + + public void DeleteVisitor(int visitorId) + { + Visitor visitor = _db.Visitor.Find(visitorId); + _db.Visitor.Remove(visitor); + _db.SaveChanges(); + } + } +} diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs index e82ee135..cf8bf6a2 100644 --- a/Oqtane.Server/Startup.cs +++ b/Oqtane.Server/Startup.cs @@ -117,6 +117,10 @@ namespace Oqtane .AddOqtaneApplicationParts() // register any Controllers from custom modules .ConfigureOqtaneMvc(); // any additional configuration from IStart classes. + services.AddSwaggerGen(options => + { + options.CustomSchemaIds(type => type.ToString()); // Handle SchemaId already used for different type + }); services.TryAddSwagger(_useSwagger); } diff --git a/Oqtane.Server/wwwroot/Packages/Oqtane.Database.MySQL.nupkg.bak b/Oqtane.Server/wwwroot/Packages/Oqtane.Database.MySQL.nupkg.bak index d3b195af..36fee374 100644 Binary files a/Oqtane.Server/wwwroot/Packages/Oqtane.Database.MySQL.nupkg.bak and b/Oqtane.Server/wwwroot/Packages/Oqtane.Database.MySQL.nupkg.bak differ diff --git a/Oqtane.Server/wwwroot/Packages/Oqtane.Database.PostgreSQL.nupkg.bak b/Oqtane.Server/wwwroot/Packages/Oqtane.Database.PostgreSQL.nupkg.bak index 17cea028..560e1632 100644 Binary files a/Oqtane.Server/wwwroot/Packages/Oqtane.Database.PostgreSQL.nupkg.bak and b/Oqtane.Server/wwwroot/Packages/Oqtane.Database.PostgreSQL.nupkg.bak differ diff --git a/Oqtane.Server/wwwroot/Packages/Oqtane.Database.SqlServer.nupkg.bak b/Oqtane.Server/wwwroot/Packages/Oqtane.Database.SqlServer.nupkg.bak index 794225dc..0bb676b2 100644 Binary files a/Oqtane.Server/wwwroot/Packages/Oqtane.Database.SqlServer.nupkg.bak and b/Oqtane.Server/wwwroot/Packages/Oqtane.Database.SqlServer.nupkg.bak differ diff --git a/Oqtane.Server/wwwroot/Packages/Oqtane.Database.Sqlite.nupkg.bak b/Oqtane.Server/wwwroot/Packages/Oqtane.Database.Sqlite.nupkg.bak index a39b3c2c..7c2768af 100644 Binary files a/Oqtane.Server/wwwroot/Packages/Oqtane.Database.Sqlite.nupkg.bak and b/Oqtane.Server/wwwroot/Packages/Oqtane.Database.Sqlite.nupkg.bak differ diff --git a/Oqtane.Server/wwwroot/css/quill/quill1.3.6.bubble.css b/Oqtane.Server/wwwroot/css/quill/quill1.3.6.bubble.css deleted file mode 100644 index 4336aa88..00000000 --- a/Oqtane.Server/wwwroot/css/quill/quill1.3.6.bubble.css +++ /dev/null @@ -1,952 +0,0 @@ -/*! - * Quill Editor v1.3.6 - * https://quilljs.com/ - * Copyright (c) 2014, Jason Chen - * Copyright (c) 2013, salesforce.com - */ -.ql-container { - box-sizing: border-box; - font-family: Helvetica, Arial, sans-serif; - font-size: 13px; - height: 100%; - margin: 0px; - position: relative; -} -.ql-container.ql-disabled .ql-tooltip { - visibility: hidden; -} -.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before { - pointer-events: none; -} -.ql-clipboard { - left: -100000px; - height: 1px; - overflow-y: hidden; - position: absolute; - top: 50%; -} -.ql-clipboard p { - margin: 0; - padding: 0; -} -.ql-editor { - box-sizing: border-box; - line-height: 1.42; - height: 100%; - outline: none; - overflow-y: auto; - padding: 12px 15px; - tab-size: 4; - -moz-tab-size: 4; - text-align: left; - white-space: pre-wrap; - word-wrap: break-word; -} -.ql-editor > * { - cursor: text; -} -.ql-editor p, -.ql-editor ol, -.ql-editor ul, -.ql-editor pre, -.ql-editor blockquote, -.ql-editor h1, -.ql-editor h2, -.ql-editor h3, -.ql-editor h4, -.ql-editor h5, -.ql-editor h6 { - margin: 0; - padding: 0; - counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; -} -.ql-editor ol, -.ql-editor ul { - padding-left: 1.5em; -} -.ql-editor ol > li, -.ql-editor ul > li { - list-style-type: none; -} -.ql-editor ul > li::before { - content: '\2022'; -} -.ql-editor ul[data-checked=true], -.ql-editor ul[data-checked=false] { - pointer-events: none; -} -.ql-editor ul[data-checked=true] > li *, -.ql-editor ul[data-checked=false] > li * { - pointer-events: all; -} -.ql-editor ul[data-checked=true] > li::before, -.ql-editor ul[data-checked=false] > li::before { - color: #777; - cursor: pointer; - pointer-events: all; -} -.ql-editor ul[data-checked=true] > li::before { - content: '\2611'; -} -.ql-editor ul[data-checked=false] > li::before { - content: '\2610'; -} -.ql-editor li::before { - display: inline-block; - white-space: nowrap; - width: 1.2em; -} -.ql-editor li:not(.ql-direction-rtl)::before { - margin-left: -1.5em; - margin-right: 0.3em; - text-align: right; -} -.ql-editor li.ql-direction-rtl::before { - margin-left: 0.3em; - margin-right: -1.5em; -} -.ql-editor ol li:not(.ql-direction-rtl), -.ql-editor ul li:not(.ql-direction-rtl) { - padding-left: 1.5em; -} -.ql-editor ol li.ql-direction-rtl, -.ql-editor ul li.ql-direction-rtl { - padding-right: 1.5em; -} -.ql-editor ol li { - counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; - counter-increment: list-0; -} -.ql-editor ol li:before { - content: counter(list-0, decimal) '. '; -} -.ql-editor ol li.ql-indent-1 { - counter-increment: list-1; -} -.ql-editor ol li.ql-indent-1:before { - content: counter(list-1, lower-alpha) '. '; -} -.ql-editor ol li.ql-indent-1 { - counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-2 { - counter-increment: list-2; -} -.ql-editor ol li.ql-indent-2:before { - content: counter(list-2, lower-roman) '. '; -} -.ql-editor ol li.ql-indent-2 { - counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-3 { - counter-increment: list-3; -} -.ql-editor ol li.ql-indent-3:before { - content: counter(list-3, decimal) '. '; -} -.ql-editor ol li.ql-indent-3 { - counter-reset: list-4 list-5 list-6 list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-4 { - counter-increment: list-4; -} -.ql-editor ol li.ql-indent-4:before { - content: counter(list-4, lower-alpha) '. '; -} -.ql-editor ol li.ql-indent-4 { - counter-reset: list-5 list-6 list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-5 { - counter-increment: list-5; -} -.ql-editor ol li.ql-indent-5:before { - content: counter(list-5, lower-roman) '. '; -} -.ql-editor ol li.ql-indent-5 { - counter-reset: list-6 list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-6 { - counter-increment: list-6; -} -.ql-editor ol li.ql-indent-6:before { - content: counter(list-6, decimal) '. '; -} -.ql-editor ol li.ql-indent-6 { - counter-reset: list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-7 { - counter-increment: list-7; -} -.ql-editor ol li.ql-indent-7:before { - content: counter(list-7, lower-alpha) '. '; -} -.ql-editor ol li.ql-indent-7 { - counter-reset: list-8 list-9; -} -.ql-editor ol li.ql-indent-8 { - counter-increment: list-8; -} -.ql-editor ol li.ql-indent-8:before { - content: counter(list-8, lower-roman) '. '; -} -.ql-editor ol li.ql-indent-8 { - counter-reset: list-9; -} -.ql-editor ol li.ql-indent-9 { - counter-increment: list-9; -} -.ql-editor ol li.ql-indent-9:before { - content: counter(list-9, decimal) '. '; -} -.ql-editor .ql-indent-1:not(.ql-direction-rtl) { - padding-left: 3em; -} -.ql-editor li.ql-indent-1:not(.ql-direction-rtl) { - padding-left: 4.5em; -} -.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right { - padding-right: 3em; -} -.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right { - padding-right: 4.5em; -} -.ql-editor .ql-indent-2:not(.ql-direction-rtl) { - padding-left: 6em; -} -.ql-editor li.ql-indent-2:not(.ql-direction-rtl) { - padding-left: 7.5em; -} -.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right { - padding-right: 6em; -} -.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right { - padding-right: 7.5em; -} -.ql-editor .ql-indent-3:not(.ql-direction-rtl) { - padding-left: 9em; -} -.ql-editor li.ql-indent-3:not(.ql-direction-rtl) { - padding-left: 10.5em; -} -.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right { - padding-right: 9em; -} -.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right { - padding-right: 10.5em; -} -.ql-editor .ql-indent-4:not(.ql-direction-rtl) { - padding-left: 12em; -} -.ql-editor li.ql-indent-4:not(.ql-direction-rtl) { - padding-left: 13.5em; -} -.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right { - padding-right: 12em; -} -.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right { - padding-right: 13.5em; -} -.ql-editor .ql-indent-5:not(.ql-direction-rtl) { - padding-left: 15em; -} -.ql-editor li.ql-indent-5:not(.ql-direction-rtl) { - padding-left: 16.5em; -} -.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right { - padding-right: 15em; -} -.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right { - padding-right: 16.5em; -} -.ql-editor .ql-indent-6:not(.ql-direction-rtl) { - padding-left: 18em; -} -.ql-editor li.ql-indent-6:not(.ql-direction-rtl) { - padding-left: 19.5em; -} -.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right { - padding-right: 18em; -} -.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right { - padding-right: 19.5em; -} -.ql-editor .ql-indent-7:not(.ql-direction-rtl) { - padding-left: 21em; -} -.ql-editor li.ql-indent-7:not(.ql-direction-rtl) { - padding-left: 22.5em; -} -.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right { - padding-right: 21em; -} -.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right { - padding-right: 22.5em; -} -.ql-editor .ql-indent-8:not(.ql-direction-rtl) { - padding-left: 24em; -} -.ql-editor li.ql-indent-8:not(.ql-direction-rtl) { - padding-left: 25.5em; -} -.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right { - padding-right: 24em; -} -.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right { - padding-right: 25.5em; -} -.ql-editor .ql-indent-9:not(.ql-direction-rtl) { - padding-left: 27em; -} -.ql-editor li.ql-indent-9:not(.ql-direction-rtl) { - padding-left: 28.5em; -} -.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right { - padding-right: 27em; -} -.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right { - padding-right: 28.5em; -} -.ql-editor .ql-video { - display: block; - max-width: 100%; -} -.ql-editor .ql-video.ql-align-center { - margin: 0 auto; -} -.ql-editor .ql-video.ql-align-right { - margin: 0 0 0 auto; -} -.ql-editor .ql-bg-black { - background-color: #000; -} -.ql-editor .ql-bg-red { - background-color: #e60000; -} -.ql-editor .ql-bg-orange { - background-color: #f90; -} -.ql-editor .ql-bg-yellow { - background-color: #ff0; -} -.ql-editor .ql-bg-green { - background-color: #008a00; -} -.ql-editor .ql-bg-blue { - background-color: #06c; -} -.ql-editor .ql-bg-purple { - background-color: #93f; -} -.ql-editor .ql-color-white { - color: #fff; -} -.ql-editor .ql-color-red { - color: #e60000; -} -.ql-editor .ql-color-orange { - color: #f90; -} -.ql-editor .ql-color-yellow { - color: #ff0; -} -.ql-editor .ql-color-green { - color: #008a00; -} -.ql-editor .ql-color-blue { - color: #06c; -} -.ql-editor .ql-color-purple { - color: #93f; -} -.ql-editor .ql-font-serif { - font-family: Georgia, Times New Roman, serif; -} -.ql-editor .ql-font-monospace { - font-family: Monaco, Courier New, monospace; -} -.ql-editor .ql-size-small { - font-size: 0.75em; -} -.ql-editor .ql-size-large { - font-size: 1.5em; -} -.ql-editor .ql-size-huge { - font-size: 2.5em; -} -.ql-editor .ql-direction-rtl { - direction: rtl; - text-align: inherit; -} -.ql-editor .ql-align-center { - text-align: center; -} -.ql-editor .ql-align-justify { - text-align: justify; -} -.ql-editor .ql-align-right { - text-align: right; -} -.ql-editor.ql-blank::before { - color: rgba(0,0,0,0.6); - content: attr(data-placeholder); - font-style: italic; - left: 15px; - pointer-events: none; - position: absolute; - right: 15px; -} -.ql-bubble.ql-toolbar:after, -.ql-bubble .ql-toolbar:after { - clear: both; - content: ''; - display: table; -} -.ql-bubble.ql-toolbar button, -.ql-bubble .ql-toolbar button { - background: none; - border: none; - cursor: pointer; - display: inline-block; - float: left; - height: 24px; - padding: 3px 5px; - width: 28px; -} -.ql-bubble.ql-toolbar button svg, -.ql-bubble .ql-toolbar button svg { - float: left; - height: 100%; -} -.ql-bubble.ql-toolbar button:active:hover, -.ql-bubble .ql-toolbar button:active:hover { - outline: none; -} -.ql-bubble.ql-toolbar input.ql-image[type=file], -.ql-bubble .ql-toolbar input.ql-image[type=file] { - display: none; -} -.ql-bubble.ql-toolbar button:hover, -.ql-bubble .ql-toolbar button:hover, -.ql-bubble.ql-toolbar button:focus, -.ql-bubble .ql-toolbar button:focus, -.ql-bubble.ql-toolbar button.ql-active, -.ql-bubble .ql-toolbar button.ql-active, -.ql-bubble.ql-toolbar .ql-picker-label:hover, -.ql-bubble .ql-toolbar .ql-picker-label:hover, -.ql-bubble.ql-toolbar .ql-picker-label.ql-active, -.ql-bubble .ql-toolbar .ql-picker-label.ql-active, -.ql-bubble.ql-toolbar .ql-picker-item:hover, -.ql-bubble .ql-toolbar .ql-picker-item:hover, -.ql-bubble.ql-toolbar .ql-picker-item.ql-selected, -.ql-bubble .ql-toolbar .ql-picker-item.ql-selected { - color: #fff; -} -.ql-bubble.ql-toolbar button:hover .ql-fill, -.ql-bubble .ql-toolbar button:hover .ql-fill, -.ql-bubble.ql-toolbar button:focus .ql-fill, -.ql-bubble .ql-toolbar button:focus .ql-fill, -.ql-bubble.ql-toolbar button.ql-active .ql-fill, -.ql-bubble .ql-toolbar button.ql-active .ql-fill, -.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill, -.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill, -.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-fill, -.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-fill, -.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill, -.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill, -.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-fill, -.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-fill, -.ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill, -.ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill, -.ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill, -.ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill, -.ql-bubble.ql-toolbar button.ql-active .ql-stroke.ql-fill, -.ql-bubble .ql-toolbar button.ql-active .ql-stroke.ql-fill, -.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, -.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, -.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, -.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, -.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, -.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, -.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill, -.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill { - fill: #fff; -} -.ql-bubble.ql-toolbar button:hover .ql-stroke, -.ql-bubble .ql-toolbar button:hover .ql-stroke, -.ql-bubble.ql-toolbar button:focus .ql-stroke, -.ql-bubble .ql-toolbar button:focus .ql-stroke, -.ql-bubble.ql-toolbar button.ql-active .ql-stroke, -.ql-bubble .ql-toolbar button.ql-active .ql-stroke, -.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke, -.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke, -.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke, -.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke, -.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke, -.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke, -.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke, -.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke, -.ql-bubble.ql-toolbar button:hover .ql-stroke-miter, -.ql-bubble .ql-toolbar button:hover .ql-stroke-miter, -.ql-bubble.ql-toolbar button:focus .ql-stroke-miter, -.ql-bubble .ql-toolbar button:focus .ql-stroke-miter, -.ql-bubble.ql-toolbar button.ql-active .ql-stroke-miter, -.ql-bubble .ql-toolbar button.ql-active .ql-stroke-miter, -.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter, -.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter, -.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, -.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, -.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter, -.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter, -.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, -.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter { - stroke: #fff; -} -@media (pointer: coarse) { - .ql-bubble.ql-toolbar button:hover:not(.ql-active), - .ql-bubble .ql-toolbar button:hover:not(.ql-active) { - color: #ccc; - } - .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill, - .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill, - .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill, - .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill { - fill: #ccc; - } - .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke, - .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke, - .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter, - .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter { - stroke: #ccc; - } -} -.ql-bubble { - box-sizing: border-box; -} -.ql-bubble * { - box-sizing: border-box; -} -.ql-bubble .ql-hidden { - display: none; -} -.ql-bubble .ql-out-bottom, -.ql-bubble .ql-out-top { - visibility: hidden; -} -.ql-bubble .ql-tooltip { - position: absolute; - transform: translateY(10px); -} -.ql-bubble .ql-tooltip a { - cursor: pointer; - text-decoration: none; -} -.ql-bubble .ql-tooltip.ql-flip { - transform: translateY(-10px); -} -.ql-bubble .ql-formats { - display: inline-block; - vertical-align: middle; -} -.ql-bubble .ql-formats:after { - clear: both; - content: ''; - display: table; -} -.ql-bubble .ql-stroke { - fill: none; - stroke: #ccc; - stroke-linecap: round; - stroke-linejoin: round; - stroke-width: 2; -} -.ql-bubble .ql-stroke-miter { - fill: none; - stroke: #ccc; - stroke-miterlimit: 10; - stroke-width: 2; -} -.ql-bubble .ql-fill, -.ql-bubble .ql-stroke.ql-fill { - fill: #ccc; -} -.ql-bubble .ql-empty { - fill: none; -} -.ql-bubble .ql-even { - fill-rule: evenodd; -} -.ql-bubble .ql-thin, -.ql-bubble .ql-stroke.ql-thin { - stroke-width: 1; -} -.ql-bubble .ql-transparent { - opacity: 0.4; -} -.ql-bubble .ql-direction svg:last-child { - display: none; -} -.ql-bubble .ql-direction.ql-active svg:last-child { - display: inline; -} -.ql-bubble .ql-direction.ql-active svg:first-child { - display: none; -} -.ql-bubble .ql-editor h1 { - font-size: 2em; -} -.ql-bubble .ql-editor h2 { - font-size: 1.5em; -} -.ql-bubble .ql-editor h3 { - font-size: 1.17em; -} -.ql-bubble .ql-editor h4 { - font-size: 1em; -} -.ql-bubble .ql-editor h5 { - font-size: 0.83em; -} -.ql-bubble .ql-editor h6 { - font-size: 0.67em; -} -.ql-bubble .ql-editor a { - text-decoration: underline; -} -.ql-bubble .ql-editor blockquote { - border-left: 4px solid #ccc; - margin-bottom: 5px; - margin-top: 5px; - padding-left: 16px; -} -.ql-bubble .ql-editor code, -.ql-bubble .ql-editor pre { - background-color: #f0f0f0; - border-radius: 3px; -} -.ql-bubble .ql-editor pre { - white-space: pre-wrap; - margin-bottom: 5px; - margin-top: 5px; - padding: 5px 10px; -} -.ql-bubble .ql-editor code { - font-size: 85%; - padding: 2px 4px; -} -.ql-bubble .ql-editor pre.ql-syntax { - background-color: #23241f; - color: #f8f8f2; - overflow: visible; -} -.ql-bubble .ql-editor img { - max-width: 100%; -} -.ql-bubble .ql-picker { - color: #ccc; - display: inline-block; - float: left; - font-size: 14px; - font-weight: 500; - height: 24px; - position: relative; - vertical-align: middle; -} -.ql-bubble .ql-picker-label { - cursor: pointer; - display: inline-block; - height: 100%; - padding-left: 8px; - padding-right: 2px; - position: relative; - width: 100%; -} -.ql-bubble .ql-picker-label::before { - display: inline-block; - line-height: 22px; -} -.ql-bubble .ql-picker-options { - background-color: #444; - display: none; - min-width: 100%; - padding: 4px 8px; - position: absolute; - white-space: nowrap; -} -.ql-bubble .ql-picker-options .ql-picker-item { - cursor: pointer; - display: block; - padding-bottom: 5px; - padding-top: 5px; -} -.ql-bubble .ql-picker.ql-expanded .ql-picker-label { - color: #777; - z-index: 2; -} -.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-fill { - fill: #777; -} -.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-stroke { - stroke: #777; -} -.ql-bubble .ql-picker.ql-expanded .ql-picker-options { - display: block; - margin-top: -1px; - top: 100%; - z-index: 1; -} -.ql-bubble .ql-color-picker, -.ql-bubble .ql-icon-picker { - width: 28px; -} -.ql-bubble .ql-color-picker .ql-picker-label, -.ql-bubble .ql-icon-picker .ql-picker-label { - padding: 2px 4px; -} -.ql-bubble .ql-color-picker .ql-picker-label svg, -.ql-bubble .ql-icon-picker .ql-picker-label svg { - right: 4px; -} -.ql-bubble .ql-icon-picker .ql-picker-options { - padding: 4px 0px; -} -.ql-bubble .ql-icon-picker .ql-picker-item { - height: 24px; - width: 24px; - padding: 2px 4px; -} -.ql-bubble .ql-color-picker .ql-picker-options { - padding: 3px 5px; - width: 152px; -} -.ql-bubble .ql-color-picker .ql-picker-item { - border: 1px solid transparent; - float: left; - height: 16px; - margin: 2px; - padding: 0px; - width: 16px; -} -.ql-bubble .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg { - position: absolute; - margin-top: -9px; - right: 0; - top: 50%; - width: 18px; -} -.ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before, -.ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before, -.ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before, -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before, -.ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before, -.ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before { - content: attr(data-label); -} -.ql-bubble .ql-picker.ql-header { - width: 98px; -} -.ql-bubble .ql-picker.ql-header .ql-picker-label::before, -.ql-bubble .ql-picker.ql-header .ql-picker-item::before { - content: 'Normal'; -} -.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="1"]::before, -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { - content: 'Heading 1'; -} -.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { - content: 'Heading 2'; -} -.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { - content: 'Heading 3'; -} -.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { - content: 'Heading 4'; -} -.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { - content: 'Heading 5'; -} -.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { - content: 'Heading 6'; -} -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { - font-size: 2em; -} -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { - font-size: 1.5em; -} -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { - font-size: 1.17em; -} -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { - font-size: 1em; -} -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { - font-size: 0.83em; -} -.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { - font-size: 0.67em; -} -.ql-bubble .ql-picker.ql-font { - width: 108px; -} -.ql-bubble .ql-picker.ql-font .ql-picker-label::before, -.ql-bubble .ql-picker.ql-font .ql-picker-item::before { - content: 'Sans Serif'; -} -.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]::before, -.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { - content: 'Serif'; -} -.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before, -.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { - content: 'Monospace'; -} -.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { - font-family: Georgia, Times New Roman, serif; -} -.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { - font-family: Monaco, Courier New, monospace; -} -.ql-bubble .ql-picker.ql-size { - width: 98px; -} -.ql-bubble .ql-picker.ql-size .ql-picker-label::before, -.ql-bubble .ql-picker.ql-size .ql-picker-item::before { - content: 'Normal'; -} -.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]::before, -.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before { - content: 'Small'; -} -.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]::before, -.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before { - content: 'Large'; -} -.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]::before, -.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { - content: 'Huge'; -} -.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before { - font-size: 10px; -} -.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before { - font-size: 18px; -} -.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { - font-size: 32px; -} -.ql-bubble .ql-color-picker.ql-background .ql-picker-item { - background-color: #fff; -} -.ql-bubble .ql-color-picker.ql-color .ql-picker-item { - background-color: #000; -} -.ql-bubble .ql-toolbar .ql-formats { - margin: 8px 12px 8px 0px; -} -.ql-bubble .ql-toolbar .ql-formats:first-child { - margin-left: 12px; -} -.ql-bubble .ql-color-picker svg { - margin: 1px; -} -.ql-bubble .ql-color-picker .ql-picker-item.ql-selected, -.ql-bubble .ql-color-picker .ql-picker-item:hover { - border-color: #fff; -} -.ql-bubble .ql-tooltip { - background-color: #444; - border-radius: 25px; - color: #fff; -} -.ql-bubble .ql-tooltip-arrow { - border-left: 6px solid transparent; - border-right: 6px solid transparent; - content: " "; - display: block; - left: 50%; - margin-left: -6px; - position: absolute; -} -.ql-bubble .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow { - border-bottom: 6px solid #444; - top: -6px; -} -.ql-bubble .ql-tooltip.ql-flip .ql-tooltip-arrow { - border-top: 6px solid #444; - bottom: -6px; -} -.ql-bubble .ql-tooltip.ql-editing .ql-tooltip-editor { - display: block; -} -.ql-bubble .ql-tooltip.ql-editing .ql-formats { - visibility: hidden; -} -.ql-bubble .ql-tooltip-editor { - display: none; -} -.ql-bubble .ql-tooltip-editor input[type=text] { - background: transparent; - border: none; - color: #fff; - font-size: 13px; - height: 100%; - outline: none; - padding: 10px 20px; - position: absolute; - width: 100%; -} -.ql-bubble .ql-tooltip-editor a { - top: 10px; - position: absolute; - right: 20px; -} -.ql-bubble .ql-tooltip-editor a:before { - color: #ccc; - content: "\D7"; - font-size: 16px; - font-weight: bold; -} -.ql-container.ql-bubble:not(.ql-disabled) a { - position: relative; - white-space: nowrap; -} -.ql-container.ql-bubble:not(.ql-disabled) a::before { - background-color: #444; - border-radius: 15px; - top: -5px; - font-size: 12px; - color: #fff; - content: attr(href); - font-weight: normal; - overflow: hidden; - padding: 5px 15px; - text-decoration: none; - z-index: 1; -} -.ql-container.ql-bubble:not(.ql-disabled) a::after { - border-top: 6px solid #444; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - top: 0; - content: " "; - height: 0; - width: 0; -} -.ql-container.ql-bubble:not(.ql-disabled) a::before, -.ql-container.ql-bubble:not(.ql-disabled) a::after { - left: 0; - margin-left: 50%; - position: absolute; - transform: translate(-50%, -100%); - transition: visibility 0s ease 200ms; - visibility: hidden; -} -.ql-container.ql-bubble:not(.ql-disabled) a:hover::before, -.ql-container.ql-bubble:not(.ql-disabled) a:hover::after { - visibility: visible; -} \ No newline at end of file diff --git a/Oqtane.Server/wwwroot/css/quill/quill1.3.6.snow.css b/Oqtane.Server/wwwroot/css/quill/quill1.3.6.snow.css deleted file mode 100644 index 8094fc96..00000000 --- a/Oqtane.Server/wwwroot/css/quill/quill1.3.6.snow.css +++ /dev/null @@ -1,945 +0,0 @@ -/*! - * Quill Editor v1.3.6 - * https://quilljs.com/ - * Copyright (c) 2014, Jason Chen - * Copyright (c) 2013, salesforce.com - */ -.ql-container { - box-sizing: border-box; - font-family: Helvetica, Arial, sans-serif; - font-size: 13px; - height: 100%; - margin: 0px; - position: relative; -} -.ql-container.ql-disabled .ql-tooltip { - visibility: hidden; -} -.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before { - pointer-events: none; -} -.ql-clipboard { - left: -100000px; - height: 1px; - overflow-y: hidden; - position: absolute; - top: 50%; -} -.ql-clipboard p { - margin: 0; - padding: 0; -} -.ql-editor { - box-sizing: border-box; - line-height: 1.42; - height: 100%; - outline: none; - overflow-y: auto; - padding: 12px 15px; - tab-size: 4; - -moz-tab-size: 4; - text-align: left; - white-space: pre-wrap; - word-wrap: break-word; -} -.ql-editor > * { - cursor: text; -} -.ql-editor p, -.ql-editor ol, -.ql-editor ul, -.ql-editor pre, -.ql-editor blockquote, -.ql-editor h1, -.ql-editor h2, -.ql-editor h3, -.ql-editor h4, -.ql-editor h5, -.ql-editor h6 { - margin: 0; - padding: 0; - counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; -} -.ql-editor ol, -.ql-editor ul { - padding-left: 1.5em; -} -.ql-editor ol > li, -.ql-editor ul > li { - list-style-type: none; -} -.ql-editor ul > li::before { - content: '\2022'; -} -.ql-editor ul[data-checked=true], -.ql-editor ul[data-checked=false] { - pointer-events: none; -} -.ql-editor ul[data-checked=true] > li *, -.ql-editor ul[data-checked=false] > li * { - pointer-events: all; -} -.ql-editor ul[data-checked=true] > li::before, -.ql-editor ul[data-checked=false] > li::before { - color: #777; - cursor: pointer; - pointer-events: all; -} -.ql-editor ul[data-checked=true] > li::before { - content: '\2611'; -} -.ql-editor ul[data-checked=false] > li::before { - content: '\2610'; -} -.ql-editor li::before { - display: inline-block; - white-space: nowrap; - width: 1.2em; -} -.ql-editor li:not(.ql-direction-rtl)::before { - margin-left: -1.5em; - margin-right: 0.3em; - text-align: right; -} -.ql-editor li.ql-direction-rtl::before { - margin-left: 0.3em; - margin-right: -1.5em; -} -.ql-editor ol li:not(.ql-direction-rtl), -.ql-editor ul li:not(.ql-direction-rtl) { - padding-left: 1.5em; -} -.ql-editor ol li.ql-direction-rtl, -.ql-editor ul li.ql-direction-rtl { - padding-right: 1.5em; -} -.ql-editor ol li { - counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; - counter-increment: list-0; -} -.ql-editor ol li:before { - content: counter(list-0, decimal) '. '; -} -.ql-editor ol li.ql-indent-1 { - counter-increment: list-1; -} -.ql-editor ol li.ql-indent-1:before { - content: counter(list-1, lower-alpha) '. '; -} -.ql-editor ol li.ql-indent-1 { - counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-2 { - counter-increment: list-2; -} -.ql-editor ol li.ql-indent-2:before { - content: counter(list-2, lower-roman) '. '; -} -.ql-editor ol li.ql-indent-2 { - counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-3 { - counter-increment: list-3; -} -.ql-editor ol li.ql-indent-3:before { - content: counter(list-3, decimal) '. '; -} -.ql-editor ol li.ql-indent-3 { - counter-reset: list-4 list-5 list-6 list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-4 { - counter-increment: list-4; -} -.ql-editor ol li.ql-indent-4:before { - content: counter(list-4, lower-alpha) '. '; -} -.ql-editor ol li.ql-indent-4 { - counter-reset: list-5 list-6 list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-5 { - counter-increment: list-5; -} -.ql-editor ol li.ql-indent-5:before { - content: counter(list-5, lower-roman) '. '; -} -.ql-editor ol li.ql-indent-5 { - counter-reset: list-6 list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-6 { - counter-increment: list-6; -} -.ql-editor ol li.ql-indent-6:before { - content: counter(list-6, decimal) '. '; -} -.ql-editor ol li.ql-indent-6 { - counter-reset: list-7 list-8 list-9; -} -.ql-editor ol li.ql-indent-7 { - counter-increment: list-7; -} -.ql-editor ol li.ql-indent-7:before { - content: counter(list-7, lower-alpha) '. '; -} -.ql-editor ol li.ql-indent-7 { - counter-reset: list-8 list-9; -} -.ql-editor ol li.ql-indent-8 { - counter-increment: list-8; -} -.ql-editor ol li.ql-indent-8:before { - content: counter(list-8, lower-roman) '. '; -} -.ql-editor ol li.ql-indent-8 { - counter-reset: list-9; -} -.ql-editor ol li.ql-indent-9 { - counter-increment: list-9; -} -.ql-editor ol li.ql-indent-9:before { - content: counter(list-9, decimal) '. '; -} -.ql-editor .ql-indent-1:not(.ql-direction-rtl) { - padding-left: 3em; -} -.ql-editor li.ql-indent-1:not(.ql-direction-rtl) { - padding-left: 4.5em; -} -.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right { - padding-right: 3em; -} -.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right { - padding-right: 4.5em; -} -.ql-editor .ql-indent-2:not(.ql-direction-rtl) { - padding-left: 6em; -} -.ql-editor li.ql-indent-2:not(.ql-direction-rtl) { - padding-left: 7.5em; -} -.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right { - padding-right: 6em; -} -.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right { - padding-right: 7.5em; -} -.ql-editor .ql-indent-3:not(.ql-direction-rtl) { - padding-left: 9em; -} -.ql-editor li.ql-indent-3:not(.ql-direction-rtl) { - padding-left: 10.5em; -} -.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right { - padding-right: 9em; -} -.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right { - padding-right: 10.5em; -} -.ql-editor .ql-indent-4:not(.ql-direction-rtl) { - padding-left: 12em; -} -.ql-editor li.ql-indent-4:not(.ql-direction-rtl) { - padding-left: 13.5em; -} -.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right { - padding-right: 12em; -} -.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right { - padding-right: 13.5em; -} -.ql-editor .ql-indent-5:not(.ql-direction-rtl) { - padding-left: 15em; -} -.ql-editor li.ql-indent-5:not(.ql-direction-rtl) { - padding-left: 16.5em; -} -.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right { - padding-right: 15em; -} -.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right { - padding-right: 16.5em; -} -.ql-editor .ql-indent-6:not(.ql-direction-rtl) { - padding-left: 18em; -} -.ql-editor li.ql-indent-6:not(.ql-direction-rtl) { - padding-left: 19.5em; -} -.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right { - padding-right: 18em; -} -.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right { - padding-right: 19.5em; -} -.ql-editor .ql-indent-7:not(.ql-direction-rtl) { - padding-left: 21em; -} -.ql-editor li.ql-indent-7:not(.ql-direction-rtl) { - padding-left: 22.5em; -} -.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right { - padding-right: 21em; -} -.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right { - padding-right: 22.5em; -} -.ql-editor .ql-indent-8:not(.ql-direction-rtl) { - padding-left: 24em; -} -.ql-editor li.ql-indent-8:not(.ql-direction-rtl) { - padding-left: 25.5em; -} -.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right { - padding-right: 24em; -} -.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right { - padding-right: 25.5em; -} -.ql-editor .ql-indent-9:not(.ql-direction-rtl) { - padding-left: 27em; -} -.ql-editor li.ql-indent-9:not(.ql-direction-rtl) { - padding-left: 28.5em; -} -.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right { - padding-right: 27em; -} -.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right { - padding-right: 28.5em; -} -.ql-editor .ql-video { - display: block; - max-width: 100%; -} -.ql-editor .ql-video.ql-align-center { - margin: 0 auto; -} -.ql-editor .ql-video.ql-align-right { - margin: 0 0 0 auto; -} -.ql-editor .ql-bg-black { - background-color: #000; -} -.ql-editor .ql-bg-red { - background-color: #e60000; -} -.ql-editor .ql-bg-orange { - background-color: #f90; -} -.ql-editor .ql-bg-yellow { - background-color: #ff0; -} -.ql-editor .ql-bg-green { - background-color: #008a00; -} -.ql-editor .ql-bg-blue { - background-color: #06c; -} -.ql-editor .ql-bg-purple { - background-color: #93f; -} -.ql-editor .ql-color-white { - color: #fff; -} -.ql-editor .ql-color-red { - color: #e60000; -} -.ql-editor .ql-color-orange { - color: #f90; -} -.ql-editor .ql-color-yellow { - color: #ff0; -} -.ql-editor .ql-color-green { - color: #008a00; -} -.ql-editor .ql-color-blue { - color: #06c; -} -.ql-editor .ql-color-purple { - color: #93f; -} -.ql-editor .ql-font-serif { - font-family: Georgia, Times New Roman, serif; -} -.ql-editor .ql-font-monospace { - font-family: Monaco, Courier New, monospace; -} -.ql-editor .ql-size-small { - font-size: 0.75em; -} -.ql-editor .ql-size-large { - font-size: 1.5em; -} -.ql-editor .ql-size-huge { - font-size: 2.5em; -} -.ql-editor .ql-direction-rtl { - direction: rtl; - text-align: inherit; -} -.ql-editor .ql-align-center { - text-align: center; -} -.ql-editor .ql-align-justify { - text-align: justify; -} -.ql-editor .ql-align-right { - text-align: right; -} -.ql-editor.ql-blank::before { - color: rgba(0,0,0,0.6); - content: attr(data-placeholder); - font-style: italic; - left: 15px; - pointer-events: none; - position: absolute; - right: 15px; -} -.ql-snow.ql-toolbar:after, -.ql-snow .ql-toolbar:after { - clear: both; - content: ''; - display: table; -} -.ql-snow.ql-toolbar button, -.ql-snow .ql-toolbar button { - background: none; - border: none; - cursor: pointer; - display: inline-block; - float: left; - height: 24px; - padding: 3px 5px; - width: 28px; -} -.ql-snow.ql-toolbar button svg, -.ql-snow .ql-toolbar button svg { - float: left; - height: 100%; -} -.ql-snow.ql-toolbar button:active:hover, -.ql-snow .ql-toolbar button:active:hover { - outline: none; -} -.ql-snow.ql-toolbar input.ql-image[type=file], -.ql-snow .ql-toolbar input.ql-image[type=file] { - display: none; -} -.ql-snow.ql-toolbar button:hover, -.ql-snow .ql-toolbar button:hover, -.ql-snow.ql-toolbar button:focus, -.ql-snow .ql-toolbar button:focus, -.ql-snow.ql-toolbar button.ql-active, -.ql-snow .ql-toolbar button.ql-active, -.ql-snow.ql-toolbar .ql-picker-label:hover, -.ql-snow .ql-toolbar .ql-picker-label:hover, -.ql-snow.ql-toolbar .ql-picker-label.ql-active, -.ql-snow .ql-toolbar .ql-picker-label.ql-active, -.ql-snow.ql-toolbar .ql-picker-item:hover, -.ql-snow .ql-toolbar .ql-picker-item:hover, -.ql-snow.ql-toolbar .ql-picker-item.ql-selected, -.ql-snow .ql-toolbar .ql-picker-item.ql-selected { - color: #06c; -} -.ql-snow.ql-toolbar button:hover .ql-fill, -.ql-snow .ql-toolbar button:hover .ql-fill, -.ql-snow.ql-toolbar button:focus .ql-fill, -.ql-snow .ql-toolbar button:focus .ql-fill, -.ql-snow.ql-toolbar button.ql-active .ql-fill, -.ql-snow .ql-toolbar button.ql-active .ql-fill, -.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill, -.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill, -.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill, -.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill, -.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill, -.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill, -.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill, -.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill, -.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill, -.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill, -.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill, -.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill, -.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill, -.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill, -.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, -.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, -.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, -.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, -.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, -.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, -.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill, -.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill { - fill: #06c; -} -.ql-snow.ql-toolbar button:hover .ql-stroke, -.ql-snow .ql-toolbar button:hover .ql-stroke, -.ql-snow.ql-toolbar button:focus .ql-stroke, -.ql-snow .ql-toolbar button:focus .ql-stroke, -.ql-snow.ql-toolbar button.ql-active .ql-stroke, -.ql-snow .ql-toolbar button.ql-active .ql-stroke, -.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke, -.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke, -.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke, -.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke, -.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke, -.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke, -.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke, -.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke, -.ql-snow.ql-toolbar button:hover .ql-stroke-miter, -.ql-snow .ql-toolbar button:hover .ql-stroke-miter, -.ql-snow.ql-toolbar button:focus .ql-stroke-miter, -.ql-snow .ql-toolbar button:focus .ql-stroke-miter, -.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter, -.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter, -.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter, -.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter, -.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, -.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, -.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter, -.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter, -.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, -.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter { - stroke: #06c; -} -@media (pointer: coarse) { - .ql-snow.ql-toolbar button:hover:not(.ql-active), - .ql-snow .ql-toolbar button:hover:not(.ql-active) { - color: #444; - } - .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill, - .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill, - .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill, - .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill { - fill: #444; - } - .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke, - .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke, - .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter, - .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter { - stroke: #444; - } -} -.ql-snow { - box-sizing: border-box; -} -.ql-snow * { - box-sizing: border-box; -} -.ql-snow .ql-hidden { - display: none; -} -.ql-snow .ql-out-bottom, -.ql-snow .ql-out-top { - visibility: hidden; -} -.ql-snow .ql-tooltip { - position: absolute; - transform: translateY(10px); -} -.ql-snow .ql-tooltip a { - cursor: pointer; - text-decoration: none; -} -.ql-snow .ql-tooltip.ql-flip { - transform: translateY(-10px); -} -.ql-snow .ql-formats { - display: inline-block; - vertical-align: middle; -} -.ql-snow .ql-formats:after { - clear: both; - content: ''; - display: table; -} -.ql-snow .ql-stroke { - fill: none; - stroke: #444; - stroke-linecap: round; - stroke-linejoin: round; - stroke-width: 2; -} -.ql-snow .ql-stroke-miter { - fill: none; - stroke: #444; - stroke-miterlimit: 10; - stroke-width: 2; -} -.ql-snow .ql-fill, -.ql-snow .ql-stroke.ql-fill { - fill: #444; -} -.ql-snow .ql-empty { - fill: none; -} -.ql-snow .ql-even { - fill-rule: evenodd; -} -.ql-snow .ql-thin, -.ql-snow .ql-stroke.ql-thin { - stroke-width: 1; -} -.ql-snow .ql-transparent { - opacity: 0.4; -} -.ql-snow .ql-direction svg:last-child { - display: none; -} -.ql-snow .ql-direction.ql-active svg:last-child { - display: inline; -} -.ql-snow .ql-direction.ql-active svg:first-child { - display: none; -} -.ql-snow .ql-editor h1 { - font-size: 2em; -} -.ql-snow .ql-editor h2 { - font-size: 1.5em; -} -.ql-snow .ql-editor h3 { - font-size: 1.17em; -} -.ql-snow .ql-editor h4 { - font-size: 1em; -} -.ql-snow .ql-editor h5 { - font-size: 0.83em; -} -.ql-snow .ql-editor h6 { - font-size: 0.67em; -} -.ql-snow .ql-editor a { - text-decoration: underline; -} -.ql-snow .ql-editor blockquote { - border-left: 4px solid #ccc; - margin-bottom: 5px; - margin-top: 5px; - padding-left: 16px; -} -.ql-snow .ql-editor code, -.ql-snow .ql-editor pre { - background-color: #f0f0f0; - border-radius: 3px; -} -.ql-snow .ql-editor pre { - white-space: pre-wrap; - margin-bottom: 5px; - margin-top: 5px; - padding: 5px 10px; -} -.ql-snow .ql-editor code { - font-size: 85%; - padding: 2px 4px; -} -.ql-snow .ql-editor pre.ql-syntax { - background-color: #23241f; - color: #f8f8f2; - overflow: visible; -} -.ql-snow .ql-editor img { - max-width: 100%; -} -.ql-snow .ql-picker { - color: #444; - display: inline-block; - float: left; - font-size: 14px; - font-weight: 500; - height: 24px; - position: relative; - vertical-align: middle; -} -.ql-snow .ql-picker-label { - cursor: pointer; - display: inline-block; - height: 100%; - padding-left: 8px; - padding-right: 2px; - position: relative; - width: 100%; -} -.ql-snow .ql-picker-label::before { - display: inline-block; - line-height: 22px; -} -.ql-snow .ql-picker-options { - background-color: #fff; - display: none; - min-width: 100%; - padding: 4px 8px; - position: absolute; - white-space: nowrap; -} -.ql-snow .ql-picker-options .ql-picker-item { - cursor: pointer; - display: block; - padding-bottom: 5px; - padding-top: 5px; -} -.ql-snow .ql-picker.ql-expanded .ql-picker-label { - color: #ccc; - z-index: 2; -} -.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill { - fill: #ccc; -} -.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke { - stroke: #ccc; -} -.ql-snow .ql-picker.ql-expanded .ql-picker-options { - display: block; - margin-top: -1px; - top: 100%; - z-index: 1; -} -.ql-snow .ql-color-picker, -.ql-snow .ql-icon-picker { - width: 28px; -} -.ql-snow .ql-color-picker .ql-picker-label, -.ql-snow .ql-icon-picker .ql-picker-label { - padding: 2px 4px; -} -.ql-snow .ql-color-picker .ql-picker-label svg, -.ql-snow .ql-icon-picker .ql-picker-label svg { - right: 4px; -} -.ql-snow .ql-icon-picker .ql-picker-options { - padding: 4px 0px; -} -.ql-snow .ql-icon-picker .ql-picker-item { - height: 24px; - width: 24px; - padding: 2px 4px; -} -.ql-snow .ql-color-picker .ql-picker-options { - padding: 3px 5px; - width: 152px; -} -.ql-snow .ql-color-picker .ql-picker-item { - border: 1px solid transparent; - float: left; - height: 16px; - margin: 2px; - padding: 0px; - width: 16px; -} -.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg { - position: absolute; - margin-top: -9px; - right: 0; - top: 50%; - width: 18px; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before, -.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before, -.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before, -.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before, -.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before { - content: attr(data-label); -} -.ql-snow .ql-picker.ql-header { - width: 98px; -} -.ql-snow .ql-picker.ql-header .ql-picker-label::before, -.ql-snow .ql-picker.ql-header .ql-picker-item::before { - content: 'Normal'; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { - content: 'Heading 1'; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { - content: 'Heading 2'; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { - content: 'Heading 3'; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { - content: 'Heading 4'; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { - content: 'Heading 5'; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { - content: 'Heading 6'; -} -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { - font-size: 2em; -} -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { - font-size: 1.5em; -} -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { - font-size: 1.17em; -} -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { - font-size: 1em; -} -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { - font-size: 0.83em; -} -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { - font-size: 0.67em; -} -.ql-snow .ql-picker.ql-font { - width: 108px; -} -.ql-snow .ql-picker.ql-font .ql-picker-label::before, -.ql-snow .ql-picker.ql-font .ql-picker-item::before { - content: 'Sans Serif'; -} -.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before, -.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { - content: 'Serif'; -} -.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before, -.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { - content: 'Monospace'; -} -.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { - font-family: Georgia, Times New Roman, serif; -} -.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { - font-family: Monaco, Courier New, monospace; -} -.ql-snow .ql-picker.ql-size { - width: 98px; -} -.ql-snow .ql-picker.ql-size .ql-picker-label::before, -.ql-snow .ql-picker.ql-size .ql-picker-item::before { - content: 'Normal'; -} -.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before, -.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before { - content: 'Small'; -} -.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before, -.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before { - content: 'Large'; -} -.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before, -.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { - content: 'Huge'; -} -.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before { - font-size: 10px; -} -.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before { - font-size: 18px; -} -.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { - font-size: 32px; -} -.ql-snow .ql-color-picker.ql-background .ql-picker-item { - background-color: #fff; -} -.ql-snow .ql-color-picker.ql-color .ql-picker-item { - background-color: #000; -} -.ql-toolbar.ql-snow { - border: 1px solid #ccc; - box-sizing: border-box; - font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; - padding: 8px; -} -.ql-toolbar.ql-snow .ql-formats { - margin-right: 15px; -} -.ql-toolbar.ql-snow .ql-picker-label { - border: 1px solid transparent; -} -.ql-toolbar.ql-snow .ql-picker-options { - border: 1px solid transparent; - box-shadow: rgba(0,0,0,0.2) 0 2px 8px; -} -.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label { - border-color: #ccc; -} -.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options { - border-color: #ccc; -} -.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected, -.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover { - border-color: #000; -} -.ql-toolbar.ql-snow + .ql-container.ql-snow { - border-top: 0px; -} -.ql-snow .ql-tooltip { - background-color: #fff; - border: 1px solid #ccc; - box-shadow: 0px 0px 5px #ddd; - color: #444; - padding: 5px 12px; - white-space: nowrap; -} -.ql-snow .ql-tooltip::before { - content: "Visit URL:"; - line-height: 26px; - margin-right: 8px; -} -.ql-snow .ql-tooltip input[type=text] { - display: none; - border: 1px solid #ccc; - font-size: 13px; - height: 26px; - margin: 0px; - padding: 3px 5px; - width: 170px; -} -.ql-snow .ql-tooltip a.ql-preview { - display: inline-block; - max-width: 200px; - overflow-x: hidden; - text-overflow: ellipsis; - vertical-align: top; -} -.ql-snow .ql-tooltip a.ql-action::after { - border-right: 1px solid #ccc; - content: 'Edit'; - margin-left: 16px; - padding-right: 8px; -} -.ql-snow .ql-tooltip a.ql-remove::before { - content: 'Remove'; - margin-left: 8px; -} -.ql-snow .ql-tooltip a { - line-height: 26px; -} -.ql-snow .ql-tooltip.ql-editing a.ql-preview, -.ql-snow .ql-tooltip.ql-editing a.ql-remove { - display: none; -} -.ql-snow .ql-tooltip.ql-editing input[type=text] { - display: inline-block; -} -.ql-snow .ql-tooltip.ql-editing a.ql-action::after { - border-right: 0px; - content: 'Save'; - padding-right: 0px; -} -.ql-snow .ql-tooltip[data-mode=link]::before { - content: "Enter link:"; -} -.ql-snow .ql-tooltip[data-mode=formula]::before { - content: "Enter formula:"; -} -.ql-snow .ql-tooltip[data-mode=video]::before { - content: "Enter video:"; -} -.ql-snow a { - color: #06c; -} -.ql-container.ql-snow { - border: 1px solid #ccc; -} \ No newline at end of file diff --git a/Oqtane.Server/wwwroot/css/quill/quill1.3.7.bubble.css b/Oqtane.Server/wwwroot/css/quill/quill1.3.7.bubble.css new file mode 100644 index 00000000..15661dda --- /dev/null +++ b/Oqtane.Server/wwwroot/css/quill/quill1.3.7.bubble.css @@ -0,0 +1,1173 @@ +/*! + * Quill Editor v1.3.7 + * https://quilljs.com/ + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */ +.ql-container { + box-sizing: border-box; + font-family: Helvetica, Arial, sans-serif; + font-size: 13px; + height: 100%; + margin: 0px; + position: relative; +} + + .ql-container.ql-disabled .ql-tooltip { + visibility: hidden; + } + + .ql-container.ql-disabled .ql-editor ul[data-checked] > li::before { + pointer-events: none; + } + +.ql-clipboard { + left: -100000px; + height: 1px; + overflow-y: hidden; + position: absolute; + top: 50%; +} + + .ql-clipboard p { + margin: 0; + padding: 0; + } + +.ql-editor { + box-sizing: border-box; + line-height: 1.42; + height: 100%; + outline: none; + overflow-y: auto; + padding: 12px 15px; + tab-size: 4; + -moz-tab-size: 4; + text-align: left; + white-space: pre-wrap; + word-wrap: break-word; +} + + .ql-editor > * { + cursor: text; + } + + .ql-editor p, + .ql-editor ol, + .ql-editor ul, + .ql-editor pre, + .ql-editor blockquote, + .ql-editor h1, + .ql-editor h2, + .ql-editor h3, + .ql-editor h4, + .ql-editor h5, + .ql-editor h6 { + margin: 0; + padding: 0; + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + } + + .ql-editor ol, + .ql-editor ul { + padding-left: 1.5em; + } + + .ql-editor ol > li, + .ql-editor ul > li { + list-style-type: none; + } + + .ql-editor ul > li::before { + content: '\2022'; + } + + .ql-editor ul[data-checked=true], + .ql-editor ul[data-checked=false] { + pointer-events: none; + } + + .ql-editor ul[data-checked=true] > li *, + .ql-editor ul[data-checked=false] > li * { + pointer-events: all; + } + + .ql-editor ul[data-checked=true] > li::before, + .ql-editor ul[data-checked=false] > li::before { + color: #777; + cursor: pointer; + pointer-events: all; + } + + .ql-editor ul[data-checked=true] > li::before { + content: '\2611'; + } + + .ql-editor ul[data-checked=false] > li::before { + content: '\2610'; + } + + .ql-editor li::before { + display: inline-block; + white-space: nowrap; + width: 1.2em; + } + + .ql-editor li:not(.ql-direction-rtl)::before { + margin-left: -1.5em; + margin-right: 0.3em; + text-align: right; + } + + .ql-editor li.ql-direction-rtl::before { + margin-left: 0.3em; + margin-right: -1.5em; + } + + .ql-editor ol li:not(.ql-direction-rtl), + .ql-editor ul li:not(.ql-direction-rtl) { + padding-left: 1.5em; + } + + .ql-editor ol li.ql-direction-rtl, + .ql-editor ul li.ql-direction-rtl { + padding-right: 1.5em; + } + + .ql-editor ol li { + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + counter-increment: list-0; + } + + .ql-editor ol li:before { + content: counter(list-0, decimal) '. '; + } + + .ql-editor ol li.ql-indent-1 { + counter-increment: list-1; + } + + .ql-editor ol li.ql-indent-1:before { + content: counter(list-1, lower-alpha) '. '; + } + + .ql-editor ol li.ql-indent-1 { + counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-2 { + counter-increment: list-2; + } + + .ql-editor ol li.ql-indent-2:before { + content: counter(list-2, lower-roman) '. '; + } + + .ql-editor ol li.ql-indent-2 { + counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-3 { + counter-increment: list-3; + } + + .ql-editor ol li.ql-indent-3:before { + content: counter(list-3, decimal) '. '; + } + + .ql-editor ol li.ql-indent-3 { + counter-reset: list-4 list-5 list-6 list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-4 { + counter-increment: list-4; + } + + .ql-editor ol li.ql-indent-4:before { + content: counter(list-4, lower-alpha) '. '; + } + + .ql-editor ol li.ql-indent-4 { + counter-reset: list-5 list-6 list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-5 { + counter-increment: list-5; + } + + .ql-editor ol li.ql-indent-5:before { + content: counter(list-5, lower-roman) '. '; + } + + .ql-editor ol li.ql-indent-5 { + counter-reset: list-6 list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-6 { + counter-increment: list-6; + } + + .ql-editor ol li.ql-indent-6:before { + content: counter(list-6, decimal) '. '; + } + + .ql-editor ol li.ql-indent-6 { + counter-reset: list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-7 { + counter-increment: list-7; + } + + .ql-editor ol li.ql-indent-7:before { + content: counter(list-7, lower-alpha) '. '; + } + + .ql-editor ol li.ql-indent-7 { + counter-reset: list-8 list-9; + } + + .ql-editor ol li.ql-indent-8 { + counter-increment: list-8; + } + + .ql-editor ol li.ql-indent-8:before { + content: counter(list-8, lower-roman) '. '; + } + + .ql-editor ol li.ql-indent-8 { + counter-reset: list-9; + } + + .ql-editor ol li.ql-indent-9 { + counter-increment: list-9; + } + + .ql-editor ol li.ql-indent-9:before { + content: counter(list-9, decimal) '. '; + } + + .ql-editor .ql-indent-1:not(.ql-direction-rtl) { + padding-left: 3em; + } + + .ql-editor li.ql-indent-1:not(.ql-direction-rtl) { + padding-left: 4.5em; + } + + .ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right { + padding-right: 3em; + } + + .ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right { + padding-right: 4.5em; + } + + .ql-editor .ql-indent-2:not(.ql-direction-rtl) { + padding-left: 6em; + } + + .ql-editor li.ql-indent-2:not(.ql-direction-rtl) { + padding-left: 7.5em; + } + + .ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right { + padding-right: 6em; + } + + .ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right { + padding-right: 7.5em; + } + + .ql-editor .ql-indent-3:not(.ql-direction-rtl) { + padding-left: 9em; + } + + .ql-editor li.ql-indent-3:not(.ql-direction-rtl) { + padding-left: 10.5em; + } + + .ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right { + padding-right: 9em; + } + + .ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right { + padding-right: 10.5em; + } + + .ql-editor .ql-indent-4:not(.ql-direction-rtl) { + padding-left: 12em; + } + + .ql-editor li.ql-indent-4:not(.ql-direction-rtl) { + padding-left: 13.5em; + } + + .ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right { + padding-right: 12em; + } + + .ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right { + padding-right: 13.5em; + } + + .ql-editor .ql-indent-5:not(.ql-direction-rtl) { + padding-left: 15em; + } + + .ql-editor li.ql-indent-5:not(.ql-direction-rtl) { + padding-left: 16.5em; + } + + .ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right { + padding-right: 15em; + } + + .ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right { + padding-right: 16.5em; + } + + .ql-editor .ql-indent-6:not(.ql-direction-rtl) { + padding-left: 18em; + } + + .ql-editor li.ql-indent-6:not(.ql-direction-rtl) { + padding-left: 19.5em; + } + + .ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right { + padding-right: 18em; + } + + .ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right { + padding-right: 19.5em; + } + + .ql-editor .ql-indent-7:not(.ql-direction-rtl) { + padding-left: 21em; + } + + .ql-editor li.ql-indent-7:not(.ql-direction-rtl) { + padding-left: 22.5em; + } + + .ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right { + padding-right: 21em; + } + + .ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right { + padding-right: 22.5em; + } + + .ql-editor .ql-indent-8:not(.ql-direction-rtl) { + padding-left: 24em; + } + + .ql-editor li.ql-indent-8:not(.ql-direction-rtl) { + padding-left: 25.5em; + } + + .ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right { + padding-right: 24em; + } + + .ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right { + padding-right: 25.5em; + } + + .ql-editor .ql-indent-9:not(.ql-direction-rtl) { + padding-left: 27em; + } + + .ql-editor li.ql-indent-9:not(.ql-direction-rtl) { + padding-left: 28.5em; + } + + .ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right { + padding-right: 27em; + } + + .ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right { + padding-right: 28.5em; + } + + .ql-editor .ql-video { + display: block; + max-width: 100%; + } + + .ql-editor .ql-video.ql-align-center { + margin: 0 auto; + } + + .ql-editor .ql-video.ql-align-right { + margin: 0 0 0 auto; + } + + .ql-editor .ql-bg-black { + background-color: #000; + } + + .ql-editor .ql-bg-red { + background-color: #e60000; + } + + .ql-editor .ql-bg-orange { + background-color: #f90; + } + + .ql-editor .ql-bg-yellow { + background-color: #ff0; + } + + .ql-editor .ql-bg-green { + background-color: #008a00; + } + + .ql-editor .ql-bg-blue { + background-color: #06c; + } + + .ql-editor .ql-bg-purple { + background-color: #93f; + } + + .ql-editor .ql-color-white { + color: #fff; + } + + .ql-editor .ql-color-red { + color: #e60000; + } + + .ql-editor .ql-color-orange { + color: #f90; + } + + .ql-editor .ql-color-yellow { + color: #ff0; + } + + .ql-editor .ql-color-green { + color: #008a00; + } + + .ql-editor .ql-color-blue { + color: #06c; + } + + .ql-editor .ql-color-purple { + color: #93f; + } + + .ql-editor .ql-font-serif { + font-family: Georgia, Times New Roman, serif; + } + + .ql-editor .ql-font-monospace { + font-family: Monaco, Courier New, monospace; + } + + .ql-editor .ql-size-small { + font-size: 0.75em; + } + + .ql-editor .ql-size-large { + font-size: 1.5em; + } + + .ql-editor .ql-size-huge { + font-size: 2.5em; + } + + .ql-editor .ql-direction-rtl { + direction: rtl; + text-align: inherit; + } + + .ql-editor .ql-align-center { + text-align: center; + } + + .ql-editor .ql-align-justify { + text-align: justify; + } + + .ql-editor .ql-align-right { + text-align: right; + } + + .ql-editor.ql-blank::before { + color: rgba(0,0,0,0.6); + content: attr(data-placeholder); + font-style: italic; + left: 15px; + pointer-events: none; + position: absolute; + right: 15px; + } + +.ql-bubble.ql-toolbar:after, +.ql-bubble .ql-toolbar:after { + clear: both; + content: ''; + display: table; +} + +.ql-bubble.ql-toolbar button, +.ql-bubble .ql-toolbar button { + background: none; + border: none; + cursor: pointer; + display: inline-block; + float: left; + height: 24px; + padding: 3px 5px; + width: 28px; +} + + .ql-bubble.ql-toolbar button svg, + .ql-bubble .ql-toolbar button svg { + float: left; + height: 100%; + } + + .ql-bubble.ql-toolbar button:active:hover, + .ql-bubble .ql-toolbar button:active:hover { + outline: none; + } + +.ql-bubble.ql-toolbar input.ql-image[type=file], +.ql-bubble .ql-toolbar input.ql-image[type=file] { + display: none; +} + +.ql-bubble.ql-toolbar button:hover, +.ql-bubble .ql-toolbar button:hover, +.ql-bubble.ql-toolbar button:focus, +.ql-bubble .ql-toolbar button:focus, +.ql-bubble.ql-toolbar button.ql-active, +.ql-bubble .ql-toolbar button.ql-active, +.ql-bubble.ql-toolbar .ql-picker-label:hover, +.ql-bubble .ql-toolbar .ql-picker-label:hover, +.ql-bubble.ql-toolbar .ql-picker-label.ql-active, +.ql-bubble .ql-toolbar .ql-picker-label.ql-active, +.ql-bubble.ql-toolbar .ql-picker-item:hover, +.ql-bubble .ql-toolbar .ql-picker-item:hover, +.ql-bubble.ql-toolbar .ql-picker-item.ql-selected, +.ql-bubble .ql-toolbar .ql-picker-item.ql-selected { + color: #fff; +} + + .ql-bubble.ql-toolbar button:hover .ql-fill, + .ql-bubble .ql-toolbar button:hover .ql-fill, + .ql-bubble.ql-toolbar button:focus .ql-fill, + .ql-bubble .ql-toolbar button:focus .ql-fill, + .ql-bubble.ql-toolbar button.ql-active .ql-fill, + .ql-bubble .ql-toolbar button.ql-active .ql-fill, + .ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill, + .ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill, + .ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-fill, + .ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-fill, + .ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill, + .ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill, + .ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-fill, + .ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-fill, + .ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill, + .ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill, + .ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill, + .ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill, + .ql-bubble.ql-toolbar button.ql-active .ql-stroke.ql-fill, + .ql-bubble .ql-toolbar button.ql-active .ql-stroke.ql-fill, + .ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, + .ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, + .ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, + .ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, + .ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, + .ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, + .ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill, + .ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill { + fill: #fff; + } + + .ql-bubble.ql-toolbar button:hover .ql-stroke, + .ql-bubble .ql-toolbar button:hover .ql-stroke, + .ql-bubble.ql-toolbar button:focus .ql-stroke, + .ql-bubble .ql-toolbar button:focus .ql-stroke, + .ql-bubble.ql-toolbar button.ql-active .ql-stroke, + .ql-bubble .ql-toolbar button.ql-active .ql-stroke, + .ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke, + .ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke, + .ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke, + .ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke, + .ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke, + .ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke, + .ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke, + .ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke, + .ql-bubble.ql-toolbar button:hover .ql-stroke-miter, + .ql-bubble .ql-toolbar button:hover .ql-stroke-miter, + .ql-bubble.ql-toolbar button:focus .ql-stroke-miter, + .ql-bubble .ql-toolbar button:focus .ql-stroke-miter, + .ql-bubble.ql-toolbar button.ql-active .ql-stroke-miter, + .ql-bubble .ql-toolbar button.ql-active .ql-stroke-miter, + .ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter, + .ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter, + .ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, + .ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, + .ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter, + .ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter, + .ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, + .ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter { + stroke: #fff; + } + +@media (pointer: coarse) { + .ql-bubble.ql-toolbar button:hover:not(.ql-active), + .ql-bubble .ql-toolbar button:hover:not(.ql-active) { + color: #ccc; + } + + .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill, + .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill, + .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill, + .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill { + fill: #ccc; + } + + .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke, + .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke, + .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter, + .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter { + stroke: #ccc; + } +} + +.ql-bubble { + box-sizing: border-box; +} + + .ql-bubble * { + box-sizing: border-box; + } + + .ql-bubble .ql-hidden { + display: none; + } + + .ql-bubble .ql-out-bottom, + .ql-bubble .ql-out-top { + visibility: hidden; + } + + .ql-bubble .ql-tooltip { + position: absolute; + transform: translateY(10px); + } + + .ql-bubble .ql-tooltip a { + cursor: pointer; + text-decoration: none; + } + + .ql-bubble .ql-tooltip.ql-flip { + transform: translateY(-10px); + } + + .ql-bubble .ql-formats { + display: inline-block; + vertical-align: middle; + } + + .ql-bubble .ql-formats:after { + clear: both; + content: ''; + display: table; + } + + .ql-bubble .ql-stroke { + fill: none; + stroke: #ccc; + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 2; + } + + .ql-bubble .ql-stroke-miter { + fill: none; + stroke: #ccc; + stroke-miterlimit: 10; + stroke-width: 2; + } + + .ql-bubble .ql-fill, + .ql-bubble .ql-stroke.ql-fill { + fill: #ccc; + } + + .ql-bubble .ql-empty { + fill: none; + } + + .ql-bubble .ql-even { + fill-rule: evenodd; + } + + .ql-bubble .ql-thin, + .ql-bubble .ql-stroke.ql-thin { + stroke-width: 1; + } + + .ql-bubble .ql-transparent { + opacity: 0.4; + } + + .ql-bubble .ql-direction svg:last-child { + display: none; + } + + .ql-bubble .ql-direction.ql-active svg:last-child { + display: inline; + } + + .ql-bubble .ql-direction.ql-active svg:first-child { + display: none; + } + + .ql-bubble .ql-editor h1 { + font-size: 2em; + } + + .ql-bubble .ql-editor h2 { + font-size: 1.5em; + } + + .ql-bubble .ql-editor h3 { + font-size: 1.17em; + } + + .ql-bubble .ql-editor h4 { + font-size: 1em; + } + + .ql-bubble .ql-editor h5 { + font-size: 0.83em; + } + + .ql-bubble .ql-editor h6 { + font-size: 0.67em; + } + + .ql-bubble .ql-editor a { + text-decoration: underline; + } + + .ql-bubble .ql-editor blockquote { + border-left: 4px solid #ccc; + margin-bottom: 5px; + margin-top: 5px; + padding-left: 16px; + } + + .ql-bubble .ql-editor code, + .ql-bubble .ql-editor pre { + background-color: #f0f0f0; + border-radius: 3px; + } + + .ql-bubble .ql-editor pre { + white-space: pre-wrap; + margin-bottom: 5px; + margin-top: 5px; + padding: 5px 10px; + } + + .ql-bubble .ql-editor code { + font-size: 85%; + padding: 2px 4px; + } + + .ql-bubble .ql-editor pre.ql-syntax { + background-color: #23241f; + color: #f8f8f2; + overflow: visible; + } + + .ql-bubble .ql-editor img { + max-width: 100%; + } + + .ql-bubble .ql-picker { + color: #ccc; + display: inline-block; + float: left; + font-size: 14px; + font-weight: 500; + height: 24px; + position: relative; + vertical-align: middle; + } + + .ql-bubble .ql-picker-label { + cursor: pointer; + display: inline-block; + height: 100%; + padding-left: 8px; + padding-right: 2px; + position: relative; + width: 100%; + } + + .ql-bubble .ql-picker-label::before { + display: inline-block; + line-height: 22px; + } + + .ql-bubble .ql-picker-options { + background-color: #444; + display: none; + min-width: 100%; + padding: 4px 8px; + position: absolute; + white-space: nowrap; + } + + .ql-bubble .ql-picker-options .ql-picker-item { + cursor: pointer; + display: block; + padding-bottom: 5px; + padding-top: 5px; + } + + .ql-bubble .ql-picker.ql-expanded .ql-picker-label { + color: #777; + z-index: 2; + } + + .ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-fill { + fill: #777; + } + + .ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-stroke { + stroke: #777; + } + + .ql-bubble .ql-picker.ql-expanded .ql-picker-options { + display: block; + margin-top: -1px; + top: 100%; + z-index: 1; + } + + .ql-bubble .ql-color-picker, + .ql-bubble .ql-icon-picker { + width: 28px; + } + + .ql-bubble .ql-color-picker .ql-picker-label, + .ql-bubble .ql-icon-picker .ql-picker-label { + padding: 2px 4px; + } + + .ql-bubble .ql-color-picker .ql-picker-label svg, + .ql-bubble .ql-icon-picker .ql-picker-label svg { + right: 4px; + } + + .ql-bubble .ql-icon-picker .ql-picker-options { + padding: 4px 0px; + } + + .ql-bubble .ql-icon-picker .ql-picker-item { + height: 24px; + width: 24px; + padding: 2px 4px; + } + + .ql-bubble .ql-color-picker .ql-picker-options { + padding: 3px 5px; + width: 152px; + } + + .ql-bubble .ql-color-picker .ql-picker-item { + border: 1px solid transparent; + float: left; + height: 16px; + margin: 2px; + padding: 0px; + width: 16px; + } + + .ql-bubble .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg { + position: absolute; + margin-top: -9px; + right: 0; + top: 50%; + width: 18px; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before, + .ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before, + .ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before, + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before, + .ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before, + .ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before { + content: attr(data-label); + } + + .ql-bubble .ql-picker.ql-header { + width: 98px; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-label::before, + .ql-bubble .ql-picker.ql-header .ql-picker-item::before { + content: 'Normal'; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="1"]::before, + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { + content: 'Heading 1'; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { + content: 'Heading 2'; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { + content: 'Heading 3'; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { + content: 'Heading 4'; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { + content: 'Heading 5'; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { + content: 'Heading 6'; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { + font-size: 2em; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { + font-size: 1.5em; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { + font-size: 1.17em; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { + font-size: 1em; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { + font-size: 0.83em; + } + + .ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { + font-size: 0.67em; + } + + .ql-bubble .ql-picker.ql-font { + width: 108px; + } + + .ql-bubble .ql-picker.ql-font .ql-picker-label::before, + .ql-bubble .ql-picker.ql-font .ql-picker-item::before { + content: 'Sans Serif'; + } + + .ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]::before, + .ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { + content: 'Serif'; + } + + .ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before, + .ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { + content: 'Monospace'; + } + + .ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { + font-family: Georgia, Times New Roman, serif; + } + + .ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { + font-family: Monaco, Courier New, monospace; + } + + .ql-bubble .ql-picker.ql-size { + width: 98px; + } + + .ql-bubble .ql-picker.ql-size .ql-picker-label::before, + .ql-bubble .ql-picker.ql-size .ql-picker-item::before { + content: 'Normal'; + } + + .ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]::before, + .ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before { + content: 'Small'; + } + + .ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]::before, + .ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before { + content: 'Large'; + } + + .ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]::before, + .ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { + content: 'Huge'; + } + + .ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before { + font-size: 10px; + } + + .ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before { + font-size: 18px; + } + + .ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { + font-size: 32px; + } + + .ql-bubble .ql-color-picker.ql-background .ql-picker-item { + background-color: #fff; + } + + .ql-bubble .ql-color-picker.ql-color .ql-picker-item { + background-color: #000; + } + + .ql-bubble .ql-toolbar .ql-formats { + margin: 8px 12px 8px 0px; + } + + .ql-bubble .ql-toolbar .ql-formats:first-child { + margin-left: 12px; + } + + .ql-bubble .ql-color-picker svg { + margin: 1px; + } + + .ql-bubble .ql-color-picker .ql-picker-item.ql-selected, + .ql-bubble .ql-color-picker .ql-picker-item:hover { + border-color: #fff; + } + + .ql-bubble .ql-tooltip { + background-color: #444; + border-radius: 25px; + color: #fff; + } + + .ql-bubble .ql-tooltip-arrow { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + content: " "; + display: block; + left: 50%; + margin-left: -6px; + position: absolute; + } + + .ql-bubble .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow { + border-bottom: 6px solid #444; + top: -6px; + } + + .ql-bubble .ql-tooltip.ql-flip .ql-tooltip-arrow { + border-top: 6px solid #444; + bottom: -6px; + } + + .ql-bubble .ql-tooltip.ql-editing .ql-tooltip-editor { + display: block; + } + + .ql-bubble .ql-tooltip.ql-editing .ql-formats { + visibility: hidden; + } + + .ql-bubble .ql-tooltip-editor { + display: none; + } + + .ql-bubble .ql-tooltip-editor input[type=text] { + background: transparent; + border: none; + color: #fff; + font-size: 13px; + height: 100%; + outline: none; + padding: 10px 20px; + position: absolute; + width: 100%; + } + + .ql-bubble .ql-tooltip-editor a { + top: 10px; + position: absolute; + right: 20px; + } + + .ql-bubble .ql-tooltip-editor a:before { + color: #ccc; + content: "\D7"; + font-size: 16px; + font-weight: bold; + } + +.ql-container.ql-bubble:not(.ql-disabled) a { + position: relative; + white-space: nowrap; +} + + .ql-container.ql-bubble:not(.ql-disabled) a::before { + background-color: #444; + border-radius: 15px; + top: -5px; + font-size: 12px; + color: #fff; + content: attr(href); + font-weight: normal; + overflow: hidden; + padding: 5px 15px; + text-decoration: none; + z-index: 1; + } + + .ql-container.ql-bubble:not(.ql-disabled) a::after { + border-top: 6px solid #444; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + top: 0; + content: " "; + height: 0; + width: 0; + } + + .ql-container.ql-bubble:not(.ql-disabled) a::before, + .ql-container.ql-bubble:not(.ql-disabled) a::after { + left: 0; + margin-left: 50%; + position: absolute; + transform: translate(-50%, -100%); + transition: visibility 0s ease 200ms; + visibility: hidden; + } + + .ql-container.ql-bubble:not(.ql-disabled) a:hover::before, + .ql-container.ql-bubble:not(.ql-disabled) a:hover::after { + visibility: visible; + } diff --git a/Oqtane.Server/wwwroot/css/quill/quill1.3.7.snow.css b/Oqtane.Server/wwwroot/css/quill/quill1.3.7.snow.css new file mode 100644 index 00000000..31ffab18 --- /dev/null +++ b/Oqtane.Server/wwwroot/css/quill/quill1.3.7.snow.css @@ -0,0 +1,1170 @@ +/*! + * Quill Editor v1.3.7 + * https://quilljs.com/ + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */ +.ql-container { + box-sizing: border-box; + font-family: Helvetica, Arial, sans-serif; + font-size: 13px; + height: 100%; + margin: 0px; + position: relative; +} + + .ql-container.ql-disabled .ql-tooltip { + visibility: hidden; + } + + .ql-container.ql-disabled .ql-editor ul[data-checked] > li::before { + pointer-events: none; + } + +.ql-clipboard { + left: -100000px; + height: 1px; + overflow-y: hidden; + position: absolute; + top: 50%; +} + + .ql-clipboard p { + margin: 0; + padding: 0; + } + +.ql-editor { + box-sizing: border-box; + line-height: 1.42; + height: 100%; + outline: none; + overflow-y: auto; + padding: 12px 15px; + tab-size: 4; + -moz-tab-size: 4; + text-align: left; + white-space: pre-wrap; + word-wrap: break-word; +} + + .ql-editor > * { + cursor: text; + } + + .ql-editor p, + .ql-editor ol, + .ql-editor ul, + .ql-editor pre, + .ql-editor blockquote, + .ql-editor h1, + .ql-editor h2, + .ql-editor h3, + .ql-editor h4, + .ql-editor h5, + .ql-editor h6 { + margin: 0; + padding: 0; + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + } + + .ql-editor ol, + .ql-editor ul { + padding-left: 1.5em; + } + + .ql-editor ol > li, + .ql-editor ul > li { + list-style-type: none; + } + + .ql-editor ul > li::before { + content: '\2022'; + } + + .ql-editor ul[data-checked=true], + .ql-editor ul[data-checked=false] { + pointer-events: none; + } + + .ql-editor ul[data-checked=true] > li *, + .ql-editor ul[data-checked=false] > li * { + pointer-events: all; + } + + .ql-editor ul[data-checked=true] > li::before, + .ql-editor ul[data-checked=false] > li::before { + color: #777; + cursor: pointer; + pointer-events: all; + } + + .ql-editor ul[data-checked=true] > li::before { + content: '\2611'; + } + + .ql-editor ul[data-checked=false] > li::before { + content: '\2610'; + } + + .ql-editor li::before { + display: inline-block; + white-space: nowrap; + width: 1.2em; + } + + .ql-editor li:not(.ql-direction-rtl)::before { + margin-left: -1.5em; + margin-right: 0.3em; + text-align: right; + } + + .ql-editor li.ql-direction-rtl::before { + margin-left: 0.3em; + margin-right: -1.5em; + } + + .ql-editor ol li:not(.ql-direction-rtl), + .ql-editor ul li:not(.ql-direction-rtl) { + padding-left: 1.5em; + } + + .ql-editor ol li.ql-direction-rtl, + .ql-editor ul li.ql-direction-rtl { + padding-right: 1.5em; + } + + .ql-editor ol li { + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + counter-increment: list-0; + } + + .ql-editor ol li:before { + content: counter(list-0, decimal) '. '; + } + + .ql-editor ol li.ql-indent-1 { + counter-increment: list-1; + } + + .ql-editor ol li.ql-indent-1:before { + content: counter(list-1, lower-alpha) '. '; + } + + .ql-editor ol li.ql-indent-1 { + counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-2 { + counter-increment: list-2; + } + + .ql-editor ol li.ql-indent-2:before { + content: counter(list-2, lower-roman) '. '; + } + + .ql-editor ol li.ql-indent-2 { + counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-3 { + counter-increment: list-3; + } + + .ql-editor ol li.ql-indent-3:before { + content: counter(list-3, decimal) '. '; + } + + .ql-editor ol li.ql-indent-3 { + counter-reset: list-4 list-5 list-6 list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-4 { + counter-increment: list-4; + } + + .ql-editor ol li.ql-indent-4:before { + content: counter(list-4, lower-alpha) '. '; + } + + .ql-editor ol li.ql-indent-4 { + counter-reset: list-5 list-6 list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-5 { + counter-increment: list-5; + } + + .ql-editor ol li.ql-indent-5:before { + content: counter(list-5, lower-roman) '. '; + } + + .ql-editor ol li.ql-indent-5 { + counter-reset: list-6 list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-6 { + counter-increment: list-6; + } + + .ql-editor ol li.ql-indent-6:before { + content: counter(list-6, decimal) '. '; + } + + .ql-editor ol li.ql-indent-6 { + counter-reset: list-7 list-8 list-9; + } + + .ql-editor ol li.ql-indent-7 { + counter-increment: list-7; + } + + .ql-editor ol li.ql-indent-7:before { + content: counter(list-7, lower-alpha) '. '; + } + + .ql-editor ol li.ql-indent-7 { + counter-reset: list-8 list-9; + } + + .ql-editor ol li.ql-indent-8 { + counter-increment: list-8; + } + + .ql-editor ol li.ql-indent-8:before { + content: counter(list-8, lower-roman) '. '; + } + + .ql-editor ol li.ql-indent-8 { + counter-reset: list-9; + } + + .ql-editor ol li.ql-indent-9 { + counter-increment: list-9; + } + + .ql-editor ol li.ql-indent-9:before { + content: counter(list-9, decimal) '. '; + } + + .ql-editor .ql-indent-1:not(.ql-direction-rtl) { + padding-left: 3em; + } + + .ql-editor li.ql-indent-1:not(.ql-direction-rtl) { + padding-left: 4.5em; + } + + .ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right { + padding-right: 3em; + } + + .ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right { + padding-right: 4.5em; + } + + .ql-editor .ql-indent-2:not(.ql-direction-rtl) { + padding-left: 6em; + } + + .ql-editor li.ql-indent-2:not(.ql-direction-rtl) { + padding-left: 7.5em; + } + + .ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right { + padding-right: 6em; + } + + .ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right { + padding-right: 7.5em; + } + + .ql-editor .ql-indent-3:not(.ql-direction-rtl) { + padding-left: 9em; + } + + .ql-editor li.ql-indent-3:not(.ql-direction-rtl) { + padding-left: 10.5em; + } + + .ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right { + padding-right: 9em; + } + + .ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right { + padding-right: 10.5em; + } + + .ql-editor .ql-indent-4:not(.ql-direction-rtl) { + padding-left: 12em; + } + + .ql-editor li.ql-indent-4:not(.ql-direction-rtl) { + padding-left: 13.5em; + } + + .ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right { + padding-right: 12em; + } + + .ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right { + padding-right: 13.5em; + } + + .ql-editor .ql-indent-5:not(.ql-direction-rtl) { + padding-left: 15em; + } + + .ql-editor li.ql-indent-5:not(.ql-direction-rtl) { + padding-left: 16.5em; + } + + .ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right { + padding-right: 15em; + } + + .ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right { + padding-right: 16.5em; + } + + .ql-editor .ql-indent-6:not(.ql-direction-rtl) { + padding-left: 18em; + } + + .ql-editor li.ql-indent-6:not(.ql-direction-rtl) { + padding-left: 19.5em; + } + + .ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right { + padding-right: 18em; + } + + .ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right { + padding-right: 19.5em; + } + + .ql-editor .ql-indent-7:not(.ql-direction-rtl) { + padding-left: 21em; + } + + .ql-editor li.ql-indent-7:not(.ql-direction-rtl) { + padding-left: 22.5em; + } + + .ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right { + padding-right: 21em; + } + + .ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right { + padding-right: 22.5em; + } + + .ql-editor .ql-indent-8:not(.ql-direction-rtl) { + padding-left: 24em; + } + + .ql-editor li.ql-indent-8:not(.ql-direction-rtl) { + padding-left: 25.5em; + } + + .ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right { + padding-right: 24em; + } + + .ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right { + padding-right: 25.5em; + } + + .ql-editor .ql-indent-9:not(.ql-direction-rtl) { + padding-left: 27em; + } + + .ql-editor li.ql-indent-9:not(.ql-direction-rtl) { + padding-left: 28.5em; + } + + .ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right { + padding-right: 27em; + } + + .ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right { + padding-right: 28.5em; + } + + .ql-editor .ql-video { + display: block; + max-width: 100%; + } + + .ql-editor .ql-video.ql-align-center { + margin: 0 auto; + } + + .ql-editor .ql-video.ql-align-right { + margin: 0 0 0 auto; + } + + .ql-editor .ql-bg-black { + background-color: #000; + } + + .ql-editor .ql-bg-red { + background-color: #e60000; + } + + .ql-editor .ql-bg-orange { + background-color: #f90; + } + + .ql-editor .ql-bg-yellow { + background-color: #ff0; + } + + .ql-editor .ql-bg-green { + background-color: #008a00; + } + + .ql-editor .ql-bg-blue { + background-color: #06c; + } + + .ql-editor .ql-bg-purple { + background-color: #93f; + } + + .ql-editor .ql-color-white { + color: #fff; + } + + .ql-editor .ql-color-red { + color: #e60000; + } + + .ql-editor .ql-color-orange { + color: #f90; + } + + .ql-editor .ql-color-yellow { + color: #ff0; + } + + .ql-editor .ql-color-green { + color: #008a00; + } + + .ql-editor .ql-color-blue { + color: #06c; + } + + .ql-editor .ql-color-purple { + color: #93f; + } + + .ql-editor .ql-font-serif { + font-family: Georgia, Times New Roman, serif; + } + + .ql-editor .ql-font-monospace { + font-family: Monaco, Courier New, monospace; + } + + .ql-editor .ql-size-small { + font-size: 0.75em; + } + + .ql-editor .ql-size-large { + font-size: 1.5em; + } + + .ql-editor .ql-size-huge { + font-size: 2.5em; + } + + .ql-editor .ql-direction-rtl { + direction: rtl; + text-align: inherit; + } + + .ql-editor .ql-align-center { + text-align: center; + } + + .ql-editor .ql-align-justify { + text-align: justify; + } + + .ql-editor .ql-align-right { + text-align: right; + } + + .ql-editor.ql-blank::before { + color: rgba(0,0,0,0.6); + content: attr(data-placeholder); + font-style: italic; + left: 15px; + pointer-events: none; + position: absolute; + right: 15px; + } + +.ql-snow.ql-toolbar:after, +.ql-snow .ql-toolbar:after { + clear: both; + content: ''; + display: table; +} + +.ql-snow.ql-toolbar button, +.ql-snow .ql-toolbar button { + background: none; + border: none; + cursor: pointer; + display: inline-block; + float: left; + height: 24px; + padding: 3px 5px; + width: 28px; +} + + .ql-snow.ql-toolbar button svg, + .ql-snow .ql-toolbar button svg { + float: left; + height: 100%; + } + + .ql-snow.ql-toolbar button:active:hover, + .ql-snow .ql-toolbar button:active:hover { + outline: none; + } + +.ql-snow.ql-toolbar input.ql-image[type=file], +.ql-snow .ql-toolbar input.ql-image[type=file] { + display: none; +} + +.ql-snow.ql-toolbar button:hover, +.ql-snow .ql-toolbar button:hover, +.ql-snow.ql-toolbar button:focus, +.ql-snow .ql-toolbar button:focus, +.ql-snow.ql-toolbar button.ql-active, +.ql-snow .ql-toolbar button.ql-active, +.ql-snow.ql-toolbar .ql-picker-label:hover, +.ql-snow .ql-toolbar .ql-picker-label:hover, +.ql-snow.ql-toolbar .ql-picker-label.ql-active, +.ql-snow .ql-toolbar .ql-picker-label.ql-active, +.ql-snow.ql-toolbar .ql-picker-item:hover, +.ql-snow .ql-toolbar .ql-picker-item:hover, +.ql-snow.ql-toolbar .ql-picker-item.ql-selected, +.ql-snow .ql-toolbar .ql-picker-item.ql-selected { + color: #06c; +} + + .ql-snow.ql-toolbar button:hover .ql-fill, + .ql-snow .ql-toolbar button:hover .ql-fill, + .ql-snow.ql-toolbar button:focus .ql-fill, + .ql-snow .ql-toolbar button:focus .ql-fill, + .ql-snow.ql-toolbar button.ql-active .ql-fill, + .ql-snow .ql-toolbar button.ql-active .ql-fill, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill, + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill, + .ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill, + .ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill, + .ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill, + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill { + fill: #06c; + } + + .ql-snow.ql-toolbar button:hover .ql-stroke, + .ql-snow .ql-toolbar button:hover .ql-stroke, + .ql-snow.ql-toolbar button:focus .ql-stroke, + .ql-snow .ql-toolbar button:focus .ql-stroke, + .ql-snow.ql-toolbar button.ql-active .ql-stroke, + .ql-snow .ql-toolbar button.ql-active .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke, + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke, + .ql-snow.ql-toolbar button:hover .ql-stroke-miter, + .ql-snow .ql-toolbar button:hover .ql-stroke-miter, + .ql-snow.ql-toolbar button:focus .ql-stroke-miter, + .ql-snow .ql-toolbar button:focus .ql-stroke-miter, + .ql-snow.ql-toolbar button.ql-active .ql-stroke-miter, + .ql-snow .ql-toolbar button.ql-active .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter, + .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, + .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter, + .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter, + .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, + .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter { + stroke: #06c; + } + +@media (pointer: coarse) { + .ql-snow.ql-toolbar button:hover:not(.ql-active), + .ql-snow .ql-toolbar button:hover:not(.ql-active) { + color: #444; + } + + .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill, + .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill, + .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill { + fill: #444; + } + + .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke, + .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke, + .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter, + .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter { + stroke: #444; + } +} + +.ql-snow { + box-sizing: border-box; +} + + .ql-snow * { + box-sizing: border-box; + } + + .ql-snow .ql-hidden { + display: none; + } + + .ql-snow .ql-out-bottom, + .ql-snow .ql-out-top { + visibility: hidden; + } + + .ql-snow .ql-tooltip { + position: absolute; + transform: translateY(10px); + } + + .ql-snow .ql-tooltip a { + cursor: pointer; + text-decoration: none; + } + + .ql-snow .ql-tooltip.ql-flip { + transform: translateY(-10px); + } + + .ql-snow .ql-formats { + display: inline-block; + vertical-align: middle; + } + + .ql-snow .ql-formats:after { + clear: both; + content: ''; + display: table; + } + + .ql-snow .ql-stroke { + fill: none; + stroke: #444; + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 2; + } + + .ql-snow .ql-stroke-miter { + fill: none; + stroke: #444; + stroke-miterlimit: 10; + stroke-width: 2; + } + + .ql-snow .ql-fill, + .ql-snow .ql-stroke.ql-fill { + fill: #444; + } + + .ql-snow .ql-empty { + fill: none; + } + + .ql-snow .ql-even { + fill-rule: evenodd; + } + + .ql-snow .ql-thin, + .ql-snow .ql-stroke.ql-thin { + stroke-width: 1; + } + + .ql-snow .ql-transparent { + opacity: 0.4; + } + + .ql-snow .ql-direction svg:last-child { + display: none; + } + + .ql-snow .ql-direction.ql-active svg:last-child { + display: inline; + } + + .ql-snow .ql-direction.ql-active svg:first-child { + display: none; + } + + .ql-snow .ql-editor h1 { + font-size: 2em; + } + + .ql-snow .ql-editor h2 { + font-size: 1.5em; + } + + .ql-snow .ql-editor h3 { + font-size: 1.17em; + } + + .ql-snow .ql-editor h4 { + font-size: 1em; + } + + .ql-snow .ql-editor h5 { + font-size: 0.83em; + } + + .ql-snow .ql-editor h6 { + font-size: 0.67em; + } + + .ql-snow .ql-editor a { + text-decoration: underline; + } + + .ql-snow .ql-editor blockquote { + border-left: 4px solid #ccc; + margin-bottom: 5px; + margin-top: 5px; + padding-left: 16px; + } + + .ql-snow .ql-editor code, + .ql-snow .ql-editor pre { + background-color: #f0f0f0; + border-radius: 3px; + } + + .ql-snow .ql-editor pre { + white-space: pre-wrap; + margin-bottom: 5px; + margin-top: 5px; + padding: 5px 10px; + } + + .ql-snow .ql-editor code { + font-size: 85%; + padding: 2px 4px; + } + + .ql-snow .ql-editor pre.ql-syntax { + background-color: #23241f; + color: #f8f8f2; + overflow: visible; + } + + .ql-snow .ql-editor img { + max-width: 100%; + } + + .ql-snow .ql-picker { + color: #444; + display: inline-block; + float: left; + font-size: 14px; + font-weight: 500; + height: 24px; + position: relative; + vertical-align: middle; + } + + .ql-snow .ql-picker-label { + cursor: pointer; + display: inline-block; + height: 100%; + padding-left: 8px; + padding-right: 2px; + position: relative; + width: 100%; + } + + .ql-snow .ql-picker-label::before { + display: inline-block; + line-height: 22px; + } + + .ql-snow .ql-picker-options { + background-color: #fff; + display: none; + min-width: 100%; + padding: 4px 8px; + position: absolute; + white-space: nowrap; + } + + .ql-snow .ql-picker-options .ql-picker-item { + cursor: pointer; + display: block; + padding-bottom: 5px; + padding-top: 5px; + } + + .ql-snow .ql-picker.ql-expanded .ql-picker-label { + color: #ccc; + z-index: 2; + } + + .ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill { + fill: #ccc; + } + + .ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke { + stroke: #ccc; + } + + .ql-snow .ql-picker.ql-expanded .ql-picker-options { + display: block; + margin-top: -1px; + top: 100%; + z-index: 1; + } + + .ql-snow .ql-color-picker, + .ql-snow .ql-icon-picker { + width: 28px; + } + + .ql-snow .ql-color-picker .ql-picker-label, + .ql-snow .ql-icon-picker .ql-picker-label { + padding: 2px 4px; + } + + .ql-snow .ql-color-picker .ql-picker-label svg, + .ql-snow .ql-icon-picker .ql-picker-label svg { + right: 4px; + } + + .ql-snow .ql-icon-picker .ql-picker-options { + padding: 4px 0px; + } + + .ql-snow .ql-icon-picker .ql-picker-item { + height: 24px; + width: 24px; + padding: 2px 4px; + } + + .ql-snow .ql-color-picker .ql-picker-options { + padding: 3px 5px; + width: 152px; + } + + .ql-snow .ql-color-picker .ql-picker-item { + border: 1px solid transparent; + float: left; + height: 16px; + margin: 2px; + padding: 0px; + width: 16px; + } + + .ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg { + position: absolute; + margin-top: -9px; + right: 0; + top: 50%; + width: 18px; + } + + .ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before, + .ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before, + .ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before, + .ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before, + .ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before, + .ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before { + content: attr(data-label); + } + + .ql-snow .ql-picker.ql-header { + width: 98px; + } + + .ql-snow .ql-picker.ql-header .ql-picker-label::before, + .ql-snow .ql-picker.ql-header .ql-picker-item::before { + content: 'Normal'; + } + + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before, + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { + content: 'Heading 1'; + } + + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { + content: 'Heading 2'; + } + + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { + content: 'Heading 3'; + } + + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { + content: 'Heading 4'; + } + + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { + content: 'Heading 5'; + } + + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { + content: 'Heading 6'; + } + + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { + font-size: 2em; + } + + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { + font-size: 1.5em; + } + + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { + font-size: 1.17em; + } + + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { + font-size: 1em; + } + + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { + font-size: 0.83em; + } + + .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { + font-size: 0.67em; + } + + .ql-snow .ql-picker.ql-font { + width: 108px; + } + + .ql-snow .ql-picker.ql-font .ql-picker-label::before, + .ql-snow .ql-picker.ql-font .ql-picker-item::before { + content: 'Sans Serif'; + } + + .ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before, + .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { + content: 'Serif'; + } + + .ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before, + .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { + content: 'Monospace'; + } + + .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { + font-family: Georgia, Times New Roman, serif; + } + + .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { + font-family: Monaco, Courier New, monospace; + } + + .ql-snow .ql-picker.ql-size { + width: 98px; + } + + .ql-snow .ql-picker.ql-size .ql-picker-label::before, + .ql-snow .ql-picker.ql-size .ql-picker-item::before { + content: 'Normal'; + } + + .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before, + .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before { + content: 'Small'; + } + + .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before, + .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before { + content: 'Large'; + } + + .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before, + .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { + content: 'Huge'; + } + + .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before { + font-size: 10px; + } + + .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before { + font-size: 18px; + } + + .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { + font-size: 32px; + } + + .ql-snow .ql-color-picker.ql-background .ql-picker-item { + background-color: #fff; + } + + .ql-snow .ql-color-picker.ql-color .ql-picker-item { + background-color: #000; + } + +.ql-toolbar.ql-snow { + border: 1px solid #ccc; + box-sizing: border-box; + font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; + padding: 8px; +} + + .ql-toolbar.ql-snow .ql-formats { + margin-right: 15px; + } + + .ql-toolbar.ql-snow .ql-picker-label { + border: 1px solid transparent; + } + + .ql-toolbar.ql-snow .ql-picker-options { + border: 1px solid transparent; + box-shadow: rgba(0,0,0,0.2) 0 2px 8px; + } + + .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label { + border-color: #ccc; + } + + .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options { + border-color: #ccc; + } + + .ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected, + .ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover { + border-color: #000; + } + + .ql-toolbar.ql-snow + .ql-container.ql-snow { + border-top: 0px; + } + +.ql-snow .ql-tooltip { + background-color: #fff; + border: 1px solid #ccc; + box-shadow: 0px 0px 5px #ddd; + color: #444; + padding: 5px 12px; + white-space: nowrap; +} + + .ql-snow .ql-tooltip::before { + content: "Visit URL:"; + line-height: 26px; + margin-right: 8px; + } + + .ql-snow .ql-tooltip input[type=text] { + display: none; + border: 1px solid #ccc; + font-size: 13px; + height: 26px; + margin: 0px; + padding: 3px 5px; + width: 170px; + } + + .ql-snow .ql-tooltip a.ql-preview { + display: inline-block; + max-width: 200px; + overflow-x: hidden; + text-overflow: ellipsis; + vertical-align: top; + } + + .ql-snow .ql-tooltip a.ql-action::after { + border-right: 1px solid #ccc; + content: 'Edit'; + margin-left: 16px; + padding-right: 8px; + } + + .ql-snow .ql-tooltip a.ql-remove::before { + content: 'Remove'; + margin-left: 8px; + } + + .ql-snow .ql-tooltip a { + line-height: 26px; + } + + .ql-snow .ql-tooltip.ql-editing a.ql-preview, + .ql-snow .ql-tooltip.ql-editing a.ql-remove { + display: none; + } + + .ql-snow .ql-tooltip.ql-editing input[type=text] { + display: inline-block; + } + + .ql-snow .ql-tooltip.ql-editing a.ql-action::after { + border-right: 0px; + content: 'Save'; + padding-right: 0px; + } + + .ql-snow .ql-tooltip[data-mode=link]::before { + content: "Enter link:"; + } + + .ql-snow .ql-tooltip[data-mode=formula]::before { + content: "Enter formula:"; + } + + .ql-snow .ql-tooltip[data-mode=video]::before { + content: "Enter video:"; + } + +.ql-snow a { + color: #06c; +} + +.ql-container.ql-snow { + border: 1px solid #ccc; +} diff --git a/Oqtane.Server/wwwroot/favicon.ico b/Oqtane.Server/wwwroot/favicon.ico index 0e569015..550d600e 100644 Binary files a/Oqtane.Server/wwwroot/favicon.ico and b/Oqtane.Server/wwwroot/favicon.ico differ diff --git a/Oqtane.Server/wwwroot/js/quill1.3.6.min.js b/Oqtane.Server/wwwroot/js/quill1.3.6.min.js deleted file mode 100644 index dda45e45..00000000 --- a/Oqtane.Server/wwwroot/js/quill1.3.6.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Quill Editor v1.3.6 - * https://quilljs.com/ - * Copyright (c) 2014, Jason Chen - * Copyright (c) 2013, salesforce.com - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Quill=e():t.Quill=e()}("undefined"!=typeof self?self:this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=45)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(17),o=n(18),i=n(19),l=n(48),a=n(49),s=n(50),u=n(51),c=n(52),f=n(11),h=n(29),p=n(30),d=n(28),y=n(1),v={Scope:y.Scope,create:y.create,find:y.find,query:y.query,register:y.register,Container:r.default,Format:o.default,Leaf:i.default,Embed:u.default,Scroll:l.default,Block:s.default,Inline:a.default,Text:c.default,Attributor:{Attribute:f.default,Class:h.default,Style:p.default,Store:d.default}};e.default=v},function(t,e,n){"use strict";function r(t,e){var n=i(t);if(null==n)throw new s("Unable to create "+t+" blot");var r=n;return new r(t instanceof Node||t.nodeType===Node.TEXT_NODE?t:r.create(e),e)}function o(t,n){return void 0===n&&(n=!1),null==t?null:null!=t[e.DATA_KEY]?t[e.DATA_KEY].blot:n?o(t.parentNode,n):null}function i(t,e){void 0===e&&(e=p.ANY);var n;if("string"==typeof t)n=h[t]||u[t];else if(t instanceof Text||t.nodeType===Node.TEXT_NODE)n=h.text;else if("number"==typeof t)t&p.LEVEL&p.BLOCK?n=h.block:t&p.LEVEL&p.INLINE&&(n=h.inline);else if(t instanceof HTMLElement){var r=(t.getAttribute("class")||"").split(/\s+/);for(var o in r)if(n=c[r[o]])break;n=n||f[t.tagName]}return null==n?null:e&p.LEVEL&n.scope&&e&p.TYPE&n.scope?n:null}function l(){for(var t=[],e=0;e1)return t.map(function(t){return l(t)});var n=t[0];if("string"!=typeof n.blotName&&"string"!=typeof n.attrName)throw new s("Invalid definition");if("abstract"===n.blotName)throw new s("Cannot register abstract class");if(h[n.blotName||n.attrName]=n,"string"==typeof n.keyName)u[n.keyName]=n;else if(null!=n.className&&(c[n.className]=n),null!=n.tagName){Array.isArray(n.tagName)?n.tagName=n.tagName.map(function(t){return t.toUpperCase()}):n.tagName=n.tagName.toUpperCase();var r=Array.isArray(n.tagName)?n.tagName:[n.tagName];r.forEach(function(t){null!=f[t]&&null!=n.className||(f[t]=n)})}return n}var a=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var s=function(t){function e(e){var n=this;return e="[Parchment] "+e,n=t.call(this,e)||this,n.message=e,n.name=n.constructor.name,n}return a(e,t),e}(Error);e.ParchmentError=s;var u={},c={},f={},h={};e.DATA_KEY="__blot";var p;!function(t){t[t.TYPE=3]="TYPE",t[t.LEVEL=12]="LEVEL",t[t.ATTRIBUTE=13]="ATTRIBUTE",t[t.BLOT=14]="BLOT",t[t.INLINE=7]="INLINE",t[t.BLOCK=11]="BLOCK",t[t.BLOCK_BLOT=10]="BLOCK_BLOT",t[t.INLINE_BLOT=6]="INLINE_BLOT",t[t.BLOCK_ATTRIBUTE=9]="BLOCK_ATTRIBUTE",t[t.INLINE_ATTRIBUTE=5]="INLINE_ATTRIBUTE",t[t.ANY=15]="ANY"}(p=e.Scope||(e.Scope={})),e.create=r,e.find=o,e.query=i,e.register=l},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return void 0===i||n.call(t,i)};t.exports=function t(){var e,n,r,l,a,s,u=arguments[0],c=1,f=arguments.length,h=!1;for("boolean"==typeof u&&(h=u,u=arguments[1]||{},c=2),(null==u||"object"!=typeof u&&"function"!=typeof u)&&(u={});c1&&void 0!==arguments[1]?arguments[1]:{};return null==t?e:("function"==typeof t.formats&&(e=(0,f.default)(e,t.formats())),null==t.parent||"scroll"==t.parent.blotName||t.parent.statics.scope!==t.statics.scope?e:a(t.parent,e))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.BlockEmbed=e.bubbleFormats=void 0;var s=function(){function t(t,e){for(var n=0;n0&&(t1&&void 0!==arguments[1]&&arguments[1];if(n&&(0===t||t>=this.length()-1)){var r=this.clone();return 0===t?(this.parent.insertBefore(r,this),this):(this.parent.insertBefore(r,this.next),r)}var o=u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"split",this).call(this,t,n);return this.cache={},o}}]),e}(y.default.Block);x.blotName="block",x.tagName="P",x.defaultChild="break",x.allowedChildren=[m.default,y.default.Embed,O.default],e.bubbleFormats=a,e.BlockEmbed=w,e.default=x},function(t,e,n){var r=n(54),o=n(12),i=n(2),l=n(20),a=String.fromCharCode(0),s=function(t){Array.isArray(t)?this.ops=t:null!=t&&Array.isArray(t.ops)?this.ops=t.ops:this.ops=[]};s.prototype.insert=function(t,e){var n={};return 0===t.length?this:(n.insert=t,null!=e&&"object"==typeof e&&Object.keys(e).length>0&&(n.attributes=e),this.push(n))},s.prototype.delete=function(t){return t<=0?this:this.push({delete:t})},s.prototype.retain=function(t,e){if(t<=0)return this;var n={retain:t};return null!=e&&"object"==typeof e&&Object.keys(e).length>0&&(n.attributes=e),this.push(n)},s.prototype.push=function(t){var e=this.ops.length,n=this.ops[e-1];if(t=i(!0,{},t),"object"==typeof n){if("number"==typeof t.delete&&"number"==typeof n.delete)return this.ops[e-1]={delete:n.delete+t.delete},this;if("number"==typeof n.delete&&null!=t.insert&&(e-=1,"object"!=typeof(n=this.ops[e-1])))return this.ops.unshift(t),this;if(o(t.attributes,n.attributes)){if("string"==typeof t.insert&&"string"==typeof n.insert)return this.ops[e-1]={insert:n.insert+t.insert},"object"==typeof t.attributes&&(this.ops[e-1].attributes=t.attributes),this;if("number"==typeof t.retain&&"number"==typeof n.retain)return this.ops[e-1]={retain:n.retain+t.retain},"object"==typeof t.attributes&&(this.ops[e-1].attributes=t.attributes),this}}return e===this.ops.length?this.ops.push(t):this.ops.splice(e,0,t),this},s.prototype.chop=function(){var t=this.ops[this.ops.length-1];return t&&t.retain&&!t.attributes&&this.ops.pop(),this},s.prototype.filter=function(t){return this.ops.filter(t)},s.prototype.forEach=function(t){this.ops.forEach(t)},s.prototype.map=function(t){return this.ops.map(t)},s.prototype.partition=function(t){var e=[],n=[];return this.forEach(function(r){(t(r)?e:n).push(r)}),[e,n]},s.prototype.reduce=function(t,e){return this.ops.reduce(t,e)},s.prototype.changeLength=function(){return this.reduce(function(t,e){return e.insert?t+l.length(e):e.delete?t-e.delete:t},0)},s.prototype.length=function(){return this.reduce(function(t,e){return t+l.length(e)},0)},s.prototype.slice=function(t,e){t=t||0,"number"!=typeof e&&(e=1/0);for(var n=[],r=l.iterator(this.ops),o=0;o0&&(e.push(t.ops[0]),e.ops=e.ops.concat(t.ops.slice(1))),e},s.prototype.diff=function(t,e){if(this.ops===t.ops)return new s;var n=[this,t].map(function(e){return e.map(function(n){if(null!=n.insert)return"string"==typeof n.insert?n.insert:a;var r=e===t?"on":"with";throw new Error("diff() called "+r+" non-document")}).join("")}),i=new s,u=r(n[0],n[1],e),c=l.iterator(this.ops),f=l.iterator(t.ops);return u.forEach(function(t){for(var e=t[1].length;e>0;){var n=0;switch(t[0]){case r.INSERT:n=Math.min(f.peekLength(),e),i.push(f.next(n));break;case r.DELETE:n=Math.min(e,c.peekLength()),c.next(n),i.delete(n);break;case r.EQUAL:n=Math.min(c.peekLength(),f.peekLength(),e);var a=c.next(n),s=f.next(n);o(a.insert,s.insert)?i.retain(n,l.attributes.diff(a.attributes,s.attributes)):i.push(s).delete(n)}e-=n}}),i.chop()},s.prototype.eachLine=function(t,e){e=e||"\n";for(var n=l.iterator(this.ops),r=new s,o=0;n.hasNext();){if("insert"!==n.peekType())return;var i=n.peek(),a=l.length(i)-n.peekLength(),u="string"==typeof i.insert?i.insert.indexOf(e,a)-a:-1;if(u<0)r.push(n.next());else if(u>0)r.push(n.next(u));else{if(!1===t(r,n.next(1).attributes||{},o))return;o+=1,r=new s}}r.length()>0&&t(r,{},o)},s.prototype.transform=function(t,e){if(e=!!e,"number"==typeof t)return this.transformPosition(t,e);for(var n=l.iterator(this.ops),r=l.iterator(t.ops),o=new s;n.hasNext()||r.hasNext();)if("insert"!==n.peekType()||!e&&"insert"===r.peekType())if("insert"===r.peekType())o.push(r.next());else{var i=Math.min(n.peekLength(),r.peekLength()),a=n.next(i),u=r.next(i);if(a.delete)continue;u.delete?o.push(u):o.retain(i,l.attributes.transform(a.attributes,u.attributes,e))}else o.retain(l.length(n.next()));return o.chop()},s.prototype.transformPosition=function(t,e){e=!!e;for(var n=l.iterator(this.ops),r=0;n.hasNext()&&r<=t;){var o=n.peekLength(),i=n.peekType();n.next(),"delete"!==i?("insert"===i&&(r0){var n=this.parent.isolate(this.offset(),this.length());this.moveChildren(n),n.wrap(this)}}}],[{key:"compare",value:function(t,n){var r=e.order.indexOf(t),o=e.order.indexOf(n);return r>=0||o>=0?r-o:t===n?0:t0){var a,s=[g.default.events.TEXT_CHANGE,l,i,e];if((a=this.emitter).emit.apply(a,[g.default.events.EDITOR_CHANGE].concat(s)),e!==g.default.sources.SILENT){var c;(c=this.emitter).emit.apply(c,s)}}return l}function s(t,e,n,r,o){var i={};return"number"==typeof t.index&&"number"==typeof t.length?"number"!=typeof e?(o=r,r=n,n=e,e=t.length,t=t.index):(e=t.length,t=t.index):"number"!=typeof e&&(o=r,r=n,n=e,e=0),"object"===(void 0===n?"undefined":c(n))?(i=n,o=r):"string"==typeof n&&(null!=r?i[n]=r:o=n),o=o||g.default.sources.API,[t,e,i,o]}function u(t,e,n,r){if(null==t)return null;var o=void 0,i=void 0;if(e instanceof d.default){var l=[t.index,t.index+t.length].map(function(t){return e.transformPosition(t,r!==g.default.sources.USER)}),a=f(l,2);o=a[0],i=a[1]}else{var s=[t.index,t.index+t.length].map(function(t){return t=0?t+n:Math.max(e,t+n)}),u=f(s,2);o=u[0],i=u[1]}return new x.Range(o,i-o)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.overload=e.expandConfig=void 0;var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if(i(this,t),this.options=l(e,r),this.container=this.options.container,null==this.container)return P.error("Invalid Quill container",e);this.options.debug&&t.debug(this.options.debug);var o=this.container.innerHTML.trim();this.container.classList.add("ql-container"),this.container.innerHTML="",this.container.__quill=this,this.root=this.addContainer("ql-editor"),this.root.classList.add("ql-blank"),this.root.setAttribute("data-gramm",!1),this.scrollingContainer=this.options.scrollingContainer||this.root,this.emitter=new g.default,this.scroll=w.default.create(this.root,{emitter:this.emitter,whitelist:this.options.formats}),this.editor=new v.default(this.scroll),this.selection=new k.default(this.scroll,this.emitter),this.theme=new this.options.theme(this,this.options),this.keyboard=this.theme.addModule("keyboard"),this.clipboard=this.theme.addModule("clipboard"),this.history=this.theme.addModule("history"),this.theme.init(),this.emitter.on(g.default.events.EDITOR_CHANGE,function(t){t===g.default.events.TEXT_CHANGE&&n.root.classList.toggle("ql-blank",n.editor.isBlank())}),this.emitter.on(g.default.events.SCROLL_UPDATE,function(t,e){var r=n.selection.lastRange,o=r&&0===r.length?r.index:void 0;a.call(n,function(){return n.editor.update(null,e,o)},t)});var s=this.clipboard.convert("
    "+o+"


    ");this.setContents(s),this.history.clear(),this.options.placeholder&&this.root.setAttribute("data-placeholder",this.options.placeholder),this.options.readOnly&&this.disable()}return h(t,null,[{key:"debug",value:function(t){!0===t&&(t="log"),A.default.level(t)}},{key:"find",value:function(t){return t.__quill||w.default.find(t)}},{key:"import",value:function(t){return null==this.imports[t]&&P.error("Cannot import "+t+". Are you sure it was registered?"),this.imports[t]}},{key:"register",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"!=typeof t){var o=t.attrName||t.blotName;"string"==typeof o?this.register("formats/"+o,t,e):Object.keys(t).forEach(function(r){n.register(r,t[r],e)})}else null==this.imports[t]||r||P.warn("Overwriting "+t+" with",e),this.imports[t]=e,(t.startsWith("blots/")||t.startsWith("formats/"))&&"abstract"!==e.blotName?w.default.register(e):t.startsWith("modules")&&"function"==typeof e.register&&e.register()}}]),h(t,[{key:"addContainer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if("string"==typeof t){var n=t;t=document.createElement("div"),t.classList.add(n)}return this.container.insertBefore(t,e),t}},{key:"blur",value:function(){this.selection.setRange(null)}},{key:"deleteText",value:function(t,e,n){var r=this,o=s(t,e,n),i=f(o,4);return t=i[0],e=i[1],n=i[3],a.call(this,function(){return r.editor.deleteText(t,e)},n,t,-1*e)}},{key:"disable",value:function(){this.enable(!1)}},{key:"enable",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.scroll.enable(t),this.container.classList.toggle("ql-disabled",!t)}},{key:"focus",value:function(){var t=this.scrollingContainer.scrollTop;this.selection.focus(),this.scrollingContainer.scrollTop=t,this.scrollIntoView()}},{key:"format",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:g.default.sources.API;return a.call(this,function(){var r=n.getSelection(!0),i=new d.default;if(null==r)return i;if(w.default.query(t,w.default.Scope.BLOCK))i=n.editor.formatLine(r.index,r.length,o({},t,e));else{if(0===r.length)return n.selection.format(t,e),i;i=n.editor.formatText(r.index,r.length,o({},t,e))}return n.setSelection(r,g.default.sources.SILENT),i},r)}},{key:"formatLine",value:function(t,e,n,r,o){var i=this,l=void 0,u=s(t,e,n,r,o),c=f(u,4);return t=c[0],e=c[1],l=c[2],o=c[3],a.call(this,function(){return i.editor.formatLine(t,e,l)},o,t,0)}},{key:"formatText",value:function(t,e,n,r,o){var i=this,l=void 0,u=s(t,e,n,r,o),c=f(u,4);return t=c[0],e=c[1],l=c[2],o=c[3],a.call(this,function(){return i.editor.formatText(t,e,l)},o,t,0)}},{key:"getBounds",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=void 0;n="number"==typeof t?this.selection.getBounds(t,e):this.selection.getBounds(t.index,t.length);var r=this.container.getBoundingClientRect();return{bottom:n.bottom-r.top,height:n.height,left:n.left-r.left,right:n.right-r.left,top:n.top-r.top,width:n.width}}},{key:"getContents",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getLength()-t,n=s(t,e),r=f(n,2);return t=r[0],e=r[1],this.editor.getContents(t,e)}},{key:"getFormat",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.getSelection(!0),e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return"number"==typeof t?this.editor.getFormat(t,e):this.editor.getFormat(t.index,t.length)}},{key:"getIndex",value:function(t){return t.offset(this.scroll)}},{key:"getLength",value:function(){return this.scroll.length()}},{key:"getLeaf",value:function(t){return this.scroll.leaf(t)}},{key:"getLine",value:function(t){return this.scroll.line(t)}},{key:"getLines",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE;return"number"!=typeof t?this.scroll.lines(t.index,t.length):this.scroll.lines(t,e)}},{key:"getModule",value:function(t){return this.theme.modules[t]}},{key:"getSelection",value:function(){return arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.focus(),this.update(),this.selection.getRange()[0]}},{key:"getText",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getLength()-t,n=s(t,e),r=f(n,2);return t=r[0],e=r[1],this.editor.getText(t,e)}},{key:"hasFocus",value:function(){return this.selection.hasFocus()}},{key:"insertEmbed",value:function(e,n,r){var o=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.sources.API;return a.call(this,function(){return o.editor.insertEmbed(e,n,r)},i,e)}},{key:"insertText",value:function(t,e,n,r,o){var i=this,l=void 0,u=s(t,0,n,r,o),c=f(u,4);return t=c[0],l=c[2],o=c[3],a.call(this,function(){return i.editor.insertText(t,e,l)},o,t,e.length)}},{key:"isEnabled",value:function(){return!this.container.classList.contains("ql-disabled")}},{key:"off",value:function(){return this.emitter.off.apply(this.emitter,arguments)}},{key:"on",value:function(){return this.emitter.on.apply(this.emitter,arguments)}},{key:"once",value:function(){return this.emitter.once.apply(this.emitter,arguments)}},{key:"pasteHTML",value:function(t,e,n){this.clipboard.dangerouslyPasteHTML(t,e,n)}},{key:"removeFormat",value:function(t,e,n){var r=this,o=s(t,e,n),i=f(o,4);return t=i[0],e=i[1],n=i[3],a.call(this,function(){return r.editor.removeFormat(t,e)},n,t)}},{key:"scrollIntoView",value:function(){this.selection.scrollIntoView(this.scrollingContainer)}},{key:"setContents",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g.default.sources.API;return a.call(this,function(){t=new d.default(t);var n=e.getLength(),r=e.editor.deleteText(0,n),o=e.editor.applyDelta(t),i=o.ops[o.ops.length-1];return null!=i&&"string"==typeof i.insert&&"\n"===i.insert[i.insert.length-1]&&(e.editor.deleteText(e.getLength()-1,1),o.delete(1)),r.compose(o)},n)}},{key:"setSelection",value:function(e,n,r){if(null==e)this.selection.setRange(null,n||t.sources.API);else{var o=s(e,n,r),i=f(o,4);e=i[0],n=i[1],r=i[3],this.selection.setRange(new x.Range(e,n),r),r!==g.default.sources.SILENT&&this.selection.scrollIntoView(this.scrollingContainer)}}},{key:"setText",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g.default.sources.API,n=(new d.default).insert(t);return this.setContents(n,e)}},{key:"update",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g.default.sources.USER,e=this.scroll.update(t);return this.selection.update(t),e}},{key:"updateContents",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g.default.sources.API;return a.call(this,function(){return t=new d.default(t),e.editor.applyDelta(t,n)},n,!0)}}]),t}();S.DEFAULTS={bounds:null,formats:null,modules:{},placeholder:"",readOnly:!1,scrollingContainer:null,strict:!0,theme:"default"},S.events=g.default.events,S.sources=g.default.sources,S.version="1.3.6",S.imports={delta:d.default,parchment:w.default,"core/module":_.default,"core/theme":T.default},e.expandConfig=l,e.overload=s,e.default=S},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,t),this.quill=e,this.options=n};o.DEFAULTS={},e.default=o},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(0),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default.Text);e.default=s},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;n1?e-1:0),r=1;r1?n-1:0),o=1;o-1:this.whitelist.indexOf(e)>-1))},t.prototype.remove=function(t){t.removeAttribute(this.keyName)},t.prototype.value=function(t){var e=t.getAttribute(this.keyName);return this.canAdd(t,e)&&e?e:""},t}();e.default=o},function(t,e,n){function r(t){return null===t||void 0===t}function o(t){return!(!t||"object"!=typeof t||"number"!=typeof t.length)&&("function"==typeof t.copy&&"function"==typeof t.slice&&!(t.length>0&&"number"!=typeof t[0]))}function i(t,e,n){var i,c;if(r(t)||r(e))return!1;if(t.prototype!==e.prototype)return!1;if(s(t))return!!s(e)&&(t=l.call(t),e=l.call(e),u(t,e,n));if(o(t)){if(!o(e))return!1;if(t.length!==e.length)return!1;for(i=0;i=0;i--)if(f[i]!=h[i])return!1;for(i=f.length-1;i>=0;i--)if(c=f[i],!u(t[c],e[c],n))return!1;return typeof t==typeof e}var l=Array.prototype.slice,a=n(55),s=n(56),u=t.exports=function(t,e,n){return n||(n={}),t===e||(t instanceof Date&&e instanceof Date?t.getTime()===e.getTime():!t||!e||"object"!=typeof t&&"object"!=typeof e?n.strict?t===e:t==e:i(t,e,n))}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Code=void 0;var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function t(t,e){for(var n=0;n=t+n)){var l=this.newlineIndex(t,!0)+1,a=i-l+1,s=this.isolate(l,a),u=s.next;s.format(r,o),u instanceof e&&u.formatAt(0,t-l+n-a,r,o)}}}},{key:"insertAt",value:function(t,e,n){if(null==n){var r=this.descendant(m.default,t),o=a(r,2),i=o[0],l=o[1];i.insertAt(l,e)}}},{key:"length",value:function(){var t=this.domNode.textContent.length;return this.domNode.textContent.endsWith("\n")?t:t+1}},{key:"newlineIndex",value:function(t){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1])return this.domNode.textContent.slice(0,t).lastIndexOf("\n");var e=this.domNode.textContent.slice(t).indexOf("\n");return e>-1?t+e:-1}},{key:"optimize",value:function(t){this.domNode.textContent.endsWith("\n")||this.appendChild(p.default.create("text","\n")),u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this,t);var n=this.next;null!=n&&n.prev===this&&n.statics.blotName===this.statics.blotName&&this.statics.formats(this.domNode)===n.statics.formats(n.domNode)&&(n.optimize(t),n.moveChildren(this),n.remove())}},{key:"replace",value:function(t){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"replace",this).call(this,t),[].slice.call(this.domNode.querySelectorAll("*")).forEach(function(t){var e=p.default.find(t);null==e?t.parentNode.removeChild(t):e instanceof p.default.Embed?e.remove():e.unwrap()})}}],[{key:"create",value:function(t){var n=u(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return n.setAttribute("spellcheck",!1),n}},{key:"formats",value:function(){return!0}}]),e}(y.default);O.blotName="code-block",O.tagName="PRE",O.TAB=" ",e.Code=_,e.default=O},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n-1}Object.defineProperty(e,"__esModule",{value:!0}),e.sanitize=e.default=void 0;var a=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1],n=this.container.querySelector(".ql-selected");if(t!==n&&(null!=n&&n.classList.remove("ql-selected"),null!=t&&(t.classList.add("ql-selected"),this.select.selectedIndex=[].indexOf.call(t.parentNode.children,t),t.hasAttribute("data-value")?this.label.setAttribute("data-value",t.getAttribute("data-value")):this.label.removeAttribute("data-value"),t.hasAttribute("data-label")?this.label.setAttribute("data-label",t.getAttribute("data-label")):this.label.removeAttribute("data-label"),e))){if("function"==typeof Event)this.select.dispatchEvent(new Event("change"));else if("object"===("undefined"==typeof Event?"undefined":l(Event))){var r=document.createEvent("Event");r.initEvent("change",!0,!0),this.select.dispatchEvent(r)}this.close()}}},{key:"update",value:function(){var t=void 0;if(this.select.selectedIndex>-1){var e=this.container.querySelector(".ql-picker-options").children[this.select.selectedIndex];t=this.select.options[this.select.selectedIndex],this.selectItem(e)}else this.selectItem(null);var n=null!=t&&t!==this.select.querySelector("option[selected]");this.label.classList.toggle("ql-active",n)}}]),t}();e.default=p},function(t,e,n){"use strict";function r(t){var e=a.find(t);if(null==e)try{e=a.create(t)}catch(n){e=a.create(a.Scope.INLINE),[].slice.call(t.childNodes).forEach(function(t){e.domNode.appendChild(t)}),t.parentNode&&t.parentNode.replaceChild(e.domNode,t),e.attach()}return e}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(47),l=n(27),a=n(1),s=function(t){function e(e){var n=t.call(this,e)||this;return n.build(),n}return o(e,t),e.prototype.appendChild=function(t){this.insertBefore(t)},e.prototype.attach=function(){t.prototype.attach.call(this),this.children.forEach(function(t){t.attach()})},e.prototype.build=function(){var t=this;this.children=new i.default,[].slice.call(this.domNode.childNodes).reverse().forEach(function(e){try{var n=r(e);t.insertBefore(n,t.children.head||void 0)}catch(t){if(t instanceof a.ParchmentError)return;throw t}})},e.prototype.deleteAt=function(t,e){if(0===t&&e===this.length())return this.remove();this.children.forEachAt(t,e,function(t,e,n){t.deleteAt(e,n)})},e.prototype.descendant=function(t,n){var r=this.children.find(n),o=r[0],i=r[1];return null==t.blotName&&t(o)||null!=t.blotName&&o instanceof t?[o,i]:o instanceof e?o.descendant(t,i):[null,-1]},e.prototype.descendants=function(t,n,r){void 0===n&&(n=0),void 0===r&&(r=Number.MAX_VALUE);var o=[],i=r;return this.children.forEachAt(n,r,function(n,r,l){(null==t.blotName&&t(n)||null!=t.blotName&&n instanceof t)&&o.push(n),n instanceof e&&(o=o.concat(n.descendants(t,r,i))),i-=l}),o},e.prototype.detach=function(){this.children.forEach(function(t){t.detach()}),t.prototype.detach.call(this)},e.prototype.formatAt=function(t,e,n,r){this.children.forEachAt(t,e,function(t,e,o){t.formatAt(e,o,n,r)})},e.prototype.insertAt=function(t,e,n){var r=this.children.find(t),o=r[0],i=r[1];if(o)o.insertAt(i,e,n);else{var l=null==n?a.create("text",e):a.create(e,n);this.appendChild(l)}},e.prototype.insertBefore=function(t,e){if(null!=this.statics.allowedChildren&&!this.statics.allowedChildren.some(function(e){return t instanceof e}))throw new a.ParchmentError("Cannot insert "+t.statics.blotName+" into "+this.statics.blotName);t.insertInto(this,e)},e.prototype.length=function(){return this.children.reduce(function(t,e){return t+e.length()},0)},e.prototype.moveChildren=function(t,e){this.children.forEach(function(n){t.insertBefore(n,e)})},e.prototype.optimize=function(e){if(t.prototype.optimize.call(this,e),0===this.children.length)if(null!=this.statics.defaultChild){var n=a.create(this.statics.defaultChild);this.appendChild(n),n.optimize(e)}else this.remove()},e.prototype.path=function(t,n){void 0===n&&(n=!1);var r=this.children.find(t,n),o=r[0],i=r[1],l=[[this,t]];return o instanceof e?l.concat(o.path(i,n)):(null!=o&&l.push([o,i]),l)},e.prototype.removeChild=function(t){this.children.remove(t)},e.prototype.replace=function(n){n instanceof e&&n.moveChildren(this),t.prototype.replace.call(this,n)},e.prototype.split=function(t,e){if(void 0===e&&(e=!1),!e){if(0===t)return this;if(t===this.length())return this.next}var n=this.clone();return this.parent.insertBefore(n,this.next),this.children.forEachAt(t,this.length(),function(t,r,o){t=t.split(r,e),n.appendChild(t)}),n},e.prototype.unwrap=function(){this.moveChildren(this.parent,this.next),this.remove()},e.prototype.update=function(t,e){var n=this,o=[],i=[];t.forEach(function(t){t.target===n.domNode&&"childList"===t.type&&(o.push.apply(o,t.addedNodes),i.push.apply(i,t.removedNodes))}),i.forEach(function(t){if(!(null!=t.parentNode&&"IFRAME"!==t.tagName&&document.body.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)){var e=a.find(t);null!=e&&(null!=e.domNode.parentNode&&e.domNode.parentNode!==n.domNode||e.detach())}}),o.filter(function(t){return t.parentNode==n.domNode}).sort(function(t,e){return t===e?0:t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING?1:-1}).forEach(function(t){var e=null;null!=t.nextSibling&&(e=a.find(t.nextSibling));var o=r(t);o.next==e&&null!=o.next||(null!=o.parent&&o.parent.removeChild(n),n.insertBefore(o,e||void 0))})},e}(l.default);e.default=s},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(11),i=n(28),l=n(17),a=n(1),s=function(t){function e(e){var n=t.call(this,e)||this;return n.attributes=new i.default(n.domNode),n}return r(e,t),e.formats=function(t){return"string"==typeof this.tagName||(Array.isArray(this.tagName)?t.tagName.toLowerCase():void 0)},e.prototype.format=function(t,e){var n=a.query(t);n instanceof o.default?this.attributes.attribute(n,e):e&&(null==n||t===this.statics.blotName&&this.formats()[t]===e||this.replaceWith(t,e))},e.prototype.formats=function(){var t=this.attributes.values(),e=this.statics.formats(this.domNode);return null!=e&&(t[this.statics.blotName]=e),t},e.prototype.replaceWith=function(e,n){var r=t.prototype.replaceWith.call(this,e,n);return this.attributes.copy(r),r},e.prototype.update=function(e,n){var r=this;t.prototype.update.call(this,e,n),e.some(function(t){return t.target===r.domNode&&"attributes"===t.type})&&this.attributes.build()},e.prototype.wrap=function(n,r){var o=t.prototype.wrap.call(this,n,r);return o instanceof e&&o.statics.scope===this.statics.scope&&this.attributes.move(o),o},e}(l.default);e.default=s},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(27),i=n(1),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.value=function(t){return!0},e.prototype.index=function(t,e){return this.domNode===t||this.domNode.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY?Math.min(e,1):-1},e.prototype.position=function(t,e){var n=[].indexOf.call(this.parent.domNode.childNodes,this.domNode);return t>0&&(n+=1),[this.parent.domNode,n]},e.prototype.value=function(){return t={},t[this.statics.blotName]=this.statics.value(this.domNode)||!0,t;var t},e.scope=i.Scope.INLINE_BLOT,e}(o.default);e.default=l},function(t,e,n){function r(t){this.ops=t,this.index=0,this.offset=0}var o=n(12),i=n(2),l={attributes:{compose:function(t,e,n){"object"!=typeof t&&(t={}),"object"!=typeof e&&(e={});var r=i(!0,{},e);n||(r=Object.keys(r).reduce(function(t,e){return null!=r[e]&&(t[e]=r[e]),t},{}));for(var o in t)void 0!==t[o]&&void 0===e[o]&&(r[o]=t[o]);return Object.keys(r).length>0?r:void 0},diff:function(t,e){"object"!=typeof t&&(t={}),"object"!=typeof e&&(e={});var n=Object.keys(t).concat(Object.keys(e)).reduce(function(n,r){return o(t[r],e[r])||(n[r]=void 0===e[r]?null:e[r]),n},{});return Object.keys(n).length>0?n:void 0},transform:function(t,e,n){if("object"!=typeof t)return e;if("object"==typeof e){if(!n)return e;var r=Object.keys(e).reduce(function(n,r){return void 0===t[r]&&(n[r]=e[r]),n},{});return Object.keys(r).length>0?r:void 0}}},iterator:function(t){return new r(t)},length:function(t){return"number"==typeof t.delete?t.delete:"number"==typeof t.retain?t.retain:"string"==typeof t.insert?t.insert.length:1}};r.prototype.hasNext=function(){return this.peekLength()<1/0},r.prototype.next=function(t){t||(t=1/0);var e=this.ops[this.index];if(e){var n=this.offset,r=l.length(e);if(t>=r-n?(t=r-n,this.index+=1,this.offset=0):this.offset+=t,"number"==typeof e.delete)return{delete:t};var o={};return e.attributes&&(o.attributes=e.attributes),"number"==typeof e.retain?o.retain=t:"string"==typeof e.insert?o.insert=e.insert.substr(n,t):o.insert=e.insert,o}return{retain:1/0}},r.prototype.peek=function(){return this.ops[this.index]},r.prototype.peekLength=function(){return this.ops[this.index]?l.length(this.ops[this.index])-this.offset:1/0},r.prototype.peekType=function(){return this.ops[this.index]?"number"==typeof this.ops[this.index].delete?"delete":"number"==typeof this.ops[this.index].retain?"retain":"insert":"retain"},t.exports=l},function(t,e){var n=function(){"use strict";function t(t,e){return null!=e&&t instanceof e}function e(n,r,o,i,c){function f(n,o){if(null===n)return null;if(0===o)return n;var y,v;if("object"!=typeof n)return n;if(t(n,a))y=new a;else if(t(n,s))y=new s;else if(t(n,u))y=new u(function(t,e){n.then(function(e){t(f(e,o-1))},function(t){e(f(t,o-1))})});else if(e.__isArray(n))y=[];else if(e.__isRegExp(n))y=new RegExp(n.source,l(n)),n.lastIndex&&(y.lastIndex=n.lastIndex);else if(e.__isDate(n))y=new Date(n.getTime());else{if(d&&Buffer.isBuffer(n))return y=new Buffer(n.length),n.copy(y),y;t(n,Error)?y=Object.create(n):void 0===i?(v=Object.getPrototypeOf(n),y=Object.create(v)):(y=Object.create(i),v=i)}if(r){var b=h.indexOf(n);if(-1!=b)return p[b];h.push(n),p.push(y)}t(n,a)&&n.forEach(function(t,e){var n=f(e,o-1),r=f(t,o-1);y.set(n,r)}),t(n,s)&&n.forEach(function(t){var e=f(t,o-1);y.add(e)});for(var g in n){var m;v&&(m=Object.getOwnPropertyDescriptor(v,g)),m&&null==m.set||(y[g]=f(n[g],o-1))}if(Object.getOwnPropertySymbols)for(var _=Object.getOwnPropertySymbols(n),g=0;g<_.length;g++){var O=_[g],w=Object.getOwnPropertyDescriptor(n,O);(!w||w.enumerable||c)&&(y[O]=f(n[O],o-1),w.enumerable||Object.defineProperty(y,O,{enumerable:!1}))}if(c)for(var x=Object.getOwnPropertyNames(n),g=0;g1&&void 0!==arguments[1]?arguments[1]:0;i(this,t),this.index=e,this.length=n},O=function(){function t(e,n){var r=this;i(this,t),this.emitter=n,this.scroll=e,this.composing=!1,this.mouseDown=!1,this.root=this.scroll.domNode,this.cursor=c.default.create("cursor",this),this.lastRange=this.savedRange=new _(0,0),this.handleComposition(),this.handleDragging(),this.emitter.listenDOM("selectionchange",document,function(){r.mouseDown||setTimeout(r.update.bind(r,v.default.sources.USER),1)}),this.emitter.on(v.default.events.EDITOR_CHANGE,function(t,e){t===v.default.events.TEXT_CHANGE&&e.length()>0&&r.update(v.default.sources.SILENT)}),this.emitter.on(v.default.events.SCROLL_BEFORE_UPDATE,function(){if(r.hasFocus()){var t=r.getNativeRange();null!=t&&t.start.node!==r.cursor.textNode&&r.emitter.once(v.default.events.SCROLL_UPDATE,function(){try{r.setNativeRange(t.start.node,t.start.offset,t.end.node,t.end.offset)}catch(t){}})}}),this.emitter.on(v.default.events.SCROLL_OPTIMIZE,function(t,e){if(e.range){var n=e.range,o=n.startNode,i=n.startOffset,l=n.endNode,a=n.endOffset;r.setNativeRange(o,i,l,a)}}),this.update(v.default.sources.SILENT)}return s(t,[{key:"handleComposition",value:function(){var t=this;this.root.addEventListener("compositionstart",function(){t.composing=!0}),this.root.addEventListener("compositionend",function(){if(t.composing=!1,t.cursor.parent){var e=t.cursor.restore();if(!e)return;setTimeout(function(){t.setNativeRange(e.startNode,e.startOffset,e.endNode,e.endOffset)},1)}})}},{key:"handleDragging",value:function(){var t=this;this.emitter.listenDOM("mousedown",document.body,function(){t.mouseDown=!0}),this.emitter.listenDOM("mouseup",document.body,function(){t.mouseDown=!1,t.update(v.default.sources.USER)})}},{key:"focus",value:function(){this.hasFocus()||(this.root.focus(),this.setRange(this.savedRange))}},{key:"format",value:function(t,e){if(null==this.scroll.whitelist||this.scroll.whitelist[t]){this.scroll.update();var n=this.getNativeRange();if(null!=n&&n.native.collapsed&&!c.default.query(t,c.default.Scope.BLOCK)){if(n.start.node!==this.cursor.textNode){var r=c.default.find(n.start.node,!1);if(null==r)return;if(r instanceof c.default.Leaf){var o=r.split(n.start.offset);r.parent.insertBefore(this.cursor,o)}else r.insertBefore(this.cursor,n.start.node);this.cursor.attach()}this.cursor.format(t,e),this.scroll.optimize(),this.setNativeRange(this.cursor.textNode,this.cursor.textNode.data.length),this.update()}}}},{key:"getBounds",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=this.scroll.length();t=Math.min(t,n-1),e=Math.min(t+e,n-1)-t;var r=void 0,o=this.scroll.leaf(t),i=a(o,2),l=i[0],s=i[1];if(null==l)return null;var u=l.position(s,!0),c=a(u,2);r=c[0],s=c[1];var f=document.createRange();if(e>0){f.setStart(r,s);var h=this.scroll.leaf(t+e),p=a(h,2);if(l=p[0],s=p[1],null==l)return null;var d=l.position(s,!0),y=a(d,2);return r=y[0],s=y[1],f.setEnd(r,s),f.getBoundingClientRect()}var v="left",b=void 0;return r instanceof Text?(s0&&(v="right")),{bottom:b.top+b.height,height:b.height,left:b[v],right:b[v],top:b.top,width:0}}},{key:"getNativeRange",value:function(){var t=document.getSelection();if(null==t||t.rangeCount<=0)return null;var e=t.getRangeAt(0);if(null==e)return null;var n=this.normalizeNative(e);return m.info("getNativeRange",n),n}},{key:"getRange",value:function(){var t=this.getNativeRange();return null==t?[null,null]:[this.normalizedToRange(t),t]}},{key:"hasFocus",value:function(){return document.activeElement===this.root}},{key:"normalizedToRange",value:function(t){var e=this,n=[[t.start.node,t.start.offset]];t.native.collapsed||n.push([t.end.node,t.end.offset]);var r=n.map(function(t){var n=a(t,2),r=n[0],o=n[1],i=c.default.find(r,!0),l=i.offset(e.scroll);return 0===o?l:i instanceof c.default.Container?l+i.length():l+i.index(r,o)}),i=Math.min(Math.max.apply(Math,o(r)),this.scroll.length()-1),l=Math.min.apply(Math,[i].concat(o(r)));return new _(l,i-l)}},{key:"normalizeNative",value:function(t){if(!l(this.root,t.startContainer)||!t.collapsed&&!l(this.root,t.endContainer))return null;var e={start:{node:t.startContainer,offset:t.startOffset},end:{node:t.endContainer,offset:t.endOffset},native:t};return[e.start,e.end].forEach(function(t){for(var e=t.node,n=t.offset;!(e instanceof Text)&&e.childNodes.length>0;)if(e.childNodes.length>n)e=e.childNodes[n],n=0;else{if(e.childNodes.length!==n)break;e=e.lastChild,n=e instanceof Text?e.data.length:e.childNodes.length+1}t.node=e,t.offset=n}),e}},{key:"rangeToNative",value:function(t){var e=this,n=t.collapsed?[t.index]:[t.index,t.index+t.length],r=[],o=this.scroll.length();return n.forEach(function(t,n){t=Math.min(o-1,t);var i=void 0,l=e.scroll.leaf(t),s=a(l,2),u=s[0],c=s[1],f=u.position(c,0!==n),h=a(f,2);i=h[0],c=h[1],r.push(i,c)}),r.length<2&&(r=r.concat(r)),r}},{key:"scrollIntoView",value:function(t){var e=this.lastRange;if(null!=e){var n=this.getBounds(e.index,e.length);if(null!=n){var r=this.scroll.length()-1,o=this.scroll.line(Math.min(e.index,r)),i=a(o,1),l=i[0],s=l;if(e.length>0){var u=this.scroll.line(Math.min(e.index+e.length,r));s=a(u,1)[0]}if(null!=l&&null!=s){var c=t.getBoundingClientRect();n.topc.bottom&&(t.scrollTop+=n.bottom-c.bottom)}}}}},{key:"setNativeRange",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e,o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(m.info("setNativeRange",t,e,n,r),null==t||null!=this.root.parentNode&&null!=t.parentNode&&null!=n.parentNode){var i=document.getSelection();if(null!=i)if(null!=t){this.hasFocus()||this.root.focus();var l=(this.getNativeRange()||{}).native;if(null==l||o||t!==l.startContainer||e!==l.startOffset||n!==l.endContainer||r!==l.endOffset){"BR"==t.tagName&&(e=[].indexOf.call(t.parentNode.childNodes,t),t=t.parentNode),"BR"==n.tagName&&(r=[].indexOf.call(n.parentNode.childNodes,n),n=n.parentNode);var a=document.createRange();a.setStart(t,e),a.setEnd(n,r),i.removeAllRanges(),i.addRange(a)}}else i.removeAllRanges(),this.root.blur(),document.body.focus()}}},{key:"setRange",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:v.default.sources.API;if("string"==typeof e&&(n=e,e=!1),m.info("setRange",t),null!=t){var r=this.rangeToNative(t);this.setNativeRange.apply(this,o(r).concat([e]))}else this.setNativeRange(null);this.update(n)}},{key:"update",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v.default.sources.USER,e=this.lastRange,n=this.getRange(),r=a(n,2),o=r[0],i=r[1];if(this.lastRange=o,null!=this.lastRange&&(this.savedRange=this.lastRange),!(0,d.default)(e,this.lastRange)){var l;!this.composing&&null!=i&&i.native.collapsed&&i.start.node!==this.cursor.textNode&&this.cursor.restore();var s=[v.default.events.SELECTION_CHANGE,(0,h.default)(this.lastRange),(0,h.default)(e),t];if((l=this.emitter).emit.apply(l,[v.default.events.EDITOR_CHANGE].concat(s)),t!==v.default.sources.SILENT){var u;(u=this.emitter).emit.apply(u,s)}}}}]),t}();e.Range=_,e.default=O},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=n(0),s=r(a),u=n(3),c=r(u),f=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),e}(s.default.Container);f.allowedChildren=[c.default,u.BlockEmbed,f],e.default=f},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.ColorStyle=e.ColorClass=e.ColorAttributor=void 0;var l=function(){function t(t,e){for(var n=0;n1){var u=o.formats(),c=this.quill.getFormat(t.index-1,1);i=A.default.attributes.diff(u,c)||{}}}var f=/[\uD800-\uDBFF][\uDC00-\uDFFF]$/.test(e.prefix)?2:1;this.quill.deleteText(t.index-f,f,S.default.sources.USER),Object.keys(i).length>0&&this.quill.formatLine(t.index-f,f,i,S.default.sources.USER),this.quill.focus()}}function c(t,e){var n=/^[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(e.suffix)?2:1;if(!(t.index>=this.quill.getLength()-n)){var r={},o=0,i=this.quill.getLine(t.index),l=b(i,1),a=l[0];if(e.offset>=a.length()-1){var s=this.quill.getLine(t.index+1),u=b(s,1),c=u[0];if(c){var f=a.formats(),h=this.quill.getFormat(t.index,1);r=A.default.attributes.diff(f,h)||{},o=c.length()}}this.quill.deleteText(t.index,n,S.default.sources.USER),Object.keys(r).length>0&&this.quill.formatLine(t.index+o-1,n,r,S.default.sources.USER)}}function f(t){var e=this.quill.getLines(t),n={};if(e.length>1){var r=e[0].formats(),o=e[e.length-1].formats();n=A.default.attributes.diff(o,r)||{}}this.quill.deleteText(t,S.default.sources.USER),Object.keys(n).length>0&&this.quill.formatLine(t.index,1,n,S.default.sources.USER),this.quill.setSelection(t.index,S.default.sources.SILENT),this.quill.focus()}function h(t,e){var n=this;t.length>0&&this.quill.scroll.deleteAt(t.index,t.length);var r=Object.keys(e.format).reduce(function(t,n){return T.default.query(n,T.default.Scope.BLOCK)&&!Array.isArray(e.format[n])&&(t[n]=e.format[n]),t},{});this.quill.insertText(t.index,"\n",r,S.default.sources.USER),this.quill.setSelection(t.index+1,S.default.sources.SILENT),this.quill.focus(),Object.keys(e.format).forEach(function(t){null==r[t]&&(Array.isArray(e.format[t])||"link"!==t&&n.quill.format(t,e.format[t],S.default.sources.USER))})}function p(t){return{key:D.keys.TAB,shiftKey:!t,format:{"code-block":!0},handler:function(e){var n=T.default.query("code-block"),r=e.index,o=e.length,i=this.quill.scroll.descendant(n,r),l=b(i,2),a=l[0],s=l[1];if(null!=a){var u=this.quill.getIndex(a),c=a.newlineIndex(s,!0)+1,f=a.newlineIndex(u+s+o),h=a.domNode.textContent.slice(c,f).split("\n");s=0,h.forEach(function(e,i){t?(a.insertAt(c+s,n.TAB),s+=n.TAB.length,0===i?r+=n.TAB.length:o+=n.TAB.length):e.startsWith(n.TAB)&&(a.deleteAt(c+s,n.TAB.length),s-=n.TAB.length,0===i?r-=n.TAB.length:o-=n.TAB.length),s+=e.length+1}),this.quill.update(S.default.sources.USER),this.quill.setSelection(r,o,S.default.sources.SILENT)}}}}function d(t){return{key:t[0].toUpperCase(),shortKey:!0,handler:function(e,n){this.quill.format(t,!n.format[t],S.default.sources.USER)}}}function y(t){if("string"==typeof t||"number"==typeof t)return y({key:t});if("object"===(void 0===t?"undefined":v(t))&&(t=(0,_.default)(t,!1)),"string"==typeof t.key)if(null!=D.keys[t.key.toUpperCase()])t.key=D.keys[t.key.toUpperCase()];else{if(1!==t.key.length)return null;t.key=t.key.toUpperCase().charCodeAt(0)}return t.shortKey&&(t[B]=t.shortKey,delete t.shortKey),t}Object.defineProperty(e,"__esModule",{value:!0}),e.SHORTKEY=e.default=void 0;var v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},b=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),g=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=y(t);if(null==r||null==r.key)return I.warn("Attempted to add invalid keyboard binding",r);"function"==typeof e&&(e={handler:e}),"function"==typeof n&&(n={handler:n}),r=(0,k.default)(r,e,n),this.bindings[r.key]=this.bindings[r.key]||[],this.bindings[r.key].push(r)}},{key:"listen",value:function(){var t=this;this.quill.root.addEventListener("keydown",function(n){if(!n.defaultPrevented){var r=n.which||n.keyCode,o=(t.bindings[r]||[]).filter(function(t){return e.match(n,t)});if(0!==o.length){var i=t.quill.getSelection();if(null!=i&&t.quill.hasFocus()){var l=t.quill.getLine(i.index),a=b(l,2),s=a[0],u=a[1],c=t.quill.getLeaf(i.index),f=b(c,2),h=f[0],p=f[1],d=0===i.length?[h,p]:t.quill.getLeaf(i.index+i.length),y=b(d,2),g=y[0],m=y[1],_=h instanceof T.default.Text?h.value().slice(0,p):"",O=g instanceof T.default.Text?g.value().slice(m):"",x={collapsed:0===i.length,empty:0===i.length&&s.length()<=1,format:t.quill.getFormat(i),offset:u,prefix:_,suffix:O};o.some(function(e){if(null!=e.collapsed&&e.collapsed!==x.collapsed)return!1;if(null!=e.empty&&e.empty!==x.empty)return!1;if(null!=e.offset&&e.offset!==x.offset)return!1;if(Array.isArray(e.format)){if(e.format.every(function(t){return null==x.format[t]}))return!1}else if("object"===v(e.format)&&!Object.keys(e.format).every(function(t){return!0===e.format[t]?null!=x.format[t]:!1===e.format[t]?null==x.format[t]:(0,w.default)(e.format[t],x.format[t])}))return!1;return!(null!=e.prefix&&!e.prefix.test(x.prefix))&&(!(null!=e.suffix&&!e.suffix.test(x.suffix))&&!0!==e.handler.call(t,i,x))})&&n.preventDefault()}}}})}}]),e}(R.default);D.keys={BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46},D.DEFAULTS={bindings:{bold:d("bold"),italic:d("italic"),underline:d("underline"),indent:{key:D.keys.TAB,format:["blockquote","indent","list"],handler:function(t,e){if(e.collapsed&&0!==e.offset)return!0;this.quill.format("indent","+1",S.default.sources.USER)}},outdent:{key:D.keys.TAB,shiftKey:!0,format:["blockquote","indent","list"],handler:function(t,e){if(e.collapsed&&0!==e.offset)return!0;this.quill.format("indent","-1",S.default.sources.USER)}},"outdent backspace":{key:D.keys.BACKSPACE,collapsed:!0,shiftKey:null,metaKey:null,ctrlKey:null,altKey:null,format:["indent","list"],offset:0,handler:function(t,e){null!=e.format.indent?this.quill.format("indent","-1",S.default.sources.USER):null!=e.format.list&&this.quill.format("list",!1,S.default.sources.USER)}},"indent code-block":p(!0),"outdent code-block":p(!1),"remove tab":{key:D.keys.TAB,shiftKey:!0,collapsed:!0,prefix:/\t$/,handler:function(t){this.quill.deleteText(t.index-1,1,S.default.sources.USER)}},tab:{key:D.keys.TAB,handler:function(t){this.quill.history.cutoff();var e=(new N.default).retain(t.index).delete(t.length).insert("\t");this.quill.updateContents(e,S.default.sources.USER),this.quill.history.cutoff(),this.quill.setSelection(t.index+1,S.default.sources.SILENT)}},"list empty enter":{key:D.keys.ENTER,collapsed:!0,format:["list"],empty:!0,handler:function(t,e){this.quill.format("list",!1,S.default.sources.USER),e.format.indent&&this.quill.format("indent",!1,S.default.sources.USER)}},"checklist enter":{key:D.keys.ENTER,collapsed:!0,format:{list:"checked"},handler:function(t){var e=this.quill.getLine(t.index),n=b(e,2),r=n[0],o=n[1],i=(0,k.default)({},r.formats(),{list:"checked"}),l=(new N.default).retain(t.index).insert("\n",i).retain(r.length()-o-1).retain(1,{list:"unchecked"});this.quill.updateContents(l,S.default.sources.USER),this.quill.setSelection(t.index+1,S.default.sources.SILENT),this.quill.scrollIntoView()}},"header enter":{key:D.keys.ENTER,collapsed:!0,format:["header"],suffix:/^$/,handler:function(t,e){var n=this.quill.getLine(t.index),r=b(n,2),o=r[0],i=r[1],l=(new N.default).retain(t.index).insert("\n",e.format).retain(o.length()-i-1).retain(1,{header:null});this.quill.updateContents(l,S.default.sources.USER),this.quill.setSelection(t.index+1,S.default.sources.SILENT),this.quill.scrollIntoView()}},"list autofill":{key:" ",collapsed:!0,format:{list:!1},prefix:/^\s*?(\d+\.|-|\*|\[ ?\]|\[x\])$/,handler:function(t,e){var n=e.prefix.length,r=this.quill.getLine(t.index),o=b(r,2),i=o[0],l=o[1];if(l>n)return!0;var a=void 0;switch(e.prefix.trim()){case"[]":case"[ ]":a="unchecked";break;case"[x]":a="checked";break;case"-":case"*":a="bullet";break;default:a="ordered"}this.quill.insertText(t.index," ",S.default.sources.USER),this.quill.history.cutoff();var s=(new N.default).retain(t.index-l).delete(n+1).retain(i.length()-2-l).retain(1,{list:a});this.quill.updateContents(s,S.default.sources.USER),this.quill.history.cutoff(),this.quill.setSelection(t.index-n,S.default.sources.SILENT)}},"code exit":{key:D.keys.ENTER,collapsed:!0,format:["code-block"],prefix:/\n\n$/,suffix:/^\s+$/,handler:function(t){var e=this.quill.getLine(t.index),n=b(e,2),r=n[0],o=n[1],i=(new N.default).retain(t.index+r.length()-o-2).retain(1,{"code-block":null}).delete(1);this.quill.updateContents(i,S.default.sources.USER)}},"embed left":s(D.keys.LEFT,!1),"embed left shift":s(D.keys.LEFT,!0),"embed right":s(D.keys.RIGHT,!1),"embed right shift":s(D.keys.RIGHT,!0)}},e.default=D,e.SHORTKEY=B},function(t,e,n){"use strict";t.exports={align:{"":n(75),center:n(76),right:n(77),justify:n(78)},background:n(79),blockquote:n(80),bold:n(81),clean:n(82),code:n(40),"code-block":n(40),color:n(83),direction:{"":n(84),rtl:n(85)},float:{center:n(86),full:n(87),left:n(88),right:n(89)},formula:n(90),header:{1:n(91),2:n(92)},italic:n(93),image:n(94),indent:{"+1":n(95),"-1":n(96)},link:n(97),list:{ordered:n(98),bullet:n(99),check:n(100)},script:{sub:n(101),super:n(102)},strike:n(103),underline:n(104),video:n(105)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(1),o=function(){function t(t){this.domNode=t,this.domNode[r.DATA_KEY]={blot:this}}return Object.defineProperty(t.prototype,"statics",{get:function(){return this.constructor},enumerable:!0,configurable:!0}),t.create=function(t){if(null==this.tagName)throw new r.ParchmentError("Blot definition missing tagName");var e;return Array.isArray(this.tagName)?("string"==typeof t&&(t=t.toUpperCase(),parseInt(t).toString()===t&&(t=parseInt(t))),e="number"==typeof t?document.createElement(this.tagName[t-1]):this.tagName.indexOf(t)>-1?document.createElement(t):document.createElement(this.tagName[0])):e=document.createElement(this.tagName),this.className&&e.classList.add(this.className),e},t.prototype.attach=function(){null!=this.parent&&(this.scroll=this.parent.scroll)},t.prototype.clone=function(){var t=this.domNode.cloneNode(!1);return r.create(t)},t.prototype.detach=function(){null!=this.parent&&this.parent.removeChild(this),delete this.domNode[r.DATA_KEY]},t.prototype.deleteAt=function(t,e){this.isolate(t,e).remove()},t.prototype.formatAt=function(t,e,n,o){var i=this.isolate(t,e);if(null!=r.query(n,r.Scope.BLOT)&&o)i.wrap(n,o);else if(null!=r.query(n,r.Scope.ATTRIBUTE)){var l=r.create(this.statics.scope);i.wrap(l),l.format(n,o)}},t.prototype.insertAt=function(t,e,n){var o=null==n?r.create("text",e):r.create(e,n),i=this.split(t);this.parent.insertBefore(o,i)},t.prototype.insertInto=function(t,e){void 0===e&&(e=null),null!=this.parent&&this.parent.children.remove(this);var n=null;t.children.insertBefore(this,e),null!=e&&(n=e.domNode),this.domNode.parentNode==t.domNode&&this.domNode.nextSibling==n||t.domNode.insertBefore(this.domNode,n),this.parent=t,this.attach()},t.prototype.isolate=function(t,e){var n=this.split(t);return n.split(e),n},t.prototype.length=function(){return 1},t.prototype.offset=function(t){return void 0===t&&(t=this.parent),null==this.parent||this==t?0:this.parent.children.offset(this)+this.parent.offset(t)},t.prototype.optimize=function(t){null!=this.domNode[r.DATA_KEY]&&delete this.domNode[r.DATA_KEY].mutations},t.prototype.remove=function(){null!=this.domNode.parentNode&&this.domNode.parentNode.removeChild(this.domNode),this.detach()},t.prototype.replace=function(t){null!=t.parent&&(t.parent.insertBefore(this,t.next),t.remove())},t.prototype.replaceWith=function(t,e){var n="string"==typeof t?r.create(t,e):t;return n.replace(this),n},t.prototype.split=function(t,e){return 0===t?this:this.next},t.prototype.update=function(t,e){},t.prototype.wrap=function(t,e){var n="string"==typeof t?r.create(t,e):t;return null!=this.parent&&this.parent.insertBefore(n,this.next),n.appendChild(this),n},t.blotName="abstract",t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),o=n(29),i=n(30),l=n(1),a=function(){function t(t){this.attributes={},this.domNode=t,this.build()}return t.prototype.attribute=function(t,e){e?t.add(this.domNode,e)&&(null!=t.value(this.domNode)?this.attributes[t.attrName]=t:delete this.attributes[t.attrName]):(t.remove(this.domNode),delete this.attributes[t.attrName])},t.prototype.build=function(){var t=this;this.attributes={};var e=r.default.keys(this.domNode),n=o.default.keys(this.domNode),a=i.default.keys(this.domNode);e.concat(n).concat(a).forEach(function(e){var n=l.query(e,l.Scope.ATTRIBUTE);n instanceof r.default&&(t.attributes[n.attrName]=n)})},t.prototype.copy=function(t){var e=this;Object.keys(this.attributes).forEach(function(n){var r=e.attributes[n].value(e.domNode);t.format(n,r)})},t.prototype.move=function(t){var e=this;this.copy(t),Object.keys(this.attributes).forEach(function(t){e.attributes[t].remove(e.domNode)}),this.attributes={}},t.prototype.values=function(){var t=this;return Object.keys(this.attributes).reduce(function(e,n){return e[n]=t.attributes[n].value(t.domNode),e},{})},t}();e.default=a},function(t,e,n){"use strict";function r(t,e){return(t.getAttribute("class")||"").split(/\s+/).filter(function(t){return 0===t.indexOf(e+"-")})}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(11),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.keys=function(t){return(t.getAttribute("class")||"").split(/\s+/).map(function(t){return t.split("-").slice(0,-1).join("-")})},e.prototype.add=function(t,e){return!!this.canAdd(t,e)&&(this.remove(t),t.classList.add(this.keyName+"-"+e),!0)},e.prototype.remove=function(t){r(t,this.keyName).forEach(function(e){t.classList.remove(e)}),0===t.classList.length&&t.removeAttribute("class")},e.prototype.value=function(t){var e=r(t,this.keyName)[0]||"",n=e.slice(this.keyName.length+1);return this.canAdd(t,n)?n:""},e}(i.default);e.default=l},function(t,e,n){"use strict";function r(t){var e=t.split("-"),n=e.slice(1).map(function(t){return t[0].toUpperCase()+t.slice(1)}).join("");return e[0]+n}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(11),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.keys=function(t){return(t.getAttribute("style")||"").split(";").map(function(t){return t.split(":")[0].trim()})},e.prototype.add=function(t,e){return!!this.canAdd(t,e)&&(t.style[r(this.keyName)]=e,!0)},e.prototype.remove=function(t){t.style[r(this.keyName)]="",t.getAttribute("style")||t.removeAttribute("style")},e.prototype.value=function(t){var e=t.style[r(this.keyName)];return this.canAdd(t,e)?e:""},e}(i.default);e.default=l},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=function(){function t(t,e){for(var n=0;n '},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;nr.right&&(i=r.right-o.right,this.root.style.left=e+i+"px"),o.leftr.bottom){var l=o.bottom-o.top,a=t.bottom-t.top+l;this.root.style.top=n-a+"px",this.root.classList.add("ql-flip")}return i}},{key:"show",value:function(){this.root.classList.remove("ql-editing"),this.root.classList.remove("ql-hidden")}}]),t}();e.default=i},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t){var e=t.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtube\.com\/watch.*v=([a-zA-Z0-9_-]+)/)||t.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtu\.be\/([a-zA-Z0-9_-]+)/);return e?(e[1]||"https")+"://www.youtube.com/embed/"+e[2]+"?showinfo=0":(e=t.match(/^(?:(https?):\/\/)?(?:www\.)?vimeo\.com\/(\d+)/))?(e[1]||"https")+"://player.vimeo.com/video/"+e[2]+"/":t}function s(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e.forEach(function(e){var r=document.createElement("option");e===n?r.setAttribute("selected","selected"):r.setAttribute("value",e),t.appendChild(r)})}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.BaseTooltip=void 0;var u=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"link",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.root.classList.remove("ql-hidden"),this.root.classList.add("ql-editing"),null!=e?this.textbox.value=e:t!==this.root.getAttribute("data-mode")&&(this.textbox.value=""),this.position(this.quill.getBounds(this.quill.selection.savedRange)),this.textbox.select(),this.textbox.setAttribute("placeholder",this.textbox.getAttribute("data-"+t)||""),this.root.setAttribute("data-mode",t)}},{key:"restoreFocus",value:function(){var t=this.quill.scrollingContainer.scrollTop;this.quill.focus(),this.quill.scrollingContainer.scrollTop=t}},{key:"save",value:function(){var t=this.textbox.value;switch(this.root.getAttribute("data-mode")){case"link":var e=this.quill.root.scrollTop;this.linkRange?(this.quill.formatText(this.linkRange,"link",t,v.default.sources.USER),delete this.linkRange):(this.restoreFocus(),this.quill.format("link",t,v.default.sources.USER)),this.quill.root.scrollTop=e;break;case"video":t=a(t);case"formula":if(!t)break;var n=this.quill.getSelection(!0);if(null!=n){var r=n.index+n.length;this.quill.insertEmbed(r,this.root.getAttribute("data-mode"),t,v.default.sources.USER),"formula"===this.root.getAttribute("data-mode")&&this.quill.insertText(r+1," ",v.default.sources.USER),this.quill.setSelection(r+2,v.default.sources.USER)}}this.textbox.value="",this.hide()}}]),e}(A.default);e.BaseTooltip=M,e.default=L},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(46),i=r(o),l=n(34),a=n(36),s=n(62),u=n(63),c=r(u),f=n(64),h=r(f),p=n(65),d=r(p),y=n(35),v=n(24),b=n(37),g=n(38),m=n(39),_=r(m),O=n(66),w=r(O),x=n(15),k=r(x),E=n(67),N=r(E),j=n(68),A=r(j),q=n(69),T=r(q),P=n(70),S=r(P),C=n(71),L=r(C),M=n(13),R=r(M),I=n(72),B=r(I),D=n(73),U=r(D),F=n(74),H=r(F),K=n(26),z=r(K),Z=n(16),V=r(Z),W=n(41),G=r(W),Y=n(42),X=r(Y),$=n(43),Q=r($),J=n(107),tt=r(J),et=n(108),nt=r(et);i.default.register({"attributors/attribute/direction":a.DirectionAttribute,"attributors/class/align":l.AlignClass,"attributors/class/background":y.BackgroundClass,"attributors/class/color":v.ColorClass,"attributors/class/direction":a.DirectionClass,"attributors/class/font":b.FontClass,"attributors/class/size":g.SizeClass,"attributors/style/align":l.AlignStyle,"attributors/style/background":y.BackgroundStyle,"attributors/style/color":v.ColorStyle,"attributors/style/direction":a.DirectionStyle,"attributors/style/font":b.FontStyle,"attributors/style/size":g.SizeStyle},!0),i.default.register({"formats/align":l.AlignClass,"formats/direction":a.DirectionClass,"formats/indent":s.IndentClass,"formats/background":y.BackgroundStyle,"formats/color":v.ColorStyle,"formats/font":b.FontClass,"formats/size":g.SizeClass,"formats/blockquote":c.default,"formats/code-block":R.default,"formats/header":h.default,"formats/list":d.default,"formats/bold":_.default,"formats/code":M.Code,"formats/italic":w.default,"formats/link":k.default,"formats/script":N.default,"formats/strike":A.default,"formats/underline":T.default,"formats/image":S.default,"formats/video":L.default,"formats/list/item":p.ListItem,"modules/formula":B.default,"modules/syntax":U.default,"modules/toolbar":H.default,"themes/bubble":tt.default,"themes/snow":nt.default,"ui/icons":z.default,"ui/picker":V.default,"ui/icon-picker":X.default,"ui/color-picker":G.default,"ui/tooltip":Q.default},!0),e.default=i.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(0),i=r(o),l=n(6),a=r(l),s=n(3),u=r(s),c=n(14),f=r(c),h=n(23),p=r(h),d=n(31),y=r(d),v=n(33),b=r(v),g=n(5),m=r(g),_=n(59),O=r(_),w=n(8),x=r(w),k=n(60),E=r(k),N=n(61),j=r(N),A=n(25),q=r(A);a.default.register({"blots/block":u.default,"blots/block/embed":s.BlockEmbed,"blots/break":f.default,"blots/container":p.default,"blots/cursor":y.default,"blots/embed":b.default,"blots/inline":m.default,"blots/scroll":O.default,"blots/text":x.default,"modules/clipboard":E.default,"modules/history":j.default,"modules/keyboard":q.default}),i.default.register(u.default,f.default,y.default,m.default,O.default,x.default),e.default=a.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){this.head=this.tail=null,this.length=0}return t.prototype.append=function(){for(var t=[],e=0;e1&&this.append.apply(this,t.slice(1))},t.prototype.contains=function(t){for(var e,n=this.iterator();e=n();)if(e===t)return!0;return!1},t.prototype.insertBefore=function(t,e){t&&(t.next=e,null!=e?(t.prev=e.prev,null!=e.prev&&(e.prev.next=t),e.prev=t,e===this.head&&(this.head=t)):null!=this.tail?(this.tail.next=t,t.prev=this.tail,this.tail=t):(t.prev=null,this.head=this.tail=t),this.length+=1)},t.prototype.offset=function(t){for(var e=0,n=this.head;null!=n;){if(n===t)return e;e+=n.length(),n=n.next}return-1},t.prototype.remove=function(t){this.contains(t)&&(null!=t.prev&&(t.prev.next=t.next),null!=t.next&&(t.next.prev=t.prev),t===this.head&&(this.head=t.next),t===this.tail&&(this.tail=t.prev),this.length-=1)},t.prototype.iterator=function(t){return void 0===t&&(t=this.head),function(){var e=t;return null!=t&&(t=t.next),e}},t.prototype.find=function(t,e){void 0===e&&(e=!1);for(var n,r=this.iterator();n=r();){var o=n.length();if(ta?n(r,t-a,Math.min(e,a+u-t)):n(r,0,Math.min(u,t+e-a)),a+=u}},t.prototype.map=function(t){return this.reduce(function(e,n){return e.push(t(n)),e},[])},t.prototype.reduce=function(t,e){for(var n,r=this.iterator();n=r();)e=t(e,n);return e},t}();e.default=r},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(17),i=n(1),l={attributes:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0},a=function(t){function e(e){var n=t.call(this,e)||this;return n.scroll=n,n.observer=new MutationObserver(function(t){n.update(t)}),n.observer.observe(n.domNode,l),n.attach(),n}return r(e,t),e.prototype.detach=function(){t.prototype.detach.call(this),this.observer.disconnect()},e.prototype.deleteAt=function(e,n){this.update(),0===e&&n===this.length()?this.children.forEach(function(t){t.remove()}):t.prototype.deleteAt.call(this,e,n)},e.prototype.formatAt=function(e,n,r,o){this.update(),t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.insertAt=function(e,n,r){this.update(),t.prototype.insertAt.call(this,e,n,r)},e.prototype.optimize=function(e,n){var r=this;void 0===e&&(e=[]),void 0===n&&(n={}),t.prototype.optimize.call(this,n);for(var l=[].slice.call(this.observer.takeRecords());l.length>0;)e.push(l.pop());for(var a=function(t,e){void 0===e&&(e=!0),null!=t&&t!==r&&null!=t.domNode.parentNode&&(null==t.domNode[i.DATA_KEY].mutations&&(t.domNode[i.DATA_KEY].mutations=[]),e&&a(t.parent))},s=function(t){null!=t.domNode[i.DATA_KEY]&&null!=t.domNode[i.DATA_KEY].mutations&&(t instanceof o.default&&t.children.forEach(s),t.optimize(n))},u=e,c=0;u.length>0;c+=1){if(c>=100)throw new Error("[Parchment] Maximum optimize iterations reached");for(u.forEach(function(t){var e=i.find(t.target,!0);null!=e&&(e.domNode===t.target&&("childList"===t.type?(a(i.find(t.previousSibling,!1)),[].forEach.call(t.addedNodes,function(t){var e=i.find(t,!1);a(e,!1),e instanceof o.default&&e.children.forEach(function(t){a(t,!1)})})):"attributes"===t.type&&a(e.prev)),a(e))}),this.children.forEach(s),u=[].slice.call(this.observer.takeRecords()),l=u.slice();l.length>0;)e.push(l.pop())}},e.prototype.update=function(e,n){var r=this;void 0===n&&(n={}),e=e||this.observer.takeRecords(),e.map(function(t){var e=i.find(t.target,!0);return null==e?null:null==e.domNode[i.DATA_KEY].mutations?(e.domNode[i.DATA_KEY].mutations=[t],e):(e.domNode[i.DATA_KEY].mutations.push(t),null)}).forEach(function(t){null!=t&&t!==r&&null!=t.domNode[i.DATA_KEY]&&t.update(t.domNode[i.DATA_KEY].mutations||[],n)}),null!=this.domNode[i.DATA_KEY].mutations&&t.prototype.update.call(this,this.domNode[i.DATA_KEY].mutations,n),this.optimize(e,n)},e.blotName="scroll",e.defaultChild="block",e.scope=i.Scope.BLOCK_BLOT,e.tagName="DIV",e}(o.default);e.default=a},function(t,e,n){"use strict";function r(t,e){if(Object.keys(t).length!==Object.keys(e).length)return!1;for(var n in t)if(t[n]!==e[n])return!1;return!0}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(18),l=n(1),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.formats=function(n){if(n.tagName!==e.tagName)return t.formats.call(this,n)},e.prototype.format=function(n,r){var o=this;n!==this.statics.blotName||r?t.prototype.format.call(this,n,r):(this.children.forEach(function(t){t instanceof i.default||(t=t.wrap(e.blotName,!0)),o.attributes.copy(t)}),this.unwrap())},e.prototype.formatAt=function(e,n,r,o){if(null!=this.formats()[r]||l.query(r,l.Scope.ATTRIBUTE)){this.isolate(e,n).format(r,o)}else t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.optimize=function(n){t.prototype.optimize.call(this,n);var o=this.formats();if(0===Object.keys(o).length)return this.unwrap();var i=this.next;i instanceof e&&i.prev===this&&r(o,i.formats())&&(i.moveChildren(this),i.remove())},e.blotName="inline",e.scope=l.Scope.INLINE_BLOT,e.tagName="SPAN",e}(i.default);e.default=a},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(18),i=n(1),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.formats=function(n){var r=i.query(e.blotName).tagName;if(n.tagName!==r)return t.formats.call(this,n)},e.prototype.format=function(n,r){null!=i.query(n,i.Scope.BLOCK)&&(n!==this.statics.blotName||r?t.prototype.format.call(this,n,r):this.replaceWith(e.blotName))},e.prototype.formatAt=function(e,n,r,o){null!=i.query(r,i.Scope.BLOCK)?this.format(r,o):t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.insertAt=function(e,n,r){if(null==r||null!=i.query(n,i.Scope.INLINE))t.prototype.insertAt.call(this,e,n,r);else{var o=this.split(e),l=i.create(n,r);o.parent.insertBefore(l,o)}},e.prototype.update=function(e,n){navigator.userAgent.match(/Trident/)?this.build():t.prototype.update.call(this,e,n)},e.blotName="block",e.scope=i.Scope.BLOCK_BLOT,e.tagName="P",e}(o.default);e.default=l},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(19),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.formats=function(t){},e.prototype.format=function(e,n){t.prototype.formatAt.call(this,0,this.length(),e,n)},e.prototype.formatAt=function(e,n,r,o){0===e&&n===this.length()?this.format(r,o):t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.formats=function(){return this.statics.formats(this.domNode)},e}(o.default);e.default=i},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(19),i=n(1),l=function(t){function e(e){var n=t.call(this,e)||this;return n.text=n.statics.value(n.domNode),n}return r(e,t),e.create=function(t){return document.createTextNode(t)},e.value=function(t){var e=t.data;return e.normalize&&(e=e.normalize()),e},e.prototype.deleteAt=function(t,e){this.domNode.data=this.text=this.text.slice(0,t)+this.text.slice(t+e)},e.prototype.index=function(t,e){return this.domNode===t?e:-1},e.prototype.insertAt=function(e,n,r){null==r?(this.text=this.text.slice(0,e)+n+this.text.slice(e),this.domNode.data=this.text):t.prototype.insertAt.call(this,e,n,r)},e.prototype.length=function(){return this.text.length},e.prototype.optimize=function(n){t.prototype.optimize.call(this,n),this.text=this.statics.value(this.domNode),0===this.text.length?this.remove():this.next instanceof e&&this.next.prev===this&&(this.insertAt(this.length(),this.next.value()),this.next.remove())},e.prototype.position=function(t,e){return void 0===e&&(e=!1),[this.domNode,t]},e.prototype.split=function(t,e){if(void 0===e&&(e=!1),!e){if(0===t)return this;if(t===this.length())return this.next}var n=i.create(this.domNode.splitText(t));return this.parent.insertBefore(n,this.next),this.text=this.statics.value(this.domNode),n},e.prototype.update=function(t,e){var n=this;t.some(function(t){return"characterData"===t.type&&t.target===n.domNode})&&(this.text=this.statics.value(this.domNode))},e.prototype.value=function(){return this.text},e.blotName="text",e.scope=i.Scope.INLINE_BLOT,e}(o.default);e.default=l},function(t,e,n){"use strict";var r=document.createElement("div");if(r.classList.toggle("test-class",!1),r.classList.contains("test-class")){var o=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return arguments.length>1&&!this.contains(t)==!e?e:o.call(this,t)}}String.prototype.startsWith||(String.prototype.startsWith=function(t,e){return e=e||0,this.substr(e,t.length)===t}),String.prototype.endsWith||(String.prototype.endsWith=function(t,e){var n=this.toString();("number"!=typeof e||!isFinite(e)||Math.floor(e)!==e||e>n.length)&&(e=n.length),e-=t.length;var r=n.indexOf(t,e);return-1!==r&&r===e}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var e,n=Object(this),r=n.length>>>0,o=arguments[1],i=0;ie.length?t:e,l=t.length>e.length?e:t,a=i.indexOf(l);if(-1!=a)return r=[[y,i.substring(0,a)],[v,l],[y,i.substring(a+l.length)]],t.length>e.length&&(r[0][0]=r[2][0]=d),r;if(1==l.length)return[[d,t],[y,e]];var u=s(t,e);if(u){var c=u[0],f=u[1],h=u[2],p=u[3],b=u[4],g=n(c,h),m=n(f,p);return g.concat([[v,b]],m)}return o(t,e)}function o(t,e){for(var n=t.length,r=e.length,o=Math.ceil((n+r)/2),l=o,a=2*o,s=new Array(a),u=new Array(a),c=0;cn)v+=2;else if(x>r)p+=2;else if(h){var k=l+f-_;if(k>=0&&k=E)return i(t,e,O,x)}}}for(var N=-m+b;N<=m-g;N+=2){var E,k=l+N;E=N==-m||N!=m&&u[k-1]n)g+=2;else if(j>r)b+=2;else if(!h){var w=l+f-N;if(w>=0&&w=E)return i(t,e,O,x)}}}}return[[d,t],[y,e]]}function i(t,e,r,o){var i=t.substring(0,r),l=e.substring(0,o),a=t.substring(r),s=e.substring(o),u=n(i,l),c=n(a,s);return u.concat(c)}function l(t,e){if(!t||!e||t.charAt(0)!=e.charAt(0))return 0;for(var n=0,r=Math.min(t.length,e.length),o=r,i=0;n=t.length?[r,o,i,s,f]:null}var r=t.length>e.length?t:e,o=t.length>e.length?e:t;if(r.length<4||2*o.lengthu[4].length?s:u:s;var c,f,h,p;return t.length>e.length?(c=i[0],f=i[1],h=i[2],p=i[3]):(h=i[0],p=i[1],c=i[2],f=i[3]),[c,f,h,p,i[4]]}function u(t){t.push([v,""]);for(var e,n=0,r=0,o=0,i="",s="";n1?(0!==r&&0!==o&&(e=l(s,i),0!==e&&(n-r-o>0&&t[n-r-o-1][0]==v?t[n-r-o-1][1]+=s.substring(0,e):(t.splice(0,0,[v,s.substring(0,e)]),n++),s=s.substring(e),i=i.substring(e)),0!==(e=a(s,i))&&(t[n][1]=s.substring(s.length-e)+t[n][1],s=s.substring(0,s.length-e),i=i.substring(0,i.length-e))),0===r?t.splice(n-o,r+o,[y,s]):0===o?t.splice(n-r,r+o,[d,i]):t.splice(n-r-o,r+o,[d,i],[y,s]),n=n-r-o+(r?1:0)+(o?1:0)+1):0!==n&&t[n-1][0]==v?(t[n-1][1]+=t[n][1],t.splice(n,1)):n++,o=0,r=0,i="",s=""}""===t[t.length-1][1]&&t.pop();var c=!1;for(n=1;n0&&r.splice(o+2,0,[l[0],a]),p(r,o,3)}return t}function h(t){for(var e=!1,n=function(t){return t.charCodeAt(0)>=56320&&t.charCodeAt(0)<=57343},r=2;r=55296&&t.charCodeAt(t.length-1)<=56319}(t[r-2][1])&&t[r-1][0]===d&&n(t[r-1][1])&&t[r][0]===y&&n(t[r][1])&&(e=!0,t[r-1][1]=t[r-2][1].slice(-1)+t[r-1][1],t[r][1]=t[r-2][1].slice(-1)+t[r][1],t[r-2][1]=t[r-2][1].slice(0,-1));if(!e)return t;for(var o=[],r=0;r0&&o.push(t[r]);return o}function p(t,e,n){for(var r=e+n-1;r>=0&&r>=e-1;r--)if(r+1=r&&!a.endsWith("\n")&&(n=!0),e.scroll.insertAt(t,a);var c=e.scroll.line(t),f=u(c,2),h=f[0],p=f[1],y=(0,T.default)({},(0,O.bubbleFormats)(h));if(h instanceof w.default){var b=h.descendant(v.default.Leaf,p),g=u(b,1),m=g[0];y=(0,T.default)(y,(0,O.bubbleFormats)(m))}l=d.default.attributes.diff(y,l)||{}}else if("object"===s(o.insert)){var _=Object.keys(o.insert)[0];if(null==_)return t;e.scroll.insertAt(t,_,o.insert[_])}r+=i}return Object.keys(l).forEach(function(n){e.scroll.formatAt(t,i,n,l[n])}),t+i},0),t.reduce(function(t,n){return"number"==typeof n.delete?(e.scroll.deleteAt(t,n.delete),t):t+(n.retain||n.insert.length||1)},0),this.scroll.batchEnd(),this.update(t)}},{key:"deleteText",value:function(t,e){return this.scroll.deleteAt(t,e),this.update((new h.default).retain(t).delete(e))}},{key:"formatLine",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.scroll.update(),Object.keys(r).forEach(function(o){if(null==n.scroll.whitelist||n.scroll.whitelist[o]){var i=n.scroll.lines(t,Math.max(e,1)),l=e;i.forEach(function(e){var i=e.length();if(e instanceof g.default){var a=t-e.offset(n.scroll),s=e.newlineIndex(a+l)-a+1;e.formatAt(a,s,o,r[o])}else e.format(o,r[o]);l-=i})}}),this.scroll.optimize(),this.update((new h.default).retain(t).retain(e,(0,N.default)(r)))}},{key:"formatText",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return Object.keys(r).forEach(function(o){n.scroll.formatAt(t,e,o,r[o])}),this.update((new h.default).retain(t).retain(e,(0,N.default)(r)))}},{key:"getContents",value:function(t,e){return this.delta.slice(t,t+e)}},{key:"getDelta",value:function(){return this.scroll.lines().reduce(function(t,e){return t.concat(e.delta())},new h.default)}},{key:"getFormat",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=[],r=[];0===e?this.scroll.path(t).forEach(function(t){var e=u(t,1),o=e[0];o instanceof w.default?n.push(o):o instanceof v.default.Leaf&&r.push(o)}):(n=this.scroll.lines(t,e),r=this.scroll.descendants(v.default.Leaf,t,e));var o=[n,r].map(function(t){if(0===t.length)return{};for(var e=(0,O.bubbleFormats)(t.shift());Object.keys(e).length>0;){var n=t.shift();if(null==n)return e;e=l((0,O.bubbleFormats)(n),e)}return e});return T.default.apply(T.default,o)}},{key:"getText",value:function(t,e){return this.getContents(t,e).filter(function(t){return"string"==typeof t.insert}).map(function(t){return t.insert}).join("")}},{key:"insertEmbed",value:function(t,e,n){return this.scroll.insertAt(t,e,n),this.update((new h.default).retain(t).insert(o({},e,n)))}},{key:"insertText",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),this.scroll.insertAt(t,e),Object.keys(r).forEach(function(o){n.scroll.formatAt(t,e.length,o,r[o])}),this.update((new h.default).retain(t).insert(e,(0,N.default)(r)))}},{key:"isBlank",value:function(){if(0==this.scroll.children.length)return!0;if(this.scroll.children.length>1)return!1;var t=this.scroll.children.head;return t.statics.blotName===w.default.blotName&&(!(t.children.length>1)&&t.children.head instanceof k.default)}},{key:"removeFormat",value:function(t,e){var n=this.getText(t,e),r=this.scroll.line(t+e),o=u(r,2),i=o[0],l=o[1],a=0,s=new h.default;null!=i&&(a=i instanceof g.default?i.newlineIndex(l)-l+1:i.length()-l,s=i.delta().slice(l,l+a-1).insert("\n"));var c=this.getContents(t,e+a),f=c.diff((new h.default).insert(n).concat(s)),p=(new h.default).retain(t).concat(f);return this.applyDelta(p)}},{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=this.delta;if(1===e.length&&"characterData"===e[0].type&&e[0].target.data.match(P)&&v.default.find(e[0].target)){var o=v.default.find(e[0].target),i=(0,O.bubbleFormats)(o),l=o.offset(this.scroll),a=e[0].oldValue.replace(_.default.CONTENTS,""),s=(new h.default).insert(a),u=(new h.default).insert(o.value());t=(new h.default).retain(l).concat(s.diff(u,n)).reduce(function(t,e){return e.insert?t.insert(e.insert,i):t.push(e)},new h.default),this.delta=r.compose(t)}else this.delta=this.getDelta(),t&&(0,A.default)(r.compose(t),this.delta)||(t=r.diff(this.delta,n));return t}}]),t}();e.default=S},function(t,e){"use strict";function n(){}function r(t,e,n){this.fn=t,this.context=e,this.once=n||!1}function o(){this._events=new n,this._eventsCount=0}var i=Object.prototype.hasOwnProperty,l="~";Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(l=!1)),o.prototype.eventNames=function(){var t,e,n=[];if(0===this._eventsCount)return n;for(e in t=this._events)i.call(t,e)&&n.push(l?e.slice(1):e);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(t)):n},o.prototype.listeners=function(t,e){var n=l?l+t:t,r=this._events[n];if(e)return!!r;if(!r)return[];if(r.fn)return[r.fn];for(var o=0,i=r.length,a=new Array(i);o0){if(i instanceof y.BlockEmbed||f instanceof y.BlockEmbed)return void this.optimize();if(i instanceof _.default){var h=i.newlineIndex(i.length(),!0);if(h>-1&&(i=i.split(h+1))===f)return void this.optimize()}else if(f instanceof _.default){var p=f.newlineIndex(0);p>-1&&f.split(p+1)}var d=f.children.head instanceof g.default?null:f.children.head;i.moveChildren(f,d),i.remove()}this.optimize()}},{key:"enable",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.domNode.setAttribute("contenteditable",t)}},{key:"formatAt",value:function(t,n,r,o){(null==this.whitelist||this.whitelist[r])&&(c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"formatAt",this).call(this,t,n,r,o),this.optimize())}},{key:"insertAt",value:function(t,n,r){if(null==r||null==this.whitelist||this.whitelist[n]){if(t>=this.length())if(null==r||null==h.default.query(n,h.default.Scope.BLOCK)){var o=h.default.create(this.statics.defaultChild);this.appendChild(o),null==r&&n.endsWith("\n")&&(n=n.slice(0,-1)),o.insertAt(0,n,r)}else{var i=h.default.create(n,r);this.appendChild(i)}else c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertAt",this).call(this,t,n,r);this.optimize()}}},{key:"insertBefore",value:function(t,n){if(t.statics.scope===h.default.Scope.INLINE_BLOT){var r=h.default.create(this.statics.defaultChild);r.appendChild(t),t=r}c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertBefore",this).call(this,t,n)}},{key:"leaf",value:function(t){return this.path(t).pop()||[null,-1]}},{key:"line",value:function(t){return t===this.length()?this.line(t-1):this.descendant(a,t)}},{key:"lines",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE;return function t(e,n,r){var o=[],i=r;return e.children.forEachAt(n,r,function(e,n,r){a(e)?o.push(e):e instanceof h.default.Container&&(o=o.concat(t(e,n,i))),i-=r}),o}(this,t,e)}},{key:"optimize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!0!==this.batch&&(c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this,t,n),t.length>0&&this.emitter.emit(d.default.events.SCROLL_OPTIMIZE,t,n))}},{key:"path",value:function(t){return c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"path",this).call(this,t).slice(1)}},{key:"update",value:function(t){if(!0!==this.batch){var n=d.default.sources.USER;"string"==typeof t&&(n=t),Array.isArray(t)||(t=this.observer.takeRecords()),t.length>0&&this.emitter.emit(d.default.events.SCROLL_BEFORE_UPDATE,n,t),c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"update",this).call(this,t.concat([])),t.length>0&&this.emitter.emit(d.default.events.SCROLL_UPDATE,n,t)}}}]),e}(h.default.Scroll);x.blotName="scroll",x.className="ql-editor",x.tagName="DIV",x.defaultChild="block",x.allowedChildren=[v.default,y.BlockEmbed,w.default],e.default=x},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function s(t,e,n){return"object"===(void 0===e?"undefined":x(e))?Object.keys(e).reduce(function(t,n){return s(t,n,e[n])},t):t.reduce(function(t,r){return r.attributes&&r.attributes[e]?t.push(r):t.insert(r.insert,(0,j.default)({},o({},e,n),r.attributes))},new q.default)}function u(t){if(t.nodeType!==Node.ELEMENT_NODE)return{};return t["__ql-computed-style"]||(t["__ql-computed-style"]=window.getComputedStyle(t))}function c(t,e){for(var n="",r=t.ops.length-1;r>=0&&n.length-1}function h(t,e,n){return t.nodeType===t.TEXT_NODE?n.reduce(function(e,n){return n(t,e)},new q.default):t.nodeType===t.ELEMENT_NODE?[].reduce.call(t.childNodes||[],function(r,o){var i=h(o,e,n);return o.nodeType===t.ELEMENT_NODE&&(i=e.reduce(function(t,e){return e(o,t)},i),i=(o[W]||[]).reduce(function(t,e){return e(o,t)},i)),r.concat(i)},new q.default):new q.default}function p(t,e,n){return s(n,t,!0)}function d(t,e){var n=P.default.Attributor.Attribute.keys(t),r=P.default.Attributor.Class.keys(t),o=P.default.Attributor.Style.keys(t),i={};return n.concat(r).concat(o).forEach(function(e){var n=P.default.query(e,P.default.Scope.ATTRIBUTE);null!=n&&(i[n.attrName]=n.value(t),i[n.attrName])||(n=Y[e],null==n||n.attrName!==e&&n.keyName!==e||(i[n.attrName]=n.value(t)||void 0),null==(n=X[e])||n.attrName!==e&&n.keyName!==e||(n=X[e],i[n.attrName]=n.value(t)||void 0))}),Object.keys(i).length>0&&(e=s(e,i)),e}function y(t,e){var n=P.default.query(t);if(null==n)return e;if(n.prototype instanceof P.default.Embed){var r={},o=n.value(t);null!=o&&(r[n.blotName]=o,e=(new q.default).insert(r,n.formats(t)))}else"function"==typeof n.formats&&(e=s(e,n.blotName,n.formats(t)));return e}function v(t,e){return c(e,"\n")||e.insert("\n"),e}function b(){return new q.default}function g(t,e){var n=P.default.query(t);if(null==n||"list-item"!==n.blotName||!c(e,"\n"))return e;for(var r=-1,o=t.parentNode;!o.classList.contains("ql-clipboard");)"list"===(P.default.query(o)||{}).blotName&&(r+=1),o=o.parentNode;return r<=0?e:e.compose((new q.default).retain(e.length()-1).retain(1,{indent:r}))}function m(t,e){return c(e,"\n")||(f(t)||e.length()>0&&t.nextSibling&&f(t.nextSibling))&&e.insert("\n"),e}function _(t,e){if(f(t)&&null!=t.nextElementSibling&&!c(e,"\n\n")){var n=t.offsetHeight+parseFloat(u(t).marginTop)+parseFloat(u(t).marginBottom);t.nextElementSibling.offsetTop>t.offsetTop+1.5*n&&e.insert("\n")}return e}function O(t,e){var n={},r=t.style||{};return r.fontStyle&&"italic"===u(t).fontStyle&&(n.italic=!0),r.fontWeight&&(u(t).fontWeight.startsWith("bold")||parseInt(u(t).fontWeight)>=700)&&(n.bold=!0),Object.keys(n).length>0&&(e=s(e,n)),parseFloat(r.textIndent||0)>0&&(e=(new q.default).insert("\t").concat(e)),e}function w(t,e){var n=t.data;if("O:P"===t.parentNode.tagName)return e.insert(n.trim());if(0===n.trim().length&&t.parentNode.classList.contains("ql-clipboard"))return e;if(!u(t.parentNode).whiteSpace.startsWith("pre")){var r=function(t,e){return e=e.replace(/[^\u00a0]/g,""),e.length<1&&t?" ":e};n=n.replace(/\r\n/g," ").replace(/\n/g," "),n=n.replace(/\s\s+/g,r.bind(r,!0)),(null==t.previousSibling&&f(t.parentNode)||null!=t.previousSibling&&f(t.previousSibling))&&(n=n.replace(/^\s+/,r.bind(r,!1))),(null==t.nextSibling&&f(t.parentNode)||null!=t.nextSibling&&f(t.nextSibling))&&(n=n.replace(/\s+$/,r.bind(r,!1)))}return e.insert(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.matchText=e.matchSpacing=e.matchNewline=e.matchBlot=e.matchAttributor=e.default=void 0;var x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},k=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),E=function(){function t(t,e){for(var n=0;n\r?\n +\<"),this.convert();var e=this.quill.getFormat(this.quill.selection.savedRange.index);if(e[F.default.blotName]){var n=this.container.innerText;return this.container.innerHTML="",(new q.default).insert(n,o({},F.default.blotName,e[F.default.blotName]))}var r=this.prepareMatching(),i=k(r,2),l=i[0],a=i[1],s=h(this.container,l,a);return c(s,"\n")&&null==s.ops[s.ops.length-1].attributes&&(s=s.compose((new q.default).retain(s.length()-1).delete(1))),V.log("convert",this.container.innerHTML,s),this.container.innerHTML="",s}},{key:"dangerouslyPasteHTML",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:C.default.sources.API;if("string"==typeof t)this.quill.setContents(this.convert(t),e),this.quill.setSelection(0,C.default.sources.SILENT);else{var r=this.convert(e);this.quill.updateContents((new q.default).retain(t).concat(r),n),this.quill.setSelection(t+r.length(),C.default.sources.SILENT)}}},{key:"onPaste",value:function(t){var e=this;if(!t.defaultPrevented&&this.quill.isEnabled()){var n=this.quill.getSelection(),r=(new q.default).retain(n.index),o=this.quill.scrollingContainer.scrollTop;this.container.focus(),this.quill.selection.update(C.default.sources.SILENT),setTimeout(function(){r=r.concat(e.convert()).delete(n.length),e.quill.updateContents(r,C.default.sources.USER),e.quill.setSelection(r.length()-n.length,C.default.sources.SILENT),e.quill.scrollingContainer.scrollTop=o,e.quill.focus()},1)}}},{key:"prepareMatching",value:function(){var t=this,e=[],n=[];return this.matchers.forEach(function(r){var o=k(r,2),i=o[0],l=o[1];switch(i){case Node.TEXT_NODE:n.push(l);break;case Node.ELEMENT_NODE:e.push(l);break;default:[].forEach.call(t.container.querySelectorAll(i),function(t){t[W]=t[W]||[],t[W].push(l)})}}),[e,n]}}]),e}(I.default);$.DEFAULTS={matchers:[],matchVisual:!0},e.default=$,e.matchAttributor=d,e.matchBlot=y,e.matchNewline=m,e.matchSpacing=_,e.matchText=w},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t){var e=t.ops[t.ops.length-1];return null!=e&&(null!=e.insert?"string"==typeof e.insert&&e.insert.endsWith("\n"):null!=e.attributes&&Object.keys(e.attributes).some(function(t){return null!=f.default.query(t,f.default.Scope.BLOCK)}))}function s(t){var e=t.reduce(function(t,e){return t+=e.delete||0},0),n=t.length()-e;return a(t)&&(n-=1),n}Object.defineProperty(e,"__esModule",{value:!0}),e.getLastChangeIndex=e.default=void 0;var u=function(){function t(t,e){for(var n=0;nr&&this.stack.undo.length>0){var o=this.stack.undo.pop();n=n.compose(o.undo),t=o.redo.compose(t)}else this.lastRecorded=r;this.stack.undo.push({redo:t,undo:n}),this.stack.undo.length>this.options.maxStack&&this.stack.undo.shift()}}},{key:"redo",value:function(){this.change("redo","undo")}},{key:"transform",value:function(t){this.stack.undo.forEach(function(e){e.undo=t.transform(e.undo,!0),e.redo=t.transform(e.redo,!0)}),this.stack.redo.forEach(function(e){e.undo=t.transform(e.undo,!0),e.redo=t.transform(e.redo,!0)})}},{key:"undo",value:function(){this.change("undo","redo")}}]),e}(y.default);v.DEFAULTS={delay:1e3,maxStack:100,userOnly:!1},e.default=v,e.getLastChangeIndex=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.IndentClass=void 0;var l=function(){function t(t,e){for(var n=0;n0&&this.children.tail.format(t,e)}},{key:"formats",value:function(){return o({},this.statics.blotName,this.statics.formats(this.domNode))}},{key:"insertBefore",value:function(t,n){if(t instanceof v)u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertBefore",this).call(this,t,n);else{var r=null==n?this.length():n.offset(this),o=this.split(r);o.parent.insertBefore(t,o)}}},{key:"optimize",value:function(t){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this,t);var n=this.next;null!=n&&n.prev===this&&n.statics.blotName===this.statics.blotName&&n.domNode.tagName===this.domNode.tagName&&n.domNode.getAttribute("data-checked")===this.domNode.getAttribute("data-checked")&&(n.moveChildren(this),n.remove())}},{key:"replace",value:function(t){if(t.statics.blotName!==this.statics.blotName){var n=f.default.create(this.statics.defaultChild);t.moveChildren(n),this.appendChild(n)}u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"replace",this).call(this,t)}}]),e}(y.default);b.blotName="list",b.scope=f.default.Scope.BLOCK_BLOT,b.tagName=["OL","UL"],b.defaultChild="list-item",b.allowedChildren=[v],e.ListItem=v,e.default=b},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(39),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default);s.blotName="italic",s.tagName=["EM","I"],e.default=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n-1?n?this.domNode.setAttribute(t,n):this.domNode.removeAttribute(t):a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n)}}],[{key:"create",value:function(t){var n=a(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return"string"==typeof t&&n.setAttribute("src",this.sanitize(t)),n}},{key:"formats",value:function(t){return f.reduce(function(e,n){return t.hasAttribute(n)&&(e[n]=t.getAttribute(n)),e},{})}},{key:"match",value:function(t){return/\.(jpe?g|gif|png)$/.test(t)||/^data:image\/.+;base64/.test(t)}},{key:"sanitize",value:function(t){return(0,c.sanitize)(t,["http","https","data"])?t:"//:0"}},{key:"value",value:function(t){return t.getAttribute("src")}}]),e}(u.default.Embed);h.blotName="image",h.tagName="IMG",e.default=h},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n-1?n?this.domNode.setAttribute(t,n):this.domNode.removeAttribute(t):a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n)}}],[{key:"create",value:function(t){var n=a(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return n.setAttribute("frameborder","0"),n.setAttribute("allowfullscreen",!0),n.setAttribute("src",this.sanitize(t)),n}},{key:"formats",value:function(t){return f.reduce(function(e,n){return t.hasAttribute(n)&&(e[n]=t.getAttribute(n)),e},{})}},{key:"sanitize",value:function(t){return c.default.sanitize(t)}},{key:"value",value:function(t){return t.getAttribute("src")}}]),e}(s.BlockEmbed);h.blotName="video",h.className="ql-video",h.tagName="IFRAME",e.default=h},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.FormulaBlot=void 0;var a=function(){function t(t,e){for(var n=0;n0||null==this.cachedText)&&(this.domNode.innerHTML=t(e),this.domNode.normalize(),this.attach()),this.cachedText=e)}}]),e}(v.default);b.className="ql-syntax";var g=new c.default.Attributor.Class("token","hljs",{scope:c.default.Scope.INLINE}),m=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));if("function"!=typeof r.options.highlight)throw new Error("Syntax module requires highlight.js. Please include the library on the page before Quill.");var l=null;return r.quill.on(h.default.events.SCROLL_OPTIMIZE,function(){clearTimeout(l),l=setTimeout(function(){r.highlight(),l=null},r.options.interval)}),r.highlight(),r}return l(e,t),a(e,null,[{key:"register",value:function(){h.default.register(g,!0),h.default.register(b,!0)}}]),a(e,[{key:"highlight",value:function(){var t=this;if(!this.quill.selection.composing){this.quill.update(h.default.sources.USER);var e=this.quill.getSelection();this.quill.scroll.descendants(b).forEach(function(e){e.highlight(t.options.highlight)}),this.quill.update(h.default.sources.SILENT),null!=e&&this.quill.setSelection(e,h.default.sources.SILENT)}}}]),e}(d.default);m.DEFAULTS={highlight:function(){return null==window.hljs?null:function(t){return window.hljs.highlightAuto(t).value}}(),interval:1e3},e.CodeBlock=b,e.CodeToken=g,e.default=m},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function s(t,e,n){var r=document.createElement("button");r.setAttribute("type","button"),r.classList.add("ql-"+e),null!=n&&(r.value=n),t.appendChild(r)}function u(t,e){Array.isArray(e[0])||(e=[e]),e.forEach(function(e){var n=document.createElement("span");n.classList.add("ql-formats"),e.forEach(function(t){if("string"==typeof t)s(n,t);else{var e=Object.keys(t)[0],r=t[e];Array.isArray(r)?c(n,e,r):s(n,e,r)}}),t.appendChild(n)})}function c(t,e,n){var r=document.createElement("select");r.classList.add("ql-"+e),n.forEach(function(t){var e=document.createElement("option");!1!==t?e.setAttribute("value",t):e.setAttribute("selected","selected"),r.appendChild(e)}),t.appendChild(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.addControls=e.default=void 0;var f=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=function(){function t(t,e){for(var n=0;n '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e){t.exports=' '},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.BubbleTooltip=void 0;var a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=function(){function t(t,e){for(var n=0;n0&&o===h.default.sources.USER){r.show(),r.root.style.left="0px",r.root.style.width="",r.root.style.width=r.root.offsetWidth+"px";var i=r.quill.getLines(e.index,e.length);if(1===i.length)r.position(r.quill.getBounds(e));else{var l=i[i.length-1],a=r.quill.getIndex(l),s=Math.min(l.length()-1,e.index+e.length-a),u=r.quill.getBounds(new y.Range(a,s));r.position(u)}}else document.activeElement!==r.textbox&&r.quill.hasFocus()&&r.hide()}),r}return l(e,t),s(e,[{key:"listen",value:function(){var t=this;a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"listen",this).call(this),this.root.querySelector(".ql-close").addEventListener("click",function(){t.root.classList.remove("ql-editing")}),this.quill.on(h.default.events.SCROLL_OPTIMIZE,function(){setTimeout(function(){if(!t.root.classList.contains("ql-hidden")){var e=t.quill.getSelection();null!=e&&t.position(t.quill.getBounds(e))}},1)})}},{key:"cancel",value:function(){this.show()}},{key:"position",value:function(t){var n=a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"position",this).call(this,t),r=this.root.querySelector(".ql-tooltip-arrow");if(r.style.marginLeft="",0===n)return n;r.style.marginLeft=-1*n-r.offsetWidth/2+"px"}}]),e}(p.BaseTooltip);_.TEMPLATE=['','
    ','','',"
    "].join(""),e.BubbleTooltip=_,e.default=m},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=function(){function t(t,e){for(var n=0;n','','',''].join(""),e.default=w}]).default}); \ No newline at end of file diff --git a/Oqtane.Server/wwwroot/js/quill1.3.7.min.js b/Oqtane.Server/wwwroot/js/quill1.3.7.min.js new file mode 100644 index 00000000..c0d84f88 --- /dev/null +++ b/Oqtane.Server/wwwroot/js/quill1.3.7.min.js @@ -0,0 +1,8 @@ +/*! + * Quill Editor v1.3.7 + * https://quilljs.com/ + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */ +!function (t, e) { "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.Quill = e() : t.Quill = e() }("undefined" != typeof self ? self : this, function () { return function (t) { function e(r) { if (n[r]) return n[r].exports; var o = n[r] = { i: r, l: !1, exports: {} }; return t[r].call(o.exports, o, o.exports, e), o.l = !0, o.exports } var n = {}; return e.m = t, e.c = n, e.d = function (t, n, r) { e.o(t, n) || Object.defineProperty(t, n, { configurable: !1, enumerable: !0, get: r }) }, e.n = function (t) { var n = t && t.__esModule ? function () { return t.default } : function () { return t }; return e.d(n, "a", n), n }, e.o = function (t, e) { return Object.prototype.hasOwnProperty.call(t, e) }, e.p = "", e(e.s = 45) }([function (t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var r = n(17), o = n(18), i = n(19), l = n(48), a = n(49), s = n(50), u = n(51), c = n(52), f = n(11), h = n(29), p = n(30), d = n(28), y = n(1), v = { Scope: y.Scope, create: y.create, find: y.find, query: y.query, register: y.register, Container: r.default, Format: o.default, Leaf: i.default, Embed: u.default, Scroll: l.default, Block: s.default, Inline: a.default, Text: c.default, Attributor: { Attribute: f.default, Class: h.default, Style: p.default, Store: d.default } }; e.default = v }, function (t, e, n) { "use strict"; function r(t, e) { var n = i(t); if (null == n) throw new s("Unable to create " + t + " blot"); var r = n; return new r(t instanceof Node || t.nodeType === Node.TEXT_NODE ? t : r.create(e), e) } function o(t, n) { return void 0 === n && (n = !1), null == t ? null : null != t[e.DATA_KEY] ? t[e.DATA_KEY].blot : n ? o(t.parentNode, n) : null } function i(t, e) { void 0 === e && (e = p.ANY); var n; if ("string" == typeof t) n = h[t] || u[t]; else if (t instanceof Text || t.nodeType === Node.TEXT_NODE) n = h.text; else if ("number" == typeof t) t & p.LEVEL & p.BLOCK ? n = h.block : t & p.LEVEL & p.INLINE && (n = h.inline); else if (t instanceof HTMLElement) { var r = (t.getAttribute("class") || "").split(/\s+/); for (var o in r) if (n = c[r[o]]) break; n = n || f[t.tagName] } return null == n ? null : e & p.LEVEL & n.scope && e & p.TYPE & n.scope ? n : null } function l() { for (var t = [], e = 0; e < arguments.length; e++)t[e] = arguments[e]; if (t.length > 1) return t.map(function (t) { return l(t) }); var n = t[0]; if ("string" != typeof n.blotName && "string" != typeof n.attrName) throw new s("Invalid definition"); if ("abstract" === n.blotName) throw new s("Cannot register abstract class"); if (h[n.blotName || n.attrName] = n, "string" == typeof n.keyName) u[n.keyName] = n; else if (null != n.className && (c[n.className] = n), null != n.tagName) { Array.isArray(n.tagName) ? n.tagName = n.tagName.map(function (t) { return t.toUpperCase() }) : n.tagName = n.tagName.toUpperCase(); var r = Array.isArray(n.tagName) ? n.tagName : [n.tagName]; r.forEach(function (t) { null != f[t] && null != n.className || (f[t] = n) }) } return n } var a = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var s = function (t) { function e(e) { var n = this; return e = "[Parchment] " + e, n = t.call(this, e) || this, n.message = e, n.name = n.constructor.name, n } return a(e, t), e }(Error); e.ParchmentError = s; var u = {}, c = {}, f = {}, h = {}; e.DATA_KEY = "__blot"; var p; !function (t) { t[t.TYPE = 3] = "TYPE", t[t.LEVEL = 12] = "LEVEL", t[t.ATTRIBUTE = 13] = "ATTRIBUTE", t[t.BLOT = 14] = "BLOT", t[t.INLINE = 7] = "INLINE", t[t.BLOCK = 11] = "BLOCK", t[t.BLOCK_BLOT = 10] = "BLOCK_BLOT", t[t.INLINE_BLOT = 6] = "INLINE_BLOT", t[t.BLOCK_ATTRIBUTE = 9] = "BLOCK_ATTRIBUTE", t[t.INLINE_ATTRIBUTE = 5] = "INLINE_ATTRIBUTE", t[t.ANY = 15] = "ANY" }(p = e.Scope || (e.Scope = {})), e.create = r, e.find = o, e.query = i, e.register = l }, function (t, e) { "use strict"; var n = Object.prototype.hasOwnProperty, r = Object.prototype.toString, o = Object.defineProperty, i = Object.getOwnPropertyDescriptor, l = function (t) { return "function" == typeof Array.isArray ? Array.isArray(t) : "[object Array]" === r.call(t) }, a = function (t) { if (!t || "[object Object]" !== r.call(t)) return !1; var e = n.call(t, "constructor"), o = t.constructor && t.constructor.prototype && n.call(t.constructor.prototype, "isPrototypeOf"); if (t.constructor && !e && !o) return !1; var i; for (i in t); return void 0 === i || n.call(t, i) }, s = function (t, e) { o && "__proto__" === e.name ? o(t, e.name, { enumerable: !0, configurable: !0, value: e.newValue, writable: !0 }) : t[e.name] = e.newValue }, u = function (t, e) { if ("__proto__" === e) { if (!n.call(t, e)) return; if (i) return i(t, e).value } return t[e] }; t.exports = function t() { var e, n, r, o, i, c, f = arguments[0], h = 1, p = arguments.length, d = !1; for ("boolean" == typeof f && (d = f, f = arguments[1] || {}, h = 2), (null == f || "object" != typeof f && "function" != typeof f) && (f = {}); h < p; ++h)if (null != (e = arguments[h])) for (n in e) r = u(f, n), o = u(e, n), f !== o && (d && o && (a(o) || (i = l(o))) ? (i ? (i = !1, c = r && l(r) ? r : []) : c = r && a(r) ? r : {}, s(f, { name: n, newValue: t(d, c, o) })) : void 0 !== o && s(f, { name: n, newValue: o })); return f } }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } function a(t) { var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return null == t ? e : ("function" == typeof t.formats && (e = (0, f.default)(e, t.formats())), null == t.parent || "scroll" == t.parent.blotName || t.parent.statics.scope !== t.statics.scope ? e : a(t.parent, e)) } Object.defineProperty(e, "__esModule", { value: !0 }), e.default = e.BlockEmbed = e.bubbleFormats = void 0; var s = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), u = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, c = n(2), f = r(c), h = n(4), p = r(h), d = n(0), y = r(d), v = n(14), b = r(v), g = n(5), m = r(g), _ = n(8), O = r(_), w = function (t) { function e() { return o(this, e), i(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return l(e, t), s(e, [{ key: "attach", value: function () { u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "attach", this).call(this), this.attributes = new y.default.Attributor.Store(this.domNode) } }, { key: "delta", value: function () { return (new p.default).insert(this.value(), (0, f.default)(this.formats(), this.attributes.values())) } }, { key: "format", value: function (t, e) { var n = y.default.query(t, y.default.Scope.BLOCK_ATTRIBUTE); null != n && this.attributes.attribute(n, e) } }, { key: "formatAt", value: function (t, e, n, r) { this.format(n, r) } }, { key: "insertAt", value: function (t, n, r) { if ("string" == typeof n && n.endsWith("\n")) { var o = y.default.create(x.blotName); this.parent.insertBefore(o, 0 === t ? this : this.next), o.insertAt(0, n.slice(0, -1)) } else u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "insertAt", this).call(this, t, n, r) } }]), e }(y.default.Embed); w.scope = y.default.Scope.BLOCK_BLOT; var x = function (t) { function e(t) { o(this, e); var n = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t)); return n.cache = {}, n } return l(e, t), s(e, [{ key: "delta", value: function () { return null == this.cache.delta && (this.cache.delta = this.descendants(y.default.Leaf).reduce(function (t, e) { return 0 === e.length() ? t : t.insert(e.value(), a(e)) }, new p.default).insert("\n", a(this))), this.cache.delta } }, { key: "deleteAt", value: function (t, n) { u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "deleteAt", this).call(this, t, n), this.cache = {} } }, { key: "formatAt", value: function (t, n, r, o) { n <= 0 || (y.default.query(r, y.default.Scope.BLOCK) ? t + n === this.length() && this.format(r, o) : u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "formatAt", this).call(this, t, Math.min(n, this.length() - t - 1), r, o), this.cache = {}) } }, { key: "insertAt", value: function (t, n, r) { if (null != r) return u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "insertAt", this).call(this, t, n, r); if (0 !== n.length) { var o = n.split("\n"), i = o.shift(); i.length > 0 && (t < this.length() - 1 || null == this.children.tail ? u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "insertAt", this).call(this, Math.min(t, this.length() - 1), i) : this.children.tail.insertAt(this.children.tail.length(), i), this.cache = {}); var l = this; o.reduce(function (t, e) { return l = l.split(t, !0), l.insertAt(0, e), e.length }, t + i.length) } } }, { key: "insertBefore", value: function (t, n) { var r = this.children.head; u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "insertBefore", this).call(this, t, n), r instanceof b.default && r.remove(), this.cache = {} } }, { key: "length", value: function () { return null == this.cache.length && (this.cache.length = u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "length", this).call(this) + 1), this.cache.length } }, { key: "moveChildren", value: function (t, n) { u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "moveChildren", this).call(this, t, n), this.cache = {} } }, { key: "optimize", value: function (t) { u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "optimize", this).call(this, t), this.cache = {} } }, { key: "path", value: function (t) { return u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "path", this).call(this, t, !0) } }, { key: "removeChild", value: function (t) { u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "removeChild", this).call(this, t), this.cache = {} } }, { key: "split", value: function (t) { var n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (n && (0 === t || t >= this.length() - 1)) { var r = this.clone(); return 0 === t ? (this.parent.insertBefore(r, this), this) : (this.parent.insertBefore(r, this.next), r) } var o = u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "split", this).call(this, t, n); return this.cache = {}, o } }]), e }(y.default.Block); x.blotName = "block", x.tagName = "P", x.defaultChild = "break", x.allowedChildren = [m.default, y.default.Embed, O.default], e.bubbleFormats = a, e.BlockEmbed = w, e.default = x }, function (t, e, n) { var r = n(54), o = n(12), i = n(2), l = n(20), a = String.fromCharCode(0), s = function (t) { Array.isArray(t) ? this.ops = t : null != t && Array.isArray(t.ops) ? this.ops = t.ops : this.ops = [] }; s.prototype.insert = function (t, e) { var n = {}; return 0 === t.length ? this : (n.insert = t, null != e && "object" == typeof e && Object.keys(e).length > 0 && (n.attributes = e), this.push(n)) }, s.prototype.delete = function (t) { return t <= 0 ? this : this.push({ delete: t }) }, s.prototype.retain = function (t, e) { if (t <= 0) return this; var n = { retain: t }; return null != e && "object" == typeof e && Object.keys(e).length > 0 && (n.attributes = e), this.push(n) }, s.prototype.push = function (t) { var e = this.ops.length, n = this.ops[e - 1]; if (t = i(!0, {}, t), "object" == typeof n) { if ("number" == typeof t.delete && "number" == typeof n.delete) return this.ops[e - 1] = { delete: n.delete + t.delete }, this; if ("number" == typeof n.delete && null != t.insert && (e -= 1, "object" != typeof (n = this.ops[e - 1]))) return this.ops.unshift(t), this; if (o(t.attributes, n.attributes)) { if ("string" == typeof t.insert && "string" == typeof n.insert) return this.ops[e - 1] = { insert: n.insert + t.insert }, "object" == typeof t.attributes && (this.ops[e - 1].attributes = t.attributes), this; if ("number" == typeof t.retain && "number" == typeof n.retain) return this.ops[e - 1] = { retain: n.retain + t.retain }, "object" == typeof t.attributes && (this.ops[e - 1].attributes = t.attributes), this } } return e === this.ops.length ? this.ops.push(t) : this.ops.splice(e, 0, t), this }, s.prototype.chop = function () { var t = this.ops[this.ops.length - 1]; return t && t.retain && !t.attributes && this.ops.pop(), this }, s.prototype.filter = function (t) { return this.ops.filter(t) }, s.prototype.forEach = function (t) { this.ops.forEach(t) }, s.prototype.map = function (t) { return this.ops.map(t) }, s.prototype.partition = function (t) { var e = [], n = []; return this.forEach(function (r) { (t(r) ? e : n).push(r) }), [e, n] }, s.prototype.reduce = function (t, e) { return this.ops.reduce(t, e) }, s.prototype.changeLength = function () { return this.reduce(function (t, e) { return e.insert ? t + l.length(e) : e.delete ? t - e.delete : t }, 0) }, s.prototype.length = function () { return this.reduce(function (t, e) { return t + l.length(e) }, 0) }, s.prototype.slice = function (t, e) { t = t || 0, "number" != typeof e && (e = 1 / 0); for (var n = [], r = l.iterator(this.ops), o = 0; o < e && r.hasNext();) { var i; o < t ? i = r.next(t - o) : (i = r.next(e - o), n.push(i)), o += l.length(i) } return new s(n) }, s.prototype.compose = function (t) { var e = l.iterator(this.ops), n = l.iterator(t.ops), r = [], i = n.peek(); if (null != i && "number" == typeof i.retain && null == i.attributes) { for (var a = i.retain; "insert" === e.peekType() && e.peekLength() <= a;)a -= e.peekLength(), r.push(e.next()); i.retain - a > 0 && n.next(i.retain - a) } for (var u = new s(r); e.hasNext() || n.hasNext();)if ("insert" === n.peekType()) u.push(n.next()); else if ("delete" === e.peekType()) u.push(e.next()); else { var c = Math.min(e.peekLength(), n.peekLength()), f = e.next(c), h = n.next(c); if ("number" == typeof h.retain) { var p = {}; "number" == typeof f.retain ? p.retain = c : p.insert = f.insert; var d = l.attributes.compose(f.attributes, h.attributes, "number" == typeof f.retain); if (d && (p.attributes = d), u.push(p), !n.hasNext() && o(u.ops[u.ops.length - 1], p)) { var y = new s(e.rest()); return u.concat(y).chop() } } else "number" == typeof h.delete && "number" == typeof f.retain && u.push(h) } return u.chop() }, s.prototype.concat = function (t) { var e = new s(this.ops.slice()); return t.ops.length > 0 && (e.push(t.ops[0]), e.ops = e.ops.concat(t.ops.slice(1))), e }, s.prototype.diff = function (t, e) { if (this.ops === t.ops) return new s; var n = [this, t].map(function (e) { return e.map(function (n) { if (null != n.insert) return "string" == typeof n.insert ? n.insert : a; var r = e === t ? "on" : "with"; throw new Error("diff() called " + r + " non-document") }).join("") }), i = new s, u = r(n[0], n[1], e), c = l.iterator(this.ops), f = l.iterator(t.ops); return u.forEach(function (t) { for (var e = t[1].length; e > 0;) { var n = 0; switch (t[0]) { case r.INSERT: n = Math.min(f.peekLength(), e), i.push(f.next(n)); break; case r.DELETE: n = Math.min(e, c.peekLength()), c.next(n), i.delete(n); break; case r.EQUAL: n = Math.min(c.peekLength(), f.peekLength(), e); var a = c.next(n), s = f.next(n); o(a.insert, s.insert) ? i.retain(n, l.attributes.diff(a.attributes, s.attributes)) : i.push(s).delete(n) }e -= n } }), i.chop() }, s.prototype.eachLine = function (t, e) { e = e || "\n"; for (var n = l.iterator(this.ops), r = new s, o = 0; n.hasNext();) { if ("insert" !== n.peekType()) return; var i = n.peek(), a = l.length(i) - n.peekLength(), u = "string" == typeof i.insert ? i.insert.indexOf(e, a) - a : -1; if (u < 0) r.push(n.next()); else if (u > 0) r.push(n.next(u)); else { if (!1 === t(r, n.next(1).attributes || {}, o)) return; o += 1, r = new s } } r.length() > 0 && t(r, {}, o) }, s.prototype.transform = function (t, e) { if (e = !!e, "number" == typeof t) return this.transformPosition(t, e); for (var n = l.iterator(this.ops), r = l.iterator(t.ops), o = new s; n.hasNext() || r.hasNext();)if ("insert" !== n.peekType() || !e && "insert" === r.peekType()) if ("insert" === r.peekType()) o.push(r.next()); else { var i = Math.min(n.peekLength(), r.peekLength()), a = n.next(i), u = r.next(i); if (a.delete) continue; u.delete ? o.push(u) : o.retain(i, l.attributes.transform(a.attributes, u.attributes, e)) } else o.retain(l.length(n.next())); return o.chop() }, s.prototype.transformPosition = function (t, e) { e = !!e; for (var n = l.iterator(this.ops), r = 0; n.hasNext() && r <= t;) { var o = n.peekLength(), i = n.peekType(); n.next(), "delete" !== i ? ("insert" === i && (r < t || !e) && (t += o), r += o) : t -= Math.min(o, t - r) } return t }, t.exports = s }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var a = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), s = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, u = n(8), c = r(u), f = n(0), h = r(f), p = function (t) { function e() { return o(this, e), i(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return l(e, t), a(e, [{ key: "formatAt", value: function (t, n, r, o) { if (e.compare(this.statics.blotName, r) < 0 && h.default.query(r, h.default.Scope.BLOT)) { var i = this.isolate(t, n); o && i.wrap(r, o) } else s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "formatAt", this).call(this, t, n, r, o) } }, { key: "optimize", value: function (t) { if (s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "optimize", this).call(this, t), this.parent instanceof e && e.compare(this.statics.blotName, this.parent.statics.blotName) > 0) { var n = this.parent.isolate(this.offset(), this.length()); this.moveChildren(n), n.wrap(this) } } }], [{ key: "compare", value: function (t, n) { var r = e.order.indexOf(t), o = e.order.indexOf(n); return r >= 0 || o >= 0 ? r - o : t === n ? 0 : t < n ? -1 : 1 } }]), e }(h.default.Inline); p.allowedChildren = [p, h.default.Embed, c.default], p.order = ["cursor", "inline", "underline", "strike", "italic", "bold", "script", "link", "code"], e.default = p }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e, n) { return e in t ? Object.defineProperty(t, e, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : t[e] = n, t } function i(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function l(t, e) { if (e = (0, N.default)(!0, { container: t, modules: { clipboard: !0, keyboard: !0, history: !0 } }, e), e.theme && e.theme !== S.DEFAULTS.theme) { if (e.theme = S.import("themes/" + e.theme), null == e.theme) throw new Error("Invalid theme " + e.theme + ". Did you register it?") } else e.theme = T.default; var n = (0, N.default)(!0, {}, e.theme.DEFAULTS);[n, e].forEach(function (t) { t.modules = t.modules || {}, Object.keys(t.modules).forEach(function (e) { !0 === t.modules[e] && (t.modules[e] = {}) }) }); var r = Object.keys(n.modules).concat(Object.keys(e.modules)), o = r.reduce(function (t, e) { var n = S.import("modules/" + e); return null == n ? P.error("Cannot load " + e + " module. Are you sure you registered it?") : t[e] = n.DEFAULTS || {}, t }, {}); return null != e.modules && e.modules.toolbar && e.modules.toolbar.constructor !== Object && (e.modules.toolbar = { container: e.modules.toolbar }), e = (0, N.default)(!0, {}, S.DEFAULTS, { modules: o }, n, e), ["bounds", "container", "scrollingContainer"].forEach(function (t) { "string" == typeof e[t] && (e[t] = document.querySelector(e[t])) }), e.modules = Object.keys(e.modules).reduce(function (t, n) { return e.modules[n] && (t[n] = e.modules[n]), t }, {}), e } function a(t, e, n, r) { if (this.options.strict && !this.isEnabled() && e === g.default.sources.USER) return new d.default; var o = null == n ? null : this.getSelection(), i = this.editor.delta, l = t(); if (null != o && (!0 === n && (n = o.index), null == r ? o = u(o, l, e) : 0 !== r && (o = u(o, n, r, e)), this.setSelection(o, g.default.sources.SILENT)), l.length() > 0) { var a, s = [g.default.events.TEXT_CHANGE, l, i, e]; if ((a = this.emitter).emit.apply(a, [g.default.events.EDITOR_CHANGE].concat(s)), e !== g.default.sources.SILENT) { var c; (c = this.emitter).emit.apply(c, s) } } return l } function s(t, e, n, r, o) { var i = {}; return "number" == typeof t.index && "number" == typeof t.length ? "number" != typeof e ? (o = r, r = n, n = e, e = t.length, t = t.index) : (e = t.length, t = t.index) : "number" != typeof e && (o = r, r = n, n = e, e = 0), "object" === (void 0 === n ? "undefined" : c(n)) ? (i = n, o = r) : "string" == typeof n && (null != r ? i[n] = r : o = n), o = o || g.default.sources.API, [t, e, i, o] } function u(t, e, n, r) { if (null == t) return null; var o = void 0, i = void 0; if (e instanceof d.default) { var l = [t.index, t.index + t.length].map(function (t) { return e.transformPosition(t, r !== g.default.sources.USER) }), a = f(l, 2); o = a[0], i = a[1] } else { var s = [t.index, t.index + t.length].map(function (t) { return t < e || t === e && r === g.default.sources.USER ? t : n >= 0 ? t + n : Math.max(e, t + n) }), u = f(s, 2); o = u[0], i = u[1] } return new x.Range(o, i - o) } Object.defineProperty(e, "__esModule", { value: !0 }), e.default = e.overload = e.expandConfig = void 0; var c = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { return typeof t } : function (t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t }, f = function () { function t(t, e) { var n = [], r = !0, o = !1, i = void 0; try { for (var l, a = t[Symbol.iterator](); !(r = (l = a.next()).done) && (n.push(l.value), !e || n.length !== e); r = !0); } catch (t) { o = !0, i = t } finally { try { !r && a.return && a.return() } finally { if (o) throw i } } return n } return function (e, n) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return t(e, n); throw new TypeError("Invalid attempt to destructure non-iterable instance") } }(), h = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(); n(53); var p = n(4), d = r(p), y = n(57), v = r(y), b = n(9), g = r(b), m = n(7), _ = r(m), O = n(0), w = r(O), x = n(22), k = r(x), E = n(2), N = r(E), j = n(10), A = r(j), q = n(32), T = r(q), P = (0, A.default)("quill"), S = function () { function t(e) { var n = this, r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; if (i(this, t), this.options = l(e, r), this.container = this.options.container, null == this.container) return P.error("Invalid Quill container", e); this.options.debug && t.debug(this.options.debug); var o = this.container.innerHTML.trim(); this.container.classList.add("ql-container"), this.container.innerHTML = "", this.container.__quill = this, this.root = this.addContainer("ql-editor"), this.root.classList.add("ql-blank"), this.root.setAttribute("data-gramm", !1), this.scrollingContainer = this.options.scrollingContainer || this.root, this.emitter = new g.default, this.scroll = w.default.create(this.root, { emitter: this.emitter, whitelist: this.options.formats }), this.editor = new v.default(this.scroll), this.selection = new k.default(this.scroll, this.emitter), this.theme = new this.options.theme(this, this.options), this.keyboard = this.theme.addModule("keyboard"), this.clipboard = this.theme.addModule("clipboard"), this.history = this.theme.addModule("history"), this.theme.init(), this.emitter.on(g.default.events.EDITOR_CHANGE, function (t) { t === g.default.events.TEXT_CHANGE && n.root.classList.toggle("ql-blank", n.editor.isBlank()) }), this.emitter.on(g.default.events.SCROLL_UPDATE, function (t, e) { var r = n.selection.lastRange, o = r && 0 === r.length ? r.index : void 0; a.call(n, function () { return n.editor.update(null, e, o) }, t) }); var s = this.clipboard.convert("
    " + o + "


    "); this.setContents(s), this.history.clear(), this.options.placeholder && this.root.setAttribute("data-placeholder", this.options.placeholder), this.options.readOnly && this.disable() } return h(t, null, [{ key: "debug", value: function (t) { !0 === t && (t = "log"), A.default.level(t) } }, { key: "find", value: function (t) { return t.__quill || w.default.find(t) } }, { key: "import", value: function (t) { return null == this.imports[t] && P.error("Cannot import " + t + ". Are you sure it was registered?"), this.imports[t] } }, { key: "register", value: function (t, e) { var n = this, r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if ("string" != typeof t) { var o = t.attrName || t.blotName; "string" == typeof o ? this.register("formats/" + o, t, e) : Object.keys(t).forEach(function (r) { n.register(r, t[r], e) }) } else null == this.imports[t] || r || P.warn("Overwriting " + t + " with", e), this.imports[t] = e, (t.startsWith("blots/") || t.startsWith("formats/")) && "abstract" !== e.blotName ? w.default.register(e) : t.startsWith("modules") && "function" == typeof e.register && e.register() } }]), h(t, [{ key: "addContainer", value: function (t) { var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; if ("string" == typeof t) { var n = t; t = document.createElement("div"), t.classList.add(n) } return this.container.insertBefore(t, e), t } }, { key: "blur", value: function () { this.selection.setRange(null) } }, { key: "deleteText", value: function (t, e, n) { var r = this, o = s(t, e, n), i = f(o, 4); return t = i[0], e = i[1], n = i[3], a.call(this, function () { return r.editor.deleteText(t, e) }, n, t, -1 * e) } }, { key: "disable", value: function () { this.enable(!1) } }, { key: "enable", value: function () { var t = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0]; this.scroll.enable(t), this.container.classList.toggle("ql-disabled", !t) } }, { key: "focus", value: function () { var t = this.scrollingContainer.scrollTop; this.selection.focus(), this.scrollingContainer.scrollTop = t, this.scrollIntoView() } }, { key: "format", value: function (t, e) { var n = this, r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : g.default.sources.API; return a.call(this, function () { var r = n.getSelection(!0), i = new d.default; if (null == r) return i; if (w.default.query(t, w.default.Scope.BLOCK)) i = n.editor.formatLine(r.index, r.length, o({}, t, e)); else { if (0 === r.length) return n.selection.format(t, e), i; i = n.editor.formatText(r.index, r.length, o({}, t, e)) } return n.setSelection(r, g.default.sources.SILENT), i }, r) } }, { key: "formatLine", value: function (t, e, n, r, o) { var i = this, l = void 0, u = s(t, e, n, r, o), c = f(u, 4); return t = c[0], e = c[1], l = c[2], o = c[3], a.call(this, function () { return i.editor.formatLine(t, e, l) }, o, t, 0) } }, { key: "formatText", value: function (t, e, n, r, o) { var i = this, l = void 0, u = s(t, e, n, r, o), c = f(u, 4); return t = c[0], e = c[1], l = c[2], o = c[3], a.call(this, function () { return i.editor.formatText(t, e, l) }, o, t, 0) } }, { key: "getBounds", value: function (t) { var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, n = void 0; n = "number" == typeof t ? this.selection.getBounds(t, e) : this.selection.getBounds(t.index, t.length); var r = this.container.getBoundingClientRect(); return { bottom: n.bottom - r.top, height: n.height, left: n.left - r.left, right: n.right - r.left, top: n.top - r.top, width: n.width } } }, { key: "getContents", value: function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : this.getLength() - t, n = s(t, e), r = f(n, 2); return t = r[0], e = r[1], this.editor.getContents(t, e) } }, { key: "getFormat", value: function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.getSelection(!0), e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; return "number" == typeof t ? this.editor.getFormat(t, e) : this.editor.getFormat(t.index, t.length) } }, { key: "getIndex", value: function (t) { return t.offset(this.scroll) } }, { key: "getLength", value: function () { return this.scroll.length() } }, { key: "getLeaf", value: function (t) { return this.scroll.leaf(t) } }, { key: "getLine", value: function (t) { return this.scroll.line(t) } }, { key: "getLines", value: function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : Number.MAX_VALUE; return "number" != typeof t ? this.scroll.lines(t.index, t.length) : this.scroll.lines(t, e) } }, { key: "getModule", value: function (t) { return this.theme.modules[t] } }, { key: "getSelection", value: function () { return arguments.length > 0 && void 0 !== arguments[0] && arguments[0] && this.focus(), this.update(), this.selection.getRange()[0] } }, { key: "getText", value: function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : this.getLength() - t, n = s(t, e), r = f(n, 2); return t = r[0], e = r[1], this.editor.getText(t, e) } }, { key: "hasFocus", value: function () { return this.selection.hasFocus() } }, { key: "insertEmbed", value: function (e, n, r) { var o = this, i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : t.sources.API; return a.call(this, function () { return o.editor.insertEmbed(e, n, r) }, i, e) } }, { key: "insertText", value: function (t, e, n, r, o) { var i = this, l = void 0, u = s(t, 0, n, r, o), c = f(u, 4); return t = c[0], l = c[2], o = c[3], a.call(this, function () { return i.editor.insertText(t, e, l) }, o, t, e.length) } }, { key: "isEnabled", value: function () { return !this.container.classList.contains("ql-disabled") } }, { key: "off", value: function () { return this.emitter.off.apply(this.emitter, arguments) } }, { key: "on", value: function () { return this.emitter.on.apply(this.emitter, arguments) } }, { key: "once", value: function () { return this.emitter.once.apply(this.emitter, arguments) } }, { key: "pasteHTML", value: function (t, e, n) { this.clipboard.dangerouslyPasteHTML(t, e, n) } }, { key: "removeFormat", value: function (t, e, n) { var r = this, o = s(t, e, n), i = f(o, 4); return t = i[0], e = i[1], n = i[3], a.call(this, function () { return r.editor.removeFormat(t, e) }, n, t) } }, { key: "scrollIntoView", value: function () { this.selection.scrollIntoView(this.scrollingContainer) } }, { key: "setContents", value: function (t) { var e = this, n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : g.default.sources.API; return a.call(this, function () { t = new d.default(t); var n = e.getLength(), r = e.editor.deleteText(0, n), o = e.editor.applyDelta(t), i = o.ops[o.ops.length - 1]; return null != i && "string" == typeof i.insert && "\n" === i.insert[i.insert.length - 1] && (e.editor.deleteText(e.getLength() - 1, 1), o.delete(1)), r.compose(o) }, n) } }, { key: "setSelection", value: function (e, n, r) { if (null == e) this.selection.setRange(null, n || t.sources.API); else { var o = s(e, n, r), i = f(o, 4); e = i[0], n = i[1], r = i[3], this.selection.setRange(new x.Range(e, n), r), r !== g.default.sources.SILENT && this.selection.scrollIntoView(this.scrollingContainer) } } }, { key: "setText", value: function (t) { var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : g.default.sources.API, n = (new d.default).insert(t); return this.setContents(n, e) } }, { key: "update", value: function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : g.default.sources.USER, e = this.scroll.update(t); return this.selection.update(t), e } }, { key: "updateContents", value: function (t) { var e = this, n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : g.default.sources.API; return a.call(this, function () { return t = new d.default(t), e.editor.applyDelta(t, n) }, n, !0) } }]), t }(); S.DEFAULTS = { bounds: null, formats: null, modules: {}, placeholder: "", readOnly: !1, scrollingContainer: null, strict: !0, theme: "default" }, S.events = g.default.events, S.sources = g.default.sources, S.version = "1.3.7", S.imports = { delta: d.default, parchment: w.default, "core/module": _.default, "core/theme": T.default }, e.expandConfig = l, e.overload = s, e.default = S }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(e, "__esModule", { value: !0 }); var o = function t(e) { var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; r(this, t), this.quill = e, this.options = n }; o.DEFAULTS = {}, e.default = o }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = n(0), a = function (t) { return t && t.__esModule ? t : { default: t } }(l), s = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), e }(a.default.Text); e.default = s }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var a = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), s = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, u = n(58), c = r(u), f = n(10), h = r(f), p = (0, h.default)("quill:events");["selectionchange", "mousedown", "mouseup", "click"].forEach(function (t) { document.addEventListener(t, function () { for (var t = arguments.length, e = Array(t), n = 0; n < t; n++)e[n] = arguments[n];[].slice.call(document.querySelectorAll(".ql-container")).forEach(function (t) { if (t.__quill && t.__quill.emitter) { var n; (n = t.__quill.emitter).handleDOM.apply(n, e) } }) }) }); var d = function (t) { function e() { o(this, e); var t = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this)); return t.listeners = {}, t.on("error", p.error), t } return l(e, t), a(e, [{ key: "emit", value: function () { p.log.apply(p, arguments), s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "emit", this).apply(this, arguments) } }, { key: "handleDOM", value: function (t) { for (var e = arguments.length, n = Array(e > 1 ? e - 1 : 0), r = 1; r < e; r++)n[r - 1] = arguments[r]; (this.listeners[t.type] || []).forEach(function (e) { var r = e.node, o = e.handler; (t.target === r || r.contains(t.target)) && o.apply(void 0, [t].concat(n)) }) } }, { key: "listenDOM", value: function (t, e, n) { this.listeners[t] || (this.listeners[t] = []), this.listeners[t].push({ node: e, handler: n }) } }]), e }(c.default); d.events = { EDITOR_CHANGE: "editor-change", SCROLL_BEFORE_UPDATE: "scroll-before-update", SCROLL_OPTIMIZE: "scroll-optimize", SCROLL_UPDATE: "scroll-update", SELECTION_CHANGE: "selection-change", TEXT_CHANGE: "text-change" }, d.sources = { API: "api", SILENT: "silent", USER: "user" }, e.default = d }, function (t, e, n) { "use strict"; function r(t) { if (i.indexOf(t) <= i.indexOf(l)) { for (var e, n = arguments.length, r = Array(n > 1 ? n - 1 : 0), o = 1; o < n; o++)r[o - 1] = arguments[o]; (e = console)[t].apply(e, r) } } function o(t) { return i.reduce(function (e, n) { return e[n] = r.bind(console, n, t), e }, {}) } Object.defineProperty(e, "__esModule", { value: !0 }); var i = ["error", "warn", "log", "info"], l = "warn"; r.level = o.level = function (t) { l = t }, e.default = o }, function (t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var r = n(1), o = function () { function t(t, e, n) { void 0 === n && (n = {}), this.attrName = t, this.keyName = e; var o = r.Scope.TYPE & r.Scope.ATTRIBUTE; null != n.scope ? this.scope = n.scope & r.Scope.LEVEL | o : this.scope = r.Scope.ATTRIBUTE, null != n.whitelist && (this.whitelist = n.whitelist) } return t.keys = function (t) { return [].map.call(t.attributes, function (t) { return t.name }) }, t.prototype.add = function (t, e) { return !!this.canAdd(t, e) && (t.setAttribute(this.keyName, e), !0) }, t.prototype.canAdd = function (t, e) { return null != r.query(t, r.Scope.BLOT & (this.scope | r.Scope.TYPE)) && (null == this.whitelist || ("string" == typeof e ? this.whitelist.indexOf(e.replace(/["']/g, "")) > -1 : this.whitelist.indexOf(e) > -1)) }, t.prototype.remove = function (t) { t.removeAttribute(this.keyName) }, t.prototype.value = function (t) { var e = t.getAttribute(this.keyName); return this.canAdd(t, e) && e ? e : "" }, t }(); e.default = o }, function (t, e, n) { function r(t) { return null === t || void 0 === t } function o(t) { return !(!t || "object" != typeof t || "number" != typeof t.length) && ("function" == typeof t.copy && "function" == typeof t.slice && !(t.length > 0 && "number" != typeof t[0])) } function i(t, e, n) { var i, c; if (r(t) || r(e)) return !1; if (t.prototype !== e.prototype) return !1; if (s(t)) return !!s(e) && (t = l.call(t), e = l.call(e), u(t, e, n)); if (o(t)) { if (!o(e)) return !1; if (t.length !== e.length) return !1; for (i = 0; i < t.length; i++)if (t[i] !== e[i]) return !1; return !0 } try { var f = a(t), h = a(e) } catch (t) { return !1 } if (f.length != h.length) return !1; for (f.sort(), h.sort(), i = f.length - 1; i >= 0; i--)if (f[i] != h[i]) return !1; for (i = f.length - 1; i >= 0; i--)if (c = f[i], !u(t[c], e[c], n)) return !1; return typeof t == typeof e } var l = Array.prototype.slice, a = n(55), s = n(56), u = t.exports = function (t, e, n) { return n || (n = {}), t === e || (t instanceof Date && e instanceof Date ? t.getTime() === e.getTime() : !t || !e || "object" != typeof t && "object" != typeof e ? n.strict ? t === e : t == e : i(t, e, n)) } }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }), e.default = e.Code = void 0; var a = function () { function t(t, e) { var n = [], r = !0, o = !1, i = void 0; try { for (var l, a = t[Symbol.iterator](); !(r = (l = a.next()).done) && (n.push(l.value), !e || n.length !== e); r = !0); } catch (t) { o = !0, i = t } finally { try { !r && a.return && a.return() } finally { if (o) throw i } } return n } return function (e, n) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return t(e, n); throw new TypeError("Invalid attempt to destructure non-iterable instance") } }(), s = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), u = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, c = n(4), f = r(c), h = n(0), p = r(h), d = n(3), y = r(d), v = n(5), b = r(v), g = n(8), m = r(g), _ = function (t) { function e() { return o(this, e), i(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return l(e, t), e }(b.default); _.blotName = "code", _.tagName = "CODE"; var O = function (t) { function e() { return o(this, e), i(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return l(e, t), s(e, [{ key: "delta", value: function () { var t = this, e = this.domNode.textContent; return e.endsWith("\n") && (e = e.slice(0, -1)), e.split("\n").reduce(function (e, n) { return e.insert(n).insert("\n", t.formats()) }, new f.default) } }, { key: "format", value: function (t, n) { if (t !== this.statics.blotName || !n) { var r = this.descendant(m.default, this.length() - 1), o = a(r, 1), i = o[0]; null != i && i.deleteAt(i.length() - 1, 1), u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "format", this).call(this, t, n) } } }, { key: "formatAt", value: function (t, n, r, o) { if (0 !== n && null != p.default.query(r, p.default.Scope.BLOCK) && (r !== this.statics.blotName || o !== this.statics.formats(this.domNode))) { var i = this.newlineIndex(t); if (!(i < 0 || i >= t + n)) { var l = this.newlineIndex(t, !0) + 1, a = i - l + 1, s = this.isolate(l, a), u = s.next; s.format(r, o), u instanceof e && u.formatAt(0, t - l + n - a, r, o) } } } }, { key: "insertAt", value: function (t, e, n) { if (null == n) { var r = this.descendant(m.default, t), o = a(r, 2), i = o[0], l = o[1]; i.insertAt(l, e) } } }, { key: "length", value: function () { var t = this.domNode.textContent.length; return this.domNode.textContent.endsWith("\n") ? t : t + 1 } }, { key: "newlineIndex", value: function (t) { if (arguments.length > 1 && void 0 !== arguments[1] && arguments[1]) return this.domNode.textContent.slice(0, t).lastIndexOf("\n"); var e = this.domNode.textContent.slice(t).indexOf("\n"); return e > -1 ? t + e : -1 } }, { key: "optimize", value: function (t) { this.domNode.textContent.endsWith("\n") || this.appendChild(p.default.create("text", "\n")), u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "optimize", this).call(this, t); var n = this.next; null != n && n.prev === this && n.statics.blotName === this.statics.blotName && this.statics.formats(this.domNode) === n.statics.formats(n.domNode) && (n.optimize(t), n.moveChildren(this), n.remove()) } }, { key: "replace", value: function (t) { u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "replace", this).call(this, t), [].slice.call(this.domNode.querySelectorAll("*")).forEach(function (t) { var e = p.default.find(t); null == e ? t.parentNode.removeChild(t) : e instanceof p.default.Embed ? e.remove() : e.unwrap() }) } }], [{ key: "create", value: function (t) { var n = u(e.__proto__ || Object.getPrototypeOf(e), "create", this).call(this, t); return n.setAttribute("spellcheck", !1), n } }, { key: "formats", value: function () { return !0 } }]), e }(y.default); O.blotName = "code-block", O.tagName = "PRE", O.TAB = " ", e.Code = _, e.default = O }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = n(0), u = function (t) { return t && t.__esModule ? t : { default: t } }(s), c = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), l(e, [{ key: "insertInto", value: function (t, n) { 0 === t.children.length ? a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "insertInto", this).call(this, t, n) : this.remove() } }, { key: "length", value: function () { return 0 } }, { key: "value", value: function () { return "" } }], [{ key: "value", value: function () { } }]), e }(u.default.Embed); c.blotName = "break", c.tagName = "BR", e.default = c }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } function l(t, e) { var n = document.createElement("a"); n.href = t; var r = n.href.slice(0, n.href.indexOf(":")); return e.indexOf(r) > -1 } Object.defineProperty(e, "__esModule", { value: !0 }), e.sanitize = e.default = void 0; var a = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), s = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, u = n(5), c = function (t) { return t && t.__esModule ? t : { default: t } }(u), f = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), a(e, [{ key: "format", value: function (t, n) { if (t !== this.statics.blotName || !n) return s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "format", this).call(this, t, n); n = this.constructor.sanitize(n), this.domNode.setAttribute("href", n) } }], [{ key: "create", value: function (t) { var n = s(e.__proto__ || Object.getPrototypeOf(e), "create", this).call(this, t); return t = this.sanitize(t), n.setAttribute("href", t), n.setAttribute("rel", "noopener noreferrer"), n.setAttribute("target", "_blank"), n } }, { key: "formats", value: function (t) { return t.getAttribute("href") } }, { key: "sanitize", value: function (t) { return l(t, this.PROTOCOL_WHITELIST) ? t : this.SANITIZED_URL } }]), e }(c.default); f.blotName = "link", f.tagName = "A", f.SANITIZED_URL = "about:blank", f.PROTOCOL_WHITELIST = ["http", "https", "mailto", "tel"], e.default = f, e.sanitize = l }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { t.setAttribute(e, !("true" === t.getAttribute(e))) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { return typeof t } : function (t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t }, a = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), s = n(25), u = r(s), c = n(106), f = r(c), h = 0, p = function () { function t(e) { var n = this; o(this, t), this.select = e, this.container = document.createElement("span"), this.buildPicker(), this.select.style.display = "none", this.select.parentNode.insertBefore(this.container, this.select), this.label.addEventListener("mousedown", function () { n.togglePicker() }), this.label.addEventListener("keydown", function (t) { switch (t.keyCode) { case u.default.keys.ENTER: n.togglePicker(); break; case u.default.keys.ESCAPE: n.escape(), t.preventDefault() } }), this.select.addEventListener("change", this.update.bind(this)) } return a(t, [{ key: "togglePicker", value: function () { this.container.classList.toggle("ql-expanded"), i(this.label, "aria-expanded"), i(this.options, "aria-hidden") } }, { key: "buildItem", value: function (t) { var e = this, n = document.createElement("span"); return n.tabIndex = "0", n.setAttribute("role", "button"), n.classList.add("ql-picker-item"), t.hasAttribute("value") && n.setAttribute("data-value", t.getAttribute("value")), t.textContent && n.setAttribute("data-label", t.textContent), n.addEventListener("click", function () { e.selectItem(n, !0) }), n.addEventListener("keydown", function (t) { switch (t.keyCode) { case u.default.keys.ENTER: e.selectItem(n, !0), t.preventDefault(); break; case u.default.keys.ESCAPE: e.escape(), t.preventDefault() } }), n } }, { key: "buildLabel", value: function () { var t = document.createElement("span"); return t.classList.add("ql-picker-label"), t.innerHTML = f.default, t.tabIndex = "0", t.setAttribute("role", "button"), t.setAttribute("aria-expanded", "false"), this.container.appendChild(t), t } }, { key: "buildOptions", value: function () { var t = this, e = document.createElement("span"); e.classList.add("ql-picker-options"), e.setAttribute("aria-hidden", "true"), e.tabIndex = "-1", e.id = "ql-picker-options-" + h, h += 1, this.label.setAttribute("aria-controls", e.id), this.options = e, [].slice.call(this.select.options).forEach(function (n) { var r = t.buildItem(n); e.appendChild(r), !0 === n.selected && t.selectItem(r) }), this.container.appendChild(e) } }, { key: "buildPicker", value: function () { var t = this;[].slice.call(this.select.attributes).forEach(function (e) { t.container.setAttribute(e.name, e.value) }), this.container.classList.add("ql-picker"), this.label = this.buildLabel(), this.buildOptions() } }, { key: "escape", value: function () { var t = this; this.close(), setTimeout(function () { return t.label.focus() }, 1) } }, { key: "close", value: function () { this.container.classList.remove("ql-expanded"), this.label.setAttribute("aria-expanded", "false"), this.options.setAttribute("aria-hidden", "true") } }, { key: "selectItem", value: function (t) { var e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = this.container.querySelector(".ql-selected"); if (t !== n && (null != n && n.classList.remove("ql-selected"), null != t && (t.classList.add("ql-selected"), this.select.selectedIndex = [].indexOf.call(t.parentNode.children, t), t.hasAttribute("data-value") ? this.label.setAttribute("data-value", t.getAttribute("data-value")) : this.label.removeAttribute("data-value"), t.hasAttribute("data-label") ? this.label.setAttribute("data-label", t.getAttribute("data-label")) : this.label.removeAttribute("data-label"), e))) { if ("function" == typeof Event) this.select.dispatchEvent(new Event("change")); else if ("object" === ("undefined" == typeof Event ? "undefined" : l(Event))) { var r = document.createEvent("Event"); r.initEvent("change", !0, !0), this.select.dispatchEvent(r) } this.close() } } }, { key: "update", value: function () { var t = void 0; if (this.select.selectedIndex > -1) { var e = this.container.querySelector(".ql-picker-options").children[this.select.selectedIndex]; t = this.select.options[this.select.selectedIndex], this.selectItem(e) } else this.selectItem(null); var n = null != t && t !== this.select.querySelector("option[selected]"); this.label.classList.toggle("ql-active", n) } }]), t }(); e.default = p }, function (t, e, n) { "use strict"; function r(t) { var e = a.find(t); if (null == e) try { e = a.create(t) } catch (n) { e = a.create(a.Scope.INLINE), [].slice.call(t.childNodes).forEach(function (t) { e.domNode.appendChild(t) }), t.parentNode && t.parentNode.replaceChild(e.domNode, t), e.attach() } return e } var o = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(47), l = n(27), a = n(1), s = function (t) { function e(e) { var n = t.call(this, e) || this; return n.build(), n } return o(e, t), e.prototype.appendChild = function (t) { this.insertBefore(t) }, e.prototype.attach = function () { t.prototype.attach.call(this), this.children.forEach(function (t) { t.attach() }) }, e.prototype.build = function () { var t = this; this.children = new i.default, [].slice.call(this.domNode.childNodes).reverse().forEach(function (e) { try { var n = r(e); t.insertBefore(n, t.children.head || void 0) } catch (t) { if (t instanceof a.ParchmentError) return; throw t } }) }, e.prototype.deleteAt = function (t, e) { if (0 === t && e === this.length()) return this.remove(); this.children.forEachAt(t, e, function (t, e, n) { t.deleteAt(e, n) }) }, e.prototype.descendant = function (t, n) { var r = this.children.find(n), o = r[0], i = r[1]; return null == t.blotName && t(o) || null != t.blotName && o instanceof t ? [o, i] : o instanceof e ? o.descendant(t, i) : [null, -1] }, e.prototype.descendants = function (t, n, r) { void 0 === n && (n = 0), void 0 === r && (r = Number.MAX_VALUE); var o = [], i = r; return this.children.forEachAt(n, r, function (n, r, l) { (null == t.blotName && t(n) || null != t.blotName && n instanceof t) && o.push(n), n instanceof e && (o = o.concat(n.descendants(t, r, i))), i -= l }), o }, e.prototype.detach = function () { this.children.forEach(function (t) { t.detach() }), t.prototype.detach.call(this) }, e.prototype.formatAt = function (t, e, n, r) { this.children.forEachAt(t, e, function (t, e, o) { t.formatAt(e, o, n, r) }) }, e.prototype.insertAt = function (t, e, n) { var r = this.children.find(t), o = r[0], i = r[1]; if (o) o.insertAt(i, e, n); else { var l = null == n ? a.create("text", e) : a.create(e, n); this.appendChild(l) } }, e.prototype.insertBefore = function (t, e) { if (null != this.statics.allowedChildren && !this.statics.allowedChildren.some(function (e) { return t instanceof e })) throw new a.ParchmentError("Cannot insert " + t.statics.blotName + " into " + this.statics.blotName); t.insertInto(this, e) }, e.prototype.length = function () { return this.children.reduce(function (t, e) { return t + e.length() }, 0) }, e.prototype.moveChildren = function (t, e) { this.children.forEach(function (n) { t.insertBefore(n, e) }) }, e.prototype.optimize = function (e) { if (t.prototype.optimize.call(this, e), 0 === this.children.length) if (null != this.statics.defaultChild) { var n = a.create(this.statics.defaultChild); this.appendChild(n), n.optimize(e) } else this.remove() }, e.prototype.path = function (t, n) { void 0 === n && (n = !1); var r = this.children.find(t, n), o = r[0], i = r[1], l = [[this, t]]; return o instanceof e ? l.concat(o.path(i, n)) : (null != o && l.push([o, i]), l) }, e.prototype.removeChild = function (t) { this.children.remove(t) }, e.prototype.replace = function (n) { n instanceof e && n.moveChildren(this), t.prototype.replace.call(this, n) }, e.prototype.split = function (t, e) { if (void 0 === e && (e = !1), !e) { if (0 === t) return this; if (t === this.length()) return this.next } var n = this.clone(); return this.parent.insertBefore(n, this.next), this.children.forEachAt(t, this.length(), function (t, r, o) { t = t.split(r, e), n.appendChild(t) }), n }, e.prototype.unwrap = function () { this.moveChildren(this.parent, this.next), this.remove() }, e.prototype.update = function (t, e) { var n = this, o = [], i = []; t.forEach(function (t) { t.target === n.domNode && "childList" === t.type && (o.push.apply(o, t.addedNodes), i.push.apply(i, t.removedNodes)) }), i.forEach(function (t) { if (!(null != t.parentNode && "IFRAME" !== t.tagName && document.body.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_CONTAINED_BY)) { var e = a.find(t); null != e && (null != e.domNode.parentNode && e.domNode.parentNode !== n.domNode || e.detach()) } }), o.filter(function (t) { return t.parentNode == n.domNode }).sort(function (t, e) { return t === e ? 0 : t.compareDocumentPosition(e) & Node.DOCUMENT_POSITION_FOLLOWING ? 1 : -1 }).forEach(function (t) { var e = null; null != t.nextSibling && (e = a.find(t.nextSibling)); var o = r(t); o.next == e && null != o.next || (null != o.parent && o.parent.removeChild(n), n.insertBefore(o, e || void 0)) }) }, e }(l.default); e.default = s }, function (t, e, n) { "use strict"; var r = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var o = n(11), i = n(28), l = n(17), a = n(1), s = function (t) { function e(e) { var n = t.call(this, e) || this; return n.attributes = new i.default(n.domNode), n } return r(e, t), e.formats = function (t) { return "string" == typeof this.tagName || (Array.isArray(this.tagName) ? t.tagName.toLowerCase() : void 0) }, e.prototype.format = function (t, e) { var n = a.query(t); n instanceof o.default ? this.attributes.attribute(n, e) : e && (null == n || t === this.statics.blotName && this.formats()[t] === e || this.replaceWith(t, e)) }, e.prototype.formats = function () { var t = this.attributes.values(), e = this.statics.formats(this.domNode); return null != e && (t[this.statics.blotName] = e), t }, e.prototype.replaceWith = function (e, n) { var r = t.prototype.replaceWith.call(this, e, n); return this.attributes.copy(r), r }, e.prototype.update = function (e, n) { var r = this; t.prototype.update.call(this, e, n), e.some(function (t) { return t.target === r.domNode && "attributes" === t.type }) && this.attributes.build() }, e.prototype.wrap = function (n, r) { var o = t.prototype.wrap.call(this, n, r); return o instanceof e && o.statics.scope === this.statics.scope && this.attributes.move(o), o }, e }(l.default); e.default = s }, function (t, e, n) { "use strict"; var r = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var o = n(27), i = n(1), l = function (t) { function e() { return null !== t && t.apply(this, arguments) || this } return r(e, t), e.value = function (t) { return !0 }, e.prototype.index = function (t, e) { return this.domNode === t || this.domNode.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_CONTAINED_BY ? Math.min(e, 1) : -1 }, e.prototype.position = function (t, e) { var n = [].indexOf.call(this.parent.domNode.childNodes, this.domNode); return t > 0 && (n += 1), [this.parent.domNode, n] }, e.prototype.value = function () { var t; return t = {}, t[this.statics.blotName] = this.statics.value(this.domNode) || !0, t }, e.scope = i.Scope.INLINE_BLOT, e }(o.default); e.default = l }, function (t, e, n) { function r(t) { this.ops = t, this.index = 0, this.offset = 0 } var o = n(12), i = n(2), l = { attributes: { compose: function (t, e, n) { "object" != typeof t && (t = {}), "object" != typeof e && (e = {}); var r = i(!0, {}, e); n || (r = Object.keys(r).reduce(function (t, e) { return null != r[e] && (t[e] = r[e]), t }, {})); for (var o in t) void 0 !== t[o] && void 0 === e[o] && (r[o] = t[o]); return Object.keys(r).length > 0 ? r : void 0 }, diff: function (t, e) { "object" != typeof t && (t = {}), "object" != typeof e && (e = {}); var n = Object.keys(t).concat(Object.keys(e)).reduce(function (n, r) { return o(t[r], e[r]) || (n[r] = void 0 === e[r] ? null : e[r]), n }, {}); return Object.keys(n).length > 0 ? n : void 0 }, transform: function (t, e, n) { if ("object" != typeof t) return e; if ("object" == typeof e) { if (!n) return e; var r = Object.keys(e).reduce(function (n, r) { return void 0 === t[r] && (n[r] = e[r]), n }, {}); return Object.keys(r).length > 0 ? r : void 0 } } }, iterator: function (t) { return new r(t) }, length: function (t) { return "number" == typeof t.delete ? t.delete : "number" == typeof t.retain ? t.retain : "string" == typeof t.insert ? t.insert.length : 1 } }; r.prototype.hasNext = function () { return this.peekLength() < 1 / 0 }, r.prototype.next = function (t) { t || (t = 1 / 0); var e = this.ops[this.index]; if (e) { var n = this.offset, r = l.length(e); if (t >= r - n ? (t = r - n, this.index += 1, this.offset = 0) : this.offset += t, "number" == typeof e.delete) return { delete: t }; var o = {}; return e.attributes && (o.attributes = e.attributes), "number" == typeof e.retain ? o.retain = t : "string" == typeof e.insert ? o.insert = e.insert.substr(n, t) : o.insert = e.insert, o } return { retain: 1 / 0 } }, r.prototype.peek = function () { return this.ops[this.index] }, r.prototype.peekLength = function () { return this.ops[this.index] ? l.length(this.ops[this.index]) - this.offset : 1 / 0 }, r.prototype.peekType = function () { return this.ops[this.index] ? "number" == typeof this.ops[this.index].delete ? "delete" : "number" == typeof this.ops[this.index].retain ? "retain" : "insert" : "retain" }, r.prototype.rest = function () { if (this.hasNext()) { if (0 === this.offset) return this.ops.slice(this.index); var t = this.offset, e = this.index, n = this.next(), r = this.ops.slice(this.index); return this.offset = t, this.index = e, [n].concat(r) } return [] }, t.exports = l }, function (t, e) { var n = function () { "use strict"; function t(t, e) { return null != e && t instanceof e } function e(n, r, o, i, c) { function f(n, o) { if (null === n) return null; if (0 === o) return n; var y, v; if ("object" != typeof n) return n; if (t(n, a)) y = new a; else if (t(n, s)) y = new s; else if (t(n, u)) y = new u(function (t, e) { n.then(function (e) { t(f(e, o - 1)) }, function (t) { e(f(t, o - 1)) }) }); else if (e.__isArray(n)) y = []; else if (e.__isRegExp(n)) y = new RegExp(n.source, l(n)), n.lastIndex && (y.lastIndex = n.lastIndex); else if (e.__isDate(n)) y = new Date(n.getTime()); else { if (d && Buffer.isBuffer(n)) return y = Buffer.allocUnsafe ? Buffer.allocUnsafe(n.length) : new Buffer(n.length), n.copy(y), y; t(n, Error) ? y = Object.create(n) : void 0 === i ? (v = Object.getPrototypeOf(n), y = Object.create(v)) : (y = Object.create(i), v = i) } if (r) { var b = h.indexOf(n); if (-1 != b) return p[b]; h.push(n), p.push(y) } t(n, a) && n.forEach(function (t, e) { var n = f(e, o - 1), r = f(t, o - 1); y.set(n, r) }), t(n, s) && n.forEach(function (t) { var e = f(t, o - 1); y.add(e) }); for (var g in n) { var m; v && (m = Object.getOwnPropertyDescriptor(v, g)), m && null == m.set || (y[g] = f(n[g], o - 1)) } if (Object.getOwnPropertySymbols) for (var _ = Object.getOwnPropertySymbols(n), g = 0; g < _.length; g++) { var O = _[g], w = Object.getOwnPropertyDescriptor(n, O); (!w || w.enumerable || c) && (y[O] = f(n[O], o - 1), w.enumerable || Object.defineProperty(y, O, { enumerable: !1 })) } if (c) for (var x = Object.getOwnPropertyNames(n), g = 0; g < x.length; g++) { var k = x[g], w = Object.getOwnPropertyDescriptor(n, k); w && w.enumerable || (y[k] = f(n[k], o - 1), Object.defineProperty(y, k, { enumerable: !1 })) } return y } "object" == typeof r && (o = r.depth, i = r.prototype, c = r.includeNonEnumerable, r = r.circular); var h = [], p = [], d = "undefined" != typeof Buffer; return void 0 === r && (r = !0), void 0 === o && (o = 1 / 0), f(n, o) } function n(t) { return Object.prototype.toString.call(t) } function r(t) { return "object" == typeof t && "[object Date]" === n(t) } function o(t) { return "object" == typeof t && "[object Array]" === n(t) } function i(t) { return "object" == typeof t && "[object RegExp]" === n(t) } function l(t) { var e = ""; return t.global && (e += "g"), t.ignoreCase && (e += "i"), t.multiline && (e += "m"), e } var a; try { a = Map } catch (t) { a = function () { } } var s; try { s = Set } catch (t) { s = function () { } } var u; try { u = Promise } catch (t) { u = function () { } } return e.clonePrototype = function (t) { if (null === t) return null; var e = function () { }; return e.prototype = t, new e }, e.__objToStr = n, e.__isDate = r, e.__isArray = o, e.__isRegExp = i, e.__getRegExpFlags = l, e }(); "object" == typeof t && t.exports && (t.exports = n) }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t) { if (Array.isArray(t)) { for (var e = 0, n = Array(t.length); e < t.length; e++)n[e] = t[e]; return n } return Array.from(t) } function i(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function l(t, e) { try { e.parentNode } catch (t) { return !1 } return e instanceof Text && (e = e.parentNode), t.contains(e) } Object.defineProperty(e, "__esModule", { value: !0 }), e.default = e.Range = void 0; var a = function () { function t(t, e) { var n = [], r = !0, o = !1, i = void 0; try { for (var l, a = t[Symbol.iterator](); !(r = (l = a.next()).done) && (n.push(l.value), !e || n.length !== e); r = !0); } catch (t) { o = !0, i = t } finally { try { !r && a.return && a.return() } finally { if (o) throw i } } return n } return function (e, n) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return t(e, n); throw new TypeError("Invalid attempt to destructure non-iterable instance") } }(), s = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), u = n(0), c = r(u), f = n(21), h = r(f), p = n(12), d = r(p), y = n(9), v = r(y), b = n(10), g = r(b), m = (0, g.default)("quill:selection"), _ = function t(e) { var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; i(this, t), this.index = e, this.length = n }, O = function () { function t(e, n) { var r = this; i(this, t), this.emitter = n, this.scroll = e, this.composing = !1, this.mouseDown = !1, this.root = this.scroll.domNode, this.cursor = c.default.create("cursor", this), this.lastRange = this.savedRange = new _(0, 0), this.handleComposition(), this.handleDragging(), this.emitter.listenDOM("selectionchange", document, function () { r.mouseDown || setTimeout(r.update.bind(r, v.default.sources.USER), 1) }), this.emitter.on(v.default.events.EDITOR_CHANGE, function (t, e) { t === v.default.events.TEXT_CHANGE && e.length() > 0 && r.update(v.default.sources.SILENT) }), this.emitter.on(v.default.events.SCROLL_BEFORE_UPDATE, function () { if (r.hasFocus()) { var t = r.getNativeRange(); null != t && t.start.node !== r.cursor.textNode && r.emitter.once(v.default.events.SCROLL_UPDATE, function () { try { r.setNativeRange(t.start.node, t.start.offset, t.end.node, t.end.offset) } catch (t) { } }) } }), this.emitter.on(v.default.events.SCROLL_OPTIMIZE, function (t, e) { if (e.range) { var n = e.range, o = n.startNode, i = n.startOffset, l = n.endNode, a = n.endOffset; r.setNativeRange(o, i, l, a) } }), this.update(v.default.sources.SILENT) } return s(t, [{ key: "handleComposition", value: function () { var t = this; this.root.addEventListener("compositionstart", function () { t.composing = !0 }), this.root.addEventListener("compositionend", function () { if (t.composing = !1, t.cursor.parent) { var e = t.cursor.restore(); if (!e) return; setTimeout(function () { t.setNativeRange(e.startNode, e.startOffset, e.endNode, e.endOffset) }, 1) } }) } }, { key: "handleDragging", value: function () { var t = this; this.emitter.listenDOM("mousedown", document.body, function () { t.mouseDown = !0 }), this.emitter.listenDOM("mouseup", document.body, function () { t.mouseDown = !1, t.update(v.default.sources.USER) }) } }, { key: "focus", value: function () { this.hasFocus() || (this.root.focus(), this.setRange(this.savedRange)) } }, { key: "format", value: function (t, e) { if (null == this.scroll.whitelist || this.scroll.whitelist[t]) { this.scroll.update(); var n = this.getNativeRange(); if (null != n && n.native.collapsed && !c.default.query(t, c.default.Scope.BLOCK)) { if (n.start.node !== this.cursor.textNode) { var r = c.default.find(n.start.node, !1); if (null == r) return; if (r instanceof c.default.Leaf) { var o = r.split(n.start.offset); r.parent.insertBefore(this.cursor, o) } else r.insertBefore(this.cursor, n.start.node); this.cursor.attach() } this.cursor.format(t, e), this.scroll.optimize(), this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length), this.update() } } } }, { key: "getBounds", value: function (t) { var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, n = this.scroll.length(); t = Math.min(t, n - 1), e = Math.min(t + e, n - 1) - t; var r = void 0, o = this.scroll.leaf(t), i = a(o, 2), l = i[0], s = i[1]; if (null == l) return null; var u = l.position(s, !0), c = a(u, 2); r = c[0], s = c[1]; var f = document.createRange(); if (e > 0) { f.setStart(r, s); var h = this.scroll.leaf(t + e), p = a(h, 2); if (l = p[0], s = p[1], null == l) return null; var d = l.position(s, !0), y = a(d, 2); return r = y[0], s = y[1], f.setEnd(r, s), f.getBoundingClientRect() } var v = "left", b = void 0; return r instanceof Text ? (s < r.data.length ? (f.setStart(r, s), f.setEnd(r, s + 1)) : (f.setStart(r, s - 1), f.setEnd(r, s), v = "right"), b = f.getBoundingClientRect()) : (b = l.domNode.getBoundingClientRect(), s > 0 && (v = "right")), { bottom: b.top + b.height, height: b.height, left: b[v], right: b[v], top: b.top, width: 0 } } }, { key: "getNativeRange", value: function () { var t = document.getSelection(); if (null == t || t.rangeCount <= 0) return null; var e = t.getRangeAt(0); if (null == e) return null; var n = this.normalizeNative(e); return m.info("getNativeRange", n), n } }, { key: "getRange", value: function () { var t = this.getNativeRange(); return null == t ? [null, null] : [this.normalizedToRange(t), t] } }, { key: "hasFocus", value: function () { return document.activeElement === this.root } }, { key: "normalizedToRange", value: function (t) { var e = this, n = [[t.start.node, t.start.offset]]; t.native.collapsed || n.push([t.end.node, t.end.offset]); var r = n.map(function (t) { var n = a(t, 2), r = n[0], o = n[1], i = c.default.find(r, !0), l = i.offset(e.scroll); return 0 === o ? l : i instanceof c.default.Container ? l + i.length() : l + i.index(r, o) }), i = Math.min(Math.max.apply(Math, o(r)), this.scroll.length() - 1), l = Math.min.apply(Math, [i].concat(o(r))); return new _(l, i - l) } }, { key: "normalizeNative", value: function (t) { if (!l(this.root, t.startContainer) || !t.collapsed && !l(this.root, t.endContainer)) return null; var e = { start: { node: t.startContainer, offset: t.startOffset }, end: { node: t.endContainer, offset: t.endOffset }, native: t }; return [e.start, e.end].forEach(function (t) { for (var e = t.node, n = t.offset; !(e instanceof Text) && e.childNodes.length > 0;)if (e.childNodes.length > n) e = e.childNodes[n], n = 0; else { if (e.childNodes.length !== n) break; e = e.lastChild, n = e instanceof Text ? e.data.length : e.childNodes.length + 1 } t.node = e, t.offset = n }), e } }, { key: "rangeToNative", value: function (t) { var e = this, n = t.collapsed ? [t.index] : [t.index, t.index + t.length], r = [], o = this.scroll.length(); return n.forEach(function (t, n) { t = Math.min(o - 1, t); var i = void 0, l = e.scroll.leaf(t), s = a(l, 2), u = s[0], c = s[1], f = u.position(c, 0 !== n), h = a(f, 2); i = h[0], c = h[1], r.push(i, c) }), r.length < 2 && (r = r.concat(r)), r } }, { key: "scrollIntoView", value: function (t) { var e = this.lastRange; if (null != e) { var n = this.getBounds(e.index, e.length); if (null != n) { var r = this.scroll.length() - 1, o = this.scroll.line(Math.min(e.index, r)), i = a(o, 1), l = i[0], s = l; if (e.length > 0) { var u = this.scroll.line(Math.min(e.index + e.length, r)); s = a(u, 1)[0] } if (null != l && null != s) { var c = t.getBoundingClientRect(); n.top < c.top ? t.scrollTop -= c.top - n.top : n.bottom > c.bottom && (t.scrollTop += n.bottom - c.bottom) } } } } }, { key: "setNativeRange", value: function (t, e) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : t, r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : e, o = arguments.length > 4 && void 0 !== arguments[4] && arguments[4]; if (m.info("setNativeRange", t, e, n, r), null == t || null != this.root.parentNode && null != t.parentNode && null != n.parentNode) { var i = document.getSelection(); if (null != i) if (null != t) { this.hasFocus() || this.root.focus(); var l = (this.getNativeRange() || {}).native; if (null == l || o || t !== l.startContainer || e !== l.startOffset || n !== l.endContainer || r !== l.endOffset) { "BR" == t.tagName && (e = [].indexOf.call(t.parentNode.childNodes, t), t = t.parentNode), "BR" == n.tagName && (r = [].indexOf.call(n.parentNode.childNodes, n), n = n.parentNode); var a = document.createRange(); a.setStart(t, e), a.setEnd(n, r), i.removeAllRanges(), i.addRange(a) } } else i.removeAllRanges(), this.root.blur(), document.body.focus() } } }, { key: "setRange", value: function (t) { var e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : v.default.sources.API; if ("string" == typeof e && (n = e, e = !1), m.info("setRange", t), null != t) { var r = this.rangeToNative(t); this.setNativeRange.apply(this, o(r).concat([e])) } else this.setNativeRange(null); this.update(n) } }, { key: "update", value: function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v.default.sources.USER, e = this.lastRange, n = this.getRange(), r = a(n, 2), o = r[0], i = r[1]; if (this.lastRange = o, null != this.lastRange && (this.savedRange = this.lastRange), !(0, d.default)(e, this.lastRange)) { var l; !this.composing && null != i && i.native.collapsed && i.start.node !== this.cursor.textNode && this.cursor.restore(); var s = [v.default.events.SELECTION_CHANGE, (0, h.default)(this.lastRange), (0, h.default)(e), t]; if ((l = this.emitter).emit.apply(l, [v.default.events.EDITOR_CHANGE].concat(s)), t !== v.default.sources.SILENT) { var u; (u = this.emitter).emit.apply(u, s) } } } }]), t }(); e.Range = _, e.default = O }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var a = n(0), s = r(a), u = n(3), c = r(u), f = function (t) { function e() { return o(this, e), i(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return l(e, t), e }(s.default.Container); f.allowedChildren = [c.default, u.BlockEmbed, f], e.default = f }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }), e.ColorStyle = e.ColorClass = e.ColorAttributor = void 0; var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = n(0), u = function (t) { return t && t.__esModule ? t : { default: t } }(s), c = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), l(e, [{ key: "value", value: function (t) { var n = a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "value", this).call(this, t); return n.startsWith("rgb(") ? (n = n.replace(/^[^\d]+/, "").replace(/[^\d]+$/, ""), "#" + n.split(",").map(function (t) { return ("00" + parseInt(t).toString(16)).slice(-2) }).join("")) : n } }]), e }(u.default.Attributor.Style), f = new u.default.Attributor.Class("color", "ql-color", { scope: u.default.Scope.INLINE }), h = new c("color", "color", { scope: u.default.Scope.INLINE }); e.ColorAttributor = c, e.ColorClass = f, e.ColorStyle = h }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e, n) { return e in t ? Object.defineProperty(t, e, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : t[e] = n, t } function i(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function l(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function a(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } function s(t, e) { var n, r = t === D.keys.LEFT ? "prefix" : "suffix"; return n = { key: t, shiftKey: e, altKey: null }, o(n, r, /^$/), o(n, "handler", function (n) { var r = n.index; t === D.keys.RIGHT && (r += n.length + 1); var o = this.quill.getLeaf(r); return !(b(o, 1)[0] instanceof T.default.Embed) || (t === D.keys.LEFT ? e ? this.quill.setSelection(n.index - 1, n.length + 1, S.default.sources.USER) : this.quill.setSelection(n.index - 1, S.default.sources.USER) : e ? this.quill.setSelection(n.index, n.length + 1, S.default.sources.USER) : this.quill.setSelection(n.index + n.length + 1, S.default.sources.USER), !1) }), n } function u(t, e) { if (!(0 === t.index || this.quill.getLength() <= 1)) { var n = this.quill.getLine(t.index), r = b(n, 1), o = r[0], i = {}; if (0 === e.offset) { var l = this.quill.getLine(t.index - 1), a = b(l, 1), s = a[0]; if (null != s && s.length() > 1) { var u = o.formats(), c = this.quill.getFormat(t.index - 1, 1); i = A.default.attributes.diff(u, c) || {} } } var f = /[\uD800-\uDBFF][\uDC00-\uDFFF]$/.test(e.prefix) ? 2 : 1; this.quill.deleteText(t.index - f, f, S.default.sources.USER), Object.keys(i).length > 0 && this.quill.formatLine(t.index - f, f, i, S.default.sources.USER), this.quill.focus() } } function c(t, e) { var n = /^[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(e.suffix) ? 2 : 1; if (!(t.index >= this.quill.getLength() - n)) { var r = {}, o = 0, i = this.quill.getLine(t.index), l = b(i, 1), a = l[0]; if (e.offset >= a.length() - 1) { var s = this.quill.getLine(t.index + 1), u = b(s, 1), c = u[0]; if (c) { var f = a.formats(), h = this.quill.getFormat(t.index, 1); r = A.default.attributes.diff(f, h) || {}, o = c.length() } } this.quill.deleteText(t.index, n, S.default.sources.USER), Object.keys(r).length > 0 && this.quill.formatLine(t.index + o - 1, n, r, S.default.sources.USER) } } function f(t) { var e = this.quill.getLines(t), n = {}; if (e.length > 1) { var r = e[0].formats(), o = e[e.length - 1].formats(); n = A.default.attributes.diff(o, r) || {} } this.quill.deleteText(t, S.default.sources.USER), Object.keys(n).length > 0 && this.quill.formatLine(t.index, 1, n, S.default.sources.USER), this.quill.setSelection(t.index, S.default.sources.SILENT), this.quill.focus() } function h(t, e) { var n = this; t.length > 0 && this.quill.scroll.deleteAt(t.index, t.length); var r = Object.keys(e.format).reduce(function (t, n) { return T.default.query(n, T.default.Scope.BLOCK) && !Array.isArray(e.format[n]) && (t[n] = e.format[n]), t }, {}); this.quill.insertText(t.index, "\n", r, S.default.sources.USER), this.quill.setSelection(t.index + 1, S.default.sources.SILENT), this.quill.focus(), Object.keys(e.format).forEach(function (t) { null == r[t] && (Array.isArray(e.format[t]) || "link" !== t && n.quill.format(t, e.format[t], S.default.sources.USER)) }) } function p(t) { return { key: D.keys.TAB, shiftKey: !t, format: { "code-block": !0 }, handler: function (e) { var n = T.default.query("code-block"), r = e.index, o = e.length, i = this.quill.scroll.descendant(n, r), l = b(i, 2), a = l[0], s = l[1]; if (null != a) { var u = this.quill.getIndex(a), c = a.newlineIndex(s, !0) + 1, f = a.newlineIndex(u + s + o), h = a.domNode.textContent.slice(c, f).split("\n"); s = 0, h.forEach(function (e, i) { t ? (a.insertAt(c + s, n.TAB), s += n.TAB.length, 0 === i ? r += n.TAB.length : o += n.TAB.length) : e.startsWith(n.TAB) && (a.deleteAt(c + s, n.TAB.length), s -= n.TAB.length, 0 === i ? r -= n.TAB.length : o -= n.TAB.length), s += e.length + 1 }), this.quill.update(S.default.sources.USER), this.quill.setSelection(r, o, S.default.sources.SILENT) } } } } function d(t) { return { key: t[0].toUpperCase(), shortKey: !0, handler: function (e, n) { this.quill.format(t, !n.format[t], S.default.sources.USER) } } } function y(t) { if ("string" == typeof t || "number" == typeof t) return y({ key: t }); if ("object" === (void 0 === t ? "undefined" : v(t)) && (t = (0, _.default)(t, !1)), "string" == typeof t.key) if (null != D.keys[t.key.toUpperCase()]) t.key = D.keys[t.key.toUpperCase()]; else { if (1 !== t.key.length) return null; t.key = t.key.toUpperCase().charCodeAt(0) } return t.shortKey && (t[B] = t.shortKey, delete t.shortKey), t } Object.defineProperty(e, "__esModule", { value: !0 }), e.SHORTKEY = e.default = void 0; var v = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { return typeof t } : function (t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t }, b = function () { function t(t, e) { var n = [], r = !0, o = !1, i = void 0; try { for (var l, a = t[Symbol.iterator](); !(r = (l = a.next()).done) && (n.push(l.value), !e || n.length !== e); r = !0); } catch (t) { o = !0, i = t } finally { try { !r && a.return && a.return() } finally { if (o) throw i } } return n } return function (e, n) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return t(e, n); throw new TypeError("Invalid attempt to destructure non-iterable instance") } }(), g = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), m = n(21), _ = r(m), O = n(12), w = r(O), x = n(2), k = r(x), E = n(4), N = r(E), j = n(20), A = r(j), q = n(0), T = r(q), P = n(6), S = r(P), C = n(10), L = r(C), M = n(7), R = r(M), I = (0, L.default)("quill:keyboard"), B = /Mac/i.test(navigator.platform) ? "metaKey" : "ctrlKey", D = function (t) { function e(t, n) { i(this, e); var r = l(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)); return r.bindings = {}, Object.keys(r.options.bindings).forEach(function (e) { ("list autofill" !== e || null == t.scroll.whitelist || t.scroll.whitelist.list) && r.options.bindings[e] && r.addBinding(r.options.bindings[e]) }), r.addBinding({ key: e.keys.ENTER, shiftKey: null }, h), r.addBinding({ key: e.keys.ENTER, metaKey: null, ctrlKey: null, altKey: null }, function () { }), /Firefox/i.test(navigator.userAgent) ? (r.addBinding({ key: e.keys.BACKSPACE }, { collapsed: !0 }, u), r.addBinding({ key: e.keys.DELETE }, { collapsed: !0 }, c)) : (r.addBinding({ key: e.keys.BACKSPACE }, { collapsed: !0, prefix: /^.?$/ }, u), r.addBinding({ key: e.keys.DELETE }, { collapsed: !0, suffix: /^.?$/ }, c)), r.addBinding({ key: e.keys.BACKSPACE }, { collapsed: !1 }, f), r.addBinding({ key: e.keys.DELETE }, { collapsed: !1 }, f), r.addBinding({ key: e.keys.BACKSPACE, altKey: null, ctrlKey: null, metaKey: null, shiftKey: null }, { collapsed: !0, offset: 0 }, u), r.listen(), r } return a(e, t), g(e, null, [{ key: "match", value: function (t, e) { return e = y(e), !["altKey", "ctrlKey", "metaKey", "shiftKey"].some(function (n) { return !!e[n] !== t[n] && null !== e[n] }) && e.key === (t.which || t.keyCode) } }]), g(e, [{ key: "addBinding", value: function (t) { var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = y(t); if (null == r || null == r.key) return I.warn("Attempted to add invalid keyboard binding", r); "function" == typeof e && (e = { handler: e }), "function" == typeof n && (n = { handler: n }), r = (0, k.default)(r, e, n), this.bindings[r.key] = this.bindings[r.key] || [], this.bindings[r.key].push(r) } }, { key: "listen", value: function () { var t = this; this.quill.root.addEventListener("keydown", function (n) { if (!n.defaultPrevented) { var r = n.which || n.keyCode, o = (t.bindings[r] || []).filter(function (t) { return e.match(n, t) }); if (0 !== o.length) { var i = t.quill.getSelection(); if (null != i && t.quill.hasFocus()) { var l = t.quill.getLine(i.index), a = b(l, 2), s = a[0], u = a[1], c = t.quill.getLeaf(i.index), f = b(c, 2), h = f[0], p = f[1], d = 0 === i.length ? [h, p] : t.quill.getLeaf(i.index + i.length), y = b(d, 2), g = y[0], m = y[1], _ = h instanceof T.default.Text ? h.value().slice(0, p) : "", O = g instanceof T.default.Text ? g.value().slice(m) : "", x = { collapsed: 0 === i.length, empty: 0 === i.length && s.length() <= 1, format: t.quill.getFormat(i), offset: u, prefix: _, suffix: O }; o.some(function (e) { if (null != e.collapsed && e.collapsed !== x.collapsed) return !1; if (null != e.empty && e.empty !== x.empty) return !1; if (null != e.offset && e.offset !== x.offset) return !1; if (Array.isArray(e.format)) { if (e.format.every(function (t) { return null == x.format[t] })) return !1 } else if ("object" === v(e.format) && !Object.keys(e.format).every(function (t) { return !0 === e.format[t] ? null != x.format[t] : !1 === e.format[t] ? null == x.format[t] : (0, w.default)(e.format[t], x.format[t]) })) return !1; return !(null != e.prefix && !e.prefix.test(x.prefix)) && (!(null != e.suffix && !e.suffix.test(x.suffix)) && !0 !== e.handler.call(t, i, x)) }) && n.preventDefault() } } } }) } }]), e }(R.default); D.keys = { BACKSPACE: 8, TAB: 9, ENTER: 13, ESCAPE: 27, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46 }, D.DEFAULTS = { bindings: { bold: d("bold"), italic: d("italic"), underline: d("underline"), indent: { key: D.keys.TAB, format: ["blockquote", "indent", "list"], handler: function (t, e) { if (e.collapsed && 0 !== e.offset) return !0; this.quill.format("indent", "+1", S.default.sources.USER) } }, outdent: { key: D.keys.TAB, shiftKey: !0, format: ["blockquote", "indent", "list"], handler: function (t, e) { if (e.collapsed && 0 !== e.offset) return !0; this.quill.format("indent", "-1", S.default.sources.USER) } }, "outdent backspace": { key: D.keys.BACKSPACE, collapsed: !0, shiftKey: null, metaKey: null, ctrlKey: null, altKey: null, format: ["indent", "list"], offset: 0, handler: function (t, e) { null != e.format.indent ? this.quill.format("indent", "-1", S.default.sources.USER) : null != e.format.list && this.quill.format("list", !1, S.default.sources.USER) } }, "indent code-block": p(!0), "outdent code-block": p(!1), "remove tab": { key: D.keys.TAB, shiftKey: !0, collapsed: !0, prefix: /\t$/, handler: function (t) { this.quill.deleteText(t.index - 1, 1, S.default.sources.USER) } }, tab: { key: D.keys.TAB, handler: function (t) { this.quill.history.cutoff(); var e = (new N.default).retain(t.index).delete(t.length).insert("\t"); this.quill.updateContents(e, S.default.sources.USER), this.quill.history.cutoff(), this.quill.setSelection(t.index + 1, S.default.sources.SILENT) } }, "list empty enter": { key: D.keys.ENTER, collapsed: !0, format: ["list"], empty: !0, handler: function (t, e) { this.quill.format("list", !1, S.default.sources.USER), e.format.indent && this.quill.format("indent", !1, S.default.sources.USER) } }, "checklist enter": { key: D.keys.ENTER, collapsed: !0, format: { list: "checked" }, handler: function (t) { var e = this.quill.getLine(t.index), n = b(e, 2), r = n[0], o = n[1], i = (0, k.default)({}, r.formats(), { list: "checked" }), l = (new N.default).retain(t.index).insert("\n", i).retain(r.length() - o - 1).retain(1, { list: "unchecked" }); this.quill.updateContents(l, S.default.sources.USER), this.quill.setSelection(t.index + 1, S.default.sources.SILENT), this.quill.scrollIntoView() } }, "header enter": { key: D.keys.ENTER, collapsed: !0, format: ["header"], suffix: /^$/, handler: function (t, e) { var n = this.quill.getLine(t.index), r = b(n, 2), o = r[0], i = r[1], l = (new N.default).retain(t.index).insert("\n", e.format).retain(o.length() - i - 1).retain(1, { header: null }); this.quill.updateContents(l, S.default.sources.USER), this.quill.setSelection(t.index + 1, S.default.sources.SILENT), this.quill.scrollIntoView() } }, "list autofill": { key: " ", collapsed: !0, format: { list: !1 }, prefix: /^\s*?(\d+\.|-|\*|\[ ?\]|\[x\])$/, handler: function (t, e) { var n = e.prefix.length, r = this.quill.getLine(t.index), o = b(r, 2), i = o[0], l = o[1]; if (l > n) return !0; var a = void 0; switch (e.prefix.trim()) { case "[]": case "[ ]": a = "unchecked"; break; case "[x]": a = "checked"; break; case "-": case "*": a = "bullet"; break; default: a = "ordered" }this.quill.insertText(t.index, " ", S.default.sources.USER), this.quill.history.cutoff(); var s = (new N.default).retain(t.index - l).delete(n + 1).retain(i.length() - 2 - l).retain(1, { list: a }); this.quill.updateContents(s, S.default.sources.USER), this.quill.history.cutoff(), this.quill.setSelection(t.index - n, S.default.sources.SILENT) } }, "code exit": { key: D.keys.ENTER, collapsed: !0, format: ["code-block"], prefix: /\n\n$/, suffix: /^\s+$/, handler: function (t) { var e = this.quill.getLine(t.index), n = b(e, 2), r = n[0], o = n[1], i = (new N.default).retain(t.index + r.length() - o - 2).retain(1, { "code-block": null }).delete(1); this.quill.updateContents(i, S.default.sources.USER) } }, "embed left": s(D.keys.LEFT, !1), "embed left shift": s(D.keys.LEFT, !0), "embed right": s(D.keys.RIGHT, !1), "embed right shift": s(D.keys.RIGHT, !0) } }, e.default = D, e.SHORTKEY = B }, function (t, e, n) { "use strict"; t.exports = { align: { "": n(75), center: n(76), right: n(77), justify: n(78) }, background: n(79), blockquote: n(80), bold: n(81), clean: n(82), code: n(40), "code-block": n(40), color: n(83), direction: { "": n(84), rtl: n(85) }, float: { center: n(86), full: n(87), left: n(88), right: n(89) }, formula: n(90), header: { 1: n(91), 2: n(92) }, italic: n(93), image: n(94), indent: { "+1": n(95), "-1": n(96) }, link: n(97), list: { ordered: n(98), bullet: n(99), check: n(100) }, script: { sub: n(101), super: n(102) }, strike: n(103), underline: n(104), video: n(105) } }, function (t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var r = n(1), o = function () { function t(t) { this.domNode = t, this.domNode[r.DATA_KEY] = { blot: this } } return Object.defineProperty(t.prototype, "statics", { get: function () { return this.constructor }, enumerable: !0, configurable: !0 }), t.create = function (t) { if (null == this.tagName) throw new r.ParchmentError("Blot definition missing tagName"); var e; return Array.isArray(this.tagName) ? ("string" == typeof t && (t = t.toUpperCase(), parseInt(t).toString() === t && (t = parseInt(t))), e = "number" == typeof t ? document.createElement(this.tagName[t - 1]) : this.tagName.indexOf(t) > -1 ? document.createElement(t) : document.createElement(this.tagName[0])) : e = document.createElement(this.tagName), this.className && e.classList.add(this.className), e }, t.prototype.attach = function () { null != this.parent && (this.scroll = this.parent.scroll) }, t.prototype.clone = function () { var t = this.domNode.cloneNode(!1); return r.create(t) }, t.prototype.detach = function () { null != this.parent && this.parent.removeChild(this), delete this.domNode[r.DATA_KEY] }, t.prototype.deleteAt = function (t, e) { this.isolate(t, e).remove() }, t.prototype.formatAt = function (t, e, n, o) { var i = this.isolate(t, e); if (null != r.query(n, r.Scope.BLOT) && o) i.wrap(n, o); else if (null != r.query(n, r.Scope.ATTRIBUTE)) { var l = r.create(this.statics.scope); i.wrap(l), l.format(n, o) } }, t.prototype.insertAt = function (t, e, n) { var o = null == n ? r.create("text", e) : r.create(e, n), i = this.split(t); this.parent.insertBefore(o, i) }, t.prototype.insertInto = function (t, e) { void 0 === e && (e = null), null != this.parent && this.parent.children.remove(this); var n = null; t.children.insertBefore(this, e), null != e && (n = e.domNode), this.domNode.parentNode == t.domNode && this.domNode.nextSibling == n || t.domNode.insertBefore(this.domNode, n), this.parent = t, this.attach() }, t.prototype.isolate = function (t, e) { var n = this.split(t); return n.split(e), n }, t.prototype.length = function () { return 1 }, t.prototype.offset = function (t) { return void 0 === t && (t = this.parent), null == this.parent || this == t ? 0 : this.parent.children.offset(this) + this.parent.offset(t) }, t.prototype.optimize = function (t) { null != this.domNode[r.DATA_KEY] && delete this.domNode[r.DATA_KEY].mutations }, t.prototype.remove = function () { null != this.domNode.parentNode && this.domNode.parentNode.removeChild(this.domNode), this.detach() }, t.prototype.replace = function (t) { null != t.parent && (t.parent.insertBefore(this, t.next), t.remove()) }, t.prototype.replaceWith = function (t, e) { var n = "string" == typeof t ? r.create(t, e) : t; return n.replace(this), n }, t.prototype.split = function (t, e) { return 0 === t ? this : this.next }, t.prototype.update = function (t, e) { }, t.prototype.wrap = function (t, e) { var n = "string" == typeof t ? r.create(t, e) : t; return null != this.parent && this.parent.insertBefore(n, this.next), n.appendChild(this), n }, t.blotName = "abstract", t }(); e.default = o }, function (t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var r = n(11), o = n(29), i = n(30), l = n(1), a = function () { function t(t) { this.attributes = {}, this.domNode = t, this.build() } return t.prototype.attribute = function (t, e) { e ? t.add(this.domNode, e) && (null != t.value(this.domNode) ? this.attributes[t.attrName] = t : delete this.attributes[t.attrName]) : (t.remove(this.domNode), delete this.attributes[t.attrName]) }, t.prototype.build = function () { var t = this; this.attributes = {}; var e = r.default.keys(this.domNode), n = o.default.keys(this.domNode), a = i.default.keys(this.domNode); e.concat(n).concat(a).forEach(function (e) { var n = l.query(e, l.Scope.ATTRIBUTE); n instanceof r.default && (t.attributes[n.attrName] = n) }) }, t.prototype.copy = function (t) { var e = this; Object.keys(this.attributes).forEach(function (n) { var r = e.attributes[n].value(e.domNode); t.format(n, r) }) }, t.prototype.move = function (t) { var e = this; this.copy(t), Object.keys(this.attributes).forEach(function (t) { e.attributes[t].remove(e.domNode) }), this.attributes = {} }, t.prototype.values = function () { var t = this; return Object.keys(this.attributes).reduce(function (e, n) { return e[n] = t.attributes[n].value(t.domNode), e }, {}) }, t }(); e.default = a }, function (t, e, n) { "use strict"; function r(t, e) { return (t.getAttribute("class") || "").split(/\s+/).filter(function (t) { return 0 === t.indexOf(e + "-") }) } var o = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(11), l = function (t) { function e() { return null !== t && t.apply(this, arguments) || this } return o(e, t), e.keys = function (t) { return (t.getAttribute("class") || "").split(/\s+/).map(function (t) { return t.split("-").slice(0, -1).join("-") }) }, e.prototype.add = function (t, e) { return !!this.canAdd(t, e) && (this.remove(t), t.classList.add(this.keyName + "-" + e), !0) }, e.prototype.remove = function (t) { r(t, this.keyName).forEach(function (e) { t.classList.remove(e) }), 0 === t.classList.length && t.removeAttribute("class") }, e.prototype.value = function (t) { var e = r(t, this.keyName)[0] || "", n = e.slice(this.keyName.length + 1); return this.canAdd(t, n) ? n : "" }, e }(i.default); e.default = l }, function (t, e, n) { "use strict"; function r(t) { var e = t.split("-"), n = e.slice(1).map(function (t) { return t[0].toUpperCase() + t.slice(1) }).join(""); return e[0] + n } var o = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(11), l = function (t) { function e() { return null !== t && t.apply(this, arguments) || this } return o(e, t), e.keys = function (t) { return (t.getAttribute("style") || "").split(";").map(function (t) { return t.split(":")[0].trim() }) }, e.prototype.add = function (t, e) { return !!this.canAdd(t, e) && (t.style[r(this.keyName)] = e, !0) }, e.prototype.remove = function (t) { t.style[r(this.keyName)] = "", t.getAttribute("style") || t.removeAttribute("style") }, e.prototype.value = function (t) { var e = t.style[r(this.keyName)]; return this.canAdd(t, e) ? e : "" }, e }(i.default); e.default = l }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var a = function () { function t(t, e) { var n = [], r = !0, o = !1, i = void 0; try { for (var l, a = t[Symbol.iterator](); !(r = (l = a.next()).done) && (n.push(l.value), !e || n.length !== e); r = !0); } catch (t) { o = !0, i = t } finally { try { !r && a.return && a.return() } finally { if (o) throw i } } return n } return function (e, n) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return t(e, n); throw new TypeError("Invalid attempt to destructure non-iterable instance") } }(), s = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, u = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), c = n(0), f = r(c), h = n(8), p = r(h), d = function (t) { function e(t, n) { o(this, e); var r = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t)); return r.selection = n, r.textNode = document.createTextNode(e.CONTENTS), r.domNode.appendChild(r.textNode), r._length = 0, r } return l(e, t), u(e, null, [{ key: "value", value: function () { } }]), u(e, [{ key: "detach", value: function () { null != this.parent && this.parent.removeChild(this) } }, { key: "format", value: function (t, n) { if (0 !== this._length) return s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "format", this).call(this, t, n); for (var r = this, o = 0; null != r && r.statics.scope !== f.default.Scope.BLOCK_BLOT;)o += r.offset(r.parent), r = r.parent; null != r && (this._length = e.CONTENTS.length, r.optimize(), r.formatAt(o, e.CONTENTS.length, t, n), this._length = 0) } }, { key: "index", value: function (t, n) { return t === this.textNode ? 0 : s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "index", this).call(this, t, n) } }, { key: "length", value: function () { return this._length } }, { key: "position", value: function () { return [this.textNode, this.textNode.data.length] } }, { key: "remove", value: function () { s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "remove", this).call(this), this.parent = null } }, { key: "restore", value: function () { if (!this.selection.composing && null != this.parent) { var t = this.textNode, n = this.selection.getNativeRange(), r = void 0, o = void 0, i = void 0; if (null != n && n.start.node === t && n.end.node === t) { var l = [t, n.start.offset, n.end.offset]; r = l[0], o = l[1], i = l[2] } for (; null != this.domNode.lastChild && this.domNode.lastChild !== this.textNode;)this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode); if (this.textNode.data !== e.CONTENTS) { var s = this.textNode.data.split(e.CONTENTS).join(""); this.next instanceof p.default ? (r = this.next.domNode, this.next.insertAt(0, s), this.textNode.data = e.CONTENTS) : (this.textNode.data = s, this.parent.insertBefore(f.default.create(this.textNode), this), this.textNode = document.createTextNode(e.CONTENTS), this.domNode.appendChild(this.textNode)) } if (this.remove(), null != o) { var u = [o, i].map(function (t) { return Math.max(0, Math.min(r.data.length, t - 1)) }), c = a(u, 2); return o = c[0], i = c[1], { startNode: r, startOffset: o, endNode: r, endOffset: i } } } } }, { key: "update", value: function (t, e) { var n = this; if (t.some(function (t) { return "characterData" === t.type && t.target === n.textNode })) { var r = this.restore(); r && (e.range = r) } } }, { key: "value", value: function () { return "" } }]), e }(f.default.Embed); d.blotName = "cursor", d.className = "ql-cursor", d.tagName = "span", d.CONTENTS = "\ufeff", e.default = d }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(e, "__esModule", { value: !0 }); var o = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), i = function () { function t(e, n) { r(this, t), this.quill = e, this.options = n, this.modules = {} } return o(t, [{ key: "init", value: function () { var t = this; Object.keys(this.options.modules).forEach(function (e) { null == t.modules[e] && t.addModule(e) }) } }, { key: "addModule", value: function (t) { var e = this.quill.constructor.import("modules/" + t); return this.modules[t] = new e(this.quill, this.options.modules[t] || {}), this.modules[t] } }]), t }(); i.DEFAULTS = { modules: {} }, i.themes = { default: i }, e.default = i }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var a = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), s = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, u = n(0), c = r(u), f = n(8), h = r(f), p = "\ufeff", d = function (t) { function e(t) { o(this, e); var n = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t)); return n.contentNode = document.createElement("span"), n.contentNode.setAttribute("contenteditable", !1), [].slice.call(n.domNode.childNodes).forEach(function (t) { n.contentNode.appendChild(t) }), n.leftGuard = document.createTextNode(p), n.rightGuard = document.createTextNode(p), n.domNode.appendChild(n.leftGuard), n.domNode.appendChild(n.contentNode), n.domNode.appendChild(n.rightGuard), n } return l(e, t), a(e, [{ key: "index", value: function (t, n) { return t === this.leftGuard ? 0 : t === this.rightGuard ? 1 : s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "index", this).call(this, t, n) } }, { key: "restore", value: function (t) { var e = void 0, n = void 0, r = t.data.split(p).join(""); if (t === this.leftGuard) if (this.prev instanceof h.default) { var o = this.prev.length(); this.prev.insertAt(o, r), e = { startNode: this.prev.domNode, startOffset: o + r.length } } else n = document.createTextNode(r), this.parent.insertBefore(c.default.create(n), this), e = { startNode: n, startOffset: r.length }; else t === this.rightGuard && (this.next instanceof h.default ? (this.next.insertAt(0, r), e = { startNode: this.next.domNode, startOffset: r.length }) : (n = document.createTextNode(r), this.parent.insertBefore(c.default.create(n), this.next), e = { startNode: n, startOffset: r.length })); return t.data = p, e } }, { key: "update", value: function (t, e) { var n = this; t.forEach(function (t) { if ("characterData" === t.type && (t.target === n.leftGuard || t.target === n.rightGuard)) { var r = n.restore(t.target); r && (e.range = r) } }) } }]), e }(c.default.Embed); e.default = d }, function (t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.AlignStyle = e.AlignClass = e.AlignAttribute = void 0; var r = n(0), o = function (t) { return t && t.__esModule ? t : { default: t } }(r), i = { scope: o.default.Scope.BLOCK, whitelist: ["right", "center", "justify"] }, l = new o.default.Attributor.Attribute("align", "align", i), a = new o.default.Attributor.Class("align", "ql-align", i), s = new o.default.Attributor.Style("align", "text-align", i); e.AlignAttribute = l, e.AlignClass = a, e.AlignStyle = s }, function (t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.BackgroundStyle = e.BackgroundClass = void 0; var r = n(0), o = function (t) { return t && t.__esModule ? t : { default: t } }(r), i = n(24), l = new o.default.Attributor.Class("background", "ql-bg", { scope: o.default.Scope.INLINE }), a = new i.ColorAttributor("background", "background-color", { scope: o.default.Scope.INLINE }); e.BackgroundClass = l, e.BackgroundStyle = a }, function (t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.DirectionStyle = e.DirectionClass = e.DirectionAttribute = void 0; var r = n(0), o = function (t) { return t && t.__esModule ? t : { default: t } }(r), i = { scope: o.default.Scope.BLOCK, whitelist: ["rtl"] }, l = new o.default.Attributor.Attribute("direction", "dir", i), a = new o.default.Attributor.Class("direction", "ql-direction", i), s = new o.default.Attributor.Style("direction", "direction", i); e.DirectionAttribute = l, e.DirectionClass = a, e.DirectionStyle = s }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }), e.FontClass = e.FontStyle = void 0; var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = n(0), u = function (t) { return t && t.__esModule ? t : { default: t } }(s), c = { scope: u.default.Scope.INLINE, whitelist: ["serif", "monospace"] }, f = new u.default.Attributor.Class("font", "ql-font", c), h = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), l(e, [{ key: "value", value: function (t) { return a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "value", this).call(this, t).replace(/["']/g, "") } }]), e }(u.default.Attributor.Style), p = new h("font", "font-family", c); e.FontStyle = p, e.FontClass = f }, function (t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.SizeStyle = e.SizeClass = void 0; var r = n(0), o = function (t) { return t && t.__esModule ? t : { default: t } }(r), i = new o.default.Attributor.Class("size", "ql-size", { scope: o.default.Scope.INLINE, whitelist: ["small", "large", "huge"] }), l = new o.default.Attributor.Style("size", "font-size", { scope: o.default.Scope.INLINE, whitelist: ["10px", "18px", "32px"] }); e.SizeClass = i, e.SizeStyle = l }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = n(5), u = function (t) { return t && t.__esModule ? t : { default: t } }(s), c = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), l(e, [{ key: "optimize", value: function (t) { a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "optimize", this).call(this, t), this.domNode.tagName !== this.statics.tagName[0] && this.replaceWith(this.statics.blotName) } }], [{ key: "create", value: function () { return a(e.__proto__ || Object.getPrototypeOf(e), "create", this).call(this) } }, { key: "formats", value: function () { return !0 } }]), e }(u.default); c.blotName = "bold", c.tagName = ["STRONG", "B"], e.default = c }, function (t, e) { t.exports = ' ' }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = n(16), u = function (t) { return t && t.__esModule ? t : { default: t } }(s), c = function (t) { function e(t, n) { r(this, e); var i = o(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t)); return i.label.innerHTML = n, i.container.classList.add("ql-color-picker"), [].slice.call(i.container.querySelectorAll(".ql-picker-item"), 0, 7).forEach(function (t) { t.classList.add("ql-primary") }), i } return i(e, t), l(e, [{ key: "buildItem", value: function (t) { var n = a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "buildItem", this).call(this, t); return n.style.backgroundColor = t.getAttribute("value") || "", n } }, { key: "selectItem", value: function (t, n) { a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "selectItem", this).call(this, t, n); var r = this.label.querySelector(".ql-color-label"), o = t ? t.getAttribute("data-value") || "" : ""; r && ("line" === r.tagName ? r.style.stroke = o : r.style.fill = o) } }]), e }(u.default); e.default = c }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = n(16), u = function (t) { return t && t.__esModule ? t : { default: t } }(s), c = function (t) { function e(t, n) { r(this, e); var i = o(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t)); return i.container.classList.add("ql-icon-picker"), [].forEach.call(i.container.querySelectorAll(".ql-picker-item"), function (t) { t.innerHTML = n[t.getAttribute("data-value") || ""] }), i.defaultItem = i.container.querySelector(".ql-selected"), i.selectItem(i.defaultItem), i } return i(e, t), l(e, [{ key: "selectItem", value: function (t, n) { a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "selectItem", this).call(this, t, n), t = t || this.defaultItem, this.label.innerHTML = t.innerHTML } }]), e }(u.default); e.default = c }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(e, "__esModule", { value: !0 }); var o = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), i = function () { function t(e, n) { var o = this; r(this, t), this.quill = e, this.boundsContainer = n || document.body, this.root = e.addContainer("ql-tooltip"), this.root.innerHTML = this.constructor.TEMPLATE, this.quill.root === this.quill.scrollingContainer && this.quill.root.addEventListener("scroll", function () { o.root.style.marginTop = -1 * o.quill.root.scrollTop + "px" }), this.hide() } return o(t, [{ key: "hide", value: function () { this.root.classList.add("ql-hidden") } }, { key: "position", value: function (t) { var e = t.left + t.width / 2 - this.root.offsetWidth / 2, n = t.bottom + this.quill.root.scrollTop; this.root.style.left = e + "px", this.root.style.top = n + "px", this.root.classList.remove("ql-flip"); var r = this.boundsContainer.getBoundingClientRect(), o = this.root.getBoundingClientRect(), i = 0; if (o.right > r.right && (i = r.right - o.right, this.root.style.left = e + i + "px"), o.left < r.left && (i = r.left - o.left, this.root.style.left = e + i + "px"), o.bottom > r.bottom) { var l = o.bottom - o.top, a = t.bottom - t.top + l; this.root.style.top = n - a + "px", this.root.classList.add("ql-flip") } return i } }, { key: "show", value: function () { this.root.classList.remove("ql-editing"), this.root.classList.remove("ql-hidden") } }]), t }(); e.default = i }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } function a(t) { var e = t.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtube\.com\/watch.*v=([a-zA-Z0-9_-]+)/) || t.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtu\.be\/([a-zA-Z0-9_-]+)/); return e ? (e[1] || "https") + "://www.youtube.com/embed/" + e[2] + "?showinfo=0" : (e = t.match(/^(?:(https?):\/\/)?(?:www\.)?vimeo\.com\/(\d+)/)) ? (e[1] || "https") + "://player.vimeo.com/video/" + e[2] + "/" : t } function s(t, e) { var n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; e.forEach(function (e) { var r = document.createElement("option"); e === n ? r.setAttribute("selected", "selected") : r.setAttribute("value", e), t.appendChild(r) }) } Object.defineProperty(e, "__esModule", { value: !0 }), e.default = e.BaseTooltip = void 0; var u = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), c = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, f = n(2), h = r(f), p = n(4), d = r(p), y = n(9), v = r(y), b = n(25), g = r(b), m = n(32), _ = r(m), O = n(41), w = r(O), x = n(42), k = r(x), E = n(16), N = r(E), j = n(43), A = r(j), q = [!1, "center", "right", "justify"], T = ["#000000", "#e60000", "#ff9900", "#ffff00", "#008a00", "#0066cc", "#9933ff", "#ffffff", "#facccc", "#ffebcc", "#ffffcc", "#cce8cc", "#cce0f5", "#ebd6ff", "#bbbbbb", "#f06666", "#ffc266", "#ffff66", "#66b966", "#66a3e0", "#c285ff", "#888888", "#a10000", "#b26b00", "#b2b200", "#006100", "#0047b2", "#6b24b2", "#444444", "#5c0000", "#663d00", "#666600", "#003700", "#002966", "#3d1466"], P = [!1, "serif", "monospace"], S = ["1", "2", "3", !1], C = ["small", !1, "large", "huge"], L = function (t) { function e(t, n) { o(this, e); var r = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)), l = function e(n) { if (!document.body.contains(t.root)) return document.body.removeEventListener("click", e); null == r.tooltip || r.tooltip.root.contains(n.target) || document.activeElement === r.tooltip.textbox || r.quill.hasFocus() || r.tooltip.hide(), null != r.pickers && r.pickers.forEach(function (t) { t.container.contains(n.target) || t.close() }) }; return t.emitter.listenDOM("click", document.body, l), r } return l(e, t), u(e, [{ key: "addModule", value: function (t) { var n = c(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "addModule", this).call(this, t); return "toolbar" === t && this.extendToolbar(n), n } }, { key: "buildButtons", value: function (t, e) { t.forEach(function (t) { (t.getAttribute("class") || "").split(/\s+/).forEach(function (n) { if (n.startsWith("ql-") && (n = n.slice("ql-".length), null != e[n])) if ("direction" === n) t.innerHTML = e[n][""] + e[n].rtl; else if ("string" == typeof e[n]) t.innerHTML = e[n]; else { var r = t.value || ""; null != r && e[n][r] && (t.innerHTML = e[n][r]) } }) }) } }, { key: "buildPickers", value: function (t, e) { var n = this; this.pickers = t.map(function (t) { if (t.classList.contains("ql-align")) return null == t.querySelector("option") && s(t, q), new k.default(t, e.align); if (t.classList.contains("ql-background") || t.classList.contains("ql-color")) { var n = t.classList.contains("ql-background") ? "background" : "color"; return null == t.querySelector("option") && s(t, T, "background" === n ? "#ffffff" : "#000000"), new w.default(t, e[n]) } return null == t.querySelector("option") && (t.classList.contains("ql-font") ? s(t, P) : t.classList.contains("ql-header") ? s(t, S) : t.classList.contains("ql-size") && s(t, C)), new N.default(t) }); var r = function () { n.pickers.forEach(function (t) { t.update() }) }; this.quill.on(v.default.events.EDITOR_CHANGE, r) } }]), e }(_.default); L.DEFAULTS = (0, h.default)(!0, {}, _.default.DEFAULTS, { modules: { toolbar: { handlers: { formula: function () { this.quill.theme.tooltip.edit("formula") }, image: function () { var t = this, e = this.container.querySelector("input.ql-image[type=file]"); null == e && (e = document.createElement("input"), e.setAttribute("type", "file"), e.setAttribute("accept", "image/png, image/gif, image/jpeg, image/bmp, image/x-icon"), e.classList.add("ql-image"), e.addEventListener("change", function () { if (null != e.files && null != e.files[0]) { var n = new FileReader; n.onload = function (n) { var r = t.quill.getSelection(!0); t.quill.updateContents((new d.default).retain(r.index).delete(r.length).insert({ image: n.target.result }), v.default.sources.USER), t.quill.setSelection(r.index + 1, v.default.sources.SILENT), e.value = "" }, n.readAsDataURL(e.files[0]) } }), this.container.appendChild(e)), e.click() }, video: function () { this.quill.theme.tooltip.edit("video") } } } } }); var M = function (t) { function e(t, n) { o(this, e); var r = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)); return r.textbox = r.root.querySelector('input[type="text"]'), r.listen(), r } return l(e, t), u(e, [{ key: "listen", value: function () { var t = this; this.textbox.addEventListener("keydown", function (e) { g.default.match(e, "enter") ? (t.save(), e.preventDefault()) : g.default.match(e, "escape") && (t.cancel(), e.preventDefault()) }) } }, { key: "cancel", value: function () { this.hide() } }, { key: "edit", value: function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "link", e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; this.root.classList.remove("ql-hidden"), this.root.classList.add("ql-editing"), null != e ? this.textbox.value = e : t !== this.root.getAttribute("data-mode") && (this.textbox.value = ""), this.position(this.quill.getBounds(this.quill.selection.savedRange)), this.textbox.select(), this.textbox.setAttribute("placeholder", this.textbox.getAttribute("data-" + t) || ""), this.root.setAttribute("data-mode", t) } }, { key: "restoreFocus", value: function () { var t = this.quill.scrollingContainer.scrollTop; this.quill.focus(), this.quill.scrollingContainer.scrollTop = t } }, { key: "save", value: function () { var t = this.textbox.value; switch (this.root.getAttribute("data-mode")) { case "link": var e = this.quill.root.scrollTop; this.linkRange ? (this.quill.formatText(this.linkRange, "link", t, v.default.sources.USER), delete this.linkRange) : (this.restoreFocus(), this.quill.format("link", t, v.default.sources.USER)), this.quill.root.scrollTop = e; break; case "video": t = a(t); case "formula": if (!t) break; var n = this.quill.getSelection(!0); if (null != n) { var r = n.index + n.length; this.quill.insertEmbed(r, this.root.getAttribute("data-mode"), t, v.default.sources.USER), "formula" === this.root.getAttribute("data-mode") && this.quill.insertText(r + 1, " ", v.default.sources.USER), this.quill.setSelection(r + 2, v.default.sources.USER) } }this.textbox.value = "", this.hide() } }]), e }(A.default); e.BaseTooltip = M, e.default = L }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } Object.defineProperty(e, "__esModule", { value: !0 }); var o = n(46), i = r(o), l = n(34), a = n(36), s = n(62), u = n(63), c = r(u), f = n(64), h = r(f), p = n(65), d = r(p), y = n(35), v = n(24), b = n(37), g = n(38), m = n(39), _ = r(m), O = n(66), w = r(O), x = n(15), k = r(x), E = n(67), N = r(E), j = n(68), A = r(j), q = n(69), T = r(q), P = n(70), S = r(P), C = n(71), L = r(C), M = n(13), R = r(M), I = n(72), B = r(I), D = n(73), U = r(D), F = n(74), H = r(F), K = n(26), z = r(K), V = n(16), Z = r(V), W = n(41), G = r(W), Y = n(42), X = r(Y), $ = n(43), Q = r($), J = n(107), tt = r(J), et = n(108), nt = r(et); i.default.register({ "attributors/attribute/direction": a.DirectionAttribute, "attributors/class/align": l.AlignClass, "attributors/class/background": y.BackgroundClass, "attributors/class/color": v.ColorClass, "attributors/class/direction": a.DirectionClass, "attributors/class/font": b.FontClass, "attributors/class/size": g.SizeClass, "attributors/style/align": l.AlignStyle, "attributors/style/background": y.BackgroundStyle, "attributors/style/color": v.ColorStyle, "attributors/style/direction": a.DirectionStyle, "attributors/style/font": b.FontStyle, "attributors/style/size": g.SizeStyle }, !0), i.default.register({ "formats/align": l.AlignClass, "formats/direction": a.DirectionClass, "formats/indent": s.IndentClass, "formats/background": y.BackgroundStyle, "formats/color": v.ColorStyle, "formats/font": b.FontClass, "formats/size": g.SizeClass, "formats/blockquote": c.default, "formats/code-block": R.default, "formats/header": h.default, "formats/list": d.default, "formats/bold": _.default, "formats/code": M.Code, "formats/italic": w.default, "formats/link": k.default, "formats/script": N.default, "formats/strike": A.default, "formats/underline": T.default, "formats/image": S.default, "formats/video": L.default, "formats/list/item": p.ListItem, "modules/formula": B.default, "modules/syntax": U.default, "modules/toolbar": H.default, "themes/bubble": tt.default, "themes/snow": nt.default, "ui/icons": z.default, "ui/picker": Z.default, "ui/icon-picker": X.default, "ui/color-picker": G.default, "ui/tooltip": Q.default }, !0), e.default = i.default }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } Object.defineProperty(e, "__esModule", { value: !0 }); var o = n(0), i = r(o), l = n(6), a = r(l), s = n(3), u = r(s), c = n(14), f = r(c), h = n(23), p = r(h), d = n(31), y = r(d), v = n(33), b = r(v), g = n(5), m = r(g), _ = n(59), O = r(_), w = n(8), x = r(w), k = n(60), E = r(k), N = n(61), j = r(N), A = n(25), q = r(A); a.default.register({ "blots/block": u.default, "blots/block/embed": s.BlockEmbed, "blots/break": f.default, "blots/container": p.default, "blots/cursor": y.default, "blots/embed": b.default, "blots/inline": m.default, "blots/scroll": O.default, "blots/text": x.default, "modules/clipboard": E.default, "modules/history": j.default, "modules/keyboard": q.default }), i.default.register(u.default, f.default, y.default, m.default, O.default, x.default), e.default = a.default }, function (t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var r = function () { function t() { this.head = this.tail = null, this.length = 0 } return t.prototype.append = function () { for (var t = [], e = 0; e < arguments.length; e++)t[e] = arguments[e]; this.insertBefore(t[0], null), t.length > 1 && this.append.apply(this, t.slice(1)) }, t.prototype.contains = function (t) { for (var e, n = this.iterator(); e = n();)if (e === t) return !0; return !1 }, t.prototype.insertBefore = function (t, e) { t && (t.next = e, null != e ? (t.prev = e.prev, null != e.prev && (e.prev.next = t), e.prev = t, e === this.head && (this.head = t)) : null != this.tail ? (this.tail.next = t, t.prev = this.tail, this.tail = t) : (t.prev = null, this.head = this.tail = t), this.length += 1) }, t.prototype.offset = function (t) { for (var e = 0, n = this.head; null != n;) { if (n === t) return e; e += n.length(), n = n.next } return -1 }, t.prototype.remove = function (t) { this.contains(t) && (null != t.prev && (t.prev.next = t.next), null != t.next && (t.next.prev = t.prev), t === this.head && (this.head = t.next), t === this.tail && (this.tail = t.prev), this.length -= 1) }, t.prototype.iterator = function (t) { return void 0 === t && (t = this.head), function () { var e = t; return null != t && (t = t.next), e } }, t.prototype.find = function (t, e) { void 0 === e && (e = !1); for (var n, r = this.iterator(); n = r();) { var o = n.length(); if (t < o || e && t === o && (null == n.next || 0 !== n.next.length())) return [n, t]; t -= o } return [null, 0] }, t.prototype.forEach = function (t) { for (var e, n = this.iterator(); e = n();)t(e) }, t.prototype.forEachAt = function (t, e, n) { if (!(e <= 0)) for (var r, o = this.find(t), i = o[0], l = o[1], a = t - l, s = this.iterator(i); (r = s()) && a < t + e;) { var u = r.length(); t > a ? n(r, t - a, Math.min(e, a + u - t)) : n(r, 0, Math.min(u, t + e - a)), a += u } }, t.prototype.map = function (t) { return this.reduce(function (e, n) { return e.push(t(n)), e }, []) }, t.prototype.reduce = function (t, e) { for (var n, r = this.iterator(); n = r();)e = t(e, n); return e }, t }(); e.default = r }, function (t, e, n) { "use strict"; var r = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var o = n(17), i = n(1), l = { attributes: !0, characterData: !0, characterDataOldValue: !0, childList: !0, subtree: !0 }, a = function (t) { function e(e) { var n = t.call(this, e) || this; return n.scroll = n, n.observer = new MutationObserver(function (t) { n.update(t) }), n.observer.observe(n.domNode, l), n.attach(), n } return r(e, t), e.prototype.detach = function () { t.prototype.detach.call(this), this.observer.disconnect() }, e.prototype.deleteAt = function (e, n) { this.update(), 0 === e && n === this.length() ? this.children.forEach(function (t) { t.remove() }) : t.prototype.deleteAt.call(this, e, n) }, e.prototype.formatAt = function (e, n, r, o) { this.update(), t.prototype.formatAt.call(this, e, n, r, o) }, e.prototype.insertAt = function (e, n, r) { this.update(), t.prototype.insertAt.call(this, e, n, r) }, e.prototype.optimize = function (e, n) { var r = this; void 0 === e && (e = []), void 0 === n && (n = {}), t.prototype.optimize.call(this, n); for (var l = [].slice.call(this.observer.takeRecords()); l.length > 0;)e.push(l.pop()); for (var a = function (t, e) { void 0 === e && (e = !0), null != t && t !== r && null != t.domNode.parentNode && (null == t.domNode[i.DATA_KEY].mutations && (t.domNode[i.DATA_KEY].mutations = []), e && a(t.parent)) }, s = function (t) { null != t.domNode[i.DATA_KEY] && null != t.domNode[i.DATA_KEY].mutations && (t instanceof o.default && t.children.forEach(s), t.optimize(n)) }, u = e, c = 0; u.length > 0; c += 1) { if (c >= 100) throw new Error("[Parchment] Maximum optimize iterations reached"); for (u.forEach(function (t) { var e = i.find(t.target, !0); null != e && (e.domNode === t.target && ("childList" === t.type ? (a(i.find(t.previousSibling, !1)), [].forEach.call(t.addedNodes, function (t) { var e = i.find(t, !1); a(e, !1), e instanceof o.default && e.children.forEach(function (t) { a(t, !1) }) })) : "attributes" === t.type && a(e.prev)), a(e)) }), this.children.forEach(s), u = [].slice.call(this.observer.takeRecords()), l = u.slice(); l.length > 0;)e.push(l.pop()) } }, e.prototype.update = function (e, n) { var r = this; void 0 === n && (n = {}), e = e || this.observer.takeRecords(), e.map(function (t) { var e = i.find(t.target, !0); return null == e ? null : null == e.domNode[i.DATA_KEY].mutations ? (e.domNode[i.DATA_KEY].mutations = [t], e) : (e.domNode[i.DATA_KEY].mutations.push(t), null) }).forEach(function (t) { null != t && t !== r && null != t.domNode[i.DATA_KEY] && t.update(t.domNode[i.DATA_KEY].mutations || [], n) }), null != this.domNode[i.DATA_KEY].mutations && t.prototype.update.call(this, this.domNode[i.DATA_KEY].mutations, n), this.optimize(e, n) }, e.blotName = "scroll", e.defaultChild = "block", e.scope = i.Scope.BLOCK_BLOT, e.tagName = "DIV", e }(o.default); e.default = a }, function (t, e, n) { "use strict"; function r(t, e) { if (Object.keys(t).length !== Object.keys(e).length) return !1; for (var n in t) if (t[n] !== e[n]) return !1; return !0 } var o = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(18), l = n(1), a = function (t) { function e() { return null !== t && t.apply(this, arguments) || this } return o(e, t), e.formats = function (n) { if (n.tagName !== e.tagName) return t.formats.call(this, n) }, e.prototype.format = function (n, r) { var o = this; n !== this.statics.blotName || r ? t.prototype.format.call(this, n, r) : (this.children.forEach(function (t) { t instanceof i.default || (t = t.wrap(e.blotName, !0)), o.attributes.copy(t) }), this.unwrap()) }, e.prototype.formatAt = function (e, n, r, o) { if (null != this.formats()[r] || l.query(r, l.Scope.ATTRIBUTE)) { this.isolate(e, n).format(r, o) } else t.prototype.formatAt.call(this, e, n, r, o) }, e.prototype.optimize = function (n) { t.prototype.optimize.call(this, n); var o = this.formats(); if (0 === Object.keys(o).length) return this.unwrap(); var i = this.next; i instanceof e && i.prev === this && r(o, i.formats()) && (i.moveChildren(this), i.remove()) }, e.blotName = "inline", e.scope = l.Scope.INLINE_BLOT, e.tagName = "SPAN", e }(i.default); e.default = a }, function (t, e, n) { "use strict"; var r = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var o = n(18), i = n(1), l = function (t) { function e() { return null !== t && t.apply(this, arguments) || this } return r(e, t), e.formats = function (n) { var r = i.query(e.blotName).tagName; if (n.tagName !== r) return t.formats.call(this, n) }, e.prototype.format = function (n, r) { null != i.query(n, i.Scope.BLOCK) && (n !== this.statics.blotName || r ? t.prototype.format.call(this, n, r) : this.replaceWith(e.blotName)) }, e.prototype.formatAt = function (e, n, r, o) { null != i.query(r, i.Scope.BLOCK) ? this.format(r, o) : t.prototype.formatAt.call(this, e, n, r, o) }, e.prototype.insertAt = function (e, n, r) { if (null == r || null != i.query(n, i.Scope.INLINE)) t.prototype.insertAt.call(this, e, n, r); else { var o = this.split(e), l = i.create(n, r); o.parent.insertBefore(l, o) } }, e.prototype.update = function (e, n) { navigator.userAgent.match(/Trident/) ? this.build() : t.prototype.update.call(this, e, n) }, e.blotName = "block", e.scope = i.Scope.BLOCK_BLOT, e.tagName = "P", e }(o.default); e.default = l }, function (t, e, n) { "use strict"; var r = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var o = n(19), i = function (t) { function e() { return null !== t && t.apply(this, arguments) || this } return r(e, t), e.formats = function (t) { }, e.prototype.format = function (e, n) { t.prototype.formatAt.call(this, 0, this.length(), e, n) }, e.prototype.formatAt = function (e, n, r, o) { 0 === e && n === this.length() ? this.format(r, o) : t.prototype.formatAt.call(this, e, n, r, o) }, e.prototype.formats = function () { return this.statics.formats(this.domNode) }, e }(o.default); e.default = i }, function (t, e, n) { "use strict"; var r = this && this.__extends || function () { var t = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (t, e) { t.__proto__ = e } || function (t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]) }; return function (e, n) { function r() { this.constructor = e } t(e, n), e.prototype = null === n ? Object.create(n) : (r.prototype = n.prototype, new r) } }(); Object.defineProperty(e, "__esModule", { value: !0 }); var o = n(19), i = n(1), l = function (t) { function e(e) { var n = t.call(this, e) || this; return n.text = n.statics.value(n.domNode), n } return r(e, t), e.create = function (t) { return document.createTextNode(t) }, e.value = function (t) { var e = t.data; return e.normalize && (e = e.normalize()), e }, e.prototype.deleteAt = function (t, e) { this.domNode.data = this.text = this.text.slice(0, t) + this.text.slice(t + e) }, e.prototype.index = function (t, e) { return this.domNode === t ? e : -1 }, e.prototype.insertAt = function (e, n, r) { null == r ? (this.text = this.text.slice(0, e) + n + this.text.slice(e), this.domNode.data = this.text) : t.prototype.insertAt.call(this, e, n, r) }, e.prototype.length = function () { return this.text.length }, e.prototype.optimize = function (n) { t.prototype.optimize.call(this, n), this.text = this.statics.value(this.domNode), 0 === this.text.length ? this.remove() : this.next instanceof e && this.next.prev === this && (this.insertAt(this.length(), this.next.value()), this.next.remove()) }, e.prototype.position = function (t, e) { return void 0 === e && (e = !1), [this.domNode, t] }, e.prototype.split = function (t, e) { if (void 0 === e && (e = !1), !e) { if (0 === t) return this; if (t === this.length()) return this.next } var n = i.create(this.domNode.splitText(t)); return this.parent.insertBefore(n, this.next), this.text = this.statics.value(this.domNode), n }, e.prototype.update = function (t, e) { var n = this; t.some(function (t) { return "characterData" === t.type && t.target === n.domNode }) && (this.text = this.statics.value(this.domNode)) }, e.prototype.value = function () { return this.text }, e.blotName = "text", e.scope = i.Scope.INLINE_BLOT, e }(o.default); e.default = l }, function (t, e, n) { "use strict"; var r = document.createElement("div"); if (r.classList.toggle("test-class", !1), r.classList.contains("test-class")) { var o = DOMTokenList.prototype.toggle; DOMTokenList.prototype.toggle = function (t, e) { return arguments.length > 1 && !this.contains(t) == !e ? e : o.call(this, t) } } String.prototype.startsWith || (String.prototype.startsWith = function (t, e) { return e = e || 0, this.substr(e, t.length) === t }), String.prototype.endsWith || (String.prototype.endsWith = function (t, e) { var n = this.toString(); ("number" != typeof e || !isFinite(e) || Math.floor(e) !== e || e > n.length) && (e = n.length), e -= t.length; var r = n.indexOf(t, e); return -1 !== r && r === e }), Array.prototype.find || Object.defineProperty(Array.prototype, "find", { value: function (t) { if (null === this) throw new TypeError("Array.prototype.find called on null or undefined"); if ("function" != typeof t) throw new TypeError("predicate must be a function"); for (var e, n = Object(this), r = n.length >>> 0, o = arguments[1], i = 0; i < r; i++)if (e = n[i], t.call(o, e, i, n)) return e } }), document.addEventListener("DOMContentLoaded", function () { document.execCommand("enableObjectResizing", !1, !1), document.execCommand("autoUrlDetect", !1, !1) }) }, function (t, e) { function n(t, e, n) { if (t == e) return t ? [[v, t]] : []; (n < 0 || t.length < n) && (n = null); var o = l(t, e), i = t.substring(0, o); t = t.substring(o), e = e.substring(o), o = a(t, e); var s = t.substring(t.length - o); t = t.substring(0, t.length - o), e = e.substring(0, e.length - o); var c = r(t, e); return i && c.unshift([v, i]), s && c.push([v, s]), u(c), null != n && (c = f(c, n)), c = h(c) } function r(t, e) { var r; if (!t) return [[y, e]]; if (!e) return [[d, t]]; var i = t.length > e.length ? t : e, l = t.length > e.length ? e : t, a = i.indexOf(l); if (-1 != a) return r = [[y, i.substring(0, a)], [v, l], [y, i.substring(a + l.length)]], t.length > e.length && (r[0][0] = r[2][0] = d), r; if (1 == l.length) return [[d, t], [y, e]]; var u = s(t, e); if (u) { var c = u[0], f = u[1], h = u[2], p = u[3], b = u[4], g = n(c, h), m = n(f, p); return g.concat([[v, b]], m) } return o(t, e) } function o(t, e) { for (var n = t.length, r = e.length, o = Math.ceil((n + r) / 2), l = o, a = 2 * o, s = new Array(a), u = new Array(a), c = 0; c < a; c++)s[c] = -1, u[c] = -1; s[l + 1] = 0, u[l + 1] = 0; for (var f = n - r, h = f % 2 != 0, p = 0, v = 0, b = 0, g = 0, m = 0; m < o; m++) { for (var _ = -m + p; _ <= m - v; _ += 2) { var O, w = l + _; O = _ == -m || _ != m && s[w - 1] < s[w + 1] ? s[w + 1] : s[w - 1] + 1; for (var x = O - _; O < n && x < r && t.charAt(O) == e.charAt(x);)O++, x++; if (s[w] = O, O > n) v += 2; else if (x > r) p += 2; else if (h) { var k = l + f - _; if (k >= 0 && k < a && -1 != u[k]) { var E = n - u[k]; if (O >= E) return i(t, e, O, x) } } } for (var N = -m + b; N <= m - g; N += 2) { var E, k = l + N; E = N == -m || N != m && u[k - 1] < u[k + 1] ? u[k + 1] : u[k - 1] + 1; for (var j = E - N; E < n && j < r && t.charAt(n - E - 1) == e.charAt(r - j - 1);)E++, j++; if (u[k] = E, E > n) g += 2; else if (j > r) b += 2; else if (!h) { var w = l + f - N; if (w >= 0 && w < a && -1 != s[w]) { var O = s[w], x = l + O - w; if (E = n - E, O >= E) return i(t, e, O, x) } } } } return [[d, t], [y, e]] } function i(t, e, r, o) { var i = t.substring(0, r), l = e.substring(0, o), a = t.substring(r), s = e.substring(o), u = n(i, l), c = n(a, s); return u.concat(c) } function l(t, e) { if (!t || !e || t.charAt(0) != e.charAt(0)) return 0; for (var n = 0, r = Math.min(t.length, e.length), o = r, i = 0; n < o;)t.substring(i, o) == e.substring(i, o) ? (n = o, i = n) : r = o, o = Math.floor((r - n) / 2 + n); return o } function a(t, e) { if (!t || !e || t.charAt(t.length - 1) != e.charAt(e.length - 1)) return 0; for (var n = 0, r = Math.min(t.length, e.length), o = r, i = 0; n < o;)t.substring(t.length - o, t.length - i) == e.substring(e.length - o, e.length - i) ? (n = o, i = n) : r = o, o = Math.floor((r - n) / 2 + n); return o } function s(t, e) { function n(t, e, n) { for (var r, o, i, s, u = t.substring(n, n + Math.floor(t.length / 4)), c = -1, f = ""; -1 != (c = e.indexOf(u, c + 1));) { var h = l(t.substring(n), e.substring(c)), p = a(t.substring(0, n), e.substring(0, c)); f.length < p + h && (f = e.substring(c - p, c) + e.substring(c, c + h), r = t.substring(0, n - p), o = t.substring(n + h), i = e.substring(0, c - p), s = e.substring(c + h)) } return 2 * f.length >= t.length ? [r, o, i, s, f] : null } var r = t.length > e.length ? t : e, o = t.length > e.length ? e : t; if (r.length < 4 || 2 * o.length < r.length) return null; var i, s = n(r, o, Math.ceil(r.length / 4)), u = n(r, o, Math.ceil(r.length / 2)); if (!s && !u) return null; i = u ? s && s[4].length > u[4].length ? s : u : s; var c, f, h, p; return t.length > e.length ? (c = i[0], f = i[1], h = i[2], p = i[3]) : (h = i[0], p = i[1], c = i[2], f = i[3]), [c, f, h, p, i[4]] } function u(t) { t.push([v, ""]); for (var e, n = 0, r = 0, o = 0, i = "", s = ""; n < t.length;)switch (t[n][0]) { case y: o++, s += t[n][1], n++; break; case d: r++, i += t[n][1], n++; break; case v: r + o > 1 ? (0 !== r && 0 !== o && (e = l(s, i), 0 !== e && (n - r - o > 0 && t[n - r - o - 1][0] == v ? t[n - r - o - 1][1] += s.substring(0, e) : (t.splice(0, 0, [v, s.substring(0, e)]), n++), s = s.substring(e), i = i.substring(e)), 0 !== (e = a(s, i)) && (t[n][1] = s.substring(s.length - e) + t[n][1], s = s.substring(0, s.length - e), i = i.substring(0, i.length - e))), 0 === r ? t.splice(n - o, r + o, [y, s]) : 0 === o ? t.splice(n - r, r + o, [d, i]) : t.splice(n - r - o, r + o, [d, i], [y, s]), n = n - r - o + (r ? 1 : 0) + (o ? 1 : 0) + 1) : 0 !== n && t[n - 1][0] == v ? (t[n - 1][1] += t[n][1], t.splice(n, 1)) : n++, o = 0, r = 0, i = "", s = "" }"" === t[t.length - 1][1] && t.pop(); var c = !1; for (n = 1; n < t.length - 1;)t[n - 1][0] == v && t[n + 1][0] == v && (t[n][1].substring(t[n][1].length - t[n - 1][1].length) == t[n - 1][1] ? (t[n][1] = t[n - 1][1] + t[n][1].substring(0, t[n][1].length - t[n - 1][1].length), t[n + 1][1] = t[n - 1][1] + t[n + 1][1], t.splice(n - 1, 1), c = !0) : t[n][1].substring(0, t[n + 1][1].length) == t[n + 1][1] && (t[n - 1][1] += t[n + 1][1], t[n][1] = t[n][1].substring(t[n + 1][1].length) + t[n + 1][1], t.splice(n + 1, 1), c = !0)), n++; c && u(t) } function c(t, e) { if (0 === e) return [v, t]; for (var n = 0, r = 0; r < t.length; r++) { var o = t[r]; if (o[0] === d || o[0] === v) { var i = n + o[1].length; if (e === i) return [r + 1, t]; if (e < i) { t = t.slice(); var l = e - n, a = [o[0], o[1].slice(0, l)], s = [o[0], o[1].slice(l)]; return t.splice(r, 1, a, s), [r + 1, t] } n = i } } throw new Error("cursor_pos is out of bounds!") } function f(t, e) { var n = c(t, e), r = n[1], o = n[0], i = r[o], l = r[o + 1]; if (null == i) return t; if (i[0] !== v) return t; if (null != l && i[1] + l[1] === l[1] + i[1]) return r.splice(o, 2, l, i), p(r, o, 2); if (null != l && 0 === l[1].indexOf(i[1])) { r.splice(o, 2, [l[0], i[1]], [0, i[1]]); var a = l[1].slice(i[1].length); return a.length > 0 && r.splice(o + 2, 0, [l[0], a]), p(r, o, 3) } return t } function h(t) { for (var e = !1, n = function (t) { return t.charCodeAt(0) >= 56320 && t.charCodeAt(0) <= 57343 }, r = 2; r < t.length; r += 1)t[r - 2][0] === v && function (t) { return t.charCodeAt(t.length - 1) >= 55296 && t.charCodeAt(t.length - 1) <= 56319 }(t[r - 2][1]) && t[r - 1][0] === d && n(t[r - 1][1]) && t[r][0] === y && n(t[r][1]) && (e = !0, t[r - 1][1] = t[r - 2][1].slice(-1) + t[r - 1][1], t[r][1] = t[r - 2][1].slice(-1) + t[r][1], t[r - 2][1] = t[r - 2][1].slice(0, -1)); if (!e) return t; for (var o = [], r = 0; r < t.length; r += 1)t[r][1].length > 0 && o.push(t[r]); return o } function p(t, e, n) { for (var r = e + n - 1; r >= 0 && r >= e - 1; r--)if (r + 1 < t.length) { var o = t[r], i = t[r + 1]; o[0] === i[1] && t.splice(r, 2, [o[0], o[1] + i[1]]) } return t } var d = -1, y = 1, v = 0, b = n; b.INSERT = y, b.DELETE = d, b.EQUAL = v, t.exports = b }, function (t, e) { function n(t) { var e = []; for (var n in t) e.push(n); return e } e = t.exports = "function" == typeof Object.keys ? Object.keys : n, e.shim = n }, function (t, e) { function n(t) { return "[object Arguments]" == Object.prototype.toString.call(t) } function r(t) { return t && "object" == typeof t && "number" == typeof t.length && Object.prototype.hasOwnProperty.call(t, "callee") && !Object.prototype.propertyIsEnumerable.call(t, "callee") || !1 } var o = "[object Arguments]" == function () { return Object.prototype.toString.call(arguments) }(); e = t.exports = o ? n : r, e.supported = n, e.unsupported = r }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e, n) { return e in t ? Object.defineProperty(t, e, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : t[e] = n, t } function i(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function l(t, e) { return Object.keys(e).reduce(function (n, r) { return null == t[r] ? n : (e[r] === t[r] ? n[r] = e[r] : Array.isArray(e[r]) ? e[r].indexOf(t[r]) < 0 && (n[r] = e[r].concat([t[r]])) : n[r] = [e[r], t[r]], n) }, {}) } function a(t) { return t.reduce(function (t, e) { if (1 === e.insert) { var n = (0, N.default)(e.attributes); return delete n.image, t.insert({ image: e.attributes.image }, n) } if (null == e.attributes || !0 !== e.attributes.list && !0 !== e.attributes.bullet || (e = (0, N.default)(e), e.attributes.list ? e.attributes.list = "ordered" : (e.attributes.list = "bullet", delete e.attributes.bullet)), "string" == typeof e.insert) { var r = e.insert.replace(/\r\n/g, "\n").replace(/\r/g, "\n"); return t.insert(r, e.attributes) } return t.push(e) }, new h.default) } Object.defineProperty(e, "__esModule", { value: !0 }); var s = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { return typeof t } : function (t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t }, u = function () { function t(t, e) { var n = [], r = !0, o = !1, i = void 0; try { for (var l, a = t[Symbol.iterator](); !(r = (l = a.next()).done) && (n.push(l.value), !e || n.length !== e); r = !0); } catch (t) { o = !0, i = t } finally { try { !r && a.return && a.return() } finally { if (o) throw i } } return n } return function (e, n) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return t(e, n); throw new TypeError("Invalid attempt to destructure non-iterable instance") } }(), c = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), f = n(4), h = r(f), p = n(20), d = r(p), y = n(0), v = r(y), b = n(13), g = r(b), m = n(31), _ = r(m), O = n(3), w = r(O), x = n(14), k = r(x), E = n(21), N = r(E), j = n(12), A = r(j), q = n(2), T = r(q), P = /^[ -~]*$/, S = function () { function t(e) { i(this, t), this.scroll = e, this.delta = this.getDelta() } return c(t, [{ key: "applyDelta", value: function (t) { var e = this, n = !1; this.scroll.update(); var r = this.scroll.length(); return this.scroll.batchStart(), t = a(t), t.reduce(function (t, o) { var i = o.retain || o.delete || o.insert.length || 1, l = o.attributes || {}; if (null != o.insert) { if ("string" == typeof o.insert) { var a = o.insert; a.endsWith("\n") && n && (n = !1, a = a.slice(0, -1)), t >= r && !a.endsWith("\n") && (n = !0), e.scroll.insertAt(t, a); var c = e.scroll.line(t), f = u(c, 2), h = f[0], p = f[1], y = (0, T.default)({}, (0, O.bubbleFormats)(h)); if (h instanceof w.default) { var b = h.descendant(v.default.Leaf, p), g = u(b, 1), m = g[0]; y = (0, T.default)(y, (0, O.bubbleFormats)(m)) } l = d.default.attributes.diff(y, l) || {} } else if ("object" === s(o.insert)) { var _ = Object.keys(o.insert)[0]; if (null == _) return t; e.scroll.insertAt(t, _, o.insert[_]) } r += i } return Object.keys(l).forEach(function (n) { e.scroll.formatAt(t, i, n, l[n]) }), t + i }, 0), t.reduce(function (t, n) { return "number" == typeof n.delete ? (e.scroll.deleteAt(t, n.delete), t) : t + (n.retain || n.insert.length || 1) }, 0), this.scroll.batchEnd(), this.update(t) } }, { key: "deleteText", value: function (t, e) { return this.scroll.deleteAt(t, e), this.update((new h.default).retain(t).delete(e)) } }, { key: "formatLine", value: function (t, e) { var n = this, r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; return this.scroll.update(), Object.keys(r).forEach(function (o) { if (null == n.scroll.whitelist || n.scroll.whitelist[o]) { var i = n.scroll.lines(t, Math.max(e, 1)), l = e; i.forEach(function (e) { var i = e.length(); if (e instanceof g.default) { var a = t - e.offset(n.scroll), s = e.newlineIndex(a + l) - a + 1; e.formatAt(a, s, o, r[o]) } else e.format(o, r[o]); l -= i }) } }), this.scroll.optimize(), this.update((new h.default).retain(t).retain(e, (0, N.default)(r))) } }, { key: "formatText", value: function (t, e) { var n = this, r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; return Object.keys(r).forEach(function (o) { n.scroll.formatAt(t, e, o, r[o]) }), this.update((new h.default).retain(t).retain(e, (0, N.default)(r))) } }, { key: "getContents", value: function (t, e) { return this.delta.slice(t, t + e) } }, { key: "getDelta", value: function () { return this.scroll.lines().reduce(function (t, e) { return t.concat(e.delta()) }, new h.default) } }, { key: "getFormat", value: function (t) { var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, n = [], r = []; 0 === e ? this.scroll.path(t).forEach(function (t) { var e = u(t, 1), o = e[0]; o instanceof w.default ? n.push(o) : o instanceof v.default.Leaf && r.push(o) }) : (n = this.scroll.lines(t, e), r = this.scroll.descendants(v.default.Leaf, t, e)); var o = [n, r].map(function (t) { if (0 === t.length) return {}; for (var e = (0, O.bubbleFormats)(t.shift()); Object.keys(e).length > 0;) { var n = t.shift(); if (null == n) return e; e = l((0, O.bubbleFormats)(n), e) } return e }); return T.default.apply(T.default, o) } }, { key: "getText", value: function (t, e) { return this.getContents(t, e).filter(function (t) { return "string" == typeof t.insert }).map(function (t) { return t.insert }).join("") } }, { key: "insertEmbed", value: function (t, e, n) { return this.scroll.insertAt(t, e, n), this.update((new h.default).retain(t).insert(o({}, e, n))) } }, { key: "insertText", value: function (t, e) { var n = this, r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; return e = e.replace(/\r\n/g, "\n").replace(/\r/g, "\n"), this.scroll.insertAt(t, e), Object.keys(r).forEach(function (o) { n.scroll.formatAt(t, e.length, o, r[o]) }), this.update((new h.default).retain(t).insert(e, (0, N.default)(r))) } }, { key: "isBlank", value: function () { if (0 == this.scroll.children.length) return !0; if (this.scroll.children.length > 1) return !1; var t = this.scroll.children.head; return t.statics.blotName === w.default.blotName && (!(t.children.length > 1) && t.children.head instanceof k.default) } }, { key: "removeFormat", value: function (t, e) { var n = this.getText(t, e), r = this.scroll.line(t + e), o = u(r, 2), i = o[0], l = o[1], a = 0, s = new h.default; null != i && (a = i instanceof g.default ? i.newlineIndex(l) - l + 1 : i.length() - l, s = i.delta().slice(l, l + a - 1).insert("\n")); var c = this.getContents(t, e + a), f = c.diff((new h.default).insert(n).concat(s)), p = (new h.default).retain(t).concat(f); return this.applyDelta(p) } }, { key: "update", value: function (t) { var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [], n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : void 0, r = this.delta; if (1 === e.length && "characterData" === e[0].type && e[0].target.data.match(P) && v.default.find(e[0].target)) { var o = v.default.find(e[0].target), i = (0, O.bubbleFormats)(o), l = o.offset(this.scroll), a = e[0].oldValue.replace(_.default.CONTENTS, ""), s = (new h.default).insert(a), u = (new h.default).insert(o.value()); t = (new h.default).retain(l).concat(s.diff(u, n)).reduce(function (t, e) { return e.insert ? t.insert(e.insert, i) : t.push(e) }, new h.default), this.delta = r.compose(t) } else this.delta = this.getDelta(), t && (0, A.default)(r.compose(t), this.delta) || (t = r.diff(this.delta, n)); return t } }]), t }(); e.default = S }, function (t, e) { "use strict"; function n() { } function r(t, e, n) { this.fn = t, this.context = e, this.once = n || !1 } function o() { this._events = new n, this._eventsCount = 0 } var i = Object.prototype.hasOwnProperty, l = "~"; Object.create && (n.prototype = Object.create(null), (new n).__proto__ || (l = !1)), o.prototype.eventNames = function () { var t, e, n = []; if (0 === this._eventsCount) return n; for (e in t = this._events) i.call(t, e) && n.push(l ? e.slice(1) : e); return Object.getOwnPropertySymbols ? n.concat(Object.getOwnPropertySymbols(t)) : n }, o.prototype.listeners = function (t, e) { var n = l ? l + t : t, r = this._events[n]; if (e) return !!r; if (!r) return []; if (r.fn) return [r.fn]; for (var o = 0, i = r.length, a = new Array(i); o < i; o++)a[o] = r[o].fn; return a }, o.prototype.emit = function (t, e, n, r, o, i) { var a = l ? l + t : t; if (!this._events[a]) return !1; var s, u, c = this._events[a], f = arguments.length; if (c.fn) { switch (c.once && this.removeListener(t, c.fn, void 0, !0), f) { case 1: return c.fn.call(c.context), !0; case 2: return c.fn.call(c.context, e), !0; case 3: return c.fn.call(c.context, e, n), !0; case 4: return c.fn.call(c.context, e, n, r), !0; case 5: return c.fn.call(c.context, e, n, r, o), !0; case 6: return c.fn.call(c.context, e, n, r, o, i), !0 }for (u = 1, s = new Array(f - 1); u < f; u++)s[u - 1] = arguments[u]; c.fn.apply(c.context, s) } else { var h, p = c.length; for (u = 0; u < p; u++)switch (c[u].once && this.removeListener(t, c[u].fn, void 0, !0), f) { case 1: c[u].fn.call(c[u].context); break; case 2: c[u].fn.call(c[u].context, e); break; case 3: c[u].fn.call(c[u].context, e, n); break; case 4: c[u].fn.call(c[u].context, e, n, r); break; default: if (!s) for (h = 1, s = new Array(f - 1); h < f; h++)s[h - 1] = arguments[h]; c[u].fn.apply(c[u].context, s) } } return !0 }, o.prototype.on = function (t, e, n) { var o = new r(e, n || this), i = l ? l + t : t; return this._events[i] ? this._events[i].fn ? this._events[i] = [this._events[i], o] : this._events[i].push(o) : (this._events[i] = o, this._eventsCount++), this }, o.prototype.once = function (t, e, n) { var o = new r(e, n || this, !0), i = l ? l + t : t; return this._events[i] ? this._events[i].fn ? this._events[i] = [this._events[i], o] : this._events[i].push(o) : (this._events[i] = o, this._eventsCount++), this }, o.prototype.removeListener = function (t, e, r, o) { var i = l ? l + t : t; if (!this._events[i]) return this; if (!e) return 0 == --this._eventsCount ? this._events = new n : delete this._events[i], this; var a = this._events[i]; if (a.fn) a.fn !== e || o && !a.once || r && a.context !== r || (0 == --this._eventsCount ? this._events = new n : delete this._events[i]); else { for (var s = 0, u = [], c = a.length; s < c; s++)(a[s].fn !== e || o && !a[s].once || r && a[s].context !== r) && u.push(a[s]); u.length ? this._events[i] = 1 === u.length ? u[0] : u : 0 == --this._eventsCount ? this._events = new n : delete this._events[i] } return this }, o.prototype.removeAllListeners = function (t) { var e; return t ? (e = l ? l + t : t, this._events[e] && (0 == --this._eventsCount ? this._events = new n : delete this._events[e])) : (this._events = new n, this._eventsCount = 0), this }, o.prototype.off = o.prototype.removeListener, o.prototype.addListener = o.prototype.on, o.prototype.setMaxListeners = function () { return this }, o.prefixed = l, o.EventEmitter = o, void 0 !== t && (t.exports = o) }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } function a(t) { return t instanceof v.default || t instanceof y.BlockEmbed } Object.defineProperty(e, "__esModule", { value: !0 }); var s = function () { function t(t, e) { var n = [], r = !0, o = !1, i = void 0; try { for (var l, a = t[Symbol.iterator](); !(r = (l = a.next()).done) && (n.push(l.value), !e || n.length !== e); r = !0); } catch (t) { o = !0, i = t } finally { try { !r && a.return && a.return() } finally { if (o) throw i } } return n } return function (e, n) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return t(e, n); throw new TypeError("Invalid attempt to destructure non-iterable instance") } }(), u = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), c = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, f = n(0), h = r(f), p = n(9), d = r(p), y = n(3), v = r(y), b = n(14), g = r(b), m = n(13), _ = r(m), O = n(23), w = r(O), x = function (t) { function e(t, n) { o(this, e); var r = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t)); return r.emitter = n.emitter, Array.isArray(n.whitelist) && (r.whitelist = n.whitelist.reduce(function (t, e) { return t[e] = !0, t }, {})), r.domNode.addEventListener("DOMNodeInserted", function () { }), r.optimize(), r.enable(), r } return l(e, t), u(e, [{ key: "batchStart", value: function () { this.batch = !0 } }, { key: "batchEnd", value: function () { this.batch = !1, this.optimize() } }, { key: "deleteAt", value: function (t, n) { var r = this.line(t), o = s(r, 2), i = o[0], l = o[1], a = this.line(t + n), u = s(a, 1), f = u[0]; if (c(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "deleteAt", this).call(this, t, n), null != f && i !== f && l > 0) { if (i instanceof y.BlockEmbed || f instanceof y.BlockEmbed) return void this.optimize(); if (i instanceof _.default) { var h = i.newlineIndex(i.length(), !0); if (h > -1 && (i = i.split(h + 1)) === f) return void this.optimize() } else if (f instanceof _.default) { var p = f.newlineIndex(0); p > -1 && f.split(p + 1) } var d = f.children.head instanceof g.default ? null : f.children.head; i.moveChildren(f, d), i.remove() } this.optimize() } }, { key: "enable", value: function () { var t = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0]; this.domNode.setAttribute("contenteditable", t) } }, { key: "formatAt", value: function (t, n, r, o) { (null == this.whitelist || this.whitelist[r]) && (c(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "formatAt", this).call(this, t, n, r, o), this.optimize()) } }, { key: "insertAt", value: function (t, n, r) { if (null == r || null == this.whitelist || this.whitelist[n]) { if (t >= this.length()) if (null == r || null == h.default.query(n, h.default.Scope.BLOCK)) { var o = h.default.create(this.statics.defaultChild); this.appendChild(o), null == r && n.endsWith("\n") && (n = n.slice(0, -1)), o.insertAt(0, n, r) } else { var i = h.default.create(n, r); this.appendChild(i) } else c(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "insertAt", this).call(this, t, n, r); this.optimize() } } }, { key: "insertBefore", value: function (t, n) { if (t.statics.scope === h.default.Scope.INLINE_BLOT) { var r = h.default.create(this.statics.defaultChild); r.appendChild(t), t = r } c(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "insertBefore", this).call(this, t, n) } }, { key: "leaf", value: function (t) { return this.path(t).pop() || [null, -1] } }, { key: "line", value: function (t) { return t === this.length() ? this.line(t - 1) : this.descendant(a, t) } }, { key: "lines", value: function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : Number.MAX_VALUE; return function t(e, n, r) { var o = [], i = r; return e.children.forEachAt(n, r, function (e, n, r) { a(e) ? o.push(e) : e instanceof h.default.Container && (o = o.concat(t(e, n, i))), i -= r }), o }(this, t, e) } }, { key: "optimize", value: function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; !0 !== this.batch && (c(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "optimize", this).call(this, t, n), t.length > 0 && this.emitter.emit(d.default.events.SCROLL_OPTIMIZE, t, n)) } }, { key: "path", value: function (t) { return c(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "path", this).call(this, t).slice(1) } }, { key: "update", value: function (t) { if (!0 !== this.batch) { var n = d.default.sources.USER; "string" == typeof t && (n = t), Array.isArray(t) || (t = this.observer.takeRecords()), t.length > 0 && this.emitter.emit(d.default.events.SCROLL_BEFORE_UPDATE, n, t), c(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "update", this).call(this, t.concat([])), t.length > 0 && this.emitter.emit(d.default.events.SCROLL_UPDATE, n, t) } } }]), e }(h.default.Scroll); x.blotName = "scroll", x.className = "ql-editor", x.tagName = "DIV", x.defaultChild = "block", x.allowedChildren = [v.default, y.BlockEmbed, w.default], e.default = x }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e, n) { return e in t ? Object.defineProperty(t, e, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : t[e] = n, t } function i(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function l(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function a(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } function s(t, e, n) { return "object" === (void 0 === e ? "undefined" : x(e)) ? Object.keys(e).reduce(function (t, n) { return s(t, n, e[n]) }, t) : t.reduce(function (t, r) { return r.attributes && r.attributes[e] ? t.push(r) : t.insert(r.insert, (0, j.default)({}, o({}, e, n), r.attributes)) }, new q.default) } function u(t) { if (t.nodeType !== Node.ELEMENT_NODE) return {}; return t["__ql-computed-style"] || (t["__ql-computed-style"] = window.getComputedStyle(t)) } function c(t, e) { for (var n = "", r = t.ops.length - 1; r >= 0 && n.length < e.length; --r) { var o = t.ops[r]; if ("string" != typeof o.insert) break; n = o.insert + n } return n.slice(-1 * e.length) === e } function f(t) { return 0 !== t.childNodes.length && ["block", "list-item"].indexOf(u(t).display) > -1 } function h(t, e, n) { return t.nodeType === t.TEXT_NODE ? n.reduce(function (e, n) { return n(t, e) }, new q.default) : t.nodeType === t.ELEMENT_NODE ? [].reduce.call(t.childNodes || [], function (r, o) { var i = h(o, e, n); return o.nodeType === t.ELEMENT_NODE && (i = e.reduce(function (t, e) { return e(o, t) }, i), i = (o[W] || []).reduce(function (t, e) { return e(o, t) }, i)), r.concat(i) }, new q.default) : new q.default } function p(t, e, n) { return s(n, t, !0) } function d(t, e) { var n = P.default.Attributor.Attribute.keys(t), r = P.default.Attributor.Class.keys(t), o = P.default.Attributor.Style.keys(t), i = {}; return n.concat(r).concat(o).forEach(function (e) { var n = P.default.query(e, P.default.Scope.ATTRIBUTE); null != n && (i[n.attrName] = n.value(t), i[n.attrName]) || (n = Y[e], null == n || n.attrName !== e && n.keyName !== e || (i[n.attrName] = n.value(t) || void 0), null == (n = X[e]) || n.attrName !== e && n.keyName !== e || (n = X[e], i[n.attrName] = n.value(t) || void 0)) }), Object.keys(i).length > 0 && (e = s(e, i)), e } function y(t, e) { var n = P.default.query(t); if (null == n) return e; if (n.prototype instanceof P.default.Embed) { var r = {}, o = n.value(t); null != o && (r[n.blotName] = o, e = (new q.default).insert(r, n.formats(t))) } else "function" == typeof n.formats && (e = s(e, n.blotName, n.formats(t))); return e } function v(t, e) { return c(e, "\n") || e.insert("\n"), e } function b() { return new q.default } function g(t, e) { var n = P.default.query(t); if (null == n || "list-item" !== n.blotName || !c(e, "\n")) return e; for (var r = -1, o = t.parentNode; !o.classList.contains("ql-clipboard");)"list" === (P.default.query(o) || {}).blotName && (r += 1), o = o.parentNode; return r <= 0 ? e : e.compose((new q.default).retain(e.length() - 1).retain(1, { indent: r })) } function m(t, e) { return c(e, "\n") || (f(t) || e.length() > 0 && t.nextSibling && f(t.nextSibling)) && e.insert("\n"), e } function _(t, e) { if (f(t) && null != t.nextElementSibling && !c(e, "\n\n")) { var n = t.offsetHeight + parseFloat(u(t).marginTop) + parseFloat(u(t).marginBottom); t.nextElementSibling.offsetTop > t.offsetTop + 1.5 * n && e.insert("\n") } return e } function O(t, e) { var n = {}, r = t.style || {}; return r.fontStyle && "italic" === u(t).fontStyle && (n.italic = !0), r.fontWeight && (u(t).fontWeight.startsWith("bold") || parseInt(u(t).fontWeight) >= 700) && (n.bold = !0), Object.keys(n).length > 0 && (e = s(e, n)), parseFloat(r.textIndent || 0) > 0 && (e = (new q.default).insert("\t").concat(e)), e } function w(t, e) { var n = t.data; if ("O:P" === t.parentNode.tagName) return e.insert(n.trim()); if (0 === n.trim().length && t.parentNode.classList.contains("ql-clipboard")) return e; if (!u(t.parentNode).whiteSpace.startsWith("pre")) { var r = function (t, e) { return e = e.replace(/[^\u00a0]/g, ""), e.length < 1 && t ? " " : e }; n = n.replace(/\r\n/g, " ").replace(/\n/g, " "), n = n.replace(/\s\s+/g, r.bind(r, !0)), (null == t.previousSibling && f(t.parentNode) || null != t.previousSibling && f(t.previousSibling)) && (n = n.replace(/^\s+/, r.bind(r, !1))), (null == t.nextSibling && f(t.parentNode) || null != t.nextSibling && f(t.nextSibling)) && (n = n.replace(/\s+$/, r.bind(r, !1))) } return e.insert(n) } Object.defineProperty(e, "__esModule", { value: !0 }), e.matchText = e.matchSpacing = e.matchNewline = e.matchBlot = e.matchAttributor = e.default = void 0; var x = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { return typeof t } : function (t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t }, k = function () { function t(t, e) { var n = [], r = !0, o = !1, i = void 0; try { for (var l, a = t[Symbol.iterator](); !(r = (l = a.next()).done) && (n.push(l.value), !e || n.length !== e); r = !0); } catch (t) { o = !0, i = t } finally { try { !r && a.return && a.return() } finally { if (o) throw i } } return n } return function (e, n) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return t(e, n); throw new TypeError("Invalid attempt to destructure non-iterable instance") } }(), E = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), N = n(2), j = r(N), A = n(4), q = r(A), T = n(0), P = r(T), S = n(6), C = r(S), L = n(10), M = r(L), R = n(7), I = r(R), B = n(34), D = n(35), U = n(13), F = r(U), H = n(24), K = n(36), z = n(37), V = n(38), Z = (0, M.default)("quill:clipboard"), W = "__ql-matcher", G = [[Node.TEXT_NODE, w], [Node.TEXT_NODE, m], ["br", v], [Node.ELEMENT_NODE, m], [Node.ELEMENT_NODE, y], [Node.ELEMENT_NODE, _], [Node.ELEMENT_NODE, d], [Node.ELEMENT_NODE, O], ["li", g], ["b", p.bind(p, "bold")], ["i", p.bind(p, "italic")], ["style", b]], Y = [B.AlignAttribute, K.DirectionAttribute].reduce(function (t, e) { return t[e.keyName] = e, t }, {}), X = [B.AlignStyle, D.BackgroundStyle, H.ColorStyle, K.DirectionStyle, z.FontStyle, V.SizeStyle].reduce(function (t, e) { return t[e.keyName] = e, t }, {}), $ = function (t) { function e(t, n) { i(this, e); var r = l(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)); return r.quill.root.addEventListener("paste", r.onPaste.bind(r)), r.container = r.quill.addContainer("ql-clipboard"), r.container.setAttribute("contenteditable", !0), r.container.setAttribute("tabindex", -1), r.matchers = [], G.concat(r.options.matchers).forEach(function (t) { var e = k(t, 2), o = e[0], i = e[1]; (n.matchVisual || i !== _) && r.addMatcher(o, i) }), r } return a(e, t), E(e, [{ key: "addMatcher", value: function (t, e) { this.matchers.push([t, e]) } }, { key: "convert", value: function (t) { if ("string" == typeof t) return this.container.innerHTML = t.replace(/\>\r?\n +\<"), this.convert(); var e = this.quill.getFormat(this.quill.selection.savedRange.index); if (e[F.default.blotName]) { var n = this.container.innerText; return this.container.innerHTML = "", (new q.default).insert(n, o({}, F.default.blotName, e[F.default.blotName])) } var r = this.prepareMatching(), i = k(r, 2), l = i[0], a = i[1], s = h(this.container, l, a); return c(s, "\n") && null == s.ops[s.ops.length - 1].attributes && (s = s.compose((new q.default).retain(s.length() - 1).delete(1))), Z.log("convert", this.container.innerHTML, s), this.container.innerHTML = "", s } }, { key: "dangerouslyPasteHTML", value: function (t, e) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : C.default.sources.API; if ("string" == typeof t) this.quill.setContents(this.convert(t), e), this.quill.setSelection(0, C.default.sources.SILENT); else { var r = this.convert(e); this.quill.updateContents((new q.default).retain(t).concat(r), n), this.quill.setSelection(t + r.length(), C.default.sources.SILENT) } } }, { key: "onPaste", value: function (t) { var e = this; if (!t.defaultPrevented && this.quill.isEnabled()) { var n = this.quill.getSelection(), r = (new q.default).retain(n.index), o = this.quill.scrollingContainer.scrollTop; this.container.focus(), this.quill.selection.update(C.default.sources.SILENT), setTimeout(function () { r = r.concat(e.convert()).delete(n.length), e.quill.updateContents(r, C.default.sources.USER), e.quill.setSelection(r.length() - n.length, C.default.sources.SILENT), e.quill.scrollingContainer.scrollTop = o, e.quill.focus() }, 1) } } }, { key: "prepareMatching", value: function () { var t = this, e = [], n = []; return this.matchers.forEach(function (r) { var o = k(r, 2), i = o[0], l = o[1]; switch (i) { case Node.TEXT_NODE: n.push(l); break; case Node.ELEMENT_NODE: e.push(l); break; default: [].forEach.call(t.container.querySelectorAll(i), function (t) { t[W] = t[W] || [], t[W].push(l) }) } }), [e, n] } }]), e }(I.default); $.DEFAULTS = { matchers: [], matchVisual: !0 }, e.default = $, e.matchAttributor = d, e.matchBlot = y, e.matchNewline = m, e.matchSpacing = _, e.matchText = w }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } function a(t) { var e = t.ops[t.ops.length - 1]; return null != e && (null != e.insert ? "string" == typeof e.insert && e.insert.endsWith("\n") : null != e.attributes && Object.keys(e.attributes).some(function (t) { return null != f.default.query(t, f.default.Scope.BLOCK) })) } function s(t) { var e = t.reduce(function (t, e) { return t += e.delete || 0 }, 0), n = t.length() - e; return a(t) && (n -= 1), n } Object.defineProperty(e, "__esModule", { value: !0 }), e.getLastChangeIndex = e.default = void 0; var u = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), c = n(0), f = r(c), h = n(6), p = r(h), d = n(7), y = r(d), v = function (t) { function e(t, n) { o(this, e); var r = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)); return r.lastRecorded = 0, r.ignoreChange = !1, r.clear(), r.quill.on(p.default.events.EDITOR_CHANGE, function (t, e, n, o) { t !== p.default.events.TEXT_CHANGE || r.ignoreChange || (r.options.userOnly && o !== p.default.sources.USER ? r.transform(e) : r.record(e, n)) }), r.quill.keyboard.addBinding({ key: "Z", shortKey: !0 }, r.undo.bind(r)), r.quill.keyboard.addBinding({ key: "Z", shortKey: !0, shiftKey: !0 }, r.redo.bind(r)), /Win/i.test(navigator.platform) && r.quill.keyboard.addBinding({ key: "Y", shortKey: !0 }, r.redo.bind(r)), r } return l(e, t), u(e, [{ key: "change", value: function (t, e) { if (0 !== this.stack[t].length) { var n = this.stack[t].pop(); this.stack[e].push(n), this.lastRecorded = 0, this.ignoreChange = !0, this.quill.updateContents(n[t], p.default.sources.USER), this.ignoreChange = !1; var r = s(n[t]); this.quill.setSelection(r) } } }, { key: "clear", value: function () { this.stack = { undo: [], redo: [] } } }, { key: "cutoff", value: function () { this.lastRecorded = 0 } }, { key: "record", value: function (t, e) { if (0 !== t.ops.length) { this.stack.redo = []; var n = this.quill.getContents().diff(e), r = Date.now(); if (this.lastRecorded + this.options.delay > r && this.stack.undo.length > 0) { var o = this.stack.undo.pop(); n = n.compose(o.undo), t = o.redo.compose(t) } else this.lastRecorded = r; this.stack.undo.push({ redo: t, undo: n }), this.stack.undo.length > this.options.maxStack && this.stack.undo.shift() } } }, { key: "redo", value: function () { this.change("redo", "undo") } }, { key: "transform", value: function (t) { this.stack.undo.forEach(function (e) { e.undo = t.transform(e.undo, !0), e.redo = t.transform(e.redo, !0) }), this.stack.redo.forEach(function (e) { e.undo = t.transform(e.undo, !0), e.redo = t.transform(e.redo, !0) }) } }, { key: "undo", value: function () { this.change("undo", "redo") } }]), e }(y.default); v.DEFAULTS = { delay: 1e3, maxStack: 100, userOnly: !1 }, e.default = v, e.getLastChangeIndex = s }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }), e.IndentClass = void 0; var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = n(0), u = function (t) { return t && t.__esModule ? t : { default: t } }(s), c = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), l(e, [{ key: "add", value: function (t, n) { if ("+1" === n || "-1" === n) { var r = this.value(t) || 0; n = "+1" === n ? r + 1 : r - 1 } return 0 === n ? (this.remove(t), !0) : a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "add", this).call(this, t, n) } }, { key: "canAdd", value: function (t, n) { return a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "canAdd", this).call(this, t, n) || a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "canAdd", this).call(this, t, parseInt(n)) } }, { key: "value", value: function (t) { return parseInt(a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "value", this).call(this, t)) || void 0 } }]), e }(u.default.Attributor.Class), f = new c("indent", "ql-indent", { scope: u.default.Scope.BLOCK, whitelist: [1, 2, 3, 4, 5, 6, 7, 8] }); e.IndentClass = f }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = n(3), a = function (t) { return t && t.__esModule ? t : { default: t } }(l), s = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), e }(a.default); s.blotName = "blockquote", s.tagName = "blockquote", e.default = s }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = n(3), s = function (t) { return t && t.__esModule ? t : { default: t } }(a), u = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), l(e, null, [{ key: "formats", value: function (t) { return this.tagName.indexOf(t.tagName) + 1 } }]), e }(s.default); u.blotName = "header", u.tagName = ["H1", "H2", "H3", "H4", "H5", "H6"], e.default = u }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e, n) { return e in t ? Object.defineProperty(t, e, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : t[e] = n, t } function i(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function l(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function a(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }), e.default = e.ListItem = void 0; var s = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), u = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, c = n(0), f = r(c), h = n(3), p = r(h), d = n(23), y = r(d), v = function (t) { function e() { return i(this, e), l(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return a(e, t), s(e, [{ key: "format", value: function (t, n) { t !== b.blotName || n ? u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "format", this).call(this, t, n) : this.replaceWith(f.default.create(this.statics.scope)) } }, { key: "remove", value: function () { null == this.prev && null == this.next ? this.parent.remove() : u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "remove", this).call(this) } }, { key: "replaceWith", value: function (t, n) { return this.parent.isolate(this.offset(this.parent), this.length()), t === this.parent.statics.blotName ? (this.parent.replaceWith(t, n), this) : (this.parent.unwrap(), u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "replaceWith", this).call(this, t, n)) } }], [{ key: "formats", value: function (t) { return t.tagName === this.tagName ? void 0 : u(e.__proto__ || Object.getPrototypeOf(e), "formats", this).call(this, t) } }]), e }(p.default); v.blotName = "list-item", v.tagName = "LI"; var b = function (t) { function e(t) { i(this, e); var n = l(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t)), r = function (e) { if (e.target.parentNode === t) { var r = n.statics.formats(t), o = f.default.find(e.target); "checked" === r ? o.format("list", "unchecked") : "unchecked" === r && o.format("list", "checked") } }; return t.addEventListener("touchstart", r), t.addEventListener("mousedown", r), n } return a(e, t), s(e, null, [{ key: "create", value: function (t) { var n = "ordered" === t ? "OL" : "UL", r = u(e.__proto__ || Object.getPrototypeOf(e), "create", this).call(this, n); return "checked" !== t && "unchecked" !== t || r.setAttribute("data-checked", "checked" === t), r } }, { key: "formats", value: function (t) { return "OL" === t.tagName ? "ordered" : "UL" === t.tagName ? t.hasAttribute("data-checked") ? "true" === t.getAttribute("data-checked") ? "checked" : "unchecked" : "bullet" : void 0 } }]), s(e, [{ key: "format", value: function (t, e) { this.children.length > 0 && this.children.tail.format(t, e) } }, { key: "formats", value: function () { return o({}, this.statics.blotName, this.statics.formats(this.domNode)) } }, { key: "insertBefore", value: function (t, n) { if (t instanceof v) u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "insertBefore", this).call(this, t, n); else { var r = null == n ? this.length() : n.offset(this), o = this.split(r); o.parent.insertBefore(t, o) } } }, { key: "optimize", value: function (t) { u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "optimize", this).call(this, t); var n = this.next; null != n && n.prev === this && n.statics.blotName === this.statics.blotName && n.domNode.tagName === this.domNode.tagName && n.domNode.getAttribute("data-checked") === this.domNode.getAttribute("data-checked") && (n.moveChildren(this), n.remove()) } }, { key: "replace", value: function (t) { if (t.statics.blotName !== this.statics.blotName) { var n = f.default.create(this.statics.defaultChild); t.moveChildren(n), this.appendChild(n) } u(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "replace", this).call(this, t) } }]), e }(y.default); b.blotName = "list", b.scope = f.default.Scope.BLOCK_BLOT, b.tagName = ["OL", "UL"], b.defaultChild = "list-item", b.allowedChildren = [v], e.ListItem = v, e.default = b }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = n(39), a = function (t) { return t && t.__esModule ? t : { default: t } }(l), s = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), e }(a.default); s.blotName = "italic", s.tagName = ["EM", "I"], e.default = s }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = n(5), u = function (t) { return t && t.__esModule ? t : { default: t } }(s), c = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), l(e, null, [{ key: "create", value: function (t) { return "super" === t ? document.createElement("sup") : "sub" === t ? document.createElement("sub") : a(e.__proto__ || Object.getPrototypeOf(e), "create", this).call(this, t) } }, { key: "formats", value: function (t) { return "SUB" === t.tagName ? "sub" : "SUP" === t.tagName ? "super" : void 0 } }]), e }(u.default); c.blotName = "script", c.tagName = ["SUB", "SUP"], e.default = c }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = n(5), a = function (t) { return t && t.__esModule ? t : { default: t } }(l), s = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), e }(a.default); s.blotName = "strike", s.tagName = "S", e.default = s }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = n(5), a = function (t) { return t && t.__esModule ? t : { default: t } }(l), s = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), e }(a.default); s.blotName = "underline", s.tagName = "U", e.default = s }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = n(0), u = function (t) { return t && t.__esModule ? t : { default: t } }(s), c = n(15), f = ["alt", "height", "width"], h = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), l(e, [{ key: "format", value: function (t, n) { f.indexOf(t) > -1 ? n ? this.domNode.setAttribute(t, n) : this.domNode.removeAttribute(t) : a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "format", this).call(this, t, n) } }], [{ key: "create", value: function (t) { var n = a(e.__proto__ || Object.getPrototypeOf(e), "create", this).call(this, t); return "string" == typeof t && n.setAttribute("src", this.sanitize(t)), n } }, { key: "formats", value: function (t) { return f.reduce(function (e, n) { return t.hasAttribute(n) && (e[n] = t.getAttribute(n)), e }, {}) } }, { key: "match", value: function (t) { return /\.(jpe?g|gif|png)$/.test(t) || /^data:image\/.+;base64/.test(t) } }, { key: "sanitize", value: function (t) { return (0, c.sanitize)(t, ["http", "https", "data"]) ? t : "//:0" } }, { key: "value", value: function (t) { return t.getAttribute("src") } }]), e }(u.default.Embed); h.blotName = "image", h.tagName = "IMG", e.default = h }, function (t, e, n) { "use strict"; function r(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function o(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function i(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var l = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = n(3), u = n(15), c = function (t) { return t && t.__esModule ? t : { default: t } }(u), f = ["height", "width"], h = function (t) { function e() { return r(this, e), o(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return i(e, t), l(e, [{ key: "format", value: function (t, n) { f.indexOf(t) > -1 ? n ? this.domNode.setAttribute(t, n) : this.domNode.removeAttribute(t) : a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "format", this).call(this, t, n) } }], [{ key: "create", value: function (t) { var n = a(e.__proto__ || Object.getPrototypeOf(e), "create", this).call(this, t); return n.setAttribute("frameborder", "0"), n.setAttribute("allowfullscreen", !0), n.setAttribute("src", this.sanitize(t)), n } }, { key: "formats", value: function (t) { return f.reduce(function (e, n) { return t.hasAttribute(n) && (e[n] = t.getAttribute(n)), e }, {}) } }, { key: "sanitize", value: function (t) { return c.default.sanitize(t) } }, { key: "value", value: function (t) { return t.getAttribute("src") } }]), e }(s.BlockEmbed); h.blotName = "video", h.className = "ql-video", h.tagName = "IFRAME", e.default = h }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }), e.default = e.FormulaBlot = void 0; var a = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), s = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, u = n(33), c = r(u), f = n(6), h = r(f), p = n(7), d = r(p), y = function (t) { function e() { return o(this, e), i(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return l(e, t), a(e, null, [{ key: "create", value: function (t) { var n = s(e.__proto__ || Object.getPrototypeOf(e), "create", this).call(this, t); return "string" == typeof t && (window.katex.render(t, n, { throwOnError: !1, errorColor: "#f00" }), n.setAttribute("data-value", t)), n } }, { key: "value", value: function (t) { return t.getAttribute("data-value") } }]), e }(c.default); y.blotName = "formula", y.className = "ql-formula", y.tagName = "SPAN"; var v = function (t) { function e() { o(this, e); var t = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this)); if (null == window.katex) throw new Error("Formula module requires KaTeX."); return t } return l(e, t), a(e, null, [{ key: "register", value: function () { h.default.register(y, !0) } }]), e }(d.default); e.FormulaBlot = y, e.default = v }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }), e.default = e.CodeToken = e.CodeBlock = void 0; var a = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), s = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, u = n(0), c = r(u), f = n(6), h = r(f), p = n(7), d = r(p), y = n(13), v = r(y), b = function (t) { function e() { return o(this, e), i(this, (e.__proto__ || Object.getPrototypeOf(e)).apply(this, arguments)) } return l(e, t), a(e, [{ key: "replaceWith", value: function (t) { this.domNode.textContent = this.domNode.textContent, this.attach(), s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "replaceWith", this).call(this, t) } }, { key: "highlight", value: function (t) { var e = this.domNode.textContent; this.cachedText !== e && ((e.trim().length > 0 || null == this.cachedText) && (this.domNode.innerHTML = t(e), this.domNode.normalize(), this.attach()), this.cachedText = e) } }]), e }(v.default); b.className = "ql-syntax"; var g = new c.default.Attributor.Class("token", "hljs", { scope: c.default.Scope.INLINE }), m = function (t) { function e(t, n) { o(this, e); var r = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)); if ("function" != typeof r.options.highlight) throw new Error("Syntax module requires highlight.js. Please include the library on the page before Quill."); var l = null; return r.quill.on(h.default.events.SCROLL_OPTIMIZE, function () { clearTimeout(l), l = setTimeout(function () { r.highlight(), l = null }, r.options.interval) }), r.highlight(), r } return l(e, t), a(e, null, [{ key: "register", value: function () { h.default.register(g, !0), h.default.register(b, !0) } }]), a(e, [{ key: "highlight", value: function () { var t = this; if (!this.quill.selection.composing) { this.quill.update(h.default.sources.USER); var e = this.quill.getSelection(); this.quill.scroll.descendants(b).forEach(function (e) { e.highlight(t.options.highlight) }), this.quill.update(h.default.sources.SILENT), null != e && this.quill.setSelection(e, h.default.sources.SILENT) } } }]), e }(d.default); m.DEFAULTS = { highlight: function () { return null == window.hljs ? null : function (t) { return window.hljs.highlightAuto(t).value } }(), interval: 1e3 }, e.CodeBlock = b, e.CodeToken = g, e.default = m }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e, n) { return e in t ? Object.defineProperty(t, e, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : t[e] = n, t } function i(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function l(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function a(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } function s(t, e, n) { var r = document.createElement("button"); r.setAttribute("type", "button"), r.classList.add("ql-" + e), null != n && (r.value = n), t.appendChild(r) } function u(t, e) { Array.isArray(e[0]) || (e = [e]), e.forEach(function (e) { var n = document.createElement("span"); n.classList.add("ql-formats"), e.forEach(function (t) { if ("string" == typeof t) s(n, t); else { var e = Object.keys(t)[0], r = t[e]; Array.isArray(r) ? c(n, e, r) : s(n, e, r) } }), t.appendChild(n) }) } function c(t, e, n) { var r = document.createElement("select"); r.classList.add("ql-" + e), n.forEach(function (t) { var e = document.createElement("option"); !1 !== t ? e.setAttribute("value", t) : e.setAttribute("selected", "selected"), r.appendChild(e) }), t.appendChild(r) } Object.defineProperty(e, "__esModule", { value: !0 }), e.addControls = e.default = void 0; var f = function () { function t(t, e) { var n = [], r = !0, o = !1, i = void 0; try { for (var l, a = t[Symbol.iterator](); !(r = (l = a.next()).done) && (n.push(l.value), !e || n.length !== e); r = !0); } catch (t) { o = !0, i = t } finally { try { !r && a.return && a.return() } finally { if (o) throw i } } return n } return function (e, n) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return t(e, n); throw new TypeError("Invalid attempt to destructure non-iterable instance") } }(), h = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), p = n(4), d = r(p), y = n(0), v = r(y), b = n(6), g = r(b), m = n(10), _ = r(m), O = n(7), w = r(O), x = (0, _.default)("quill:toolbar"), k = function (t) { function e(t, n) { i(this, e); var r = l(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)); if (Array.isArray(r.options.container)) { var o = document.createElement("div"); u(o, r.options.container), t.container.parentNode.insertBefore(o, t.container), r.container = o } else "string" == typeof r.options.container ? r.container = document.querySelector(r.options.container) : r.container = r.options.container; if (!(r.container instanceof HTMLElement)) { var a; return a = x.error("Container required for toolbar", r.options), l(r, a) } return r.container.classList.add("ql-toolbar"), r.controls = [], r.handlers = {}, Object.keys(r.options.handlers).forEach(function (t) { r.addHandler(t, r.options.handlers[t]) }), [].forEach.call(r.container.querySelectorAll("button, select"), function (t) { r.attach(t) }), r.quill.on(g.default.events.EDITOR_CHANGE, function (t, e) { t === g.default.events.SELECTION_CHANGE && r.update(e) }), r.quill.on(g.default.events.SCROLL_OPTIMIZE, function () { var t = r.quill.selection.getRange(), e = f(t, 1), n = e[0]; r.update(n) }), r } return a(e, t), h(e, [{ key: "addHandler", value: function (t, e) { this.handlers[t] = e } }, { key: "attach", value: function (t) { var e = this, n = [].find.call(t.classList, function (t) { return 0 === t.indexOf("ql-") }); if (n) { if (n = n.slice("ql-".length), "BUTTON" === t.tagName && t.setAttribute("type", "button"), null == this.handlers[n]) { if (null != this.quill.scroll.whitelist && null == this.quill.scroll.whitelist[n]) return void x.warn("ignoring attaching to disabled format", n, t); if (null == v.default.query(n)) return void x.warn("ignoring attaching to nonexistent format", n, t) } var r = "SELECT" === t.tagName ? "change" : "click"; t.addEventListener(r, function (r) { var i = void 0; if ("SELECT" === t.tagName) { if (t.selectedIndex < 0) return; var l = t.options[t.selectedIndex]; i = !l.hasAttribute("selected") && (l.value || !1) } else i = !t.classList.contains("ql-active") && (t.value || !t.hasAttribute("value")), r.preventDefault(); e.quill.focus(); var a = e.quill.selection.getRange(), s = f(a, 1), u = s[0]; if (null != e.handlers[n]) e.handlers[n].call(e, i); else if (v.default.query(n).prototype instanceof v.default.Embed) { if (!(i = prompt("Enter " + n))) return; e.quill.updateContents((new d.default).retain(u.index).delete(u.length).insert(o({}, n, i)), g.default.sources.USER) } else e.quill.format(n, i, g.default.sources.USER); e.update(u) }), this.controls.push([n, t]) } } }, { key: "update", value: function (t) { var e = null == t ? {} : this.quill.getFormat(t); this.controls.forEach(function (n) { var r = f(n, 2), o = r[0], i = r[1]; if ("SELECT" === i.tagName) { var l = void 0; if (null == t) l = null; else if (null == e[o]) l = i.querySelector("option[selected]"); else if (!Array.isArray(e[o])) { var a = e[o]; "string" == typeof a && (a = a.replace(/\"/g, '\\"')), l = i.querySelector('option[value="' + a + '"]') } null == l ? (i.value = "", i.selectedIndex = -1) : l.selected = !0 } else if (null == t) i.classList.remove("ql-active"); else if (i.hasAttribute("value")) { var s = e[o] === i.getAttribute("value") || null != e[o] && e[o].toString() === i.getAttribute("value") || null == e[o] && !i.getAttribute("value"); i.classList.toggle("ql-active", s) } else i.classList.toggle("ql-active", null != e[o]) }) } }]), e }(w.default); k.DEFAULTS = {}, k.DEFAULTS = { container: null, handlers: { clean: function () { var t = this, e = this.quill.getSelection(); if (null != e) if (0 == e.length) { var n = this.quill.getFormat(); Object.keys(n).forEach(function (e) { null != v.default.query(e, v.default.Scope.INLINE) && t.quill.format(e, !1) }) } else this.quill.removeFormat(e, g.default.sources.USER) }, direction: function (t) { var e = this.quill.getFormat().align; "rtl" === t && null == e ? this.quill.format("align", "right", g.default.sources.USER) : t || "right" !== e || this.quill.format("align", !1, g.default.sources.USER), this.quill.format("direction", t, g.default.sources.USER) }, indent: function (t) { var e = this.quill.getSelection(), n = this.quill.getFormat(e), r = parseInt(n.indent || 0); if ("+1" === t || "-1" === t) { var o = "+1" === t ? 1 : -1; "rtl" === n.direction && (o *= -1), this.quill.format("indent", r + o, g.default.sources.USER) } }, link: function (t) { !0 === t && (t = prompt("Enter link URL:")), this.quill.format("link", t, g.default.sources.USER) }, list: function (t) { var e = this.quill.getSelection(), n = this.quill.getFormat(e); "check" === t ? "checked" === n.list || "unchecked" === n.list ? this.quill.format("list", !1, g.default.sources.USER) : this.quill.format("list", "unchecked", g.default.sources.USER) : this.quill.format("list", t, g.default.sources.USER) } } }, e.default = k, e.addControls = u }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e) { t.exports = ' ' }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }), e.default = e.BubbleTooltip = void 0; var a = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, s = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), u = n(2), c = r(u), f = n(9), h = r(f), p = n(44), d = r(p), y = n(22), v = n(26), b = r(v), g = [["bold", "italic", "link"], [{ header: 1 }, { header: 2 }, "blockquote"]], m = function (t) { function e(t, n) { o(this, e), null != n.modules.toolbar && null == n.modules.toolbar.container && (n.modules.toolbar.container = g); var r = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)); return r.quill.container.classList.add("ql-bubble"), r } return l(e, t), s(e, [{ key: "extendToolbar", value: function (t) { this.tooltip = new _(this.quill, this.options.bounds), this.tooltip.root.appendChild(t.container), this.buildButtons([].slice.call(t.container.querySelectorAll("button")), b.default), this.buildPickers([].slice.call(t.container.querySelectorAll("select")), b.default) } }]), e }(d.default); m.DEFAULTS = (0, c.default)(!0, {}, d.default.DEFAULTS, { modules: { toolbar: { handlers: { link: function (t) { t ? this.quill.theme.tooltip.edit() : this.quill.format("link", !1) } } } } }); var _ = function (t) { function e(t, n) { o(this, e); var r = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)); return r.quill.on(h.default.events.EDITOR_CHANGE, function (t, e, n, o) { if (t === h.default.events.SELECTION_CHANGE) if (null != e && e.length > 0 && o === h.default.sources.USER) { r.show(), r.root.style.left = "0px", r.root.style.width = "", r.root.style.width = r.root.offsetWidth + "px"; var i = r.quill.getLines(e.index, e.length); if (1 === i.length) r.position(r.quill.getBounds(e)); else { var l = i[i.length - 1], a = r.quill.getIndex(l), s = Math.min(l.length() - 1, e.index + e.length - a), u = r.quill.getBounds(new y.Range(a, s)); r.position(u) } } else document.activeElement !== r.textbox && r.quill.hasFocus() && r.hide() }), r } return l(e, t), s(e, [{ key: "listen", value: function () { var t = this; a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "listen", this).call(this), this.root.querySelector(".ql-close").addEventListener("click", function () { t.root.classList.remove("ql-editing") }), this.quill.on(h.default.events.SCROLL_OPTIMIZE, function () { setTimeout(function () { if (!t.root.classList.contains("ql-hidden")) { var e = t.quill.getSelection(); null != e && t.position(t.quill.getBounds(e)) } }, 1) }) } }, { key: "cancel", value: function () { this.show() } }, { key: "position", value: function (t) { var n = a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "position", this).call(this, t), r = this.root.querySelector(".ql-tooltip-arrow"); if (r.style.marginLeft = "", 0 === n) return n; r.style.marginLeft = -1 * n - r.offsetWidth / 2 + "px" } }]), e }(p.BaseTooltip); _.TEMPLATE = ['', '
    ', '', '', "
    "].join(""), e.BubbleTooltip = _, e.default = m }, function (t, e, n) { "use strict"; function r(t) { return t && t.__esModule ? t : { default: t } } function o(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function i(t, e) { if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? t : e } function l(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) } Object.defineProperty(e, "__esModule", { value: !0 }); var a = function () { function t(t, e) { var n = [], r = !0, o = !1, i = void 0; try { for (var l, a = t[Symbol.iterator](); !(r = (l = a.next()).done) && (n.push(l.value), !e || n.length !== e); r = !0); } catch (t) { o = !0, i = t } finally { try { !r && a.return && a.return() } finally { if (o) throw i } } return n } return function (e, n) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return t(e, n); throw new TypeError("Invalid attempt to destructure non-iterable instance") } }(), s = function t(e, n, r) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, n); if (void 0 === o) { var i = Object.getPrototypeOf(e); return null === i ? void 0 : t(i, n, r) } if ("value" in o) return o.value; var l = o.get; if (void 0 !== l) return l.call(r) }, u = function () { function t(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } return function (e, n, r) { return n && t(e.prototype, n), r && t(e, r), e } }(), c = n(2), f = r(c), h = n(9), p = r(h), d = n(44), y = r(d), v = n(15), b = r(v), g = n(22), m = n(26), _ = r(m), O = [[{ header: ["1", "2", "3", !1] }], ["bold", "italic", "underline", "link"], [{ list: "ordered" }, { list: "bullet" }], ["clean"]], w = function (t) { function e(t, n) { o(this, e), null != n.modules.toolbar && null == n.modules.toolbar.container && (n.modules.toolbar.container = O); var r = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)); return r.quill.container.classList.add("ql-snow"), r } return l(e, t), u(e, [{ key: "extendToolbar", value: function (t) { t.container.classList.add("ql-snow"), this.buildButtons([].slice.call(t.container.querySelectorAll("button")), _.default), this.buildPickers([].slice.call(t.container.querySelectorAll("select")), _.default), this.tooltip = new x(this.quill, this.options.bounds), t.container.querySelector(".ql-link") && this.quill.keyboard.addBinding({ key: "K", shortKey: !0 }, function (e, n) { t.handlers.link.call(t, !n.format.link) }) } }]), e }(y.default); w.DEFAULTS = (0, f.default)(!0, {}, y.default.DEFAULTS, { modules: { toolbar: { handlers: { link: function (t) { if (t) { var e = this.quill.getSelection(); if (null == e || 0 == e.length) return; var n = this.quill.getText(e); /^\S+@\S+\.\S+$/.test(n) && 0 !== n.indexOf("mailto:") && (n = "mailto:" + n); this.quill.theme.tooltip.edit("link", n) } else this.quill.format("link", !1) } } } } }); var x = function (t) { function e(t, n) { o(this, e); var r = i(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t, n)); return r.preview = r.root.querySelector("a.ql-preview"), r } return l(e, t), u(e, [{ key: "listen", value: function () { var t = this; s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "listen", this).call(this), this.root.querySelector("a.ql-action").addEventListener("click", function (e) { t.root.classList.contains("ql-editing") ? t.save() : t.edit("link", t.preview.textContent), e.preventDefault() }), this.root.querySelector("a.ql-remove").addEventListener("click", function (e) { if (null != t.linkRange) { var n = t.linkRange; t.restoreFocus(), t.quill.formatText(n, "link", !1, p.default.sources.USER), delete t.linkRange } e.preventDefault(), t.hide() }), this.quill.on(p.default.events.SELECTION_CHANGE, function (e, n, r) { if (null != e) { if (0 === e.length && r === p.default.sources.USER) { var o = t.quill.scroll.descendant(b.default, e.index), i = a(o, 2), l = i[0], s = i[1]; if (null != l) { t.linkRange = new g.Range(e.index - s, l.length()); var u = b.default.formats(l.domNode); return t.preview.textContent = u, t.preview.setAttribute("href", u), t.show(), void t.position(t.quill.getBounds(t.linkRange)) } } else delete t.linkRange; t.hide() } }) } }, { key: "show", value: function () { s(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "show", this).call(this), this.root.removeAttribute("data-mode") } }]), e }(d.BaseTooltip); x.TEMPLATE = ['', '', '', ''].join(""), e.default = w }]).default }); +//# sourceMappingURL=quill.min.js.map \ No newline at end of file diff --git a/Oqtane.Server/wwwroot/oqtane.ico b/Oqtane.Server/wwwroot/oqtane.ico new file mode 100644 index 00000000..0e569015 Binary files /dev/null and b/Oqtane.Server/wwwroot/oqtane.ico differ diff --git a/Oqtane.Shared/Models/Route.cs b/Oqtane.Shared/Models/Route.cs new file mode 100644 index 00000000..a41d4f46 --- /dev/null +++ b/Oqtane.Shared/Models/Route.cs @@ -0,0 +1,150 @@ +using System; +using Oqtane.Shared; + +namespace Oqtane.Models +{ + /// + /// A route is comprised of multiple components ( some optional depending on context ) + /// {scheme}://{hostname}/{aliaspath}/{pagepath}/*/{moduleid}/{action}/!/{urlparameters}?{query}#{fragment} + /// + public class Route + { + /// + /// default constructor + /// the route parameter can be obtained from NavigationManager.Uri on client or HttpContext.Request.GetEncodedUrl() on server + /// the aliaspath parameter can be obtained from PageState.Alias.Path on client or TenantManager.GetAlias().Path on server + /// + public Route(string route, string aliaspath) + { + Uri uri = new Uri(route); + Authority = uri.Authority; + Scheme = uri.Scheme; + Host = uri.Host; + Port = uri.Port.ToString(); + Query = uri.Query; + Fragment = uri.Fragment; + AbsolutePath = uri.AbsolutePath; + AliasPath = aliaspath; + PagePath = AbsolutePath; + ModuleId = ""; + Action = ""; + UrlParameters = ""; + + if (AliasPath.Length != 0) + { + PagePath = PagePath.Substring(AliasPath.Length + 1); + } + int pos = PagePath.IndexOf("/" + Constants.UrlParametersDelimiter + "/"); + if (pos != -1) + { + UrlParameters = PagePath.Substring(pos + 3); + PagePath = PagePath.Substring(1, pos); + } + pos = PagePath.IndexOf("/" + Constants.ModuleDelimiter + "/"); + if (pos != -1) + { + ModuleId = PagePath.Substring(pos + 3); + PagePath = PagePath.Substring(1, pos); + } + if (ModuleId.Length != 0) + { + pos = ModuleId.IndexOf("/"); + if (pos != -1) + { + Action = ModuleId.Substring(pos + 1); + ModuleId = ModuleId.Substring(0, pos); + } + } + if (PagePath.StartsWith("/")) + { + PagePath = (PagePath.Length == 1) ? "" : PagePath.Substring(1); + } + if (PagePath.EndsWith("/")) + { + PagePath = PagePath.Substring(0, PagePath.Length - 1); + } + } + + /// + /// The host name or IP address and port number (does not include scheme or trailing slash) + /// + public string Authority { get; set; } + + /// + /// A fully qualified route contains a scheme (ie. http, https ) + /// + public string Scheme { get; set; } + + /// + /// A fully qualified route contains a host name. The host name may include a port number. + /// + public string Host { get; set; } + + /// + /// A host name may contain a port number + /// + public string Port { get; set; } + + /// + /// The absolute path for the route + /// + public string AbsolutePath { get; set; } + + /// + /// An absolute path may contain an alias path + /// + public string AliasPath { get; set; } + + /// + /// A absolute path may contain a page path. + /// + public string PagePath { get; set; } + + /// + /// A route may contain a module id (ie. when created using EditUrl) located after the module delimiter segment (/*/). + /// + public string ModuleId { get; set; } + + /// + /// A route may contain an action (ie. when created using EditUrl) located after the module id. + /// + public string Action { get; set; } + + /// + /// A route may contain parameters located after the url parameter delimiter segment (/!/). + /// + public string UrlParameters { get; set; } + + /// + /// A route may contain querystring parameters located after the ? delimiter + /// + public string Query { get; set; } + + /// + /// A route may contain a fragment located after the # delimiter + /// + public string Fragment { get; set; } + + /// + /// The root url contains the resource identifier for the root of an Oqtane installation ( including scheme ) + /// + public string RootUrl + { + get + { + return Scheme + "://" + Authority; + } + } + + /// + /// The site url contains the resource identifier for the home page of a specific Oqtane site ( including scheme and possibly an alias path ) + /// + public string SiteUrl + { + get + { + return Scheme + "://" + Authority + ((!string.IsNullOrEmpty(AliasPath)) ? "/" + AliasPath : ""); + } + } + } +} diff --git a/Oqtane.Shared/Models/Site.cs b/Oqtane.Shared/Models/Site.cs index 5ccf11d0..eb7682a2 100644 --- a/Oqtane.Shared/Models/Site.cs +++ b/Oqtane.Shared/Models/Site.cs @@ -49,10 +49,20 @@ namespace Oqtane.Models public int? PwaSplashIconFileId { get; set; } /// - /// Determines if users may register / create accounts + /// Determines if visitors may register / create user accounts /// public bool AllowRegistration { get; set; } + /// + /// Determines if visitors will be tracked + /// + public bool VisitorTracking { get; set; } + + /// + /// Determines if broken urls (404s) will be captured automatically + /// + public bool CaptureBrokenUrls { get; set; } + /// /// Unique GUID to identify the Site. /// diff --git a/Oqtane.Shared/Models/UrlMapping.cs b/Oqtane.Shared/Models/UrlMapping.cs new file mode 100644 index 00000000..b5a15384 --- /dev/null +++ b/Oqtane.Shared/Models/UrlMapping.cs @@ -0,0 +1,47 @@ +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Oqtane.Models +{ + /// + /// Describes a UrlMapping in Oqtane. + /// + public class UrlMapping + { + /// + /// ID of this UrlMapping. + /// + public int UrlMappingId { get; set; } + + /// + /// Reference to a + /// + public int SiteId { get; set; } + + /// + /// A fully quaified Url + /// + public string Url { get; set; } + + /// + /// A Url the visitor will be redirected to + /// + public string MappedUrl { get; set; } + + /// + /// Number of requests all time for the url + /// + public int Requests { get; set; } + + /// + /// Date when the url was first requested for the site + /// + public DateTime CreatedOn { get; set; } + + /// + /// Date when the url was last requested for the site + /// + public DateTime RequestedOn { get; set; } + + } +} diff --git a/Oqtane.Shared/Models/Visitor.cs b/Oqtane.Shared/Models/Visitor.cs new file mode 100644 index 00000000..8c349246 --- /dev/null +++ b/Oqtane.Shared/Models/Visitor.cs @@ -0,0 +1,71 @@ +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Oqtane.Models +{ + /// + /// Describes a Visitor in Oqtane. + /// + public class Visitor + { + /// + /// ID of this Visitor. + /// + public int VisitorId { get; set; } + + /// + /// Reference to a + /// + public int SiteId { get; set; } + + /// + /// Reference to a if applicable + /// + public int? UserId { get; set; } + + /// + /// Number of times a visitor has visited a site + /// + public int Visits { get; set; } + + /// + /// Last recorded IP Address of visitor + /// + public string IPAddress { get; set; } + + /// + /// Last recorded user agent of visitor + /// + public string UserAgent { get; set; } + + /// + /// Last recorded language of visitor + /// + public string Language { get; set; } + + /// + /// Last recorded Url of visitor + /// + public string Url { get; set; } + + /// + /// Last recorded Referrer of visitor + /// + public string Referrer { get; set; } + + /// + /// Date the visitor first visited the site + /// + public DateTime CreatedOn { get; set; } + + /// + /// Date the visitor last visited the site + /// + public DateTime VisitedOn { get; set; } + + /// + /// Direct reference to the object (if applicable) + /// + public User User { get; set; } + } +} diff --git a/Oqtane.Shared/Modules/HtmlText/Models/HtmlText.cs b/Oqtane.Shared/Modules/HtmlText/Models/HtmlText.cs index 25efbb23..988fc8bc 100644 --- a/Oqtane.Shared/Modules/HtmlText/Models/HtmlText.cs +++ b/Oqtane.Shared/Modules/HtmlText/Models/HtmlText.cs @@ -2,9 +2,11 @@ using System; using Oqtane.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using Oqtane.Documentation; namespace Oqtane.Modules.HtmlText.Models { + [PrivateApi("Mark HtmlText classes as private, since it's not very useful in the public docs")] public class HtmlText : IAuditable { [Key] diff --git a/Oqtane.Shared/Oqtane.Shared.csproj b/Oqtane.Shared/Oqtane.Shared.csproj index 44e525ab..95e24196 100644 --- a/Oqtane.Shared/Oqtane.Shared.csproj +++ b/Oqtane.Shared/Oqtane.Shared.csproj @@ -3,7 +3,7 @@ net6.0 Debug;Release - 3.0.0 + 3.0.1 Oqtane Shaun Walker .NET Foundation @@ -11,7 +11,7 @@ .NET Foundation https://www.oqtane.org https://github.com/oqtane/oqtane.framework/blob/dev/LICENSE - https://github.com/oqtane/oqtane.framework/releases/tag/v3.0.0 + https://github.com/oqtane/oqtane.framework/releases/tag/v3.0.1 https://github.com/oqtane/oqtane.framework Git Oqtane @@ -22,7 +22,7 @@ - + diff --git a/Oqtane.Shared/Shared/Constants.cs b/Oqtane.Shared/Shared/Constants.cs index 9a2c19cc..eef3e4e1 100644 --- a/Oqtane.Shared/Shared/Constants.cs +++ b/Oqtane.Shared/Shared/Constants.cs @@ -3,8 +3,8 @@ using System; namespace Oqtane.Shared { public class Constants { - public static readonly string Version = "3.0.0"; - public const string ReleaseVersions = "1.0.0,1.0.1,1.0.2,1.0.3,1.0.4,2.0.0,2.0.1,2.0.2,2.1.0,2.2.0,2.3.0,2.3.1,3.0.0"; + public static readonly string Version = "3.0.1"; + public const string ReleaseVersions = "1.0.0,1.0.1,1.0.2,1.0.3,1.0.4,2.0.0,2.0.1,2.0.2,2.1.0,2.2.0,2.3.0,2.3.1,3.0.0,3.0.1"; public const string PackageId = "Oqtane.Framework"; public const string UpdaterPackageId = "Oqtane.Updater"; public const string PackageRegistryUrl = "https://www.oqtane.net"; diff --git a/Oqtane.Shared/Shared/EntityNames.cs b/Oqtane.Shared/Shared/EntityNames.cs index 345267f3..2a31e76d 100644 --- a/Oqtane.Shared/Shared/EntityNames.cs +++ b/Oqtane.Shared/Shared/EntityNames.cs @@ -1,4 +1,4 @@ -namespace Oqtane.Shared +namespace Oqtane.Shared { public class EntityNames { @@ -10,5 +10,7 @@ public const string Page = "Page"; public const string Folder = "Folder"; public const string User = "User"; + public const string Visitor = "Visitor"; + public const string Host = "Host"; } } diff --git a/Oqtane.Shared/Shared/Utilities.cs b/Oqtane.Shared/Shared/Utilities.cs index aee8b568..1ac3f900 100644 --- a/Oqtane.Shared/Shared/Utilities.cs +++ b/Oqtane.Shared/Shared/Utilities.cs @@ -113,9 +113,14 @@ namespace Oqtane.Shared } public static string ImageUrl(Alias alias, int fileId, int width, int height, string mode) + { + return ImageUrl(alias, fileId, width, height, mode, 0); + } + + public static string ImageUrl(Alias alias, int fileId, int width, int height, string mode, int rotate) { var aliasUrl = (alias != null && !string.IsNullOrEmpty(alias.Path)) ? "/" + alias.Path : ""; - return $"{aliasUrl}{Constants.ImageUrl}{fileId}/{width}/{height}/{mode}"; + return $"{aliasUrl}{Constants.ImageUrl}{fileId}/{width}/{height}/{mode}/{rotate}"; } public static string TenantUrl(Alias alias, string url) diff --git a/Oqtane.Test/Oqtane.Test.csproj b/Oqtane.Test/Oqtane.Test.csproj index d13f54e3..30553a83 100644 --- a/Oqtane.Test/Oqtane.Test.csproj +++ b/Oqtane.Test/Oqtane.Test.csproj @@ -1,9 +1,9 @@ - + net6.0 Debug;Release - 3.0.0 + 3.0.1 Oqtane Shaun Walker .NET Foundation @@ -11,7 +11,7 @@ .NET Foundation https://www.oqtane.org https://github.com/oqtane/oqtane.framework/blob/dev/LICENSE - https://github.com/oqtane/oqtane.framework/releases/tag/v3.0.0 + https://github.com/oqtane/oqtane.framework/releases/tag/v3.0.1 https://github.com/oqtane/oqtane.framework Git Oqtane diff --git a/Oqtane.Updater/Oqtane.Updater.csproj b/Oqtane.Updater/Oqtane.Updater.csproj index 37436cc5..9d069c0a 100644 --- a/Oqtane.Updater/Oqtane.Updater.csproj +++ b/Oqtane.Updater/Oqtane.Updater.csproj @@ -3,7 +3,7 @@ net6.0 Exe - 3.0.0 + 3.0.1 Oqtane Shaun Walker .NET Foundation @@ -11,7 +11,7 @@ .NET Foundation https://www.oqtane.org https://github.com/oqtane/oqtane.framework/blob/dev/LICENSE - https://github.com/oqtane/oqtane.framework/releases/tag/v3.0.0 + https://github.com/oqtane/oqtane.framework/releases/tag/v3.0.1 https://github.com/oqtane/oqtane.framework Git Oqtane diff --git a/README.md b/README.md index a97d13e4..03a987a4 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ V.3.1.0 ( Q4 2021 ) - [ ] Authentication extensibility via Social logins / Azure B2C - [ ] Allow configuration of password complexity for local authentication -V.3.0.0 ( Nov 10, 2021 ) +V.3.0.0 ( Nov 11, 2021 ) - [x] Migration to .NET 6 - [x] Blazor hosting model flexibility per site - [x] Blazor WebAssembly prerendering support @@ -129,9 +129,12 @@ V.1.0.0 ( May 19, 2020 - released in conjunction with .NET Core 3.2 ) - [x] Dynamic CSS/Lazy Loading # Background -Oqtane was created by [Shaun Walker](https://www.linkedin.com/in/shaunbrucewalker/) and is inspired by the DotNetNuke web application framework. Initially created as a proof of concept, Oqtane is a native Blazor application written from the ground up using modern .NET Core technology and a Single Page Application (SPA) architecture. It is a modular application framework offering a fully dynamic page compositing model, multi-site support, designer friendly templates (skins), and extensibility via third party modules. +Oqtane was created by [Shaun Walker](https://www.linkedin.com/in/shaunbrucewalker/) and is inspired by the DotNetNuke web application framework. Initially created as a proof of concept, Oqtane is a native Blazor application written from the ground up using modern .NET Core technology and a Single Page Application (SPA) architecture. It is a modular application framework offering a fully dynamic page compositing model, multi-site support, designer friendly themes, and extensibility via third party modules. # Release Announcements + +[Oqtane 3.0](https://www.oqtane.org/Resources/Blog/PostId/551/announcing-oqtane-30-for-net-6) + [Oqtane 2.2](https://www.oqtane.org/Resources/Blog/PostId/549/oqtane-22-upgrades-to-bootstrap-5) [Oqtane 2.1](https://www.oqtane.org/Resources/Blog/PostId/548/oqtane-21-now-supports-multiple-databases)