104 lines
2.9 KiB
JavaScript
104 lines
2.9 KiB
JavaScript
const {
|
|
FLASH_MIMETYPE,
|
|
FUTURESPLASH_MIMETYPE,
|
|
FLASH7_AND_8_MIMETYPE,
|
|
FLASH_MOVIE_MIMETYPE,
|
|
FLASH_ACTIVEX_CLASSID,
|
|
is_swf_filename,
|
|
RufflePlayer,
|
|
} = require("./ruffle-player.js");
|
|
const { register_element } = require("./register-element");
|
|
|
|
module.exports = class RuffleObject extends RufflePlayer {
|
|
constructor(...args) {
|
|
super(...args);
|
|
}
|
|
|
|
connectedCallback() {
|
|
super.connectedCallback();
|
|
|
|
this.params = RuffleObject.params_of(this);
|
|
|
|
//Kick off the SWF download.
|
|
if (this.attributes.data) {
|
|
this.stream_swf_url(this.attributes.data.value);
|
|
} else if (this.params.movie) {
|
|
this.stream_swf_url(this.params.movie);
|
|
}
|
|
}
|
|
|
|
get data() {
|
|
return this.attributes.data.value;
|
|
}
|
|
|
|
set data(href) {
|
|
this.attributes.data = href;
|
|
}
|
|
|
|
static is_interdictable(elem) {
|
|
if (!elem.data) {
|
|
let has_movie = false;
|
|
let params = elem.getElementsByTagName("param");
|
|
for (let i = 0; i < params.length; i++) {
|
|
if (params[i].name == "movie" && params[i].value) {
|
|
has_movie = true;
|
|
}
|
|
}
|
|
if (!has_movie) {
|
|
return false;
|
|
}
|
|
}
|
|
if (
|
|
elem.type.toLowerCase() === FLASH_MIMETYPE.toLowerCase() ||
|
|
elem.type.toLowerCase() === FUTURESPLASH_MIMETYPE.toLowerCase() ||
|
|
elem.type.toLowerCase() == FLASH7_AND_8_MIMETYPE.toLowerCase() ||
|
|
elem.type.toLowerCase() == FLASH_MOVIE_MIMETYPE.toLowerCase()
|
|
) {
|
|
return true;
|
|
} else if (
|
|
elem.attributes &&
|
|
elem.attributes.classid &&
|
|
elem.attributes.classid.value.toLowerCase() ===
|
|
FLASH_ACTIVEX_CLASSID.toLowerCase()
|
|
) {
|
|
return true;
|
|
} else if (
|
|
(elem.type === undefined || elem.type === "") &&
|
|
elem.attributes.classid === undefined
|
|
) {
|
|
let params = RuffleObject.params_of(elem);
|
|
if (elem.data && is_swf_filename(elem.data)) {
|
|
return true;
|
|
} else if (
|
|
params &&
|
|
params.movie &&
|
|
is_swf_filename(params.movie)
|
|
) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
static params_of(elem) {
|
|
let params = {};
|
|
|
|
for (let param of elem.children) {
|
|
if (param.constructor === HTMLParamElement) {
|
|
params[param.name] = param.value;
|
|
}
|
|
}
|
|
|
|
return params;
|
|
}
|
|
|
|
static from_native_object_element(elem) {
|
|
let external_name = register_element("ruffle-object", RuffleObject);
|
|
let ruffle_obj = document.createElement(external_name);
|
|
ruffle_obj.copy_element(elem);
|
|
|
|
return ruffle_obj;
|
|
}
|
|
};
|