From 93be778697b5bb7e4039a276b3d1fd66b855a7dd Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Wed, 17 Feb 2016 02:01:52 +0100 Subject: [PATCH] Updated spine-as3 for use with PowerFlasher FDT. --- .gitignore | 5 +- .../spine-as3-example/.actionScriptProperties | 41 - spine-as3/spine-as3-example/.project | 4 +- .../.settings/com.powerflasher.fdt.classpath | 7 + .../.settings/com.powerflasher.fdt.core.prefs | 23 + .../com.powerflasher.fdt.core.problems.prefs | 2 + .../.settings/launch/spine-as3-example.launch | 48 ++ .../org.eclipse.core.resources.prefs | 3 +- .../html-template/history/history.css | 6 - .../html-template/history/history.js | 678 --------------- .../html-template/history/historyFrame.html | 29 - .../html-template/index.template.html | 108 --- .../html-template/playerProductInstall.swf | Bin 657 -> 0 bytes .../html-template/swfobject.js | 777 ------------------ spine-as3/spine-as3-example/lib/spine-as3.swc | Bin 0 -> 55351 bytes spine-as3/spine-as3-example/src/spine/Main.as | 6 +- spine-as3/spine-as3/.actionScriptProperties | 21 - spine-as3/spine-as3/.flexLibProperties | 6 - spine-as3/spine-as3/.project | 5 +- .../.settings/com.powerflasher.fdt.classpath | 6 + .../.settings/com.powerflasher.fdt.core.prefs | 21 + .../com.powerflasher.fdt.core.problems.prefs | 2 + .../.settings/launch/spine-as3.launch | 23 + .../org.eclipse.core.resources.prefs | 3 +- .../html-template/history/history.css | 6 - .../html-template/history/history.js | 678 --------------- .../html-template/history/historyFrame.html | 29 - .../html-template/index.template.html | 108 --- .../html-template/playerProductInstall.swf | Bin 657 -> 0 bytes .../spine-as3/html-template/swfobject.js | 777 ------------------ spine-as3/spine-as3/src/spine/Bone.as | 2 +- spine-as3/spine-as3/src/spine/Skeleton.as | 2 +- .../spine-as3/src/spine/SkeletonBounds.as | 1 - spine-as3/spine-as3/src/spine/SkeletonJson.as | 66 +- .../src/spine/animation/CurveTimeline.as | 2 +- .../src/spine/animation/DrawOrderTimeline.as | 4 +- .../src/spine/animation/EventTimeline.as | 3 +- .../src/spine/animation/TrackEntry.as | 2 - spine-as3/spine-as3/src/spine/atlas/Atlas.as | 2 +- .../src/spine/flash/SkeletonSprite.as | 5 - 40 files changed, 183 insertions(+), 3328 deletions(-) delete mode 100644 spine-as3/spine-as3-example/.actionScriptProperties create mode 100644 spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.classpath create mode 100644 spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.prefs create mode 100644 spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.problems.prefs create mode 100644 spine-as3/spine-as3-example/.settings/launch/spine-as3-example.launch delete mode 100644 spine-as3/spine-as3-example/html-template/history/history.css delete mode 100644 spine-as3/spine-as3-example/html-template/history/history.js delete mode 100644 spine-as3/spine-as3-example/html-template/history/historyFrame.html delete mode 100644 spine-as3/spine-as3-example/html-template/index.template.html delete mode 100644 spine-as3/spine-as3-example/html-template/playerProductInstall.swf delete mode 100644 spine-as3/spine-as3-example/html-template/swfobject.js create mode 100644 spine-as3/spine-as3-example/lib/spine-as3.swc delete mode 100644 spine-as3/spine-as3/.actionScriptProperties delete mode 100644 spine-as3/spine-as3/.flexLibProperties create mode 100644 spine-as3/spine-as3/.settings/com.powerflasher.fdt.classpath create mode 100644 spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.prefs create mode 100644 spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.problems.prefs create mode 100644 spine-as3/spine-as3/.settings/launch/spine-as3.launch delete mode 100644 spine-as3/spine-as3/html-template/history/history.css delete mode 100644 spine-as3/spine-as3/html-template/history/history.js delete mode 100644 spine-as3/spine-as3/html-template/history/historyFrame.html delete mode 100644 spine-as3/spine-as3/html-template/index.template.html delete mode 100644 spine-as3/spine-as3/html-template/playerProductInstall.swf delete mode 100644 spine-as3/spine-as3/html-template/swfobject.js diff --git a/.gitignore b/.gitignore index 050e28283..82a872747 100644 --- a/.gitignore +++ b/.gitignore @@ -87,9 +87,8 @@ spine-love/spine-lua/ spine-love/love/ !spine-love/spine-lua/Place spine-lua here.txt -spine-as3/spine-as3/bin -spine-as3/spine-as3-example/bin-debug -spine-as3/spine-as3-example/bin-release +spine-as3/spine-as3-example/bin +spine-as3/spine-as3-example/lib/.spine-as3.swc.stamp spine-starling/spine-starling/bin spine-starling/spine-starling-example/bin-debug diff --git a/spine-as3/spine-as3-example/.actionScriptProperties b/spine-as3/spine-as3-example/.actionScriptProperties deleted file mode 100644 index c1ebbc092..000000000 --- a/spine-as3/spine-as3-example/.actionScriptProperties +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/spine-as3/spine-as3-example/.project b/spine-as3/spine-as3-example/.project index 527db18fa..4b108e4c0 100644 --- a/spine-as3/spine-as3-example/.project +++ b/spine-as3/spine-as3-example/.project @@ -6,12 +6,12 @@ - com.adobe.flexbuilder.project.flexbuilder + com.powerflasher.fdt.core.FlashBuilder - com.adobe.flexbuilder.project.actionscriptnature + com.powerflasher.fdt.core.FlashNature diff --git a/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.classpath b/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.classpath new file mode 100644 index 000000000..ee74fd74d --- /dev/null +++ b/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.classpath @@ -0,0 +1,7 @@ + + + lib + frameworks/libs/player/{playerVersion}/playerglobal.swc + src + lib/spine-as3.swc + diff --git a/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.prefs b/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.prefs new file mode 100644 index 000000000..f1f8e07dd --- /dev/null +++ b/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.prefs @@ -0,0 +1,23 @@ +com.powerflasher.fdt.core.CompatiblePlayers=External_SWF_Viewer\:Browser\:Standalone_Flash_Player +com.powerflasher.fdt.core.CompilerArguments=-static-link-runtime-shared-libraries\=true\n-target-player\={playerVersion}\n-library-path+\="{flexSDK}/frameworks/locale/en_US"\n-default-size\=550,400 +com.powerflasher.fdt.core.CompilerConstants=CONFIG\:\:AUTHOR\!"{user.name}"\nCONFIG\:\:DEBUG\!{debug} +com.powerflasher.fdt.core.DefaultOutputFolder=bin +com.powerflasher.fdt.core.DefaultPlayer=External_SWF_Viewer +com.powerflasher.fdt.core.Language=AS3 +com.powerflasher.fdt.core.Manifests= +com.powerflasher.fdt.core.PassClasspath=true +com.powerflasher.fdt.core.PassDefines=true +com.powerflasher.fdt.core.PassExterns=false +com.powerflasher.fdt.core.PassMainclass=true +com.powerflasher.fdt.core.PassManifests=true +com.powerflasher.fdt.core.PassRsls=false +com.powerflasher.fdt.core.PassSwcs=true +com.powerflasher.fdt.core.PlatformType=WEB +com.powerflasher.fdt.core.PlayerVersion=11.1 +com.powerflasher.fdt.core.ProjectTypeHint=Web +com.powerflasher.fdt.core.Runtime=Flash_Player +com.powerflasher.fdt.core.SdkName=Flex 4.6.0 +com.powerflasher.fdt.core.mobile.AirDesktop.ACTIVE=true +com.powerflasher.fdt.core.mobile.AirDesktop.MOBILE.DESCRIPTOR=bin/spine-as3-example-app.xml +com.powerflasher.fdt.core.useProjectProblems.com.powerflasher.fdt.core.AS3RegionType=true +eclipse.preferences.version=1 diff --git a/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.problems.prefs b/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.problems.prefs new file mode 100644 index 000000000..f7c143627 --- /dev/null +++ b/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.problems.prefs @@ -0,0 +1,2 @@ +com.powerflasher.fdt.code.deadCode.AS3=Disabled +eclipse.preferences.version=1 diff --git a/spine-as3/spine-as3-example/.settings/launch/spine-as3-example.launch b/spine-as3/spine-as3-example/.settings/launch/spine-as3-example.launch new file mode 100644 index 000000000..0423423fd --- /dev/null +++ b/spine-as3/spine-as3-example/.settings/launch/spine-as3-example.launch @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spine-as3/spine-as3-example/.settings/org.eclipse.core.resources.prefs b/spine-as3/spine-as3-example/.settings/org.eclipse.core.resources.prefs index ac83e2f24..99f26c020 100644 --- a/spine-as3/spine-as3-example/.settings/org.eclipse.core.resources.prefs +++ b/spine-as3/spine-as3-example/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,2 @@ -#Sat May 04 09:13:10 CEST 2013 eclipse.preferences.version=1 -encoding/=utf-8 +encoding/=UTF-8 diff --git a/spine-as3/spine-as3-example/html-template/history/history.css b/spine-as3/spine-as3-example/html-template/history/history.css deleted file mode 100644 index dbc47c61b..000000000 --- a/spine-as3/spine-as3-example/html-template/history/history.css +++ /dev/null @@ -1,6 +0,0 @@ -/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */ - -#ie_historyFrame { width: 0px; height: 0px; display:none } -#firefox_anchorDiv { width: 0px; height: 0px; display:none } -#safari_formDiv { width: 0px; height: 0px; display:none } -#safari_rememberDiv { width: 0px; height: 0px; display:none } diff --git a/spine-as3/spine-as3-example/html-template/history/history.js b/spine-as3/spine-as3-example/html-template/history/history.js deleted file mode 100644 index 00a8bfee7..000000000 --- a/spine-as3/spine-as3-example/html-template/history/history.js +++ /dev/null @@ -1,678 +0,0 @@ -BrowserHistoryUtils = { - addEvent: function(elm, evType, fn, useCapture) { - useCapture = useCapture || false; - if (elm.addEventListener) { - elm.addEventListener(evType, fn, useCapture); - return true; - } - else if (elm.attachEvent) { - var r = elm.attachEvent('on' + evType, fn); - return r; - } - else { - elm['on' + evType] = fn; - } - } -} - -BrowserHistory = (function() { - // type of browser - var browser = { - ie: false, - ie8: false, - firefox: false, - safari: false, - opera: false, - version: -1 - }; - - // Default app state URL to use when no fragment ID present - var defaultHash = ''; - - // Last-known app state URL - var currentHref = document.location.href; - - // Initial URL (used only by IE) - var initialHref = document.location.href; - - // Initial URL (used only by IE) - var initialHash = document.location.hash; - - // History frame source URL prefix (used only by IE) - var historyFrameSourcePrefix = 'history/historyFrame.html?'; - - // History maintenance (used only by Safari) - var currentHistoryLength = -1; - - // Flag to denote the existence of onhashchange - var browserHasHashChange = false; - - var historyHash = []; - - var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash); - - var backStack = []; - var forwardStack = []; - - var currentObjectId = null; - - //UserAgent detection - var useragent = navigator.userAgent.toLowerCase(); - - if (useragent.indexOf("opera") != -1) { - browser.opera = true; - } else if (useragent.indexOf("msie") != -1) { - browser.ie = true; - browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4)); - if (browser.version == 8) - { - browser.ie = false; - browser.ie8 = true; - } - } else if (useragent.indexOf("safari") != -1) { - browser.safari = true; - browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7)); - } else if (useragent.indexOf("gecko") != -1) { - browser.firefox = true; - } - - if (browser.ie == true && browser.version == 7) { - window["_ie_firstload"] = false; - } - - function hashChangeHandler() - { - currentHref = document.location.href; - var flexAppUrl = getHash(); - //ADR: to fix multiple - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - pl[i].browserURLChange(flexAppUrl); - } - } else { - getPlayer().browserURLChange(flexAppUrl); - } - } - - // Accessor functions for obtaining specific elements of the page. - function getHistoryFrame() - { - return document.getElementById('ie_historyFrame'); - } - - function getFormElement() - { - return document.getElementById('safari_formDiv'); - } - - function getRememberElement() - { - return document.getElementById("safari_remember_field"); - } - - // Get the Flash player object for performing ExternalInterface callbacks. - // Updated for changes to SWFObject2. - function getPlayer(id) { - var i; - - if (id && document.getElementById(id)) { - var r = document.getElementById(id); - if (typeof r.SetVariable != "undefined") { - return r; - } - else { - var o = r.getElementsByTagName("object"); - var e = r.getElementsByTagName("embed"); - for (i = 0; i < o.length; i++) { - if (typeof o[i].browserURLChange != "undefined") - return o[i]; - } - for (i = 0; i < e.length; i++) { - if (typeof e[i].browserURLChange != "undefined") - return e[i]; - } - } - } - else { - var o = document.getElementsByTagName("object"); - var e = document.getElementsByTagName("embed"); - for (i = 0; i < e.length; i++) { - if (typeof e[i].browserURLChange != "undefined") - { - return e[i]; - } - } - for (i = 0; i < o.length; i++) { - if (typeof o[i].browserURLChange != "undefined") - { - return o[i]; - } - } - } - return undefined; - } - - function getPlayers() { - var i; - var players = []; - if (players.length == 0) { - var tmp = document.getElementsByTagName('object'); - for (i = 0; i < tmp.length; i++) - { - if (typeof tmp[i].browserURLChange != "undefined") - players.push(tmp[i]); - } - } - if (players.length == 0 || players[0].object == null) { - var tmp = document.getElementsByTagName('embed'); - for (i = 0; i < tmp.length; i++) - { - if (typeof tmp[i].browserURLChange != "undefined") - players.push(tmp[i]); - } - } - return players; - } - - function getIframeHash() { - var doc = getHistoryFrame().contentWindow.document; - var hash = String(doc.location.search); - if (hash.length == 1 && hash.charAt(0) == "?") { - hash = ""; - } - else if (hash.length >= 2 && hash.charAt(0) == "?") { - hash = hash.substring(1); - } - return hash; - } - - /* Get the current location hash excluding the '#' symbol. */ - function getHash() { - // It would be nice if we could use document.location.hash here, - // but it's faulty sometimes. - var idx = document.location.href.indexOf('#'); - return (idx >= 0) ? document.location.href.substr(idx+1) : ''; - } - - /* Get the current location hash excluding the '#' symbol. */ - function setHash(hash) { - // It would be nice if we could use document.location.hash here, - // but it's faulty sometimes. - if (hash == '') hash = '#' - document.location.hash = hash; - } - - function createState(baseUrl, newUrl, flexAppUrl) { - return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null }; - } - - /* Add a history entry to the browser. - * baseUrl: the portion of the location prior to the '#' - * newUrl: the entire new URL, including '#' and following fragment - * flexAppUrl: the portion of the location following the '#' only - */ - function addHistoryEntry(baseUrl, newUrl, flexAppUrl) { - - //delete all the history entries - forwardStack = []; - - if (browser.ie) { - //Check to see if we are being asked to do a navigate for the first - //history entry, and if so ignore, because it's coming from the creation - //of the history iframe - if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) { - currentHref = initialHref; - return; - } - if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) { - newUrl = baseUrl + '#' + defaultHash; - flexAppUrl = defaultHash; - } else { - // for IE, tell the history frame to go somewhere without a '#' - // in order to get this entry into the browser history. - getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl; - } - setHash(flexAppUrl); - } else { - - //ADR - if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) { - initialState = createState(baseUrl, newUrl, flexAppUrl); - } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) { - backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl); - } - - if (browser.safari && !browserHasHashChange) { - // for Safari, submit a form whose action points to the desired URL - if (browser.version <= 419.3) { - var file = window.location.pathname.toString(); - file = file.substring(file.lastIndexOf("/")+1); - getFormElement().innerHTML = '
'; - //get the current elements and add them to the form - var qs = window.location.search.substring(1); - var qs_arr = qs.split("&"); - for (var i = 0; i < qs_arr.length; i++) { - var tmp = qs_arr[i].split("="); - var elem = document.createElement("input"); - elem.type = "hidden"; - elem.name = tmp[0]; - elem.value = tmp[1]; - document.forms.historyForm.appendChild(elem); - } - document.forms.historyForm.submit(); - } else { - top.location.hash = flexAppUrl; - } - // We also have to maintain the history by hand for Safari - historyHash[history.length] = flexAppUrl; - _storeStates(); - } else { - // Otherwise, just tell the browser to go there - setHash(flexAppUrl); - } - } - backStack.push(createState(baseUrl, newUrl, flexAppUrl)); - } - - function _storeStates() { - if (browser.safari) { - getRememberElement().value = historyHash.join(","); - } - } - - function handleBackButton() { - //The "current" page is always at the top of the history stack. - var current = backStack.pop(); - if (!current) { return; } - var last = backStack[backStack.length - 1]; - if (!last && backStack.length == 0){ - last = initialState; - } - forwardStack.push(current); - } - - function handleForwardButton() { - //summary: private method. Do not call this directly. - - var last = forwardStack.pop(); - if (!last) { return; } - backStack.push(last); - } - - function handleArbitraryUrl() { - //delete all the history entries - forwardStack = []; - } - - /* Called periodically to poll to see if we need to detect navigation that has occurred */ - function checkForUrlChange() { - - if (browser.ie) { - if (currentHref != document.location.href && currentHref + '#' != document.location.href) { - //This occurs when the user has navigated to a specific URL - //within the app, and didn't use browser back/forward - //IE seems to have a bug where it stops updating the URL it - //shows the end-user at this point, but programatically it - //appears to be correct. Do a full app reload to get around - //this issue. - if (browser.version < 7) { - currentHref = document.location.href; - document.location.reload(); - } else { - if (getHash() != getIframeHash()) { - // this.iframe.src = this.blankURL + hash; - var sourceToSet = historyFrameSourcePrefix + getHash(); - getHistoryFrame().src = sourceToSet; - currentHref = document.location.href; - } - } - } - } - - if (browser.safari && !browserHasHashChange) { - // For Safari, we have to check to see if history.length changed. - if (currentHistoryLength >= 0 && history.length != currentHistoryLength) { - //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|")); - var flexAppUrl = getHash(); - if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */) - { - // If it did change and we're running Safari 3.x or earlier, - // then we have to look the old state up in our hand-maintained - // array since document.location.hash won't have changed, - // then call back into BrowserManager. - currentHistoryLength = history.length; - flexAppUrl = historyHash[currentHistoryLength]; - } - - //ADR: to fix multiple - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - pl[i].browserURLChange(flexAppUrl); - } - } else { - getPlayer().browserURLChange(flexAppUrl); - } - _storeStates(); - } - } - if (browser.firefox && !browserHasHashChange) { - if (currentHref != document.location.href) { - var bsl = backStack.length; - - var urlActions = { - back: false, - forward: false, - set: false - } - - if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) { - urlActions.back = true; - // FIXME: could this ever be a forward button? - // we can't clear it because we still need to check for forwards. Ugg. - // clearInterval(this.locationTimer); - handleBackButton(); - } - - // first check to see if we could have gone forward. We always halt on - // a no-hash item. - if (forwardStack.length > 0) { - if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) { - urlActions.forward = true; - handleForwardButton(); - } - } - - // ok, that didn't work, try someplace back in the history stack - if ((bsl >= 2) && (backStack[bsl - 2])) { - if (backStack[bsl - 2].flexAppUrl == getHash()) { - urlActions.back = true; - handleBackButton(); - } - } - - if (!urlActions.back && !urlActions.forward) { - var foundInStacks = { - back: -1, - forward: -1 - } - - for (var i = 0; i < backStack.length; i++) { - if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { - arbitraryUrl = true; - foundInStacks.back = i; - } - } - for (var i = 0; i < forwardStack.length; i++) { - if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { - arbitraryUrl = true; - foundInStacks.forward = i; - } - } - handleArbitraryUrl(); - } - - // Firefox changed; do a callback into BrowserManager to tell it. - currentHref = document.location.href; - var flexAppUrl = getHash(); - //ADR: to fix multiple - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - pl[i].browserURLChange(flexAppUrl); - } - } else { - getPlayer().browserURLChange(flexAppUrl); - } - } - } - } - - var _initialize = function () { - - browserHasHashChange = ("onhashchange" in document.body); - - if (browser.ie) - { - var scripts = document.getElementsByTagName('script'); - for (var i = 0, s; s = scripts[i]; i++) { - if (s.src.indexOf("history.js") > -1) { - var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html"); - } - } - historyFrameSourcePrefix = iframe_location + "?"; - var src = historyFrameSourcePrefix; - - var iframe = document.createElement("iframe"); - iframe.id = 'ie_historyFrame'; - iframe.name = 'ie_historyFrame'; - iframe.src = 'javascript:false;'; - - try { - document.body.appendChild(iframe); - } catch(e) { - setTimeout(function() { - document.body.appendChild(iframe); - }, 0); - } - } - - if (browser.safari && !browserHasHashChange) - { - var rememberDiv = document.createElement("div"); - rememberDiv.id = 'safari_rememberDiv'; - document.body.appendChild(rememberDiv); - rememberDiv.innerHTML = ''; - - var formDiv = document.createElement("div"); - formDiv.id = 'safari_formDiv'; - document.body.appendChild(formDiv); - - var reloader_content = document.createElement('div'); - reloader_content.id = 'safarireloader'; - var scripts = document.getElementsByTagName('script'); - for (var i = 0, s; s = scripts[i]; i++) { - if (s.src.indexOf("history.js") > -1) { - html = (new String(s.src)).replace(".js", ".html"); - } - } - reloader_content.innerHTML = ''; - document.body.appendChild(reloader_content); - reloader_content.style.position = 'absolute'; - reloader_content.style.left = reloader_content.style.top = '-9999px'; - iframe = reloader_content.getElementsByTagName('iframe')[0]; - - if (document.getElementById("safari_remember_field").value != "" ) { - historyHash = document.getElementById("safari_remember_field").value.split(","); - } - } - - if (browserHasHashChange) - document.body.onhashchange = hashChangeHandler; - } - - return { - historyHash: historyHash, - backStack: function() { return backStack; }, - forwardStack: function() { return forwardStack }, - getPlayer: getPlayer, - initialize: function(src) { - _initialize(src); - }, - setURL: function(url) { - document.location.href = url; - }, - getURL: function() { - return document.location.href; - }, - getTitle: function() { - return document.title; - }, - setTitle: function(title) { - try { - backStack[backStack.length - 1].title = title; - } catch(e) { } - //if on safari, set the title to be the empty string. - if (browser.safari) { - if (title == "") { - try { - var tmp = window.location.href.toString(); - title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#")); - } catch(e) { - title = ""; - } - } - } - document.title = title; - }, - setDefaultURL: function(def) - { - defaultHash = def; - def = getHash(); - //trailing ? is important else an extra frame gets added to the history - //when navigating back to the first page. Alternatively could check - //in history frame navigation to compare # and ?. - if (browser.ie) - { - window['_ie_firstload'] = true; - var sourceToSet = historyFrameSourcePrefix + def; - var func = function() { - getHistoryFrame().src = sourceToSet; - window.location.replace("#" + def); - setInterval(checkForUrlChange, 50); - } - try { - func(); - } catch(e) { - window.setTimeout(function() { func(); }, 0); - } - } - - if (browser.safari) - { - currentHistoryLength = history.length; - if (historyHash.length == 0) { - historyHash[currentHistoryLength] = def; - var newloc = "#" + def; - window.location.replace(newloc); - } else { - //alert(historyHash[historyHash.length-1]); - } - setInterval(checkForUrlChange, 50); - } - - - if (browser.firefox || browser.opera) - { - var reg = new RegExp("#" + def + "$"); - if (window.location.toString().match(reg)) { - } else { - var newloc ="#" + def; - window.location.replace(newloc); - } - setInterval(checkForUrlChange, 50); - } - - }, - - /* Set the current browser URL; called from inside BrowserManager to propagate - * the application state out to the container. - */ - setBrowserURL: function(flexAppUrl, objectId) { - if (browser.ie && typeof objectId != "undefined") { - currentObjectId = objectId; - } - //fromIframe = fromIframe || false; - //fromFlex = fromFlex || false; - //alert("setBrowserURL: " + flexAppUrl); - //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ; - - var pos = document.location.href.indexOf('#'); - var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href; - var newUrl = baseUrl + '#' + flexAppUrl; - - if (document.location.href != newUrl && document.location.href + '#' != newUrl) { - currentHref = newUrl; - addHistoryEntry(baseUrl, newUrl, flexAppUrl); - currentHistoryLength = history.length; - } - }, - - browserURLChange: function(flexAppUrl) { - var objectId = null; - if (browser.ie && currentObjectId != null) { - objectId = currentObjectId; - } - - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - try { - pl[i].browserURLChange(flexAppUrl); - } catch(e) { } - } - } else { - try { - getPlayer(objectId).browserURLChange(flexAppUrl); - } catch(e) { } - } - - currentObjectId = null; - }, - getUserAgent: function() { - return navigator.userAgent; - }, - getPlatform: function() { - return navigator.platform; - } - - } - -})(); - -// Initialization - -// Automated unit testing and other diagnostics - -function setURL(url) -{ - document.location.href = url; -} - -function backButton() -{ - history.back(); -} - -function forwardButton() -{ - history.forward(); -} - -function goForwardOrBackInHistory(step) -{ - history.go(step); -} - -//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); }); -(function(i) { - var u =navigator.userAgent;var e=/*@cc_on!@*/false; - var st = setTimeout; - if(/webkit/i.test(u)){ - st(function(){ - var dr=document.readyState; - if(dr=="loaded"||dr=="complete"){i()} - else{st(arguments.callee,10);}},10); - } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){ - document.addEventListener("DOMContentLoaded",i,false); - } else if(e){ - (function(){ - var t=document.createElement('doc:rdy'); - try{t.doScroll('left'); - i();t=null; - }catch(e){st(arguments.callee,0);}})(); - } else{ - window.onload=i; - } -})( function() {BrowserHistory.initialize();} ); diff --git a/spine-as3/spine-as3-example/html-template/history/historyFrame.html b/spine-as3/spine-as3-example/html-template/history/historyFrame.html deleted file mode 100644 index 07e3806f0..000000000 --- a/spine-as3/spine-as3-example/html-template/history/historyFrame.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - Hidden frame for Browser History support. - - diff --git a/spine-as3/spine-as3-example/html-template/index.template.html b/spine-as3/spine-as3-example/html-template/index.template.html deleted file mode 100644 index d327daded..000000000 --- a/spine-as3/spine-as3-example/html-template/index.template.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - ${title} - - - - - - - - - - - - - -
-

- To view this page ensure that Adobe Flash Player version - ${version_major}.${version_minor}.${version_revision} or greater is installed. -

- -
- - - - diff --git a/spine-as3/spine-as3-example/html-template/playerProductInstall.swf b/spine-as3/spine-as3-example/html-template/playerProductInstall.swf deleted file mode 100644 index bdc3437856cb0ae54bb9423700ba6ec89f35282c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 zcmV;C0&e|7S5pT30{{ScoOM%8YZE~jel|&yP13aKhpyI8)Pu*a7cZru!IYFhQ!%kE z;zt>GCuViByG~|XgJ(bJp~q+`f){V4c=Tk!n-K9Tcv0|Qh}4-)Z5q%$%)ak4^FGh} zG4mKh>p=QFFsz{%nRVYDpaejJ54{eo7BqCbU1T$6A?_UfdU|tzr7->Edg5~QJ`!s!OO;20fpVHsv=YsdQ{lvI<6(v2yrdS7`6LQi8#uy`}SX?Ni6O)r6`%Pye4YxmY_|vs1r$ zYS62JJit*Qq5)1^TgC)o6KZQEG=%VHP4mC>rXSoh>x{G-y~501s42xbb%oj5teYed zUazfuM*8z%%PQW6Lm}m@hf8V%w#-l*H+45VumzOSNh6MI zfwTnD68J}cRU>5EordGe5i?c`=PYmF$$^*q^20~+G3o1>u%sdEL~sE;XrvE~96_TY z1oQ%v(6hbD$HElG!xl|cjZOyoWIw@E;qK|`oT|Xk&*+o6#W@8T{oeJ8I9m-_V~Lc) rrowHdr=QEu;UGRC%}bhmYZ>GFiMOQQ+m?EJQA~aL;e`Gll9T{P!97I~ diff --git a/spine-as3/spine-as3-example/html-template/swfobject.js b/spine-as3/spine-as3-example/html-template/swfobject.js deleted file mode 100644 index bf35c07c8..000000000 --- a/spine-as3/spine-as3-example/html-template/swfobject.js +++ /dev/null @@ -1,777 +0,0 @@ -/*! SWFObject v2.2 - is released under the MIT License -*/ - -var swfobject = function() { - - var UNDEF = "undefined", - OBJECT = "object", - SHOCKWAVE_FLASH = "Shockwave Flash", - SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", - FLASH_MIME_TYPE = "application/x-shockwave-flash", - EXPRESS_INSTALL_ID = "SWFObjectExprInst", - ON_READY_STATE_CHANGE = "onreadystatechange", - - win = window, - doc = document, - nav = navigator, - - plugin = false, - domLoadFnArr = [main], - regObjArr = [], - objIdArr = [], - listenersArr = [], - storedAltContent, - storedAltContentId, - storedCallbackFn, - storedCallbackObj, - isDomLoaded = false, - isExpressInstallActive = false, - dynamicStylesheet, - dynamicStylesheetMedia, - autoHideShow = true, - - /* Centralized function for browser feature detection - - User agent string detection is only used when no good alternative is possible - - Is executed directly for optimal performance - */ - ua = function() { - var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF, - u = nav.userAgent.toLowerCase(), - p = nav.platform.toLowerCase(), - windows = p ? /win/.test(p) : /win/.test(u), - mac = p ? /mac/.test(p) : /mac/.test(u), - webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit - ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html - playerVersion = [0,0,0], - d = null; - if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) { - d = nav.plugins[SHOCKWAVE_FLASH].description; - if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+ - plugin = true; - ie = false; // cascaded feature detection for Internet Explorer - d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); - playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10); - playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10); - playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0; - } - } - else if (typeof win.ActiveXObject != UNDEF) { - try { - var a = new ActiveXObject(SHOCKWAVE_FLASH_AX); - if (a) { // a will return null when ActiveX is disabled - d = a.GetVariable("$version"); - if (d) { - ie = true; // cascaded feature detection for Internet Explorer - d = d.split(" ")[1].split(","); - playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; - } - } - } - catch(e) {} - } - return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac }; - }(), - - /* Cross-browser onDomLoad - - Will fire an event as soon as the DOM of a web page is loaded - - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/ - - Regular onload serves as fallback - */ - onDomLoad = function() { - if (!ua.w3) { return; } - if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically - callDomLoadFunctions(); - } - if (!isDomLoaded) { - if (typeof doc.addEventListener != UNDEF) { - doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false); - } - if (ua.ie && ua.win) { - doc.attachEvent(ON_READY_STATE_CHANGE, function() { - if (doc.readyState == "complete") { - doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee); - callDomLoadFunctions(); - } - }); - if (win == top) { // if not inside an iframe - (function(){ - if (isDomLoaded) { return; } - try { - doc.documentElement.doScroll("left"); - } - catch(e) { - setTimeout(arguments.callee, 0); - return; - } - callDomLoadFunctions(); - })(); - } - } - if (ua.wk) { - (function(){ - if (isDomLoaded) { return; } - if (!/loaded|complete/.test(doc.readyState)) { - setTimeout(arguments.callee, 0); - return; - } - callDomLoadFunctions(); - })(); - } - addLoadEvent(callDomLoadFunctions); - } - }(); - - function callDomLoadFunctions() { - if (isDomLoaded) { return; } - try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early - var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span")); - t.parentNode.removeChild(t); - } - catch (e) { return; } - isDomLoaded = true; - var dl = domLoadFnArr.length; - for (var i = 0; i < dl; i++) { - domLoadFnArr[i](); - } - } - - function addDomLoadEvent(fn) { - if (isDomLoaded) { - fn(); - } - else { - domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+ - } - } - - /* Cross-browser onload - - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/ - - Will fire an event as soon as a web page including all of its assets are loaded - */ - function addLoadEvent(fn) { - if (typeof win.addEventListener != UNDEF) { - win.addEventListener("load", fn, false); - } - else if (typeof doc.addEventListener != UNDEF) { - doc.addEventListener("load", fn, false); - } - else if (typeof win.attachEvent != UNDEF) { - addListener(win, "onload", fn); - } - else if (typeof win.onload == "function") { - var fnOld = win.onload; - win.onload = function() { - fnOld(); - fn(); - }; - } - else { - win.onload = fn; - } - } - - /* Main function - - Will preferably execute onDomLoad, otherwise onload (as a fallback) - */ - function main() { - if (plugin) { - testPlayerVersion(); - } - else { - matchVersions(); - } - } - - /* Detect the Flash Player version for non-Internet Explorer browsers - - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description: - a. Both release and build numbers can be detected - b. Avoid wrong descriptions by corrupt installers provided by Adobe - c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports - - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available - */ - function testPlayerVersion() { - var b = doc.getElementsByTagName("body")[0]; - var o = createElement(OBJECT); - o.setAttribute("type", FLASH_MIME_TYPE); - var t = b.appendChild(o); - if (t) { - var counter = 0; - (function(){ - if (typeof t.GetVariable != UNDEF) { - var d = t.GetVariable("$version"); - if (d) { - d = d.split(" ")[1].split(","); - ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; - } - } - else if (counter < 10) { - counter++; - setTimeout(arguments.callee, 10); - return; - } - b.removeChild(o); - t = null; - matchVersions(); - })(); - } - else { - matchVersions(); - } - } - - /* Perform Flash Player and SWF version matching; static publishing only - */ - function matchVersions() { - var rl = regObjArr.length; - if (rl > 0) { - for (var i = 0; i < rl; i++) { // for each registered object element - var id = regObjArr[i].id; - var cb = regObjArr[i].callbackFn; - var cbObj = {success:false, id:id}; - if (ua.pv[0] > 0) { - var obj = getElementById(id); - if (obj) { - if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match! - setVisibility(id, true); - if (cb) { - cbObj.success = true; - cbObj.ref = getObjectById(id); - cb(cbObj); - } - } - else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported - var att = {}; - att.data = regObjArr[i].expressInstall; - att.width = obj.getAttribute("width") || "0"; - att.height = obj.getAttribute("height") || "0"; - if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); } - if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); } - // parse HTML object param element's name-value pairs - var par = {}; - var p = obj.getElementsByTagName("param"); - var pl = p.length; - for (var j = 0; j < pl; j++) { - if (p[j].getAttribute("name").toLowerCase() != "movie") { - par[p[j].getAttribute("name")] = p[j].getAttribute("value"); - } - } - showExpressInstall(att, par, id, cb); - } - else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF - displayAltContent(obj); - if (cb) { cb(cbObj); } - } - } - } - else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content) - setVisibility(id, true); - if (cb) { - var o = getObjectById(id); // test whether there is an HTML object element or not - if (o && typeof o.SetVariable != UNDEF) { - cbObj.success = true; - cbObj.ref = o; - } - cb(cbObj); - } - } - } - } - } - - function getObjectById(objectIdStr) { - var r = null; - var o = getElementById(objectIdStr); - if (o && o.nodeName == "OBJECT") { - if (typeof o.SetVariable != UNDEF) { - r = o; - } - else { - var n = o.getElementsByTagName(OBJECT)[0]; - if (n) { - r = n; - } - } - } - return r; - } - - /* Requirements for Adobe Express Install - - only one instance can be active at a time - - fp 6.0.65 or higher - - Win/Mac OS only - - no Webkit engines older than version 312 - */ - function canExpressInstall() { - return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312); - } - - /* Show the Adobe Express Install dialog - - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 - */ - function showExpressInstall(att, par, replaceElemIdStr, callbackFn) { - isExpressInstallActive = true; - storedCallbackFn = callbackFn || null; - storedCallbackObj = {success:false, id:replaceElemIdStr}; - var obj = getElementById(replaceElemIdStr); - if (obj) { - if (obj.nodeName == "OBJECT") { // static publishing - storedAltContent = abstractAltContent(obj); - storedAltContentId = null; - } - else { // dynamic publishing - storedAltContent = obj; - storedAltContentId = replaceElemIdStr; - } - att.id = EXPRESS_INSTALL_ID; - if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; } - if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; } - doc.title = doc.title.slice(0, 47) + " - Flash Player Installation"; - var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn", - fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title; - if (typeof par.flashvars != UNDEF) { - par.flashvars += "&" + fv; - } - else { - par.flashvars = fv; - } - // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work - if (ua.ie && ua.win && obj.readyState != 4) { - var newObj = createElement("div"); - replaceElemIdStr += "SWFObjectNew"; - newObj.setAttribute("id", replaceElemIdStr); - obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - obj.parentNode.removeChild(obj); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - createSWF(att, par, replaceElemIdStr); - } - } - - /* Functions to abstract and display alternative content - */ - function displayAltContent(obj) { - if (ua.ie && ua.win && obj.readyState != 4) { - // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work - var el = createElement("div"); - obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content - el.parentNode.replaceChild(abstractAltContent(obj), el); - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - obj.parentNode.removeChild(obj); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - else { - obj.parentNode.replaceChild(abstractAltContent(obj), obj); - } - } - - function abstractAltContent(obj) { - var ac = createElement("div"); - if (ua.win && ua.ie) { - ac.innerHTML = obj.innerHTML; - } - else { - var nestedObj = obj.getElementsByTagName(OBJECT)[0]; - if (nestedObj) { - var c = nestedObj.childNodes; - if (c) { - var cl = c.length; - for (var i = 0; i < cl; i++) { - if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) { - ac.appendChild(c[i].cloneNode(true)); - } - } - } - } - } - return ac; - } - - /* Cross-browser dynamic SWF creation - */ - function createSWF(attObj, parObj, id) { - var r, el = getElementById(id); - if (ua.wk && ua.wk < 312) { return r; } - if (el) { - if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content - attObj.id = id; - } - if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML - var att = ""; - for (var i in attObj) { - if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries - if (i.toLowerCase() == "data") { - parObj.movie = attObj[i]; - } - else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword - att += ' class="' + attObj[i] + '"'; - } - else if (i.toLowerCase() != "classid") { - att += ' ' + i + '="' + attObj[i] + '"'; - } - } - } - var par = ""; - for (var j in parObj) { - if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries - par += ''; - } - } - el.outerHTML = '' + par + ''; - objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only) - r = getElementById(attObj.id); - } - else { // well-behaving browsers - var o = createElement(OBJECT); - o.setAttribute("type", FLASH_MIME_TYPE); - for (var m in attObj) { - if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries - if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword - o.setAttribute("class", attObj[m]); - } - else if (m.toLowerCase() != "classid") { // filter out IE specific attribute - o.setAttribute(m, attObj[m]); - } - } - } - for (var n in parObj) { - if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element - createObjParam(o, n, parObj[n]); - } - } - el.parentNode.replaceChild(o, el); - r = o; - } - } - return r; - } - - function createObjParam(el, pName, pValue) { - var p = createElement("param"); - p.setAttribute("name", pName); - p.setAttribute("value", pValue); - el.appendChild(p); - } - - /* Cross-browser SWF removal - - Especially needed to safely and completely remove a SWF in Internet Explorer - */ - function removeSWF(id) { - var obj = getElementById(id); - if (obj && obj.nodeName == "OBJECT") { - if (ua.ie && ua.win) { - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - removeObjectInIE(id); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - else { - obj.parentNode.removeChild(obj); - } - } - } - - function removeObjectInIE(id) { - var obj = getElementById(id); - if (obj) { - for (var i in obj) { - if (typeof obj[i] == "function") { - obj[i] = null; - } - } - obj.parentNode.removeChild(obj); - } - } - - /* Functions to optimize JavaScript compression - */ - function getElementById(id) { - var el = null; - try { - el = doc.getElementById(id); - } - catch (e) {} - return el; - } - - function createElement(el) { - return doc.createElement(el); - } - - /* Updated attachEvent function for Internet Explorer - - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks - */ - function addListener(target, eventType, fn) { - target.attachEvent(eventType, fn); - listenersArr[listenersArr.length] = [target, eventType, fn]; - } - - /* Flash Player and SWF content version matching - */ - function hasPlayerVersion(rv) { - var pv = ua.pv, v = rv.split("."); - v[0] = parseInt(v[0], 10); - v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0" - v[2] = parseInt(v[2], 10) || 0; - return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; - } - - /* Cross-browser dynamic CSS creation - - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php - */ - function createCSS(sel, decl, media, newStyle) { - if (ua.ie && ua.mac) { return; } - var h = doc.getElementsByTagName("head")[0]; - if (!h) { return; } // to also support badly authored HTML pages that lack a head element - var m = (media && typeof media == "string") ? media : "screen"; - if (newStyle) { - dynamicStylesheet = null; - dynamicStylesheetMedia = null; - } - if (!dynamicStylesheet || dynamicStylesheetMedia != m) { - // create dynamic stylesheet + get a global reference to it - var s = createElement("style"); - s.setAttribute("type", "text/css"); - s.setAttribute("media", m); - dynamicStylesheet = h.appendChild(s); - if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) { - dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]; - } - dynamicStylesheetMedia = m; - } - // add style rule - if (ua.ie && ua.win) { - if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) { - dynamicStylesheet.addRule(sel, decl); - } - } - else { - if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) { - dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}")); - } - } - } - - function setVisibility(id, isVisible) { - if (!autoHideShow) { return; } - var v = isVisible ? "visible" : "hidden"; - if (isDomLoaded && getElementById(id)) { - getElementById(id).style.visibility = v; - } - else { - createCSS("#" + id, "visibility:" + v); - } - } - - /* Filter to avoid XSS attacks - */ - function urlEncodeIfNecessary(s) { - var regex = /[\\\"<>\.;]/; - var hasBadChars = regex.exec(s) != null; - return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s; - } - - /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only) - */ - var cleanup = function() { - if (ua.ie && ua.win) { - window.attachEvent("onunload", function() { - // remove listeners to avoid memory leaks - var ll = listenersArr.length; - for (var i = 0; i < ll; i++) { - listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]); - } - // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect - var il = objIdArr.length; - for (var j = 0; j < il; j++) { - removeSWF(objIdArr[j]); - } - // cleanup library's main closures to avoid memory leaks - for (var k in ua) { - ua[k] = null; - } - ua = null; - for (var l in swfobject) { - swfobject[l] = null; - } - swfobject = null; - }); - } - }(); - - return { - /* Public API - - Reference: http://code.google.com/p/swfobject/wiki/documentation - */ - registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) { - if (ua.w3 && objectIdStr && swfVersionStr) { - var regObj = {}; - regObj.id = objectIdStr; - regObj.swfVersion = swfVersionStr; - regObj.expressInstall = xiSwfUrlStr; - regObj.callbackFn = callbackFn; - regObjArr[regObjArr.length] = regObj; - setVisibility(objectIdStr, false); - } - else if (callbackFn) { - callbackFn({success:false, id:objectIdStr}); - } - }, - - getObjectById: function(objectIdStr) { - if (ua.w3) { - return getObjectById(objectIdStr); - } - }, - - embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) { - var callbackObj = {success:false, id:replaceElemIdStr}; - if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) { - setVisibility(replaceElemIdStr, false); - addDomLoadEvent(function() { - widthStr += ""; // auto-convert to string - heightStr += ""; - var att = {}; - if (attObj && typeof attObj === OBJECT) { - for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs - att[i] = attObj[i]; - } - } - att.data = swfUrlStr; - att.width = widthStr; - att.height = heightStr; - var par = {}; - if (parObj && typeof parObj === OBJECT) { - for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs - par[j] = parObj[j]; - } - } - if (flashvarsObj && typeof flashvarsObj === OBJECT) { - for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs - if (typeof par.flashvars != UNDEF) { - par.flashvars += "&" + k + "=" + flashvarsObj[k]; - } - else { - par.flashvars = k + "=" + flashvarsObj[k]; - } - } - } - if (hasPlayerVersion(swfVersionStr)) { // create SWF - var obj = createSWF(att, par, replaceElemIdStr); - if (att.id == replaceElemIdStr) { - setVisibility(replaceElemIdStr, true); - } - callbackObj.success = true; - callbackObj.ref = obj; - } - else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install - att.data = xiSwfUrlStr; - showExpressInstall(att, par, replaceElemIdStr, callbackFn); - return; - } - else { // show alternative content - setVisibility(replaceElemIdStr, true); - } - if (callbackFn) { callbackFn(callbackObj); } - }); - } - else if (callbackFn) { callbackFn(callbackObj); } - }, - - switchOffAutoHideShow: function() { - autoHideShow = false; - }, - - ua: ua, - - getFlashPlayerVersion: function() { - return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] }; - }, - - hasFlashPlayerVersion: hasPlayerVersion, - - createSWF: function(attObj, parObj, replaceElemIdStr) { - if (ua.w3) { - return createSWF(attObj, parObj, replaceElemIdStr); - } - else { - return undefined; - } - }, - - showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) { - if (ua.w3 && canExpressInstall()) { - showExpressInstall(att, par, replaceElemIdStr, callbackFn); - } - }, - - removeSWF: function(objElemIdStr) { - if (ua.w3) { - removeSWF(objElemIdStr); - } - }, - - createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) { - if (ua.w3) { - createCSS(selStr, declStr, mediaStr, newStyleBoolean); - } - }, - - addDomLoadEvent: addDomLoadEvent, - - addLoadEvent: addLoadEvent, - - getQueryParamValue: function(param) { - var q = doc.location.search || doc.location.hash; - if (q) { - if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark - if (param == null) { - return urlEncodeIfNecessary(q); - } - var pairs = q.split("&"); - for (var i = 0; i < pairs.length; i++) { - if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { - return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1))); - } - } - } - return ""; - }, - - // For internal usage only - expressInstallCallback: function() { - if (isExpressInstallActive) { - var obj = getElementById(EXPRESS_INSTALL_ID); - if (obj && storedAltContent) { - obj.parentNode.replaceChild(storedAltContent, obj); - if (storedAltContentId) { - setVisibility(storedAltContentId, true); - if (ua.ie && ua.win) { storedAltContent.style.display = "block"; } - } - if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); } - } - isExpressInstallActive = false; - } - } - }; -}(); diff --git a/spine-as3/spine-as3-example/lib/spine-as3.swc b/spine-as3/spine-as3-example/lib/spine-as3.swc new file mode 100644 index 0000000000000000000000000000000000000000..780c1b3baf7bc8dd646ff61f269a6f8e39fa3ccf GIT binary patch literal 55351 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 - - - - - - - - - - - - - - - - - - - - diff --git a/spine-as3/spine-as3/.flexLibProperties b/spine-as3/spine-as3/.flexLibProperties deleted file mode 100644 index 1fbacb45b..000000000 --- a/spine-as3/spine-as3/.flexLibProperties +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/spine-as3/spine-as3/.project b/spine-as3/spine-as3/.project index b19d212ee..e29679a1d 100644 --- a/spine-as3/spine-as3/.project +++ b/spine-as3/spine-as3/.project @@ -6,13 +6,12 @@ - com.adobe.flexbuilder.project.flexbuilder + com.powerflasher.fdt.core.FlashBuilder - com.adobe.flexbuilder.project.flexlibnature - com.adobe.flexbuilder.project.actionscriptnature + com.powerflasher.fdt.core.FlashNature diff --git a/spine-as3/spine-as3/.settings/com.powerflasher.fdt.classpath b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.classpath new file mode 100644 index 000000000..14ce116b1 --- /dev/null +++ b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.classpath @@ -0,0 +1,6 @@ + + + lib + frameworks/libs/player/{playerVersion}/playerglobal.swc + src + diff --git a/spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.prefs b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.prefs new file mode 100644 index 000000000..150a7ff6b --- /dev/null +++ b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.prefs @@ -0,0 +1,21 @@ +com.powerflasher.fdt.core.CompatiblePlayers=External_SWF_Viewer\:Browser\:Standalone_Flash_Player +com.powerflasher.fdt.core.CompilerArguments=-static-link-runtime-shared-libraries\=true\n-target-player\={playerVersion}\n-library-path+\="{flexSDK}/frameworks/locale/en_US"\n-default-size\=550,400 +com.powerflasher.fdt.core.CompilerConstants=CONFIG\:\:AUTHOR\!"{user.name}"\nCONFIG\:\:DEBUG\!{debug} +com.powerflasher.fdt.core.DefaultOutputFolder=bin +com.powerflasher.fdt.core.DefaultPlayer=External_SWF_Viewer +com.powerflasher.fdt.core.Language=AS3 +com.powerflasher.fdt.core.Manifests= +com.powerflasher.fdt.core.PassClasspath=true +com.powerflasher.fdt.core.PassDefines=true +com.powerflasher.fdt.core.PassExterns=false +com.powerflasher.fdt.core.PassMainclass=true +com.powerflasher.fdt.core.PassManifests=true +com.powerflasher.fdt.core.PassRsls=false +com.powerflasher.fdt.core.PassSwcs=true +com.powerflasher.fdt.core.PlatformType=WEB +com.powerflasher.fdt.core.PlayerVersion=11.1 +com.powerflasher.fdt.core.ProjectTypeHint=Web +com.powerflasher.fdt.core.Runtime=Flash_Player +com.powerflasher.fdt.core.SdkName=Flex 4.6.0 +com.powerflasher.fdt.core.useProjectProblems.com.powerflasher.fdt.core.AS3RegionType=true +eclipse.preferences.version=1 diff --git a/spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.problems.prefs b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.problems.prefs new file mode 100644 index 000000000..7081d5dba --- /dev/null +++ b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.problems.prefs @@ -0,0 +1,2 @@ +com.powerflasher.fdt.typeProblems.implicitBooleanConversion.AS3=Disabled +eclipse.preferences.version=1 diff --git a/spine-as3/spine-as3/.settings/launch/spine-as3.launch b/spine-as3/spine-as3/.settings/launch/spine-as3.launch new file mode 100644 index 000000000..2eae8bac8 --- /dev/null +++ b/spine-as3/spine-as3/.settings/launch/spine-as3.launch @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spine-as3/spine-as3/.settings/org.eclipse.core.resources.prefs b/spine-as3/spine-as3/.settings/org.eclipse.core.resources.prefs index 7e697cc40..99f26c020 100644 --- a/spine-as3/spine-as3/.settings/org.eclipse.core.resources.prefs +++ b/spine-as3/spine-as3/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,2 @@ -#Tue Apr 30 18:55:56 CEST 2013 eclipse.preferences.version=1 -encoding/=utf-8 +encoding/=UTF-8 diff --git a/spine-as3/spine-as3/html-template/history/history.css b/spine-as3/spine-as3/html-template/history/history.css deleted file mode 100644 index dbc47c61b..000000000 --- a/spine-as3/spine-as3/html-template/history/history.css +++ /dev/null @@ -1,6 +0,0 @@ -/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */ - -#ie_historyFrame { width: 0px; height: 0px; display:none } -#firefox_anchorDiv { width: 0px; height: 0px; display:none } -#safari_formDiv { width: 0px; height: 0px; display:none } -#safari_rememberDiv { width: 0px; height: 0px; display:none } diff --git a/spine-as3/spine-as3/html-template/history/history.js b/spine-as3/spine-as3/html-template/history/history.js deleted file mode 100644 index 00a8bfee7..000000000 --- a/spine-as3/spine-as3/html-template/history/history.js +++ /dev/null @@ -1,678 +0,0 @@ -BrowserHistoryUtils = { - addEvent: function(elm, evType, fn, useCapture) { - useCapture = useCapture || false; - if (elm.addEventListener) { - elm.addEventListener(evType, fn, useCapture); - return true; - } - else if (elm.attachEvent) { - var r = elm.attachEvent('on' + evType, fn); - return r; - } - else { - elm['on' + evType] = fn; - } - } -} - -BrowserHistory = (function() { - // type of browser - var browser = { - ie: false, - ie8: false, - firefox: false, - safari: false, - opera: false, - version: -1 - }; - - // Default app state URL to use when no fragment ID present - var defaultHash = ''; - - // Last-known app state URL - var currentHref = document.location.href; - - // Initial URL (used only by IE) - var initialHref = document.location.href; - - // Initial URL (used only by IE) - var initialHash = document.location.hash; - - // History frame source URL prefix (used only by IE) - var historyFrameSourcePrefix = 'history/historyFrame.html?'; - - // History maintenance (used only by Safari) - var currentHistoryLength = -1; - - // Flag to denote the existence of onhashchange - var browserHasHashChange = false; - - var historyHash = []; - - var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash); - - var backStack = []; - var forwardStack = []; - - var currentObjectId = null; - - //UserAgent detection - var useragent = navigator.userAgent.toLowerCase(); - - if (useragent.indexOf("opera") != -1) { - browser.opera = true; - } else if (useragent.indexOf("msie") != -1) { - browser.ie = true; - browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4)); - if (browser.version == 8) - { - browser.ie = false; - browser.ie8 = true; - } - } else if (useragent.indexOf("safari") != -1) { - browser.safari = true; - browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7)); - } else if (useragent.indexOf("gecko") != -1) { - browser.firefox = true; - } - - if (browser.ie == true && browser.version == 7) { - window["_ie_firstload"] = false; - } - - function hashChangeHandler() - { - currentHref = document.location.href; - var flexAppUrl = getHash(); - //ADR: to fix multiple - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - pl[i].browserURLChange(flexAppUrl); - } - } else { - getPlayer().browserURLChange(flexAppUrl); - } - } - - // Accessor functions for obtaining specific elements of the page. - function getHistoryFrame() - { - return document.getElementById('ie_historyFrame'); - } - - function getFormElement() - { - return document.getElementById('safari_formDiv'); - } - - function getRememberElement() - { - return document.getElementById("safari_remember_field"); - } - - // Get the Flash player object for performing ExternalInterface callbacks. - // Updated for changes to SWFObject2. - function getPlayer(id) { - var i; - - if (id && document.getElementById(id)) { - var r = document.getElementById(id); - if (typeof r.SetVariable != "undefined") { - return r; - } - else { - var o = r.getElementsByTagName("object"); - var e = r.getElementsByTagName("embed"); - for (i = 0; i < o.length; i++) { - if (typeof o[i].browserURLChange != "undefined") - return o[i]; - } - for (i = 0; i < e.length; i++) { - if (typeof e[i].browserURLChange != "undefined") - return e[i]; - } - } - } - else { - var o = document.getElementsByTagName("object"); - var e = document.getElementsByTagName("embed"); - for (i = 0; i < e.length; i++) { - if (typeof e[i].browserURLChange != "undefined") - { - return e[i]; - } - } - for (i = 0; i < o.length; i++) { - if (typeof o[i].browserURLChange != "undefined") - { - return o[i]; - } - } - } - return undefined; - } - - function getPlayers() { - var i; - var players = []; - if (players.length == 0) { - var tmp = document.getElementsByTagName('object'); - for (i = 0; i < tmp.length; i++) - { - if (typeof tmp[i].browserURLChange != "undefined") - players.push(tmp[i]); - } - } - if (players.length == 0 || players[0].object == null) { - var tmp = document.getElementsByTagName('embed'); - for (i = 0; i < tmp.length; i++) - { - if (typeof tmp[i].browserURLChange != "undefined") - players.push(tmp[i]); - } - } - return players; - } - - function getIframeHash() { - var doc = getHistoryFrame().contentWindow.document; - var hash = String(doc.location.search); - if (hash.length == 1 && hash.charAt(0) == "?") { - hash = ""; - } - else if (hash.length >= 2 && hash.charAt(0) == "?") { - hash = hash.substring(1); - } - return hash; - } - - /* Get the current location hash excluding the '#' symbol. */ - function getHash() { - // It would be nice if we could use document.location.hash here, - // but it's faulty sometimes. - var idx = document.location.href.indexOf('#'); - return (idx >= 0) ? document.location.href.substr(idx+1) : ''; - } - - /* Get the current location hash excluding the '#' symbol. */ - function setHash(hash) { - // It would be nice if we could use document.location.hash here, - // but it's faulty sometimes. - if (hash == '') hash = '#' - document.location.hash = hash; - } - - function createState(baseUrl, newUrl, flexAppUrl) { - return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null }; - } - - /* Add a history entry to the browser. - * baseUrl: the portion of the location prior to the '#' - * newUrl: the entire new URL, including '#' and following fragment - * flexAppUrl: the portion of the location following the '#' only - */ - function addHistoryEntry(baseUrl, newUrl, flexAppUrl) { - - //delete all the history entries - forwardStack = []; - - if (browser.ie) { - //Check to see if we are being asked to do a navigate for the first - //history entry, and if so ignore, because it's coming from the creation - //of the history iframe - if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) { - currentHref = initialHref; - return; - } - if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) { - newUrl = baseUrl + '#' + defaultHash; - flexAppUrl = defaultHash; - } else { - // for IE, tell the history frame to go somewhere without a '#' - // in order to get this entry into the browser history. - getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl; - } - setHash(flexAppUrl); - } else { - - //ADR - if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) { - initialState = createState(baseUrl, newUrl, flexAppUrl); - } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) { - backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl); - } - - if (browser.safari && !browserHasHashChange) { - // for Safari, submit a form whose action points to the desired URL - if (browser.version <= 419.3) { - var file = window.location.pathname.toString(); - file = file.substring(file.lastIndexOf("/")+1); - getFormElement().innerHTML = '
'; - //get the current elements and add them to the form - var qs = window.location.search.substring(1); - var qs_arr = qs.split("&"); - for (var i = 0; i < qs_arr.length; i++) { - var tmp = qs_arr[i].split("="); - var elem = document.createElement("input"); - elem.type = "hidden"; - elem.name = tmp[0]; - elem.value = tmp[1]; - document.forms.historyForm.appendChild(elem); - } - document.forms.historyForm.submit(); - } else { - top.location.hash = flexAppUrl; - } - // We also have to maintain the history by hand for Safari - historyHash[history.length] = flexAppUrl; - _storeStates(); - } else { - // Otherwise, just tell the browser to go there - setHash(flexAppUrl); - } - } - backStack.push(createState(baseUrl, newUrl, flexAppUrl)); - } - - function _storeStates() { - if (browser.safari) { - getRememberElement().value = historyHash.join(","); - } - } - - function handleBackButton() { - //The "current" page is always at the top of the history stack. - var current = backStack.pop(); - if (!current) { return; } - var last = backStack[backStack.length - 1]; - if (!last && backStack.length == 0){ - last = initialState; - } - forwardStack.push(current); - } - - function handleForwardButton() { - //summary: private method. Do not call this directly. - - var last = forwardStack.pop(); - if (!last) { return; } - backStack.push(last); - } - - function handleArbitraryUrl() { - //delete all the history entries - forwardStack = []; - } - - /* Called periodically to poll to see if we need to detect navigation that has occurred */ - function checkForUrlChange() { - - if (browser.ie) { - if (currentHref != document.location.href && currentHref + '#' != document.location.href) { - //This occurs when the user has navigated to a specific URL - //within the app, and didn't use browser back/forward - //IE seems to have a bug where it stops updating the URL it - //shows the end-user at this point, but programatically it - //appears to be correct. Do a full app reload to get around - //this issue. - if (browser.version < 7) { - currentHref = document.location.href; - document.location.reload(); - } else { - if (getHash() != getIframeHash()) { - // this.iframe.src = this.blankURL + hash; - var sourceToSet = historyFrameSourcePrefix + getHash(); - getHistoryFrame().src = sourceToSet; - currentHref = document.location.href; - } - } - } - } - - if (browser.safari && !browserHasHashChange) { - // For Safari, we have to check to see if history.length changed. - if (currentHistoryLength >= 0 && history.length != currentHistoryLength) { - //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|")); - var flexAppUrl = getHash(); - if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */) - { - // If it did change and we're running Safari 3.x or earlier, - // then we have to look the old state up in our hand-maintained - // array since document.location.hash won't have changed, - // then call back into BrowserManager. - currentHistoryLength = history.length; - flexAppUrl = historyHash[currentHistoryLength]; - } - - //ADR: to fix multiple - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - pl[i].browserURLChange(flexAppUrl); - } - } else { - getPlayer().browserURLChange(flexAppUrl); - } - _storeStates(); - } - } - if (browser.firefox && !browserHasHashChange) { - if (currentHref != document.location.href) { - var bsl = backStack.length; - - var urlActions = { - back: false, - forward: false, - set: false - } - - if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) { - urlActions.back = true; - // FIXME: could this ever be a forward button? - // we can't clear it because we still need to check for forwards. Ugg. - // clearInterval(this.locationTimer); - handleBackButton(); - } - - // first check to see if we could have gone forward. We always halt on - // a no-hash item. - if (forwardStack.length > 0) { - if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) { - urlActions.forward = true; - handleForwardButton(); - } - } - - // ok, that didn't work, try someplace back in the history stack - if ((bsl >= 2) && (backStack[bsl - 2])) { - if (backStack[bsl - 2].flexAppUrl == getHash()) { - urlActions.back = true; - handleBackButton(); - } - } - - if (!urlActions.back && !urlActions.forward) { - var foundInStacks = { - back: -1, - forward: -1 - } - - for (var i = 0; i < backStack.length; i++) { - if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { - arbitraryUrl = true; - foundInStacks.back = i; - } - } - for (var i = 0; i < forwardStack.length; i++) { - if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { - arbitraryUrl = true; - foundInStacks.forward = i; - } - } - handleArbitraryUrl(); - } - - // Firefox changed; do a callback into BrowserManager to tell it. - currentHref = document.location.href; - var flexAppUrl = getHash(); - //ADR: to fix multiple - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - pl[i].browserURLChange(flexAppUrl); - } - } else { - getPlayer().browserURLChange(flexAppUrl); - } - } - } - } - - var _initialize = function () { - - browserHasHashChange = ("onhashchange" in document.body); - - if (browser.ie) - { - var scripts = document.getElementsByTagName('script'); - for (var i = 0, s; s = scripts[i]; i++) { - if (s.src.indexOf("history.js") > -1) { - var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html"); - } - } - historyFrameSourcePrefix = iframe_location + "?"; - var src = historyFrameSourcePrefix; - - var iframe = document.createElement("iframe"); - iframe.id = 'ie_historyFrame'; - iframe.name = 'ie_historyFrame'; - iframe.src = 'javascript:false;'; - - try { - document.body.appendChild(iframe); - } catch(e) { - setTimeout(function() { - document.body.appendChild(iframe); - }, 0); - } - } - - if (browser.safari && !browserHasHashChange) - { - var rememberDiv = document.createElement("div"); - rememberDiv.id = 'safari_rememberDiv'; - document.body.appendChild(rememberDiv); - rememberDiv.innerHTML = ''; - - var formDiv = document.createElement("div"); - formDiv.id = 'safari_formDiv'; - document.body.appendChild(formDiv); - - var reloader_content = document.createElement('div'); - reloader_content.id = 'safarireloader'; - var scripts = document.getElementsByTagName('script'); - for (var i = 0, s; s = scripts[i]; i++) { - if (s.src.indexOf("history.js") > -1) { - html = (new String(s.src)).replace(".js", ".html"); - } - } - reloader_content.innerHTML = ''; - document.body.appendChild(reloader_content); - reloader_content.style.position = 'absolute'; - reloader_content.style.left = reloader_content.style.top = '-9999px'; - iframe = reloader_content.getElementsByTagName('iframe')[0]; - - if (document.getElementById("safari_remember_field").value != "" ) { - historyHash = document.getElementById("safari_remember_field").value.split(","); - } - } - - if (browserHasHashChange) - document.body.onhashchange = hashChangeHandler; - } - - return { - historyHash: historyHash, - backStack: function() { return backStack; }, - forwardStack: function() { return forwardStack }, - getPlayer: getPlayer, - initialize: function(src) { - _initialize(src); - }, - setURL: function(url) { - document.location.href = url; - }, - getURL: function() { - return document.location.href; - }, - getTitle: function() { - return document.title; - }, - setTitle: function(title) { - try { - backStack[backStack.length - 1].title = title; - } catch(e) { } - //if on safari, set the title to be the empty string. - if (browser.safari) { - if (title == "") { - try { - var tmp = window.location.href.toString(); - title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#")); - } catch(e) { - title = ""; - } - } - } - document.title = title; - }, - setDefaultURL: function(def) - { - defaultHash = def; - def = getHash(); - //trailing ? is important else an extra frame gets added to the history - //when navigating back to the first page. Alternatively could check - //in history frame navigation to compare # and ?. - if (browser.ie) - { - window['_ie_firstload'] = true; - var sourceToSet = historyFrameSourcePrefix + def; - var func = function() { - getHistoryFrame().src = sourceToSet; - window.location.replace("#" + def); - setInterval(checkForUrlChange, 50); - } - try { - func(); - } catch(e) { - window.setTimeout(function() { func(); }, 0); - } - } - - if (browser.safari) - { - currentHistoryLength = history.length; - if (historyHash.length == 0) { - historyHash[currentHistoryLength] = def; - var newloc = "#" + def; - window.location.replace(newloc); - } else { - //alert(historyHash[historyHash.length-1]); - } - setInterval(checkForUrlChange, 50); - } - - - if (browser.firefox || browser.opera) - { - var reg = new RegExp("#" + def + "$"); - if (window.location.toString().match(reg)) { - } else { - var newloc ="#" + def; - window.location.replace(newloc); - } - setInterval(checkForUrlChange, 50); - } - - }, - - /* Set the current browser URL; called from inside BrowserManager to propagate - * the application state out to the container. - */ - setBrowserURL: function(flexAppUrl, objectId) { - if (browser.ie && typeof objectId != "undefined") { - currentObjectId = objectId; - } - //fromIframe = fromIframe || false; - //fromFlex = fromFlex || false; - //alert("setBrowserURL: " + flexAppUrl); - //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ; - - var pos = document.location.href.indexOf('#'); - var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href; - var newUrl = baseUrl + '#' + flexAppUrl; - - if (document.location.href != newUrl && document.location.href + '#' != newUrl) { - currentHref = newUrl; - addHistoryEntry(baseUrl, newUrl, flexAppUrl); - currentHistoryLength = history.length; - } - }, - - browserURLChange: function(flexAppUrl) { - var objectId = null; - if (browser.ie && currentObjectId != null) { - objectId = currentObjectId; - } - - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - try { - pl[i].browserURLChange(flexAppUrl); - } catch(e) { } - } - } else { - try { - getPlayer(objectId).browserURLChange(flexAppUrl); - } catch(e) { } - } - - currentObjectId = null; - }, - getUserAgent: function() { - return navigator.userAgent; - }, - getPlatform: function() { - return navigator.platform; - } - - } - -})(); - -// Initialization - -// Automated unit testing and other diagnostics - -function setURL(url) -{ - document.location.href = url; -} - -function backButton() -{ - history.back(); -} - -function forwardButton() -{ - history.forward(); -} - -function goForwardOrBackInHistory(step) -{ - history.go(step); -} - -//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); }); -(function(i) { - var u =navigator.userAgent;var e=/*@cc_on!@*/false; - var st = setTimeout; - if(/webkit/i.test(u)){ - st(function(){ - var dr=document.readyState; - if(dr=="loaded"||dr=="complete"){i()} - else{st(arguments.callee,10);}},10); - } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){ - document.addEventListener("DOMContentLoaded",i,false); - } else if(e){ - (function(){ - var t=document.createElement('doc:rdy'); - try{t.doScroll('left'); - i();t=null; - }catch(e){st(arguments.callee,0);}})(); - } else{ - window.onload=i; - } -})( function() {BrowserHistory.initialize();} ); diff --git a/spine-as3/spine-as3/html-template/history/historyFrame.html b/spine-as3/spine-as3/html-template/history/historyFrame.html deleted file mode 100644 index 07e3806f0..000000000 --- a/spine-as3/spine-as3/html-template/history/historyFrame.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - Hidden frame for Browser History support. - - diff --git a/spine-as3/spine-as3/html-template/index.template.html b/spine-as3/spine-as3/html-template/index.template.html deleted file mode 100644 index d327daded..000000000 --- a/spine-as3/spine-as3/html-template/index.template.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - ${title} - - - - - - - - - - - - - -
-

- To view this page ensure that Adobe Flash Player version - ${version_major}.${version_minor}.${version_revision} or greater is installed. -

- -
- - - - diff --git a/spine-as3/spine-as3/html-template/playerProductInstall.swf b/spine-as3/spine-as3/html-template/playerProductInstall.swf deleted file mode 100644 index bdc3437856cb0ae54bb9423700ba6ec89f35282c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 zcmV;C0&e|7S5pT30{{ScoOM%8YZE~jel|&yP13aKhpyI8)Pu*a7cZru!IYFhQ!%kE z;zt>GCuViByG~|XgJ(bJp~q+`f){V4c=Tk!n-K9Tcv0|Qh}4-)Z5q%$%)ak4^FGh} zG4mKh>p=QFFsz{%nRVYDpaejJ54{eo7BqCbU1T$6A?_UfdU|tzr7->Edg5~QJ`!s!OO;20fpVHsv=YsdQ{lvI<6(v2yrdS7`6LQi8#uy`}SX?Ni6O)r6`%Pye4YxmY_|vs1r$ zYS62JJit*Qq5)1^TgC)o6KZQEG=%VHP4mC>rXSoh>x{G-y~501s42xbb%oj5teYed zUazfuM*8z%%PQW6Lm}m@hf8V%w#-l*H+45VumzOSNh6MI zfwTnD68J}cRU>5EordGe5i?c`=PYmF$$^*q^20~+G3o1>u%sdEL~sE;XrvE~96_TY z1oQ%v(6hbD$HElG!xl|cjZOyoWIw@E;qK|`oT|Xk&*+o6#W@8T{oeJ8I9m-_V~Lc) rrowHdr=QEu;UGRC%}bhmYZ>GFiMOQQ+m?EJQA~aL;e`Gll9T{P!97I~ diff --git a/spine-as3/spine-as3/html-template/swfobject.js b/spine-as3/spine-as3/html-template/swfobject.js deleted file mode 100644 index bf35c07c8..000000000 --- a/spine-as3/spine-as3/html-template/swfobject.js +++ /dev/null @@ -1,777 +0,0 @@ -/*! SWFObject v2.2 - is released under the MIT License -*/ - -var swfobject = function() { - - var UNDEF = "undefined", - OBJECT = "object", - SHOCKWAVE_FLASH = "Shockwave Flash", - SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", - FLASH_MIME_TYPE = "application/x-shockwave-flash", - EXPRESS_INSTALL_ID = "SWFObjectExprInst", - ON_READY_STATE_CHANGE = "onreadystatechange", - - win = window, - doc = document, - nav = navigator, - - plugin = false, - domLoadFnArr = [main], - regObjArr = [], - objIdArr = [], - listenersArr = [], - storedAltContent, - storedAltContentId, - storedCallbackFn, - storedCallbackObj, - isDomLoaded = false, - isExpressInstallActive = false, - dynamicStylesheet, - dynamicStylesheetMedia, - autoHideShow = true, - - /* Centralized function for browser feature detection - - User agent string detection is only used when no good alternative is possible - - Is executed directly for optimal performance - */ - ua = function() { - var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF, - u = nav.userAgent.toLowerCase(), - p = nav.platform.toLowerCase(), - windows = p ? /win/.test(p) : /win/.test(u), - mac = p ? /mac/.test(p) : /mac/.test(u), - webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit - ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html - playerVersion = [0,0,0], - d = null; - if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) { - d = nav.plugins[SHOCKWAVE_FLASH].description; - if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+ - plugin = true; - ie = false; // cascaded feature detection for Internet Explorer - d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); - playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10); - playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10); - playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0; - } - } - else if (typeof win.ActiveXObject != UNDEF) { - try { - var a = new ActiveXObject(SHOCKWAVE_FLASH_AX); - if (a) { // a will return null when ActiveX is disabled - d = a.GetVariable("$version"); - if (d) { - ie = true; // cascaded feature detection for Internet Explorer - d = d.split(" ")[1].split(","); - playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; - } - } - } - catch(e) {} - } - return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac }; - }(), - - /* Cross-browser onDomLoad - - Will fire an event as soon as the DOM of a web page is loaded - - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/ - - Regular onload serves as fallback - */ - onDomLoad = function() { - if (!ua.w3) { return; } - if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically - callDomLoadFunctions(); - } - if (!isDomLoaded) { - if (typeof doc.addEventListener != UNDEF) { - doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false); - } - if (ua.ie && ua.win) { - doc.attachEvent(ON_READY_STATE_CHANGE, function() { - if (doc.readyState == "complete") { - doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee); - callDomLoadFunctions(); - } - }); - if (win == top) { // if not inside an iframe - (function(){ - if (isDomLoaded) { return; } - try { - doc.documentElement.doScroll("left"); - } - catch(e) { - setTimeout(arguments.callee, 0); - return; - } - callDomLoadFunctions(); - })(); - } - } - if (ua.wk) { - (function(){ - if (isDomLoaded) { return; } - if (!/loaded|complete/.test(doc.readyState)) { - setTimeout(arguments.callee, 0); - return; - } - callDomLoadFunctions(); - })(); - } - addLoadEvent(callDomLoadFunctions); - } - }(); - - function callDomLoadFunctions() { - if (isDomLoaded) { return; } - try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early - var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span")); - t.parentNode.removeChild(t); - } - catch (e) { return; } - isDomLoaded = true; - var dl = domLoadFnArr.length; - for (var i = 0; i < dl; i++) { - domLoadFnArr[i](); - } - } - - function addDomLoadEvent(fn) { - if (isDomLoaded) { - fn(); - } - else { - domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+ - } - } - - /* Cross-browser onload - - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/ - - Will fire an event as soon as a web page including all of its assets are loaded - */ - function addLoadEvent(fn) { - if (typeof win.addEventListener != UNDEF) { - win.addEventListener("load", fn, false); - } - else if (typeof doc.addEventListener != UNDEF) { - doc.addEventListener("load", fn, false); - } - else if (typeof win.attachEvent != UNDEF) { - addListener(win, "onload", fn); - } - else if (typeof win.onload == "function") { - var fnOld = win.onload; - win.onload = function() { - fnOld(); - fn(); - }; - } - else { - win.onload = fn; - } - } - - /* Main function - - Will preferably execute onDomLoad, otherwise onload (as a fallback) - */ - function main() { - if (plugin) { - testPlayerVersion(); - } - else { - matchVersions(); - } - } - - /* Detect the Flash Player version for non-Internet Explorer browsers - - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description: - a. Both release and build numbers can be detected - b. Avoid wrong descriptions by corrupt installers provided by Adobe - c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports - - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available - */ - function testPlayerVersion() { - var b = doc.getElementsByTagName("body")[0]; - var o = createElement(OBJECT); - o.setAttribute("type", FLASH_MIME_TYPE); - var t = b.appendChild(o); - if (t) { - var counter = 0; - (function(){ - if (typeof t.GetVariable != UNDEF) { - var d = t.GetVariable("$version"); - if (d) { - d = d.split(" ")[1].split(","); - ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; - } - } - else if (counter < 10) { - counter++; - setTimeout(arguments.callee, 10); - return; - } - b.removeChild(o); - t = null; - matchVersions(); - })(); - } - else { - matchVersions(); - } - } - - /* Perform Flash Player and SWF version matching; static publishing only - */ - function matchVersions() { - var rl = regObjArr.length; - if (rl > 0) { - for (var i = 0; i < rl; i++) { // for each registered object element - var id = regObjArr[i].id; - var cb = regObjArr[i].callbackFn; - var cbObj = {success:false, id:id}; - if (ua.pv[0] > 0) { - var obj = getElementById(id); - if (obj) { - if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match! - setVisibility(id, true); - if (cb) { - cbObj.success = true; - cbObj.ref = getObjectById(id); - cb(cbObj); - } - } - else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported - var att = {}; - att.data = regObjArr[i].expressInstall; - att.width = obj.getAttribute("width") || "0"; - att.height = obj.getAttribute("height") || "0"; - if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); } - if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); } - // parse HTML object param element's name-value pairs - var par = {}; - var p = obj.getElementsByTagName("param"); - var pl = p.length; - for (var j = 0; j < pl; j++) { - if (p[j].getAttribute("name").toLowerCase() != "movie") { - par[p[j].getAttribute("name")] = p[j].getAttribute("value"); - } - } - showExpressInstall(att, par, id, cb); - } - else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF - displayAltContent(obj); - if (cb) { cb(cbObj); } - } - } - } - else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content) - setVisibility(id, true); - if (cb) { - var o = getObjectById(id); // test whether there is an HTML object element or not - if (o && typeof o.SetVariable != UNDEF) { - cbObj.success = true; - cbObj.ref = o; - } - cb(cbObj); - } - } - } - } - } - - function getObjectById(objectIdStr) { - var r = null; - var o = getElementById(objectIdStr); - if (o && o.nodeName == "OBJECT") { - if (typeof o.SetVariable != UNDEF) { - r = o; - } - else { - var n = o.getElementsByTagName(OBJECT)[0]; - if (n) { - r = n; - } - } - } - return r; - } - - /* Requirements for Adobe Express Install - - only one instance can be active at a time - - fp 6.0.65 or higher - - Win/Mac OS only - - no Webkit engines older than version 312 - */ - function canExpressInstall() { - return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312); - } - - /* Show the Adobe Express Install dialog - - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 - */ - function showExpressInstall(att, par, replaceElemIdStr, callbackFn) { - isExpressInstallActive = true; - storedCallbackFn = callbackFn || null; - storedCallbackObj = {success:false, id:replaceElemIdStr}; - var obj = getElementById(replaceElemIdStr); - if (obj) { - if (obj.nodeName == "OBJECT") { // static publishing - storedAltContent = abstractAltContent(obj); - storedAltContentId = null; - } - else { // dynamic publishing - storedAltContent = obj; - storedAltContentId = replaceElemIdStr; - } - att.id = EXPRESS_INSTALL_ID; - if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; } - if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; } - doc.title = doc.title.slice(0, 47) + " - Flash Player Installation"; - var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn", - fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title; - if (typeof par.flashvars != UNDEF) { - par.flashvars += "&" + fv; - } - else { - par.flashvars = fv; - } - // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work - if (ua.ie && ua.win && obj.readyState != 4) { - var newObj = createElement("div"); - replaceElemIdStr += "SWFObjectNew"; - newObj.setAttribute("id", replaceElemIdStr); - obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - obj.parentNode.removeChild(obj); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - createSWF(att, par, replaceElemIdStr); - } - } - - /* Functions to abstract and display alternative content - */ - function displayAltContent(obj) { - if (ua.ie && ua.win && obj.readyState != 4) { - // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work - var el = createElement("div"); - obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content - el.parentNode.replaceChild(abstractAltContent(obj), el); - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - obj.parentNode.removeChild(obj); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - else { - obj.parentNode.replaceChild(abstractAltContent(obj), obj); - } - } - - function abstractAltContent(obj) { - var ac = createElement("div"); - if (ua.win && ua.ie) { - ac.innerHTML = obj.innerHTML; - } - else { - var nestedObj = obj.getElementsByTagName(OBJECT)[0]; - if (nestedObj) { - var c = nestedObj.childNodes; - if (c) { - var cl = c.length; - for (var i = 0; i < cl; i++) { - if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) { - ac.appendChild(c[i].cloneNode(true)); - } - } - } - } - } - return ac; - } - - /* Cross-browser dynamic SWF creation - */ - function createSWF(attObj, parObj, id) { - var r, el = getElementById(id); - if (ua.wk && ua.wk < 312) { return r; } - if (el) { - if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content - attObj.id = id; - } - if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML - var att = ""; - for (var i in attObj) { - if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries - if (i.toLowerCase() == "data") { - parObj.movie = attObj[i]; - } - else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword - att += ' class="' + attObj[i] + '"'; - } - else if (i.toLowerCase() != "classid") { - att += ' ' + i + '="' + attObj[i] + '"'; - } - } - } - var par = ""; - for (var j in parObj) { - if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries - par += ''; - } - } - el.outerHTML = '' + par + ''; - objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only) - r = getElementById(attObj.id); - } - else { // well-behaving browsers - var o = createElement(OBJECT); - o.setAttribute("type", FLASH_MIME_TYPE); - for (var m in attObj) { - if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries - if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword - o.setAttribute("class", attObj[m]); - } - else if (m.toLowerCase() != "classid") { // filter out IE specific attribute - o.setAttribute(m, attObj[m]); - } - } - } - for (var n in parObj) { - if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element - createObjParam(o, n, parObj[n]); - } - } - el.parentNode.replaceChild(o, el); - r = o; - } - } - return r; - } - - function createObjParam(el, pName, pValue) { - var p = createElement("param"); - p.setAttribute("name", pName); - p.setAttribute("value", pValue); - el.appendChild(p); - } - - /* Cross-browser SWF removal - - Especially needed to safely and completely remove a SWF in Internet Explorer - */ - function removeSWF(id) { - var obj = getElementById(id); - if (obj && obj.nodeName == "OBJECT") { - if (ua.ie && ua.win) { - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - removeObjectInIE(id); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - else { - obj.parentNode.removeChild(obj); - } - } - } - - function removeObjectInIE(id) { - var obj = getElementById(id); - if (obj) { - for (var i in obj) { - if (typeof obj[i] == "function") { - obj[i] = null; - } - } - obj.parentNode.removeChild(obj); - } - } - - /* Functions to optimize JavaScript compression - */ - function getElementById(id) { - var el = null; - try { - el = doc.getElementById(id); - } - catch (e) {} - return el; - } - - function createElement(el) { - return doc.createElement(el); - } - - /* Updated attachEvent function for Internet Explorer - - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks - */ - function addListener(target, eventType, fn) { - target.attachEvent(eventType, fn); - listenersArr[listenersArr.length] = [target, eventType, fn]; - } - - /* Flash Player and SWF content version matching - */ - function hasPlayerVersion(rv) { - var pv = ua.pv, v = rv.split("."); - v[0] = parseInt(v[0], 10); - v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0" - v[2] = parseInt(v[2], 10) || 0; - return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; - } - - /* Cross-browser dynamic CSS creation - - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php - */ - function createCSS(sel, decl, media, newStyle) { - if (ua.ie && ua.mac) { return; } - var h = doc.getElementsByTagName("head")[0]; - if (!h) { return; } // to also support badly authored HTML pages that lack a head element - var m = (media && typeof media == "string") ? media : "screen"; - if (newStyle) { - dynamicStylesheet = null; - dynamicStylesheetMedia = null; - } - if (!dynamicStylesheet || dynamicStylesheetMedia != m) { - // create dynamic stylesheet + get a global reference to it - var s = createElement("style"); - s.setAttribute("type", "text/css"); - s.setAttribute("media", m); - dynamicStylesheet = h.appendChild(s); - if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) { - dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]; - } - dynamicStylesheetMedia = m; - } - // add style rule - if (ua.ie && ua.win) { - if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) { - dynamicStylesheet.addRule(sel, decl); - } - } - else { - if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) { - dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}")); - } - } - } - - function setVisibility(id, isVisible) { - if (!autoHideShow) { return; } - var v = isVisible ? "visible" : "hidden"; - if (isDomLoaded && getElementById(id)) { - getElementById(id).style.visibility = v; - } - else { - createCSS("#" + id, "visibility:" + v); - } - } - - /* Filter to avoid XSS attacks - */ - function urlEncodeIfNecessary(s) { - var regex = /[\\\"<>\.;]/; - var hasBadChars = regex.exec(s) != null; - return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s; - } - - /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only) - */ - var cleanup = function() { - if (ua.ie && ua.win) { - window.attachEvent("onunload", function() { - // remove listeners to avoid memory leaks - var ll = listenersArr.length; - for (var i = 0; i < ll; i++) { - listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]); - } - // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect - var il = objIdArr.length; - for (var j = 0; j < il; j++) { - removeSWF(objIdArr[j]); - } - // cleanup library's main closures to avoid memory leaks - for (var k in ua) { - ua[k] = null; - } - ua = null; - for (var l in swfobject) { - swfobject[l] = null; - } - swfobject = null; - }); - } - }(); - - return { - /* Public API - - Reference: http://code.google.com/p/swfobject/wiki/documentation - */ - registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) { - if (ua.w3 && objectIdStr && swfVersionStr) { - var regObj = {}; - regObj.id = objectIdStr; - regObj.swfVersion = swfVersionStr; - regObj.expressInstall = xiSwfUrlStr; - regObj.callbackFn = callbackFn; - regObjArr[regObjArr.length] = regObj; - setVisibility(objectIdStr, false); - } - else if (callbackFn) { - callbackFn({success:false, id:objectIdStr}); - } - }, - - getObjectById: function(objectIdStr) { - if (ua.w3) { - return getObjectById(objectIdStr); - } - }, - - embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) { - var callbackObj = {success:false, id:replaceElemIdStr}; - if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) { - setVisibility(replaceElemIdStr, false); - addDomLoadEvent(function() { - widthStr += ""; // auto-convert to string - heightStr += ""; - var att = {}; - if (attObj && typeof attObj === OBJECT) { - for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs - att[i] = attObj[i]; - } - } - att.data = swfUrlStr; - att.width = widthStr; - att.height = heightStr; - var par = {}; - if (parObj && typeof parObj === OBJECT) { - for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs - par[j] = parObj[j]; - } - } - if (flashvarsObj && typeof flashvarsObj === OBJECT) { - for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs - if (typeof par.flashvars != UNDEF) { - par.flashvars += "&" + k + "=" + flashvarsObj[k]; - } - else { - par.flashvars = k + "=" + flashvarsObj[k]; - } - } - } - if (hasPlayerVersion(swfVersionStr)) { // create SWF - var obj = createSWF(att, par, replaceElemIdStr); - if (att.id == replaceElemIdStr) { - setVisibility(replaceElemIdStr, true); - } - callbackObj.success = true; - callbackObj.ref = obj; - } - else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install - att.data = xiSwfUrlStr; - showExpressInstall(att, par, replaceElemIdStr, callbackFn); - return; - } - else { // show alternative content - setVisibility(replaceElemIdStr, true); - } - if (callbackFn) { callbackFn(callbackObj); } - }); - } - else if (callbackFn) { callbackFn(callbackObj); } - }, - - switchOffAutoHideShow: function() { - autoHideShow = false; - }, - - ua: ua, - - getFlashPlayerVersion: function() { - return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] }; - }, - - hasFlashPlayerVersion: hasPlayerVersion, - - createSWF: function(attObj, parObj, replaceElemIdStr) { - if (ua.w3) { - return createSWF(attObj, parObj, replaceElemIdStr); - } - else { - return undefined; - } - }, - - showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) { - if (ua.w3 && canExpressInstall()) { - showExpressInstall(att, par, replaceElemIdStr, callbackFn); - } - }, - - removeSWF: function(objElemIdStr) { - if (ua.w3) { - removeSWF(objElemIdStr); - } - }, - - createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) { - if (ua.w3) { - createCSS(selStr, declStr, mediaStr, newStyleBoolean); - } - }, - - addDomLoadEvent: addDomLoadEvent, - - addLoadEvent: addLoadEvent, - - getQueryParamValue: function(param) { - var q = doc.location.search || doc.location.hash; - if (q) { - if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark - if (param == null) { - return urlEncodeIfNecessary(q); - } - var pairs = q.split("&"); - for (var i = 0; i < pairs.length; i++) { - if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { - return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1))); - } - } - } - return ""; - }, - - // For internal usage only - expressInstallCallback: function() { - if (isExpressInstallActive) { - var obj = getElementById(EXPRESS_INSTALL_ID); - if (obj && storedAltContent) { - obj.parentNode.replaceChild(storedAltContent, obj); - if (storedAltContentId) { - setVisibility(storedAltContentId, true); - if (ua.ie && ua.win) { storedAltContent.style.display = "block"; } - } - if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); } - } - isExpressInstallActive = false; - } - } - }; -}(); diff --git a/spine-as3/spine-as3/src/spine/Bone.as b/spine-as3/spine-as3/src/spine/Bone.as index de948a1c9..ce8eed0af 100644 --- a/spine-as3/spine-as3/src/spine/Bone.as +++ b/spine-as3/spine-as3/src/spine/Bone.as @@ -41,7 +41,7 @@ public class Bone { public var y:Number; public var rotation:Number; public var rotationIK:Number; - public var scaleX:Number + public var scaleX:Number; public var scaleY:Number; public var flipX:Boolean; public var flipY:Boolean; diff --git a/spine-as3/spine-as3/src/spine/Skeleton.as b/spine-as3/spine-as3/src/spine/Skeleton.as index 94272c982..be7cef806 100644 --- a/spine-as3/spine-as3/src/spine/Skeleton.as +++ b/spine-as3/spine-as3/src/spine/Skeleton.as @@ -65,7 +65,7 @@ public class Skeleton { drawOrder[drawOrder.length] = slot; } - ikConstraints = new Vector.() + ikConstraints = new Vector.(); for each (var ikConstraintData:IkConstraintData in data.ikConstraints) ikConstraints[ikConstraints.length] = new IkConstraint(ikConstraintData, this); diff --git a/spine-as3/spine-as3/src/spine/SkeletonBounds.as b/spine-as3/spine-as3/src/spine/SkeletonBounds.as index f06d33ea4..91a964188 100644 --- a/spine-as3/spine-as3/src/spine/SkeletonBounds.as +++ b/spine-as3/spine-as3/src/spine/SkeletonBounds.as @@ -30,7 +30,6 @@ *****************************************************************************/ package spine { -import spine.attachments.Attachment; import spine.attachments.BoundingBoxAttachment; public class SkeletonBounds { diff --git a/spine-as3/spine-as3/src/spine/SkeletonJson.as b/spine-as3/spine-as3/src/spine/SkeletonJson.as index d26a0fd72..7b5c63a48 100644 --- a/spine-as3/spine-as3/src/spine/SkeletonJson.as +++ b/spine-as3/spine-as3/src/spine/SkeletonJson.as @@ -70,7 +70,7 @@ public class SkeletonJson { if (object is String) root = JSON.parse(String(object)); else if (object is ByteArray) - root = JSON.parse(object.readUTFBytes(object.length)); + root = JSON.parse(ByteArray(object).readUTFBytes(ByteArray(object).length)); else if (object is Object) root = object; else @@ -98,9 +98,9 @@ public class SkeletonJson { if (!parent) throw new Error("Parent bone not found: " + parentName); } boneData = new BoneData(boneMap["name"], parent); - boneData.length = (boneMap["length"] || 0) * scale; - boneData.x = (boneMap["x"] || 0) * scale; - boneData.y = (boneMap["y"] || 0) * scale; + boneData.length = Number(boneMap["length"] || 0) * scale; + boneData.x = Number(boneMap["x"] || 0) * scale; + boneData.y = Number(boneMap["y"] || 0) * scale; boneData.rotation = (boneMap["rotation"] || 0); boneData.scaleX = boneMap.hasOwnProperty("scaleX") ? boneMap["scaleX"] : 1; boneData.scaleY = boneMap.hasOwnProperty("scaleY") ? boneMap["scaleY"] : 1; @@ -204,13 +204,13 @@ public class SkeletonJson { var region:RegionAttachment = attachmentLoader.newRegionAttachment(skin, name, path); if (!region) return null; region.path = path; - region.x = (map["x"] || 0) * scale; - region.y = (map["y"] || 0) * scale; + region.x = Number(map["x"] || 0) * scale; + region.y = Number(map["y"] || 0) * scale; region.scaleX = map.hasOwnProperty("scaleX") ? map["scaleX"] : 1; region.scaleY = map.hasOwnProperty("scaleY") ? map["scaleY"] : 1; region.rotation = map["rotation"] || 0; - region.width = (map["width"] || 0) * scale; - region.height = (map["height"] || 0) * scale; + region.width = Number(map["width"] || 0) * scale; + region.height = Number(map["height"] || 0) * scale; color = map["color"]; if (color) { @@ -240,15 +240,15 @@ public class SkeletonJson { mesh.a = toColor(color, 3); } - mesh.hullLength = (map["hull"] || 0) * 2; + mesh.hullLength = int(map["hull"] || 0) * 2; if (map["edges"]) mesh.edges = getIntArray(map, "edges"); - mesh.width = (map["width"] || 0) * scale; - mesh.height = (map["height"] || 0) * scale; + mesh.width = Number(map["width"] || 0) * scale; + mesh.height = Number(map["height"] || 0) * scale; return mesh; case AttachmentType.skinnedmesh: - var skinnedMesh:SkinnedMeshAttachment = attachmentLoader.newSkinnedMeshAttachment(skin, name, path); - if (!skinnedMesh) return null; - skinnedMesh.path = path; + var weightedMesh:SkinnedMeshAttachment = attachmentLoader.newSkinnedMeshAttachment(skin, name, path); + if (!weightedMesh) return null; + weightedMesh.path = path; var uvs:Vector. = getFloatArray(map, "uvs", 1); vertices = getFloatArray(map, "vertices", 1); @@ -265,25 +265,25 @@ public class SkeletonJson { i += 4; } } - skinnedMesh.bones = bones; - skinnedMesh.weights = weights; - skinnedMesh.triangles = getUintArray(map, "triangles"); - skinnedMesh.regionUVs = uvs; - skinnedMesh.updateUVs(); + weightedMesh.bones = bones; + weightedMesh.weights = weights; + weightedMesh.triangles = getUintArray(map, "triangles"); + weightedMesh.regionUVs = uvs; + weightedMesh.updateUVs(); color = map["color"]; if (color) { - skinnedMesh.r = toColor(color, 0); - skinnedMesh.g = toColor(color, 1); - skinnedMesh.b = toColor(color, 2); - skinnedMesh.a = toColor(color, 3); + weightedMesh.r = toColor(color, 0); + weightedMesh.g = toColor(color, 1); + weightedMesh.b = toColor(color, 2); + weightedMesh.a = toColor(color, 3); } - skinnedMesh.hullLength = (map["hull"] || 0) * 2; - if (map["edges"]) skinnedMesh.edges = getIntArray(map, "edges"); - skinnedMesh.width = (map["width"] || 0) * scale; - skinnedMesh.height = (map["height"] || 0) * scale; - return skinnedMesh; + weightedMesh.hullLength = int(map["hull"] || 0) * 2; + if (map["edges"]) weightedMesh.edges = getIntArray(map, "edges"); + weightedMesh.width = Number(map["width"] || 0) * scale; + weightedMesh.height = Number(map["height"] || 0) * scale; + return weightedMesh; case AttachmentType.boundingbox: var box:BoundingBoxAttachment = attachmentLoader.newBoundingBoxAttachment(skin, name); vertices = box.vertices; @@ -378,8 +378,8 @@ public class SkeletonJson { frameIndex = 0; for each (valueMap in values) { - var x:Number = (valueMap["x"] || 0) * timelineScale; - var y:Number = (valueMap["y"] || 0) * timelineScale; + var x:Number = Number(valueMap["x"] || 0) * timelineScale; + var y:Number = Number(valueMap["y"] || 0) * timelineScale; timeline.setFrame(frameIndex, valueMap["time"], x, y); readCurve(timeline, frameIndex, valueMap); frameIndex++; @@ -482,7 +482,7 @@ public class SkeletonJson { } } - var drawOrderValues:Object = map["drawOrder"]; + var drawOrderValues:Array = map["drawOrder"]; if (!drawOrderValues) drawOrderValues = map["draworder"]; if (drawOrderValues) { var drawOrderTimeline:DrawOrderTimeline = new DrawOrderTimeline(drawOrderValues.length); @@ -494,7 +494,7 @@ public class SkeletonJson { drawOrder = new Vector.(slotCount); for (i = slotCount - 1; i >= 0; i--) drawOrder[i] = -1; - var offsets:Object = drawOrderMap["offsets"]; + var offsets:Array = drawOrderMap["offsets"]; var unchanged:Vector. = new Vector.(slotCount - offsets.length); var originalIndex:int = 0, unchangedIndex:int = 0; for each (var offsetMap:Object in offsets) { @@ -519,7 +519,7 @@ public class SkeletonJson { duration = Math.max(duration, drawOrderTimeline.frames[drawOrderTimeline.frameCount - 1]); } - var eventsMap:Object = map["events"]; + var eventsMap:Array = map["events"]; if (eventsMap) { var eventTimeline:EventTimeline = new EventTimeline(eventsMap.length); frameIndex = 0; diff --git a/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as b/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as index 84539f0ce..d234d2ef8 100644 --- a/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as @@ -44,7 +44,7 @@ public class CurveTimeline implements Timeline { private var curves:Vector.; // type, x, y, ... public function CurveTimeline (frameCount:int) { - curves = new Vector.((frameCount - 1) * BEZIER_SIZE, true) + curves = new Vector.((frameCount - 1) * BEZIER_SIZE, true); } public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { diff --git a/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as b/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as index ef8b82723..5f3fa7305 100644 --- a/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as @@ -68,11 +68,11 @@ public class DrawOrderTimeline implements Timeline { var drawOrderToSetupIndex:Vector. = drawOrders[frameIndex]; var i:int = 0; if (!drawOrderToSetupIndex) { - for each (var slot:Slot in skeleton.slots) + for each (var slot:Slot in slots) drawOrder[i++] = slot; } else { for each (var setupIndex:int in drawOrderToSetupIndex) - drawOrder[i++] = skeleton.slots[setupIndex]; + drawOrder[i++] = slots[setupIndex]; } } } diff --git a/spine-as3/spine-as3/src/spine/animation/EventTimeline.as b/spine-as3/spine-as3/src/spine/animation/EventTimeline.as index 3c5c8bfb3..d515933a8 100644 --- a/spine-as3/spine-as3/src/spine/animation/EventTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/EventTimeline.as @@ -32,7 +32,6 @@ package spine.animation { import spine.Event; import spine.Skeleton; -import spine.Slot; public class EventTimeline implements Timeline { public var frames:Vector.; // time, ... @@ -40,7 +39,7 @@ public class EventTimeline implements Timeline { public function EventTimeline (frameCount:int) { frames = new Vector.(frameCount, true); - events = new Vector.(frameCount, true) + events = new Vector.(frameCount, true); } public function get frameCount () : int { diff --git a/spine-as3/spine-as3/src/spine/animation/TrackEntry.as b/spine-as3/spine-as3/src/spine/animation/TrackEntry.as index 795671dc3..4eecb3dc5 100644 --- a/spine-as3/spine-as3/src/spine/animation/TrackEntry.as +++ b/spine-as3/spine-as3/src/spine/animation/TrackEntry.as @@ -30,8 +30,6 @@ *****************************************************************************/ package spine.animation { -import spine.Event; -import spine.Skeleton; public class TrackEntry { public var next:TrackEntry; diff --git a/spine-as3/spine-as3/src/spine/atlas/Atlas.as b/spine-as3/spine-as3/src/spine/atlas/Atlas.as index 13e3658ad..0797c783e 100644 --- a/spine-as3/spine-as3/src/spine/atlas/Atlas.as +++ b/spine-as3/spine-as3/src/spine/atlas/Atlas.as @@ -44,7 +44,7 @@ public class Atlas { if (object is String) load(String(object), textureLoader); else if (object is ByteArray) - load(object.readUTFBytes(object.length), textureLoader); + load(ByteArray(object).readUTFBytes(ByteArray(object).length), textureLoader); else throw new ArgumentError("object must be a TextureAtlas or AttachmentLoader."); } diff --git a/spine-as3/spine-as3/src/spine/flash/SkeletonSprite.as b/spine-as3/spine-as3/src/spine/flash/SkeletonSprite.as index e508fba35..6c141dac9 100644 --- a/spine-as3/spine-as3/src/spine/flash/SkeletonSprite.as +++ b/spine-as3/spine-as3/src/spine/flash/SkeletonSprite.as @@ -33,12 +33,9 @@ package spine.flash { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; -import flash.display.DisplayObject; -import flash.display.DisplayObjectContainer; import flash.display.Sprite; import flash.events.Event; import flash.geom.ColorTransform; -import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; import flash.utils.getTimer; @@ -51,8 +48,6 @@ import spine.atlas.AtlasRegion; import spine.attachments.RegionAttachment; public class SkeletonSprite extends Sprite { - static private var tempPoint:Point = new Point(); - static private var tempMatrix:Matrix = new Matrix(); static private var blendModes:Vector. = new [ BlendMode.NORMAL, BlendMode.ADD, BlendMode.MULTIPLY, BlendMode.SCREEN];