/[suikacvs]/messaging/manakai/lib/Message/DOM/Event.pm
Suika

Contents of /messaging/manakai/lib/Message/DOM/Event.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Mon Oct 8 07:17:18 2007 UTC (17 years, 1 month ago) by wakaba
Branch: MAIN
++ manakai/lib/Message/DOM/ChangeLog	8 Oct 2007 07:16:56 -0000
2007-10-08  Wakaba  <wakaba@suika.fam.cx>

	* Event.pm, EventTarget.pm, EventTargetNode.pm,
	EventException.pm: Implemented (but not tested!).

	* DOMException.pm (MALFORMED_EVENT_TYPE_ERR,
	EVENT_INTERFACE_NOT_SUPPORTED_ERR, EXTERNAL_EVENT_ERR): New
	error subtypes.

	* DOMImplementation.pm ($HasFeature): The |Event| feature,
	version |3.0|, is added.

	* Document.pm, Node.pm: Event attributes and
	methods are implemented.

1 wakaba 1.1 package Message::DOM::Event;
2     use strict;
3     our $VERSION=do{my @r=(q$Revision: 1.16 $=~/\d+/g);sprintf "%d."."%02d" x $#r,@r};
4     push our @ISA, 'Message::IF::Event';
5    
6     ## The |Event| interface - constants
7    
8     ## |PhaseType|
9    
10     sub CAPTURING_PHASE () { 1 }
11     sub AT_TARGET () { 2 }
12     sub BUBBLING_PHASE () { 3 }
13    
14     sub AUTOLOAD {
15     my $method_name = our $AUTOLOAD;
16     $method_name =~ s/.*:://;
17     return if $method_name eq 'DESTROY';
18    
19     if ({
20     ## Read-only attributes (trivial accessors)
21     'Message::DOM::Event::bubbles' => 1,
22     'Message::DOM::Event::cancelable' => 1,
23     'Message::DOM::Event::current_target' => 1,
24     'Message::DOM::Event::default_prevented' => 1,
25     'Message::DOM::Event::manakai_dispatched' => 1,
26     'Message::DOM::Event::event_phase' => 1,
27     'Message::DOM::Event::manakai_immediate_propagation_stopped' => 1,
28     'Message::DOM::Event::namespace_uri' => 1,
29     'Message::DOM::Event::manakai_propagation_stopped' => 1,
30     'Message::DOM::Event::target' => 1,
31     'Message::DOM::Event::time_stamp' => 1,
32     'Message::DOM::Event::type' => 1,
33    
34     'Message::DOM::Event::CustomEvent::detail' => 1,
35     }->{$AUTOLOAD}) {
36     no strict 'refs';
37     eval qq{
38     sub $method_name (\$) {
39     return \${\$_[0]}->{$method_name};
40     }
41     };
42     goto &{ $AUTOLOAD };
43     } else {
44     require Carp;
45     Carp::croak (qq<Can't locate method "$AUTOLOAD">);
46     }
47     } # AUTOLOAD
48    
49     ## The |Event| interface - attributes
50    
51     sub bubbles ($);
52    
53     sub cancelable ($);
54    
55     sub current_target ($);
56    
57     sub default_prevented ($);
58    
59     ## TODO: documentation
60     sub manakai_dispatched ($);
61    
62     sub event_phase ($);
63    
64     ## TODO: documentation
65     sub manakai_immediate_propagation_stopped ($);
66    
67     sub namespace_uri ($);
68    
69     ## TODO: documentation
70     sub manakai_propagation_stopped ($);
71    
72     sub target ($);
73    
74     sub time_stamp ($);
75    
76     sub type ($);
77    
78     ## The |Event| interface - methods
79    
80     sub init_event ($$;$$) {
81     my $self = $_[0];
82     unless ($self->{manakai_dispatched}) {
83     $self->{type} = ''.$_[1];
84     $self->{bubbles} = $_[2];
85     $self->{cancelable} = $_[3];
86     }
87     } # init_event
88    
89     sub init_event_ns ($$;$$) {
90     my $self = $_[0];
91     unless ($self->{manakai_dispatched}) {
92     if (not defined $_[1] or $_[1] eq '') {
93     $self->{namespace_uri} = $_[1];
94     }
95     $self->{type} = ''.$_[2];
96     $self->{bubbles} = $_[3];
97     $self->{cancelable} = $_[4];
98     }
99     } # init_event_ns
100    
101     sub prevent_default ($) {
102     if ($_[0]->{cancelable}) {
103     $_[0]->{default_prevented} = 1;
104     }
105     } # prevent_default
106    
107     sub stop_immediate_propagation ($) {
108     $_[0]->{manakai_immediate_propagation_stopped} = 1;
109     $_[0]->{manakai_propagation_stopped} = 1;
110     } # stop_immediate_propagation
111    
112     sub stop_propagation ($) {
113     $_[0]->{manakai_propagation_stopped} = 1;
114     } # stop_propagation
115    
116     package Message::DOM::Event::CustomEvent;
117     push our @ISA, 'Message::DOM::Event', 'Message::IF::CustomEvent';
118    
119     ## The |CustomEvent| interface - attribute
120    
121     sub detail ($);
122    
123     ## The |CustomEvent| interface - method
124    
125     sub init_custom_event_ns ($$$;$$$) {
126     my $self = $_[0];
127     unless ($self->{manakai_dispatched}) {
128     if (not defined $_[1] or $_[1] eq '') {
129     $self->{namespace_uri} = $_[1];
130     }
131     $self->{type} = ''.$_[2];
132     $self->{bubbles} = $_[3];
133     $self->{cancelable} = $_[4];
134     $self->{detail} = $_[5];
135     }
136     } # init_custom_event_ns
137    
138     package Message::IF::Event;
139     package Message::IF::CustomEvent;
140    
141     1;

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24