Skip to content
Extraits de code Groupes Projets
insight.js 2,72 ko
Newer Older
  • Learn to ignore specific revisions
  • var Piwik_Insight = (function() {
    	
    
    BeezyT's avatar
    BeezyT a validé
    	var $container, $iframe, $sidebar, $main, $location, $loading; 
    
    BeezyT's avatar
    BeezyT a validé
    	var isFullScreen = false;
    	
    
    BeezyT's avatar
    BeezyT a validé
    	var iframeDomain = '';
    	
    
    	/** Load the sidebar for a url */
    	function loadSidebar(currentUrl) {
    
    BeezyT's avatar
    BeezyT a validé
    		$sidebar.hide();
    		$location.html(' ');
    
    BeezyT's avatar
    BeezyT a validé
    		$loading.show();
    
    BeezyT's avatar
    BeezyT a validé
    		
    		iframeDomain = currentUrl.match(/http(s)?:\/\/(www\.)?([^\/]*)/i)[3];
    		
    
    		piwikHelper.ajaxCall('Insight', 'renderSidebar', {
    
    			currentUrl: currentUrl
    		}, function(response) {
    			var $response = $(response);
    
    BeezyT's avatar
    BeezyT a validé
    			
    
    			var $responseLocation = $response.find('.Insight_Location');
    
    BeezyT's avatar
    BeezyT a validé
    			var $url = $responseLocation.find('span');
    			$url.html(piwikHelper.addBreakpointsToUrl($url.text()));
    
    BeezyT's avatar
    BeezyT a validé
    			$location.html($responseLocation.html()).show();
    
    			$responseLocation.remove();
    
    BeezyT's avatar
    BeezyT a validé
    			
    
    BeezyT's avatar
    BeezyT a validé
    			$location.find('span').hover(function() {
    				if (iframeDomain) {
    					// use addBreakpointsToUrl because it also encoded html entities
    
    BeezyT's avatar
    BeezyT a validé
    					Piwik_Tooltip.show('<b>' + Piwik_Insight_Translations.domain + ':</b> ' + 
    						piwikHelper.addBreakpointsToUrl(iframeDomain), 'Insight_Tooltip');
    
    BeezyT's avatar
    BeezyT a validé
    				}
    			}, function() {
    				Piwik_Tooltip.hide();
    			});
    			
    			$sidebar.empty().append($response).show();
    
    BeezyT's avatar
    BeezyT a validé
    			$loading.hide();
    
    BeezyT's avatar
    BeezyT a validé
    			
    			var $fullScreen = $sidebar.find('a.Insight_FullScreen');
    			$fullScreen.click(function() {
    				handleFullScreen();
    				return false;
    			});
    
    	}
    	
    	/** Adjust the height of the iframe */
    	function adjustHeight() {
    
    BeezyT's avatar
    BeezyT a validé
    		var height, iframeHeight;
    
    BeezyT's avatar
    BeezyT a validé
    		if (isFullScreen) {
    
    BeezyT's avatar
    BeezyT a validé
    			iframeHeight = height = $(window).height();
    
    BeezyT's avatar
    BeezyT a validé
    		} else {
    			height = $(window).height() - $main.offset().top - 25;
    
    BeezyT's avatar
    BeezyT a validé
    			iframeHeight = height - 4;
    
    BeezyT's avatar
    BeezyT a validé
    		}
    
    		height = Math.max(300, height);
    		$container.height(height);
    
    BeezyT's avatar
    BeezyT a validé
    		$iframe.height(iframeHeight);
    
    BeezyT's avatar
    BeezyT a validé
    	/** Handle full screen */ 
    	function handleFullScreen() {
    		if (!isFullScreen) {
    			// open full screen
    			isFullScreen = true;
    			$container.addClass('Insight_FullScreen');
    			adjustHeight();
    		} else {
    			// close full screen
    			isFullScreen = false;
    			$container.removeClass('Insight_FullScreen');
    			adjustHeight();
    		}
    	}
    	
    
    	return {
    		
    		/** This method is called when insight loads (from index.tpl) */
    		init: function() {
    			$container = $('#Insight_Container');
    
    BeezyT's avatar
    BeezyT a validé
    			$iframe = $container.find('iframe');
    
    			$sidebar = $('#Insight_Sidebar');
    			$location = $('#Insight_Location');
    			$main = $('#Insight_Main');
    
    BeezyT's avatar
    BeezyT a validé
    			$loading = $('#Insight_Loading');
    
    BeezyT's avatar
    BeezyT a validé
    			window.setTimeout(function() {
    				// sometimes the frame is too high at first
    				adjustHeight();
    			}, 50);
    			
    
    			// this callback is unbound in broadcast.pageload
    
    			$(window).resize(function() {
    				adjustHeight();
    			});
    		},
    
    		/** This callback is used from within the iframe */
    		setCurrentUrl: function(currentUrl) {
    			loadSidebar(currentUrl);
    		}
    
    	};
    
    })();