@afterswf/embed 0.0.0-stage → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +142 -2
- package/dist/HISTORY.txt +2190 -0
- package/dist/VERSIONS.txt +16 -0
- package/dist/assets/builtins/avmplus.abc +0 -0
- package/dist/assets/builtins/builtin.abc +0 -0
- package/dist/assets/builtins/playerglobal.abcs +0 -0
- package/dist/assets/builtins/playerglobal.json +2753 -0
- package/dist/assets/fonts.swf +0 -0
- package/dist/assets/progressBg.jpg +0 -0
- package/dist/assets/progressLine.jpg +0 -0
- package/dist/assets/splash.jpg +0 -0
- package/dist/embed.js +2 -0
- package/dist/embed.js.map +1 -0
- package/dist/embed.mjs +2 -0
- package/dist/embed.mjs.map +1 -0
- package/dist/loader.js +2 -0
- package/dist/loader.js.map +1 -0
- package/dist/runtime.js +37 -0
- package/dist/runtime.js.map +1 -0
- package/dist/version.mjs +1 -0
- package/package.json +91 -3
- package/types/index.d.ts +145 -0
- package/types/version.d.ts +5 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/embed.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var AwayEmbed=function(t){"use strict";var e="undefined"!=typeof document?document.currentScript:null;const n=["application/x-shockwave-flash","application/futuresplash"],r=/\.swf([?#]|$)/i,i=["classid","codebase","type","pluginspage","data","src","width","height"],s=["flashvars","bgcolor","scale","salign","wmode","quality","menu","play","loop","base","allowscriptaccess","allowfullscreen","allowfullscreeninteractive","allownetworking","devicefont","seamlesstabbing","swliveconnect","swremote","swfversion","expressinstall"];function o(t){const e={};for(const n of Array.from(t.children))"param"===n.localName&&n.getAttribute("name")&&(e[n.getAttribute("name").toLowerCase()]=n.getAttribute("value")||"");return e}function a(t){const e=t.localName;if("object"!==e&&"embed"!==e)return!1;if(n.indexOf((t.getAttribute("type")||"").toLowerCase())>-1||"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"===(t.getAttribute("classid")||"").toLowerCase())return!0;const i="embed"===e?t.getAttribute("src"):t.getAttribute("data")||o(t).movie;return r.test(i||"")}function l(t){for(let e=t.parentElement;e;e=e.parentElement)if(a(e))return!0;return!1}function c(t,e){const n=document.createElement("awayfl-player");for(const e in t)try{n.setAttribute(e,t[e])}catch(t){console.warn(`[AwayFL] Skipping invalid attribute "${e}"`)}for(const t in e){const r=document.createElement("param");r.name=t,r.value=e[t],n.appendChild(r)}return n}function d(t){const e=function(t){const e={attributes:{},params:{}},n=[t].concat(Array.from(t.querySelectorAll("object, embed")).filter(a)),r=(t,e,n)=>{e in t||(t[e]=n)};for(const t of n){const n="embed"===t.localName,a=o(t);e.src=e.src||t.getAttribute(n?"src":"data")||a.movie||a.src;for(const o of Array.from(t.attributes)){const t=o.name.toLowerCase();"width"===t||"height"===t?r(e.attributes,t,o.value):n&&s.indexOf(t)>-1?r(e.params,t,o.value):-1===i.indexOf(t)&&r(e.attributes,t,o.value)}for(const t in a)"movie"!==t&&"src"!==t&&r(e.params,t,a[t])}return e}(t);if(!e.src)return null;const n=c(Object.assign({src:e.src},e.attributes),e.params);return t.parentNode.replaceChild(n,t),n}function u(t=document){t instanceof Element&&a(t)?l(t)||d(t):t.querySelectorAll("object, embed").forEach(t=>{t.isConnected&&a(t)&&!l(t)&&d(t)})}const h=[32,0,0],f=navigator.userAgent.toLowerCase(),g=(navigator.platform||"").toLowerCase(),m={w3:!0,pv:h.slice(),wk:!!/webkit/.test(f)&&parseFloat(f.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")),ie:!1,win:/win/.test(g||f),mac:/mac/.test(g||f)};let p=!1,b=!0,_=null,w=null;function y(){return"loading"!==document.readyState}function C(t){return"string"==typeof t?document.getElementById(t):t}function v(t){return!!t&&"awayfl-player"===t.localName}function E(t){y()?t():document.addEventListener("DOMContentLoaded",()=>t())}function A(t){const e=String(t).split("."),n=[parseInt(e[0],10),parseInt(e[1],10)||0,parseInt(e[2],10)||0],r=h;return r[0]>n[0]||r[0]===n[0]&&r[1]>n[1]||r[0]===n[0]&&r[1]===n[1]&&r[2]>=n[2]}function L(t,e,n,r){const i=document.head;if(!i)return;const s="string"==typeof n&&n?n:"screen";r&&(_=null,w=null),_&&w===s||(_=document.createElement("style"),_.media=s,w=s,i.appendChild(_)),_.appendChild(document.createTextNode(t+" {"+e+"}"))}function O(t,e){if(!b||!t)return;const n=e?"visible":"hidden",r=document.getElementById(t);y()&&r?r.style.visibility=n:L("#"+CSS.escape(t),"visibility:"+n)}function F(t,e,n){const r=C(n);if(!r||!t||!t.data)return;void 0===t.id&&r.id&&(t.id=r.id);const i={src:""+t.data};for(const e in t){const n=e.toLowerCase();"styleclass"===n?i.class=""+t[e]:"classid"!==n&&"data"!==n&&(i[e]=""+t[e])}const s={};for(const t in e)"movie"!==t.toLowerCase()&&(s[t]=""+e[t]);const o=c(i,s);return r.parentNode.replaceChild(o,r),o}function S(t){return/[\\\"<>\.;]/.test(t)?encodeURIComponent(t):t}const B={registerObject:function(t,e,n,r){t&&e?(O(t,!1),E(()=>{const n={success:!1,id:t};if(A(e)){let e=document.getElementById(t);e&&!v(e)&&(e=a(e)?d(e):null),e&&(n.success=!0,n.ref=e)}O(t,!0),r&&r(n)})):r&&r({success:!1,id:t})},getObjectById:function(t){const e=document.getElementById(t);return v(e)?e:null},embedSWF:function(t,e,n,r,i,s,o,a,l,c){const d="string"==typeof e?e:e&&e.id,u={success:!1,id:d};t&&e&&n&&r?(O(d,!1),E(()=>{const s=Object.assign({},l,{data:t,width:""+n,height:""+r}),h=Object.assign({},a),f=function(t){return t&&"object"==typeof t?Object.keys(t).map(e=>e+"="+(p?encodeURIComponent(t[e]):t[e])).join("&"):""}(o);if(f&&(h.flashvars=void 0!==h.flashvars?h.flashvars+"&"+f:f),!i||A(i)){const t=F(s,h,e);s.id==d&&O(d,!0),u.success=!!t,t&&(u.ref=t)}else O(d,!0);c&&c(u)})):c&&c(u)},switchOffAutoHideShow(){b=!1},enableUriEncoding(t){p=void 0===t||!!t},ua:m,getFlashPlayerVersion:()=>({major:h[0],minor:h[1],release:h[2]}),hasFlashPlayerVersion:A,createSWF:(t,e,n)=>F(t,e,n),showExpressInstall(t,e,n,r){console.warn("[AwayFL] Express Install is not needed or supported"),r&&r({success:!1,id:n})},removeSWF:function(t){const e=document.getElementById(t);e&&(v(e)||a(e))&&e.remove()},createCSS:L,addDomLoadEvent:E,addLoadEvent:function(t){"complete"===document.readyState?setTimeout(t):window.addEventListener("load",()=>t())},getQueryParamValue:function(t){let e=document.location.search||document.location.hash;if(e){if(/\?/.test(e)&&(e=e.split("?")[1]),null==t)return S(e);const n=e.split("&");for(let e=0;e<n.length;e++)if(n[e].substring(0,n[e].indexOf("="))==t)return S(n[e].substring(n[e].indexOf("=")+1))}return""},expressInstallCallback(){}};class j{constructor(t,e,n,r,i,s,o){this._attributes={},this._params={},this._variables={},this.setAttribute("swf",t),this.setAttribute("id",e),this.setAttribute("width",""+n),this.setAttribute("height",""+r),this.setAttribute("version",i),s&&this.addParam("bgcolor",s),this.addParam("quality",o||"high")}setAttribute(t,e){this._attributes[t]=e}getAttribute(t){return this._attributes[t]||""}addParam(t,e){this._params[t]=e}getParams(){return this._params}addVariable(t,e){this._variables[t]=e}getVariable(t){return this._variables[t]||""}getVariables(){return this._variables}getVariablePairs(){return Object.keys(this._variables).map(t=>t+"="+this._variables[t])}useExpressInstall(t){}write(t){const e=C(t);if(!e)return!1;const n=this.getAttribute("id"),r=Object.assign({},this._params),i=this.getVariablePairs().join("&");i&&(r.flashvars=i);const s=c({src:this.getAttribute("swf"),id:n,name:n,width:this.getAttribute("width"),height:this.getAttribute("height")},r);return e.innerHTML="",e.appendChild(s),!0}}const I=new URL(".",e&&e.src||new URL("embed.js",document.baseURI).href).href,N={movie:"src",data:"src",flashvars:"flashvars",bgcolor:"bgcolor",scale:"scaleMode",salign:"stageAlign"},U={showall:"showAll",all:"showAll",noborder:"noBorder",exactfit:"exactFit",noscale:"noScale"};function q(t){const e={};if("string"==typeof t)new URLSearchParams(t).forEach((t,n)=>{e[n]=t});else if(t)for(const n in t)e[n]=String(t[n]);return e}function P(t){const e=/^#?([0-9a-f]{6})$/i.exec(t||"");return e?parseInt(e[1],16):null}function x(t){return/^\d+(\.\d+)?$/.test(""+t)?t+"px":""+t}class k extends HTMLElement{static get observedAttributes(){return["src","width","height"]}get player(){return this._player}get config(){return this._runConfig}set config(t){this._runConfig=t}get src(){return this._runConfig.src||this.getAttribute("src")}set src(t){this._runConfig.src=t}set width(t){this._runConfig.width=t}get width(){return this._runConfig.width||this.getAttribute("width")}set height(t){this._runConfig.height=t}get height(){return this._runConfig.height||this.getAttribute("height")}set runtimeBaseUrl(t){this._runConfig.runtimeBaseUrl=t}get runtimeBaseUrl(){return this._runConfig.runtimeBaseUrl}constructor(){super(),this._runConfig={},this.onError=this.onError.bind(this),this._root=this.attachShadow({mode:"closed"})}_getRuntimeUrl(){const t=this._runConfig.runtimeBaseUrl;return{loader:new URL("loader.js",t).href,runtime:new URL("runtime.js",t).href,baseUrl:t}}_dropPlayer(){this._gameFrame&&(this._gameFrame.remove(),this._player=null)}onError(t){const e=this._runConfig.onError&&self[this._runConfig.onError];"function"==typeof e&&e(t),this.dispatchEvent(new ErrorEvent("error",{error:new Error("Awayfl runtime error"),message:(null==t?void 0:t.message)||t}))}_attachRuntimeEvents(){const t=this._gameFrame.contentWindow;t.addEventListener("awayfl-player-init",({detail:t})=>{this._player=t},{once:!0}),t.addEventListener("awayfl-player-load",()=>{const t=this._runConfig.onLoad&&self[this._runConfig.onLoad];"function"==typeof t&&t(),this.dispatchEvent(new CustomEvent("load")),this._gameFrame.style.display=""},{once:!0}),t.addEventListener("awayfl-player-error",({detail:t})=>this.onError(t),{once:!0}),t.addEventListener("awayfl-player-progress",({detail:t})=>{const e=this._runConfig.onProgress&&self[this._runConfig.onProgress];"function"==typeof e&&e(t),this.dispatchEvent(new CustomEvent("progress",{detail:t}))})}_buildTemplate(t){const e='<!DOCTYPE html>\n<head>\n\t<meta name="viewport"\n\t\tcontent="height=device-height, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" />\n\t<title>AwayFL Embedded Player 0.1.4</title>\n\t<style>\n\t\t* {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\tcanvas {\n\t\t\toutline: none\n\t\t}\n\n\t\thtml, body, #container {\n\t\t\tmargin: 0;\n\t\t\toverflow: hidden;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\n\t\t#splash__image {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tposition: absolute;\n\t\t\tbackground-size: contain;\n\t\t\tbackground-position: center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tvisibility: visible;\n\t\t\ttransition: all 0.5s;\n\t\t\tz-index: 10;\n\t\t}\n\n\t\t#progress__root {\n\t\t\tposition: absolute;\n\t\t}\n\n\t\t#progress__line {\n\t\t\twidth: 0;\n\t\t\theight: 100%;\n\t\t\ttransition: all 0.5s;\n\t\t}\n\t</style>\n\t<script src="__LOADER_URL__"><\/script>\n</head>\n\n<body>\n\t<div id="splash__image">\n\t\t<div id="progress__root">\n\t\t\t<div id="progress__line"></div>\n\t\t</div>\n\t</div>\n\t<script>\n\t\twindow.addEventListener("load", () => {\n\n\t\t\tconst config = JSON.parse(__GAME_CONFIG__);\n\t\t\tconst fail = (error) => {\n\t\t\t\tconsole.error(\'[AwayFL]\', error);\n\t\t\t\twindow.dispatchEvent(new CustomEvent(\'awayfl-player-error\', {detail: error}));\n\t\t\t};\n\n\t\t\tAWAYFL.LegacyLoader.init(config);\n\t\t\tAWAYFL.LegacyLoader.runGame((fill) => {\n\t\t\t\twindow.dispatchEvent(new CustomEvent(\'awayfl-player-progress\', {detail: fill}));\n\t\t\t}, (config, hideLoader) => {\n\t\t\t\tconst player = new AWAYFL.Player(document, config);\n\t\t\t\twindow.dispatchEvent(new CustomEvent(\'awayfl-player-init\', {detail: player}));\n\t\t\t\tplayer\n\t\t\t\t\t.loadAndPlay()\n\t\t\t\t\t.then((_, hide) => {\n\t\t\t\t\t\twindow.dispatchEvent(new CustomEvent(\'awayfl-player-load\'));\n\t\t\t\t\t\thide && hide() || window.swfParseComplete && window.swfParseComplete();;\n\t\t\t\t\t})\n\t\t\t\t\t.catch(fail);\n\t\t\t}).catch(fail);\n\t\t});\n\t<\/script>\n</body>',n=this._getRuntimeUrl(),r={width:t.clientWidth,height:t.clientHeight,backgroundColor:this._runConfig.backgroundColor,splash:this._runConfig.splash,progress:this._runConfig.progress,runtime:[n.runtime],binary:[{path:this._runConfig.src,resourceType:"GAME",name:"Game",meta:{}}],baseUrl:n.baseUrl,maxStageScale:+this._runConfig.maxStageScale,flashvars:q(this._runConfig.flashvars),stageScaleMode:this._runConfig.scaleMode,stageAlign:this._runConfig.stageAlign,stageColor:P(this._runConfig.bgcolor),runtimeFlags:{defaultSmoothBitmap:!!this._runConfig.smoothBitmaps,enableBlends:!!this._runConfig.enableBlends,enableFilters:!!this._runConfig.enableFilters}};return e.replace(/__LOADER_URL__/,n.loader).replace(/__GAME_CONFIG__/,JSON.stringify(JSON.stringify(r)))}_constructPlayer(){const t=this._root,e=document.createElement("iframe");e.style.display=this._runConfig.hideBeforeLoad?"none":"",this._gameFrame=e,t.appendChild(e),e.addEventListener("load",this._attachRuntimeEvents.bind(this),{once:!0}),e.addEventListener("error",this.onError),e.srcdoc=this._buildTemplate(e)}_configKey(t){const e=t.toLowerCase();return e in N?N[e]:Object.keys(k.BINDING_CONFIG).find(t=>t.toLowerCase()===e)}_mapAttrs(){const t=this.querySelectorAll("param"),e=this._runConfig;t.forEach(t=>{const n=this._configKey(t.name);n&&(e[n]=t.value)}),this.getAttributeNames().forEach(t=>{const n=this._configKey(t);n&&(e[n]=this.getAttribute(t))})}_loadGlobalConfig(){const t=window.AWAY_EMBED_CFG||{},e=k.BINDING_CONFIG;for(const[n,r]of Object.entries(t))n in e&&(this._runConfig[n]=r)}_setDefaults(){const t=k.BINDING_CONFIG;for(const e in t){if(t[e].required&&void 0===this._runConfig[e])throw`Parameter ${e} is required!`;void 0===this._runConfig[e]&&(this._runConfig[e]=t[e].default)}}_normalizeConfig(){const t=this._runConfig;t.runtimeBaseUrl=new URL(t.runtimeBaseUrl.replace(/\/?$/,"/"),document.baseURI).href,void 0===t.splash&&(t.splash=new URL("assets/splash.jpg",t.runtimeBaseUrl).href),t.scaleMode=U[(""+t.scaleMode).toLowerCase()]||t.scaleMode,t.stageAlign&&(t.stageAlign=function(t){const e=t.toUpperCase();return(e.indexOf("T")>-1?"T":e.indexOf("B")>-1?"B":"")+(e.indexOf("L")>-1?"L":e.indexOf("R")>-1?"R":"")}(t.stageAlign)||void 0);for(const e of["autoplay","hideBeforeLoad","smoothBitmaps","enableBlends","enableFilters"])"string"==typeof t[e]&&(t[e]=!/^(false|0)$/i.test(t[e].trim()));"false"===t.splash&&(t.splash=!1),"false"===t.progress&&(t.progress=!1),t.bgcolor&&(t.backgroundColor=null===P(t.bgcolor)?t.bgcolor:"#"+t.bgcolor.replace("#",""))}_updateStyle(){this._style.textContent=`\n :host {\n display: inline-block;\n contain: content;\n width: ${x(this._runConfig.width)};\n height: ${x(this._runConfig.height)};\n }\n iframe {\n display: block;\n width: 100%;\n height: 100%;\n border: none;\n }\n `}connectedCallback(){setTimeout(()=>{this._loaderHolder=this.querySelector("div.awayfl__loader"),this._loadGlobalConfig(),this._mapAttrs(),this._setDefaults(),this._normalizeConfig(),this._style=document.createElement("style"),this._updateStyle(),this._root.appendChild(this._style),this._constructPlayer()})}disconnectedCallback(){this._dropPlayer()}attributeChangedCallback(t,e,n){if(this.isConnected)return"src"===t&&this._player?(this._dropPlayer(),this._runConfig.src=n,void this._constructPlayer()):void("width"!==t&&"height"!==t||!this._style||(this._runConfig[t]=n,this._updateStyle()))}}k.BINDING_CONFIG={version:{required:!1,default:"latest"},runtimeBaseUrl:{required:!1,default:I},src:{required:!0},width:{required:!1,default:550},height:{required:!1,default:400},onLoad:{required:!1},onProgress:{required:!1},onError:{required:!1},scaleMode:{required:!1,default:"showAll"},stageAlign:{required:!1},autoplay:{required:!1,default:!0},hideBeforeLoad:{required:!1,default:!1},maxStageScale:{required:!1,default:void 0},backgroundColor:{required:!1,default:"black"},bgcolor:{required:!1},flashvars:{required:!1},splash:{required:!1},progress:{required:!1,default:{direction:"lr",back:"#130d02",line:"#f29f01",rect:[.25,.77,.5,.01]}},smoothBitmaps:{required:!1,default:!1},enableBlends:{required:!1,default:!1},enableFilters:{required:!1,default:!1}},customElements.get("awayfl-player")||customElements.define("awayfl-player",k);const R=window;function G(t,e){const n=Object.getOwnPropertyDescriptor(window,t);!n||n.configurable?Object.defineProperty(window,t,{configurable:!0,enumerable:!0,get:()=>e,set:n=>{n!==e&&console.info(`[AwayFL] Ignoring the page's ${t}, as AwayFL provides it`)}}):R[t]=e}return(R.swfobject||R.swfObject||R.SWFObject)&&console.info("[AwayFL] Replacing the page's SWFObject"),G("swfobject",B),G("swfObject",B),G("SWFObject",j),E(()=>setTimeout(()=>{!1!==(R.AWAY_EMBED_CFG||{}).autoUpgrade&&(u(),function(){let t=[];const e=()=>{const e=t;t=[],e.forEach(t=>t.isConnected&&u(t))};new MutationObserver(n=>{const r=!t.length;for(const e of n)e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE&&t.push(e)});r&&t.length&&setTimeout(e)}).observe(document.documentElement,{childList:!0,subtree:!0})}())})),t.AwayPlayerComponent=k,t.SWFObject=j,t.VERSION="0.1.4",t.configure=function(t){R.AWAY_EMBED_CFG=Object.assign(R.AWAY_EMBED_CFG||{},t)},t.swfObject=B,t.swfobject=B,t}({});
|
|
2
|
+
//# sourceMappingURL=embed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed.js","sources":["../src/embed/flashMarkup.ts","../src/embed/swfobject.ts","../src/embed/AwayPlayerComponent.ts","../src/embed/index.ts"],"sourcesContent":["const FLASH_CLASSID = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';\nconst FLASH_TYPES = ['application/x-shockwave-flash', 'application/futuresplash'];\nconst SWF_URL = /\\.swf([?#]|$)/i;\n/**\n * Attributes that describe the plugin rather than the element, so aren't copied\n */\nconst PLUGIN_ATTRIBUTES = ['classid', 'codebase', 'type', 'pluginspage', 'data', 'src', 'width', 'height'];\n/**\n * Flash parameters, which <embed> takes as attributes\n */\nconst EMBED_PARAMS = [\n 'flashvars', 'bgcolor', 'scale', 'salign', 'wmode', 'quality', 'menu', 'play', 'loop', 'base',\n 'allowscriptaccess', 'allowfullscreen', 'allowfullscreeninteractive', 'allownetworking',\n 'devicefont', 'seamlesstabbing', 'swliveconnect', 'swremote', 'swfversion', 'expressinstall',\n];\nfunction paramsOf(el) {\n const params = {};\n for (const child of Array.from(el.children)) {\n if (child.localName === 'param' && child.getAttribute('name')) {\n params[child.getAttribute('name').toLowerCase()] = child.getAttribute('value') || '';\n }\n }\n return params;\n}\nexport function isFlashElement(el) {\n const tag = el.localName;\n if (tag !== 'object' && tag !== 'embed') {\n return false;\n }\n if (FLASH_TYPES.indexOf((el.getAttribute('type') || '').toLowerCase()) > -1\n || (el.getAttribute('classid') || '').toLowerCase() === FLASH_CLASSID) {\n return true;\n }\n const url = tag === 'embed'\n ? el.getAttribute('src')\n : el.getAttribute('data') || paramsOf(el).movie;\n return SWF_URL.test(url || '');\n}\nfunction hasFlashAncestor(el) {\n for (let parent = el.parentElement; parent; parent = parent.parentElement) {\n if (isFlashElement(parent)) {\n return true;\n }\n }\n return false;\n}\n/**\n * Reads an <object>/<embed> and any Flash elements nested in it (the usual\n * cross-browser markup), the outermost taking precedence\n */\nfunction readFlashMarkup(outer) {\n const markup = { attributes: {}, params: {} };\n const elements = [outer].concat(Array.from(outer.querySelectorAll('object, embed')).filter(isFlashElement));\n const set = (map, name, value) => {\n if (!(name in map)) {\n map[name] = value;\n }\n };\n for (const el of elements) {\n const isEmbed = el.localName === 'embed';\n const params = paramsOf(el);\n markup.src = markup.src\n || el.getAttribute(isEmbed ? 'src' : 'data')\n || params.movie\n || params.src;\n for (const attr of Array.from(el.attributes)) {\n const name = attr.name.toLowerCase();\n if (name === 'width' || name === 'height') {\n set(markup.attributes, name, attr.value);\n }\n else if (isEmbed && EMBED_PARAMS.indexOf(name) > -1) {\n set(markup.params, name, attr.value);\n }\n else if (PLUGIN_ATTRIBUTES.indexOf(name) === -1) {\n set(markup.attributes, name, attr.value);\n }\n }\n for (const name in params) {\n if (name !== 'movie' && name !== 'src') {\n set(markup.params, name, params[name]);\n }\n }\n }\n return markup;\n}\nexport function createPlayer(attributes, params) {\n const player = document.createElement('awayfl-player');\n for (const name in attributes) {\n try {\n player.setAttribute(name, attributes[name]);\n }\n catch (e) {\n console.warn(`[AwayFL] Skipping invalid attribute \"${name}\"`);\n }\n }\n for (const name in params) {\n const param = document.createElement('param');\n param.name = name;\n param.value = params[name];\n player.appendChild(param);\n }\n return player;\n}\n/**\n * Replaces Flash <object>/<embed> markup with an AwayFL player\n */\nexport function upgradeElement(el) {\n const markup = readFlashMarkup(el);\n if (!markup.src) {\n return null;\n }\n const player = createPlayer(Object.assign({ src: markup.src }, markup.attributes), markup.params);\n el.parentNode.replaceChild(player, el);\n return player;\n}\nexport function upgradeAll(root = document) {\n if (root instanceof Element && isFlashElement(root)) {\n if (!hasFlashAncestor(root)) {\n upgradeElement(root);\n }\n return;\n }\n root.querySelectorAll('object, embed').forEach((el) => {\n // nested elements are detached once their outermost element is upgraded\n if (el.isConnected && isFlashElement(el) && !hasFlashAncestor(el)) {\n upgradeElement(el);\n }\n });\n}\n/**\n * Upgrades Flash markup added to the page after it has loaded\n */\nexport function observeFlashMarkup() {\n let pending = [];\n const flush = () => {\n const added = pending;\n pending = [];\n added.forEach((el) => el.isConnected && upgradeAll(el));\n };\n new MutationObserver((records) => {\n const wasEmpty = !pending.length;\n for (const record of records) {\n record.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n pending.push(node);\n }\n });\n }\n // wait for the script adding the markup to finish, e.g. appending its <param>s\n if (wasEmpty && pending.length) {\n setTimeout(flush);\n }\n }).observe(document.documentElement, { childList: true, subtree: true });\n}\n","import { createPlayer, isFlashElement, upgradeElement } from './flashMarkup';\n/**\n * The Flash Player version reported to pages, so they don't take their \"no Flash\" branch\n */\nconst PLAYER_VERSION = [32, 0, 0];\nconst userAgent = navigator.userAgent.toLowerCase();\nconst platform = (navigator.platform || '').toLowerCase();\nconst ua = {\n w3: true,\n pv: PLAYER_VERSION.slice(),\n wk: /webkit/.test(userAgent) ? parseFloat(userAgent.replace(/^.*webkit\\/(\\d+(\\.\\d+)?).*$/, '$1')) : false,\n ie: false,\n win: /win/.test(platform || userAgent),\n mac: /mac/.test(platform || userAgent),\n};\nlet encodeURIEnabled = false;\nlet autoHideShow = true;\nlet dynamicStylesheet = null;\nlet dynamicStylesheetMedia = null;\nfunction isDomLoaded() {\n return document.readyState !== 'loading';\n}\nfunction getElement(id) {\n return typeof id === 'string' ? document.getElementById(id) : id;\n}\n// by tag, as the element may be another build's class if both are loaded\nfunction isPlayer(el) {\n return !!el && el.localName === 'awayfl-player';\n}\nexport function addDomLoadEvent(fn) {\n if (isDomLoaded()) {\n fn();\n }\n else {\n document.addEventListener('DOMContentLoaded', () => fn());\n }\n}\nfunction addLoadEvent(fn) {\n if (document.readyState === 'complete') {\n setTimeout(fn);\n }\n else {\n window.addEventListener('load', () => fn());\n }\n}\nfunction hasPlayerVersion(versionStr) {\n const v = String(versionStr).split('.');\n const required = [parseInt(v[0], 10), parseInt(v[1], 10) || 0, parseInt(v[2], 10) || 0];\n const pv = PLAYER_VERSION;\n return pv[0] > required[0]\n || (pv[0] === required[0] && pv[1] > required[1])\n || (pv[0] === required[0] && pv[1] === required[1] && pv[2] >= required[2]);\n}\nfunction createCSS(selStr, declStr, mediaStr, newStyleBoolean) {\n const head = document.head;\n if (!head) {\n return;\n }\n const media = typeof mediaStr === 'string' && mediaStr ? mediaStr : 'screen';\n if (newStyleBoolean) {\n dynamicStylesheet = null;\n dynamicStylesheetMedia = null;\n }\n if (!dynamicStylesheet || dynamicStylesheetMedia !== media) {\n dynamicStylesheet = document.createElement('style');\n dynamicStylesheet.media = media;\n dynamicStylesheetMedia = media;\n head.appendChild(dynamicStylesheet);\n }\n dynamicStylesheet.appendChild(document.createTextNode(selStr + ' {' + declStr + '}'));\n}\n/**\n * Hides alternative content until it's replaced, as SWFObject does\n */\nfunction setVisibility(id, isVisible) {\n if (!autoHideShow || !id) {\n return;\n }\n const visibility = isVisible ? 'visible' : 'hidden';\n const el = document.getElementById(id);\n if (isDomLoaded() && el) {\n el.style.visibility = visibility;\n }\n else {\n createCSS('#' + CSS.escape(id), 'visibility:' + visibility);\n }\n}\nfunction createSWF(attObj, parObj, replaceElemIdStr) {\n const el = getElement(replaceElemIdStr);\n if (!el || !attObj || !attObj.data) {\n return undefined;\n }\n if (typeof attObj.id === 'undefined' && el.id) {\n attObj.id = el.id;\n }\n const attributes = { src: '' + attObj.data };\n for (const key in attObj) {\n const name = key.toLowerCase();\n if (name === 'styleclass') {\n attributes['class'] = '' + attObj[key];\n }\n else if (name !== 'classid' && name !== 'data') {\n attributes[key] = '' + attObj[key];\n }\n }\n const params = {};\n for (const key in parObj) {\n if (key.toLowerCase() !== 'movie') {\n params[key] = '' + parObj[key];\n }\n }\n const player = createPlayer(attributes, params);\n el.parentNode.replaceChild(player, el);\n return player;\n}\nfunction buildFlashVars(flashvarsObj) {\n if (!flashvarsObj || typeof flashvarsObj !== 'object') {\n return '';\n }\n return Object.keys(flashvarsObj)\n .map((key) => key + '=' + (encodeURIEnabled ? encodeURIComponent(flashvarsObj[key]) : flashvarsObj[key]))\n .join('&');\n}\nfunction embedSWF(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, _xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {\n const id = typeof replaceElemIdStr === 'string' ? replaceElemIdStr : replaceElemIdStr && replaceElemIdStr.id;\n const callbackObj = { success: false, id };\n // unlike SWFObject the version is optional, as AwayFL's own examples omit it\n if (!swfUrlStr || !replaceElemIdStr || !widthStr || !heightStr) {\n callbackFn && callbackFn(callbackObj);\n return;\n }\n setVisibility(id, false);\n addDomLoadEvent(() => {\n // copied, as pages often reuse these objects for several SWFs\n const att = Object.assign({}, attObj, { data: swfUrlStr, width: '' + widthStr, height: '' + heightStr });\n const par = Object.assign({}, parObj);\n const flashvars = buildFlashVars(flashvarsObj);\n if (flashvars) {\n par.flashvars = typeof par.flashvars !== 'undefined' ? par.flashvars + '&' + flashvars : flashvars;\n }\n if (!swfVersionStr || hasPlayerVersion(swfVersionStr)) {\n const ref = createSWF(att, par, replaceElemIdStr);\n if (att.id == id) {\n setVisibility(id, true);\n }\n callbackObj.success = !!ref;\n if (ref) {\n callbackObj.ref = ref;\n }\n }\n else {\n // show the alternative content\n setVisibility(id, true);\n }\n callbackFn && callbackFn(callbackObj);\n });\n}\n/**\n * Static publishing: replaces the page's <object> markup with a player\n */\nfunction registerObject(objectIdStr, swfVersionStr, _xiSwfUrlStr, callbackFn) {\n if (!objectIdStr || !swfVersionStr) {\n callbackFn && callbackFn({ success: false, id: objectIdStr });\n return;\n }\n setVisibility(objectIdStr, false);\n addDomLoadEvent(() => {\n const callbackObj = { success: false, id: objectIdStr };\n if (hasPlayerVersion(swfVersionStr)) {\n let ref = document.getElementById(objectIdStr);\n // may already have been upgraded with the rest of the page's markup\n if (ref && !isPlayer(ref)) {\n ref = isFlashElement(ref) ? upgradeElement(ref) : null;\n }\n if (ref) {\n callbackObj.success = true;\n callbackObj.ref = ref;\n }\n }\n setVisibility(objectIdStr, true);\n callbackFn && callbackFn(callbackObj);\n });\n}\nfunction getObjectById(objectIdStr) {\n const el = document.getElementById(objectIdStr);\n return isPlayer(el) ? el : null;\n}\nfunction removeSWF(objElemIdStr) {\n const el = document.getElementById(objElemIdStr);\n if (el && (isPlayer(el) || isFlashElement(el))) {\n el.remove();\n }\n}\nfunction urlEncodeIfNecessary(s) {\n return /[\\\\\\\"<>\\.;]/.test(s) ? encodeURIComponent(s) : s;\n}\nfunction getQueryParamValue(param) {\n let q = document.location.search || document.location.hash;\n if (q) {\n if (/\\?/.test(q)) {\n q = q.split('?')[1];\n }\n if (param == null) {\n return urlEncodeIfNecessary(q);\n }\n const pairs = q.split('&');\n for (let i = 0; i < pairs.length; i++) {\n if (pairs[i].substring(0, pairs[i].indexOf('=')) == param) {\n return urlEncodeIfNecessary(pairs[i].substring(pairs[i].indexOf('=') + 1));\n }\n }\n }\n return '';\n}\nexport const swfobject = {\n registerObject,\n getObjectById,\n embedSWF,\n switchOffAutoHideShow() {\n autoHideShow = false;\n },\n enableUriEncoding(enable) {\n encodeURIEnabled = typeof enable === 'undefined' ? true : !!enable;\n },\n ua,\n getFlashPlayerVersion() {\n return { major: PLAYER_VERSION[0], minor: PLAYER_VERSION[1], release: PLAYER_VERSION[2] };\n },\n hasFlashPlayerVersion: hasPlayerVersion,\n createSWF(attObj, parObj, replaceElemIdStr) {\n return createSWF(attObj, parObj, replaceElemIdStr);\n },\n showExpressInstall(_att, _par, replaceElemIdStr, callbackFn) {\n console.warn('[AwayFL] Express Install is not needed or supported');\n callbackFn && callbackFn({ success: false, id: replaceElemIdStr });\n },\n removeSWF,\n createCSS,\n addDomLoadEvent,\n addLoadEvent,\n getQueryParamValue,\n expressInstallCallback() { },\n};\n/**\n * SWFObject 1.5: `new SWFObject(swf, id, width, height, version, bgcolor).write(elementId)`,\n * which renders the SWF inside the target element\n */\nexport class SWFObject {\n constructor(swf, id, w, h, ver, c, quality) {\n this._attributes = {};\n this._params = {};\n this._variables = {};\n this.setAttribute('swf', swf);\n this.setAttribute('id', id);\n this.setAttribute('width', '' + w);\n this.setAttribute('height', '' + h);\n this.setAttribute('version', ver);\n if (c) {\n this.addParam('bgcolor', c);\n }\n this.addParam('quality', quality || 'high');\n }\n setAttribute(name, value) {\n this._attributes[name] = value;\n }\n getAttribute(name) {\n return this._attributes[name] || '';\n }\n addParam(name, value) {\n this._params[name] = value;\n }\n getParams() {\n return this._params;\n }\n addVariable(name, value) {\n this._variables[name] = value;\n }\n getVariable(name) {\n return this._variables[name] || '';\n }\n getVariables() {\n return this._variables;\n }\n getVariablePairs() {\n return Object.keys(this._variables).map((key) => key + '=' + this._variables[key]);\n }\n useExpressInstall(_path) { }\n write(elementId) {\n const target = getElement(elementId);\n if (!target) {\n return false;\n }\n const id = this.getAttribute('id');\n const params = Object.assign({}, this._params);\n const flashvars = this.getVariablePairs().join('&');\n if (flashvars) {\n params.flashvars = flashvars;\n }\n const player = createPlayer({\n src: this.getAttribute('swf'),\n id,\n name: id,\n width: this.getAttribute('width'),\n height: this.getAttribute('height'),\n }, params);\n target.innerHTML = '';\n target.appendChild(player);\n return true;\n }\n}\n","//@ts-ignore\nimport template from \"./embed.html\";\n// rollup turns import.meta.url into document.currentScript's src in the classic\n// script build; in the ES module build it's the module's own URL\nconst scriptBaseUrl = new URL('.', import.meta.url).href;\nconst defaultProgress = {\n \"direction\": \"lr\",\n \"back\": \"#130d02\",\n \"line\": \"#f29f01\",\n \"rect\": [\n 0.25,\n 0.77,\n 0.5,\n 0.01\n ]\n};\n/**\n * Flash <object>/<embed> parameter and attribute names that map onto config keys.\n * Others, such as wmode, allowScriptAccess, quality and menu, have no equivalent\n * and are ignored.\n */\nconst FLASH_PARAMS = {\n movie: 'src',\n data: 'src',\n flashvars: 'flashvars',\n bgcolor: 'bgcolor',\n scale: 'scaleMode',\n salign: 'stageAlign',\n};\nconst SCALE_MODES = {\n showall: 'showAll',\n all: 'showAll',\n noborder: 'noBorder',\n exactfit: 'exactFit',\n noscale: 'noScale',\n};\nexport function parseFlashVars(value) {\n const result = {};\n if (typeof value === 'string') {\n new URLSearchParams(value).forEach((v, k) => {\n result[k] = v;\n });\n }\n else if (value) {\n for (const key in value) {\n result[key] = String(value[key]);\n }\n }\n return result;\n}\nfunction parseColor(value) {\n const match = /^#?([0-9a-f]{6})$/i.exec(value || '');\n return match ? parseInt(match[1], 16) : null;\n}\nfunction normalizeAlign(value) {\n const v = value.toUpperCase();\n return (v.indexOf('T') > -1 ? 'T' : v.indexOf('B') > -1 ? 'B' : '')\n + (v.indexOf('L') > -1 ? 'L' : v.indexOf('R') > -1 ? 'R' : '');\n}\nfunction cssSize(value) {\n return /^\\d+(\\.\\d+)?$/.test('' + value) ? value + 'px' : '' + value;\n}\nexport class AwayPlayerComponent extends HTMLElement {\n static get observedAttributes() {\n return [\n 'src',\n 'width',\n 'height'\n ];\n }\n get player() {\n return this._player;\n }\n get config() {\n return this._runConfig;\n }\n set config(cfg) {\n this._runConfig = cfg;\n }\n get src() {\n return this._runConfig.src || this.getAttribute('src');\n }\n set src(v) {\n this._runConfig.src = v;\n }\n set width(v) {\n this._runConfig.width = v;\n }\n get width() {\n return this._runConfig.width || this.getAttribute('width');\n }\n set height(v) {\n this._runConfig.height = v;\n }\n get height() {\n return this._runConfig.height || this.getAttribute('height');\n }\n set runtimeBaseUrl(v) {\n this._runConfig.runtimeBaseUrl = v;\n }\n get runtimeBaseUrl() {\n return this._runConfig.runtimeBaseUrl;\n }\n constructor() {\n super();\n this._runConfig = {};\n this.onError = this.onError.bind(this);\n this._root = this.attachShadow({ mode: 'closed' });\n }\n _getRuntimeUrl() {\n const baseUrl = this._runConfig.runtimeBaseUrl;\n const loader = new URL('loader.js', baseUrl).href;\n const runtime = new URL('runtime.js', baseUrl).href;\n /**\n * @todo support runtime version\n **/\n return {\n loader,\n runtime,\n baseUrl,\n };\n }\n _dropPlayer() {\n if (this._gameFrame) {\n this._gameFrame.remove();\n this._player = null;\n }\n }\n onError(_arg) {\n const f = this._runConfig.onError && self[this._runConfig.onError];\n if (typeof f === 'function') {\n f(_arg);\n }\n this.dispatchEvent(new ErrorEvent('error', {\n error: new Error('Awayfl runtime error'),\n message: (_arg === null || _arg === void 0 ? void 0 : _arg.message) || _arg,\n }));\n }\n _attachRuntimeEvents() {\n const fd = this._gameFrame.contentWindow;\n //@ts-ignore\n fd.addEventListener('awayfl-player-init', ({ detail }) => {\n this._player = detail;\n }, { once: true });\n fd.addEventListener('awayfl-player-load', () => {\n const f = this._runConfig.onLoad && self[this._runConfig.onLoad];\n if (typeof f === 'function') {\n f();\n }\n this.dispatchEvent(new CustomEvent('load'));\n this._gameFrame.style.display = '';\n }, { once: true });\n //@ts-ignore\n fd.addEventListener('awayfl-player-error', ({ detail }) => this.onError(detail), { once: true });\n //@ts-ignore\n fd.addEventListener('awayfl-player-progress', ({ detail }) => {\n const f = this._runConfig.onProgress && self[this._runConfig.onProgress];\n if (typeof f === 'function') {\n f(detail);\n }\n this.dispatchEvent(new CustomEvent('progress', { detail }));\n });\n }\n _buildTemplate(frame) {\n const t = template;\n const urls = this._getRuntimeUrl();\n const gameConfig = {\n width: frame.clientWidth,\n height: frame.clientHeight,\n backgroundColor: this._runConfig.backgroundColor,\n splash: this._runConfig.splash,\n progress: this._runConfig.progress,\n runtime: [urls.runtime],\n binary: [{\n path: this._runConfig.src,\n resourceType: 'GAME',\n name: 'Game',\n meta: {}\n }],\n //debug: true,\n baseUrl: urls.baseUrl,\n maxStageScale: +this._runConfig.maxStageScale,\n flashvars: parseFlashVars(this._runConfig.flashvars),\n stageScaleMode: this._runConfig.scaleMode,\n stageAlign: this._runConfig.stageAlign,\n stageColor: parseColor(this._runConfig.bgcolor),\n runtimeFlags: {\n defaultSmoothBitmap: !!this._runConfig.smoothBitmaps,\n enableBlends: !!this._runConfig.enableBlends,\n enableFilters: !!this._runConfig.enableFilters,\n }\n };\n return t\n .replace(/__LOADER_URL__/, urls.loader)\n .replace(/__GAME_CONFIG__/, JSON.stringify(JSON.stringify(gameConfig)));\n }\n _constructPlayer() {\n const root = this._root;\n const frame = document.createElement('iframe');\n frame.style.display = this._runConfig.hideBeforeLoad ? 'none' : '';\n this._gameFrame = frame;\n root.appendChild(frame);\n frame.addEventListener('load', this._attachRuntimeEvents.bind(this), {\n once: true\n });\n frame.addEventListener('error', this.onError);\n frame.srcdoc = this._buildTemplate(frame);\n }\n /**\n * Config key for a param or attribute name, matched case-insensitively as\n * HTML lowercases attribute names and Flash param names ignore case\n */\n _configKey(name) {\n const lower = name.toLowerCase();\n if (lower in FLASH_PARAMS) {\n return FLASH_PARAMS[lower];\n }\n return Object.keys(AwayPlayerComponent.BINDING_CONFIG)\n .find((key) => key.toLowerCase() === lower);\n }\n _mapAttrs() {\n const params = this.querySelectorAll('param');\n const config = this._runConfig;\n params.forEach(node => {\n const key = this._configKey(node.name);\n if (key) {\n config[key] = node.value;\n }\n });\n this.getAttributeNames().forEach(name => {\n const key = this._configKey(name);\n if (key) {\n config[key] = this.getAttribute(name);\n }\n });\n }\n _loadGlobalConfig() {\n const global = window;\n const globalCfg = global.AWAY_EMBED_CFG || {};\n const scheme = AwayPlayerComponent.BINDING_CONFIG;\n for (const [key, value] of Object.entries(globalCfg)) {\n if (key in scheme) {\n this._runConfig[key] = value;\n }\n }\n }\n _setDefaults() {\n const scheme = AwayPlayerComponent.BINDING_CONFIG;\n for (const key in scheme) {\n if (scheme[key].required && typeof this._runConfig[key] === 'undefined') {\n throw `Parameter ${key} is required!`;\n }\n if (typeof this._runConfig[key] === 'undefined') {\n this._runConfig[key] = scheme[key].default;\n }\n }\n }\n _normalizeConfig() {\n const config = this._runConfig;\n // absolute and ending in a slash, so the runtime's files resolve inside it\n config.runtimeBaseUrl = new URL(config.runtimeBaseUrl.replace(/\\/?$/, '/'), document.baseURI).href;\n if (config.splash === undefined) {\n config.splash = new URL('assets/splash.jpg', config.runtimeBaseUrl).href;\n }\n config.scaleMode = SCALE_MODES[('' + config.scaleMode).toLowerCase()] || config.scaleMode;\n if (config.stageAlign) {\n config.stageAlign = normalizeAlign(config.stageAlign) || undefined;\n }\n // params and attributes are strings, but \"false\" shouldn't mean true\n for (const key of ['autoplay', 'hideBeforeLoad', 'smoothBitmaps', 'enableBlends', 'enableFilters']) {\n if (typeof config[key] === 'string') {\n config[key] = !/^(false|0)$/i.test(config[key].trim());\n }\n }\n if (config.splash === 'false') {\n config.splash = false;\n }\n if (config.progress === 'false') {\n config.progress = false;\n }\n if (config.bgcolor) {\n config.backgroundColor = parseColor(config.bgcolor) === null\n ? config.bgcolor\n : '#' + config.bgcolor.replace('#', '');\n }\n }\n _updateStyle() {\n this._style.textContent = `\n :host {\n display: inline-block;\n contain: content;\n width: ${cssSize(this._runConfig.width)};\n height: ${cssSize(this._runConfig.height)};\n }\n iframe {\n display: block;\n width: 100%;\n height: 100%;\n border: none;\n }\n `;\n }\n connectedCallback() {\n setTimeout(() => {\n this._loaderHolder = this.querySelector('div.awayfl__loader');\n this._loadGlobalConfig();\n this._mapAttrs();\n this._setDefaults();\n this._normalizeConfig();\n this._style = document.createElement('style');\n this._updateStyle();\n this._root.appendChild(this._style);\n this._constructPlayer();\n });\n }\n disconnectedCallback() {\n this._dropPlayer();\n }\n attributeChangedCallback(name, _oldValue, newValue) {\n if (!this.isConnected) {\n return;\n }\n // if SRC changed, drop runtime and load again\n if (name === 'src' && this._player) {\n this._dropPlayer();\n this._runConfig.src = newValue;\n this._constructPlayer();\n return;\n }\n if ((name === 'width' || name === 'height') && this._style) {\n this._runConfig[name] = newValue;\n this._updateStyle();\n }\n }\n}\nAwayPlayerComponent.BINDING_CONFIG = {\n version: { required: false, default: 'latest' },\n runtimeBaseUrl: { required: false, default: scriptBaseUrl },\n src: { required: true },\n width: { required: false, default: 550 },\n height: { required: false, default: 400 },\n onLoad: { required: false },\n onProgress: { required: false },\n onError: { required: false },\n scaleMode: { required: false, default: 'showAll' },\n stageAlign: { required: false },\n autoplay: { required: false, default: true },\n hideBeforeLoad: { required: false, default: false },\n maxStageScale: { required: false, default: undefined },\n backgroundColor: { required: false, default: 'black' },\n bgcolor: { required: false },\n flashvars: { required: false },\n // defaults to the splash in runtimeBaseUrl's assets\n splash: { required: false },\n progress: { required: false, default: defaultProgress },\n // runtime\n smoothBitmaps: { required: false, default: false },\n enableBlends: { required: false, default: false },\n enableFilters: { required: false, default: false },\n};\n// both the script and module builds may be loaded\nif (!customElements.get('awayfl-player')) {\n customElements.define('awayfl-player', AwayPlayerComponent);\n}\n","import { observeFlashMarkup, upgradeAll } from './flashMarkup';\nimport { addDomLoadEvent, swfobject, SWFObject } from './swfobject';\nexport { AwayPlayerComponent } from './AwayPlayerComponent';\nexport { swfobject, swfobject as swfObject, SWFObject };\n//@ts-ignore\nexport const VERSION = \"__VERSION__\";\nconst global = window;\n/**\n * Sets options for players, the same as defining AWAY_EMBED_CFG\n */\nexport function configure(config) {\n global.AWAY_EMBED_CFG = Object.assign(global.AWAY_EMBED_CFG || {}, config);\n}\n/**\n * Defines a global that keeps AwayFL's value if a page's own swfobject.js assigns\n * over it later, so embed.js works whether it's included before or after it\n */\nfunction defineGlobal(name, value) {\n const existing = Object.getOwnPropertyDescriptor(window, name);\n if (existing && !existing.configurable) {\n global[name] = value;\n return;\n }\n Object.defineProperty(window, name, {\n configurable: true,\n enumerable: true,\n get: () => value,\n set: (other) => {\n if (other !== value) {\n console.info(`[AwayFL] Ignoring the page's ${name}, as AwayFL provides it`);\n }\n },\n });\n}\nif (global.swfobject || global.swfObject || global.SWFObject) {\n console.info('[AwayFL] Replacing the page\\'s SWFObject');\n}\ndefineGlobal('swfobject', swfobject);\ndefineGlobal('swfObject', swfobject);\ndefineGlobal('SWFObject', SWFObject);\n// upgrade <object>/<embed> markup, including on pages that don't use SWFObject;\n// a tick later, so a module importing this can call configure() first\naddDomLoadEvent(() => setTimeout(() => {\n if ((global.AWAY_EMBED_CFG || {}).autoUpgrade !== false) {\n upgradeAll();\n observeFlashMarkup();\n }\n}));\n"],"names":["FLASH_TYPES","SWF_URL","PLUGIN_ATTRIBUTES","EMBED_PARAMS","paramsOf","el","params","child","Array","from","children","localName","getAttribute","toLowerCase","isFlashElement","tag","indexOf","url","movie","test","hasFlashAncestor","parent","parentElement","createPlayer","attributes","player","document","createElement","name","setAttribute","e","console","warn","param","value","appendChild","upgradeElement","markup","outer","elements","concat","querySelectorAll","filter","set","map","isEmbed","src","attr","readFlashMarkup","Object","assign","parentNode","replaceChild","upgradeAll","root","Element","forEach","isConnected","PLAYER_VERSION","userAgent","navigator","platform","ua","w3","pv","slice","wk","parseFloat","replace","ie","win","mac","encodeURIEnabled","autoHideShow","dynamicStylesheet","dynamicStylesheetMedia","isDomLoaded","readyState","getElement","id","getElementById","isPlayer","addDomLoadEvent","fn","addEventListener","hasPlayerVersion","versionStr","v","String","split","required","parseInt","createCSS","selStr","declStr","mediaStr","newStyleBoolean","head","media","createTextNode","setVisibility","isVisible","visibility","style","CSS","escape","createSWF","attObj","parObj","replaceElemIdStr","data","key","urlEncodeIfNecessary","s","encodeURIComponent","swfobject","registerObject","objectIdStr","swfVersionStr","_xiSwfUrlStr","callbackFn","callbackObj","success","ref","getObjectById","embedSWF","swfUrlStr","widthStr","heightStr","flashvarsObj","att","width","height","par","flashvars","keys","join","buildFlashVars","switchOffAutoHideShow","enableUriEncoding","enable","getFlashPlayerVersion","major","minor","release","hasFlashPlayerVersion","showExpressInstall","_att","_par","removeSWF","objElemIdStr","remove","addLoadEvent","setTimeout","window","getQueryParamValue","q","location","search","hash","pairs","i","length","substring","expressInstallCallback","SWFObject","constructor","swf","w","h","ver","c","quality","this","_attributes","_params","_variables","addParam","getParams","addVariable","getVariable","getVariables","getVariablePairs","useExpressInstall","_path","write","elementId","target","innerHTML","scriptBaseUrl","URL","_documentCurrentScript","baseURI","href","FLASH_PARAMS","bgcolor","scale","salign","SCALE_MODES","showall","all","noborder","exactfit","noscale","parseFlashVars","result","URLSearchParams","k","parseColor","match","exec","cssSize","AwayPlayerComponent","HTMLElement","observedAttributes","_player","config","_runConfig","cfg","runtimeBaseUrl","super","onError","bind","_root","attachShadow","mode","_getRuntimeUrl","baseUrl","loader","runtime","_dropPlayer","_gameFrame","_arg","f","self","dispatchEvent","ErrorEvent","error","Error","message","_attachRuntimeEvents","fd","contentWindow","detail","once","onLoad","CustomEvent","display","onProgress","_buildTemplate","frame","t","urls","gameConfig","clientWidth","clientHeight","backgroundColor","splash","progress","binary","path","resourceType","meta","maxStageScale","stageScaleMode","scaleMode","stageAlign","stageColor","runtimeFlags","defaultSmoothBitmap","smoothBitmaps","enableBlends","enableFilters","JSON","stringify","_constructPlayer","hideBeforeLoad","srcdoc","_configKey","lower","BINDING_CONFIG","find","_mapAttrs","node","getAttributeNames","_loadGlobalConfig","globalCfg","AWAY_EMBED_CFG","scheme","entries","_setDefaults","default","_normalizeConfig","undefined","toUpperCase","normalizeAlign","trim","_updateStyle","_style","textContent","connectedCallback","_loaderHolder","querySelector","disconnectedCallback","attributeChangedCallback","_oldValue","newValue","version","autoplay","direction","back","line","rect","customElements","get","define","global","defineGlobal","existing","getOwnPropertyDescriptor","configurable","defineProperty","enumerable","other","info","swfObject","autoUpgrade","pending","flush","added","MutationObserver","records","wasEmpty","record","addedNodes","nodeType","Node","ELEMENT_NODE","push","observe","documentElement","childList","subtree","observeFlashMarkup"],"mappings":"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"}
|
package/dist/embed.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const t=["application/x-shockwave-flash","application/futuresplash"],e=/\.swf([?#]|$)/i,n=["classid","codebase","type","pluginspage","data","src","width","height"],r=["flashvars","bgcolor","scale","salign","wmode","quality","menu","play","loop","base","allowscriptaccess","allowfullscreen","allowfullscreeninteractive","allownetworking","devicefont","seamlesstabbing","swliveconnect","swremote","swfversion","expressinstall"];function i(t){const e={};for(const n of Array.from(t.children))"param"===n.localName&&n.getAttribute("name")&&(e[n.getAttribute("name").toLowerCase()]=n.getAttribute("value")||"");return e}function s(n){const r=n.localName;if("object"!==r&&"embed"!==r)return!1;if(t.indexOf((n.getAttribute("type")||"").toLowerCase())>-1||"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"===(n.getAttribute("classid")||"").toLowerCase())return!0;const s="embed"===r?n.getAttribute("src"):n.getAttribute("data")||i(n).movie;return e.test(s||"")}function o(t){for(let e=t.parentElement;e;e=e.parentElement)if(s(e))return!0;return!1}function a(t,e){const n=document.createElement("awayfl-player");for(const e in t)try{n.setAttribute(e,t[e])}catch(t){console.warn(`[AwayFL] Skipping invalid attribute "${e}"`)}for(const t in e){const r=document.createElement("param");r.name=t,r.value=e[t],n.appendChild(r)}return n}function l(t){const e=function(t){const e={attributes:{},params:{}},o=[t].concat(Array.from(t.querySelectorAll("object, embed")).filter(s)),a=(t,e,n)=>{e in t||(t[e]=n)};for(const t of o){const s="embed"===t.localName,o=i(t);e.src=e.src||t.getAttribute(s?"src":"data")||o.movie||o.src;for(const i of Array.from(t.attributes)){const t=i.name.toLowerCase();"width"===t||"height"===t?a(e.attributes,t,i.value):s&&r.indexOf(t)>-1?a(e.params,t,i.value):-1===n.indexOf(t)&&a(e.attributes,t,i.value)}for(const t in o)"movie"!==t&&"src"!==t&&a(e.params,t,o[t])}return e}(t);if(!e.src)return null;const o=a(Object.assign({src:e.src},e.attributes),e.params);return t.parentNode.replaceChild(o,t),o}function c(t=document){t instanceof Element&&s(t)?o(t)||l(t):t.querySelectorAll("object, embed").forEach(t=>{t.isConnected&&s(t)&&!o(t)&&l(t)})}const d=[32,0,0],u=navigator.userAgent.toLowerCase(),h=(navigator.platform||"").toLowerCase(),f={w3:!0,pv:d.slice(),wk:!!/webkit/.test(u)&&parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")),ie:!1,win:/win/.test(h||u),mac:/mac/.test(h||u)};let g=!1,m=!0,p=null,b=null;function _(){return"loading"!==document.readyState}function w(t){return"string"==typeof t?document.getElementById(t):t}function y(t){return!!t&&"awayfl-player"===t.localName}function C(t){_()?t():document.addEventListener("DOMContentLoaded",()=>t())}function v(t){const e=String(t).split("."),n=[parseInt(e[0],10),parseInt(e[1],10)||0,parseInt(e[2],10)||0],r=d;return r[0]>n[0]||r[0]===n[0]&&r[1]>n[1]||r[0]===n[0]&&r[1]===n[1]&&r[2]>=n[2]}function E(t,e,n,r){const i=document.head;if(!i)return;const s="string"==typeof n&&n?n:"screen";r&&(p=null,b=null),p&&b===s||(p=document.createElement("style"),p.media=s,b=s,i.appendChild(p)),p.appendChild(document.createTextNode(t+" {"+e+"}"))}function A(t,e){if(!m||!t)return;const n=e?"visible":"hidden",r=document.getElementById(t);_()&&r?r.style.visibility=n:E("#"+CSS.escape(t),"visibility:"+n)}function L(t,e,n){const r=w(n);if(!r||!t||!t.data)return;void 0===t.id&&r.id&&(t.id=r.id);const i={src:""+t.data};for(const e in t){const n=e.toLowerCase();"styleclass"===n?i.class=""+t[e]:"classid"!==n&&"data"!==n&&(i[e]=""+t[e])}const s={};for(const t in e)"movie"!==t.toLowerCase()&&(s[t]=""+e[t]);const o=a(i,s);return r.parentNode.replaceChild(o,r),o}function O(t){return/[\\\"<>\.;]/.test(t)?encodeURIComponent(t):t}const F={registerObject:function(t,e,n,r){t&&e?(A(t,!1),C(()=>{const n={success:!1,id:t};if(v(e)){let e=document.getElementById(t);e&&!y(e)&&(e=s(e)?l(e):null),e&&(n.success=!0,n.ref=e)}A(t,!0),r&&r(n)})):r&&r({success:!1,id:t})},getObjectById:function(t){const e=document.getElementById(t);return y(e)?e:null},embedSWF:function(t,e,n,r,i,s,o,a,l,c){const d="string"==typeof e?e:e&&e.id,u={success:!1,id:d};t&&e&&n&&r?(A(d,!1),C(()=>{const s=Object.assign({},l,{data:t,width:""+n,height:""+r}),h=Object.assign({},a),f=function(t){return t&&"object"==typeof t?Object.keys(t).map(e=>e+"="+(g?encodeURIComponent(t[e]):t[e])).join("&"):""}(o);if(f&&(h.flashvars=void 0!==h.flashvars?h.flashvars+"&"+f:f),!i||v(i)){const t=L(s,h,e);s.id==d&&A(d,!0),u.success=!!t,t&&(u.ref=t)}else A(d,!0);c&&c(u)})):c&&c(u)},switchOffAutoHideShow(){m=!1},enableUriEncoding(t){g=void 0===t||!!t},ua:f,getFlashPlayerVersion:()=>({major:d[0],minor:d[1],release:d[2]}),hasFlashPlayerVersion:v,createSWF:(t,e,n)=>L(t,e,n),showExpressInstall(t,e,n,r){console.warn("[AwayFL] Express Install is not needed or supported"),r&&r({success:!1,id:n})},removeSWF:function(t){const e=document.getElementById(t);e&&(y(e)||s(e))&&e.remove()},createCSS:E,addDomLoadEvent:C,addLoadEvent:function(t){"complete"===document.readyState?setTimeout(t):window.addEventListener("load",()=>t())},getQueryParamValue:function(t){let e=document.location.search||document.location.hash;if(e){if(/\?/.test(e)&&(e=e.split("?")[1]),null==t)return O(e);const n=e.split("&");for(let e=0;e<n.length;e++)if(n[e].substring(0,n[e].indexOf("="))==t)return O(n[e].substring(n[e].indexOf("=")+1))}return""},expressInstallCallback(){}};class B{constructor(t,e,n,r,i,s,o){this._attributes={},this._params={},this._variables={},this.setAttribute("swf",t),this.setAttribute("id",e),this.setAttribute("width",""+n),this.setAttribute("height",""+r),this.setAttribute("version",i),s&&this.addParam("bgcolor",s),this.addParam("quality",o||"high")}setAttribute(t,e){this._attributes[t]=e}getAttribute(t){return this._attributes[t]||""}addParam(t,e){this._params[t]=e}getParams(){return this._params}addVariable(t,e){this._variables[t]=e}getVariable(t){return this._variables[t]||""}getVariables(){return this._variables}getVariablePairs(){return Object.keys(this._variables).map(t=>t+"="+this._variables[t])}useExpressInstall(t){}write(t){const e=w(t);if(!e)return!1;const n=this.getAttribute("id"),r=Object.assign({},this._params),i=this.getVariablePairs().join("&");i&&(r.flashvars=i);const s=a({src:this.getAttribute("swf"),id:n,name:n,width:this.getAttribute("width"),height:this.getAttribute("height")},r);return e.innerHTML="",e.appendChild(s),!0}}const S=new URL(".",import.meta.url).href,I={movie:"src",data:"src",flashvars:"flashvars",bgcolor:"bgcolor",scale:"scaleMode",salign:"stageAlign"},j={showall:"showAll",all:"showAll",noborder:"noBorder",exactfit:"exactFit",noscale:"noScale"};function q(t){const e={};if("string"==typeof t)new URLSearchParams(t).forEach((t,n)=>{e[n]=t});else if(t)for(const n in t)e[n]=String(t[n]);return e}function N(t){const e=/^#?([0-9a-f]{6})$/i.exec(t||"");return e?parseInt(e[1],16):null}function x(t){return/^\d+(\.\d+)?$/.test(""+t)?t+"px":""+t}class P extends HTMLElement{static get observedAttributes(){return["src","width","height"]}get player(){return this._player}get config(){return this._runConfig}set config(t){this._runConfig=t}get src(){return this._runConfig.src||this.getAttribute("src")}set src(t){this._runConfig.src=t}set width(t){this._runConfig.width=t}get width(){return this._runConfig.width||this.getAttribute("width")}set height(t){this._runConfig.height=t}get height(){return this._runConfig.height||this.getAttribute("height")}set runtimeBaseUrl(t){this._runConfig.runtimeBaseUrl=t}get runtimeBaseUrl(){return this._runConfig.runtimeBaseUrl}constructor(){super(),this._runConfig={},this.onError=this.onError.bind(this),this._root=this.attachShadow({mode:"closed"})}_getRuntimeUrl(){const t=this._runConfig.runtimeBaseUrl;return{loader:new URL("loader.js",t).href,runtime:new URL("runtime.js",t).href,baseUrl:t}}_dropPlayer(){this._gameFrame&&(this._gameFrame.remove(),this._player=null)}onError(t){const e=this._runConfig.onError&&self[this._runConfig.onError];"function"==typeof e&&e(t),this.dispatchEvent(new ErrorEvent("error",{error:new Error("Awayfl runtime error"),message:(null==t?void 0:t.message)||t}))}_attachRuntimeEvents(){const t=this._gameFrame.contentWindow;t.addEventListener("awayfl-player-init",({detail:t})=>{this._player=t},{once:!0}),t.addEventListener("awayfl-player-load",()=>{const t=this._runConfig.onLoad&&self[this._runConfig.onLoad];"function"==typeof t&&t(),this.dispatchEvent(new CustomEvent("load")),this._gameFrame.style.display=""},{once:!0}),t.addEventListener("awayfl-player-error",({detail:t})=>this.onError(t),{once:!0}),t.addEventListener("awayfl-player-progress",({detail:t})=>{const e=this._runConfig.onProgress&&self[this._runConfig.onProgress];"function"==typeof e&&e(t),this.dispatchEvent(new CustomEvent("progress",{detail:t}))})}_buildTemplate(t){const e='<!DOCTYPE html>\n<head>\n\t<meta name="viewport"\n\t\tcontent="height=device-height, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" />\n\t<title>AwayFL Embedded Player 0.1.4</title>\n\t<style>\n\t\t* {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\tcanvas {\n\t\t\toutline: none\n\t\t}\n\n\t\thtml, body, #container {\n\t\t\tmargin: 0;\n\t\t\toverflow: hidden;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\n\t\t#splash__image {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tposition: absolute;\n\t\t\tbackground-size: contain;\n\t\t\tbackground-position: center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tvisibility: visible;\n\t\t\ttransition: all 0.5s;\n\t\t\tz-index: 10;\n\t\t}\n\n\t\t#progress__root {\n\t\t\tposition: absolute;\n\t\t}\n\n\t\t#progress__line {\n\t\t\twidth: 0;\n\t\t\theight: 100%;\n\t\t\ttransition: all 0.5s;\n\t\t}\n\t</style>\n\t<script src="__LOADER_URL__"><\/script>\n</head>\n\n<body>\n\t<div id="splash__image">\n\t\t<div id="progress__root">\n\t\t\t<div id="progress__line"></div>\n\t\t</div>\n\t</div>\n\t<script>\n\t\twindow.addEventListener("load", () => {\n\n\t\t\tconst config = JSON.parse(__GAME_CONFIG__);\n\t\t\tconst fail = (error) => {\n\t\t\t\tconsole.error(\'[AwayFL]\', error);\n\t\t\t\twindow.dispatchEvent(new CustomEvent(\'awayfl-player-error\', {detail: error}));\n\t\t\t};\n\n\t\t\tAWAYFL.LegacyLoader.init(config);\n\t\t\tAWAYFL.LegacyLoader.runGame((fill) => {\n\t\t\t\twindow.dispatchEvent(new CustomEvent(\'awayfl-player-progress\', {detail: fill}));\n\t\t\t}, (config, hideLoader) => {\n\t\t\t\tconst player = new AWAYFL.Player(document, config);\n\t\t\t\twindow.dispatchEvent(new CustomEvent(\'awayfl-player-init\', {detail: player}));\n\t\t\t\tplayer\n\t\t\t\t\t.loadAndPlay()\n\t\t\t\t\t.then((_, hide) => {\n\t\t\t\t\t\twindow.dispatchEvent(new CustomEvent(\'awayfl-player-load\'));\n\t\t\t\t\t\thide && hide() || window.swfParseComplete && window.swfParseComplete();;\n\t\t\t\t\t})\n\t\t\t\t\t.catch(fail);\n\t\t\t}).catch(fail);\n\t\t});\n\t<\/script>\n</body>',n=this._getRuntimeUrl(),r={width:t.clientWidth,height:t.clientHeight,backgroundColor:this._runConfig.backgroundColor,splash:this._runConfig.splash,progress:this._runConfig.progress,runtime:[n.runtime],binary:[{path:this._runConfig.src,resourceType:"GAME",name:"Game",meta:{}}],baseUrl:n.baseUrl,maxStageScale:+this._runConfig.maxStageScale,flashvars:q(this._runConfig.flashvars),stageScaleMode:this._runConfig.scaleMode,stageAlign:this._runConfig.stageAlign,stageColor:N(this._runConfig.bgcolor),runtimeFlags:{defaultSmoothBitmap:!!this._runConfig.smoothBitmaps,enableBlends:!!this._runConfig.enableBlends,enableFilters:!!this._runConfig.enableFilters}};return e.replace(/__LOADER_URL__/,n.loader).replace(/__GAME_CONFIG__/,JSON.stringify(JSON.stringify(r)))}_constructPlayer(){const t=this._root,e=document.createElement("iframe");e.style.display=this._runConfig.hideBeforeLoad?"none":"",this._gameFrame=e,t.appendChild(e),e.addEventListener("load",this._attachRuntimeEvents.bind(this),{once:!0}),e.addEventListener("error",this.onError),e.srcdoc=this._buildTemplate(e)}_configKey(t){const e=t.toLowerCase();return e in I?I[e]:Object.keys(P.BINDING_CONFIG).find(t=>t.toLowerCase()===e)}_mapAttrs(){const t=this.querySelectorAll("param"),e=this._runConfig;t.forEach(t=>{const n=this._configKey(t.name);n&&(e[n]=t.value)}),this.getAttributeNames().forEach(t=>{const n=this._configKey(t);n&&(e[n]=this.getAttribute(t))})}_loadGlobalConfig(){const t=window.AWAY_EMBED_CFG||{},e=P.BINDING_CONFIG;for(const[n,r]of Object.entries(t))n in e&&(this._runConfig[n]=r)}_setDefaults(){const t=P.BINDING_CONFIG;for(const e in t){if(t[e].required&&void 0===this._runConfig[e])throw`Parameter ${e} is required!`;void 0===this._runConfig[e]&&(this._runConfig[e]=t[e].default)}}_normalizeConfig(){const t=this._runConfig;t.runtimeBaseUrl=new URL(t.runtimeBaseUrl.replace(/\/?$/,"/"),document.baseURI).href,void 0===t.splash&&(t.splash=new URL("assets/splash.jpg",t.runtimeBaseUrl).href),t.scaleMode=j[(""+t.scaleMode).toLowerCase()]||t.scaleMode,t.stageAlign&&(t.stageAlign=function(t){const e=t.toUpperCase();return(e.indexOf("T")>-1?"T":e.indexOf("B")>-1?"B":"")+(e.indexOf("L")>-1?"L":e.indexOf("R")>-1?"R":"")}(t.stageAlign)||void 0);for(const e of["autoplay","hideBeforeLoad","smoothBitmaps","enableBlends","enableFilters"])"string"==typeof t[e]&&(t[e]=!/^(false|0)$/i.test(t[e].trim()));"false"===t.splash&&(t.splash=!1),"false"===t.progress&&(t.progress=!1),t.bgcolor&&(t.backgroundColor=null===N(t.bgcolor)?t.bgcolor:"#"+t.bgcolor.replace("#",""))}_updateStyle(){this._style.textContent=`\n :host {\n display: inline-block;\n contain: content;\n width: ${x(this._runConfig.width)};\n height: ${x(this._runConfig.height)};\n }\n iframe {\n display: block;\n width: 100%;\n height: 100%;\n border: none;\n }\n `}connectedCallback(){setTimeout(()=>{this._loaderHolder=this.querySelector("div.awayfl__loader"),this._loadGlobalConfig(),this._mapAttrs(),this._setDefaults(),this._normalizeConfig(),this._style=document.createElement("style"),this._updateStyle(),this._root.appendChild(this._style),this._constructPlayer()})}disconnectedCallback(){this._dropPlayer()}attributeChangedCallback(t,e,n){if(this.isConnected)return"src"===t&&this._player?(this._dropPlayer(),this._runConfig.src=n,void this._constructPlayer()):void("width"!==t&&"height"!==t||!this._style||(this._runConfig[t]=n,this._updateStyle()))}}P.BINDING_CONFIG={version:{required:!1,default:"latest"},runtimeBaseUrl:{required:!1,default:S},src:{required:!0},width:{required:!1,default:550},height:{required:!1,default:400},onLoad:{required:!1},onProgress:{required:!1},onError:{required:!1},scaleMode:{required:!1,default:"showAll"},stageAlign:{required:!1},autoplay:{required:!1,default:!0},hideBeforeLoad:{required:!1,default:!1},maxStageScale:{required:!1,default:void 0},backgroundColor:{required:!1,default:"black"},bgcolor:{required:!1},flashvars:{required:!1},splash:{required:!1},progress:{required:!1,default:{direction:"lr",back:"#130d02",line:"#f29f01",rect:[.25,.77,.5,.01]}},smoothBitmaps:{required:!1,default:!1},enableBlends:{required:!1,default:!1},enableFilters:{required:!1,default:!1}},customElements.get("awayfl-player")||customElements.define("awayfl-player",P);const U="0.1.4",k=window;function G(t){k.AWAY_EMBED_CFG=Object.assign(k.AWAY_EMBED_CFG||{},t)}function R(t,e){const n=Object.getOwnPropertyDescriptor(window,t);!n||n.configurable?Object.defineProperty(window,t,{configurable:!0,enumerable:!0,get:()=>e,set:n=>{n!==e&&console.info(`[AwayFL] Ignoring the page's ${t}, as AwayFL provides it`)}}):k[t]=e}(k.swfobject||k.swfObject||k.SWFObject)&&console.info("[AwayFL] Replacing the page's SWFObject"),R("swfobject",F),R("swfObject",F),R("SWFObject",B),C(()=>setTimeout(()=>{!1!==(k.AWAY_EMBED_CFG||{}).autoUpgrade&&(c(),function(){let t=[];const e=()=>{const e=t;t=[],e.forEach(t=>t.isConnected&&c(t))};new MutationObserver(n=>{const r=!t.length;for(const e of n)e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE&&t.push(e)});r&&t.length&&setTimeout(e)}).observe(document.documentElement,{childList:!0,subtree:!0})}())}));export{P as AwayPlayerComponent,B as SWFObject,U as VERSION,G as configure,F as swfObject,F as swfobject};
|
|
2
|
+
//# sourceMappingURL=embed.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed.mjs","sources":["../src/embed/flashMarkup.ts","../src/embed/swfobject.ts","../src/embed/AwayPlayerComponent.ts","../src/embed/index.ts"],"sourcesContent":["const FLASH_CLASSID = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';\nconst FLASH_TYPES = ['application/x-shockwave-flash', 'application/futuresplash'];\nconst SWF_URL = /\\.swf([?#]|$)/i;\n/**\n * Attributes that describe the plugin rather than the element, so aren't copied\n */\nconst PLUGIN_ATTRIBUTES = ['classid', 'codebase', 'type', 'pluginspage', 'data', 'src', 'width', 'height'];\n/**\n * Flash parameters, which <embed> takes as attributes\n */\nconst EMBED_PARAMS = [\n 'flashvars', 'bgcolor', 'scale', 'salign', 'wmode', 'quality', 'menu', 'play', 'loop', 'base',\n 'allowscriptaccess', 'allowfullscreen', 'allowfullscreeninteractive', 'allownetworking',\n 'devicefont', 'seamlesstabbing', 'swliveconnect', 'swremote', 'swfversion', 'expressinstall',\n];\nfunction paramsOf(el) {\n const params = {};\n for (const child of Array.from(el.children)) {\n if (child.localName === 'param' && child.getAttribute('name')) {\n params[child.getAttribute('name').toLowerCase()] = child.getAttribute('value') || '';\n }\n }\n return params;\n}\nexport function isFlashElement(el) {\n const tag = el.localName;\n if (tag !== 'object' && tag !== 'embed') {\n return false;\n }\n if (FLASH_TYPES.indexOf((el.getAttribute('type') || '').toLowerCase()) > -1\n || (el.getAttribute('classid') || '').toLowerCase() === FLASH_CLASSID) {\n return true;\n }\n const url = tag === 'embed'\n ? el.getAttribute('src')\n : el.getAttribute('data') || paramsOf(el).movie;\n return SWF_URL.test(url || '');\n}\nfunction hasFlashAncestor(el) {\n for (let parent = el.parentElement; parent; parent = parent.parentElement) {\n if (isFlashElement(parent)) {\n return true;\n }\n }\n return false;\n}\n/**\n * Reads an <object>/<embed> and any Flash elements nested in it (the usual\n * cross-browser markup), the outermost taking precedence\n */\nfunction readFlashMarkup(outer) {\n const markup = { attributes: {}, params: {} };\n const elements = [outer].concat(Array.from(outer.querySelectorAll('object, embed')).filter(isFlashElement));\n const set = (map, name, value) => {\n if (!(name in map)) {\n map[name] = value;\n }\n };\n for (const el of elements) {\n const isEmbed = el.localName === 'embed';\n const params = paramsOf(el);\n markup.src = markup.src\n || el.getAttribute(isEmbed ? 'src' : 'data')\n || params.movie\n || params.src;\n for (const attr of Array.from(el.attributes)) {\n const name = attr.name.toLowerCase();\n if (name === 'width' || name === 'height') {\n set(markup.attributes, name, attr.value);\n }\n else if (isEmbed && EMBED_PARAMS.indexOf(name) > -1) {\n set(markup.params, name, attr.value);\n }\n else if (PLUGIN_ATTRIBUTES.indexOf(name) === -1) {\n set(markup.attributes, name, attr.value);\n }\n }\n for (const name in params) {\n if (name !== 'movie' && name !== 'src') {\n set(markup.params, name, params[name]);\n }\n }\n }\n return markup;\n}\nexport function createPlayer(attributes, params) {\n const player = document.createElement('awayfl-player');\n for (const name in attributes) {\n try {\n player.setAttribute(name, attributes[name]);\n }\n catch (e) {\n console.warn(`[AwayFL] Skipping invalid attribute \"${name}\"`);\n }\n }\n for (const name in params) {\n const param = document.createElement('param');\n param.name = name;\n param.value = params[name];\n player.appendChild(param);\n }\n return player;\n}\n/**\n * Replaces Flash <object>/<embed> markup with an AwayFL player\n */\nexport function upgradeElement(el) {\n const markup = readFlashMarkup(el);\n if (!markup.src) {\n return null;\n }\n const player = createPlayer(Object.assign({ src: markup.src }, markup.attributes), markup.params);\n el.parentNode.replaceChild(player, el);\n return player;\n}\nexport function upgradeAll(root = document) {\n if (root instanceof Element && isFlashElement(root)) {\n if (!hasFlashAncestor(root)) {\n upgradeElement(root);\n }\n return;\n }\n root.querySelectorAll('object, embed').forEach((el) => {\n // nested elements are detached once their outermost element is upgraded\n if (el.isConnected && isFlashElement(el) && !hasFlashAncestor(el)) {\n upgradeElement(el);\n }\n });\n}\n/**\n * Upgrades Flash markup added to the page after it has loaded\n */\nexport function observeFlashMarkup() {\n let pending = [];\n const flush = () => {\n const added = pending;\n pending = [];\n added.forEach((el) => el.isConnected && upgradeAll(el));\n };\n new MutationObserver((records) => {\n const wasEmpty = !pending.length;\n for (const record of records) {\n record.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n pending.push(node);\n }\n });\n }\n // wait for the script adding the markup to finish, e.g. appending its <param>s\n if (wasEmpty && pending.length) {\n setTimeout(flush);\n }\n }).observe(document.documentElement, { childList: true, subtree: true });\n}\n","import { createPlayer, isFlashElement, upgradeElement } from './flashMarkup';\n/**\n * The Flash Player version reported to pages, so they don't take their \"no Flash\" branch\n */\nconst PLAYER_VERSION = [32, 0, 0];\nconst userAgent = navigator.userAgent.toLowerCase();\nconst platform = (navigator.platform || '').toLowerCase();\nconst ua = {\n w3: true,\n pv: PLAYER_VERSION.slice(),\n wk: /webkit/.test(userAgent) ? parseFloat(userAgent.replace(/^.*webkit\\/(\\d+(\\.\\d+)?).*$/, '$1')) : false,\n ie: false,\n win: /win/.test(platform || userAgent),\n mac: /mac/.test(platform || userAgent),\n};\nlet encodeURIEnabled = false;\nlet autoHideShow = true;\nlet dynamicStylesheet = null;\nlet dynamicStylesheetMedia = null;\nfunction isDomLoaded() {\n return document.readyState !== 'loading';\n}\nfunction getElement(id) {\n return typeof id === 'string' ? document.getElementById(id) : id;\n}\n// by tag, as the element may be another build's class if both are loaded\nfunction isPlayer(el) {\n return !!el && el.localName === 'awayfl-player';\n}\nexport function addDomLoadEvent(fn) {\n if (isDomLoaded()) {\n fn();\n }\n else {\n document.addEventListener('DOMContentLoaded', () => fn());\n }\n}\nfunction addLoadEvent(fn) {\n if (document.readyState === 'complete') {\n setTimeout(fn);\n }\n else {\n window.addEventListener('load', () => fn());\n }\n}\nfunction hasPlayerVersion(versionStr) {\n const v = String(versionStr).split('.');\n const required = [parseInt(v[0], 10), parseInt(v[1], 10) || 0, parseInt(v[2], 10) || 0];\n const pv = PLAYER_VERSION;\n return pv[0] > required[0]\n || (pv[0] === required[0] && pv[1] > required[1])\n || (pv[0] === required[0] && pv[1] === required[1] && pv[2] >= required[2]);\n}\nfunction createCSS(selStr, declStr, mediaStr, newStyleBoolean) {\n const head = document.head;\n if (!head) {\n return;\n }\n const media = typeof mediaStr === 'string' && mediaStr ? mediaStr : 'screen';\n if (newStyleBoolean) {\n dynamicStylesheet = null;\n dynamicStylesheetMedia = null;\n }\n if (!dynamicStylesheet || dynamicStylesheetMedia !== media) {\n dynamicStylesheet = document.createElement('style');\n dynamicStylesheet.media = media;\n dynamicStylesheetMedia = media;\n head.appendChild(dynamicStylesheet);\n }\n dynamicStylesheet.appendChild(document.createTextNode(selStr + ' {' + declStr + '}'));\n}\n/**\n * Hides alternative content until it's replaced, as SWFObject does\n */\nfunction setVisibility(id, isVisible) {\n if (!autoHideShow || !id) {\n return;\n }\n const visibility = isVisible ? 'visible' : 'hidden';\n const el = document.getElementById(id);\n if (isDomLoaded() && el) {\n el.style.visibility = visibility;\n }\n else {\n createCSS('#' + CSS.escape(id), 'visibility:' + visibility);\n }\n}\nfunction createSWF(attObj, parObj, replaceElemIdStr) {\n const el = getElement(replaceElemIdStr);\n if (!el || !attObj || !attObj.data) {\n return undefined;\n }\n if (typeof attObj.id === 'undefined' && el.id) {\n attObj.id = el.id;\n }\n const attributes = { src: '' + attObj.data };\n for (const key in attObj) {\n const name = key.toLowerCase();\n if (name === 'styleclass') {\n attributes['class'] = '' + attObj[key];\n }\n else if (name !== 'classid' && name !== 'data') {\n attributes[key] = '' + attObj[key];\n }\n }\n const params = {};\n for (const key in parObj) {\n if (key.toLowerCase() !== 'movie') {\n params[key] = '' + parObj[key];\n }\n }\n const player = createPlayer(attributes, params);\n el.parentNode.replaceChild(player, el);\n return player;\n}\nfunction buildFlashVars(flashvarsObj) {\n if (!flashvarsObj || typeof flashvarsObj !== 'object') {\n return '';\n }\n return Object.keys(flashvarsObj)\n .map((key) => key + '=' + (encodeURIEnabled ? encodeURIComponent(flashvarsObj[key]) : flashvarsObj[key]))\n .join('&');\n}\nfunction embedSWF(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, _xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {\n const id = typeof replaceElemIdStr === 'string' ? replaceElemIdStr : replaceElemIdStr && replaceElemIdStr.id;\n const callbackObj = { success: false, id };\n // unlike SWFObject the version is optional, as AwayFL's own examples omit it\n if (!swfUrlStr || !replaceElemIdStr || !widthStr || !heightStr) {\n callbackFn && callbackFn(callbackObj);\n return;\n }\n setVisibility(id, false);\n addDomLoadEvent(() => {\n // copied, as pages often reuse these objects for several SWFs\n const att = Object.assign({}, attObj, { data: swfUrlStr, width: '' + widthStr, height: '' + heightStr });\n const par = Object.assign({}, parObj);\n const flashvars = buildFlashVars(flashvarsObj);\n if (flashvars) {\n par.flashvars = typeof par.flashvars !== 'undefined' ? par.flashvars + '&' + flashvars : flashvars;\n }\n if (!swfVersionStr || hasPlayerVersion(swfVersionStr)) {\n const ref = createSWF(att, par, replaceElemIdStr);\n if (att.id == id) {\n setVisibility(id, true);\n }\n callbackObj.success = !!ref;\n if (ref) {\n callbackObj.ref = ref;\n }\n }\n else {\n // show the alternative content\n setVisibility(id, true);\n }\n callbackFn && callbackFn(callbackObj);\n });\n}\n/**\n * Static publishing: replaces the page's <object> markup with a player\n */\nfunction registerObject(objectIdStr, swfVersionStr, _xiSwfUrlStr, callbackFn) {\n if (!objectIdStr || !swfVersionStr) {\n callbackFn && callbackFn({ success: false, id: objectIdStr });\n return;\n }\n setVisibility(objectIdStr, false);\n addDomLoadEvent(() => {\n const callbackObj = { success: false, id: objectIdStr };\n if (hasPlayerVersion(swfVersionStr)) {\n let ref = document.getElementById(objectIdStr);\n // may already have been upgraded with the rest of the page's markup\n if (ref && !isPlayer(ref)) {\n ref = isFlashElement(ref) ? upgradeElement(ref) : null;\n }\n if (ref) {\n callbackObj.success = true;\n callbackObj.ref = ref;\n }\n }\n setVisibility(objectIdStr, true);\n callbackFn && callbackFn(callbackObj);\n });\n}\nfunction getObjectById(objectIdStr) {\n const el = document.getElementById(objectIdStr);\n return isPlayer(el) ? el : null;\n}\nfunction removeSWF(objElemIdStr) {\n const el = document.getElementById(objElemIdStr);\n if (el && (isPlayer(el) || isFlashElement(el))) {\n el.remove();\n }\n}\nfunction urlEncodeIfNecessary(s) {\n return /[\\\\\\\"<>\\.;]/.test(s) ? encodeURIComponent(s) : s;\n}\nfunction getQueryParamValue(param) {\n let q = document.location.search || document.location.hash;\n if (q) {\n if (/\\?/.test(q)) {\n q = q.split('?')[1];\n }\n if (param == null) {\n return urlEncodeIfNecessary(q);\n }\n const pairs = q.split('&');\n for (let i = 0; i < pairs.length; i++) {\n if (pairs[i].substring(0, pairs[i].indexOf('=')) == param) {\n return urlEncodeIfNecessary(pairs[i].substring(pairs[i].indexOf('=') + 1));\n }\n }\n }\n return '';\n}\nexport const swfobject = {\n registerObject,\n getObjectById,\n embedSWF,\n switchOffAutoHideShow() {\n autoHideShow = false;\n },\n enableUriEncoding(enable) {\n encodeURIEnabled = typeof enable === 'undefined' ? true : !!enable;\n },\n ua,\n getFlashPlayerVersion() {\n return { major: PLAYER_VERSION[0], minor: PLAYER_VERSION[1], release: PLAYER_VERSION[2] };\n },\n hasFlashPlayerVersion: hasPlayerVersion,\n createSWF(attObj, parObj, replaceElemIdStr) {\n return createSWF(attObj, parObj, replaceElemIdStr);\n },\n showExpressInstall(_att, _par, replaceElemIdStr, callbackFn) {\n console.warn('[AwayFL] Express Install is not needed or supported');\n callbackFn && callbackFn({ success: false, id: replaceElemIdStr });\n },\n removeSWF,\n createCSS,\n addDomLoadEvent,\n addLoadEvent,\n getQueryParamValue,\n expressInstallCallback() { },\n};\n/**\n * SWFObject 1.5: `new SWFObject(swf, id, width, height, version, bgcolor).write(elementId)`,\n * which renders the SWF inside the target element\n */\nexport class SWFObject {\n constructor(swf, id, w, h, ver, c, quality) {\n this._attributes = {};\n this._params = {};\n this._variables = {};\n this.setAttribute('swf', swf);\n this.setAttribute('id', id);\n this.setAttribute('width', '' + w);\n this.setAttribute('height', '' + h);\n this.setAttribute('version', ver);\n if (c) {\n this.addParam('bgcolor', c);\n }\n this.addParam('quality', quality || 'high');\n }\n setAttribute(name, value) {\n this._attributes[name] = value;\n }\n getAttribute(name) {\n return this._attributes[name] || '';\n }\n addParam(name, value) {\n this._params[name] = value;\n }\n getParams() {\n return this._params;\n }\n addVariable(name, value) {\n this._variables[name] = value;\n }\n getVariable(name) {\n return this._variables[name] || '';\n }\n getVariables() {\n return this._variables;\n }\n getVariablePairs() {\n return Object.keys(this._variables).map((key) => key + '=' + this._variables[key]);\n }\n useExpressInstall(_path) { }\n write(elementId) {\n const target = getElement(elementId);\n if (!target) {\n return false;\n }\n const id = this.getAttribute('id');\n const params = Object.assign({}, this._params);\n const flashvars = this.getVariablePairs().join('&');\n if (flashvars) {\n params.flashvars = flashvars;\n }\n const player = createPlayer({\n src: this.getAttribute('swf'),\n id,\n name: id,\n width: this.getAttribute('width'),\n height: this.getAttribute('height'),\n }, params);\n target.innerHTML = '';\n target.appendChild(player);\n return true;\n }\n}\n","//@ts-ignore\nimport template from \"./embed.html\";\n// rollup turns import.meta.url into document.currentScript's src in the classic\n// script build; in the ES module build it's the module's own URL\nconst scriptBaseUrl = new URL('.', import.meta.url).href;\nconst defaultProgress = {\n \"direction\": \"lr\",\n \"back\": \"#130d02\",\n \"line\": \"#f29f01\",\n \"rect\": [\n 0.25,\n 0.77,\n 0.5,\n 0.01\n ]\n};\n/**\n * Flash <object>/<embed> parameter and attribute names that map onto config keys.\n * Others, such as wmode, allowScriptAccess, quality and menu, have no equivalent\n * and are ignored.\n */\nconst FLASH_PARAMS = {\n movie: 'src',\n data: 'src',\n flashvars: 'flashvars',\n bgcolor: 'bgcolor',\n scale: 'scaleMode',\n salign: 'stageAlign',\n};\nconst SCALE_MODES = {\n showall: 'showAll',\n all: 'showAll',\n noborder: 'noBorder',\n exactfit: 'exactFit',\n noscale: 'noScale',\n};\nexport function parseFlashVars(value) {\n const result = {};\n if (typeof value === 'string') {\n new URLSearchParams(value).forEach((v, k) => {\n result[k] = v;\n });\n }\n else if (value) {\n for (const key in value) {\n result[key] = String(value[key]);\n }\n }\n return result;\n}\nfunction parseColor(value) {\n const match = /^#?([0-9a-f]{6})$/i.exec(value || '');\n return match ? parseInt(match[1], 16) : null;\n}\nfunction normalizeAlign(value) {\n const v = value.toUpperCase();\n return (v.indexOf('T') > -1 ? 'T' : v.indexOf('B') > -1 ? 'B' : '')\n + (v.indexOf('L') > -1 ? 'L' : v.indexOf('R') > -1 ? 'R' : '');\n}\nfunction cssSize(value) {\n return /^\\d+(\\.\\d+)?$/.test('' + value) ? value + 'px' : '' + value;\n}\nexport class AwayPlayerComponent extends HTMLElement {\n static get observedAttributes() {\n return [\n 'src',\n 'width',\n 'height'\n ];\n }\n get player() {\n return this._player;\n }\n get config() {\n return this._runConfig;\n }\n set config(cfg) {\n this._runConfig = cfg;\n }\n get src() {\n return this._runConfig.src || this.getAttribute('src');\n }\n set src(v) {\n this._runConfig.src = v;\n }\n set width(v) {\n this._runConfig.width = v;\n }\n get width() {\n return this._runConfig.width || this.getAttribute('width');\n }\n set height(v) {\n this._runConfig.height = v;\n }\n get height() {\n return this._runConfig.height || this.getAttribute('height');\n }\n set runtimeBaseUrl(v) {\n this._runConfig.runtimeBaseUrl = v;\n }\n get runtimeBaseUrl() {\n return this._runConfig.runtimeBaseUrl;\n }\n constructor() {\n super();\n this._runConfig = {};\n this.onError = this.onError.bind(this);\n this._root = this.attachShadow({ mode: 'closed' });\n }\n _getRuntimeUrl() {\n const baseUrl = this._runConfig.runtimeBaseUrl;\n const loader = new URL('loader.js', baseUrl).href;\n const runtime = new URL('runtime.js', baseUrl).href;\n /**\n * @todo support runtime version\n **/\n return {\n loader,\n runtime,\n baseUrl,\n };\n }\n _dropPlayer() {\n if (this._gameFrame) {\n this._gameFrame.remove();\n this._player = null;\n }\n }\n onError(_arg) {\n const f = this._runConfig.onError && self[this._runConfig.onError];\n if (typeof f === 'function') {\n f(_arg);\n }\n this.dispatchEvent(new ErrorEvent('error', {\n error: new Error('Awayfl runtime error'),\n message: (_arg === null || _arg === void 0 ? void 0 : _arg.message) || _arg,\n }));\n }\n _attachRuntimeEvents() {\n const fd = this._gameFrame.contentWindow;\n //@ts-ignore\n fd.addEventListener('awayfl-player-init', ({ detail }) => {\n this._player = detail;\n }, { once: true });\n fd.addEventListener('awayfl-player-load', () => {\n const f = this._runConfig.onLoad && self[this._runConfig.onLoad];\n if (typeof f === 'function') {\n f();\n }\n this.dispatchEvent(new CustomEvent('load'));\n this._gameFrame.style.display = '';\n }, { once: true });\n //@ts-ignore\n fd.addEventListener('awayfl-player-error', ({ detail }) => this.onError(detail), { once: true });\n //@ts-ignore\n fd.addEventListener('awayfl-player-progress', ({ detail }) => {\n const f = this._runConfig.onProgress && self[this._runConfig.onProgress];\n if (typeof f === 'function') {\n f(detail);\n }\n this.dispatchEvent(new CustomEvent('progress', { detail }));\n });\n }\n _buildTemplate(frame) {\n const t = template;\n const urls = this._getRuntimeUrl();\n const gameConfig = {\n width: frame.clientWidth,\n height: frame.clientHeight,\n backgroundColor: this._runConfig.backgroundColor,\n splash: this._runConfig.splash,\n progress: this._runConfig.progress,\n runtime: [urls.runtime],\n binary: [{\n path: this._runConfig.src,\n resourceType: 'GAME',\n name: 'Game',\n meta: {}\n }],\n //debug: true,\n baseUrl: urls.baseUrl,\n maxStageScale: +this._runConfig.maxStageScale,\n flashvars: parseFlashVars(this._runConfig.flashvars),\n stageScaleMode: this._runConfig.scaleMode,\n stageAlign: this._runConfig.stageAlign,\n stageColor: parseColor(this._runConfig.bgcolor),\n runtimeFlags: {\n defaultSmoothBitmap: !!this._runConfig.smoothBitmaps,\n enableBlends: !!this._runConfig.enableBlends,\n enableFilters: !!this._runConfig.enableFilters,\n }\n };\n return t\n .replace(/__LOADER_URL__/, urls.loader)\n .replace(/__GAME_CONFIG__/, JSON.stringify(JSON.stringify(gameConfig)));\n }\n _constructPlayer() {\n const root = this._root;\n const frame = document.createElement('iframe');\n frame.style.display = this._runConfig.hideBeforeLoad ? 'none' : '';\n this._gameFrame = frame;\n root.appendChild(frame);\n frame.addEventListener('load', this._attachRuntimeEvents.bind(this), {\n once: true\n });\n frame.addEventListener('error', this.onError);\n frame.srcdoc = this._buildTemplate(frame);\n }\n /**\n * Config key for a param or attribute name, matched case-insensitively as\n * HTML lowercases attribute names and Flash param names ignore case\n */\n _configKey(name) {\n const lower = name.toLowerCase();\n if (lower in FLASH_PARAMS) {\n return FLASH_PARAMS[lower];\n }\n return Object.keys(AwayPlayerComponent.BINDING_CONFIG)\n .find((key) => key.toLowerCase() === lower);\n }\n _mapAttrs() {\n const params = this.querySelectorAll('param');\n const config = this._runConfig;\n params.forEach(node => {\n const key = this._configKey(node.name);\n if (key) {\n config[key] = node.value;\n }\n });\n this.getAttributeNames().forEach(name => {\n const key = this._configKey(name);\n if (key) {\n config[key] = this.getAttribute(name);\n }\n });\n }\n _loadGlobalConfig() {\n const global = window;\n const globalCfg = global.AWAY_EMBED_CFG || {};\n const scheme = AwayPlayerComponent.BINDING_CONFIG;\n for (const [key, value] of Object.entries(globalCfg)) {\n if (key in scheme) {\n this._runConfig[key] = value;\n }\n }\n }\n _setDefaults() {\n const scheme = AwayPlayerComponent.BINDING_CONFIG;\n for (const key in scheme) {\n if (scheme[key].required && typeof this._runConfig[key] === 'undefined') {\n throw `Parameter ${key} is required!`;\n }\n if (typeof this._runConfig[key] === 'undefined') {\n this._runConfig[key] = scheme[key].default;\n }\n }\n }\n _normalizeConfig() {\n const config = this._runConfig;\n // absolute and ending in a slash, so the runtime's files resolve inside it\n config.runtimeBaseUrl = new URL(config.runtimeBaseUrl.replace(/\\/?$/, '/'), document.baseURI).href;\n if (config.splash === undefined) {\n config.splash = new URL('assets/splash.jpg', config.runtimeBaseUrl).href;\n }\n config.scaleMode = SCALE_MODES[('' + config.scaleMode).toLowerCase()] || config.scaleMode;\n if (config.stageAlign) {\n config.stageAlign = normalizeAlign(config.stageAlign) || undefined;\n }\n // params and attributes are strings, but \"false\" shouldn't mean true\n for (const key of ['autoplay', 'hideBeforeLoad', 'smoothBitmaps', 'enableBlends', 'enableFilters']) {\n if (typeof config[key] === 'string') {\n config[key] = !/^(false|0)$/i.test(config[key].trim());\n }\n }\n if (config.splash === 'false') {\n config.splash = false;\n }\n if (config.progress === 'false') {\n config.progress = false;\n }\n if (config.bgcolor) {\n config.backgroundColor = parseColor(config.bgcolor) === null\n ? config.bgcolor\n : '#' + config.bgcolor.replace('#', '');\n }\n }\n _updateStyle() {\n this._style.textContent = `\n :host {\n display: inline-block;\n contain: content;\n width: ${cssSize(this._runConfig.width)};\n height: ${cssSize(this._runConfig.height)};\n }\n iframe {\n display: block;\n width: 100%;\n height: 100%;\n border: none;\n }\n `;\n }\n connectedCallback() {\n setTimeout(() => {\n this._loaderHolder = this.querySelector('div.awayfl__loader');\n this._loadGlobalConfig();\n this._mapAttrs();\n this._setDefaults();\n this._normalizeConfig();\n this._style = document.createElement('style');\n this._updateStyle();\n this._root.appendChild(this._style);\n this._constructPlayer();\n });\n }\n disconnectedCallback() {\n this._dropPlayer();\n }\n attributeChangedCallback(name, _oldValue, newValue) {\n if (!this.isConnected) {\n return;\n }\n // if SRC changed, drop runtime and load again\n if (name === 'src' && this._player) {\n this._dropPlayer();\n this._runConfig.src = newValue;\n this._constructPlayer();\n return;\n }\n if ((name === 'width' || name === 'height') && this._style) {\n this._runConfig[name] = newValue;\n this._updateStyle();\n }\n }\n}\nAwayPlayerComponent.BINDING_CONFIG = {\n version: { required: false, default: 'latest' },\n runtimeBaseUrl: { required: false, default: scriptBaseUrl },\n src: { required: true },\n width: { required: false, default: 550 },\n height: { required: false, default: 400 },\n onLoad: { required: false },\n onProgress: { required: false },\n onError: { required: false },\n scaleMode: { required: false, default: 'showAll' },\n stageAlign: { required: false },\n autoplay: { required: false, default: true },\n hideBeforeLoad: { required: false, default: false },\n maxStageScale: { required: false, default: undefined },\n backgroundColor: { required: false, default: 'black' },\n bgcolor: { required: false },\n flashvars: { required: false },\n // defaults to the splash in runtimeBaseUrl's assets\n splash: { required: false },\n progress: { required: false, default: defaultProgress },\n // runtime\n smoothBitmaps: { required: false, default: false },\n enableBlends: { required: false, default: false },\n enableFilters: { required: false, default: false },\n};\n// both the script and module builds may be loaded\nif (!customElements.get('awayfl-player')) {\n customElements.define('awayfl-player', AwayPlayerComponent);\n}\n","import { observeFlashMarkup, upgradeAll } from './flashMarkup';\nimport { addDomLoadEvent, swfobject, SWFObject } from './swfobject';\nexport { AwayPlayerComponent } from './AwayPlayerComponent';\nexport { swfobject, swfobject as swfObject, SWFObject };\n//@ts-ignore\nexport const VERSION = \"__VERSION__\";\nconst global = window;\n/**\n * Sets options for players, the same as defining AWAY_EMBED_CFG\n */\nexport function configure(config) {\n global.AWAY_EMBED_CFG = Object.assign(global.AWAY_EMBED_CFG || {}, config);\n}\n/**\n * Defines a global that keeps AwayFL's value if a page's own swfobject.js assigns\n * over it later, so embed.js works whether it's included before or after it\n */\nfunction defineGlobal(name, value) {\n const existing = Object.getOwnPropertyDescriptor(window, name);\n if (existing && !existing.configurable) {\n global[name] = value;\n return;\n }\n Object.defineProperty(window, name, {\n configurable: true,\n enumerable: true,\n get: () => value,\n set: (other) => {\n if (other !== value) {\n console.info(`[AwayFL] Ignoring the page's ${name}, as AwayFL provides it`);\n }\n },\n });\n}\nif (global.swfobject || global.swfObject || global.SWFObject) {\n console.info('[AwayFL] Replacing the page\\'s SWFObject');\n}\ndefineGlobal('swfobject', swfobject);\ndefineGlobal('swfObject', swfobject);\ndefineGlobal('SWFObject', SWFObject);\n// upgrade <object>/<embed> markup, including on pages that don't use SWFObject;\n// a tick later, so a module importing this can call configure() first\naddDomLoadEvent(() => setTimeout(() => {\n if ((global.AWAY_EMBED_CFG || {}).autoUpgrade !== false) {\n upgradeAll();\n observeFlashMarkup();\n }\n}));\n"],"names":["FLASH_TYPES","SWF_URL","PLUGIN_ATTRIBUTES","EMBED_PARAMS","paramsOf","el","params","child","Array","from","children","localName","getAttribute","toLowerCase","isFlashElement","tag","indexOf","url","movie","test","hasFlashAncestor","parent","parentElement","createPlayer","attributes","player","document","createElement","name","setAttribute","e","console","warn","param","value","appendChild","upgradeElement","markup","outer","elements","concat","querySelectorAll","filter","set","map","isEmbed","src","attr","readFlashMarkup","Object","assign","parentNode","replaceChild","upgradeAll","root","Element","forEach","isConnected","PLAYER_VERSION","userAgent","navigator","platform","ua","w3","pv","slice","wk","parseFloat","replace","ie","win","mac","encodeURIEnabled","autoHideShow","dynamicStylesheet","dynamicStylesheetMedia","isDomLoaded","readyState","getElement","id","getElementById","isPlayer","addDomLoadEvent","fn","addEventListener","hasPlayerVersion","versionStr","v","String","split","required","parseInt","createCSS","selStr","declStr","mediaStr","newStyleBoolean","head","media","createTextNode","setVisibility","isVisible","visibility","style","CSS","escape","createSWF","attObj","parObj","replaceElemIdStr","data","key","urlEncodeIfNecessary","s","encodeURIComponent","swfobject","registerObject","objectIdStr","swfVersionStr","_xiSwfUrlStr","callbackFn","callbackObj","success","ref","getObjectById","embedSWF","swfUrlStr","widthStr","heightStr","flashvarsObj","att","width","height","par","flashvars","keys","join","buildFlashVars","switchOffAutoHideShow","enableUriEncoding","enable","getFlashPlayerVersion","major","minor","release","hasFlashPlayerVersion","showExpressInstall","_att","_par","removeSWF","objElemIdStr","remove","addLoadEvent","setTimeout","window","getQueryParamValue","q","location","search","hash","pairs","i","length","substring","expressInstallCallback","SWFObject","constructor","swf","w","h","ver","c","quality","this","_attributes","_params","_variables","addParam","getParams","addVariable","getVariable","getVariables","getVariablePairs","useExpressInstall","_path","write","elementId","target","innerHTML","scriptBaseUrl","URL","href","FLASH_PARAMS","bgcolor","scale","salign","SCALE_MODES","showall","all","noborder","exactfit","noscale","parseFlashVars","result","URLSearchParams","k","parseColor","match","exec","cssSize","AwayPlayerComponent","HTMLElement","observedAttributes","_player","config","_runConfig","cfg","runtimeBaseUrl","super","onError","bind","_root","attachShadow","mode","_getRuntimeUrl","baseUrl","loader","runtime","_dropPlayer","_gameFrame","_arg","f","self","dispatchEvent","ErrorEvent","error","Error","message","_attachRuntimeEvents","fd","contentWindow","detail","once","onLoad","CustomEvent","display","onProgress","_buildTemplate","frame","t","urls","gameConfig","clientWidth","clientHeight","backgroundColor","splash","progress","binary","path","resourceType","meta","maxStageScale","stageScaleMode","scaleMode","stageAlign","stageColor","runtimeFlags","defaultSmoothBitmap","smoothBitmaps","enableBlends","enableFilters","JSON","stringify","_constructPlayer","hideBeforeLoad","srcdoc","_configKey","lower","BINDING_CONFIG","find","_mapAttrs","node","getAttributeNames","_loadGlobalConfig","globalCfg","AWAY_EMBED_CFG","scheme","entries","_setDefaults","default","_normalizeConfig","baseURI","undefined","toUpperCase","normalizeAlign","trim","_updateStyle","_style","textContent","connectedCallback","_loaderHolder","querySelector","disconnectedCallback","attributeChangedCallback","_oldValue","newValue","version","autoplay","direction","back","line","rect","customElements","get","define","VERSION","global","configure","defineGlobal","existing","getOwnPropertyDescriptor","configurable","defineProperty","enumerable","other","info","swfObject","autoUpgrade","pending","flush","added","MutationObserver","records","wasEmpty","record","addedNodes","nodeType","Node","ELEMENT_NODE","push","observe","documentElement","childList","subtree","observeFlashMarkup"],"mappings":"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"}
|
package/dist/loader.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var AWAYFL=function(e){"use strict";const t="DecompressionStream"in self,s=e=>new DataView(e.buffer).getUint32(4,!0);function r(e="",r=e=>e){let i,n=0,o=[];return r&&r(0),fetch(e).then(t=>{if(!t.ok)throw new Error(`Failed to load ${e}: ${t.status} ${t.statusText}`);return n=+t.headers.get("Content-Length"),i=t.body.getReader(),i.read()}).then(e=>{const a=e.value;console.debug("[Loader] Header:",String.fromCharCode.apply(null,a.slice(0,3).reverse()));let h,l=0;if(t&&(67===(c=a)[0]&&87===c[1]&&83===c[2])){const e=s(a),r=a.slice(0,8);r[0]=70,console.debug("[Loader] SWC size:",s(a)),h=function(e,s=8){if(!t)throw"Your browser not support DecompressionStream =(";const r=new self.DecompressionStream("deflate"),i=r.writable.getWriter(),n=r.readable.getReader(),o=new Uint8Array(e);let a,h=!1,l=!1;function c(){n.read().then(function t(r){const i=r.done,h=r.value;return h&&(o.set(h,s),s+=h.length),i||s>=e?(l=!0,a&&a(),void console.debug("[Loader] Decoder closed:",s)):n.read().then(t)})}return{get buffer(){return o},write(e){i.ready.then(()=>{i.write(e),h||(h=!0,c())})},readAll:()=>l?Promise.resolve(o):new Promise(e=>{a=()=>{e(o)}})}}(e,8),h.buffer.set(r),h.write(a.slice(8))}else o.push(a);var c;return l+=a.length,r&&r(Math.min(1,l/n)),i.read().then(function e(t){if(t.done){if(h)return h.readAll();{let e=new Uint8Array(l),t=0;return o.forEach(s=>{e.set(s,t),t+=s.length}),e}}const s=t.value;return l+=s.length,r&&r(l/n),h?h.write(s):o.push(s),i.read().then(e)})})}function i(e,s=e=>e){const i=e.path.indexOf(".js")>-1;if(!i&&t)return r(e.path,s).then(t=>Object.assign(e,{data:t.buffer,type:"swf"}));const o=new XMLHttpRequest;return o.addEventListener("progress",t=>{const r=t.total||+o.getResponseHeader("content-length")||e.size||0;r?(console.log("XHR",t.loaded,r),s(Math.min(1,t.loaded/r))):s(1)}),o.open("GET",e.path,!0),o.responseType=i?"text":"arraybuffer",new Promise((t,r)=>{o.addEventListener("error",r),o.addEventListener("load",()=>{if(o.status>=400)r(new Error(`Failed to load ${e.path}: ${o.status} ${o.statusText}`));else{if(s(1),i){const e=new Blob([o.response],{type:"text/javascript"});return void n(URL.createObjectURL(e)).then(()=>t(void 0))}t({meta:e.meta||{},name:e.name,path:e.path,resourceType:e.resourceType,data:o.response,type:i?"js":"swf"})}}),o.send()})}function n(e,t){const s=document.querySelector("head"),r=document.createElement("script");return new Promise((i,n)=>{Object.assign(r,{type:"text/javascript",async:!0,src:"string"==typeof e?e:e.path,onload:()=>{t&&t(1),i(r)},onerror:n}),s.appendChild(r)})}class o{constructor(e,t,s=1){this.callback=e,this.weight=s,this.id=o.ID++,this.value=0,this._childs=[],this._report=this._report.bind(this),this.childs=t}set childs(e){for(let e of this._childs)e.callback===this._report&&(e.callback=null);if(this._childs.length=0,e){for(let t of e){if(t===this)throw"Reporter loop";t.callback=this._report}this._childs=e.slice()}}get childs(){return this._childs}_report(e){if(0===this._childs.length)this.value=e*this.weight;else{let e=0,t=0;this._childs.forEach(s=>{e+=s.weight||1,t+=s.value||0}),this.value=t/e}this.callback&&this.callback(this.value)}get report(){return this._report}}o.ID=0;class a{constructor(e){this.config=e}run(e,t,s=e=>{},r=!1){const a=e.length,h=t.length,l=e.concat(t),c=Array.from({length:a+h},()=>new o);let d;return this.progress=new o(s,c),r?(d=t.map((e,t)=>i(e,c[t].report)),d=d.concat(e.map((e,t)=>n(e,c[t+h].report)))):d=l.map((e,t)=>i(e,c[t].report)),Promise.all(d).then(e=>e.filter(e=>e&&"swf"===e.type))}}const h=(e,t)=>"string"!=typeof e?+e:e.includes("%")?parseFloat(e)/100*t:parseFloat(e);class l{constructor(e=document,t){this.root=e,this.config=t,this.onUpdate=this.onUpdate.bind(this),this.onProgress=this.onProgress.bind(this),window.addEventListener("resize",this.onUpdate)}build(){this.splash=this.root.querySelector("#splash__image"),this.prRoot=this.root.querySelector("#progress__root"),this.prLine=this.root.querySelector("#progress__line")}init(){if(this.build(),!this.splash)return;const e=this.config;e.backgroundColor&&(document.body.style.backgroundColor=e.backgroundColor),e.splash&&Object.assign(this.splash.style,{backgroundImage:`url(${e.splash})`,visibility:"visible"});const t=e.progress;"object"==typeof t&&(t.rect=t.rect||[.1,.9,.8,.01],Object.assign(this.prRoot.style,{background:t.back,left:100*t.rect[0]+"%",top:100*t.rect[1]+"%",width:100*t.rect[2]+"%",height:100*t.rect[3]+"%"}),Object.assign(this.prLine.style,{background:t.line})),this.onUpdate()}onProgress(e){const t=this.config.progress;if(this.prLine&&t)if("tb"===t.direction)Object.assign(this.prLine.style,{height:100*e+"%",width:"100%"});else Object.assign(this.prLine.style,{height:"100%",width:100*e+"%"})}onUpdate(){if(!this.splash)return;const e=this.config;let t=h(e.x,window.innerWidth)||0,s=h(e.y,window.innerHeight)||0,r=h(e.w,window.innerWidth)||window.innerWidth,i=h(e.h,window.innerHeight)||window.innerHeight;const n=Math.min(i/e.height,r/e.width),o=Math.ceil(e.width*n),a=Math.ceil(e.height*n),l=t+(r-o)/2,c=s+(i-a)/2;Object.assign(this.splash.style,{width:`${o}px`,height:`${a}px`,left:`${l}px`,top:`${c}px`})}ready(){this.splash&&(this.config.start&&(this.splash.style.background=`url(${this.config.start})`),Object.assign(this.prRoot.style,{visibility:"hidden",opacity:0}))}hide(e=!1){if(!this.splash)return;Object.assign(this.prRoot.style,{visibility:"hidden",opacity:0}),Object.assign(this.splash.style,{visibility:"hidden",opacity:0});const t=new Promise(e=>setTimeout(e,500));return e?t.then(()=>this.dispose()):t}dispose(){this.splash&&(window.removeEventListener("resize",this.onUpdate),this.splash.remove(),this.prRoot.remove(),this.splash=null)}}class c{constructor(e,t){this.loader=e,this.config=t}runGame(e=e=>e){const t=this.config,s=t.binary=(Array.isArray(t.binary)?t.binary:[t.binary]).map(e=>"string"==typeof e?{path:e}:e),r=t.runtime=(Array.isArray(t.runtime)?t.runtime:[t.runtime]).map(e=>"string"==typeof e?{path:e,type:"js"}:e),i=new o(null,null,4),n=new o(e=>{console.log("AVM Load",e)},null,t.progressParserWeight?t.progressParserWeight:.001);return this.progress=new o(e,[i,n]),Object.assign(window,{updatePokiProgressBar:n.report}),this.loader.run(r,s,i.report,t.debug).then(e=>(t.files=e,t))}}let d,p,u;const g={init(e){p=new a(e),d=new c(p,e),u=new l(document,e),u.init(),window.setStageDimensions=function(t,s,r,i){e.x=t,e.y=s,e.w=r,e.h=i,window.AVMPlayerPoki&&window.AVMPlayerPoki.setStageDimensions(t,s,r,i),u.onUpdate()}},runGame(e=e=>e,t=(e,t)=>0){const s=d.config,r=e=>{if(s.start){u.ready();const t=t=>{if(u.hide(!0),!e)throw"PokiPlayer did not send a callback for starting game";e()};window.addEventListener("click",t,{once:!0})}else u.hide(!0)};return Object.assign(window,{swfParseComplete:r}),d.runGame(t=>{console.log("progress:",t),u.onProgress(t),e(t)}).then(e=>{t(e,r)})}};return e.LegacyLoader=g,e.Loader=a,e.ProgressUI=l,e.Reporter=o,e.Runner=c,e}({});
|
|
2
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sources":["../src/loader/decompress.ts","../src/loader/fetcher.ts","../src/loader/reporter.ts","../src/loader/loader.ts","../src/loader/progressUI.ts","../src/loader/runner.ts","../src/loader/index.ts"],"sourcesContent":["export const supportDecoderApi = ('DecompressionStream' in self);\nexport const isSWC = (head) => (head[0] === 0x43 && head[1] === 0x57 && head[2] === 0x53);\nexport const outputSize = (head) => new DataView(head.buffer).getUint32(4, true);\n/*\ndeclare global {\n interface Window { DecompressionStream: any; }\n}*/\nexport function Decoder(size, offset = 8) {\n if (!supportDecoderApi) {\n throw 'Your browser not support DecompressionStream =(';\n }\n const decoder = new self.DecompressionStream('deflate');\n const decoderW = decoder.writable.getWriter();\n const decoderR = decoder.readable.getReader();\n const buffer = new Uint8Array(size);\n let isRunned = false;\n let isDone = false;\n let donableCallback;\n function run() {\n decoderR.read().then(function next(state) {\n const done = state.done;\n const value = state.value;\n if (value) {\n buffer.set(value, offset);\n //console.debug(\"[Loader] Decoded chunk:\", offset);\n offset += value.length;\n }\n if (done || offset >= size) {\n isDone = true;\n if (donableCallback) {\n donableCallback();\n }\n console.debug(\"[Loader] Decoder closed:\", offset);\n return;\n }\n return decoderR.read().then(next);\n });\n }\n return {\n get buffer() {\n return buffer;\n },\n write(buffer) {\n decoderW.ready.then(() => {\n decoderW.write(buffer);\n if (!isRunned) {\n isRunned = true;\n run();\n }\n });\n },\n readAll() {\n if (isDone) {\n return Promise.resolve(buffer);\n }\n return new Promise((res) => {\n donableCallback = () => {\n res(buffer);\n };\n });\n }\n };\n}\n","import { supportDecoderApi, isSWC, outputSize, Decoder } from './decompress';\nexport function Fetcher(url = '', progress = f => f) {\n let total = 0;\n let reader;\n let chunks = [];\n progress && progress(0);\n return fetch(url)\n .then((request) => {\n if (!request.ok) {\n throw new Error(`Failed to load ${url}: ${request.status} ${request.statusText}`);\n }\n total = +request.headers.get('Content-Length');\n reader = request.body.getReader();\n return reader.read();\n })\n .then((data) => {\n const firstChunk = data.value;\n console.debug(\"[Loader] Header:\", String.fromCharCode.apply(null, firstChunk.slice(0, 3).reverse()));\n let loaded = 0;\n let decoder;\n if (supportDecoderApi && isSWC(firstChunk)) {\n const totalDecodedSize = outputSize(firstChunk);\n const swcHeader = firstChunk.slice(0, 8);\n swcHeader[0] = 70; // SWC => SWF\n console.debug(\"[Loader] SWC size:\", outputSize(firstChunk));\n decoder = Decoder(totalDecodedSize, 8);\n decoder.buffer.set(swcHeader);\n // push witout header\n decoder.write(firstChunk.slice(8));\n }\n else {\n chunks.push(firstChunk);\n }\n loaded += firstChunk.length;\n progress && progress(Math.min(1, loaded / total));\n // update all other chunks reqursive while !done\n return reader.read().then(function moveNext(state) {\n if (state.done) {\n if (!decoder) {\n let buffer = new Uint8Array(loaded);\n let offset = 0;\n chunks.forEach((e) => {\n buffer.set(e, offset);\n offset += e.length;\n });\n return buffer;\n }\n else {\n return decoder.readAll();\n }\n }\n const value = state.value;\n loaded += value.length;\n progress && progress(loaded / total);\n if (!decoder) {\n chunks.push(value);\n }\n else {\n decoder.write(value);\n }\n return reader.read().then(moveNext);\n });\n });\n}\nexport function loadBinary(file, progressEvent = f => f) {\n const isScript = file.path.indexOf(\".js\") > -1;\n if (!isScript && supportDecoderApi) {\n return Fetcher(file.path, progressEvent).then((buffer) => {\n return Object.assign(file, {\n data: buffer.buffer,\n type: \"swf\",\n });\n });\n }\n const req = new XMLHttpRequest();\n req.addEventListener(\"progress\", (e) => {\n // get from progress, then from request, and if not valid - from file\n const total = e.total\n || +req.getResponseHeader(\"content-length\")\n || file.size\n || 0;\n if (!total) {\n progressEvent(1);\n return;\n }\n console.log(\"XHR\", e.loaded, total);\n progressEvent(Math.min(1, e.loaded / total));\n });\n req.open(\"GET\", file.path, true);\n req.responseType = isScript ? \"text\" : \"arraybuffer\";\n return new Promise((res, rej) => {\n req.addEventListener(\"error\", rej);\n req.addEventListener(\"load\", () => {\n if (req.status >= 400) {\n rej(new Error(`Failed to load ${file.path}: ${req.status} ${req.statusText}`));\n return;\n }\n progressEvent(1);\n if (isScript) {\n // unsafe\n //eval(req.response);\n const b = new Blob([req.response], { type: \"text/javascript\" });\n // use blob\n loadScript(URL.createObjectURL(b)).then(() => res(undefined));\n return;\n }\n res({\n meta: file.meta || {},\n name: file.name,\n path: file.path,\n resourceType: file.resourceType,\n data: req.response,\n type: isScript ? \"js\" : \"swf\",\n });\n });\n req.send();\n });\n}\nexport function loadScript(file, progress) {\n const head = document.querySelector(\"head\");\n const script = document.createElement(\"script\");\n return new Promise((res, rej) => {\n Object.assign(script, {\n type: \"text/javascript\",\n async: true,\n src: typeof file === 'string' ? file : file.path,\n onload: () => {\n progress && progress(1);\n res(script);\n },\n onerror: rej,\n });\n head.appendChild(script);\n });\n}\n","export class Reporter {\n constructor(callback, _childs, weight = 1) {\n this.callback = callback;\n this.weight = weight;\n this.id = Reporter.ID++;\n this.value = 0;\n this._childs = [];\n this._report = this._report.bind(this);\n this.childs = _childs;\n }\n set childs(chs) {\n for (let old of this._childs) {\n if (old.callback === this._report) {\n old.callback = null;\n }\n }\n this._childs.length = 0;\n if (chs) {\n for (let c of chs) {\n if (c === this)\n throw 'Reporter loop';\n c.callback = this._report;\n }\n this._childs = chs.slice();\n }\n }\n get childs() {\n return this._childs;\n }\n _report(v) {\n if (this._childs.length === 0) {\n this.value = v * this.weight;\n }\n else {\n let summ = 0;\n let v = 0;\n this._childs.forEach((e) => {\n summ += e.weight || 1;\n v += (e.value || 0);\n });\n this.value = v / summ;\n }\n this.callback && this.callback(this.value);\n }\n get report() {\n return this._report;\n }\n}\nReporter.ID = 0;\n","import { loadBinary, loadScript } from \"./fetcher\";\nimport { Reporter } from \"./reporter\";\nexport class Loader {\n constructor(config) {\n this.config = config;\n }\n ;\n run(jsFiles, binaryFiles, progressEvent = (_f) => void 0, _debugScripts = false) {\n const jsCount = jsFiles.length;\n const binCount = binaryFiles.length;\n const all = jsFiles.concat(binaryFiles);\n const reporters = Array.from({ length: jsCount + binCount }, () => new Reporter());\n this.progress = new Reporter(progressEvent, reporters);\n let pendings;\n if (!_debugScripts) {\n pendings = all.map((e, i) => loadBinary(e, reporters[i].report));\n }\n else {\n pendings = binaryFiles.map((e, i) => loadBinary(e, reporters[i].report));\n pendings = pendings.concat(jsFiles.map((e, i) => loadScript(e, reporters[i + binCount].report)));\n }\n return Promise.all(pendings).then((data) => {\n return data.filter((e) => e && e.type === \"swf\");\n });\n }\n}\n","const transformRel = (val, base) => {\n if (typeof val !== 'string')\n return +val;\n return val.includes(\"%\")\n ? (parseFloat(val) / 100) * base\n : parseFloat(val);\n};\nexport class ProgressUI {\n constructor(root = document, config) {\n this.root = root;\n this.config = config;\n this.onUpdate = this.onUpdate.bind(this);\n this.onProgress = this.onProgress.bind(this);\n window.addEventListener(\"resize\", this.onUpdate);\n }\n build() {\n this.splash = this.root.querySelector(\"#splash__image\");\n this.prRoot = this.root.querySelector(\"#progress__root\");\n this.prLine = this.root.querySelector(\"#progress__line\");\n }\n init() {\n this.build();\n if (!this.splash) {\n return;\n }\n const config = this.config;\n if (config.backgroundColor) {\n document.body.style.backgroundColor = config.backgroundColor;\n }\n if (config.splash) {\n Object.assign(this.splash.style, {\n backgroundImage: `url(${config.splash})`,\n visibility: \"visible\",\n });\n }\n const pr_conf = config.progress;\n if (typeof pr_conf === \"object\") {\n pr_conf.rect = pr_conf.rect || [0.1, 0.9, 0.8, 0.01];\n Object.assign(this.prRoot.style, {\n background: pr_conf.back,\n left: `${100 * pr_conf.rect[0]}%`,\n top: `${100 * pr_conf.rect[1]}%`,\n width: `${100 * pr_conf.rect[2]}%`,\n height: `${100 * pr_conf.rect[3]}%`,\n });\n Object.assign(this.prLine.style, {\n background: pr_conf.line,\n });\n }\n this.onUpdate();\n }\n onProgress(p) {\n const pr_conf = this.config.progress;\n if (!this.prLine || !pr_conf) {\n return;\n }\n switch (pr_conf.direction) {\n case \"tb\": {\n Object.assign(this.prLine.style, {\n height: `${p * 100}%`,\n width: \"100%\",\n });\n break;\n }\n case \"lr\":\n default: {\n Object.assign(this.prLine.style, {\n height: \"100%\",\n width: `${p * 100}%`,\n });\n }\n }\n }\n onUpdate() {\n if (!this.splash) {\n return;\n }\n const config = this.config;\n let x = transformRel(config.x, window.innerWidth) || 0;\n let y = transformRel(config.y, window.innerHeight) || 0;\n let w = transformRel(config.w, window.innerWidth) || window.innerWidth;\n let h = transformRel(config.h, window.innerHeight) || window.innerHeight;\n const minMax = Math.min(h / config.height, w / config.width);\n const rw = Math.ceil(config.width * minMax);\n const rh = Math.ceil(config.height * minMax);\n const rx = x + (w - rw) / 2;\n const ry = y + (h - rh) / 2;\n Object.assign(this.splash.style, {\n width: `${rw}px`,\n height: `${rh}px`,\n left: `${rx}px`,\n top: `${ry}px`,\n });\n }\n ready() {\n if (!this.splash) {\n return;\n }\n if (this.config.start) {\n this.splash.style.background = `url(${this.config.start})`;\n }\n Object.assign(this.prRoot.style, {\n visibility: \"hidden\",\n opacity: 0,\n });\n }\n hide(dispose = false) {\n if (!this.splash) {\n return;\n }\n Object.assign(this.prRoot.style, {\n visibility: \"hidden\",\n opacity: 0,\n });\n Object.assign(this.splash.style, {\n visibility: \"hidden\",\n opacity: 0,\n });\n const promise = new Promise((res) => setTimeout(res, 500));\n if (!dispose) {\n return promise;\n }\n return promise.then(() => this.dispose());\n }\n dispose() {\n if (!this.splash) {\n return;\n }\n window.removeEventListener('resize', this.onUpdate);\n this.splash.remove();\n this.prRoot.remove();\n this.splash = null;\n }\n}\n","import { Reporter } from \"./reporter\";\nexport class Runner {\n constructor(loader, config) {\n this.loader = loader;\n this.config = config;\n }\n ;\n runGame(progressEvent = (f) => f) {\n const config = this.config;\n const bins = config.binary =\n (Array.isArray(config.binary)\n ? config.binary\n : [config.binary]).map(e => (typeof e === 'string' ? { path: e } : e));\n const jss = config.runtime =\n (Array.isArray(config.runtime)\n ? config.runtime\n : [config.runtime]).map(e => (typeof e === 'string' ? { path: e, type: 'js' } : e));\n const loadReporter = new Reporter(null, null, 4);\n const avmReporter = new Reporter((f) => {\n console.log(\"AVM Load\", f);\n }, null, config.progressParserWeight ? config.progressParserWeight : 0.001);\n this.progress = new Reporter(progressEvent, [loadReporter, avmReporter]);\n // make functions avilailable on window, so the loaded js-code can access and execute them\n Object.assign(window, {\n updatePokiProgressBar: avmReporter.report,\n //pokiGameParseComplete: complete,\n });\n return this.loader.run(jss, bins, loadReporter.report, config.debug).then((data) => {\n config.files = data;\n return config;\n });\n }\n}\n","import { Loader } from \"./loader\";\nimport { ProgressUI } from \"./progressUI\";\nimport { Runner } from \"./runner\";\nimport { Reporter } from \"./reporter\";\nexport { Loader, Runner, ProgressUI, Reporter };\nlet runner;\nlet loader;\nlet ui;\nexport const LegacyLoader = {\n init(_gameConfig) {\n loader = new Loader(_gameConfig);\n runner = new Runner(loader, _gameConfig);\n ui = new ProgressUI(document, _gameConfig);\n ui.init();\n window[\"setStageDimensions\"] = function (x, y, w, h) {\n _gameConfig.x = x;\n _gameConfig.y = y;\n _gameConfig.w = w;\n _gameConfig.h = h;\n if (window[\"AVMPlayerPoki\"]) {\n window[\"AVMPlayerPoki\"].setStageDimensions(x, y, w, h);\n }\n ui.onUpdate();\n };\n },\n runGame(progressEvent = (f) => f, completeEvent = (data, gameRunEvent) => 0) {\n const conf = runner.config;\n const progress = (f) => {\n console.log(\"progress:\", f);\n ui.onProgress(f);\n progressEvent(f);\n };\n const complete = (func) => {\n // rereport\n // completeEvent(func);\n if (conf.start) {\n //\tstart image exists.\n //\thide progressbar, show startimage and wait for user-input to start the game\n ui.ready();\n const onClick = (_e) => {\n ui.hide(true);\n if (!func)\n throw \"PokiPlayer did not send a callback for starting game\";\n func();\n };\n window.addEventListener(\"click\", onClick, { once: true });\n }\n else {\n ui.hide(true);\n }\n };\n // make functions avilailable on window, so the loaded js-code can access and execute them\n Object.assign(window, {\n swfParseComplete: complete,\n });\n return runner\n .runGame(progress)\n .then((res) => {\n completeEvent(res, complete);\n });\n }\n};\n"],"names":["supportDecoderApi","self","outputSize","head","DataView","buffer","getUint32","Fetcher","url","progress","f","reader","total","chunks","fetch","then","request","ok","Error","status","statusText","headers","get","body","getReader","read","data","firstChunk","value","console","debug","String","fromCharCode","apply","slice","reverse","decoder","loaded","totalDecodedSize","swcHeader","size","offset","DecompressionStream","decoderW","writable","getWriter","decoderR","readable","Uint8Array","donableCallback","isRunned","isDone","run","next","state","done","set","length","write","ready","readAll","Promise","resolve","res","Decoder","push","Math","min","moveNext","forEach","e","loadBinary","file","progressEvent","isScript","path","indexOf","Object","assign","type","req","XMLHttpRequest","addEventListener","getResponseHeader","log","open","responseType","rej","b","Blob","response","loadScript","URL","createObjectURL","undefined","meta","name","resourceType","send","document","querySelector","script","createElement","async","src","onload","onerror","appendChild","Reporter","constructor","callback","_childs","weight","this","id","ID","_report","bind","childs","chs","old","c","v","summ","report","Loader","config","jsFiles","binaryFiles","_f","_debugScripts","jsCount","binCount","all","concat","reporters","Array","from","pendings","map","i","filter","transformRel","val","base","includes","parseFloat","ProgressUI","root","onUpdate","onProgress","window","build","splash","prRoot","prLine","init","backgroundColor","style","backgroundImage","visibility","pr_conf","rect","background","back","left","top","width","height","line","p","direction","x","innerWidth","y","innerHeight","w","h","minMax","rw","ceil","rh","rx","ry","start","opacity","hide","dispose","promise","setTimeout","removeEventListener","remove","Runner","loader","runGame","bins","binary","isArray","jss","runtime","loadReporter","avmReporter","progressParserWeight","updatePokiProgressBar","files","runner","ui","LegacyLoader","_gameConfig","setStageDimensions","completeEvent","gameRunEvent","conf","complete","func","onClick","_e","once","swfParseComplete"],"mappings":"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"}
|