Advertisement
starbeamrainbowlabs

Flash Resizer from gist.github.com

May 27th, 2014
331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //from https://gist.githubusercontent.com/axemclion/89202/raw/27baf59a408fac68e2ea82dbe162630618afbd93/FlashResize.js
  2. var FlashResizer = {
  3.     init: function() {
  4.         if (typeof(window["__FLASH_RESIZER__"]) === "undefined") {
  5.             window["__FLASH_RESIZER__"] = "started";
  6.             this.startResizer();
  7.             window.__resizeElements__ = [];
  8.         }
  9.         else
  10.             if (window["__FLASH_RESIZER__"] === "started") {
  11.                 window["__FLASH_RESIZER__"] = "suspended";
  12.                 for (var i = 0; i < window.__resizeElements__.length; i++) {
  13.                     window.__resizeElements__[i].destroy();
  14.                 }
  15.                 window.__resizeElements__ = [];
  16.             }
  17.             else
  18.                 if (window["__FLASH_RESIZER__"] === "suspended") {
  19.                     window["__FLASH_RESIZER__"] = "started";
  20.                     var elements = YAHOO.util.Dom.getElementsByClassName('move-handler');
  21.                     for (var i = 0; i < elements.length; i++) {
  22.                         var resize = new YAHOO.util.Resize(elements[i], {
  23.                             handles: 'all',
  24.                             knobHandles: true,
  25.                             proxy: false,
  26.                             draggable: true,
  27.                             animate: false,
  28.                         });
  29.                         window.__resizeElements__.push(resize);
  30.                     }
  31.                 }
  32.     },
  33.      
  34.     startResizer: function() {
  35.         var yuiScript = document.createElement("script");
  36.         yuiScript.setAttribute("src", "http://yui.yahooapis.com/combo?2.7.0/build/utilities/utilities.js&2.7.0/build/button/button-min.js&2.7.0/build/json/json-min.js&2.7.0/build/logger/logger-min.js&2.7.0/build/resize/resize-min.js&2.7.0/build/stylesheet/stylesheet-min.js");
  37.         yuiScript.setAttribute("type", "text/javascript")
  38.         document.body.appendChild(yuiScript);
  39.          
  40.         var curObj = this;
  41.         var loader = document.createElement("div");
  42.         loader.innerHTML = "Loading";
  43.         loader.className = ".loader";
  44.         document.body.appendChild(loader);
  45.          
  46.         var timerHandler = window.setInterval(function() {
  47.             if (typeof(YAHOO) !== "undefined") {
  48.                 window.clearInterval(timerHandler);
  49.                 //this.myLogReader = new YAHOO.widget.LogReader();
  50.                 YAHOO.widget.Logger.enableBrowserConsole()
  51.                 YAHOO.log("Starting Flash Resizer");
  52.                 curObj.setStyles();
  53.                 loader.parentNode.removeChild(loader);
  54.                 var flashElements = curObj.getFlashElements();
  55.                 for (var i = 0; i < flashElements.length; i++) {
  56.                     var handleDiv = curObj.createDivOnTop(flashElements[i]);
  57.                     handleDiv.className = "flash-hilite";
  58.                     curObj.addHandlers(handleDiv, flashElements[i]);
  59.                 }
  60.             }
  61.         }, 1000);
  62.     },
  63.      
  64.     /**
  65.      * Gets the list of all flash objects in the page.
  66.      * If the flash element is in the windowed mode, sets it to opaque mode
  67.      * so that the div elements can see it
  68.      */
  69.     getFlashElements: function() {
  70.      
  71.         var objectFlash = function() {
  72.             var result = [];
  73.             var embedTags = document.getElementsByTagName("object");
  74.             for (var i = 0; i < embedTags.length; i++) {
  75.                 var parameters = document.getElementsByTagName("param");
  76.                 var wmodeFound = false;
  77.                 var wmodeChanged = false;
  78.                 for (var j = 0; j < parameters.length; j++) {
  79.                     if (parameters[i].getAttribute("name") === "wmode") {
  80.                         if (parameters[i].getAttribute("value") === "window") {
  81.                             parameters[i].setValue("value", "opaque");
  82.                             wmodeFound = true;
  83.                             wmodeChanged = true
  84.                             break;
  85.                         }
  86.                     }
  87.                 }
  88.                 if (wmodeFound === false) {
  89.                     var wmodeParam = document.createElement("param");
  90.                     wmodeParam.setAttribute("name", "wmode");
  91.                     wmodeParam.setAttribute("value", "opaque");
  92.                     embedTags[i].appendChild(wmodeParam);
  93.                     wmodeChanged = true
  94.                 }
  95.                 if (wmodeChanged === true) {
  96.                     var newFlash = embedTags[i].cloneNode(true);
  97.                     embedTags[i].parentNode.replaceChild(newFlash, embedTags[i]);
  98.                     YAHOO.log("Changing wmode to transparent for " + embedTags[i])
  99.                      
  100.                 }
  101.                 result.push(embedTags[i]);
  102.             }
  103.             return result;
  104.              
  105.         }
  106.          
  107.         var embedFlash = function() {
  108.             var result = [];
  109.             var embedTags = document.getElementsByTagName("embed");
  110.             for (var i = 0; i < embedTags.length; i++) {
  111.                 if (embedTags[i].getAttribute("wmode") == null || embedTags[i].getAttribute("wmode") === "window") {
  112.                     var newFlash = embedTags[i].cloneNode(true);
  113.                     newFlash.setAttribute("wmode", "opaque");
  114.                     embedTags[i].parentNode.replaceChild(newFlash, embedTags[i]);
  115.                     YAHOO.log("Changing wmode to transparent for " + embedTags[i])
  116.                 }
  117.                 result.push(embedTags[i]);
  118.             }
  119.             return result;
  120.         }
  121.          
  122.         if (navigator.appName.indexOf("Internet Explorer") !== -1) {
  123.             return objectFlash();
  124.         }
  125.         else {
  126.             return embedFlash();
  127.         }
  128.          
  129.          
  130.     },
  131.      
  132.     setStyles: function() {
  133.         YAHOO.util.Get.css(["http://n.parashuram.googlepages.com/FlashResize.css", "http://yui.yahooapis.com/combo?2.7.0/build/assets/skins/sam/skin.css"]);
  134.     },
  135.      
  136.     createDivOnTop: function(element, parent) {
  137.         if (typeof(parent) === "undefined") {
  138.             parent = element.parentNode;
  139.         }
  140.         YAHOO.log("Creating Div on top of " + element);
  141.         YAHOO.log(element);
  142.         var handleDiv = document.createElement("div");
  143.         handleDiv.id = "handler-" + Math.random();
  144.         handleDiv.style.width = element.offsetWidth + "px";
  145.         handleDiv.style.height = element.offsetHeight + "px";
  146.         parent.appendChild(handleDiv);
  147.          
  148.         var top = element.offsetTop;
  149.         var left = element.offsetLeft;
  150.         var parentList = {};
  151.         var tempElem = parent;
  152.         while (tempElem != null) {
  153.             parentList[tempElem] = true;
  154.             tempElem = tempElem.parentNode;
  155.         }
  156.          
  157.         tempElem = element.offsetParent;
  158.         while (typeof(tempElem) !== "undefined" && tempElem !== null && !(tempElem in parentList)) {
  159.             top += tempElem.offsetTop;
  160.             left += tempElem.offsetLeft;
  161.             tempElem = tempElem.offsetParent;
  162.         }
  163.          
  164.         YAHOO.log(["Setting ", handleDiv.id, "(", top, ",", left, ")-(", element.offsetWidth, ",", element.offsetHeight, ")"].join(""));
  165.         YAHOO.log(handleDiv);
  166.         handleDiv.style.top = top + "px";
  167.         handleDiv.style.left = left + "px";
  168.          
  169.         return handleDiv;
  170.     },
  171.      
  172.     addHandlers: function(elem, flashElement) {
  173.         YAHOO.util.Event.addListener(elem, "mousemove", function(e, obj) {
  174.             obj.style.opacity = "0.7";
  175.         }, elem, this);
  176.          
  177.         YAHOO.util.Event.addListener(elem, "mouseout", function(e, obj) {
  178.             obj.style.opacity = "0.3";
  179.         }, elem, this);
  180.         YAHOO.util.Event.addListener(elem, "click", function(e, obj) {
  181.             this.augmentFlash(obj, flashElement);
  182.         }, elem, this);
  183.     },
  184.      
  185.     augmentFlash: function(handler, flashElem) {
  186.         var clonedFlash = flashElem.cloneNode(true);
  187.         YAHOO.util.Event.purgeElement(handler);
  188.         handler.className = ".flash-clicked";
  189.          
  190.         var moveHandler = this.createDivOnTop(flashElem, document.body);
  191.         moveHandler.className = "move-handler";
  192.         clonedFlash.setAttribute("width", "99%");
  193.         clonedFlash.setAttribute("height", "99%");
  194.         moveHandler.appendChild(clonedFlash);
  195.         flashElem.parentNode.removeChild(flashElem);
  196.          
  197.         var resize = new YAHOO.util.Resize(moveHandler, {
  198.             handles: 'all',
  199.             knobHandles: true,
  200.             proxy: false,
  201.             draggable: true,
  202.             animate: false,
  203.         });
  204.         window.__resizeElements__.push(resize);
  205.         moveHandler.style.position = "absolute";
  206.     }
  207. }
  208.  
  209. FlashResizer.init();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement