add piwik installation
BIN
www/analytics/plugins/Zeitgeist/images/affix-arrow.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/annotations.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/annotations_starred.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/arr_r.png
Normal file
|
After Width: | Height: | Size: 195 B |
BIN
www/analytics/plugins/Zeitgeist/images/background-submit.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/chart_bar.png
Normal file
|
After Width: | Height: | Size: 170 B |
BIN
www/analytics/plugins/Zeitgeist/images/chart_line_edit.png
Executable file
|
After Width: | Height: | Size: 993 B |
BIN
www/analytics/plugins/Zeitgeist/images/chart_pie.png
Normal file
|
After Width: | Height: | Size: 355 B |
BIN
www/analytics/plugins/Zeitgeist/images/close.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/collapsed_arrows.gif
Normal file
|
After Width: | Height: | Size: 54 B |
BIN
www/analytics/plugins/Zeitgeist/images/configure-highlight.png
Executable file
|
After Width: | Height: | Size: 933 B |
BIN
www/analytics/plugins/Zeitgeist/images/configure.png
Executable file
|
After Width: | Height: | Size: 387 B |
BIN
www/analytics/plugins/Zeitgeist/images/dashboard_h_bg.png
Normal file
|
After Width: | Height: | Size: 162 B |
BIN
www/analytics/plugins/Zeitgeist/images/dashboard_h_bg_hover.png
Normal file
|
After Width: | Height: | Size: 333 B |
|
After Width: | Height: | Size: 145 B |
BIN
www/analytics/plugins/Zeitgeist/images/datepicker_arr_l.png
Normal file
|
After Width: | Height: | Size: 191 B |
BIN
www/analytics/plugins/Zeitgeist/images/datepicker_arr_r.png
Normal file
|
After Width: | Height: | Size: 196 B |
BIN
www/analytics/plugins/Zeitgeist/images/delete.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/download.png
Normal file
|
After Width: | Height: | Size: 734 B |
|
After Width: | Height: | Size: 369 B |
BIN
www/analytics/plugins/Zeitgeist/images/ecommerceOrder.gif
Normal file
|
After Width: | Height: | Size: 570 B |
BIN
www/analytics/plugins/Zeitgeist/images/email.png
Normal file
|
After Width: | Height: | Size: 754 B |
BIN
www/analytics/plugins/Zeitgeist/images/error.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/error_medium.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/event.png
Normal file
|
After Width: | Height: | Size: 164 B |
BIN
www/analytics/plugins/Zeitgeist/images/expanded_arrows.gif
Normal file
|
After Width: | Height: | Size: 60 B |
BIN
www/analytics/plugins/Zeitgeist/images/export.png
Normal file
|
After Width: | Height: | Size: 219 B |
BIN
www/analytics/plugins/Zeitgeist/images/feed.png
Normal file
|
After Width: | Height: | Size: 691 B |
BIN
www/analytics/plugins/Zeitgeist/images/fullscreen.png
Executable file
|
After Width: | Height: | Size: 346 B |
BIN
www/analytics/plugins/Zeitgeist/images/goal.png
Normal file
|
After Width: | Height: | Size: 270 B |
BIN
www/analytics/plugins/Zeitgeist/images/help.png
Normal file
|
After Width: | Height: | Size: 942 B |
BIN
www/analytics/plugins/Zeitgeist/images/html_icon.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/ico_alert.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/ico_delete.png
Normal file
|
After Width: | Height: | Size: 231 B |
BIN
www/analytics/plugins/Zeitgeist/images/ico_edit.png
Normal file
|
After Width: | Height: | Size: 255 B |
BIN
www/analytics/plugins/Zeitgeist/images/ico_info.png
Normal file
|
After Width: | Height: | Size: 978 B |
BIN
www/analytics/plugins/Zeitgeist/images/icon-calendar.gif
Normal file
|
After Width: | Height: | Size: 331 B |
BIN
www/analytics/plugins/Zeitgeist/images/image.png
Normal file
|
After Width: | Height: | Size: 306 B |
BIN
www/analytics/plugins/Zeitgeist/images/inp_bg.png
Normal file
|
After Width: | Height: | Size: 137 B |
BIN
www/analytics/plugins/Zeitgeist/images/li_dbl_gray.gif
Normal file
|
After Width: | Height: | Size: 48 B |
BIN
www/analytics/plugins/Zeitgeist/images/link.gif
Normal file
|
After Width: | Height: | Size: 75 B |
BIN
www/analytics/plugins/Zeitgeist/images/loading-blue.gif
Normal file
|
After Width: | Height: | Size: 723 B |
BIN
www/analytics/plugins/Zeitgeist/images/login-sprite.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/logo-header.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/logo-marketplace.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/logo.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
9
www/analytics/plugins/Zeitgeist/images/logo.svg
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 220 76" width="220" height="76" style="stroke:none;fill-rule:nonzero">
|
||||
<path d="m 44.71,23.34 c 0.00,3.06 -0.71,5.82 -2.33,8.02 -1.57,2.13 -3.88,3.64 -6.62,4.48 -2.67,0.83 -5.84,1.21 -9.52,1.21 l -12.46,0 0,-27.33 12.46,0 c 6.87,0.04 11.82,0.96 14.97,4.02 2.35,2.50 3.51,5.84 3.51,9.53 l -0.37,0 0.37,0.05 z m 10.20,-0.29 c 0,-3.25 -0.52,-6.09 -1.52,-8.55 C 52.38,11.99 50.95,9.96 49.04,8.27 47.14,6.58 44.90,5.39 42.19,4.63 39.55,3.86 35.39,3.41 29.92,3.41 l 0,-0.10 -0.08,0.11 -19.13,-0.01 0,0.00 c -0.00,0 -0.01,0 -0.03,0 -2.91,0 -4.64,0.67 -5.43,1.46 -0.77,0.69 -1.48,2.29 -1.47,5.23 l 0,56.65 c 0.00,2.59 0.60,4.15 1.42,5.05 0.96,1.01 1.88,1.44 3.60,1.48 1.57,-0.03 2.48,-0.44 3.51,-1.51 0.85,-0.92 1.46,-2.49 1.46,-5.11 l 0,-23.24 16.07,0 c 8.80,0.00 15.07,-1.88 19.03,-5.22 3.97,-3.36 6.01,-8.13 6.04,-15.15" style="fill:#fbc907" />
|
||||
<path d="m 67.14,28.19 c -1.64,0.03 -2.54,0.44 -3.51,1.45 -0.80,0.87 -1.42,2.45 -1.42,5.12 l 0,31.88 -0.00,0 c 0.00,2.66 0.62,4.24 1.44,5.14 1.00,1.05 1.90,1.45 3.47,1.48 1.73,-0.03 2.67,-0.45 3.65,-1.47 0.80,-0.86 1.43,-2.46 1.43,-5.15 l 0,-31.88 c 0,-2.70 -0.62,-4.29 -1.42,-5.12 -0.96,-1.00 -1.93,-1.42 -3.64,-1.45" style="fill:#f68c11" />
|
||||
<path d="m 73.22,15.83 c 0,3.31 -2.69,6.00 -6.01,6.00 -3.31,0 -6.00,-2.69 -6.00,-6.00 0,-3.31 2.69,-6.00 6.00,-6.00 3.31,0 6.01,2.69 6.01,6.00" style="fill:#f68c11" />
|
||||
<path d="m 155.84,28.19 c -1.64,0.03 -2.53,0.44 -3.51,1.45 -0.80,0.86 -1.42,2.45 -1.42,5.12 l 0,31.88 c 0,2.66 0.61,4.26 1.43,5.14 1.01,1.05 1.90,1.45 3.48,1.48 1.72,-0.03 2.67,-0.45 3.65,-1.47 0.80,-0.86 1.42,-2.46 1.42,-5.15 l 0.00,-31.88 c 0,-2.70 -0.62,-4.29 -1.41,-5.12 -0.97,-0.99 -1.93,-1.42 -3.65,-1.45" style="fill:#cd1e25" />
|
||||
<path d="m 161.92,15.83 c 0,3.31 -2.69,6.00 -6.00,6.00 -3.31,0 -6.00,-2.69 -6.00,-6.00 0,-3.31 2.68,-6.00 6.00,-6.00 3.31,0 6.00,2.69 6.00,6.00" style="fill:#cd1e25" />
|
||||
<path d="m 215.55,66.59 c -0.41,-0.78 -1.15,-2.02 -2.19,-3.67 l -15.21,-23.91 8.66,-7.94 c 3.69,-3.23 5.14,-5.89 5.01,-6.69 -0.02,-1.21 -0.35,-1.95 -1.12,-2.72 -0.79,-0.74 -1.64,-1.09 -2.96,-1.11 -1.13,0.00 -1.90,0.27 -2.55,0.74 -0.82,0.59 -2.28,1.95 -4.18,3.95 l -19.15,20.09 0.00,-35.92 c 0,-2.59 -0.58,-4.23 -1.40,-5.19 -0.90,-1.01 -1.89,-1.47 -3.60,-1.50 -1.73,0.04 -2.64,0.51 -3.50,1.61 -0.82,1.11 -1.40,3.03 -1.39,5.89 l 0,56.59 c -0.00,2.51 0.55,4.11 1.34,5.03 0.86,0.96 1.83,1.41 3.54,1.44 1.30,-0.01 2.31,-0.44 3.45,-1.57 0.95,-0.98 1.54,-2.44 1.55,-4.81 l 0,-11.95 9.99,-9.45 13.60,22.35 c 1.51,2.34 2.73,3.94 3.45,4.64 0.46,0.45 1.15,0.78 2.52,0.79 1.55,-0.02 2.48,-0.43 3.32,-1.29 0.79,-0.84 1.25,-1.99 1.26,-3.86 0,-0.38 -0.10,-0.88 -0.45,-1.54" style="fill:#5f1316" />
|
||||
<path d="m 143.02,29.00 c -0.88,-0.83 -1.88,-1.23 -3.06,-1.23 -1.28,0.00 -2.12,0.29 -2.67,0.76 -0.64,0.55 -1.08,1.17 -1.33,1.87 -0.29,0.79 -0.70,2.13 -1.21,4.01 l -8.41,28.51 -7.62,-26.69 c -0.70,-2.39 -1.25,-4.08 -1.62,-5.00 -0.34,-0.83 -0.94,-1.64 -1.84,-2.41 -0.78,-0.67 -1.93,-1.05 -3.53,-1.05 -1.56,0 -2.70,0.37 -3.49,1.05 -0.90,0.77 -1.48,1.55 -1.77,2.31 -0.33,0.87 -0.87,2.58 -1.61,5.08 L 97.16,62.95 88.84,34.41 c -0.76,-2.59 -1.46,-4.41 -2.08,-5.38 -0.46,-0.75 -1.44,-1.25 -3.22,-1.25 -1.24,0 -2.25,0.41 -3.08,1.24 -0.86,0.87 -1.25,1.79 -1.25,2.78 0,0.00 0,0.03 0,0.05 0.00,0.83 0.44,2.56 1.36,5.11 l 9.37,27.73 c 0.25,0.74 0.61,1.73 1.06,2.99 0.43,1.21 0.93,2.24 1.49,3.10 0.52,0.81 1.17,1.42 1.94,1.85 0.73,0.41 1.66,0.64 2.81,0.64 0.01,0 0.02,0 0.03,0 2.31,-0.00 3.74,-0.72 4.53,-2.01 0.93,-1.49 1.83,-3.80 2.67,-6.92 l 7.15,-25.23 7.41,25.25 c 0.55,2.01 1.07,3.64 1.54,4.88 0.44,1.15 1.10,2.11 2.00,2.90 0.82,0.71 2.00,1.12 3.61,1.11 1.57,0.00 2.71,-0.37 3.50,-1.03 0.89,-0.76 1.52,-1.59 1.92,-2.51 0.43,-1.00 1.07,-2.70 1.88,-5.02 l -0.59,-0.20 0,0 0.59,0.19 9.47,-27.78 c 0.78,-2.15 1.19,-3.79 1.24,-4.83 l 0.01,-0.01 0,-0.26 c 0,-1.04 -0.40,-1.97 -1.26,-2.79" style="fill:#f2541b" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/maximise.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/minimise.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/minus.png
Normal file
|
After Width: | Height: | Size: 176 B |
BIN
www/analytics/plugins/Zeitgeist/images/newtab.png
Executable file
|
After Width: | Height: | Size: 509 B |
BIN
www/analytics/plugins/Zeitgeist/images/ok.png
Normal file
|
After Width: | Height: | Size: 626 B |
BIN
www/analytics/plugins/Zeitgeist/images/paypal_subscribe.gif
Executable file
|
After Width: | Height: | Size: 3 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/plus.png
Normal file
|
After Width: | Height: | Size: 174 B |
BIN
www/analytics/plugins/Zeitgeist/images/plus_blue.png
Executable file
|
After Width: | Height: | Size: 157 B |
BIN
www/analytics/plugins/Zeitgeist/images/refresh.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/reload.png
Executable file
|
After Width: | Height: | Size: 892 B |
BIN
www/analytics/plugins/Zeitgeist/images/row_evolution.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/row_evolution_hover.png
Executable file
|
After Width: | Height: | Size: 601 B |
BIN
www/analytics/plugins/Zeitgeist/images/search_bg.png
Normal file
|
After Width: | Height: | Size: 384 B |
BIN
www/analytics/plugins/Zeitgeist/images/search_ico.png
Normal file
|
After Width: | Height: | Size: 175 B |
BIN
www/analytics/plugins/Zeitgeist/images/sites_selection.png
Normal file
|
After Width: | Height: | Size: 120 B |
BIN
www/analytics/plugins/Zeitgeist/images/smileyprog_0.png
Executable file
|
After Width: | Height: | Size: 4 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/smileyprog_1.png
Executable file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/smileyprog_2.png
Executable file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/smileyprog_3.png
Executable file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/smileyprog_4.png
Executable file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/sort_subtable_asc.png
Normal file
|
After Width: | Height: | Size: 173 B |
BIN
www/analytics/plugins/Zeitgeist/images/sort_subtable_asc_light.png
Executable file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/sort_subtable_desc.png
Normal file
|
After Width: | Height: | Size: 171 B |
|
After Width: | Height: | Size: 286 B |
BIN
www/analytics/plugins/Zeitgeist/images/sortasc.png
Normal file
|
After Width: | Height: | Size: 173 B |
BIN
www/analytics/plugins/Zeitgeist/images/sortdesc.png
Normal file
|
After Width: | Height: | Size: 171 B |
BIN
www/analytics/plugins/Zeitgeist/images/star.png
Executable file
|
After Width: | Height: | Size: 757 B |
BIN
www/analytics/plugins/Zeitgeist/images/star_empty.png
Executable file
|
After Width: | Height: | Size: 658 B |
BIN
www/analytics/plugins/Zeitgeist/images/success_medium.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/table.png
Normal file
|
After Width: | Height: | Size: 151 B |
BIN
www/analytics/plugins/Zeitgeist/images/table_more.png
Normal file
|
After Width: | Height: | Size: 200 B |
BIN
www/analytics/plugins/Zeitgeist/images/tagcloud.png
Normal file
|
After Width: | Height: | Size: 202 B |
BIN
www/analytics/plugins/Zeitgeist/images/video_play.png
Executable file
|
After Width: | Height: | Size: 517 B |
BIN
www/analytics/plugins/Zeitgeist/images/warning.png
Normal file
|
After Width: | Height: | Size: 571 B |
BIN
www/analytics/plugins/Zeitgeist/images/warning_medium.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/warning_small.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
www/analytics/plugins/Zeitgeist/images/zoom-out.png
Normal file
|
After Width: | Height: | Size: 289 B |
450
www/analytics/plugins/Zeitgeist/javascripts/ajaxHelper.js
Normal file
|
|
@ -0,0 +1,450 @@
|
|||
/*!
|
||||
* Piwik - Web Analytics
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*/
|
||||
|
||||
/**
|
||||
* global ajax queue
|
||||
*
|
||||
* @type {Array} array holding XhrRequests with automatic cleanup
|
||||
*/
|
||||
var globalAjaxQueue = [];
|
||||
globalAjaxQueue.active = 0;
|
||||
|
||||
/**
|
||||
* Removes all finished requests from the queue.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
globalAjaxQueue.clean = function () {
|
||||
for (var i = this.length; i--;) {
|
||||
if (!this[i] || this[i].readyState == 4) {
|
||||
this.splice(i, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Extend Array.push with automatic cleanup for finished requests
|
||||
*
|
||||
* @return {Object}
|
||||
*/
|
||||
globalAjaxQueue.push = function () {
|
||||
this.active += arguments.length;
|
||||
|
||||
// cleanup ajax queue
|
||||
this.clean();
|
||||
|
||||
// call original array push
|
||||
return Array.prototype.push.apply(this, arguments);
|
||||
};
|
||||
|
||||
/**
|
||||
* Extend with abort function to abort all queued requests
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
globalAjaxQueue.abort = function () {
|
||||
// abort all queued requests
|
||||
for (var i = this.length; i--;) {
|
||||
this[i] && this[i].abort && this[i].abort(); // abort if possible
|
||||
}
|
||||
// remove all elements from array
|
||||
this.splice(0, this.length);
|
||||
|
||||
this.active = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Global ajax helper to handle requests within piwik
|
||||
*
|
||||
* @type {Object}
|
||||
* @constructor
|
||||
*/
|
||||
function ajaxHelper() {
|
||||
|
||||
/**
|
||||
* Format of response
|
||||
* @type {String}
|
||||
*/
|
||||
this.format = 'json';
|
||||
|
||||
/**
|
||||
* Should ajax request be asynchronous
|
||||
* @type {Boolean}
|
||||
*/
|
||||
this.async = true;
|
||||
|
||||
/**
|
||||
* Callback function to be executed on success
|
||||
*/
|
||||
this.callback = function () {};
|
||||
|
||||
/**
|
||||
* Use this.callback if an error is returned
|
||||
* @type {Boolean}
|
||||
*/
|
||||
this.useRegularCallbackInCaseOfError = false;
|
||||
|
||||
/**
|
||||
* Callback function to be executed on error
|
||||
*/
|
||||
this.errorCallback = this.defaultErrorCallback;
|
||||
|
||||
/**
|
||||
* Params to be passed as GET params
|
||||
* @type {Object}
|
||||
* @see ajaxHelper._mixinDefaultGetParams
|
||||
*/
|
||||
this.getParams = {};
|
||||
|
||||
/**
|
||||
* Base URL used in the AJAX request. Can be set by setUrl.
|
||||
* @type {String}
|
||||
* @see ajaxHelper.setUrl
|
||||
*/
|
||||
this.getUrl = 'index.php?';
|
||||
|
||||
/**
|
||||
* Params to be passed as GET params
|
||||
* @type {Object}
|
||||
* @see ajaxHelper._mixinDefaultPostParams
|
||||
*/
|
||||
this.postParams = {};
|
||||
|
||||
/**
|
||||
* Element to be displayed while loading
|
||||
* @type {String}
|
||||
*/
|
||||
this.loadingElement = null;
|
||||
|
||||
/**
|
||||
* Element to be displayed on error
|
||||
* @type {String}
|
||||
*/
|
||||
this.errorElement = '#ajaxError';
|
||||
|
||||
/**
|
||||
* Handle for current request
|
||||
* @type {XMLHttpRequest}
|
||||
*/
|
||||
this.requestHandle = null;
|
||||
|
||||
/**
|
||||
* Adds params to the request.
|
||||
* If params are given more then once, the latest given value is used for the request
|
||||
*
|
||||
* @param {object} params
|
||||
* @param {string} type type of given parameters (POST or GET)
|
||||
* @return {void}
|
||||
*/
|
||||
this.addParams = function (params, type) {
|
||||
if (typeof params == 'string') {
|
||||
params = broadcast.getValuesFromUrl(params);
|
||||
}
|
||||
|
||||
for (var key in params) {
|
||||
if(type.toLowerCase() == 'get') {
|
||||
this.getParams[key] = params[key];
|
||||
} else if(type.toLowerCase() == 'post') {
|
||||
this.postParams[key] = params[key];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the base URL to use in the AJAX request.
|
||||
*
|
||||
* @param {string} url
|
||||
*/
|
||||
this.setUrl = function (url) {
|
||||
this.addParams(broadcast.getValuesFromUrl(url), 'GET');
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets this helper instance ready to send a bulk request. Each argument to this
|
||||
* function is a single request to use.
|
||||
*/
|
||||
this.setBulkRequests = function () {
|
||||
var urls = [];
|
||||
for (var i = 0; i != arguments.length; ++i) {
|
||||
urls.push($.param(arguments[i]));
|
||||
}
|
||||
|
||||
this.addParams({
|
||||
module: 'API',
|
||||
method: 'API.getBulkRequest',
|
||||
urls: urls,
|
||||
format: 'json'
|
||||
}, 'post');
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the callback called after the request finishes
|
||||
*
|
||||
* @param {function} callback Callback function
|
||||
* @return {void}
|
||||
*/
|
||||
this.setCallback = function (callback) {
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set that the callback passed to setCallback() should be used if an application error (i.e. an
|
||||
* Exception in PHP) is returned.
|
||||
*/
|
||||
this.useCallbackInCaseOfError = function () {
|
||||
this.useRegularCallbackInCaseOfError = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set callback to redirect on success handler
|
||||
* &update=1(+x) will be appended to the current url
|
||||
*
|
||||
* @param {object} [params] to modify in redirect url
|
||||
* @return {void}
|
||||
*/
|
||||
this.redirectOnSuccess = function (params) {
|
||||
this.setCallback(function() {
|
||||
piwikHelper.redirect(params);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the callback called in case of an error within the request
|
||||
*
|
||||
* @param {function} callback Callback function
|
||||
* @return {void}
|
||||
*/
|
||||
this.setErrorCallback = function (callback) {
|
||||
this.errorCallback = callback;
|
||||
};
|
||||
|
||||
/**
|
||||
* error callback to use by default
|
||||
*
|
||||
* @param deferred
|
||||
* @param status
|
||||
*/
|
||||
this.defaultErrorCallback = function(deferred, status)
|
||||
{
|
||||
// do not display error message if request was aborted
|
||||
if(status == 'abort') {
|
||||
return;
|
||||
}
|
||||
$('#loadingError').show();
|
||||
setTimeout( function(){
|
||||
$('#loadingError').fadeOut('slow');
|
||||
}, 2000);
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the response format for the request
|
||||
*
|
||||
* @param {string} format response format (e.g. json, html, ...)
|
||||
* @return {void}
|
||||
*/
|
||||
this.setFormat = function (format) {
|
||||
this.format = format;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the div element to show while request is loading
|
||||
*
|
||||
* @param {String} [element] selector for the loading element
|
||||
*/
|
||||
this.setLoadingElement = function (element) {
|
||||
if (!element) {
|
||||
element = '#ajaxLoadingDiv';
|
||||
}
|
||||
this.loadingElement = element;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the div element to show on error
|
||||
*
|
||||
* @param {String} element selector for the error element
|
||||
*/
|
||||
this.setErrorElement = function (element) {
|
||||
if (!element) {
|
||||
return;
|
||||
}
|
||||
this.errorElement = element;
|
||||
};
|
||||
|
||||
/**
|
||||
* Send the request
|
||||
* @param {Boolean} [sync] indicates if the request should be synchronous (defaults to false)
|
||||
* @return {void}
|
||||
*/
|
||||
this.send = function (sync) {
|
||||
if (sync === true) {
|
||||
this.async = false;
|
||||
}
|
||||
|
||||
if ($(this.errorElement).length) {
|
||||
$(this.errorElement).hide();
|
||||
}
|
||||
|
||||
if (this.loadingElement) {
|
||||
$(this.loadingElement).fadeIn();
|
||||
}
|
||||
|
||||
this.requestHandle = this._buildAjaxCall();
|
||||
globalAjaxQueue.push(this.requestHandle);
|
||||
};
|
||||
|
||||
/**
|
||||
* Aborts the current request if it is (still) running
|
||||
* @return {void}
|
||||
*/
|
||||
this.abort = function () {
|
||||
if (this.requestHandle && typeof this.requestHandle.abort == 'function') {
|
||||
this.requestHandle.abort();
|
||||
this.requestHandle = null;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds and sends the ajax requests
|
||||
* @return {XMLHttpRequest}
|
||||
* @private
|
||||
*/
|
||||
this._buildAjaxCall = function () {
|
||||
var that = this;
|
||||
|
||||
var parameters = this._mixinDefaultGetParams(this.getParams);
|
||||
|
||||
var url = this.getUrl;
|
||||
if (url[url.length - 1] != '?') {
|
||||
url += '&';
|
||||
}
|
||||
|
||||
// we took care of encoding &segment properly already, so we don't use $.param for it ($.param URL encodes the values)
|
||||
if(parameters['segment']) {
|
||||
url += 'segment=' + parameters['segment'] + '&';
|
||||
delete parameters['segment'];
|
||||
}
|
||||
if(parameters['date']) {
|
||||
url += 'date=' + decodeURIComponent(parameters['date']) + '&';
|
||||
delete parameters['date'];
|
||||
}
|
||||
url += $.param(parameters);
|
||||
var ajaxCall = {
|
||||
type: 'POST',
|
||||
async: this.async !== false,
|
||||
url: url,
|
||||
dataType: this.format || 'json',
|
||||
error: this.errorCallback,
|
||||
success: function (response) {
|
||||
if (that.loadingElement) {
|
||||
$(that.loadingElement).hide();
|
||||
}
|
||||
|
||||
if (response && response.result == 'error' && !that.useRegularCallbackInCaseOfError) {
|
||||
|
||||
var placeAt = null;
|
||||
var type = 'toast';
|
||||
if ($(that.errorElement).length && response.message) {
|
||||
$(that.errorElement).show();
|
||||
placeAt = that.errorElement;
|
||||
type = null;
|
||||
}
|
||||
|
||||
if (response.message) {
|
||||
|
||||
var UI = require('piwik/UI');
|
||||
var notification = new UI.Notification();
|
||||
notification.show(response.message, {
|
||||
placeat: placeAt,
|
||||
context: 'error',
|
||||
type: type,
|
||||
id: 'ajaxHelper'
|
||||
});
|
||||
notification.scrollToNotification();
|
||||
}
|
||||
|
||||
} else {
|
||||
that.callback(response);
|
||||
}
|
||||
|
||||
--globalAjaxQueue.active;
|
||||
var piwik = window.piwik;
|
||||
if (piwik
|
||||
&& piwik.ajaxRequestFinished
|
||||
) {
|
||||
piwik.ajaxRequestFinished();
|
||||
}
|
||||
},
|
||||
data: this._mixinDefaultPostParams(this.postParams)
|
||||
};
|
||||
|
||||
return $.ajax(ajaxCall);
|
||||
};
|
||||
|
||||
/**
|
||||
* Mixin the default parameters to send as POST
|
||||
*
|
||||
* @param {object} params parameter object
|
||||
* @return {object}
|
||||
* @private
|
||||
*/
|
||||
this._mixinDefaultPostParams = function (params) {
|
||||
|
||||
var defaultParams = {
|
||||
token_auth: piwik.token_auth
|
||||
};
|
||||
|
||||
for (var index in defaultParams) {
|
||||
|
||||
if (!params[index]) {
|
||||
|
||||
params[index] = defaultParams[index];
|
||||
}
|
||||
}
|
||||
|
||||
return params;
|
||||
};
|
||||
|
||||
/**
|
||||
* Mixin the default parameters to send as GET
|
||||
*
|
||||
* @param {object} params parameter object
|
||||
* @return {object}
|
||||
* @private
|
||||
*/
|
||||
this._mixinDefaultGetParams = function (params) {
|
||||
|
||||
var defaultParams = {
|
||||
idSite: piwik.idSite || broadcast.getValueFromUrl('idSite'),
|
||||
period: piwik.period || broadcast.getValueFromUrl('period'),
|
||||
segment: broadcast.getValueFromHash('segment', window.location.href.split('#')[1])
|
||||
};
|
||||
|
||||
// never append token_auth to url
|
||||
if (params.token_auth) {
|
||||
params.token_auth = null;
|
||||
delete params.token_auth;
|
||||
}
|
||||
|
||||
for (var key in defaultParams) {
|
||||
if (!params[key] && !this.postParams[key] && defaultParams[key]) {
|
||||
params[key] = defaultParams[key];
|
||||
}
|
||||
}
|
||||
|
||||
// handle default date & period if not already set
|
||||
if (!params.date && !this.postParams.date) {
|
||||
params.date = piwik.currentDateString || broadcast.getValueFromUrl('date');
|
||||
if (params.period == 'range' && piwik.currentDateString) {
|
||||
params.date = piwik.startDateString + ',' + params.date;
|
||||
}
|
||||
}
|
||||
|
||||
return params;
|
||||
};
|
||||
|
||||
return this;
|
||||
}
|
||||
464
www/analytics/plugins/Zeitgeist/javascripts/piwikHelper.js
Normal file
|
|
@ -0,0 +1,464 @@
|
|||
/*!
|
||||
* Piwik - Web Analytics
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*/
|
||||
|
||||
|
||||
function _pk_translate(translationStringId, values) {
|
||||
|
||||
function sprintf (translation, values) {
|
||||
var index = 0;
|
||||
return (translation+'').replace(/(%(.\$)?s+)/g, function(match, number) {
|
||||
|
||||
var replaced = match;
|
||||
if (match != '%s') {
|
||||
index = parseInt(match.substr(1, 1)) - 1;
|
||||
}
|
||||
|
||||
if (typeof values[index] != 'undefined') {
|
||||
replaced = values[index];
|
||||
}
|
||||
|
||||
index++;
|
||||
return replaced;
|
||||
});
|
||||
}
|
||||
|
||||
if( typeof(piwik_translations[translationStringId]) != 'undefined' ){
|
||||
var translation = piwik_translations[translationStringId];
|
||||
if (typeof values != 'undefined' && values && values.length) {
|
||||
return sprintf(translation, values);
|
||||
}
|
||||
|
||||
return translation;
|
||||
}
|
||||
|
||||
return "The string "+translationStringId+" was not loaded in javascript. Make sure it is added in the Translate.getClientSideTranslationKeys hook.";
|
||||
}
|
||||
|
||||
var piwikHelper = {
|
||||
|
||||
htmlDecode: function(value)
|
||||
{
|
||||
return $('<div/>').html(value).text();
|
||||
},
|
||||
|
||||
/**
|
||||
* a nice cross-browser logging function
|
||||
*/
|
||||
log: function() {
|
||||
try {
|
||||
console.log.apply(console, arguments); // Firefox, Chrome
|
||||
} catch (e) {
|
||||
try {
|
||||
opera.postError.apply(opera, arguments); // Opera
|
||||
} catch (f) {
|
||||
// don't alert as log is not considered to be important enough
|
||||
// (as opposed to piwikHelper.error)
|
||||
//alert(Array.prototype.join.call(arguments, ' ')); // MSIE
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
error: function() {
|
||||
try {
|
||||
console.error.apply(console, arguments); // Firefox, Chrome
|
||||
} catch (e) {
|
||||
try {
|
||||
opera.postError.apply(opera, arguments); // Opera
|
||||
} catch (f) {
|
||||
alert(Array.prototype.join.call(arguments, ' ')); // MSIE
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
htmlEntities: function(value)
|
||||
{
|
||||
var findReplace = [[/&/g, "&"], [/</g, "<"], [/>/g, ">"], [/"/g, """]];
|
||||
for(var item in findReplace) {
|
||||
value = value.replace(findReplace[item][0], findReplace[item][1]);
|
||||
}
|
||||
return value;
|
||||
},
|
||||
|
||||
/**
|
||||
* Add break points to a string so that it can be displayed more compactly
|
||||
*/
|
||||
addBreakpoints: function(text, breakpointMarkup)
|
||||
{
|
||||
return text.replace(/([\/&=?\.%#:_-])/g, '$1' +
|
||||
(typeof breakpointMarkup == 'undefined' ? '<wbr>​' : breakpointMarkup));
|
||||
// ​ is for internet explorer
|
||||
},
|
||||
|
||||
/**
|
||||
* Add breakpoints to a URL
|
||||
* urldecodes and encodes htmlentities to display utf8 urls without XSS vulnerabilities
|
||||
*/
|
||||
addBreakpointsToUrl: function(url)
|
||||
{
|
||||
try {
|
||||
url = decodeURIComponent(url);
|
||||
} catch (e) {
|
||||
// might throw "URI malformed"
|
||||
}
|
||||
url = piwikHelper.addBreakpoints(url, '|||');
|
||||
url = $(document.createElement('p')).text(url).html();
|
||||
url = url.replace(/\|\|\|/g, '<wbr />​'); // ​ is for internet explorer
|
||||
return url;
|
||||
},
|
||||
|
||||
/**
|
||||
* As we still have a lot of old jQuery code and copy html from node to node we sometimes have to trigger the
|
||||
* compiling of angular components manually.
|
||||
*
|
||||
* @param selector
|
||||
*/
|
||||
compileAngularComponents: function (selector) {
|
||||
var $element = $(selector);
|
||||
|
||||
angular.element(document).injector().invoke(function($compile) {
|
||||
var scope = angular.element($element).scope();
|
||||
$compile($element)(scope);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Displays a Modal dialog. Text will be taken from the DOM node domSelector.
|
||||
* Given callback handles will be mapped to the buttons having a role attriute
|
||||
*
|
||||
* Dialog will be closed when a button is clicked and callback handle will be
|
||||
* called, if one was given for the clicked role
|
||||
*
|
||||
* @param {string} domSelector domSelector for modal window
|
||||
* @param {object} handles callback functions for available roles
|
||||
* @return {void}
|
||||
*/
|
||||
modalConfirm: function( domSelector, handles )
|
||||
{
|
||||
var domElem = $(domSelector);
|
||||
var buttons = [];
|
||||
|
||||
$('[role]', domElem).each(function(){
|
||||
var role = $(this).attr('role');
|
||||
var title = $(this).attr('title');
|
||||
var text = $(this).val();
|
||||
|
||||
var button = {text: text};
|
||||
|
||||
if(typeof handles[role] == 'function') {
|
||||
button.click = function(){$(this).dialog("close"); handles[role].apply()};
|
||||
} else {
|
||||
button.click = function(){$(this).dialog("close");};
|
||||
}
|
||||
|
||||
if (title) {
|
||||
button.title = title;
|
||||
}
|
||||
buttons.push(button);
|
||||
$(this).hide();
|
||||
});
|
||||
|
||||
domElem.dialog({
|
||||
resizable: false,
|
||||
modal: true,
|
||||
buttons: buttons,
|
||||
width: 650,
|
||||
position: ['center', 90]
|
||||
});
|
||||
},
|
||||
|
||||
getQueryStringWithParametersModified: function (queryString, newParameters) {
|
||||
if (queryString != '') {
|
||||
var r, i, keyvalue, keysvalues = newParameters.split('&');
|
||||
var appendUrl = '';
|
||||
for (i = 0; i < keysvalues.length; i++) {
|
||||
keyvalue = keysvalues[i].split('=');
|
||||
r = new RegExp('(^|[?&])' + keyvalue[0] + '=[^&]*');
|
||||
queryString = queryString.replace(r, '');
|
||||
|
||||
// empty value, eg. &segment=, we remove the parameter from URL entirely
|
||||
if (keyvalue[1].length == 0) {
|
||||
continue;
|
||||
}
|
||||
appendUrl += '&' + keyvalue[0] + '=' + keyvalue[1];
|
||||
}
|
||||
queryString += appendUrl;
|
||||
if (queryString[0] == '&') {
|
||||
queryString = '?' + queryString.substring(1);
|
||||
}
|
||||
} else {
|
||||
queryString = '?' + newParameters;
|
||||
}
|
||||
|
||||
return queryString;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the current query string with the given parameters modified
|
||||
* @param {String} newparams parameters to be modified
|
||||
* @return {String}
|
||||
*/
|
||||
getCurrentQueryStringWithParametersModified: function(newparams)
|
||||
{
|
||||
var queryString = String(window.location.search);
|
||||
if (newparams) {
|
||||
queryString = this.getQueryStringWithParametersModified(queryString, newparams);
|
||||
}
|
||||
return String(window.location.pathname) + queryString;
|
||||
},
|
||||
|
||||
/**
|
||||
* Given param1=v1¶m2=k2
|
||||
* returns: { "param1": "v1", "param2": "v2" }
|
||||
*
|
||||
* @param query string
|
||||
* @return {Object}
|
||||
*/
|
||||
getArrayFromQueryString: function (query) {
|
||||
var params = {};
|
||||
var vars = query.split("&");
|
||||
for (var i=0;i<vars.length;i++) {
|
||||
var keyValue = vars[i].split("=");
|
||||
// Jquery will urlencode these, but we wish to keep the current raw value
|
||||
// use case: &segment=visitorId%3D%3Dabc...
|
||||
params[keyValue[0]] = decodeURIComponent(keyValue[1]);
|
||||
}
|
||||
return params;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns query string for an object of key,values
|
||||
* Note: we don't use $.param from jquery as it doesn't return array values the PHP way (returns a=v1&a=v2 instead of a[]=v1&a[]=v2)
|
||||
* Example:
|
||||
* piwikHelper.getQueryStringFromParameters({"a":"va","b":["vb","vc"],"c":1})
|
||||
* Returns:
|
||||
* a=va&b[]=vb&b[]=vc&c=1
|
||||
* @param {object} parameters
|
||||
* @return {string}
|
||||
*/
|
||||
getQueryStringFromParameters: function(parameters)
|
||||
{
|
||||
var queryString = '';
|
||||
if(!parameters || parameters.length==0) {
|
||||
return queryString;
|
||||
}
|
||||
for(var name in parameters) {
|
||||
var value = parameters[name];
|
||||
if(typeof value == 'object') {
|
||||
for(var i in value) {
|
||||
queryString += name + '[]=' + value[i] + '&';
|
||||
}
|
||||
} else {
|
||||
queryString += name + '=' + value + '&';
|
||||
}
|
||||
}
|
||||
return queryString.substring(0, queryString.length-1);
|
||||
},
|
||||
|
||||
/**
|
||||
* Displays the given ajax error message within the given id element
|
||||
* @param {string} message error message
|
||||
* @param {string} errorDivID id of the domNode (defaults to ajaxError)
|
||||
* @return {void}
|
||||
*/
|
||||
showAjaxError: function( message, errorDivID )
|
||||
{
|
||||
errorDivID = errorDivID || 'ajaxError';
|
||||
$('#'+errorDivID).html(message).show();
|
||||
},
|
||||
|
||||
/**
|
||||
* Hides the error message with the given id
|
||||
* @param {string} [errorDivID] id of the domNode (defaults to ajaxError)
|
||||
* @return {void}
|
||||
*/
|
||||
hideAjaxError: function(errorDivID)
|
||||
{
|
||||
errorDivID = errorDivID || 'ajaxError';
|
||||
$('#'+errorDivID).hide();
|
||||
},
|
||||
|
||||
/**
|
||||
* Shows the loading message with the given Id
|
||||
* @param {string} [loadingDivID] id of the domNode (defaults to ajaxLoading)
|
||||
* @return {void}
|
||||
*/
|
||||
showAjaxLoading: function(loadingDivID)
|
||||
{
|
||||
loadingDivID = loadingDivID || 'ajaxLoadingDiv';
|
||||
$('#'+loadingDivID).show();
|
||||
},
|
||||
|
||||
/**
|
||||
* Hides the loading message with the given id
|
||||
* @param {string} [loadingDivID] id of the domNode (defaults to ajaxLoading)
|
||||
* @return {void}
|
||||
*/
|
||||
hideAjaxLoading: function(loadingDivID)
|
||||
{
|
||||
loadingDivID = loadingDivID || 'ajaxLoadingDiv';
|
||||
$('#'+loadingDivID).hide();
|
||||
},
|
||||
|
||||
/**
|
||||
* Reloads the page after the given period
|
||||
* @param {int} timeoutPeriod
|
||||
* @return void
|
||||
*/
|
||||
refreshAfter: function(timeoutPeriod)
|
||||
{
|
||||
if(timeoutPeriod == 0) {
|
||||
location.reload();
|
||||
} else {
|
||||
setTimeout("location.reload();",timeoutPeriod);
|
||||
}
|
||||
},
|
||||
|
||||
redirect: function (params) {
|
||||
// add updated=X to the URL so that a "Your changes have been saved" message is displayed
|
||||
if (typeof params == 'object') {
|
||||
params = this.getQueryStringFromParameters(params);
|
||||
}
|
||||
var urlToRedirect = this.getCurrentQueryStringWithParametersModified(params);
|
||||
var updatedUrl = new RegExp('&updated=([0-9]+)');
|
||||
var updatedCounter = updatedUrl.exec(urlToRedirect);
|
||||
if (!updatedCounter) {
|
||||
urlToRedirect += '&updated=1';
|
||||
} else {
|
||||
updatedCounter = 1 + parseInt(updatedCounter[1]);
|
||||
urlToRedirect = urlToRedirect.replace(new RegExp('(&updated=[0-9]+)'), '&updated=' + updatedCounter);
|
||||
}
|
||||
var currentHashStr = window.location.hash;
|
||||
if(currentHashStr.length > 0) {
|
||||
urlToRedirect += currentHashStr;
|
||||
}
|
||||
this.redirectToUrl(urlToRedirect);
|
||||
},
|
||||
|
||||
/**
|
||||
* Redirect to the given url
|
||||
* @param {string} url
|
||||
*/
|
||||
redirectToUrl: function(url)
|
||||
{
|
||||
window.location = url;
|
||||
},
|
||||
|
||||
/**
|
||||
* Scrolls the window to the jquery element 'elem'
|
||||
* if the top of the element is not currently visible on screen
|
||||
* @param {string} elem Selector for the DOM node to scroll to, eg. '#myDiv'
|
||||
* @param {int} [time] Specifies the duration of the animation in ms
|
||||
* @param {boolean} [forceScroll] Whether to force scroll to an element.
|
||||
* @return {void}
|
||||
*/
|
||||
lazyScrollTo: function(elem, time, forceScroll)
|
||||
{
|
||||
var elemTop = $(elem).offset().top;
|
||||
// only scroll the page if the graph is not visible
|
||||
if (elemTop < $(window).scrollTop()
|
||||
|| elemTop > $(window).scrollTop()+$(window).height()
|
||||
|| forceScroll
|
||||
) {
|
||||
// scroll the page smoothly to the graph
|
||||
$.scrollTo(elem, time);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the filtered/converted content of a textarea to be used for api requests
|
||||
* @param {string} textareaContent
|
||||
* @return {string}
|
||||
*/
|
||||
getApiFormatTextarea: function (textareaContent)
|
||||
{
|
||||
if(typeof textareaContent == 'undefined') {
|
||||
return '';
|
||||
}
|
||||
return textareaContent.trim().split("\n").join(',');
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
String.prototype.trim = function() {
|
||||
return this.replace(/^\s+|\s+$/g,"");
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns true if the event keypress passed in parameter is the ENTER key
|
||||
* @param {Event} e current window event
|
||||
* @return {boolean}
|
||||
*/
|
||||
function isEnterKey(e)
|
||||
{
|
||||
return (window.event?window.event.keyCode:e.which)==13;
|
||||
}
|
||||
|
||||
// workarounds
|
||||
(function($){
|
||||
try {
|
||||
// this code is not vital, so we make sure any errors are ignored
|
||||
|
||||
//--------------------------------------
|
||||
//
|
||||
// monkey patch that works around bug in arc function of some browsers where
|
||||
// nothing gets drawn if angles are 2 * PI apart and in counter-clockwise direction.
|
||||
// affects some versions of chrome & IE 8
|
||||
//
|
||||
//--------------------------------------
|
||||
var oldArc = CanvasRenderingContext2D.prototype.arc;
|
||||
CanvasRenderingContext2D.prototype.arc = function(x, y, r, sAngle, eAngle, clockwise) {
|
||||
if (Math.abs(eAngle - sAngle - Math.PI * 2) < 0.000001 && !clockwise)
|
||||
eAngle -= 0.000001;
|
||||
oldArc.call(this, x, y, r, sAngle, eAngle, clockwise);
|
||||
};
|
||||
|
||||
//--------------------------------------
|
||||
//
|
||||
// Array.reduce is not available in IE8 but used in Jqplot
|
||||
//
|
||||
//--------------------------------------
|
||||
if ('function' !== typeof Array.prototype.reduce) {
|
||||
Array.prototype.reduce = function(callback, opt_initialValue){
|
||||
'use strict';
|
||||
if (null === this || 'undefined' === typeof this) {
|
||||
// At the moment all modern browsers, that support strict mode, have
|
||||
// native implementation of Array.prototype.reduce. For instance, IE8
|
||||
// does not support strict mode, so this check is actually useless.
|
||||
throw new TypeError(
|
||||
'Array.prototype.reduce called on null or undefined');
|
||||
}
|
||||
if ('function' !== typeof callback) {
|
||||
throw new TypeError(callback + ' is not a function');
|
||||
}
|
||||
var index, value,
|
||||
length = this.length >>> 0,
|
||||
isValueSet = false;
|
||||
if (1 < arguments.length) {
|
||||
value = opt_initialValue;
|
||||
isValueSet = true;
|
||||
}
|
||||
for (index = 0; length > index; ++index) {
|
||||
if (this.hasOwnProperty(index)) {
|
||||
if (isValueSet) {
|
||||
value = callback(value, this[index], index, this);
|
||||
}
|
||||
else {
|
||||
value = this[index];
|
||||
isValueSet = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!isValueSet) {
|
||||
throw new TypeError('Reduce of empty array with no initial value');
|
||||
}
|
||||
return value;
|
||||
};
|
||||
}
|
||||
} catch (e) {}
|
||||
}(jQuery));
|
||||
|
||||
5
www/analytics/plugins/Zeitgeist/plugin.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"name": "Zeitgeist",
|
||||
"description": "Zeitgeist is the base theme for Piwik 2 from which other themes automatically inherit. ",
|
||||
"theme": true
|
||||
}
|
||||
28
www/analytics/plugins/Zeitgeist/stylesheets/base.less
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
/* base.less is a standalone Less file */
|
||||
|
||||
/* General styles */
|
||||
@import "general/_default.less";
|
||||
|
||||
@import "general/_utils.less";
|
||||
|
||||
@import "general/_form.less";
|
||||
|
||||
@import "general/_jqueryUI.less";
|
||||
|
||||
@import "general/_misc.less";
|
||||
|
||||
/* Component styles */
|
||||
@import "ui/_header.less";
|
||||
|
||||
@import "ui/_headerMessage.less";
|
||||
|
||||
@import "../../CoreHome/angularjs/siteselector/siteselector.less";
|
||||
|
||||
@import "ui/_periodSelect.less";
|
||||
|
||||
@import "ui/_languageSelect.less";
|
||||
|
||||
@import "ui/_loading.less";
|
||||
|
||||
/* Remote components */
|
||||
@import "../../CoreHome/stylesheets/_donate.less";
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
/* reset style */
|
||||
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
abbr {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
form {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1.33;
|
||||
background-color: white;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color:#F6F9F9;
|
||||
border: 1px dashed;
|
||||
border-left: 5px solid #4B4BD5;
|
||||
direction:ltr;
|
||||
display:table;
|
||||
font-size:100%;
|
||||
margin:12px 2px 0;
|
||||
padding:5px 50px 5px 15px;
|
||||
text-align:left;
|
||||
line-height:1.3em;
|
||||
font-family: "Courier New" Courier monospace;
|
||||
}
|
||||
|
||||
pre.code-pre {
|
||||
white-space:pre-wrap;
|
||||
}
|
||||
|
||||
/* remember to define focus styles! */
|
||||
:focus {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* remember to highlight inserts somehow! */
|
||||
ins {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
del {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
||||
/* form general */
|
||||
label {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
textarea {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
input, select, textarea {
|
||||
border-radius: 4px;
|
||||
border: 1px solid #d4d4d4;
|
||||
background: #fff url(plugins/Zeitgeist/images/inp_bg.png) repeat-x 0 0;
|
||||
padding: 3px 10px;
|
||||
color: #255792;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
input[disabled] {
|
||||
background: #E9E9E9 none;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
select {
|
||||
padding-right: 3px;
|
||||
padding-left: 7px;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
/* start piwik styles */
|
||||
body {
|
||||
font-family: Arial, Verdana, Helvetica, sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #255792;
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#root {
|
||||
margin: 0 10px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* Make sure the scroll bar is always displayed so the content does not shift when reloading menu with/without scrollbar */
|
||||
html {
|
||||
overflow-y: scroll;
|
||||
}
|
||||
126
www/analytics/plugins/Zeitgeist/stylesheets/general/_form.less
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
.submit {
|
||||
clear: both;
|
||||
color: #fff;
|
||||
font: 18px Arial, Helvetica, sans-serif;
|
||||
padding: 3px 10px;
|
||||
border-radius: 4px;
|
||||
border: 0;
|
||||
background: #847b6d url(plugins/Zeitgeist/images/dashboard_h_bg_hover.png) repeat-x 0 0;
|
||||
float: right;
|
||||
margin: 12px 0 10px 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* on admin screen, Save button aligned on the left */
|
||||
.admin .submit {
|
||||
margin-left: 50px;
|
||||
float: none;
|
||||
}
|
||||
|
||||
.admin .entityContainer .submit {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.entityContainer .link_but {
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
margin: 0 10px 0 0;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.entityContainer .link_but img {
|
||||
white-space: nowrap;
|
||||
margin: 0 1px 0 0 !important;
|
||||
}
|
||||
|
||||
.entityAddContainer .entityTable th, #entityEditContainer .entityTable th, #entityEditContainer .entityTable td {
|
||||
vertical-align: middle !important;
|
||||
}
|
||||
|
||||
.entityAddContainer .entityTable tr td.first {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.entityAddContainer tr:hover {
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
/* Add / Edit / List entities */
|
||||
.entityContainer {
|
||||
width: 800px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.entityInlineHelp {
|
||||
color: #9B9B9B;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.entityTable {
|
||||
border-radius: 4px !important;
|
||||
border-top: 1px solid #cdc8bf !important;
|
||||
border-bottom: 1px solid #948c7d !important;
|
||||
}
|
||||
|
||||
.entityTable tr th {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.entityTable tr td.first, .entityTable tr th.first {
|
||||
border-left: 0 !important;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.entityTable tr th {
|
||||
white-space: nowrap;
|
||||
padding-top: 10px !important;
|
||||
padding-bottom: 10px !important;
|
||||
}
|
||||
|
||||
.entityTable tr td, .entityTable tr th {
|
||||
border-bottom: 0 !important;
|
||||
border-top: 1px solid #E7E7E7 !important;
|
||||
}
|
||||
|
||||
table.entityTable tr td a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.entityTable tr.highlighted td {
|
||||
background-color: #ECF9DD;
|
||||
}
|
||||
|
||||
/* cancel button below Forms */
|
||||
.entityCancel {
|
||||
float: right;
|
||||
clear: both;
|
||||
padding: 10px 0;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
/* List with grey arrows on left */
|
||||
.entityList ul.listCircle {
|
||||
font-weight: normal;
|
||||
list-style: none;
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
.entityList ul li {
|
||||
background: #fff url(plugins/Zeitgeist/images/li_dbl_gray.gif) no-repeat 6px 10px;
|
||||
padding: 0 0 0 21px;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.entityList ul li .dimension {
|
||||
cursor: pointer;
|
||||
border-bottom: 1px solid #d0d0d0;
|
||||
}
|
||||
|
||||
.entityList ul li.activeDimension .dimension {
|
||||
font-weight: bold;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.entityList ul.listCircle li a {
|
||||
color: #000;
|
||||
}
|
||||
|
|
@ -0,0 +1,235 @@
|
|||
/* jQuery Tooltip */
|
||||
#tooltip h3 {
|
||||
font-weight: normal;
|
||||
font-size: .85em;
|
||||
font-style: italic;
|
||||
color: #162540;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#tooltip {
|
||||
position: absolute;
|
||||
z-index: 3000;
|
||||
border: 1px solid #E4E2D7 /*#111*/;
|
||||
padding: 5px 7px 5px 7px;
|
||||
background-color: #F5F7FF;
|
||||
opacity: 0.95;
|
||||
}
|
||||
|
||||
/* jQuery Ajax */
|
||||
.ajaxError {
|
||||
color: red;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
width: 550px;
|
||||
border: 3px solid red;
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
border-radius: 9px;
|
||||
}
|
||||
|
||||
.ajaxSuccess {
|
||||
font-size: 14px;
|
||||
margin: 10px;
|
||||
padding: 15px;
|
||||
color: #301901;
|
||||
display: inline-block;
|
||||
background-color: #ffffe0;
|
||||
border: 1px solid #e6db55;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
/* extending the jquery UI css, for visitor Log popover */
|
||||
.ui-widget .dataTable {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* for inline help */
|
||||
.ui-widget {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
.ui-inline-help {
|
||||
display: inline-block;
|
||||
background-color: #f4f8fa;
|
||||
margin: 0px;
|
||||
font-size: 12px;
|
||||
padding: 20px;
|
||||
color: #3a87ad;
|
||||
opacity: 1.0;
|
||||
border-left: 1px solid #bce8f1;
|
||||
text-align: justify;
|
||||
line-height: 1.3em;
|
||||
max-width: 550px;
|
||||
}
|
||||
|
||||
div.ui-state-highlight {
|
||||
border-color: #545903;
|
||||
background-color: #FFFFD6;
|
||||
}
|
||||
|
||||
.ui-datepicker {
|
||||
border: 1px solid #fff !important;
|
||||
border-radius: 0 !important;
|
||||
font-size: 11px !important;
|
||||
padding: 0 !important;
|
||||
width: 160px !important;
|
||||
}
|
||||
|
||||
.ui-datepicker-header {
|
||||
background: #847b6d url(plugins/Zeitgeist/images/dashboard_h_bg_hover.png) repeat-x 0 0 !important;
|
||||
color: #fff !important;
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
|
||||
.ui-datepicker select {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.ui-datepicker-header .ui-icon-circle-triangle-w {
|
||||
background: url(plugins/Zeitgeist/images/datepicker_arr_l.png) no-repeat 5px 4px !important;
|
||||
}
|
||||
|
||||
.ui-datepicker-header .ui-icon-circle-triangle-e {
|
||||
background: url(plugins/Zeitgeist/images/datepicker_arr_r.png) no-repeat 6px 4px !important;
|
||||
}
|
||||
|
||||
.ui-datepicker .ui-datepicker-next-hover,
|
||||
.ui-datepicker .ui-datepicker-prev-hover {
|
||||
background: none !important;
|
||||
border-color: #f1f0eb !important;
|
||||
}
|
||||
|
||||
.ui-datepicker table {
|
||||
font-size: 11px !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.ui-datepicker th {
|
||||
color: #887f71 !important;
|
||||
font-weight: normal !important;
|
||||
background: #f1f0eb !important;
|
||||
padding: 3px 0 !important;
|
||||
}
|
||||
|
||||
.ui-datepicker th.ui-datepicker-week-end {
|
||||
background: #d4d0c7 !important;
|
||||
}
|
||||
|
||||
.ui-datepicker td {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.ui-state-default {
|
||||
border: 1px solid #f2f6f9 !important;
|
||||
border-right: 0 !important;
|
||||
background: #fff !important;
|
||||
color: #000 !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.ui-datepicker td.ui-datepicker-week-end .ui-state-default {
|
||||
background: #f6f6f6 !important;
|
||||
}
|
||||
|
||||
.ui-datepicker td.ui-datepicker-current-period a.ui-state-default, td .ui-state-active, .ui-datepicker td.ui-datepicker-current-period a.ui-state-active, .ui-datepicker td.ui-datepicker-week-end .ui-state-active, .ui-datepicker td.ui-datepicker-other-month.ui-datepicker-current-period {
|
||||
border-color: #887f71 !important;
|
||||
background: #887f71 !important;
|
||||
color: #fff !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
.ui-datepicker td .ui-state-hover, .ui-datepicker .ui-datepicker td.ui-datepicker-current-period a.ui-state-hover, .ui-datepicker td.ui-datepicker-week-end .ui-state-hover {
|
||||
background: #e5e3e0 !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.ui-datepicker td.ui-datepicker-current-period .ui-state-default.ui-state-hover, .ui-datepicker td.ui-datepicker-current-period .ui-state-hover:hover {
|
||||
background: #978c7c !important;
|
||||
border-color: #978c7c !important;
|
||||
}
|
||||
|
||||
td.ui-datepicker-other-month.ui-state-hover {
|
||||
background: #e5e3e0 !important;
|
||||
color: #000 !important;
|
||||
opacity: 1 !important;
|
||||
border-style: none;
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
td.ui-datepicker-other-month.ui-state-hover.ui-datepicker-current-period {
|
||||
background: #978c7c !important;
|
||||
}
|
||||
|
||||
.ui-datepicker-month:disabled {
|
||||
border-color: #ccc !important;
|
||||
background: #f5f3f0 !important;
|
||||
}
|
||||
|
||||
/* Piwik jQuery UI Tooltips */
|
||||
|
||||
.ui-tooltip {
|
||||
position: absolute;
|
||||
z-index: 2000;
|
||||
text-align: left;
|
||||
background: #f7f7f7;
|
||||
color: #444;
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
border: 1px solid #e4e5e4;
|
||||
padding: 5px 10px 6px 10px;
|
||||
border-radius: 4px;
|
||||
-moz-box-shadow: 1px 1px 2px #666;
|
||||
-webkit-box-shadow: 1px 1px 2px #666;
|
||||
box-shadow: 1px 1px 2px #666;
|
||||
overflow: hidden;
|
||||
max-width: 600px;
|
||||
min-width: 50px;
|
||||
line-height: 14px;
|
||||
left: -28000px;
|
||||
top: -28000px;
|
||||
display: none;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
.ui-tooltip h3 {
|
||||
font-weight: bold;
|
||||
color: #7E7363;
|
||||
}
|
||||
|
||||
.ui-tooltip h3 {
|
||||
font-size: 12px;
|
||||
margin: 0 0 2px 0;
|
||||
}
|
||||
|
||||
body .ui-tooltip.small {
|
||||
font-size: 11px;
|
||||
padding: 3px 5px 3px 6px;
|
||||
}
|
||||
|
||||
/* Popover */
|
||||
|
||||
.ui-dialog .ui-widget-header {
|
||||
background: none;
|
||||
border: 0;
|
||||
font: bold 18px Arial, Helvetica, sans-serif;
|
||||
color: #7e7363;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.ui-dialog-titlebar-help {
|
||||
position: absolute;
|
||||
right: 33px;
|
||||
top: 50%;
|
||||
width: 16px;
|
||||
margin: -8px 0 0 0;
|
||||
padding: 0;
|
||||
height: 16px;
|
||||
background: url(plugins/Zeitgeist/images/help.png);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.ui-dialog ~ .ui-dialog {
|
||||
border: 1px solid #aaa;
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
#topApiRef {
|
||||
color: #95AECB;
|
||||
}
|
||||
|
||||
.exception-backtrace {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.section-toggler-link {
|
||||
font-size: .8em;
|
||||
font-style: italic;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.section-toggler-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.metricEvolution {
|
||||
display: inline-block;
|
||||
font-size: 9pt;
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
.metricEvolution > .positive-evolution {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.metricEvolution > .negative-evolution {
|
||||
color: #e02a3b;
|
||||
}
|
||||
|
||||
.reportsByDimensionView > .entityList {
|
||||
float: left;
|
||||
width: 220px;
|
||||
min-height: 450px;
|
||||
}
|
||||
|
||||
.dimensionCategory {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/* br clear="all" deprecated */
|
||||
br.clearAll {
|
||||
clear: both;
|
||||
height: 0;
|
||||
line-height: 0;
|
||||
font-size: 0; /*for IE*/
|
||||
}
|
||||
|
||||
br.clear,
|
||||
div.clear {
|
||||
clear: both;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* IE < 9 will use this */
|
||||
html.old-ie .ie-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.centerLargeDiv {
|
||||
width: 850px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.center {
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
35
www/analytics/plugins/Zeitgeist/stylesheets/ieonly.css
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
.ui-dialog.ui-widget-content {
|
||||
z-index: 1003!important;
|
||||
}
|
||||
|
||||
.ui-widget-overlay {
|
||||
z-index: 1002!important;
|
||||
}
|
||||
|
||||
.widgetContent {
|
||||
width: 99.8%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#topBars {
|
||||
z-index: 300!important;
|
||||
}
|
||||
|
||||
.sites_autocomplete, .sites_autocomplete .custom_select {
|
||||
z-index: 200!important;
|
||||
}
|
||||
|
||||
.submit {
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
input[type=checkbox], input[type=radio] {
|
||||
border: none;
|
||||
background: transparent none;
|
||||
}
|
||||
|
||||
.jqplot-seriespicker-popover p input {
|
||||
width: 15px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
1
www/analytics/plugins/Zeitgeist/stylesheets/rtl.css
Normal file
|
|
@ -0,0 +1 @@
|
|||
/* Used for testing body { background-color:red; } */
|
||||
100
www/analytics/plugins/Zeitgeist/stylesheets/simple_structure.css
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
body#simple {
|
||||
background: #eee;
|
||||
}
|
||||
#contentsimple {
|
||||
background: #fff;
|
||||
color: #000;
|
||||
font-family: Arial, Georgia, "Times New Roman", Times, serif;
|
||||
padding: 1em 2em;
|
||||
width:780px;
|
||||
margin: 30px auto auto;
|
||||
border-radius: 12px;
|
||||
display: table; /* Contains floating children */
|
||||
}
|
||||
#h1 {
|
||||
color: #006;
|
||||
font-size: 45px;
|
||||
font-weight: lighter;
|
||||
}
|
||||
#subh1 {
|
||||
color: #444444;
|
||||
font-size: 17pt;
|
||||
margin-left: 15px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
#titleUpdate {
|
||||
font-size: 18px;
|
||||
color: #7e7363;
|
||||
clear:both;
|
||||
}
|
||||
#subh1 a {
|
||||
color: #444;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
#title img{
|
||||
vertical-align:bottom;
|
||||
}
|
||||
#title {
|
||||
padding-bottom:15px;
|
||||
border-bottom:1px solid #F0F0F0;
|
||||
font:42px Georgia, serif;
|
||||
}
|
||||
p, dt {
|
||||
line-height: 120%;
|
||||
padding-bottom: 1em;
|
||||
margin:10px;
|
||||
}
|
||||
a { color: #006; }
|
||||
#logo { margin-bottom: 2em; }
|
||||
.submit {
|
||||
font-size:18pt;
|
||||
padding: 5px 7px 7px;
|
||||
border: 1px solid #a3a3a3;
|
||||
border-radius: 3px;
|
||||
color: #246;
|
||||
background: #e5e5e5;
|
||||
text-decoration: none;
|
||||
}
|
||||
.submit:hover {
|
||||
color: #d54e21;
|
||||
border-color: #535353;
|
||||
}
|
||||
.success {
|
||||
padding-bottom:15px;
|
||||
color:#1F7F4A;
|
||||
font-size:25pt;
|
||||
}
|
||||
.warning {
|
||||
font-size:130%;
|
||||
font-weight:bold;
|
||||
border: 1px solid #ff5502;
|
||||
}
|
||||
.warning, .warning a {
|
||||
color:#ff5502;
|
||||
}
|
||||
.error {
|
||||
font-weight:bold;
|
||||
font-size:130%;
|
||||
border: 1px solid red;
|
||||
padding:20px;
|
||||
}
|
||||
.error, .error a {
|
||||
color:#f00;
|
||||
}
|
||||
.error img, .success img, .warning img {
|
||||
border:0;
|
||||
vertical-align:bottom;
|
||||
}
|
||||
.warning, .error {
|
||||
border-radius:4px;
|
||||
padding:15px;
|
||||
}
|
||||
.warning.normalFontSize {
|
||||
font-size: 100%;
|
||||
padding: 10px;
|
||||
}
|
||||
.indented-radio-button {
|
||||
margin-left:20px;
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
.datatable-label-category {
|
||||
color:#999;
|
||||
}
|
||||
59
www/analytics/plugins/Zeitgeist/stylesheets/ui/_header.less
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#header {
|
||||
min-height: 60px;
|
||||
}
|
||||
|
||||
/* Clear fix */
|
||||
#header:after {
|
||||
display: table;
|
||||
clear: both;
|
||||
content: "";
|
||||
}
|
||||
|
||||
#root {
|
||||
#logo {
|
||||
padding: 5px 0 0;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#logo {
|
||||
img.default-piwik-logo {
|
||||
width: 82px;
|
||||
margin-top: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
#logo > a {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
#javascriptDisabled,
|
||||
#javascriptDisabled a {
|
||||
font-weight: bold;
|
||||
color: #F88D22;
|
||||
padding: 15px;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#topBars {
|
||||
right: 0px;
|
||||
position: absolute;
|
||||
padding-left: 110px;
|
||||
color: #9c9c9c;
|
||||
margin: 4px 10px 8px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
#topLeftBar,
|
||||
#topRightBar {
|
||||
margin-bottom: 4px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
#topLeftBar {
|
||||
margin-right: 40px;
|
||||
}
|
||||
|
||||
.topBarElem {
|
||||
padding: 0 5px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
/* About Piwik box top right */
|
||||
#header_message {
|
||||
z-index: 0;
|
||||
cursor: default;
|
||||
position: absolute;
|
||||
right: 1px;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
padding: 5px 8px 5px 38px;
|
||||
font-size: 14px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
#header_message:hover,
|
||||
#header_message.active {
|
||||
width: auto;
|
||||
height: auto;
|
||||
z-index: 150;
|
||||
}
|
||||
|
||||
#header_message .header_short {
|
||||
display: block;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#header_message .header_full {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#header_message:hover .header_short,
|
||||
#header_message.active .header_short {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#header_message:hover .header_full,
|
||||
#header_message.active .header_full {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.header_full {
|
||||
padding-bottom: 5px;
|
||||
line-height: 1.7em;
|
||||
}
|
||||
|
||||
/* Orange alerts box */
|
||||
.header_alert {
|
||||
background: #FFFDF7 url(plugins/Zeitgeist/images/ico_alert.png) no-repeat 7px 4px;
|
||||
border: 1px solid #FF7F00;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.header_alert,
|
||||
.header_alert a {
|
||||
color: #FF7F00;
|
||||
}
|
||||
|
||||
/* Blue info box */
|
||||
.header_info {
|
||||
background: #FAFAFA url(plugins/Zeitgeist/images/ico_info.png) no-repeat 7px 4px;
|
||||
border: 1px solid #CBD9EB;
|
||||
}
|
||||
|
||||
.header_info, .header_info a {
|
||||
color: #444;
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
#languageSelect {
|
||||
max-height: 400px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
padding: 0 !important;
|
||||
background:#FFF;
|
||||
border: 1px solid #1F447F!important;
|
||||
}
|
||||
|
||||
#languageSelection > form {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#languageSelection input, #languageSelection select {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#languageSelection .ui-autocomplete-input:after {
|
||||
display: inline;
|
||||
content: " \25BC";
|
||||
font-size: 0.9em;
|
||||
}
|
||||
#languageSelection .ui-autocomplete-input {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#languageSelect .ui-autocomplete-input:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#languageSelect a {
|
||||
text-decoration:none!important;
|
||||
padding: 1px 25px 1px 3px!important;
|
||||
}
|
||||
|
||||
#languageSelect a:hover {
|
||||
background:#176999!important;
|
||||
color:#FFF!important;
|
||||
}
|
||||