var svgEditorExtension_overview_window = (function () { 
 | 
  'use strict'; 
 | 
  
 | 
  /* globals jQuery */ 
 | 
  
 | 
  /** 
 | 
   * ext-overview_window.js 
 | 
   * 
 | 
   * @license MIT 
 | 
   * 
 | 
   * @copyright 2013 James Sacksteder 
 | 
   * 
 | 
   */ 
 | 
  var extOverview_window = { 
 | 
    name: 'overview_window', 
 | 
    init: function init(_ref) { 
 | 
      var isChrome = _ref.isChrome, 
 | 
          isIE = _ref.isIE; 
 | 
      var $ = jQuery; 
 | 
      var overviewWindowGlobals = {}; // Disabled in Chrome 48-, see https://github.com/SVG-Edit/svgedit/issues/26 and 
 | 
      // https://code.google.com/p/chromium/issues/detail?id=565120. 
 | 
  
 | 
      if (isChrome()) { 
 | 
        var verIndex = navigator.userAgent.indexOf('Chrome/') + 7; 
 | 
        var chromeVersion = parseInt(navigator.userAgent.substring(verIndex), 10); 
 | 
  
 | 
        if (chromeVersion < 49) { 
 | 
          return; 
 | 
        } 
 | 
      } // Define and insert the base html element. 
 | 
  
 | 
  
 | 
      var propsWindowHtml = '<div id="overview_window_content_pane" style="width:100%; word-wrap:break-word;  display:inline-block; margin-top:20px;">' + '<div id="overview_window_content" style="position:relative; left:12px; top:0px;">' + '<div style="background-color:#A0A0A0; display:inline-block; overflow:visible;">' + '<svg id="overviewMiniView" width="150" height="100" x="0" y="0" viewBox="0 0 4800 3600" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">' + '<use x="0" y="0" xlink:href="#svgroot"> </use>' + '</svg>' + '<div id="overview_window_view_box" style="min-width:50px; min-height:50px; position:absolute; top:30px; left:30px; z-index:5; background-color:rgba(255,0,102,0.3);">' + '</div>' + '</div>' + '</div>' + '</div>'; 
 | 
      $('#sidepanels').append(propsWindowHtml); // Define dynamic animation of the view box. 
 | 
  
 | 
      var updateViewBox = function updateViewBox() { 
 | 
        var portHeight = parseFloat($('#workarea').css('height')); 
 | 
        var portWidth = parseFloat($('#workarea').css('width')); 
 | 
        var portX = $('#workarea').scrollLeft(); 
 | 
        var portY = $('#workarea').scrollTop(); 
 | 
        var windowWidth = parseFloat($('#svgcanvas').css('width')); 
 | 
        var windowHeight = parseFloat($('#svgcanvas').css('height')); 
 | 
        var overviewWidth = $('#overviewMiniView').attr('width'); 
 | 
        var overviewHeight = $('#overviewMiniView').attr('height'); 
 | 
        var viewBoxX = portX / windowWidth * overviewWidth; 
 | 
        var viewBoxY = portY / windowHeight * overviewHeight; 
 | 
        var viewBoxWidth = portWidth / windowWidth * overviewWidth; 
 | 
        var viewBoxHeight = portHeight / windowHeight * overviewHeight; 
 | 
        $('#overview_window_view_box').css('min-width', viewBoxWidth + 'px'); 
 | 
        $('#overview_window_view_box').css('min-height', viewBoxHeight + 'px'); 
 | 
        $('#overview_window_view_box').css('top', viewBoxY + 'px'); 
 | 
        $('#overview_window_view_box').css('left', viewBoxX + 'px'); 
 | 
      }; 
 | 
  
 | 
      $('#workarea').scroll(function () { 
 | 
        if (!overviewWindowGlobals.viewBoxDragging) { 
 | 
          updateViewBox(); 
 | 
        } 
 | 
      }); 
 | 
      $('#workarea').resize(updateViewBox); 
 | 
      updateViewBox(); // Compensate for changes in zoom and canvas size. 
 | 
  
 | 
      var updateViewDimensions = function updateViewDimensions() { 
 | 
        var viewWidth = $('#svgroot').attr('width'); 
 | 
        var viewHeight = $('#svgroot').attr('height'); 
 | 
        var viewX = 640; 
 | 
        var viewY = 480; 
 | 
  
 | 
        if (isIE()) { 
 | 
          // This has only been tested with Firefox 10 and IE 9 (without chrome frame). 
 | 
          // I am not sure if if is Firefox or IE that is being non compliant here. 
 | 
          // Either way the one that is noncompliant may become more compliant later. 
 | 
          // TAG:HACK 
 | 
          // TAG:VERSION_DEPENDENT 
 | 
          // TAG:BROWSER_SNIFFING 
 | 
          viewX = 0; 
 | 
          viewY = 0; 
 | 
        } 
 | 
  
 | 
        var svgWidthOld = $('#overviewMiniView').attr('width'); 
 | 
        var svgHeightNew = viewHeight / viewWidth * svgWidthOld; 
 | 
        $('#overviewMiniView').attr('viewBox', viewX + ' ' + viewY + ' ' + viewWidth + ' ' + viewHeight); 
 | 
        $('#overviewMiniView').attr('height', svgHeightNew); 
 | 
        updateViewBox(); 
 | 
      }; 
 | 
  
 | 
      updateViewDimensions(); // Set up the overview window as a controller for the view port. 
 | 
  
 | 
      overviewWindowGlobals.viewBoxDragging = false; 
 | 
  
 | 
      var updateViewPortFromViewBox = function updateViewPortFromViewBox() { 
 | 
        var windowWidth = parseFloat($('#svgcanvas').css('width')); 
 | 
        var windowHeight = parseFloat($('#svgcanvas').css('height')); 
 | 
        var overviewWidth = $('#overviewMiniView').attr('width'); 
 | 
        var overviewHeight = $('#overviewMiniView').attr('height'); 
 | 
        var viewBoxX = parseFloat($('#overview_window_view_box').css('left')); 
 | 
        var viewBoxY = parseFloat($('#overview_window_view_box').css('top')); 
 | 
        var portX = viewBoxX / overviewWidth * windowWidth; 
 | 
        var portY = viewBoxY / overviewHeight * windowHeight; 
 | 
        $('#workarea').scrollLeft(portX); 
 | 
        $('#workarea').scrollTop(portY); 
 | 
      }; 
 | 
  
 | 
      $('#overview_window_view_box').draggable({ 
 | 
        containment: 'parent', 
 | 
        drag: updateViewPortFromViewBox, 
 | 
        start: function start() { 
 | 
          overviewWindowGlobals.viewBoxDragging = true; 
 | 
        }, 
 | 
        stop: function stop() { 
 | 
          overviewWindowGlobals.viewBoxDragging = false; 
 | 
        } 
 | 
      }); 
 | 
      $('#overviewMiniView').click(function (evt) { 
 | 
        // Firefox doesn't support evt.offsetX and evt.offsetY. 
 | 
        var mouseX = evt.offsetX || evt.originalEvent.layerX; 
 | 
        var mouseY = evt.offsetY || evt.originalEvent.layerY; 
 | 
        var overviewWidth = $('#overviewMiniView').attr('width'); 
 | 
        var overviewHeight = $('#overviewMiniView').attr('height'); 
 | 
        var viewBoxWidth = parseFloat($('#overview_window_view_box').css('min-width')); 
 | 
        var viewBoxHeight = parseFloat($('#overview_window_view_box').css('min-height')); 
 | 
        var viewBoxX = mouseX - 0.5 * viewBoxWidth; 
 | 
        var viewBoxY = mouseY - 0.5 * viewBoxHeight; // deal with constraints 
 | 
  
 | 
        if (viewBoxX < 0) { 
 | 
          viewBoxX = 0; 
 | 
        } 
 | 
  
 | 
        if (viewBoxY < 0) { 
 | 
          viewBoxY = 0; 
 | 
        } 
 | 
  
 | 
        if (viewBoxX + viewBoxWidth > overviewWidth) { 
 | 
          viewBoxX = overviewWidth - viewBoxWidth; 
 | 
        } 
 | 
  
 | 
        if (viewBoxY + viewBoxHeight > overviewHeight) { 
 | 
          viewBoxY = overviewHeight - viewBoxHeight; 
 | 
        } 
 | 
  
 | 
        $('#overview_window_view_box').css('top', viewBoxY + 'px'); 
 | 
        $('#overview_window_view_box').css('left', viewBoxX + 'px'); 
 | 
        updateViewPortFromViewBox(); 
 | 
      }); 
 | 
      return { 
 | 
        name: 'overview window', 
 | 
        canvasUpdated: updateViewDimensions, 
 | 
        workareaResized: updateViewBox 
 | 
      }; 
 | 
    } 
 | 
  }; 
 | 
  
 | 
  return extOverview_window; 
 | 
  
 | 
}()); 
 |