All pastes #159387 Raw Edit

Seek Bar

public javascript v1 · immutable
·published 2006-09-03 01:03 UTC
rendered paste body
/* Jesse Ruderman * July 18, 2004 * * Remaining problems: *   IE sometimes crashes on exit after using the this script. *   In IE, it is a little ugly because IE doesn't support border-radius. *   In IE, it does not work at standalone Flash URLs. * * Modified on September 3, 2006 by Phillip Bradbury to backport * changes from http://www.hrwiki.org/index.php/User:Phlip/Greasemonkey */(function () {setTimeout(initFlashControls, 100);function initFlashControls(){  var count = 0;  function tt(elem)  {    if (typeof elem.TotalFrames != "undefined") /* do not coerce elem.StopPlay to bool, because that breaks IE */    {      addFlashControls(elem);      ++count;    }  }  var i, x;  for (i = 0; x = document.getElementsByTagName("object")[i]; ++i)    tt(x);  for (i = 0; x = document.getElementsByTagName("embed")[i]; ++i)    tt(x);  if (!count) alert ("No scriptable flash on this page.");}function addFlashControls(flash){  var controlsDiv = document.createElement("div");  /* Put the controls under the Flash.    *   * If the Flash is an <embed> in an <object>, we do not want to touch the <object>, because that would make   * Mozilla re-test whether the <object> is broken and reset the <embed>.  So in that case, we put the controls   * under the <object>.   */  var where = flash;  while (where.parentNode.tagName.toLowerCase() == "object")    where = where.parentNode;  where.parentNode.insertBefore(controlsDiv, where.nextSibling);  /* Construct controls using DOM2 instead of innerHTML.   * In Mozilla, innerHTML= is like innerText= at standalone flash URLs.   */  var table = document.createElement("table");  controlsDiv.appendChild(table);    var row = table.insertRow(-1);    var pauseButton = document.createElement("button");  pauseButton.appendChild(document.createTextNode("Pause"));  var buttonCell = row.insertCell(-1);  buttonCell.appendChild(pauseButton);    var prevCell=row.insertCell(-1);  var prevButton=document.createElement("button");  prevButton.appendChild(document.createTextNode("|<"));  prevCell.appendChild(prevButton);  var slider = row.insertCell(-1);  slider.width = "100%";    var visibleSlider = document.createElement("div");  visibleSlider.style.position = "relative";  visibleSlider.style.height = "10px";  visibleSlider.style.width = "100%";  visibleSlider.style.MozBorderRadius = "4px";  visibleSlider.style.background = "#aaa";  slider.appendChild(visibleSlider);    var thumb = document.createElement("div");  thumb.style.position = "absolute";  thumb.style.height = "20px";  thumb.style.width = "10px";  thumb.style.top = "-5px";  thumb.style.MozBorderRadius = "4px";  thumb.style.background = "#666";  visibleSlider.appendChild(thumb);    var nextCell=row.insertCell(-1);  var nextButton=document.createElement("button");  nextButton.appendChild(document.createTextNode(">|"));  nextCell.appendChild(nextButton);  var frameCell=row.insertCell(-1);  var framecounter=document.createElement("div");  framecounter.style.background="#ccc";  framecounter.style.color="#000";  framecounter.style.fontWeight="bold";  frameCell.appendChild(framecounter);  var framecountertext=document.createTextNode("");  framecounter.appendChild(framecountertext);  var zoomOutCell=row.insertCell(-1);  var zoomOutButton=document.createElement("button");  // \u2212 is &minus;  zoomOutButton.appendChild(document.createTextNode("\u2212"));  zoomOutCell.appendChild(zoomOutButton);  var zoomNormalCell=row.insertCell(-1);  var zoomNormalButton=document.createElement("button");  zoomNormalButton.appendChild(document.createTextNode("0"));  zoomNormalCell.appendChild(zoomNormalButton);  var zoomInCell=row.insertCell(-1);  var zoomInButton=document.createElement("button");  zoomInButton.appendChild(document.createTextNode("+"));  zoomInCell.appendChild(zoomInButton);  var sliderWidth;  var paused = false;  var dragging = false;  table.width = Math.max(parseInt(flash.width) || 0, 400);    addEvent(pauseButton, "click", pauseUnpause);  addEvent(prevButton,"click",prevFrame);  addEvent(nextButton,"click",nextFrame);  addEvent(zoomOutButton,"click",zoomOut);  addEvent(zoomNormalButton,"click",zoomNormal);  addEvent(zoomInButton,"click",zoomIn);  addEvent(slider, "mousedown", drag);  addEvent(slider, "drag", function() { return false; }); /* For IE */  window.setInterval(update, 30);  function pauseUnpause()  {    paused = !paused;    pauseButton.style.borderStyle = paused ? "inset" : "";    if (paused)      flash.StopPlay();    else      flash.Play();  }  function prevFrame(){flash.GotoFrame(flash.CurrentFrame()-1);}  function nextFrame(){flash.GotoFrame(flash.CurrentFrame()+1);}  function zoomIn(){flash.Zoom(67);}  function zoomOut(){flash.Zoom(150);}  function zoomNormal(){flash.Zoom(0);}  function update()  {    sliderWidth=parseInt(getWidth(slider)-getWidth(thumb));    tot=totalFrames();    if (tot > 0)    {      frame=flash.CurrentFrame();      if (framecountertext)        framecountertext.nodeValue="\xA0"+(frame+1)+"/"+tot+"\xA0";      if(!dragging)      {        thumb.style.left=parseInt(frame/tot*sliderWidth)+"px";        paused=!flash.IsPlaying();        pauseButton.style.borderStyle=paused?"inset":"";      }    }    else if (framecountertext)    {      framecountertext.nodeValue="\xA0Loading...\xA0";    }  }  function dragMousemove(e)  {    var pageX = e.clientX + document.body.scrollLeft; /* cross-browser, unlike e.pageX, which IE does not support */    var pos = bounds(0, pageX - getX(slider) - 5, sliderWidth);    var frame = bounds(1, Math.ceil(totalFrames() * pos / sliderWidth), totalFrames() - 2);    thumb.style.left = pos + "px";    flash.GotoFrame(frame);  }  function release(e)  {    removeEvent(document, "mousemove", dragMousemove);    removeEvent(document, "mouseup", release);    if (!paused)      flash.Play();    dragging = false;  }  function drag(e)  {    addEvent(document, "mousemove", dragMousemove);    addEvent(document, "mouseup", release);    dragging = true;    dragMousemove(e);  }  /* Boring functions, some of which only exist to hide differences between IE and Mozilla. */  function bounds(min, val, max)  {    return Math.min(Math.max(min, val), max);  }  function totalFrames()  {    /* This is weird.  TotalFrames differs between IE and Mozilla.  CurrentFrame does not. */    if (typeof flash.TotalFrames == "number")      return flash.TotalFrames; /* IE */    else if (typeof flash.TotalFrames == "function")      return flash.TotalFrames(); /* Mozilla */    else      return 1; /* Partially loaded Flash in IE? */  }  function getWidth(elem)  {    if (document.defaultView && document.defaultView.getComputedStyle)      return parseFloat(document.defaultView.getComputedStyle(elem,null).getPropertyValue("width")); /* Mozilla */    else      return parseFloat(elem.offsetWidth); /* IE (currentStyle.width can be "auto" or "100%") */  }  function getX(elem)  {    if (!elem) return 0;    return (elem.offsetLeft) + getX(elem.offsetParent);  }  function addEvent(elem, eventName, fun)  {    if (elem.addEventListener) /* Mozilla */      elem.addEventListener(eventName, fun, false);    else /* IE */      elem.attachEvent("on" + eventName, fun);  }  function removeEvent(elem, eventName, fun)  {    if (elem.addEventListener)      elem.removeEventListener(eventName, fun, false);    else      elem.detachEvent("on" + eventName, fun);  }}})()