1 // Permission is hereby granted, free of charge, to any person obtaining
\r
2 // a copy of this software and associated documentation files (the
\r
3 // "Software"), to deal in the Software without restriction, including
\r
4 // without limitation the rights to use, copy, modify, merge, publish,
\r
5 // distribute, sublicense, and/or sell copies of the Software, and to
\r
6 // permit persons to whom the Software is furnished to do so, subject to
\r
7 // the following conditions:
\r
9 // The above copyright notice and this permission notice shall be
\r
10 // included in all copies or substantial portions of the Software.
\r
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
\r
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
\r
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
\r
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
\r
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
\r
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
\r
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\r
20 // Copyright (c) 2007, 2008 Novell, Inc.
\r
23 // Andreia Gaita <avidigal@novell.com>
\r
28 using System.ComponentModel;
29 using Mono.WebBrowser.DOM;
\r
31 namespace System.Windows.Forms
\r
33 public sealed class HtmlElement
\r
35 private EventHandlerList events;
36 private Mono.WebBrowser.IWebBrowser webHost;
\r
37 internal IElement element;
39 internal HtmlElement (Mono.WebBrowser.IWebBrowser webHost, IElement element)
\r
41 this.webHost = webHost;
\r
42 this.element = element;
\r
45 internal EventHandlerList Events {
\r
48 events = new EventHandlerList();
\r
55 public HtmlElementCollection All {
\r
57 return new HtmlElementCollection (webHost, this.element.All);
\r
61 // from http://www.w3.org/TR/html401/index/elements.html
62 public bool CanHaveChildren {
64 string tag = this.TagName;
65 switch (tag.ToLower ()) {
88 public HtmlElementCollection Children {
\r
90 return new HtmlElementCollection (webHost, this.element.Children);
\r
94 public HtmlDocument Document {
96 return new HtmlDocument (webHost, element.Owner);
100 public string InnerHtml
\r
102 get { return this.element.InnerHTML; }
\r
103 set { throw new NotImplementedException (); }
\r
106 public string InnerText
\r
108 get { return this.element.InnerText; }
\r
109 set { this.element.InnerText = value; }
\r
114 get { return GetAttribute("id"); }
115 set { SetAttribute ("id", value); }
\r
120 get { return GetAttribute ("name"); }
121 set { SetAttribute ("name", value); }
\r
124 public HtmlElement FirstChild
\r
126 get { return new HtmlElement (webHost, (IElement)element.FirstChild); }
\r
129 public HtmlElement NextSibling {
130 get { return new HtmlElement (webHost, (IElement)element.Next); }
133 public HtmlElement Parent {
134 get { return new HtmlElement (webHost, (IElement)element.Parent); }
137 public string TagName {
138 get { return element.TagName; }
143 public HtmlElement AppendChild (HtmlElement child)
145 IElement newChild = this.element.AppendChild (child.element);
146 child.element = newChild;
150 public void AttachEventHandler (string eventName, EventHandler eventHandler)
\r
152 throw new NotImplementedException ();
155 public void DetachEventHandler (string eventName, EventHandler eventHandler)
\r
157 throw new NotImplementedException ();
\r
162 throw new NotImplementedException ();
\r
165 public string GetAttribute (string name) {
166 return element.GetAttribute (name);
169 public HtmlElementCollection GetElementsByTagName (string tagName)
\r
171 Mono.WebBrowser.DOM.IElementCollection col = element.GetElementsByTagName (tagName);
\r
172 return new HtmlElementCollection (webHost, col);
\r
175 public override int GetHashCode ()
\r
177 return element.GetHashCode ();
\r
180 internal bool HasAttribute (string name) {
181 return element.HasAttribute (name);
184 public HtmlElement InsertAdjacentElement (HtmlElementInsertionOrientation orientation, HtmlElement newElement) {
186 switch (orientation) {
187 case HtmlElementInsertionOrientation.BeforeBegin:
188 IElement newChild1 = this.element.Parent.InsertBefore (newElement.element, this.element);
189 newElement.element = newChild1;
192 case HtmlElementInsertionOrientation.AfterBegin:
193 IElement newChild2 = this.element.InsertBefore (newElement.element, this.element.FirstChild);
194 newElement.element = newChild2;
197 case HtmlElementInsertionOrientation.BeforeEnd:
198 return this.AppendChild (newElement);
200 case HtmlElementInsertionOrientation.AfterEnd:
201 return this.AppendChild (newElement);
207 public object InvokeMember (string method) {
208 throw new NotImplementedException ();
210 public object InvokeMember (string method, object[] parameters) {
211 throw new NotImplementedException ();
214 public void RaiseEvent (string name)
216 throw new NotImplementedException ();
\r
219 public void RemoveFocus ()
221 throw new NotImplementedException ();
\r
224 public void ScrollIntoView (bool alignWithTop)
226 throw new NotImplementedException ();
\r
229 public void SetAttribute (string name, string value)
231 this.element.SetAttribute (name, value);
234 public override bool Equals (object obj) {
235 return this == (HtmlElement) obj;
238 public static bool operator ==(HtmlElement left, HtmlElement right) {
239 if ((object)left == (object)right) {
243 if ((object)left == null || (object)right == null) {
247 return left.Equals (right);
250 public static bool operator !=(HtmlElement left, HtmlElement right) {
251 return !(left == right);
256 private void OnClick (object sender, EventArgs e)
\r
258 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[ClickEvent];
\r
260 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
265 private static object ClickEvent = new object ();
\r
266 public event HtmlElementEventHandler Click {
\r
268 Events.AddHandler (ClickEvent, value);
\r
269 element.Click += new NodeEventHandler (OnClick);
\r
272 Events.RemoveHandler (ClickEvent, value);
\r
273 element.Click -= new NodeEventHandler (OnClick);
\r
277 private void OnDoubleClick (object sender, EventArgs e)
\r
279 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[DoubleClickEvent];
\r
281 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
286 private static object DoubleClickEvent = new object ();
\r
287 public event HtmlElementEventHandler DoubleClick {
\r
289 Events.AddHandler (DoubleClickEvent, value);
\r
290 element.DoubleClick += new NodeEventHandler (OnDoubleClick);
\r
293 Events.RemoveHandler (DoubleClickEvent, value);
\r
294 element.DoubleClick -= new NodeEventHandler (OnDoubleClick);
\r
298 private void OnMouseDown (object sender, EventArgs e)
\r
300 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseDownEvent];
\r
302 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
307 private static object MouseDownEvent = new object ();
\r
308 public event HtmlElementEventHandler MouseDown {
\r
310 Events.AddHandler (MouseDownEvent, value);
\r
311 element.MouseDown += new NodeEventHandler (OnMouseDown);
\r
314 Events.RemoveHandler (MouseDownEvent, value);
\r
315 element.MouseDown -= new NodeEventHandler (OnMouseDown);
\r
319 private void OnMouseUp (object sender, EventArgs e)
\r
321 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseUpEvent];
\r
323 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
328 private static object MouseUpEvent = new object ();
\r
329 public event HtmlElementEventHandler MouseUp {
\r
331 Events.AddHandler (MouseUpEvent, value);
\r
332 element.MouseUp += new NodeEventHandler (OnMouseUp);
\r
335 Events.RemoveHandler (MouseUpEvent, value);
\r
336 element.MouseUp -= new NodeEventHandler (OnMouseUp);
\r
340 private void OnMouseMove (object sender, EventArgs e)
\r
342 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseMoveEvent];
\r
344 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
349 private static object MouseMoveEvent = new object ();
\r
350 public event HtmlElementEventHandler MouseMove {
\r
352 Events.AddHandler (MouseMoveEvent, value);
\r
353 element.MouseMove += new NodeEventHandler (OnMouseMove);
\r
356 Events.RemoveHandler (MouseMoveEvent, value);
\r
357 element.MouseMove -= new NodeEventHandler (OnMouseMove);
\r
361 private void OnMouseOver (object sender, EventArgs e)
\r
363 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseOverEvent];
\r
365 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
370 private static object MouseOverEvent = new object ();
\r
371 public event HtmlElementEventHandler MouseOver {
\r
373 Events.AddHandler (MouseOverEvent, value);
\r
374 element.MouseOver += new NodeEventHandler (OnMouseOver);
\r
377 Events.RemoveHandler (MouseOverEvent, value);
\r
378 element.MouseOver -= new NodeEventHandler (OnMouseOver);
\r
382 private void OnMouseEnter (object sender, EventArgs e)
\r
384 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseEnterEvent];
\r
386 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
391 private static object MouseEnterEvent = new object ();
\r
392 public event HtmlElementEventHandler MouseEnter {
\r
394 Events.AddHandler (MouseEnterEvent, value);
\r
395 element.MouseEnter += new NodeEventHandler (OnMouseEnter);
\r
398 Events.RemoveHandler (MouseEnterEvent, value);
\r
399 element.MouseEnter -= new NodeEventHandler (OnMouseEnter);
\r
403 private void OnMouseLeave (object sender, EventArgs e)
\r
405 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[MouseLeaveEvent];
\r
407 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
412 private static object MouseLeaveEvent = new object ();
\r
413 public event HtmlElementEventHandler MouseLeave {
\r
415 Events.AddHandler (MouseLeaveEvent, value);
\r
416 element.MouseLeave += new NodeEventHandler (OnMouseLeave);
\r
419 Events.RemoveHandler (MouseLeaveEvent, value);
\r
420 element.MouseLeave -= new NodeEventHandler (OnMouseLeave);
\r
424 private void OnKeyDown (object sender, EventArgs e)
\r
426 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[KeyDownEvent];
\r
428 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
433 private static object KeyDownEvent = new object ();
\r
434 public event HtmlElementEventHandler KeyDown {
\r
436 Events.AddHandler (KeyDownEvent, value);
\r
437 element.KeyDown += new NodeEventHandler (OnKeyDown);
\r
440 Events.RemoveHandler (KeyDownEvent, value);
\r
441 element.KeyDown -= new NodeEventHandler (OnKeyDown);
\r
445 private void OnKeyPress (object sender, EventArgs e)
\r
447 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[KeyPressEvent];
\r
449 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
454 private static object KeyPressEvent = new object ();
\r
455 public event HtmlElementEventHandler KeyPress {
\r
457 Events.AddHandler (KeyPressEvent, value);
\r
458 element.KeyPress += new NodeEventHandler (OnKeyPress);
\r
461 Events.RemoveHandler (KeyPressEvent, value);
\r
462 element.KeyPress -= new NodeEventHandler (OnKeyPress);
\r
466 private void OnKeyUp (object sender, EventArgs e)
\r
468 HtmlElementEventHandler eh = (HtmlElementEventHandler) Events[KeyUpEvent];
\r
470 HtmlElementEventArgs ev = new HtmlElementEventArgs ();
\r
475 private static object KeyUpEvent = new object ();
\r
476 public event HtmlElementEventHandler KeyUp {
\r
478 Events.AddHandler (KeyUpEvent, value);
\r
479 element.KeyUp += new NodeEventHandler (OnKeyUp);
\r
482 Events.RemoveHandler (KeyUpEvent, value);
\r
483 element.KeyUp -= new NodeEventHandler (OnKeyUp);
\r