Skip to content

Commit 94be645

Browse files
committed
Updated to AngleSharp v0.9.7
1 parent 1a8f631 commit 94be645

File tree

14 files changed

+108
-69
lines changed

14 files changed

+108
-69
lines changed

src/AngleSharp.Scripting.JavaScript.Generator/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414
[assembly: Guid("c8c0eeaf-0cd3-459d-8321-bee7c7a673c0")]
1515
[assembly: AssemblyVersion("0.1.0")]
1616
[assembly: AssemblyFileVersion("0.1.0")]
17-
[assembly: InternalsVisibleToAttribute("AngleSharp.Scripting.JavaScript.Tests")]
17+
[assembly: InternalsVisibleToAttribute("AngleSharp.Scripting.JavaScript.Generator.Tests")]

src/AngleSharp.Scripting.JavaScript/AngleSharp.Scripting.JavaScript.csproj

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2+
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
44
<PropertyGroup>
55
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -9,6 +9,8 @@
99
<AppDesignerFolder>Properties</AppDesignerFolder>
1010
<RootNamespace>AngleSharp.Scripting.JavaScript</RootNamespace>
1111
<AssemblyName>AngleSharp.Scripting.JavaScript</AssemblyName>
12+
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
13+
<TargetFrameworkProfile>Profile259</TargetFrameworkProfile>
1214
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
1315
<FileAlignment>512</FileAlignment>
1416
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
@@ -32,8 +34,8 @@
3234
<DocumentationFile>bin\Release\AngleSharp.Scripting.JavaScript.xml</DocumentationFile>
3335
</PropertyGroup>
3436
<ItemGroup>
35-
<Reference Include="AngleSharp, Version=0.9.7.86, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL">
36-
<HintPath>..\packages\AngleSharp.0.9.7\lib\net45\AngleSharp.dll</HintPath>
37+
<Reference Include="AngleSharp, Version=0.9.7.82, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL">
38+
<HintPath>..\packages\AngleSharp.0.9.7\lib\portable-windows8+net45+windowsphone8+wpa+monoandroid+monotouch\AngleSharp.dll</HintPath>
3739
<Private>True</Private>
3840
</Reference>
3941
<Reference Include="Jint, Version=2.7.1.0, Culture=neutral, PublicKeyToken=2e92ba9c8d81157f, processorArchitecture=MSIL">
@@ -44,14 +46,12 @@
4446
<Reference Include="System.Core" />
4547
<Reference Include="System.Net" />
4648
<Reference Include="System.Xml.Linq" />
47-
<Reference Include="System.Data.DataSetExtensions" />
4849
<Reference Include="Microsoft.CSharp" />
49-
<Reference Include="System.Data" />
5050
<Reference Include="System.Xml" />
5151
</ItemGroup>
5252
<ItemGroup>
5353
<Compile Include="Attributes\DomInstanceAttribute.cs" />
54-
<Compile Include="ConfigurationExtensions.cs" />
54+
<Compile Include="JsConfigurationExtensions.cs" />
5555
<Compile Include="ConsoleInstance.cs" />
5656
<Compile Include="DomConstructorInstance.cs" />
5757
<Compile Include="DomConstructors.cs" />
@@ -73,12 +73,13 @@
7373
<Compile Include="Extensions.cs" />
7474
<Compile Include="JavaScriptEngine.cs" />
7575
<Compile Include="Properties\AssemblyInfo.cs" />
76+
<Compile Include="Services\IConsoleLogger.cs" />
7677
<Compile Include="Services\JavaScriptProvider.cs" />
7778
<Compile Include="SystemTypeConverter.cs" />
7879
<Compile Include="UnresolvedConverter.cs" />
7980
</ItemGroup>
8081
<ItemGroup>
8182
<None Include="packages.config" />
8283
</ItemGroup>
83-
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
84+
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
8485
</Project>

src/AngleSharp.Scripting.JavaScript/ConsoleInstance.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,34 @@
44
using Jint.Native;
55
using Jint.Native.Object;
66
using Jint.Runtime.Interop;
7+
using Services;
78
using System;
89

910
sealed class ConsoleInstance : ObjectInstance
1011
{
11-
public ConsoleInstance(Engine engine)
12+
private readonly IConsoleLogger _logger;
13+
14+
public ConsoleInstance(Engine engine, IConsoleLogger logger)
1215
: base(engine)
1316
{
14-
Action<Object> log = obj => Console.WriteLine(obj);
17+
_logger = logger;
1518
FastAddProperty("log", new ClrFunctionInstance(engine, Log), false, false, false);
1619
}
1720

1821
JsValue Log(JsValue ctx, JsValue[] args)
1922
{
20-
var strs = new String[args.Length];
21-
22-
for (var i = 0; i < args.Length; i++)
23+
if (_logger != null)
2324
{
24-
strs[i] = args[i].ToString();
25+
var objs = new Object[args.Length];
26+
27+
for (var i = 0; i < args.Length; i++)
28+
{
29+
objs[i] = args[i].FromJsValue();
30+
}
31+
32+
_logger.Log(objs);
2533
}
2634

27-
Console.WriteLine(String.Join(", ", strs));
2835
return JsValue.Undefined;
2936
}
3037
}

src/AngleSharp.Scripting.JavaScript/Dom/Navigator.cs

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
{
33
using AngleSharp.Dom.Navigator;
44
using System;
5-
using System.Linq;
65
using System.Net.NetworkInformation;
76

87
sealed class Navigator : INavigator
@@ -14,7 +13,7 @@ public String Name
1413

1514
public String Platform
1615
{
17-
get { return Environment.OSVersion.VersionString; }
16+
get { return String.Empty; }
1817
}
1918

2019
public String UserAgent
@@ -59,29 +58,7 @@ public void WaitForStorageUpdates()
5958

6059
public Boolean IsOnline
6160
{
62-
get
63-
{
64-
if (NetworkInterface.GetIsNetworkAvailable())
65-
{
66-
var adapters = NetworkInterface.GetAllNetworkInterfaces().Where(m => m.OperationalStatus == OperationalStatus.Up);
67-
68-
foreach (var adapter in adapters)
69-
{
70-
if (adapter.NetworkInterfaceType != NetworkInterfaceType.Tunnel &&
71-
adapter.NetworkInterfaceType != NetworkInterfaceType.Loopback)
72-
{
73-
var statistic = adapter.GetIPv4Statistics();
74-
75-
if (statistic.BytesReceived > 0 && statistic.BytesSent > 0)
76-
{
77-
return true;
78-
}
79-
}
80-
}
81-
}
82-
83-
return false;
84-
}
61+
get { return NetworkInterface.GetIsNetworkAvailable(); }
8562
}
8663
}
8764
}

src/AngleSharp.Scripting.JavaScript/DomConstructors.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
using Jint.Native.Function;
44
using Jint.Native.Object;
5+
using System.Reflection;
56

67
partial class DomConstructors
78
{
@@ -26,12 +27,12 @@ public void Configure()
2627

2728
public void AttachConstructors(ObjectInstance obj)
2829
{
29-
var constructors = GetType().GetProperties();
30+
var properties = GetType().GetTypeInfo().DeclaredProperties;
3031

31-
foreach (var constructor in constructors)
32+
foreach (var property in properties)
3233
{
33-
var func = constructor.GetValue(this) as FunctionInstance;
34-
obj.FastAddProperty(constructor.Name, func, true, false, true);
34+
var func = property.GetValue(this) as FunctionInstance;
35+
obj.FastAddProperty(property.Name, func, true, false, true);
3536
}
3637
}
3738

src/AngleSharp.Scripting.JavaScript/DomDelegates.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,21 @@
66
using System;
77
using System.Linq;
88
using System.Linq.Expressions;
9+
using System.Reflection;
910

1011
static class DomDelegates
1112
{
13+
private static readonly Type[] ToCallbackSignature = new[] { typeof(FunctionInstance), typeof(EngineInstance) };
14+
private static readonly Type[] ToJsValueSignature = new[] { typeof(Object), typeof(EngineInstance) };
15+
1216
public static Delegate ToDelegate(this Type type, FunctionInstance function, EngineInstance engine)
1317
{
1418
if (type == typeof(DomEventHandler))
1519
{
1620
return function.ToListener(engine);
1721
}
1822

19-
var method = typeof(DomDelegates).GetMethod("ToCallback").MakeGenericMethod(type);
23+
var method = typeof(DomDelegates).GetRuntimeMethod("ToCallback", ToCallbackSignature).MakeGenericMethod(type);
2024
return method.Invoke(null, new Object[] { function, engine }) as Delegate;
2125
}
2226

@@ -31,8 +35,8 @@ public static DomEventHandler ToListener(this FunctionInstance function, EngineI
3135
public static T ToCallback<T>(this FunctionInstance function, EngineInstance engine)
3236
{
3337
var type = typeof(T);
34-
var methodInfo = type.GetMethod("Invoke");
35-
var convert = typeof(Extensions).GetMethod("ToJsValue");
38+
var methodInfo = type.GetRuntimeMethods().First(m => m.Name == "Invoke");
39+
var convert = typeof(Extensions).GetRuntimeMethod("ToJsValue", ToJsValueSignature);
3640
var mps = methodInfo.GetParameters();
3741
var parameters = new ParameterExpression[mps.Length];
3842

src/AngleSharp.Scripting.JavaScript/DomNodeInstance.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,12 @@ public override PropertyDescriptor GetOwnProperty(String propertyName)
9595
void SetAllMembers()
9696
{
9797
var type = _type;
98-
var types = new List<Type>(type.GetInterfaces());
98+
var types = new List<Type>(type.GetTypeInfo().ImplementedInterfaces);
9999

100100
do
101101
{
102102
types.Add(type);
103-
type = type.BaseType;
103+
type = type.GetTypeInfo().BaseType;
104104
}
105105
while (type != null);
106106

@@ -111,13 +111,14 @@ void SetMembers(IEnumerable<Type> types)
111111
{
112112
foreach (var type in types)
113113
{
114-
SetProperties(type.GetProperties());
115-
SetMethods(type.GetMethods());
116-
SetEvents(type.GetEvents());
114+
var typeInfo = type.GetTypeInfo();
115+
SetProperties(typeInfo.DeclaredProperties);
116+
SetMethods(typeInfo.DeclaredMethods);
117+
SetEvents(typeInfo.DeclaredEvents);
117118
}
118119
}
119120

120-
void SetEvents(EventInfo[] eventInfos)
121+
void SetEvents(IEnumerable<EventInfo> eventInfos)
121122
{
122123
foreach (var eventInfo in eventInfos)
123124
{
@@ -188,7 +189,7 @@ void SetMethods(IEnumerable<MethodInfo> methods)
188189

189190
void SetPseudoProperties()
190191
{
191-
if (_type.GetInterfaces().Contains(typeof(AngleSharp.Dom.IElement)))
192+
if (_type.GetTypeInfo().ImplementedInterfaces.Contains(typeof(AngleSharp.Dom.IElement)))
192193
{
193194
var focusInEventInstance = new DomEventInstance(this);
194195
var focusOutEventInstance = new DomEventInstance(this);

src/AngleSharp.Scripting.JavaScript/EngineInstance.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
using AngleSharp.Dom;
44
using Jint;
55
using Jint.Runtime.Environments;
6+
using Services;
67
using System;
78
using System.Collections.Generic;
9+
using System.Linq;
810

911
sealed class EngineInstance
1012
{
@@ -23,9 +25,18 @@ sealed class EngineInstance
2325

2426
public EngineInstance(IWindow window, IDictionary<String, Object> assignments)
2527
{
28+
var logger = default(IConsoleLogger);
29+
var context = window.Document.Context;
30+
var createLogger = context.Configuration.Services.OfType<Func<IBrowsingContext, IConsoleLogger>>().FirstOrDefault();
31+
32+
if (createLogger != null)
33+
{
34+
logger = createLogger.Invoke(context);
35+
}
36+
2637
_objects = new Dictionary<Object, DomNodeInstance>();
2738
_engine = new Engine();
28-
_engine.SetValue("console", new ConsoleInstance(_engine));
39+
_engine.SetValue("console", new ConsoleInstance(_engine, logger));
2940

3041
foreach (var assignment in assignments)
3142
{

src/AngleSharp.Scripting.JavaScript/Extensions.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public static Object As(this Object value, Type targetType, EngineInstance engin
110110
{
111111
var sourceType = value.GetType();
112112

113-
if (sourceType == targetType || sourceType.IsSubclassOf(targetType) || targetType.IsInstanceOfType(value) || targetType.IsAssignableFrom(sourceType))
113+
if (sourceType == targetType || sourceType.GetTypeInfo().IsSubclassOf(targetType) || targetType.GetTypeInfo().IsAssignableFrom(sourceType.GetTypeInfo()))
114114
{
115115
return value;
116116
}
@@ -119,7 +119,7 @@ public static Object As(this Object value, Type targetType, EngineInstance engin
119119
return (Int32)(Double)value;
120120
}
121121

122-
if (targetType.IsSubclassOf(typeof(Delegate)) && value is FunctionInstance)
122+
if (targetType.GetTypeInfo().IsSubclassOf(typeof(Delegate)) && value is FunctionInstance)
123123
{
124124
return targetType.ToDelegate((FunctionInstance)value, engine);
125125
}
@@ -139,7 +139,7 @@ public static Object As(this Object value, Type targetType, EngineInstance engin
139139

140140
public static Object GetDefaultValue(this Type type)
141141
{
142-
return type.IsValueType ? Activator.CreateInstance(type) : null;
142+
return type.GetTypeInfo().IsValueType ? Activator.CreateInstance(type) : null;
143143
}
144144

145145
public static MethodInfo PrepareConvert(this Type fromType, Type toType)
@@ -222,37 +222,37 @@ public static String[] GetParameterNames(this MethodInfo method)
222222

223223
public static void AddConstructors(this EngineInstance engine, ObjectInstance obj, Type type)
224224
{
225-
foreach (var exportedType in type.Assembly.ExportedTypes)
225+
foreach (var exportedType in type.GetTypeInfo().Assembly.ExportedTypes)
226226
{
227227
engine.AddConstructor(obj, exportedType);
228228
}
229229
}
230230

231231
public static void AddInstances(this EngineInstance engine, ObjectInstance obj, Type type)
232232
{
233-
foreach (var exportedType in type.Assembly.ExportedTypes)
233+
foreach (var exportedType in type.GetTypeInfo().Assembly.ExportedTypes)
234234
{
235235
engine.AddInstance(obj, exportedType);
236236
}
237237
}
238238

239239
public static void AddConstructor(this EngineInstance engine, ObjectInstance obj, Type type)
240240
{
241-
var info = type.GetConstructors().FirstOrDefault(m =>
241+
var info = type.GetTypeInfo().DeclaredConstructors.FirstOrDefault(m =>
242242
m.GetCustomAttributes<DomConstructorAttribute>().Any());
243243

244244
if (info != null)
245245
{
246-
var name = type.GetOfficialName();
246+
var name = type.GetTypeInfo().GetOfficialName();
247247
var constructor = new DomConstructorInstance(engine, info);
248248
obj.FastSetProperty(name, new PropertyDescriptor(constructor, false, true, false));
249249
}
250250
}
251251

252252
public static void AddInstance(this EngineInstance engine, ObjectInstance obj, Type type)
253253
{
254-
var attributes = type.GetCustomAttributes<DomInstanceAttribute>();
255-
var info = type.GetConstructor(Type.EmptyTypes);
254+
var attributes = type.GetTypeInfo().GetCustomAttributes<DomInstanceAttribute>();
255+
var info = type.GetTypeInfo().DeclaredConstructors.FirstOrDefault(m => m.GetParameters().Length == 0);
256256

257257
if (info != null)
258258
{

src/AngleSharp.Scripting.JavaScript/ConfigurationExtensions.cs renamed to src/AngleSharp.Scripting.JavaScript/JsConfigurationExtensions.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,24 @@
99
/// <summary>
1010
/// Additional extensions for JavaScript scripting.
1111
/// </summary>
12-
public static class ConfigurationExtensions
12+
public static class JsConfigurationExtensions
1313
{
14+
/// <summary>
15+
/// Includes a service to create a new console logger for the given context.
16+
/// </summary>
17+
/// <param name="configuration">The configuration to use.</param>
18+
/// <param name="createLogger">The delegate to create a new logger.</param>
19+
/// <returns>The new configuration.</returns>
20+
public static IConfiguration WithConsoleLogger(this IConfiguration configuration, Func<IBrowsingContext, IConsoleLogger> createLogger)
21+
{
22+
if (!configuration.Services.OfType<Func<IBrowsingContext, IConsoleLogger>>().Any())
23+
{
24+
configuration = configuration.With<IConsoleLogger>(createLogger);
25+
}
26+
27+
return configuration;
28+
}
29+
1430
/// <summary>
1531
/// Sets scripting to true, registers the JavaScript engine and returns
1632
/// a new configuration with the scripting service and possible

0 commit comments

Comments
 (0)