parent
							
								
									8489c4a77f
								
							
						
					
					
						commit
						cd5ea217b5
					
				|  | @ -0,0 +1,13 @@ | ||||||
|  | using System; | ||||||
|  | 
 | ||||||
|  | namespace Ooui | ||||||
|  | { | ||||||
|  |     public class Body : Element | ||||||
|  |     { | ||||||
|  |         public Body () | ||||||
|  |             : base ("Body") | ||||||
|  |         { | ||||||
|  |             Id = "document.body"; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,23 @@ | ||||||
|  | using System; | ||||||
|  | 
 | ||||||
|  | namespace Ooui | ||||||
|  | { | ||||||
|  |     public class Document : EventTarget | ||||||
|  |     { | ||||||
|  |         public Window Window { get; } = new Window (); | ||||||
|  |         public Body Body { get; } = new Body (); | ||||||
|  | 
 | ||||||
|  |         public Document () | ||||||
|  |             : base ("document") | ||||||
|  |         { | ||||||
|  |             Id = "document"; | ||||||
|  |             Window.MessageSent += Proxy_MessageSent; | ||||||
|  |             Body.MessageSent += Proxy_MessageSent; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         void Proxy_MessageSent (Message message) | ||||||
|  |         { | ||||||
|  |             Send (message); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.ComponentModel; | using System.ComponentModel; | ||||||
|  | using System.Threading; | ||||||
| 
 | 
 | ||||||
| namespace Ooui | namespace Ooui | ||||||
| { | { | ||||||
|  | @ -8,6 +9,8 @@ namespace Ooui | ||||||
|     { |     { | ||||||
|         readonly Dictionary<string, object> attributes = new Dictionary<string, object> (); |         readonly Dictionary<string, object> attributes = new Dictionary<string, object> (); | ||||||
| 
 | 
 | ||||||
|  |         Document document = null; | ||||||
|  | 
 | ||||||
|         public string ClassName { |         public string ClassName { | ||||||
|             get => GetStringAttribute ("class", ""); |             get => GetStringAttribute ("class", ""); | ||||||
|             set => SetAttributeProperty ("class", value); |             set => SetAttributeProperty ("class", value); | ||||||
|  | @ -90,6 +93,17 @@ namespace Ooui | ||||||
|             remove => RemoveEventListener ("wheel", value); |             remove => RemoveEventListener ("wheel", value); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public Document Document { | ||||||
|  |             get { | ||||||
|  |                 if (document == null) { | ||||||
|  |                     if (Interlocked.CompareExchange (ref document, new Document (), null) == null) { | ||||||
|  |                         document.MessageSent += Document_MessageSent; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 return document; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// A signal to Ooui that this element should take up the |         /// A signal to Ooui that this element should take up the | ||||||
|         /// entire browser window. |         /// entire browser window. | ||||||
|  | @ -229,6 +243,11 @@ namespace Ooui | ||||||
|             SendSet ("style." + Style.GetJsName (e.PropertyName), Style[e.PropertyName]); |             SendSet ("style." + Style.GetJsName (e.PropertyName), Style[e.PropertyName]); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         void Document_MessageSent (Message message) | ||||||
|  |         { | ||||||
|  |             Send (message); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         protected virtual bool HtmlNeedsFullEndElement => false; |         protected virtual bool HtmlNeedsFullEndElement => false; | ||||||
| 
 | 
 | ||||||
| #if !NO_XML | #if !NO_XML | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ namespace Ooui | ||||||
|         readonly Dictionary<string, List<TargetEventHandler>> eventListeners = |         readonly Dictionary<string, List<TargetEventHandler>> eventListeners = | ||||||
|             new Dictionary<string, List<TargetEventHandler>> (); |             new Dictionary<string, List<TargetEventHandler>> (); | ||||||
| 
 | 
 | ||||||
|         public string Id { get; private set; } = GenerateId (); |         public string Id { get; protected set; } = GenerateId (); | ||||||
| 
 | 
 | ||||||
|         public string TagName { get; private set; } |         public string TagName { get; private set; } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,24 @@ | ||||||
|  | namespace Ooui | ||||||
|  | { | ||||||
|  |     public class Window : EventTarget | ||||||
|  |     { | ||||||
|  |         string location = ""; | ||||||
|  | 
 | ||||||
|  |         public string Location { | ||||||
|  |             get => location; | ||||||
|  |             set { | ||||||
|  |                 if (string.IsNullOrEmpty (value) || location == value) | ||||||
|  |                     return; | ||||||
|  |                 location = value; | ||||||
|  |                 Send (Message.Set ("window", "location", value)); | ||||||
|  |                 OnPropertyChanged ("Location"); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Window () | ||||||
|  |             : base ("window") | ||||||
|  |         { | ||||||
|  |             Id = "window"; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,93 @@ | ||||||
|  | using System; | ||||||
|  | 
 | ||||||
|  | #if NUNIT | ||||||
|  | using NUnit.Framework; | ||||||
|  | using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; | ||||||
|  | using TestMethodAttribute = NUnit.Framework.TestCaseAttribute; | ||||||
|  | #else | ||||||
|  | using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | using Ooui; | ||||||
|  | 
 | ||||||
|  | namespace Tests | ||||||
|  | { | ||||||
|  |     [TestClass] | ||||||
|  |     public class WindowTests | ||||||
|  |     { | ||||||
|  |         [TestMethod] | ||||||
|  |         public void ElementDocumentNotNull () | ||||||
|  |         { | ||||||
|  |             var b = new Button (); | ||||||
|  |             Assert.IsNotNull (b.Document); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [TestMethod] | ||||||
|  |         public void DocumentWindowNotNull () | ||||||
|  |         { | ||||||
|  |             var d = new Document (); | ||||||
|  |             Assert.IsNotNull (d.Window); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [TestMethod] | ||||||
|  |         public void DocumentBodyNotNull () | ||||||
|  |         { | ||||||
|  |             var d = new Document (); | ||||||
|  |             Assert.IsNotNull (d.Body); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [TestMethod] | ||||||
|  |         public void WindowIdIsWindow () | ||||||
|  |         { | ||||||
|  |             Assert.AreEqual ("window", new Window ().Id); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [TestMethod] | ||||||
|  |         public void DocumentIdIsDocument () | ||||||
|  |         { | ||||||
|  |             Assert.AreEqual ("document", new Document ().Id); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [TestMethod] | ||||||
|  |         public void BodyIdIsDocumentBody () | ||||||
|  |         { | ||||||
|  |             Assert.AreEqual ("document.body", new Body ().Id); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [TestMethod] | ||||||
|  |         public void DocumentGetsWindowMessages () | ||||||
|  |         { | ||||||
|  |             var d = new Document (); | ||||||
|  |             var received = false; | ||||||
|  |             d.MessageSent += m => { | ||||||
|  |                 received = m.TargetId == "window"; | ||||||
|  |             }; | ||||||
|  |             d.Window.Location = "http://google.com"; | ||||||
|  |             Assert.IsTrue (received); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [TestMethod] | ||||||
|  |         public void ElementGetsWindowMessages () | ||||||
|  |         { | ||||||
|  |             var b = new Button (); | ||||||
|  |             var received = false; | ||||||
|  |             b.MessageSent += m => { | ||||||
|  |                 received = m.TargetId == "window"; | ||||||
|  |             }; | ||||||
|  |             b.Document.Window.Location = "http://google.com"; | ||||||
|  |             Assert.IsTrue (received); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [TestMethod] | ||||||
|  |         public void ElementGetsBodyMessages () | ||||||
|  |         { | ||||||
|  |             var b = new Button (); | ||||||
|  |             var received = false; | ||||||
|  |             b.MessageSent += m => { | ||||||
|  |                 received = m.TargetId == "document.body"; | ||||||
|  |             }; | ||||||
|  |             b.Document.Body.Call ("foo"); | ||||||
|  |             Assert.IsTrue (received); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue