using Gestor.Application.Properties;
using HtmlAgilityPack;
using mshtml;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Net;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Markup;
using System.Windows.Navigation;
using System.Windows.Threading;
namespace Gestor.Application.Componentes
{
public class WebBrowser : UserControl, IComponentConnector
{
public HTMLDocument HtmlDocument;
public System.Windows.Controls.WebBrowser Browser;
public readonly static DependencyProperty IsReadOnlyProperty;
internal Grid GridWebBrowser;
private bool _contentLoaded;
public bool IsReadOnly
{
get
{
return (bool)base.GetValue(Gestor.Application.Componentes.WebBrowser.IsReadOnlyProperty);
}
set
{
base.SetValue(Gestor.Application.Componentes.WebBrowser.IsReadOnlyProperty, value);
}
}
static WebBrowser()
{
Gestor.Application.Componentes.WebBrowser.IsReadOnlyProperty = DependencyProperty.Register("IsReadOnly", typeof(bool), typeof(Gestor.Application.Componentes.WebBrowser), new PropertyMetadata(false));
}
public WebBrowser()
{
this.InitializeComponent();
System.Windows.Threading.Dispatcher dispatcher = base.Dispatcher;
if (dispatcher == null)
{
return;
}
dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(this.ContentLoad));
}
private void Browser_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (this.IsReadOnly)
{
e.Handled = true;
}
}
private void Completed(object sender, NavigationEventArgs e)
{
this.HtmlDocument = this.Browser.Document as HTMLDocument;
if (this.HtmlDocument == null)
{
return;
}
this.HtmlDocument.designMode = "On";
}
private void ContentLoad()
{
base.PreviewKeyDown += new KeyEventHandler(this.Browser_PreviewKeyDown);
}
private static void EncodeNode(HtmlNode node)
{
if (node.get_HasChildNodes())
{
foreach (HtmlNode childNode in node.get_ChildNodes())
{
if (childNode.get_NodeType() != 3)
{
Gestor.Application.Componentes.WebBrowser.EncodeNode(childNode);
}
else
{
childNode.set_InnerHtml(WebUtility.HtmlEncode(childNode.get_InnerHtml()));
}
}
}
else if (node.get_NodeType() == 3)
{
node.set_InnerHtml(WebUtility.HtmlEncode(node.get_InnerHtml()));
}
}
private void HideScriptErrors()
{
FieldInfo field = typeof(Gestor.Application.Componentes.WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
if (field == null)
{
return;
}
object value = field.GetValue(this.Browser);
if (value != null)
{
value.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, value, new object[] { true });
}
}
public static string HtmlEncode(string html)
{
if (html == null)
{
return null;
}
HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument();
htmlDocument.LoadHtml(html);
htmlDocument.OptionWriteEmptyNodes = true;
Gestor.Application.Componentes.WebBrowser.EncodeNode(htmlDocument.get_DocumentNode());
return htmlDocument.get_DocumentNode().get_InnerHtml();
}
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
public void InitializeComponent()
{
if (this._contentLoaded)
{
return;
}
this._contentLoaded = true;
System.Windows.Application.LoadComponent(this, new Uri("/Gestor.Application;component/componentes/webbrowser.xaml", UriKind.Relative));
}
public void InstanciateNew(string htmlData = null)
{
if (this.Browser != null)
{
this.Browser.LoadCompleted -= new LoadCompletedEventHandler(this.Completed);
this.Browser.Dispose();
this.GridWebBrowser.Children.Remove(this.Browser);
}
HTMLDocument htmlDocument = this.HtmlDocument;
if (htmlDocument != null)
{
htmlDocument.clear();
}
else
{
}
this.Browser = new System.Windows.Controls.WebBrowser()
{
IsEnabled = true
};
this.Browser.LoadCompleted += new LoadCompletedEventHandler(this.Completed);
this.GridWebBrowser.Children.Add(this.Browser);
this.HideScriptErrors();
htmlData = Gestor.Application.Componentes.WebBrowser.HtmlEncode(htmlData);
this.Browser.NavigateToString((string.IsNullOrEmpty(htmlData) ? Gestor.Application.Properties.Resources.New : htmlData));
this.HtmlDocument = this.Browser.Document as HTMLDocument;
if (this.HtmlDocument == null)
{
return;
}
this.HtmlDocument.charset = "ISO-8859-1";
this.HtmlDocument.designMode = "On";
}
public void ReadOnly(bool isReadOnly)
{
this.IsReadOnly = isReadOnly;
}
[DebuggerNonUserCode]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target)
{
if (connectionId != 1)
{
this._contentLoaded = true;
return;
}
this.GridWebBrowser = (Grid)target;
}
}
}