Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Overlay/client/client.js')
-rw-r--r--plugins/Overlay/client/client.js518
1 files changed, 259 insertions, 259 deletions
diff --git a/plugins/Overlay/client/client.js b/plugins/Overlay/client/client.js
index 93d790f059..f791f8beb5 100644
--- a/plugins/Overlay/client/client.js
+++ b/plugins/Overlay/client/client.js
@@ -1,261 +1,261 @@
+var Piwik_Overlay_Client = (function () {
+
+ /** jQuery */
+ var $;
+
+ /** Url of the Piwik root */
+ var piwikRoot;
+
+ /** Piwik idsite */
+ var idSite;
+
+ /** The current period and date */
+ var period, date;
+
+ /** Reference to the status bar DOM element */
+ var statusBar;
+
+ /** Load the client CSS */
+ function loadCss() {
+ var css = c('link').attr({
+ rel: 'stylesheet',
+ type: 'text/css',
+ href: piwikRoot + 'plugins/Overlay/client/client.css'
+ });
+ $('head').append(css);
+ }
+
+ /**
+ * This method loads jQuery, if it is not there yet.
+ * The callback is triggered after jQuery is loaded.
+ */
+ function loadJQuery(callback) {
+ if (typeof jQuery != 'undefined') {
+ $ = jQuery;
+ callback();
+ }
+ else {
+ Piwik_Overlay_Client.loadScript('libs/jquery/jquery.js', function () {
+ $ = jQuery;
+ jQuery.noConflict();
+ callback();
+ });
+ }
+ }
+
+ /**
+ * Notify Piwik of the current iframe location.
+ * This way, we can display additional metrics on the side of the iframe.
+ */
+ function notifyPiwikOfLocation() {
+ // check whether the session has been opened in a new tab (instead of an iframe)
+ if (window != window.top) {
+ var iframe = c('iframe', false, {
+ src: piwikRoot + 'index.php?module=Overlay&action=notifyParentIframe#' + window.location.href
+ }).css({width: 0, height: 0, border: 0});
+
+ // in some cases, calling append right away doesn't work in IE8
+ $(document).ready(function () {
+ $('body').append(iframe);
+ });
+ }
+ }
+
+ /** Create a jqueryfied DOM element */
+ function c(tagName, className, attributes) {
+ var el = $(document.createElement(tagName));
+
+ if (className) {
+ if (className.substring(0, 1) == '#') {
+ var id = className.substring(1, className.length);
+ id = 'PIS_' + id;
+ el.attr('id', id);
+ }
+ else {
+ className = 'PIS_' + className;
+ el.addClass(className);
+ }
+ }
+
+ if (attributes) {
+ el.attr(attributes);
+ }
+
+ return el;
+ }
+
+ /** Special treatment for some internet explorers */
+ var ieStatusBarEventsBound = false;
+
+ function handleIEStatusBar() {
+ if (navigator.appVersion.indexOf("MSIE 7.") == -1
+ && navigator.appVersion.indexOf("MSIE 8.") == -1) {
+ // this is not IE8 or lower
+ return;
+ }
+
+ // IE7/8 can't handle position:fixed so we need to do it by hand
+ statusBar.css({
+ position: 'absolute',
+ right: 'auto',
+ bottom: 'auto',
+ left: 0,
+ top: 0
+ });
+
+ var position = function () {
+ var scrollY = document.body.parentElement.scrollTop;
+ var scrollX = document.body.parentElement.scrollLeft;
+ statusBar.css({
+ top: (scrollY + $(window).height() - statusBar.outerHeight()) + 'px',
+ left: (scrollX + $(window).width() - statusBar.outerWidth()) + 'px'
+ });
+ };
+
+ position();
+
+ statusBar.css({width: 'auto'});
+ if (statusBar.width() < 350) {
+ statusBar.width(350);
+ } else {
+ statusBar.width(statusBar.width());
+ }
+
+ if (!ieStatusBarEventsBound) {
+ ieStatusBarEventsBound = true;
+ $(window).resize(position);
+ $(window).scroll(position);
+ }
+ }
+
+ return {
+
+ /** Initialize in-site analytics */
+ initialize: function (pPiwikRoot, pIdSite, pPeriod, pDate) {
+ piwikRoot = pPiwikRoot;
+ idSite = pIdSite;
+ period = pPeriod;
+ date = pDate;
+
+ var load = this.loadScript;
+ var loading = this.loadingNotification;
+
+ loadJQuery(function () {
+ notifyPiwikOfLocation();
+ loadCss();
+
+ // translations
+ load('plugins/Overlay/client/translations.js', function () {
+ Piwik_Overlay_Translations.initialize(function () {
+ // following pages
+ var finishPages = loading('Loading following pages');
+ load('plugins/Overlay/client/followingpages.js', function () {
+ Piwik_Overlay_FollowingPages.initialize(finishPages);
+ });
+
+ });
+ });
+ });
+ },
+
+ /** Create a jqueryfied DOM element */
+ createElement: function (tagName, className, attributes) {
+ return c(tagName, className, attributes);
+ },
+
+ /** Load a script and wait for it to be loaded */
+ loadScript: function (relativePath, callback) {
+ var loaded = false;
+ var onLoad = function () {
+ if (!loaded) {
+ loaded = true;
+ callback();
+ }
+ };
+
+ var head = document.getElementsByTagName('head')[0];
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+
+ script.onreadystatechange = function () {
+ if (this.readyState == 'loaded' || this.readyState == 'complete') {
+ onLoad();
+ }
+ };
+ script.onload = onLoad;
+
+ script.src = piwikRoot + relativePath + '?v=1';
+ head.appendChild(script);
+ },
+
+ /** Piwik Overlay API Request */
+ api: function (method, callback, additionalParams) {
+ var url = piwikRoot + 'index.php?module=API&method=Overlay.' + method
+ + '&idSite=' + idSite + '&period=' + period + '&date=' + date + '&format=JSON&filter_limit=-1';
+
+ if (additionalParams) {
+ url += '&' + additionalParams;
+ }
+
+ $.getJSON(url + "&jsoncallback=?", function (data) {
+ if (typeof data.result != 'undefined' && data.result == 'error') {
+ alert('Error: ' + data.message);
+ }
+ else {
+ callback(data);
+ }
+ });
+ },
+
+ /**
+ * Initialize a notification
+ * To hide the notification use the returned callback
+ */
+ notification: function (message, addClass) {
+ if (!statusBar) {
+ statusBar = c('div', '#StatusBar').css('opacity', .8);
+ $('body').prepend(statusBar);
+ }
+
+ var item = c('div', 'Item').html(message);
+
+ if (addClass) {
+ item.addClass('PIS_' + addClass);
+ }
+
+ statusBar.show().append(item);
+
+ handleIEStatusBar();
+ window.setTimeout(handleIEStatusBar, 100);
+
+ return function () {
+ item.remove();
+ if (statusBar.children().size() == 0) {
+ statusBar.hide();
+ } else {
+ handleIEStatusBar();
+ }
+ };
+ },
+
+ /** Hide all notifications with a certain class */
+ hideNotifications: function (className) {
+ statusBar.find('.PIS_' + className).remove();
+ if (statusBar.children().size() == 0) {
+ statusBar.hide();
+ } else {
+ handleIEStatusBar();
+ }
+ },
+
+ /**
+ * Initialize a loading notification
+ * To hide the notification use the returned callback
+ */
+ loadingNotification: function (message) {
+ return Piwik_Overlay_Client.notification(message, 'Loading');
+ }
+
+ };
-var Piwik_Overlay_Client = (function() {
-
- /** jQuery */
- var $;
-
- /** Url of the Piwik root */
- var piwikRoot;
-
- /** Piwik idsite */
- var idSite;
-
- /** The current period and date */
- var period, date;
-
- /** Reference to the status bar DOM element */
- var statusBar;
-
- /** Load the client CSS */
- function loadCss() {
- var css = c('link').attr({
- rel: 'stylesheet',
- type: 'text/css',
- href: piwikRoot + 'plugins/Overlay/client/client.css'
- });
- $('head').append(css);
- }
-
- /**
- * This method loads jQuery, if it is not there yet.
- * The callback is triggered after jQuery is loaded.
- */
- function loadJQuery(callback) {
- if (typeof jQuery != 'undefined') {
- $ = jQuery;
- callback();
- }
- else {
- Piwik_Overlay_Client.loadScript('libs/jquery/jquery.js', function() {
- $ = jQuery;
- jQuery.noConflict();
- callback();
- });
- }
- }
-
- /**
- * Notify Piwik of the current iframe location.
- * This way, we can display additional metrics on the side of the iframe.
- */
- function notifyPiwikOfLocation() {
- // check whether the session has been opened in a new tab (instead of an iframe)
- if (window != window.top) {
- var iframe = c('iframe', false, {
- src: piwikRoot + 'index.php?module=Overlay&action=notifyParentIframe#' + window.location.href
- }).css({width: 0, height: 0, border: 0});
-
- // in some cases, calling append right away doesn't work in IE8
- $(document).ready(function() {
- $('body').append(iframe);
- });
- }
- }
-
- /** Create a jqueryfied DOM element */
- function c(tagName, className, attributes) {
- var el = $(document.createElement(tagName));
-
- if (className) {
- if (className.substring(0, 1) == '#') {
- var id = className.substring(1, className.length);
- id = 'PIS_' + id;
- el.attr('id', id);
- }
- else {
- className = 'PIS_' + className;
- el.addClass(className);
- }
- }
-
- if (attributes) {
- el.attr(attributes);
- }
-
- return el;
- }
-
- /** Special treatment for some internet explorers */
- var ieStatusBarEventsBound = false;
- function handleIEStatusBar() {
- if (navigator.appVersion.indexOf("MSIE 7.") == -1
- && navigator.appVersion.indexOf("MSIE 8.") == -1) {
- // this is not IE8 or lower
- return;
- }
-
- // IE7/8 can't handle position:fixed so we need to do it by hand
- statusBar.css({
- position: 'absolute',
- right: 'auto',
- bottom: 'auto',
- left: 0,
- top: 0
- });
-
- var position = function() {
- var scrollY = document.body.parentElement.scrollTop;
- var scrollX = document.body.parentElement.scrollLeft;
- statusBar.css({
- top: (scrollY + $(window).height() - statusBar.outerHeight()) + 'px',
- left: (scrollX + $(window).width() - statusBar.outerWidth()) + 'px'
- });
- };
-
- position();
-
- statusBar.css({width: 'auto'});
- if (statusBar.width() < 350) {
- statusBar.width(350);
- } else {
- statusBar.width(statusBar.width());
- }
-
- if (!ieStatusBarEventsBound) {
- ieStatusBarEventsBound = true;
- $(window).resize(position);
- $(window).scroll(position);
- }
- }
-
- return {
-
- /** Initialize in-site analytics */
- initialize: function(pPiwikRoot, pIdSite, pPeriod, pDate) {
- piwikRoot = pPiwikRoot;
- idSite = pIdSite;
- period = pPeriod;
- date = pDate;
-
- var load = this.loadScript;
- var loading = this.loadingNotification;
-
- loadJQuery(function() {
- notifyPiwikOfLocation();
- loadCss();
-
- // translations
- load('plugins/Overlay/client/translations.js', function() {
- Piwik_Overlay_Translations.initialize(function() {
- // following pages
- var finishPages = loading('Loading following pages');
- load('plugins/Overlay/client/followingpages.js', function() {
- Piwik_Overlay_FollowingPages.initialize(finishPages);
- });
-
- });
- });
- });
- },
-
- /** Create a jqueryfied DOM element */
- createElement: function(tagName, className, attributes) {
- return c(tagName, className, attributes);
- },
-
- /** Load a script and wait for it to be loaded */
- loadScript: function(relativePath, callback) {
- var loaded = false;
- var onLoad = function() {
- if (!loaded) {
- loaded = true;
- callback();
- }
- };
-
- var head = document.getElementsByTagName('head')[0];
- var script = document.createElement('script');
- script.type = 'text/javascript';
-
- script.onreadystatechange = function () {
- if (this.readyState == 'loaded' || this.readyState == 'complete') {
- onLoad();
- }
- };
- script.onload = onLoad;
-
- script.src = piwikRoot+relativePath+'?v=1';
- head.appendChild(script);
- },
-
- /** Piwik Overlay API Request */
- api: function(method, callback, additionalParams) {
- var url = piwikRoot+'index.php?module=API&method=Overlay.'+method
- +'&idSite='+idSite+'&period='+period+'&date='+date+'&format=JSON&filter_limit=-1';
-
- if (additionalParams) {
- url += '&' + additionalParams;
- }
-
- $.getJSON(url+"&jsoncallback=?", function(data) {
- if (typeof data.result != 'undefined' && data.result == 'error') {
- alert('Error: ' + data.message);
- }
- else {
- callback(data);
- }
- });
- },
-
- /**
- * Initialize a notification
- * To hide the notification use the returned callback
- */
- notification: function(message, addClass) {
- if (!statusBar) {
- statusBar = c('div', '#StatusBar').css('opacity', .8);
- $('body').prepend(statusBar);
- }
-
- var item = c('div', 'Item').html(message);
-
- if (addClass) {
- item.addClass('PIS_' + addClass);
- }
-
- statusBar.show().append(item);
-
- handleIEStatusBar();
- window.setTimeout(handleIEStatusBar, 100);
-
- return function() {
- item.remove();
- if (statusBar.children().size() == 0) {
- statusBar.hide();
- } else {
- handleIEStatusBar();
- }
- };
- },
-
- /** Hide all notifications with a certain class */
- hideNotifications: function(className) {
- statusBar.find('.PIS_' + className).remove();
- if (statusBar.children().size() == 0) {
- statusBar.hide();
- } else {
- handleIEStatusBar();
- }
- },
-
- /**
- * Initialize a loading notification
- * To hide the notification use the returned callback
- */
- loadingNotification: function(message) {
- return Piwik_Overlay_Client.notification(message, 'Loading');
- }
-
- };
-
})();