core: Implement avm2 event: links in texts
This commit is contained in:
parent
814a900b03
commit
f0d356589a
|
@ -145,6 +145,35 @@ impl<'gc> EventObject<'gc> {
|
|||
.unwrap() // we don't expect to break here
|
||||
}
|
||||
|
||||
pub fn text_event<S>(
|
||||
activation: &mut Activation<'_, 'gc>,
|
||||
event_type: S,
|
||||
text: AvmString<'gc>,
|
||||
bubbles: bool,
|
||||
cancelable: bool,
|
||||
) -> Object<'gc>
|
||||
where
|
||||
S: Into<AvmString<'gc>>,
|
||||
{
|
||||
let event_type: AvmString<'gc> = event_type.into();
|
||||
|
||||
let text_event_cls = activation.avm2().classes().textevent;
|
||||
text_event_cls
|
||||
.construct(
|
||||
activation,
|
||||
&[
|
||||
event_type.into(),
|
||||
// bubbles
|
||||
bubbles.into(),
|
||||
// cancelable
|
||||
cancelable.into(),
|
||||
// text
|
||||
text.into(),
|
||||
],
|
||||
)
|
||||
.unwrap() // we don't expect to break here
|
||||
}
|
||||
|
||||
pub fn net_status_event<S>(
|
||||
activation: &mut Activation<'_, 'gc>,
|
||||
event_type: S,
|
||||
|
|
|
@ -1637,6 +1637,14 @@ impl<'gc> EditText<'gc> {
|
|||
if let Err(e) = self.execute_avm1_asfunction(context, address) {
|
||||
error!("Couldn't execute URL \"{url:?}\": {e:?}");
|
||||
}
|
||||
} else if let Some(address) = url.strip_prefix(WStr::from_units(b"event:")) {
|
||||
if let Avm2Value::Object(object) = self.object2() {
|
||||
let mut activation = Avm2Activation::from_nothing(context.reborrow());
|
||||
let text = AvmString::new(activation.context.gc_context, address);
|
||||
let event = Avm2EventObject::text_event(&mut activation, "link", text, true, false);
|
||||
|
||||
Avm2::dispatch_event(&mut activation.context, event, object);
|
||||
}
|
||||
} else {
|
||||
context
|
||||
.navigator
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
package {
|
||||
|
||||
import flash.display.MovieClip;
|
||||
import flash.text.TextField;
|
||||
import flash.events.TextEvent;
|
||||
|
||||
|
||||
public class Test extends MovieClip {
|
||||
public var text: TextField;
|
||||
|
||||
public function Test() {
|
||||
text.htmlText = "" +
|
||||
"<p>Click <a href='event:alert1'>here</a> to call alert 1</p>" +
|
||||
"<p>Or click <a href='event:Second Test'>here</a> to call alert 2</p>" +
|
||||
"<p><a href='event:'>this one is empty</a></p>" +
|
||||
"<p>But <a href='event:a,b,c,d'>this one</a> has lots of args!</p>" +
|
||||
"";
|
||||
text.addEventListener(TextEvent.LINK, this.onLink);
|
||||
}
|
||||
|
||||
function onLink(event: TextEvent) {
|
||||
trace("/// onLink called!");
|
||||
trace("// event.text");
|
||||
trace(event.text);
|
||||
trace("");
|
||||
|
||||
trace("// event.bubbles");
|
||||
trace(event.bubbles);
|
||||
trace("");
|
||||
|
||||
trace("// event.cancelable");
|
||||
trace(event.cancelable);
|
||||
trace("");
|
||||
|
||||
trace("// event.currentTarget");
|
||||
trace(event.currentTarget);
|
||||
trace("");
|
||||
|
||||
trace("// event.target");
|
||||
trace(event.target);
|
||||
trace("");
|
||||
|
||||
trace("");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
[
|
||||
{
|
||||
"type": "MouseDown",
|
||||
"pos": [134, 69],
|
||||
"btn": "Left"
|
||||
},
|
||||
{
|
||||
"type": "MouseUp",
|
||||
"pos": [134, 69],
|
||||
"btn": "Left"
|
||||
},
|
||||
{
|
||||
"type": "MouseDown",
|
||||
"pos": [166, 95],
|
||||
"btn": "Left"
|
||||
},
|
||||
{
|
||||
"type": "MouseUp",
|
||||
"pos": [166, 95],
|
||||
"btn": "Left"
|
||||
},
|
||||
{
|
||||
"type": "MouseDown",
|
||||
"pos": [143, 128],
|
||||
"btn": "Left"
|
||||
},
|
||||
{
|
||||
"type": "MouseUp",
|
||||
"pos": [143, 128],
|
||||
"btn": "Left"
|
||||
},
|
||||
{
|
||||
"type": "MouseDown",
|
||||
"pos": [142, 160],
|
||||
"btn": "Left"
|
||||
},
|
||||
{
|
||||
"type": "MouseUp",
|
||||
"pos": [142, 160],
|
||||
"btn": "Left"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,68 @@
|
|||
/// onLink called!
|
||||
// event.text
|
||||
alert1
|
||||
|
||||
// event.bubbles
|
||||
true
|
||||
|
||||
// event.cancelable
|
||||
false
|
||||
|
||||
// event.currentTarget
|
||||
[object TextField]
|
||||
|
||||
// event.target
|
||||
[object TextField]
|
||||
|
||||
|
||||
/// onLink called!
|
||||
// event.text
|
||||
Second Test
|
||||
|
||||
// event.bubbles
|
||||
true
|
||||
|
||||
// event.cancelable
|
||||
false
|
||||
|
||||
// event.currentTarget
|
||||
[object TextField]
|
||||
|
||||
// event.target
|
||||
[object TextField]
|
||||
|
||||
|
||||
/// onLink called!
|
||||
// event.text
|
||||
|
||||
|
||||
// event.bubbles
|
||||
true
|
||||
|
||||
// event.cancelable
|
||||
false
|
||||
|
||||
// event.currentTarget
|
||||
[object TextField]
|
||||
|
||||
// event.target
|
||||
[object TextField]
|
||||
|
||||
|
||||
/// onLink called!
|
||||
// event.text
|
||||
a,b,c,d
|
||||
|
||||
// event.bubbles
|
||||
true
|
||||
|
||||
// event.cancelable
|
||||
false
|
||||
|
||||
// event.currentTarget
|
||||
[object TextField]
|
||||
|
||||
// event.target
|
||||
[object TextField]
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
num_ticks = 1
|
Loading…
Reference in New Issue