diff --git a/Daybreak/Controls/ChromiumBrowserWrapper.xaml.cs b/Daybreak/Controls/ChromiumBrowserWrapper.xaml.cs index e7c29cca..86a04ff1 100644 --- a/Daybreak/Controls/ChromiumBrowserWrapper.xaml.cs +++ b/Daybreak/Controls/ChromiumBrowserWrapper.xaml.cs @@ -155,7 +155,10 @@ private async Task InitializeBrowser() this.WebBrowser.WebMessageReceived += this.CoreWebView2_WebMessageReceived; this.WebBrowser.CoreWebView2.Settings.AreDevToolsEnabled = false; this.WebBrowser.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false; - await this.WebBrowser.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(Scripts.AlterContextMenu); + if (this.CanDownloadBuild) + { + await this.WebBrowser.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(Scripts.SendSelectionOnContextMenu); + } } } @@ -211,12 +214,17 @@ private void CoreWebView2_WebMessageReceived(object sender, CoreWebView2WebMessa if (payload?.Key == BrowserPayload.PayloadKeys.ContextMenu) { var contextMenuPayload = args.WebMessageAsJson.Deserialize>(); - if (this.CanDownloadBuild is false) + var maybeTemplate = contextMenuPayload.Value.Selection; + if (string.IsNullOrWhiteSpace(maybeTemplate)) + { + return; + } + + if (this.buildTemplateManager.IsTemplate(maybeTemplate) is false) { return; } - var maybeTemplate = contextMenuPayload.Value.Selection; Task.Run(() => { try diff --git a/Daybreak/Daybreak.csproj b/Daybreak/Daybreak.csproj index 35ba3c8e..51cdf9ad 100644 --- a/Daybreak/Daybreak.csproj +++ b/Daybreak/Daybreak.csproj @@ -9,17 +9,17 @@ false preview Daybreak.ico - 0.7.1 + 0.7.2 app.manifest - - + + - + diff --git a/Daybreak/Models/Builds/Attribute.cs b/Daybreak/Models/Builds/Attribute.cs index 154cac5d..51763b2c 100644 --- a/Daybreak/Models/Builds/Attribute.cs +++ b/Daybreak/Models/Builds/Attribute.cs @@ -89,6 +89,7 @@ public sealed class Attribute Motivation, Leadership, ScytheMastery, + EarthPrayers, WindPrayers, EarthMagic, Mysticism diff --git a/Daybreak/Services/BuildTemplates/BuildTemplateManager.cs b/Daybreak/Services/BuildTemplates/BuildTemplateManager.cs index b6003c3b..e8f9b5af 100644 --- a/Daybreak/Services/BuildTemplates/BuildTemplateManager.cs +++ b/Daybreak/Services/BuildTemplates/BuildTemplateManager.cs @@ -24,6 +24,21 @@ public BuildTemplateManager( this.logger = logger.ThrowIfNull(nameof(logger)); } + public bool IsTemplate(string template) + { + if (template.IsNullOrWhiteSpace()) + { + return false; + } + + if (template.Where(c => DecodingLookupTable.Contains(c) is false).Any()) + { + return false; + } + + return true; + } + public BuildEntry CreateBuild() { var emptyBuild = new Build(); diff --git a/Daybreak/Services/BuildTemplates/IBuildTemplateManager.cs b/Daybreak/Services/BuildTemplates/IBuildTemplateManager.cs index 16d5ee8c..8e10ca34 100644 --- a/Daybreak/Services/BuildTemplates/IBuildTemplateManager.cs +++ b/Daybreak/Services/BuildTemplates/IBuildTemplateManager.cs @@ -5,6 +5,7 @@ namespace Daybreak.Services.BuildTemplates { public interface IBuildTemplateManager { + bool IsTemplate(string template); BuildEntry CreateBuild(); BuildEntry CreateBuild(string name); void SaveBuild(BuildEntry buildEntry); diff --git a/Daybreak/Utils/Scripts.cs b/Daybreak/Utils/Scripts.cs index c99f79e4..cf7aa2e7 100644 --- a/Daybreak/Utils/Scripts.cs +++ b/Daybreak/Utils/Scripts.cs @@ -2,17 +2,21 @@ { public static class Scripts { - public const string AlterContextMenu = @" + public const string SendSelectionOnContextMenu = @" document.addEventListener('contextmenu', function (event) { var text = ''; - if (window.getSelection) + var activeEl = document.activeElement; + var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null; + if ((activeElTagName == 'textarea') || (activeElTagName == 'input' && + /^(?:text|search|password|tel|url)$/i.test(activeEl.type)) && + (typeof activeEl.selectionStart == 'number')) { - text = window.getSelection().toString(); - } - else if (document.selection && document.selection.type != 'Control') + text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd); + } + else if (window.getSelection) { - text = document.selection.createRange().text; + text = window.getSelection().toString(); } let jsonObject =