diff options
author | Thomas ZILLIOX <thomas@zilliox.me> | 2013-05-08 20:42:09 +0400 |
---|---|---|
committer | Thomas ZILLIOX <thomas@zilliox.me> | 2013-05-08 20:42:09 +0400 |
commit | b830387b839f6a1732d310e26fa81de27e19ff95 (patch) | |
tree | a6cf18412a42b0db34b9941de89724bb2f7dadd9 /plugins/Overlay/javascripts/Piwik_Overlay.js | |
parent | eeb6be9d1e4bb54a05b78537a080622dc764e72e (diff) |
Reorganizing the stylesheets & javascripts folders for every plugins
Diffstat (limited to 'plugins/Overlay/javascripts/Piwik_Overlay.js')
-rw-r--r-- | plugins/Overlay/javascripts/Piwik_Overlay.js | 263 |
1 files changed, 263 insertions, 0 deletions
diff --git a/plugins/Overlay/javascripts/Piwik_Overlay.js b/plugins/Overlay/javascripts/Piwik_Overlay.js new file mode 100644 index 0000000000..0caaefe559 --- /dev/null +++ b/plugins/Overlay/javascripts/Piwik_Overlay.js @@ -0,0 +1,263 @@ +/*! + * Piwik - Web Analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +var Piwik_Overlay = (function () { + + var $body, $iframe, $sidebar, $main, $location, $loading, $errorNotLoading; + var $rowEvolutionLink, $transitionsLink, $fullScreenLink; + + var idSite, period, date; + + var errorTimeout = false; + + var iframeSrcBase; + var iframeDomain = ''; + var iframeCurrentPage = ''; + var iframeCurrentPageNormalized = ''; + var iframeCurrentActionLabel = ''; + var updateComesFromInsideFrame = false; + + + /** Load the sidebar for a url */ + function loadSidebar(currentUrl) { + showLoading(); + + $location.html(' ').unbind('mouseenter').unbind('mouseleave'); + + iframeCurrentPage = currentUrl; + iframeDomain = currentUrl.match(/http(s)?:\/\/(www\.)?([^\/]*)/i)[3]; + + globalAjaxQueue.abort(); + var ajaxRequest = new ajaxHelper(); + ajaxRequest.addParams({ + module: 'Overlay', + action: 'renderSidebar', + currentUrl: currentUrl + }, 'get'); + ajaxRequest.setCallback( + function (response) { + hideLoading(); + + var $response = $(response); + + var $responseLocation = $response.find('.Overlay_Location'); + var $url = $responseLocation.find('span'); + iframeCurrentPageNormalized = $url.data('normalizedUrl'); + iframeCurrentActionLabel = $url.data('label'); + $url.html(piwikHelper.addBreakpointsToUrl($url.text())); + $location.html($responseLocation.html()).show(); + $responseLocation.remove(); + + var $locationSpan = $location.find('span'); + $locationSpan.html(piwikHelper.addBreakpointsToUrl($locationSpan.text())); + if (iframeDomain) { + // use addBreakpointsToUrl because it also encoded html entities + $locationSpan.tooltip({ + track: true, + items: '*', + tooltipClass: 'Overlay_Tooltip', + content: '<b>' + Piwik_Overlay_Translations.domain + ':</b> ' + + piwikHelper.addBreakpointsToUrl(iframeDomain), + show: false, + hide: false + }); + } + + $sidebar.empty().append($response).show(); + + if ($sidebar.find('.Overlay_NoData').size() == 0) { + $rowEvolutionLink.show(); + $transitionsLink.show() + } + } + ); + ajaxRequest.setFormat('html'); + ajaxRequest.send(false); + } + + /** Adjust the dimensions of the iframe */ + function adjustDimensions() { + $iframe.height($(window).height()); + $iframe.width($body.width() - $iframe.offset().left - 2); // -2 because of 2px border + } + + /** Display the loading message and hide other containers */ + function showLoading() { + $loading.show(); + + $sidebar.hide(); + $location.hide(); + + $fullScreenLink.hide(); + $rowEvolutionLink.hide(); + $transitionsLink.hide(); + + $errorNotLoading.hide(); + + // Start a timeout that shows an error when nothing is loaded + if (errorTimeout) { + window.clearTimeout(errorTimeout); + } + errorTimeout = window.setTimeout(function () { + hideLoading(); + $errorNotLoading.show(); + }, 9000); + } + + /** Hide the loading message */ + function hideLoading() { + if (errorTimeout) { + window.clearTimeout(errorTimeout); + errorTimeout = false; + } + $loading.hide(); + $fullScreenLink.show(); + } + + /** $.history callback for hash change */ + function hashChangeCallback(urlHash) { + var location = broadcast.getParamValue('l', urlHash); + location = Overlay_Helper.decodeFrameUrl(location); + + if (!updateComesFromInsideFrame) { + var iframeUrl = iframeSrcBase; + if (location) { + iframeUrl += '#' + location; + } + $iframe.attr('src', iframeUrl); + showLoading(); + } else { + loadSidebar(location); + } + + updateComesFromInsideFrame = false; + } + + return { + + /** This method is called when Overlay loads (from index.tpl) */ + init: function (iframeSrc, pIdSite, pPeriod, pDate) { + iframeSrcBase = iframeSrc; + idSite = pIdSite; + period = pPeriod; + date = pDate; + + $body = $('body'); + $iframe = $('#Overlay_Iframe'); + $sidebar = $('#Overlay_Sidebar'); + $location = $('#Overlay_Location'); + $main = $('#Overlay_Main'); + $loading = $('#Overlay_Loading'); + $errorNotLoading = $('#Overlay_Error_NotLoading'); + + $rowEvolutionLink = $('#Overlay_RowEvolution'); + $transitionsLink = $('#Overlay_Transitions'); + $fullScreenLink = $('#Overlay_FullScreen'); + + adjustDimensions(); + + showLoading(); + + // apply initial dimensions + window.setTimeout(function () { + adjustDimensions(); + }, 50); + + // handle window resize + // we manipulate broadcast.pageload because it unbinds all resize events on window + var originalPageload = broadcast.pageload; + broadcast.pageload = function (hash) { + originalPageload(hash); + $(window).resize(function () { + adjustDimensions(); + }); + }; + $(window).resize(function () { + adjustDimensions(); + }); + + // handle hash change + broadcast.loadAjaxContent = hashChangeCallback; + broadcast.init(); + + if (window.location.href.split('#').length == 1) { + // if there's no hash, broadcast won't trigger the callback - we have to do it here + hashChangeCallback(''); + } + + // handle date selection + var $select = $('select#Overlay_DateRangeSelect').change(function () { + var parts = $(this).val().split(';'); + if (parts.length == 2) { + period = parts[0]; + date = parts[1]; + window.location.href = Overlay_Helper.getOverlayLink(idSite, period, date, iframeCurrentPage); + } + }); + + var optionMatchFound = false; + $select.find('option').each(function () { + if ($(this).val() == period + ';' + date) { + $(this).prop('selected', true); + optionMatchFound = true; + } + }); + + if (!optionMatchFound) { + $select.prepend('<option selected="selected">'); + } + + // handle transitions link + $transitionsLink.click(function () { + DataTable_RowActions_Transitions.launchForUrl(iframeCurrentPageNormalized); + return false; + }); + + // handle row evolution link + $rowEvolutionLink.click(function () { + DataTable_RowActions_RowEvolution.launch('Actions.getPageUrls', iframeCurrentActionLabel); + return false; + }); + + // handle full screen link + $fullScreenLink.click(function () { + var href = iframeSrcBase; + if (iframeCurrentPage) { + href += '#' + iframeCurrentPage.replace(/#/g, '%23'); + } + window.location.href = href; + return false; + }); + }, + + /** This callback is used from within the iframe */ + setCurrentUrl: function (currentUrl) { + showLoading(); + + var locationParts = location.href.split('#'); + var currentLocation = ''; + if (locationParts.length > 1) { + currentLocation = broadcast.getParamValue('l', locationParts[1]); + } + + var newLocation = Overlay_Helper.encodeFrameUrl(currentUrl); + + if (newLocation != currentLocation) { + updateComesFromInsideFrame = true; + // put the current iframe url in the main url to enable refresh and deep linking. + // use disableHistory=true to make sure that the back and forward buttons can be + // used on the iframe (which in turn notifies the parent about the location change) + broadcast.propagateAjax('l=' + newLocation, true); + } else { + // happens when the url is changed by hand or when the l parameter is there on page load + loadSidebar(currentUrl); + } + } + + }; + +})();
\ No newline at end of file |