Slimstat Analytics - Version 4.2

Version Description

  • [Note] You now have full control over the placement of your reports. Move them not just within each screen, but from one screen to another. Build your own custom Overview, by simply dragging and dropping report labels just like you already do with widgets and widget areas. Compare multiple charts in one screen, and much more. Go to Slimstat > Customize and... have fun!
  • [Note] If for any reasons your reports are not being displayed correctly, make sure to give the No Panic button a try (under Settings > Maintenance)
  • [Note] Did you say charts? We are adding new visual reports to Slimstat, to make your metrics easier to interpret. Stay tuned!
  • [Update] Support for the old "Custom Report" screen (already deprecated in version 4.0) has been removed from the source code. Please update your custom reports accordingly.
  • [Update] Renamed and reorganized tabs under Settings to make them easier to understand.
  • [Update] Flot chart library updated to version 0.8.3
Download this release

Release Info

Developer coolmann
Plugin Icon 128x128 Slimstat Analytics
Version 4.2
Comparing to
See all releases

Code changes from version 4.1.8.1 to 4.2

admin/config/index.php CHANGED
@@ -148,14 +148,20 @@ $options = array(
148
  2 => array(
149
  'title' => __( 'Tracker', 'wp-slimstat' ),
150
  'rows' => array(
151
- 'advanced_tracker_header' => array('description' => __('Tracker','wp-slimstat'), 'type' => 'section_header'),
152
  'session_duration' => array('description' => __('Session Duration','wp-slimstat'), 'type' => 'integer', 'long_description' => __('How many seconds should a human session last? Google Analytics sets it to 1800 seconds.','wp-slimstat'), 'after_input_field' => __('seconds','wp-slimstat')),
153
  'extend_session' => array('description' => __('Extend Session','wp-slimstat'), 'type' => 'yesno', 'long_description' => __('Extend the duration of a session each time the user visits a new page.','wp-slimstat')),
154
  'enable_cdn' => array('description' => __('Enable CDN','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Use <a href='http://www.jsdelivr.com/' target='_blank'>JSDelivr</a>'s CDN, by serving our tracking code from their fast and reliable network (free service).",'wp-slimstat')),
155
  'extensions_to_track' => array('description' => __('Extensions to Track','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("List all the file extensions that you want to be treated as Downloads. Please note that links pointing to external resources (i.e. PDFs on a different website) are considered Downloads and not Outbound Links (and tracked as such), if their extension matches one of the ones listed here below.",'wp-slimstat')),
156
 
 
 
 
 
 
 
157
  'advanced_external_pages_header' => array('description' => __('Pages not belonging to this site','wp-slimstat'), 'type' => 'section_header'),
158
- 'external_pages_script' => array('type' => 'static', 'skip_update' => 'yes', 'description' => __('Add the following code to all the non-WP pages you want to track, right before the closing BODY tag','wp-slimstat'), 'long_description' => '&lt;script type="text/javascript"&gt;
159
  /* &lt;![CDATA[ */
160
  var SlimStatParams = {
161
  ajaxurl: "'.admin_url('admin-ajax.php').'",
@@ -171,8 +177,30 @@ $options = array(
171
  )
172
  ),
173
 
174
-
175
  3 => array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  'title' => __( 'Reports', 'wp-slimstat' ),
177
  'rows' => array(
178
  'reports_basic_header' => array('description' => __('Formats and Conversions','wp-slimstat'), 'type' => 'section_header'),
@@ -203,37 +231,8 @@ $options = array(
203
  )
204
  ),
205
 
206
- 4 => array(
207
- 'title' => __( 'Filters', 'wp-slimstat' ),
208
- 'rows' => array(
209
- 'filters_users_header' => array('description' => __('Visitors and Known Users','wp-slimstat'), 'type' => 'section_header'),
210
- 'track_users' => array('description' => __('Track Registered Users','wp-slimstat'), 'type' => 'yesno', 'long_description' => __('Enable this option to track logged in users.','wp-slimstat')),
211
- 'ignore_users' => array('description' => __('Blacklist by Username','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("List all the usernames you don't want to track, separated by commas. Please be aware that spaces are <em>not</em> ignored and that usernames are case sensitive.",'wp-slimstat'), 'skip_update' => true),
212
- 'ignore_ip' => array('description' => __('Blacklist by IP Address','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("List all the IP addresses you don't want to track, separated by commas. Each network <strong>must</strong> be defined using the <a href='http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing' target='_blank'>CIDR notation</a> (i.e. <em>192.168.0.0/24</em>). This filter applies both to the public IP and the originating IP, if available.",'wp-slimstat')),
213
- 'ignore_capabilities' => array('description' => __('Blacklist by Capability','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Users having at least one of the <a href='http://codex.wordpress.org/Roles_and_Capabilities' target='_new'>capabilities</a> listed here below will not be tracked. Capabilities are case-insensitive.",'wp-slimstat'), 'skip_update' => true),
214
-
215
- 'filters_categories_header' => array('description' => __('Profiling','wp-slimstat'), 'type' => 'section_header'),
216
- 'ignore_spammers' => array('description' => __('Ignore Spammers','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Enable this option if you don't want to track visits from users identified as spammers by third-party tools like Akismet. Pageviews generated by users whose comments are later marked as spam, will also be removed from the database.",'wp-slimstat')),
217
- 'ignore_bots' => array('description' => __('Ignore Bots','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Turn on this feature if you want to have the accuracy level of server-side tracking, but not the inconvenience of getting your database clogged with pageviews generated by crawlers, spiders, search engine bots, etc. Please note that in Client mode, bots are ignored regardless of this setting.",'wp-slimstat')),
218
- 'ignore_resources' => array('description' => __('Permalinks','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("List all the URLs on your website that you don't want to track, separated by commas. Don't include the domain name: <em>/about, ?p=1</em>, etc. Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. For example, <code>/abou*</code> will match /about and /abound, <code>/abo*t</code> will match /aboundant and /about, <code>/abo!t</code> will match /about and /abort. Strings are case-insensitive.",'wp-slimstat')),
219
- 'ignore_countries' => array('description' => __('Countries','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Country codes (i.e.: <code>en-us, it, es</code>) that you don't want to track, separated by commas.",'wp-slimstat')),
220
- 'ignore_browsers' => array('description' => __('User Agents','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Browsers (user agents) you don't want to track, separated by commas. You can specify the browser's version adding a slash after the name (i.e. <em>Firefox/3.6</em>). Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. For example, <code>Chr*</code> will match Chrome and Chromium, <code>IE/!.0</code> will match IE/7.0 and IE/8.0. Strings are case-insensitive.",'wp-slimstat')),
221
- 'ignore_referers' => array('description' => __('Referring Sites','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Referring URLs that you don't want to track, separated by commas: <code>http://mysite.com*</code>, <code>*/ignore-me-please</code>, etc. Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. Strings are case-insensitive. Please include either a wildcard or the protocol you want to filter (http://, https://).",'wp-slimstat')),
222
-
223
- 'filters_outbound_header' => array('description' => __('Internal and Outbound Links','wp-slimstat'), 'type' => 'section_header'),
224
- 'enable_outbound_tracking' => array('description' => __('Track Outbound Clicks','wp-slimstat'), 'type' => 'yesno', 'long_description' => __('Track when your visitors click on link to external websites. This option required Spy Mode to be enabled.','wp-slimstat')),
225
- 'track_internal_links' => array('description' => __('Track Coordinates','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Collect mouse coordinates and other information for clicks on internal links. Strongly recommended if you're using the heatmap add-on. By default, this information is only collected for external links.",'wp-slimstat')),
226
- 'ignore_outbound_classes_rel_href' => array('description' => __('No Callback','wp-slimstat'), 'type' => 'text', 'long_description' => __("Track the event but do not invoke the callback function on links marked with one of these class names, <em>rel</em> attribute or whose <em>href</em> attribute contains one of these strings (separated by comma). Useful to prevent conflicts with lightbox and similar libraries.",'wp-slimstat')),
227
- 'do_not_track_outbound_classes_rel_href' => array('description' => __('Do Not Track','wp-slimstat'), 'type' => 'text', 'long_description' => __("Do not track links marked with one of these class names, <em>rel</em> attributes or whose <em>href</em> attribute contains one of these strings (separated by comma).",'wp-slimstat')),
228
-
229
- 'filters_miscellaneous_header' => array('description' => __('Miscellaneous','wp-slimstat'), 'type' => 'section_header'),
230
- 'anonymize_ip' => array('description' => __('Enable Privacy Mode','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Mask your visitors' IP addresses to comply with European Privacy Laws.",'wp-slimstat')),
231
- 'ignore_prefetch' => array('description' => __('Ignore Prefetch Requests','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Prevent Slimstat from tracking pageviews generated by Firefox's <a href='https://developer.mozilla.org/en/Link_prefetching_FAQ' target='_blank'>Link Prefetching functionality</a>.",'wp-slimstat'))
232
- )
233
- ),
234
-
235
  5 => array(
236
- 'title' => __( 'Permissions', 'wp-slimstat' ),
237
  'rows' => array(
238
  'permissions_reports_header' => array('description' => __('Reports','wp-slimstat'), 'type' => 'section_header'),
239
  'restrict_authors_view' => array('description' => __('Restrict Authors','wp-slimstat'), 'type' => 'yesno', 'long_description' => __('Enable this option if you want your authors to only see stats related to their own content.','wp-slimstat')),
@@ -250,7 +249,7 @@ $options = array(
250
  'title' => __( 'Maintenance', 'wp-slimstat' ),
251
  'include' => dirname(__FILE__).'/maintenance.php'
252
  ),
253
-
254
  7 => array(
255
  'title' => __( 'Add-ons', 'wp-slimstat' )
256
  )
@@ -265,7 +264,7 @@ foreach ( $options as $a_tab_id => $a_tab_info ) {
265
  }
266
  }
267
 
268
- echo '<div class="wrap slimstat"><h2>'.__('Settings','wp-slimstat').'</h2><ul class="nav-tabs">'.$tabs_html.'</ul>';
269
 
270
  // The maintenance tab has its own separate file
271
  if ( !empty( $options[ $current_tab ][ 'include' ] ) ) {
@@ -275,4 +274,5 @@ else if ( !empty( $options[ $current_tab ][ 'rows' ] ) ) {
275
  wp_slimstat_admin::update_options( $options[ $current_tab ][ 'rows' ] );
276
  wp_slimstat_admin::display_options( $options[ $current_tab ][ 'rows' ], $current_tab);
277
  }
278
- echo '</div>';
 
148
  2 => array(
149
  'title' => __( 'Tracker', 'wp-slimstat' ),
150
  'rows' => array(
151
+ 'advanced_tracker_header' => array('description' => __('Advanced Options','wp-slimstat'), 'type' => 'section_header'),
152
  'session_duration' => array('description' => __('Session Duration','wp-slimstat'), 'type' => 'integer', 'long_description' => __('How many seconds should a human session last? Google Analytics sets it to 1800 seconds.','wp-slimstat'), 'after_input_field' => __('seconds','wp-slimstat')),
153
  'extend_session' => array('description' => __('Extend Session','wp-slimstat'), 'type' => 'yesno', 'long_description' => __('Extend the duration of a session each time the user visits a new page.','wp-slimstat')),
154
  'enable_cdn' => array('description' => __('Enable CDN','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Use <a href='http://www.jsdelivr.com/' target='_blank'>JSDelivr</a>'s CDN, by serving our tracking code from their fast and reliable network (free service).",'wp-slimstat')),
155
  'extensions_to_track' => array('description' => __('Extensions to Track','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("List all the file extensions that you want to be treated as Downloads. Please note that links pointing to external resources (i.e. PDFs on a different website) are considered Downloads and not Outbound Links (and tracked as such), if their extension matches one of the ones listed here below.",'wp-slimstat')),
156
 
157
+ 'filters_outbound_header' => array('description' => __('Internal and Outbound Links','wp-slimstat'), 'type' => 'section_header'),
158
+ 'enable_outbound_tracking' => array('description' => __('Track Outbound Clicks','wp-slimstat'), 'type' => 'yesno', 'long_description' => __('Track when your visitors click on link to external websites. This option required Spy Mode to be enabled.','wp-slimstat')),
159
+ 'track_internal_links' => array('description' => __('Track Coordinates','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Collect mouse coordinates and other information for clicks on internal links. Strongly recommended if you're using the heatmap add-on. By default, this information is only collected for external links.",'wp-slimstat')),
160
+ 'ignore_outbound_classes_rel_href' => array('description' => __('No Callback','wp-slimstat'), 'type' => 'text', 'long_description' => __("Track the event but do not invoke the callback function on links marked with one of these class names, <em>rel</em> attribute or whose <em>href</em> attribute contains one of these strings (separated by comma). Useful to prevent conflicts with lightbox and similar libraries.",'wp-slimstat')),
161
+ 'do_not_track_outbound_classes_rel_href' => array('description' => __('Do Not Track','wp-slimstat'), 'type' => 'text', 'long_description' => __("Do not track links marked with one of these class names, <em>rel</em> attributes or whose <em>href</em> attribute contains one of these strings (separated by comma).",'wp-slimstat')),
162
+
163
  'advanced_external_pages_header' => array('description' => __('Pages not belonging to this site','wp-slimstat'), 'type' => 'section_header'),
164
+ 'external_pages_script' => array('type' => 'static', 'skip_update' => 'yes', 'description' => __('Add the following code to all the non-WP pages you want to track, right before the closing BODY tag. Please make sure to change the protocol of all the URLs to HTTPS, if you external site is served over a secure channel.','wp-slimstat'), 'long_description' => '&lt;script type="text/javascript"&gt;
165
  /* &lt;![CDATA[ */
166
  var SlimStatParams = {
167
  ajaxurl: "'.admin_url('admin-ajax.php').'",
177
  )
178
  ),
179
 
 
180
  3 => array(
181
+ 'title' => __( 'Filters', 'wp-slimstat' ),
182
+ 'rows' => array(
183
+ 'filters_users_header' => array('description' => __('Visitors and Known Users','wp-slimstat'), 'type' => 'section_header'),
184
+ 'track_users' => array('description' => __('Track Registered Users','wp-slimstat'), 'type' => 'yesno', 'long_description' => __('Enable this option to track logged in users.','wp-slimstat')),
185
+ 'ignore_users' => array('description' => __('Blacklist by Username','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("List all the usernames you don't want to track, separated by commas. Please be aware that spaces are <em>not</em> ignored and that usernames are case sensitive.",'wp-slimstat'), 'skip_update' => true),
186
+ 'ignore_ip' => array('description' => __('Blacklist by IP Address','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("List all the IP addresses you don't want to track, separated by commas. Each network <strong>must</strong> be defined using the <a href='http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing' target='_blank'>CIDR notation</a> (i.e. <em>192.168.0.0/24</em>). This filter applies both to the public IP and the originating IP, if available.",'wp-slimstat')),
187
+ 'ignore_capabilities' => array('description' => __('Blacklist by Capability','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Users having at least one of the <a href='http://codex.wordpress.org/Roles_and_Capabilities' target='_new'>capabilities</a> listed here below will not be tracked. Capabilities are case-insensitive.",'wp-slimstat'), 'skip_update' => true),
188
+
189
+ 'filters_categories_header' => array('description' => __('Profiling','wp-slimstat'), 'type' => 'section_header'),
190
+ 'ignore_spammers' => array('description' => __('Ignore Spammers','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Enable this option if you don't want to track visits from users identified as spammers by third-party tools like Akismet. Pageviews generated by users whose comments are later marked as spam, will also be removed from the database.",'wp-slimstat')),
191
+ 'ignore_bots' => array('description' => __('Ignore Bots','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Turn on this feature if you want to have the accuracy level of server-side tracking, but not the inconvenience of getting your database clogged with pageviews generated by crawlers, spiders, search engine bots, etc. Please note that in Client mode, bots are ignored regardless of this setting.",'wp-slimstat')),
192
+ 'ignore_resources' => array('description' => __('Permalinks','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("List all the URLs on your website that you don't want to track, separated by commas. Don't include the domain name: <em>/about, ?p=1</em>, etc. Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. For example, <code>/abou*</code> will match /about and /abound, <code>/abo*t</code> will match /aboundant and /about, <code>/abo!t</code> will match /about and /abort. Strings are case-insensitive.",'wp-slimstat')),
193
+ 'ignore_countries' => array('description' => __('Countries','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Country codes (i.e.: <code>en-us, it, es</code>) that you don't want to track, separated by commas.",'wp-slimstat')),
194
+ 'ignore_browsers' => array('description' => __('User Agents','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Browsers (user agents) you don't want to track, separated by commas. You can specify the browser's version adding a slash after the name (i.e. <em>Firefox/3.6</em>). Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. For example, <code>Chr*</code> will match Chrome and Chromium, <code>IE/!.0</code> will match IE/7.0 and IE/8.0. Strings are case-insensitive.",'wp-slimstat')),
195
+ 'ignore_referers' => array('description' => __('Referring Sites','wp-slimstat'), 'type' => 'textarea', 'long_description' => __("Referring URLs that you don't want to track, separated by commas: <code>http://mysite.com*</code>, <code>*/ignore-me-please</code>, etc. Wildcards: <code>*</code> matches 'any string, including the empty string', <code>!</code> matches 'any character'. Strings are case-insensitive. Please include either a wildcard or the protocol you want to filter (http://, https://).",'wp-slimstat')),
196
+
197
+ 'filters_miscellaneous_header' => array('description' => __('Miscellaneous','wp-slimstat'), 'type' => 'section_header'),
198
+ 'anonymize_ip' => array('description' => __('Enable Privacy Mode','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Mask your visitors' IP addresses to comply with European Privacy Laws.",'wp-slimstat')),
199
+ 'ignore_prefetch' => array('description' => __('Ignore Prefetch Requests','wp-slimstat'), 'type' => 'yesno', 'long_description' => __("Prevent Slimstat from tracking pageviews generated by Firefox's <a href='https://developer.mozilla.org/en/Link_prefetching_FAQ' target='_blank'>Link Prefetching functionality</a>.",'wp-slimstat'))
200
+ )
201
+ ),
202
+
203
+ 4 => array(
204
  'title' => __( 'Reports', 'wp-slimstat' ),
205
  'rows' => array(
206
  'reports_basic_header' => array('description' => __('Formats and Conversions','wp-slimstat'), 'type' => 'section_header'),
231
  )
232
  ),
233
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  5 => array(
235
+ 'title' => __( 'Access Control', 'wp-slimstat' ),
236
  'rows' => array(
237
  'permissions_reports_header' => array('description' => __('Reports','wp-slimstat'), 'type' => 'section_header'),
238
  'restrict_authors_view' => array('description' => __('Restrict Authors','wp-slimstat'), 'type' => 'yesno', 'long_description' => __('Enable this option if you want your authors to only see stats related to their own content.','wp-slimstat')),
249
  'title' => __( 'Maintenance', 'wp-slimstat' ),
250
  'include' => dirname(__FILE__).'/maintenance.php'
251
  ),
252
+
253
  7 => array(
254
  'title' => __( 'Add-ons', 'wp-slimstat' )
255
  )
264
  }
265
  }
266
 
267
+ echo '<div class="wrap slimstat-config"><h2>'.__('Settings','wp-slimstat').'</h2><ul class="nav-tabs">'.$tabs_html.'</ul>';
268
 
269
  // The maintenance tab has its own separate file
270
  if ( !empty( $options[ $current_tab ][ 'include' ] ) ) {
274
  wp_slimstat_admin::update_options( $options[ $current_tab ][ 'rows' ] );
275
  wp_slimstat_admin::display_options( $options[ $current_tab ][ 'rows' ], $current_tab);
276
  }
277
+
278
+ echo '</div>';
admin/config/maintenance.php CHANGED
@@ -167,10 +167,8 @@ if (!empty($_REQUEST['action'])){
167
  break;
168
 
169
  case 'restore-views':
170
- $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%meta-box-order_admin_page_wp-slim-view-%'");
171
- $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%meta-box-order_slimstat_page_wp-slim-view-%'");
172
- $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%mmetaboxhidden_admin_page_wp-slim-view-%'");
173
- $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%mmetaboxhidden_slimstat_page_wp-slim-view-%'");
174
  $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%meta-box-order_slimstat%'");
175
  $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%metaboxhidden_slimstat%'");
176
  $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%closedpostboxes_slimstat%'");
@@ -235,14 +233,14 @@ $suffixes = array('bytes', 'KB', 'MB', 'GB', 'TB');
235
  <a class="button-secondary" href="<?php echo wp_slimstat_admin::$config_url.$current_tab ?>&amp;action=activate-sql-debug-mode"><?php _e("Enable SQL Debug",'wp-slimstat'); ?></a>
236
  </th>
237
  <td>
238
- <span class="description"><?php _e("Please note that you will need about 30% more DB space to store the extra information required.",'wp-slimstat') ?></span>
239
  </td>
240
  <?php else: ?>
241
  <th scope="row">
242
  <a class="button-secondary" href="<?php echo wp_slimstat_admin::$config_url.$current_tab ?>&amp;action=deactivate-sql-debug-mode"><?php _e('Disable SQL Debug','wp-slimstat'); ?></a>
243
  </th>
244
  <td>
245
- <span class="description"><?php _e("Please note that by removing table indexes, Slimstat's performance will be affected.",'wp-slimstat') ?></span>
246
  </td>
247
  <?php endif ?>
248
  </tr>
167
  break;
168
 
169
  case 'restore-views':
170
+ $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%meta-box-order_admin_page_slimlayout%'");
171
+ $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%mmetaboxhidden_admin_page_slimview%'");
 
 
172
  $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%meta-box-order_slimstat%'");
173
  $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%metaboxhidden_slimstat%'");
174
  $GLOBALS['wpdb']->query("DELETE FROM {$GLOBALS['wpdb']->prefix}usermeta WHERE meta_key LIKE '%closedpostboxes_slimstat%'");
233
  <a class="button-secondary" href="<?php echo wp_slimstat_admin::$config_url.$current_tab ?>&amp;action=activate-sql-debug-mode"><?php _e("Enable SQL Debug",'wp-slimstat'); ?></a>
234
  </th>
235
  <td>
236
+ <span class="description"><?php _e("Display the SQL code used to retrieve the data from the database. Useful to troubleshoot issues with data consistency or missing pageviews.",'wp-slimstat') ?></span>
237
  </td>
238
  <?php else: ?>
239
  <th scope="row">
240
  <a class="button-secondary" href="<?php echo wp_slimstat_admin::$config_url.$current_tab ?>&amp;action=deactivate-sql-debug-mode"><?php _e('Disable SQL Debug','wp-slimstat'); ?></a>
241
  </th>
242
  <td>
243
+ <span class="description"><?php _e("Deactivate the SQL output on top of each report.",'wp-slimstat') ?></span>
244
  </td>
245
  <?php endif ?>
246
  </tr>
admin/css/slimstat.css CHANGED
@@ -128,7 +128,6 @@
128
  /* Single Report */
129
  .wrap.slimstat .postbox, .wrap.slimstat .sortable-placeholder{
130
  float: left;
131
- height: 282px;
132
  margin-right: .5%;
133
  min-width: 32.5%;
134
  overflow: hidden;
@@ -141,7 +140,7 @@
141
  width:99%
142
  }
143
  .wrap.slimstat .postbox.tall{
144
- height:661px;
145
  }
146
 
147
  .sortable-placeholder{
@@ -151,16 +150,17 @@
151
  }
152
 
153
  /* Single Report: Header and Header Buttons */
154
- .wrap.slimstat .postbox .hndle{
 
155
  font-size: 1.2em;
156
  margin: 0;
157
- padding: 5px 10px;
158
  }
159
- .wrap.slimstat .postbox .hndle a{
160
  font-size: 1em;
161
  font-weight: 700;
162
  }
163
- .wrap.slimstat .postbox.tall .hndle{
164
  cursor:auto;
165
  }
166
  .slimstat-header-buttons{
@@ -179,7 +179,7 @@
179
  .slimstat-tooltip-content{
180
  display: none;
181
  }
182
- .wrap.slimstat .hndle .slimstat-tooltip-trigger.corner{
183
  right: 0;
184
  }
185
  .slimstat .no-refresh .refresh{
@@ -331,19 +331,19 @@
331
  }
332
 
333
  /* Single Report: Chart */
334
- #chart-legend{
335
  float: right;
336
  font-size: .95em;
337
  margin-top: 5px;
338
  }
339
- #chart-legend td{
340
  padding-top: 3px;
341
  vertical-align: top;
342
  }
343
- #chart-legend td.legendLabel{
344
  padding:0 5px;
345
  }
346
- #chart-placeholder{
347
  height: 210px;
348
  margin: 10px 1% 0;
349
  }
@@ -456,24 +456,22 @@
456
  text-decoration: none;
457
  }
458
  .form-table{
 
459
  margin-top: 0 !important;
460
  }
461
  .form-table th{
 
462
  padding: 15px 10px !important;
463
- }
464
- .form-table td.slimstat-options-section-header{
465
- background-color: #c0c0c0;
466
- color: #fff;
467
- font-size: 16px;
468
  margin-bottom: 0;
469
- padding: 10px;
470
  }
471
  .form-table h3{
472
  margin-top: 0;
473
  }
474
- .form-table td label{
475
- font-weight: 600;
476
- }
477
  .form-table td span.block-element{
478
  padding: 0 30px 0 0;
479
  }
@@ -562,6 +560,43 @@
562
  padding: 0 0 0 30px;
563
  }
564
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
565
  /* Responsive */
566
  @media screen and (min-width: 1440px){
567
  .wrap.slimstat .postbox{
@@ -574,7 +609,7 @@
574
  }
575
  }
576
  @media screen and (max-width: 1200px){
577
- .wrap.slimstat .postbox .hndle{
578
  font-size: 1em;
579
  line-height: 1.5em;
580
  }
@@ -613,7 +648,7 @@
613
  margin: 0 0 10px;
614
  width: 99.5%;
615
  }
616
- .wrap.slimstat .postbox .hndle{
617
  font-size: 1.4em;
618
  line-height: 1em;
619
  }
@@ -661,18 +696,17 @@
661
  /* Fontello - Custom Icon Fonts for SlimStat | Uses Fontelico (C) 2012 by Fontello project, Elusive (C) 2013 by Aristeides Stathopoulos, Font Awesome (C) 2012 by Dave Gandy | http://www.fontello.com */
662
  @font-face {
663
  font-family: 'slimstat';
664
- src: url('slimstat.eot?37610477');
665
- src: url('slimstat.eot?37610477#iefix') format('embedded-opentype'),
666
- url('slimstat.svg?37610477#fontello') format('svg');
667
  font-weight: normal;
668
  font-style: normal;
669
  }
670
  @font-face {
671
  font-family: 'slimstat';
672
- src: url('data:application/octet-stream;base64,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') format('woff'),
673
- url('data:application/octet-stream;base64,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') format('truetype');
674
  }
675
-
676
  [class^="slimstat-font-"]:before, [class*=" slimstat-font-"]:before {
677
  font-family: "slimstat";
678
  font-style: normal;
@@ -703,7 +737,7 @@
703
  /* Uncomment for 3D effect */
704
  /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
705
  }
706
- .slimstat-font-spin1:before { content: '\e800'; } /* '' */
707
  .slimstat-font-clock:before { content: '\e801'; } /* '' */
708
  .slimstat-font-search:before { content: '\e802'; } /* '' */
709
  .slimstat-font-cancel:before { content: '\e803'; } /* '' */
@@ -721,9 +755,10 @@
721
  .slimstat-font-angle-double-right:before { content: '\e80f'; } /* '' */
722
  .slimstat-font-arrows-cw:before { content: '\e810'; } /* '' */
723
  .slimstat-font-doc:before { content: '\e811'; } /* '' */
724
- .slimstat-font-spin3:before { content: '\e812'; } /* '' */
725
  .slimstat-font-edit:before { content: '\e813'; } /* '' */
726
  .slimstat-font-gauge:before { content: '\e814'; } /* '' */
727
  .slimstat-font-stopwatch:before { content: '\e815'; } /* '' */
 
728
 
729
  .animate-spin{-moz-animation:spin 3s infinite linear;-o-animation:spin 3s infinite linear;-webkit-animation:spin 3s infinite linear;animation:spin 3s infinite linear;display:inline-block}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
128
  /* Single Report */
129
  .wrap.slimstat .postbox, .wrap.slimstat .sortable-placeholder{
130
  float: left;
 
131
  margin-right: .5%;
132
  min-width: 32.5%;
133
  overflow: hidden;
140
  width:99%
141
  }
142
  .wrap.slimstat .postbox.tall{
143
+
144
  }
145
 
146
  .sortable-placeholder{
150
  }
151
 
152
  /* Single Report: Header and Header Buttons */
153
+ .wrap.slimstat .postbox h3{
154
+ border-bottom: 1px solid #ddd;
155
  font-size: 1.2em;
156
  margin: 0;
157
+ padding: 10px;
158
  }
159
+ .wrap.slimstat .postbox h3 a{
160
  font-size: 1em;
161
  font-weight: 700;
162
  }
163
+ .wrap.slimstat .postbox.tall h3{
164
  cursor:auto;
165
  }
166
  .slimstat-header-buttons{
179
  .slimstat-tooltip-content{
180
  display: none;
181
  }
182
+ .wrap.slimstat h3 .slimstat-tooltip-trigger.corner{
183
  right: 0;
184
  }
185
  .slimstat .no-refresh .refresh{
331
  }
332
 
333
  /* Single Report: Chart */
334
+ .chart-legend{
335
  float: right;
336
  font-size: .95em;
337
  margin-top: 5px;
338
  }
339
+ .chart-legend td{
340
  padding-top: 3px;
341
  vertical-align: top;
342
  }
343
+ .chart-legend td.legendLabel{
344
  padding:0 5px;
345
  }
346
+ .chart-placeholder{
347
  height: 210px;
348
  margin: 10px 1% 0;
349
  }
456
  text-decoration: none;
457
  }
458
  .form-table{
459
+ border: 1px solid #ccc !important;
460
  margin-top: 0 !important;
461
  }
462
  .form-table th{
463
+ font-weight: 400 !important;
464
  padding: 15px 10px !important;
465
+ }
466
+ .slimstat-options-section-header {
467
+ background-color: #e4e4e4;
468
+ font-size: 1.4em !important;
 
469
  margin-bottom: 0;
470
+ padding: 5px 10px !important;
471
  }
472
  .form-table h3{
473
  margin-top: 0;
474
  }
 
 
 
475
  .form-table td span.block-element{
476
  padding: 0 30px 0 0;
477
  }
560
  padding: 0 0 0 30px;
561
  }
562
 
563
+ /* Customizer */
564
+ .slimstat-layout .postbox-container {
565
+ border: 1px solid #ccc;
566
+ float: none;
567
+ margin-bottom: 20px;
568
+ overflow: hidden;
569
+ }
570
+ .slimstat-layout .meta-box-sortables {
571
+ overflow: hidden;
572
+ padding: 10px;
573
+ }
574
+ .slimstat-layout .postbox-container span.title {
575
+ background-color: #c0c0c0;
576
+ color: #fff;
577
+ font-size: 16px;
578
+ margin-bottom: 0;
579
+ padding: 10px;
580
+ }
581
+ .slimstat-layout .postbox, .slimstat-layout .sortable-placeholder {
582
+ float: left;
583
+ margin: 0 10px 10px 0;
584
+ min-width: 285px;
585
+ }
586
+ .slimstat-layout .postbox.invisible h3 {
587
+ color: #ccc;
588
+ }
589
+ .slimstat-layout h3 {
590
+ border: 0;
591
+ font-weight: 300;
592
+ font-size: 1.1em;
593
+ margin: 0;
594
+ padding: 5px 10px;
595
+ }
596
+ .slimstat-layout #postbox-container-slimview1 {
597
+ display: none;
598
+ }
599
+
600
  /* Responsive */
601
  @media screen and (min-width: 1440px){
602
  .wrap.slimstat .postbox{
609
  }
610
  }
611
  @media screen and (max-width: 1200px){
612
+ .wrap.slimstat .postbox h3{
613
  font-size: 1em;
614
  line-height: 1.5em;
615
  }
648
  margin: 0 0 10px;
649
  width: 99.5%;
650
  }
651
+ .wrap.slimstat .postbox h3{
652
  font-size: 1.4em;
653
  line-height: 1em;
654
  }
696
  /* Fontello - Custom Icon Fonts for SlimStat | Uses Fontelico (C) 2012 by Fontello project, Elusive (C) 2013 by Aristeides Stathopoulos, Font Awesome (C) 2012 by Dave Gandy | http://www.fontello.com */
697
  @font-face {
698
  font-family: 'slimstat';
699
+ src: url('slimstat.eot?17281142');
700
+ src: url('slimstat.eot?17281142#iefix') format('embedded-opentype'),
701
+ url('slimstat.svg?17281142#fontello') format('svg');
702
  font-weight: normal;
703
  font-style: normal;
704
  }
705
  @font-face {
706
  font-family: 'slimstat';
707
+ src: url('data:application/octet-stream;base64,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') format('woff'),
708
+ url('data:application/octet-stream;base64,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') format('truetype');
709
  }
 
710
  [class^="slimstat-font-"]:before, [class*=" slimstat-font-"]:before {
711
  font-family: "slimstat";
712
  font-style: normal;
737
  /* Uncomment for 3D effect */
738
  /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
739
  }
740
+ .slimstat-font-trash:before { content: '\e800'; } /* '' */
741
  .slimstat-font-clock:before { content: '\e801'; } /* '' */
742
  .slimstat-font-search:before { content: '\e802'; } /* '' */
743
  .slimstat-font-cancel:before { content: '\e803'; } /* '' */
755
  .slimstat-font-angle-double-right:before { content: '\e80f'; } /* '' */
756
  .slimstat-font-arrows-cw:before { content: '\e810'; } /* '' */
757
  .slimstat-font-doc:before { content: '\e811'; } /* '' */
758
+ .slimstat-font-spin4:before { content: '\e812'; } /* '' */
759
  .slimstat-font-edit:before { content: '\e813'; } /* '' */
760
  .slimstat-font-gauge:before { content: '\e814'; } /* '' */
761
  .slimstat-font-stopwatch:before { content: '\e815'; } /* '' */
762
+ .slimstat-font-docs:before { content: '\e816'; } /* '' */
763
 
764
  .animate-spin{-moz-animation:spin 3s infinite linear;-o-animation:spin 3s infinite linear;-webkit-animation:spin 3s infinite linear;animation:spin 3s infinite linear;display:inline-block}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
admin/css/slimstat.eot CHANGED
Binary file
admin/css/slimstat.svg CHANGED
@@ -6,6 +6,7 @@
6
  <font id="fontello" horiz-adv-x="1000" >
7
  <font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
8
  <missing-glyph horiz-adv-x="1000" />
 
9
  <glyph glyph-name="clock" unicode="&#xe801;" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
10
  <glyph glyph-name="search" unicode="&#xe802;" d="m643 386q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
11
  <glyph glyph-name="cancel" unicode="&#xe803;" d="m724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
@@ -27,6 +28,7 @@
27
  <glyph glyph-name="edit" unicode="&#xe813;" d="m0 154v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-8-8-18-4-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v70q0 7 5 12l36 36q8 8 20 4t11-16v-106q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114z m357-18v160l375 375 161-160-375-375h-161z m54 107h53v-54h32l64 65-85 85-64-65v-31z m116 134q9-9 18 0l196 196q9 9 0 18t-18 0l-196-196q-9-9 0-18z m241 330l51 51q16 16 38 16t38-16l85-84q16-16 16-38t-16-38l-51-52z" horiz-adv-x="1000" />
28
  <glyph glyph-name="gauge" unicode="&#xe814;" d="m0 207q0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269z m71 0q0-29 21-50t51-21 50 21 21 50-21 51-50 21-51-21-21-51z m108 250q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m217-330q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55z m33 437q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m250-107q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m107-250q0-29 21-50t50-21 51 21 21 50-21 51-51 21-50-21-21-51z" horiz-adv-x="1000" />
29
  <glyph glyph-name="stopwatch" unicode="&#xe815;" d="m855 537q83-117 83-265 0-194-138-331t-331-138-331 138-138 331q0 180 120 313t298 152l0 1-2 3 0 51-51 0q-21 0-37 16t-15 37 15 36 37 16l208 0q21 0 36-16t16-36-16-37-36-16l-52 0 0-51-1-1 0-3q156-17 270-125 1 1 3 4t3 5l27 26q15 15 36 15t37-15 15-37-15-37l-26-26q-5-5-15-10z m-386-630q151 0 258 107t107 258-107 258-258 106-258-106-107-258 107-258 258-107z m52 416l104 0q21 0 37-15t16-36-16-37-37-15l-156 0q-21 0-37 15t-16 37l0 156q0 22 16 37t37 15 37-15 15-37l0-105z m-52 262q129 0 220-92t92-221-92-221-220-92-221 92-92 221 92 221 221 92z m0-574q107 0 184 77t76 184-76 184-184 76-184-76-76-184 76-184 184-77z" horiz-adv-x="938" />
 
30
  </font>
31
  </defs>
32
  </svg>
6
  <font id="fontello" horiz-adv-x="1000" >
7
  <font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
8
  <missing-glyph horiz-adv-x="1000" />
9
+ <glyph glyph-name="trash" unicode="&#xe800;" d="m0 633l0 141 289 0 0 76 246 0 0-76 289 0 0-141-824 0z m43-783l0 676 738 0 0-676-738 0z" horiz-adv-x="824" />
10
  <glyph glyph-name="clock" unicode="&#xe801;" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
11
  <glyph glyph-name="search" unicode="&#xe802;" d="m643 386q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
12
  <glyph glyph-name="cancel" unicode="&#xe803;" d="m724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
28
  <glyph glyph-name="edit" unicode="&#xe813;" d="m0 154v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-8-8-18-4-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v70q0 7 5 12l36 36q8 8 20 4t11-16v-106q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114z m357-18v160l375 375 161-160-375-375h-161z m54 107h53v-54h32l64 65-85 85-64-65v-31z m116 134q9-9 18 0l196 196q9 9 0 18t-18 0l-196-196q-9-9 0-18z m241 330l51 51q16 16 38 16t38-16l85-84q16-16 16-38t-16-38l-51-52z" horiz-adv-x="1000" />
29
  <glyph glyph-name="gauge" unicode="&#xe814;" d="m0 207q0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269z m71 0q0-29 21-50t51-21 50 21 21 50-21 51-50 21-51-21-21-51z m108 250q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m217-330q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55z m33 437q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m250-107q0-29 21-50t50-21 51 21 20 50-20 51-51 21-50-21-21-51z m107-250q0-29 21-50t50-21 51 21 21 50-21 51-51 21-50-21-21-51z" horiz-adv-x="1000" />
30
  <glyph glyph-name="stopwatch" unicode="&#xe815;" d="m855 537q83-117 83-265 0-194-138-331t-331-138-331 138-138 331q0 180 120 313t298 152l0 1-2 3 0 51-51 0q-21 0-37 16t-15 37 15 36 37 16l208 0q21 0 36-16t16-36-16-37-36-16l-52 0 0-51-1-1 0-3q156-17 270-125 1 1 3 4t3 5l27 26q15 15 36 15t37-15 15-37-15-37l-26-26q-5-5-15-10z m-386-630q151 0 258 107t107 258-107 258-258 106-258-106-107-258 107-258 258-107z m52 416l104 0q21 0 37-15t16-36-16-37-37-15l-156 0q-21 0-37 15t-16 37l0 156q0 22 16 37t37 15 37-15 15-37l0-105z m-52 262q129 0 220-92t92-221-92-221-220-92-221 92-92 221 92 221 221 92z m0-574q107 0 184 77t76 184-76 184-184 76-184-76-76-184 76-184 184-77z" horiz-adv-x="938" />
31
+ <glyph glyph-name="docs" unicode="&#xe816;" d="m946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-38t-38-15h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
32
  </font>
33
  </defs>
34
  </svg>
admin/js/slimstat.admin.js CHANGED
@@ -3,6 +3,7 @@ var SlimStatAdmin = {
3
  // Public variables
4
  chart_data: [],
5
  chart_info: [],
 
6
  ticks: [],
7
 
8
  // Private variables
@@ -27,6 +28,7 @@ var SlimStatAdmin = {
27
  zoom: { interactive: true }
28
  },
29
  _placeholder: null,
 
30
  _qtip_previous_point: null,
31
  _refresh_timer: [0, 0],
32
  _tooltip: {},
@@ -45,115 +47,102 @@ var SlimStatAdmin = {
45
  },
46
 
47
  chart_init: function() {
48
- SlimStatAdmin._placeholder = jQuery("#chart-placeholder");
 
 
49
 
50
- // Don't do anything if no placeholder or if hidden
51
- if (!SlimStatAdmin._placeholder.length || SlimStatAdmin._placeholder.is(':hidden')){
52
- return true;
53
- }
54
 
55
- max_y_axis = 0;
56
- for (i in SlimStatAdmin.chart_data){
57
- max = SlimStatAdmin.chart_data[i].data.reduce(function(max, arr){
58
- return Math.max(max, arr[1]);
59
- }, -Infinity)+1;
60
- if (max > max_y_axis) max_y_axis = max;
61
- }
62
 
63
- // Calculate the remaining options
64
- SlimStatAdmin._chart_options.colors = SlimStatAdminParams.chart_colors,
65
- //
66
- SlimStatAdmin._chart_options.xaxis = {
67
- ticks: (SlimStatAdmin.ticks[0][1].indexOf('/') > 0 && SlimStatAdmin.ticks.length > 16) ? [] : SlimStatAdmin.ticks,
68
- tickDecimals: 0,
69
- tickLength: 0,
70
- tickSize: 1,
71
- panRange: [0, SlimStatAdmin.chart_data[0].data.length-1],
72
- zoomRange: [5, SlimStatAdmin.chart_data[0].data.length-1],
73
- };
74
- if (SlimStatAdminParams.text_direction == 'rtl'){
75
- SlimStatAdmin._chart_options.xaxis.transform = function(v) {
76
- return -v;
77
- };
78
- SlimStatAdmin._chart_options.xaxis.inverseTransform = function(v) {
79
- return -v;
80
  };
81
- }
 
 
 
 
 
 
 
82
 
83
- SlimStatAdmin._chart_options.yaxis = {
84
- tickDecimals: 0,
85
- zoomRange: [5, max_y_axis],
86
- panRange:[0, max_y_axis]
87
- };
88
 
89
- // Draw the chart
90
- jQuery.plot(SlimStatAdmin._placeholder, SlimStatAdmin.chart_data, SlimStatAdmin._chart_options);
91
- SlimStatAdmin.chart_color_weekends();
92
-
93
- // Enable tooltips
94
- SlimStatAdmin._tooltip = SlimStatAdmin._placeholder.qtip({
95
- content: ' ',
96
- hide: {
97
- event: false,
98
- fixed: true
99
- },
100
- id: 'chart-placeholder',
101
- position: {
102
- target: 'mouse',
103
- viewport: SlimStatAdmin._placeholder,
104
- adjust: {
105
- x: 15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  }
107
- },
108
- prerender: true,
109
- show: false,
110
- style: {
111
- classes: 'qtip-dark'
112
- }
113
- });
114
- SlimStatAdmin._placeholder.bind("plothover", function (event, coords, item) {
115
- // Grab the API reference
116
- var api = jQuery(this).qtip();
117
-
118
- // If we weren't passed the item object, hide the tooltip and remove cached point data
119
- if (!item) {
120
- api.cache.point = false;
121
- return api.hide(item);
122
- }
123
 
124
- SlimStatAdmin._previous_point = api.cache.point;
125
- if (SlimStatAdmin._previous_point !== item.dataIndex) {
126
- api.cache.point = item.dataIndex;
127
 
128
- label = item.series.label.replace(/[0-9\/\:]+(.*)(am|pm)?/gi, '');
129
- if (SlimStatAdmin.ticks[item.dataIndex][1].indexOf('/') > 0){
130
- label += ' ' + SlimStatAdmin.ticks[item.dataIndex][1];
131
- }
132
- api.set('content.text', label + ': ' + item.datapoint[1]);
133
 
134
- api.elements.tooltip.stop(1, 1);
135
- api.show(item);
136
- }
137
- });
138
- /*
139
- SlimStatAdmin._placeholder.bind('plotclick', function(event, pos, item){
140
- if (item && typeof item.series.label != 'undefined'){
141
- if (item.seriesIndex == 1 && typeof SlimStatAdmin.chart_data[item.seriesIndex].data[item.datapoint[0]-SlimStatAdmin.chart_info.rtl_filler_previous][2] != 'undefined'){
142
- document.location.href = SlimStatAdmin.chart_data[item.seriesIndex].data[item.datapoint[0]-SlimStatAdmin.chart_info.rtl_filler_previous][2].replace(/&amp;/gi,'&');
143
- }
144
- if (item.seriesIndex != 1 && typeof SlimStatAdmin.chart_data[item.seriesIndex].data[item.datapoint[0]-SlimStatAdmin.chart_info.rtl_filler_current][2] != 'undefined'){
145
- document.location.href = SlimStatAdmin.chart_data[item.seriesIndex].data[item.datapoint[0]-SlimStatAdmin.chart_info.rtl_filler_current][2].replace(/&amp;/gi,'&');
146
  }
147
- }
148
- });
149
- */
150
- SlimStatAdmin._placeholder.bind('dblclick', function(event){
151
- jQuery.plot(SlimStatAdmin._placeholder, SlimStatAdmin.chart_data, SlimStatAdmin._chart_options);
152
- SlimStatAdmin.chart_color_weekends();
153
- });
154
 
155
- SlimStatAdmin._placeholder.bind('plotzoom', SlimStatAdmin.chart_color_weekends);
156
- SlimStatAdmin._placeholder.bind('plotpan', SlimStatAdmin.chart_color_weekends);
 
157
  },
158
 
159
  parse_url_filters: function(report_id, href){
@@ -244,7 +233,7 @@ var SlimStatAdmin = {
244
  jQuery('.slimstat-temp-filter').remove();
245
  },
246
 
247
- get_query_string_value : function( key ) {
248
  query_string = window.location.search.substring( 1 );
249
 
250
  // Split into key/value pairs
@@ -271,13 +260,13 @@ jQuery(function(){
271
  }
272
 
273
  // Refresh report if (re)activated via the checkbox under Screen Options
274
- jQuery('input.hide-postbox-tog[id^=slim_]').bind('click.postboxes', function (){
275
- var report_id = jQuery(this).val();
276
- var data = {action: 'slimstat_load_report', report_id: report_id, security: jQuery('#meta-box-order-nonce').val()}
277
- jQuery('#'+report_id+' .inside').html('<p class="loading"></p>');
278
-
279
- if (jQuery(this).prop("checked") && jQuery('#'+jQuery(this).val()).length){
280
- SlimStatAdmin.refresh_report(report_id, data);
281
  }
282
  });
283
 
@@ -348,7 +337,7 @@ jQuery(function(){
348
  });
349
 
350
  // Send filters as post requests
351
- jQuery(document).on('click', '.slimstat-filter-link, #toplevel_page_wp-slim-view-1 li a, #wp-admin-bar-slimstat-header li a', function(e){
352
  e.preventDefault();
353
 
354
  if (!jQuery('#slimstat-filters-form').length){
@@ -408,7 +397,7 @@ jQuery(function(){
408
  data: data
409
  });
410
  });
411
-
412
  // Hide GeoLite Notice
413
  jQuery(document).on('click', '#slimstat-hide-geolite-notice', function(e){
414
  e.preventDefault();
@@ -564,7 +553,8 @@ jQuery(function(){
564
  }).html(inner_html);
565
  jQuery('#slimstat-modal-dialog').dialog('open');
566
  });
567
-
 
568
  jQuery(document).on('click', '#slimstat-save-filter', function(e){
569
  e.preventDefault();
570
 
@@ -579,7 +569,8 @@ jQuery(function(){
579
  }
580
  });
581
  });
582
-
 
583
  jQuery(document).on('click', '.slimstat-delete-filter', function(e){
584
  e.preventDefault();
585
 
@@ -601,8 +592,31 @@ jQuery(function(){
601
  SlimStatAdmin.chart_init();
602
  });
603
 
604
- // Remove click on report title
605
- jQuery('h3.hndle').on('click', function(){ jQuery(this).parent().toggleClass('closed') });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
606
  });
607
 
608
  /* SlimScroll v1.3.6 | http://rocha.la | Copyright (c) 2011 Piotr Rochala. Licensed MIT, GPL. */
@@ -611,8 +625,8 @@ jQuery(function(){
611
  /* qTip2 v2.2.1 | http://qtip2.com | Licensed MIT, GPL. */
612
  !function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=z,this.elements={target:a},this._id=M+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:y,attr:e,onTooltip:y,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=y}function f(a){return a===z||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?y:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?y:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==y,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,z,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||y)&&(b.title=y))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===x?{ready:x}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(L,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return P.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(W)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(x,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(W)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(Q)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(y,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(W)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+M+" "))+"."+M,function(){var a=s.api[d.attr(this,O)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):z,p="html5"===f.metadata.type&&o?o[f.metadata.name]:z,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(x,{},s.defaults,f,"object"==typeof q?h(q):z,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===y||!j)return y;k.content.text=j}if(i.container.length||(i.container=m),i.target===y&&(i.target=n),k.show.target===y&&(k.show.target=n),k.show.solo===x&&(k.show.solo=i.container.closest("body")),k.hide.target===y&&(k.hide.target=n),k.position.viewport===x&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new u(i.at,x),i.my=new u(i.my),a.data(M))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===y)return y;return a.attr(N,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(Y,l).attr("title",""),g=new e(a,k,c,!!j),a.data(M,g),g}var s,t,u,v,w,x=!0,y=!1,z=null,A="x",B="y",C="width",D="height",E="top",F="left",G="bottom",H="right",I="center",J="flipinvert",K="shift",L={},M="qtip",N="data-hasqtip",O="data-qtip-id",P=["ui-widget","ui-tooltip"],Q="."+M,R="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),S=M+"-fixed",T=M+"-default",U=M+"-focus",V=M+"-hover",W=M+"-disabled",X="_replacedByqTip",Y="oldtitle",Z={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||y};t=e.prototype,t._when=function(a){return d.when.apply(d,a)},t.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[M,T,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":y,"aria-describedby":this._id+"-content","aria-hidden":x}).toggleClass(W,this.disabled).attr(O,this.id).data(M,this).appendTo(k.container).append(g.content=d("<div />",{"class":M+"-content",id:this._id+"-content","aria-atomic":x})),this.rendered=-1,this.positioning=x,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,y))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,y)),this.rendered=x,this._setWidget(),d.each(L,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=y,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(x,f.event,y),c.hiddenDuringWait=y}),s.api[this.id]=this,this},t.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=x;var a,b=this.target,c=b.attr(Y);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(M).removeAttr(O).removeAttr(N).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(Y),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=z,delete s.api[this.id]}}return this.destroyed?this.target:(a===x&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},v=t.checks={builtin:{"^id$":function(a,b,c,e){var f=c===x?s.nextid:c,g=M+"-"+f;f!==y&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new u(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(x)||this.toggle(x))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(T,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},t.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var $=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,_=/^prerender|show\.ready/i;t.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=y,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&_.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=$.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=x,d.each(a,d.proxy(j,this)),this.positioning=y,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?z:this.cache.event),this},t._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=x,a.then(function(a){return e.waiting=y,c._update(a,b)},z,function(a){return c._update(a,b)})):a===y||!a&&""!==a?y:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):y},t._waitForContent=function(a){var b=this.cache;return b.waiting=x,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=y}).promise()},t._updateContent=function(a,b){this._update(a,this.elements.content,b)},t._updateTitle=function(a,b){this._update(a,this.elements.title,b)===y&&this._removeTitle(y)},t._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":M+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":M+"-title","aria-atomic":x})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},t._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=z,a!==y&&this.reposition())},t._createPosClass=function(a){return M+"-pos-"+(a||this.options.position.my).abbrev()},t.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=x;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(y),u=k.outerHeight(y),v=0,w=0,z=k.css("position"),A={left:0,top:0},B=k[0].offsetWidth>0,C=c&&"scroll"===c.type,D=d(a),J=q[0].ownerDocument,K=this.mouse;if(d.isArray(m)&&2===m.length)o={x:F,y:E},A={left:m[0],top:m[1]};else if("mouse"===m)o={x:F,y:E},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:K&&K.pageX&&(c=K),"static"!==z&&(A=q.offset()),J.body.offsetWidth!==(a.innerWidth||J.documentElement.clientWidth)&&(g=d(b.body).offset()),A={left:c.pageX-A.left+(g&&g.left||0),top:c.pageY-A.top+(g&&g.top||0)},r.mouse&&C&&K&&(A.left-=(K.scrollX||0)-D.scrollLeft(),A.top-=(K.scrollY||0)-D.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=Z.iOS?a.innerWidth:m.width(),w=Z.iOS?a.innerHeight:m.height(),m[0]===a&&(A={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):L.imagemap&&m.is("area")?f=L.imagemap(this,m,o,L.viewport?s:y):L.svg&&m&&m[0].ownerSVGElement?f=L.svg(this,m,o,L.viewport?s:y):(v=m.outerWidth(y),w=m.outerHeight(y),A=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,A=f.position),A=this.reposition.offset(m,A,q),(Z.iOS>3.1&&Z.iOS<4.1||Z.iOS>=4.3&&Z.iOS<4.33||!Z.iOS&&"fixed"===z)&&(A.left-=D.scrollLeft(),A.top-=D.scrollTop()),(!f||f&&f.adjustable!==y)&&(A.left+=o.x===H?v:o.x===I?v/2:0,A.top+=o.y===G?w:o.y===I?w/2:0)}return A.left+=r.x+(n.x===H?-t:n.x===I?-t/2:0),A.top+=r.y+(n.y===G?-u:n.y===I?-u/2:0),L.viewport?(h=A.adjusted=L.viewport(this,A,l,v,w,t,u),g&&h.left&&(A.left+=g.left),g&&h.top&&(A.top+=g.top),h.my&&(this.position.my=h.my)):A.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[A,p.elem||p],c)?(delete A.adjusted,e===y||!B||isNaN(A.left)||isNaN(A.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(A):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},A)),k.queue(function(a){d(this).css({opacity:"",height:""}),Z.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=y,this):this},t.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!Z.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var ab=(u=t.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,I).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?B:A}).prototype;ab.invert=function(a,b){this[a]=this[a]===F?H:this[a]===H?F:b||this[a]},ab.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===B||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},ab.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},ab.clone=function(){return new u(this.string(),this.forceY)},t.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=x),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?z:!!this._trigger(k,[90]),this.destroyed?this:(i!==y&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,y),d.isFunction(n.title)&&this._updateTitle(n.title,y),!w&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+M,this._storeMouse),w=x),o||g.css("width",g.outerWidth(y)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(Q,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,w&&!d(Q+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+M),w=y),this.blur(c)),j=d.proxy(function(){a?(Z.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===y||q===y?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},t.show=function(a){return this.toggle(x,a)},t.hide=function(a){return this.toggle(y,a)},t.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(Q),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=s.zindex+b.length;return c.hasClass(U)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+U).qtip("blur",a)),c.addClass(U)[0].style.zIndex=f),this},t.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass(U),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},t.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(W):this.disabled):"boolean"!=typeof a&&(a=x),this.rendered&&this.tooltip.toggleClass(W,a).attr("aria-disabled",a),this.disabled=!!a,this)},t.enable=function(){return this.disable(y)},t._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":M+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(W)||a.hide(b),y})},t._updateButton=function(a){if(!this.rendered)return y;var b=this.elements.button;a?this._createButton():b.remove()},t._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(W);c.removeClass(W),W=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(W,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(T,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(M+"-icon",!a)},t._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},t._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},t._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},t._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||z,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=y,!e.isDefaultPrevented()},t._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},t._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?y:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=x}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):y}),(c.show.ready||c.prerender)&&b.call(this,a)},t._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],t=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(S)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(W)&&this.tooltip[0].offsetWidth>0,e=b.parents(Q).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),s.inactiveEvents,o)),this._bindEvents(r,t,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):y}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(W)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},t._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(Q,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(S)&&!c.hasClass(W)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(V,b)}),q("["+O+"]",R,o)}),s=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=z,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],M):z;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,M);if(!a)return x;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),y;a.set(b,e)}}),g!==z?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(x,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===y||c.length<1||s.api[c]?s.nextid++:c,b=r(d(this),c,k),b===y?x:(s.api[c]=b,d.each(L,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,s.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,Y):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(Y,b))}return d.fn["attr"+X].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+X].apply(this,arguments));return a||b.filter("["+Y+"]").attr("title",function(){return d.attr(this,Y)}).removeAttr(Y),b}},function(a,b){if(!b||d.fn[a+X])return x;var c=d.fn[a+X]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+X]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(N))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+X].apply(this,arguments)}),s.version="2.2.1",s.nextid=0,s.inactiveEvents=R,s.zindex=15e3,s.defaults={prerender:y,id:y,overwrite:x,suppress:x,content:{text:x,attr:"title",title:y,button:y},position:{my:"top left",at:"bottom right",target:y,container:y,viewport:y,adjust:{x:0,y:0,mouse:x,scroll:x,resize:x,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:y})}},show:{target:y,event:"mouseenter",effect:x,delay:90,solo:y,ready:y,autofocus:y},hide:{target:y,event:"mouseleave",effect:x,delay:0,fixed:y,inactive:y,leave:"window",distance:y},style:{classes:"",widget:y,width:y,height:y,def:x},events:{render:z,move:z,show:z,hide:z,toggle:z,visible:z,hidden:z,focus:z,blur:z}},L.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===K,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===C?o:p)-z,D=x-(u.precedance===a||s===u[b]?y:0)-(t===I?i/2:0);return w?(D=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-D,Math.min(Math.max(-m[f]+r[f]+(h===C?o:p),k+D),d[f],"center"===s?k-x:1e9))):(e*=c===J?2:0,A>0&&(s!==f||B>0)?(d[f]-=D+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===I?-D:D)+e,l.invert(a,g)),d[f]<q&&-d[f]>B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),z=x[0],L=x[1]||x[0],M=e.viewport,N=e.container,O=(c.cache,{left:0,top:0});return M.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=N.offset()||O,n="static"===N.css("position"),k="fixed"===t.css("position"),o=M[0]===a?M.width():M.outerWidth(y),p=M[0]===a?M.height():M.outerHeight(y),q={left:k?0:M.scrollLeft(),top:k?0:M.scrollTop()},r=M.offset()||O,("shift"!==z||"shift"!==L)&&(l=u.clone()),O={left:"none"!==z?j(A,B,z,w.x,F,H,C,f,h):0,top:"none"!==L?j(B,A,L,w.y,E,G,D,g,i):0,my:l}):O}})}(window,document);
613
 
614
- /* flot v0.8.2 | https://github.com/flot/flot | Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. */
615
- (function(e){e.color={};e.color.make=function(t,n,r,i){var s={};s.r=t||0;s.g=n||0;s.b=r||0;s.a=i!=null?i:1;s.add=function(e,t){for(var n=0;n<e.length;++n)s[e.charAt(n)]+=t;return s.normalize()};s.scale=function(e,t){for(var n=0;n<e.length;++n)s[e.charAt(n)]*=t;return s.normalize()};s.toString=function(){if(s.a>=1){return"rgb("+[s.r,s.g,s.b].join(",")+")"}else{return"rgba("+[s.r,s.g,s.b,s.a].join(",")+")"}};s.normalize=function(){function e(e,t,n){return t<e?e:t>n?n:t}s.r=e(0,parseInt(s.r),255);s.g=e(0,parseInt(s.g),255);s.b=e(0,parseInt(s.b),255);s.a=e(0,s.a,1);return s};s.clone=function(){return e.color.make(s.r,s.b,s.g,s.a)};return s.normalize()};e.color.extract=function(t,n){var r;do{r=t.css(n).toLowerCase();if(r!=""&&r!="transparent")break;t=t.parent()}while(t.length&&!e.nodeName(t.get(0),"body"));if(r=="rgba(0, 0, 0, 0)")r="transparent";return e.color.parse(r)};e.color.parse=function(n){var r,i=e.color.make;if(r=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return i(parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10));if(r=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(n))return i(parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10),parseFloat(r[4]));if(r=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return i(parseFloat(r[1])*2.55,parseFloat(r[2])*2.55,parseFloat(r[3])*2.55);if(r=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(n))return i(parseFloat(r[1])*2.55,parseFloat(r[2])*2.55,parseFloat(r[3])*2.55,parseFloat(r[4]));if(r=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return i(parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16));if(r=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return i(parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16));var s=e.trim(n).toLowerCase();if(s=="transparent")return i(255,255,255,0);else{r=t[s]||[0,0,0];return i(r[0],r[1],r[2])}};var t={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function(e){function n(t,n){var r=n.children("."+t)[0];if(r==null){r=document.createElement("canvas");r.className=t;e(r).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(n);if(!r.getContext){if(window.G_vmlCanvasManager){r=window.G_vmlCanvasManager.initElement(r)}else{throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.")}}}this.element=r;var i=this.context=r.getContext("2d");var s=window.devicePixelRatio||1,o=i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1;this.pixelRatio=s/o;this.resize(n.width(),n.height());this.textContainer=null;this.text={};this._textCache={}}function r(t,r,s,o){function E(e,t){t=[w].concat(t);for(var n=0;n<e.length;++n)e[n].apply(this,t)}function S(){var t={Canvas:n};for(var r=0;r<o.length;++r){var i=o[r];i.init(w,t);if(i.options)e.extend(true,a,i.options)}}function x(n){e.extend(true,a,n);if(n&&n.colors){a.colors=n.colors}if(a.xaxis.color==null)a.xaxis.color=e.color.parse(a.grid.color).scale("a",.22).toString();if(a.yaxis.color==null)a.yaxis.color=e.color.parse(a.grid.color).scale("a",.22).toString();if(a.xaxis.tickColor==null)a.xaxis.tickColor=a.grid.tickColor||a.xaxis.color;if(a.yaxis.tickColor==null)a.yaxis.tickColor=a.grid.tickColor||a.yaxis.color;if(a.grid.borderColor==null)a.grid.borderColor=a.grid.color;if(a.grid.tickColor==null)a.grid.tickColor=e.color.parse(a.grid.color).scale("a",.22).toString();var r,i,s,o=t.css("font-size"),u=o?+o.replace("px",""):13,f={style:t.css("font-style"),size:Math.round(.8*u),variant:t.css("font-variant"),weight:t.css("font-weight"),family:t.css("font-family")};s=a.xaxes.length||1;for(r=0;r<s;++r){i=a.xaxes[r];if(i&&!i.tickColor){i.tickColor=i.color}i=e.extend(true,{},a.xaxis,i);a.xaxes[r]=i;if(i.font){i.font=e.extend({},f,i.font);if(!i.font.color){i.font.color=i.color}if(!i.font.lineHeight){i.font.lineHeight=Math.round(i.font.size*1.15)}}}s=a.yaxes.length||1;for(r=0;r<s;++r){i=a.yaxes[r];if(i&&!i.tickColor){i.tickColor=i.color}i=e.extend(true,{},a.yaxis,i);a.yaxes[r]=i;if(i.font){i.font=e.extend({},f,i.font);if(!i.font.color){i.font.color=i.color}if(!i.font.lineHeight){i.font.lineHeight=Math.round(i.font.size*1.15)}}}if(a.xaxis.noTicks&&a.xaxis.ticks==null)a.xaxis.ticks=a.xaxis.noTicks;if(a.yaxis.noTicks&&a.yaxis.ticks==null)a.yaxis.ticks=a.yaxis.noTicks;if(a.x2axis){a.xaxes[1]=e.extend(true,{},a.xaxis,a.x2axis);a.xaxes[1].position="top"}if(a.y2axis){a.yaxes[1]=e.extend(true,{},a.yaxis,a.y2axis);a.yaxes[1].position="right"}if(a.grid.coloredAreas)a.grid.markings=a.grid.coloredAreas;if(a.grid.coloredAreasColor)a.grid.markingsColor=a.grid.coloredAreasColor;if(a.lines)e.extend(true,a.series.lines,a.lines);if(a.points)e.extend(true,a.series.points,a.points);if(a.bars)e.extend(true,a.series.bars,a.bars);if(a.shadowSize!=null)a.series.shadowSize=a.shadowSize;if(a.highlightColor!=null)a.series.highlightColor=a.highlightColor;for(r=0;r<a.xaxes.length;++r)O(d,r+1).options=a.xaxes[r];for(r=0;r<a.yaxes.length;++r)O(v,r+1).options=a.yaxes[r];for(var l in b)if(a.hooks[l]&&a.hooks[l].length)b[l]=b[l].concat(a.hooks[l]);E(b.processOptions,[a])}function T(e){u=N(e);M();_()}function N(t){var n=[];for(var r=0;r<t.length;++r){var i=e.extend(true,{},a.series);if(t[r].data!=null){i.data=t[r].data;delete t[r].data;e.extend(true,i,t[r]);t[r].data=i.data}else i.data=t[r];n.push(i)}return n}function C(e,t){var n=e[t+"axis"];if(typeof n=="object")n=n.n;if(typeof n!="number")n=1;return n}function k(){return e.grep(d.concat(v),function(e){return e})}function L(e){var t={},n,r;for(n=0;n<d.length;++n){r=d[n];if(r&&r.used)t["x"+r.n]=r.c2p(e.left)}for(n=0;n<v.length;++n){r=v[n];if(r&&r.used)t["y"+r.n]=r.c2p(e.top)}if(t.x1!==undefined)t.x=t.x1;if(t.y1!==undefined)t.y=t.y1;return t}function A(e){var t={},n,r,i;for(n=0;n<d.length;++n){r=d[n];if(r&&r.used){i="x"+r.n;if(e[i]==null&&r.n==1)i="x";if(e[i]!=null){t.left=r.p2c(e[i]);break}}}for(n=0;n<v.length;++n){r=v[n];if(r&&r.used){i="y"+r.n;if(e[i]==null&&r.n==1)i="y";if(e[i]!=null){t.top=r.p2c(e[i]);break}}}return t}function O(t,n){if(!t[n-1])t[n-1]={n:n,direction:t==d?"x":"y",options:e.extend(true,{},t==d?a.xaxis:a.yaxis)};return t[n-1]}function M(){var t=u.length,n=-1,r;for(r=0;r<u.length;++r){var i=u[r].color;if(i!=null){t--;if(typeof i=="number"&&i>n){n=i}}}if(t<=n){t=n+1}var s,o=[],f=a.colors,l=f.length,c=0;for(r=0;r<t;r++){s=e.color.parse(f[r%l]||"#666");if(r%l==0&&r){if(c>=0){if(c<.5){c=-c-.2}else c=0}else c=-c}o[r]=s.scale("rgb",1+c)}var h=0,p;for(r=0;r<u.length;++r){p=u[r];if(p.color==null){p.color=o[h].toString();++h}else if(typeof p.color=="number")p.color=o[p.color].toString();if(p.lines.show==null){var m,g=true;for(m in p)if(p[m]&&p[m].show){g=false;break}if(g)p.lines.show=true}if(p.lines.zero==null){p.lines.zero=!!p.lines.fill}p.xaxis=O(d,C(p,"x"));p.yaxis=O(v,C(p,"y"))}}function _(){function x(e,t,n){if(t<e.datamin&&t!=-r)e.datamin=t;if(n>e.datamax&&n!=r)e.datamax=n}var t=Number.POSITIVE_INFINITY,n=Number.NEGATIVE_INFINITY,r=Number.MAX_VALUE,i,s,o,a,f,l,c,h,p,d,v,m,g,y,w,S;e.each(k(),function(e,r){r.datamin=t;r.datamax=n;r.used=false});for(i=0;i<u.length;++i){l=u[i];l.datapoints={points:[]};E(b.processRawData,[l,l.data,l.datapoints])}for(i=0;i<u.length;++i){l=u[i];w=l.data;S=l.datapoints.format;if(!S){S=[];S.push({x:true,number:true,required:true});S.push({y:true,number:true,required:true});if(l.bars.show||l.lines.show&&l.lines.fill){var T=!!(l.bars.show&&l.bars.zero||l.lines.show&&l.lines.zero);S.push({y:true,number:true,required:false,defaultValue:0,autoscale:T});if(l.bars.horizontal){delete S[S.length-1].y;S[S.length-1].x=true}}l.datapoints.format=S}if(l.datapoints.pointsize!=null)continue;l.datapoints.pointsize=S.length;h=l.datapoints.pointsize;c=l.datapoints.points;var N=l.lines.show&&l.lines.steps;l.xaxis.used=l.yaxis.used=true;for(s=o=0;s<w.length;++s,o+=h){y=w[s];var C=y==null;if(!C){for(a=0;a<h;++a){m=y[a];g=S[a];if(g){if(g.number&&m!=null){m=+m;if(isNaN(m))m=null;else if(m==Infinity)m=r;else if(m==-Infinity)m=-r}if(m==null){if(g.required)C=true;if(g.defaultValue!=null)m=g.defaultValue}}c[o+a]=m}}if(C){for(a=0;a<h;++a){m=c[o+a];if(m!=null){g=S[a];if(g.autoscale!==false){if(g.x){x(l.xaxis,m,m)}if(g.y){x(l.yaxis,m,m)}}}c[o+a]=null}}else{if(N&&o>0&&c[o-h]!=null&&c[o-h]!=c[o]&&c[o-h+1]!=c[o+1]){for(a=0;a<h;++a)c[o+h+a]=c[o+a];c[o+1]=c[o-h+1];o+=h}}}}for(i=0;i<u.length;++i){l=u[i];E(b.processDatapoints,[l,l.datapoints])}for(i=0;i<u.length;++i){l=u[i];c=l.datapoints.points;h=l.datapoints.pointsize;S=l.datapoints.format;var L=t,A=t,O=n,M=n;for(s=0;s<c.length;s+=h){if(c[s]==null)continue;for(a=0;a<h;++a){m=c[s+a];g=S[a];if(!g||g.autoscale===false||m==r||m==-r)continue;if(g.x){if(m<L)L=m;if(m>O)O=m}if(g.y){if(m<A)A=m;if(m>M)M=m}}}if(l.bars.show){var _;switch(l.bars.align){case"left":_=0;break;case"right":_=-l.bars.barWidth;break;default:_=-l.bars.barWidth/2}if(l.bars.horizontal){A+=_;M+=_+l.bars.barWidth}else{L+=_;O+=_+l.bars.barWidth}}x(l.xaxis,L,O);x(l.yaxis,A,M)}e.each(k(),function(e,r){if(r.datamin==t)r.datamin=null;if(r.datamax==n)r.datamax=null})}function D(){t.css("padding",0).children().filter(function(){return!e(this).hasClass("flot-overlay")&&!e(this).hasClass("flot-base")}).remove();if(t.css("position")=="static")t.css("position","relative");f=new n("flot-base",t);l=new n("flot-overlay",t);h=f.context;p=l.context;c=e(l.element).unbind();var r=t.data("plot");if(r){r.shutdown();l.clear()}t.data("plot",w)}function P(){if(a.grid.hoverable){c.mousemove(at);c.bind("mouseleave",ft)}if(a.grid.clickable)c.click(lt);E(b.bindEvents,[c])}function H(){if(ot)clearTimeout(ot);c.unbind("mousemove",at);c.unbind("mouseleave",ft);c.unbind("click",lt);E(b.shutdown,[c])}function B(e){function t(e){return e}var n,r,i=e.options.transform||t,s=e.options.inverseTransform;if(e.direction=="x"){n=e.scale=g/Math.abs(i(e.max)-i(e.min));r=Math.min(i(e.max),i(e.min))}else{n=e.scale=y/Math.abs(i(e.max)-i(e.min));n=-n;r=Math.max(i(e.max),i(e.min))}if(i==t)e.p2c=function(e){return(e-r)*n};else e.p2c=function(e){return(i(e)-r)*n};if(!s)e.c2p=function(e){return r+e/n};else e.c2p=function(e){return s(r+e/n)}}function j(e){var t=e.options,n=e.ticks||[],r=t.labelWidth||0,i=t.labelHeight||0,s=r||(e.direction=="x"?Math.floor(f.width/(n.length||1)):null),o=e.direction+"Axis "+e.direction+e.n+"Axis",u="flot-"+e.direction+"-axis flot-"+e.direction+e.n+"-axis "+o,a=t.font||"flot-tick-label tickLabel";for(var l=0;l<n.length;++l){var c=n[l];if(!c.label)continue;var h=f.getTextInfo(u,c.label,a,null,s);r=Math.max(r,h.width);i=Math.max(i,h.height)}e.labelWidth=t.labelWidth||r;e.labelHeight=t.labelHeight||i}function F(t){var n=t.labelWidth,r=t.labelHeight,i=t.options.position,s=t.direction==="x",o=t.options.tickLength,u=a.grid.axisMargin,l=a.grid.labelMargin,c=true,h=true,p=true,g=false;e.each(s?d:v,function(e,n){if(n&&n.reserveSpace){if(n===t){g=true}else if(n.options.position===i){if(g){h=false}else{c=false}}if(!g){p=false}}});if(h){u=0}if(o==null){o=p?"full":5}if(!isNaN(+o))l+=+o;if(s){r+=l;if(i=="bottom"){m.bottom+=r+u;t.box={top:f.height-m.bottom,height:r}}else{t.box={top:m.top+u,height:r};m.top+=r+u}}else{n+=l;if(i=="left"){t.box={left:m.left+u,width:n};m.left+=n+u}else{m.right+=n+u;t.box={left:f.width-m.right,width:n}}}t.position=i;t.tickLength=o;t.box.padding=l;t.innermost=c}function I(e){if(e.direction=="x"){e.box.left=m.left-e.labelWidth/2;e.box.width=f.width-m.left-m.right+e.labelWidth}else{e.box.top=m.top-e.labelHeight/2;e.box.height=f.height-m.bottom-m.top+e.labelHeight}}function q(){var t=a.grid.minBorderMargin,n,r;if(t==null){t=0;for(r=0;r<u.length;++r)t=Math.max(t,2*(u[r].points.radius+u[r].points.lineWidth/2))}var i={left:t,right:t,top:t,bottom:t};e.each(k(),function(e,t){if(t.reserveSpace&&t.ticks&&t.ticks.length){var n=t.ticks[t.ticks.length-1];if(t.direction==="x"){i.left=Math.max(i.left,t.labelWidth/2);if(n.v<=t.max){i.right=Math.max(i.right,t.labelWidth/2)}}else{i.bottom=Math.max(i.bottom,t.labelHeight/2);if(n.v<=t.max){i.top=Math.max(i.top,t.labelHeight/2)}}}});m.left=Math.ceil(Math.max(i.left,m.left));m.right=Math.ceil(Math.max(i.right,m.right));m.top=Math.ceil(Math.max(i.top,m.top));m.bottom=Math.ceil(Math.max(i.bottom,m.bottom))}function R(){var t,n=k(),r=a.grid.show;for(var i in m){var s=a.grid.margin||0;m[i]=typeof s=="number"?s:s[i]||0}E(b.processOffset,[m]);for(var i in m){if(typeof a.grid.borderWidth=="object"){m[i]+=r?a.grid.borderWidth[i]:0}else{m[i]+=r?a.grid.borderWidth:0}}e.each(n,function(e,t){t.show=t.options.show;if(t.show==null)t.show=t.used;t.reserveSpace=t.show||t.options.reserveSpace;U(t)});if(r){var o=e.grep(n,function(e){return e.reserveSpace});e.each(o,function(e,t){z(t);W(t);X(t,t.ticks);j(t)});for(t=o.length-1;t>=0;--t)F(o[t]);q();e.each(o,function(e,t){I(t)})}g=f.width-m.left-m.right;y=f.height-m.bottom-m.top;e.each(n,function(e,t){B(t)});if(r){G()}it()}function U(e){var t=e.options,n=+(t.min!=null?t.min:e.datamin),r=+(t.max!=null?t.max:e.datamax),i=r-n;if(i==0){var s=r==0?1:.01;if(t.min==null)n-=s;if(t.max==null||t.min!=null)r+=s}else{var o=t.autoscaleMargin;if(o!=null){if(t.min==null){n-=i*o;if(n<0&&e.datamin!=null&&e.datamin>=0)n=0}if(t.max==null){r+=i*o;if(r>0&&e.datamax!=null&&e.datamax<=0)r=0}}}e.min=n;e.max=r}function z(t){var n=t.options;var r;if(typeof n.ticks=="number"&&n.ticks>0)r=n.ticks;else r=.3*Math.sqrt(t.direction=="x"?f.width:f.height);var s=(t.max-t.min)/r,o=-Math.floor(Math.log(s)/Math.LN10),u=n.tickDecimals;if(u!=null&&o>u){o=u}var a=Math.pow(10,-o),l=s/a,c;if(l<1.5){c=1}else if(l<3){c=2;if(l>2.25&&(u==null||o+1<=u)){c=2.5;++o}}else if(l<7.5){c=5}else{c=10}c*=a;if(n.minTickSize!=null&&c<n.minTickSize){c=n.minTickSize}t.delta=s;t.tickDecimals=Math.max(0,u!=null?u:o);t.tickSize=n.tickSize||c;if(n.mode=="time"&&!t.tickGenerator){throw new Error("Time mode requires the flot.time plugin.")}if(!t.tickGenerator){t.tickGenerator=function(e){var t=[],n=i(e.min,e.tickSize),r=0,s=Number.NaN,o;do{o=s;s=n+r*e.tickSize;t.push(s);++r}while(s<e.max&&s!=o);return t};t.tickFormatter=function(e,t){var n=t.tickDecimals?Math.pow(10,t.tickDecimals):1;var r=""+Math.round(e*n)/n;if(t.tickDecimals!=null){var i=r.indexOf(".");var s=i==-1?0:r.length-i-1;if(s<t.tickDecimals){return(s?r:r+".")+(""+n).substr(1,t.tickDecimals-s)}}return r}}if(e.isFunction(n.tickFormatter))t.tickFormatter=function(e,t){return""+n.tickFormatter(e,t)};if(n.alignTicksWithAxis!=null){var h=(t.direction=="x"?d:v)[n.alignTicksWithAxis-1];if(h&&h.used&&h!=t){var p=t.tickGenerator(t);if(p.length>0){if(n.min==null)t.min=Math.min(t.min,p[0]);if(n.max==null&&p.length>1)t.max=Math.max(t.max,p[p.length-1])}t.tickGenerator=function(e){var t=[],n,r;for(r=0;r<h.ticks.length;++r){n=(h.ticks[r].v-h.min)/(h.max-h.min);n=e.min+n*(e.max-e.min);t.push(n)}return t};if(!t.mode&&n.tickDecimals==null){var m=Math.max(0,-Math.floor(Math.log(t.delta)/Math.LN10)+1),g=t.tickGenerator(t);if(!(g.length>1&&/\..*0$/.test((g[1]-g[0]).toFixed(m))))t.tickDecimals=m}}}}function W(t){var n=t.options.ticks,r=[];if(n==null||typeof n=="number"&&n>0)r=t.tickGenerator(t);else if(n){if(e.isFunction(n))r=n(t);else r=n}var i,s;t.ticks=[];for(i=0;i<r.length;++i){var o=null;var u=r[i];if(typeof u=="object"){s=+u[0];if(u.length>1)o=u[1]}else s=+u;if(o==null)o=t.tickFormatter(s,t);if(!isNaN(s))t.ticks.push({v:s,label:o})}}function X(e,t){if(e.options.autoscaleMargin&&t.length>0){if(e.options.min==null)e.min=Math.min(e.min,t[0].v);if(e.options.max==null&&t.length>1)e.max=Math.max(e.max,t[t.length-1].v)}}function V(){f.clear();E(b.drawBackground,[h]);var e=a.grid;if(e.show&&e.backgroundColor)K();if(e.show&&!e.aboveData){Q()}for(var t=0;t<u.length;++t){E(b.drawSeries,[h,u[t]]);Y(u[t])}E(b.draw,[h]);if(e.show&&e.aboveData){Q()}f.render();ht()}function J(e,t){var n,r,i,s,o=k();for(var u=0;u<o.length;++u){n=o[u];if(n.direction==t){s=t+n.n+"axis";if(!e[s]&&n.n==1)s=t+"axis";if(e[s]){r=e[s].from;i=e[s].to;break}}}if(!e[s]){n=t=="x"?d[0]:v[0];r=e[t+"1"];i=e[t+"2"]}if(r!=null&&i!=null&&r>i){var a=r;r=i;i=a}return{from:r,to:i,axis:n}}function K(){h.save();h.translate(m.left,m.top);h.fillStyle=bt(a.grid.backgroundColor,y,0,"rgba(255, 255, 255, 0)");h.fillRect(0,0,g,y);h.restore()}function Q(){var t,n,r,i;h.save();h.translate(m.left,m.top);var s=a.grid.markings;if(s){if(e.isFunction(s)){n=w.getAxes();n.xmin=n.xaxis.min;n.xmax=n.xaxis.max;n.ymin=n.yaxis.min;n.ymax=n.yaxis.max;s=s(n)}for(t=0;t<s.length;++t){var o=s[t],u=J(o,"x"),f=J(o,"y");if(u.from==null)u.from=u.axis.min;if(u.to==null)u.to=u.axis.max;if(f.from==null)f.from=f.axis.min;if(f.to==null)f.to=f.axis.max;if(u.to<u.axis.min||u.from>u.axis.max||f.to<f.axis.min||f.from>f.axis.max)continue;u.from=Math.max(u.from,u.axis.min);u.to=Math.min(u.to,u.axis.max);f.from=Math.max(f.from,f.axis.min);f.to=Math.min(f.to,f.axis.max);if(u.from==u.to&&f.from==f.to)continue;u.from=u.axis.p2c(u.from);u.to=u.axis.p2c(u.to);f.from=f.axis.p2c(f.from);f.to=f.axis.p2c(f.to);if(u.from==u.to||f.from==f.to){h.beginPath();h.strokeStyle=o.color||a.grid.markingsColor;h.lineWidth=o.lineWidth||a.grid.markingsLineWidth;h.moveTo(u.from,f.from);h.lineTo(u.to,f.to);h.stroke()}else{h.fillStyle=o.color||a.grid.markingsColor;h.fillRect(u.from,f.to,u.to-u.from,f.from-f.to)}}}n=k();r=a.grid.borderWidth;for(var l=0;l<n.length;++l){var c=n[l],p=c.box,d=c.tickLength,v,b,E,S;if(!c.show||c.ticks.length==0)continue;h.lineWidth=1;if(c.direction=="x"){v=0;if(d=="full")b=c.position=="top"?0:y;else b=p.top-m.top+(c.position=="top"?p.height:0)}else{b=0;if(d=="full")v=c.position=="left"?0:g;else v=p.left-m.left+(c.position=="left"?p.width:0)}if(!c.innermost){h.strokeStyle=c.options.color;h.beginPath();E=S=0;if(c.direction=="x")E=g+1;else S=y+1;if(h.lineWidth==1){if(c.direction=="x"){b=Math.floor(b)+.5}else{v=Math.floor(v)+.5}}h.moveTo(v,b);h.lineTo(v+E,b+S);h.stroke()}h.strokeStyle=c.options.tickColor;h.beginPath();for(t=0;t<c.ticks.length;++t){var x=c.ticks[t].v;E=S=0;if(isNaN(x)||x<c.min||x>c.max||d=="full"&&(typeof r=="object"&&r[c.position]>0||r>0)&&(x==c.min||x==c.max))continue;if(c.direction=="x"){v=c.p2c(x);S=d=="full"?-y:d;if(c.position=="top")S=-S}else{b=c.p2c(x);E=d=="full"?-g:d;if(c.position=="left")E=-E}if(h.lineWidth==1){if(c.direction=="x")v=Math.floor(v)+.5;else b=Math.floor(b)+.5}h.moveTo(v,b);h.lineTo(v+E,b+S)}h.stroke()}if(r){i=a.grid.borderColor;if(typeof r=="object"||typeof i=="object"){if(typeof r!=="object"){r={top:r,right:r,bottom:r,left:r}}if(typeof i!=="object"){i={top:i,right:i,bottom:i,left:i}}if(r.top>0){h.strokeStyle=i.top;h.lineWidth=r.top;h.beginPath();h.moveTo(0-r.left,0-r.top/2);h.lineTo(g,0-r.top/2);h.stroke()}if(r.right>0){h.strokeStyle=i.right;h.lineWidth=r.right;h.beginPath();h.moveTo(g+r.right/2,0-r.top);h.lineTo(g+r.right/2,y);h.stroke()}if(r.bottom>0){h.strokeStyle=i.bottom;h.lineWidth=r.bottom;h.beginPath();h.moveTo(g+r.right,y+r.bottom/2);h.lineTo(0,y+r.bottom/2);h.stroke()}if(r.left>0){h.strokeStyle=i.left;h.lineWidth=r.left;h.beginPath();h.moveTo(0-r.left/2,y+r.bottom);h.lineTo(0-r.left/2,0);h.stroke()}}else{h.lineWidth=r;h.strokeStyle=a.grid.borderColor;h.strokeRect(-r/2,-r/2,g+r,y+r)}}h.restore()}function G(){e.each(k(),function(e,t){var n=t.box,r=t.direction+"Axis "+t.direction+t.n+"Axis",i="flot-"+t.direction+"-axis flot-"+t.direction+t.n+"-axis "+r,s=t.options.font||"flot-tick-label tickLabel",o,u,a,l,c;f.removeText(i);if(!t.show||t.ticks.length==0)return;for(var h=0;h<t.ticks.length;++h){o=t.ticks[h];if(!o.label||o.v<t.min||o.v>t.max)continue;if(t.direction=="x"){l="center";u=m.left+t.p2c(o.v);if(t.position=="bottom"){a=n.top+n.padding}else{a=n.top+n.height-n.padding;c="bottom"}}else{c="middle";a=m.top+t.p2c(o.v);if(t.position=="left"){u=n.left+n.width-n.padding;l="right"}else{u=n.left+n.padding}}f.addText(i,u,a,o.label,s,null,null,l,c)}})}function Y(e){if(e.lines.show)Z(e);if(e.bars.show)nt(e);if(e.points.show)et(e)}function Z(e){function t(e,t,n,r,i){var s=e.points,o=e.pointsize,u=null,a=null;h.beginPath();for(var f=o;f<s.length;f+=o){var l=s[f-o],c=s[f-o+1],p=s[f],d=s[f+1];if(l==null||p==null)continue;if(c<=d&&c<i.min){if(d<i.min)continue;l=(i.min-c)/(d-c)*(p-l)+l;c=i.min}else if(d<=c&&d<i.min){if(c<i.min)continue;p=(i.min-c)/(d-c)*(p-l)+l;d=i.min}if(c>=d&&c>i.max){if(d>i.max)continue;l=(i.max-c)/(d-c)*(p-l)+l;c=i.max}else if(d>=c&&d>i.max){if(c>i.max)continue;p=(i.max-c)/(d-c)*(p-l)+l;d=i.max}if(l<=p&&l<r.min){if(p<r.min)continue;c=(r.min-l)/(p-l)*(d-c)+c;l=r.min}else if(p<=l&&p<r.min){if(l<r.min)continue;d=(r.min-l)/(p-l)*(d-c)+c;p=r.min}if(l>=p&&l>r.max){if(p>r.max)continue;c=(r.max-l)/(p-l)*(d-c)+c;l=r.max}else if(p>=l&&p>r.max){if(l>r.max)continue;d=(r.max-l)/(p-l)*(d-c)+c;p=r.max}if(l!=u||c!=a)h.moveTo(r.p2c(l)+t,i.p2c(c)+n);u=p;a=d;h.lineTo(r.p2c(p)+t,i.p2c(d)+n)}h.stroke()}function n(e,t,n){var r=e.points,i=e.pointsize,s=Math.min(Math.max(0,n.min),n.max),o=0,u,a=false,f=1,l=0,c=0;while(true){if(i>0&&o>r.length+i)break;o+=i;var p=r[o-i],d=r[o-i+f],v=r[o],m=r[o+f];if(a){if(i>0&&p!=null&&v==null){c=o;i=-i;f=2;continue}if(i<0&&o==l+i){h.fill();a=false;i=-i;f=1;o=l=c+i;continue}}if(p==null||v==null)continue;if(p<=v&&p<t.min){if(v<t.min)continue;d=(t.min-p)/(v-p)*(m-d)+d;p=t.min}else if(v<=p&&v<t.min){if(p<t.min)continue;m=(t.min-p)/(v-p)*(m-d)+d;v=t.min}if(p>=v&&p>t.max){if(v>t.max)continue;d=(t.max-p)/(v-p)*(m-d)+d;p=t.max}else if(v>=p&&v>t.max){if(p>t.max)continue;m=(t.max-p)/(v-p)*(m-d)+d;v=t.max}if(!a){h.beginPath();h.moveTo(t.p2c(p),n.p2c(s));a=true}if(d>=n.max&&m>=n.max){h.lineTo(t.p2c(p),n.p2c(n.max));h.lineTo(t.p2c(v),n.p2c(n.max));continue}else if(d<=n.min&&m<=n.min){h.lineTo(t.p2c(p),n.p2c(n.min));h.lineTo(t.p2c(v),n.p2c(n.min));continue}var g=p,y=v;if(d<=m&&d<n.min&&m>=n.min){p=(n.min-d)/(m-d)*(v-p)+p;d=n.min}else if(m<=d&&m<n.min&&d>=n.min){v=(n.min-d)/(m-d)*(v-p)+p;m=n.min}if(d>=m&&d>n.max&&m<=n.max){p=(n.max-d)/(m-d)*(v-p)+p;d=n.max}else if(m>=d&&m>n.max&&d<=n.max){v=(n.max-d)/(m-d)*(v-p)+p;m=n.max}if(p!=g){h.lineTo(t.p2c(g),n.p2c(d))}h.lineTo(t.p2c(p),n.p2c(d));h.lineTo(t.p2c(v),n.p2c(m));if(v!=y){h.lineTo(t.p2c(v),n.p2c(m));h.lineTo(t.p2c(y),n.p2c(m))}}}h.save();h.translate(m.left,m.top);h.lineJoin="round";var r=e.lines.lineWidth,i=e.shadowSize;if(r>0&&i>0){h.lineWidth=i;h.strokeStyle="rgba(0,0,0,0.1)";var s=Math.PI/18;t(e.datapoints,Math.sin(s)*(r/2+i/2),Math.cos(s)*(r/2+i/2),e.xaxis,e.yaxis);h.lineWidth=i/2;t(e.datapoints,Math.sin(s)*(r/2+i/4),Math.cos(s)*(r/2+i/4),e.xaxis,e.yaxis)}h.lineWidth=r;h.strokeStyle=e.color;var o=rt(e.lines,e.color,0,y);if(o){h.fillStyle=o;n(e.datapoints,e.xaxis,e.yaxis)}if(r>0)t(e.datapoints,0,0,e.xaxis,e.yaxis);h.restore()}function et(e){function t(e,t,n,r,i,s,o,u){var a=e.points,f=e.pointsize;for(var l=0;l<a.length;l+=f){var c=a[l],p=a[l+1];if(c==null||c<s.min||c>s.max||p<o.min||p>o.max)continue;h.beginPath();c=s.p2c(c);p=o.p2c(p)+r;if(u=="circle")h.arc(c,p,t,0,i?Math.PI:Math.PI*2,false);else u(h,c,p,t,i);h.closePath();if(n){h.fillStyle=n;h.fill()}h.stroke()}}h.save();h.translate(m.left,m.top);var n=e.points.lineWidth,r=e.shadowSize,i=e.points.radius,s=e.points.symbol;if(n==0)n=1e-4;if(n>0&&r>0){var o=r/2;h.lineWidth=o;h.strokeStyle="rgba(0,0,0,0.1)";t(e.datapoints,i,null,o+o/2,true,e.xaxis,e.yaxis,s);h.strokeStyle="rgba(0,0,0,0.2)";t(e.datapoints,i,null,o/2,true,e.xaxis,e.yaxis,s)}h.lineWidth=n;h.strokeStyle=e.color;t(e.datapoints,i,rt(e.points,e.color),0,false,e.xaxis,e.yaxis,s);h.restore()}function tt(e,t,n,r,i,s,o,u,a,f,l){var c,h,p,d,v,m,g,y,b;if(f){y=m=g=true;v=false;c=n;h=e;d=t+r;p=t+i;if(h<c){b=h;h=c;c=b;v=true;m=false}}else{v=m=g=true;y=false;c=e+r;h=e+i;p=n;d=t;if(d<p){b=d;d=p;p=b;y=true;g=false}}if(h<o.min||c>o.max||d<u.min||p>u.max)return;if(c<o.min){c=o.min;v=false}if(h>o.max){h=o.max;m=false}if(p<u.min){p=u.min;y=false}if(d>u.max){d=u.max;g=false}c=o.p2c(c);p=u.p2c(p);h=o.p2c(h);d=u.p2c(d);if(s){a.fillStyle=s(p,d);a.fillRect(c,d,h-c,p-d)}if(l>0&&(v||m||g||y)){a.beginPath();a.moveTo(c,p);if(v)a.lineTo(c,d);else a.moveTo(c,d);if(g)a.lineTo(h,d);else a.moveTo(h,d);if(m)a.lineTo(h,p);else a.moveTo(h,p);if(y)a.lineTo(c,p);else a.moveTo(c,p);a.stroke()}}function nt(e){function t(t,n,r,i,s,o){var u=t.points,a=t.pointsize;for(var f=0;f<u.length;f+=a){if(u[f]==null)continue;tt(u[f],u[f+1],u[f+2],n,r,i,s,o,h,e.bars.horizontal,e.bars.lineWidth)}}h.save();h.translate(m.left,m.top);h.lineWidth=e.bars.lineWidth;h.strokeStyle=e.color;var n;switch(e.bars.align){case"left":n=0;break;case"right":n=-e.bars.barWidth;break;default:n=-e.bars.barWidth/2}var r=e.bars.fill?function(t,n){return rt(e.bars,e.color,t,n)}:null;t(e.datapoints,n,n+e.bars.barWidth,r,e.xaxis,e.yaxis);h.restore()}function rt(t,n,r,i){var s=t.fill;if(!s)return null;if(t.fillColor)return bt(t.fillColor,r,i,n);var o=e.color.parse(n);o.a=typeof s=="number"?s:.4;o.normalize();return o.toString()}function it(){if(a.legend.container!=null){e(a.legend.container).html("")}else{t.find(".legend").remove()}if(!a.legend.show){return}var n=[],r=[],i=false,s=a.legend.labelFormatter,o,f;for(var l=0;l<u.length;++l){o=u[l];if(o.label){f=s?s(o.label,o):o.label;if(f){r.push({label:f,color:o.color})}}}if(a.legend.sorted){if(e.isFunction(a.legend.sorted)){r.sort(a.legend.sorted)}else if(a.legend.sorted=="reverse"){r.reverse()}else{var c=a.legend.sorted!="descending";r.sort(function(e,t){return e.label==t.label?0:e.label<t.label!=c?1:-1})}}for(var l=0;l<r.length;++l){var h=r[l];if(l%a.legend.noColumns==0){if(i)n.push("</tr>");n.push("<tr>");i=true}n.push('<td class="legendColorBox"><div style="border:1px solid '+a.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+h.color+';overflow:hidden"></div></div></td>'+'<td class="legendLabel">'+h.label+"</td>")}if(i)n.push("</tr>");if(n.length==0)return;var p='<table style="font-size:smaller;color:'+a.grid.color+'">'+n.join("")+"</table>";if(a.legend.container!=null)e(a.legend.container).html(p);else{var d="",v=a.legend.position,g=a.legend.margin;if(g[0]==null)g=[g,g];if(v.charAt(0)=="n")d+="top:"+(g[1]+m.top)+"px;";else if(v.charAt(0)=="s")d+="bottom:"+(g[1]+m.bottom)+"px;";if(v.charAt(1)=="e")d+="right:"+(g[0]+m.right)+"px;";else if(v.charAt(1)=="w")d+="left:"+(g[0]+m.left)+"px;";var y=e('<div class="legend">'+p.replace('style="','style="position:absolute;'+d+";")+"</div>").appendTo(t);if(a.legend.backgroundOpacity!=0){var b=a.legend.backgroundColor;if(b==null){b=a.grid.backgroundColor;if(b&&typeof b=="string")b=e.color.parse(b);else b=e.color.extract(y,"background-color");b.a=1;b=b.toString()}var w=y.children();e('<div style="position:absolute;width:'+w.width()+"px;height:"+w.height()+"px;"+d+"background-color:"+b+';"> </div>').prependTo(y).css("opacity",a.legend.backgroundOpacity)}}}function ut(e,t,n){var r=a.grid.mouseActiveRadius,i=r*r+1,s=null,o=false,f,l,c;for(f=u.length-1;f>=0;--f){if(!n(u[f]))continue;var h=u[f],p=h.xaxis,d=h.yaxis,v=h.datapoints.points,m=p.c2p(e),g=d.c2p(t),y=r/p.scale,b=r/d.scale;c=h.datapoints.pointsize;if(p.options.inverseTransform)y=Number.MAX_VALUE;if(d.options.inverseTransform)b=Number.MAX_VALUE;if(h.lines.show||h.points.show){for(l=0;l<v.length;l+=c){var w=v[l],E=v[l+1];if(w==null)continue;if(w-m>y||w-m<-y||E-g>b||E-g<-b)continue;var S=Math.abs(p.p2c(w)-e),x=Math.abs(d.p2c(E)-t),T=S*S+x*x;if(T<i){i=T;s=[f,l/c]}}}if(h.bars.show&&!s){var N,C;switch(h.bars.align){case"left":N=0;break;case"right":N=-h.bars.barWidth;break;default:N=-h.bars.barWidth/2}C=N+h.bars.barWidth;for(l=0;l<v.length;l+=c){var w=v[l],E=v[l+1],k=v[l+2];if(w==null)continue;if(u[f].bars.horizontal?m<=Math.max(k,w)&&m>=Math.min(k,w)&&g>=E+N&&g<=E+C:m>=w+N&&m<=w+C&&g>=Math.min(k,E)&&g<=Math.max(k,E))s=[f,l/c]}}}if(s){f=s[0];l=s[1];c=u[f].datapoints.pointsize;return{datapoint:u[f].datapoints.points.slice(l*c,(l+1)*c),dataIndex:l,series:u[f],seriesIndex:f}}return null}function at(e){if(a.grid.hoverable)ct("plothover",e,function(e){return e["hoverable"]!=false})}function ft(e){if(a.grid.hoverable)ct("plothover",e,function(e){return false})}function lt(e){ct("plotclick",e,function(e){return e["clickable"]!=false})}function ct(e,n,r){var i=c.offset(),s=n.pageX-i.left-m.left,o=n.pageY-i.top-m.top,u=L({left:s,top:o});u.pageX=n.pageX;u.pageY=n.pageY;var f=ut(s,o,r);if(f){f.pageX=parseInt(f.series.xaxis.p2c(f.datapoint[0])+i.left+m.left,10);f.pageY=parseInt(f.series.yaxis.p2c(f.datapoint[1])+i.top+m.top,10)}if(a.grid.autoHighlight){for(var l=0;l<st.length;++l){var h=st[l];if(h.auto==e&&!(f&&h.series==f.series&&h.point[0]==f.datapoint[0]&&h.point[1]==f.datapoint[1]))vt(h.series,h.point)}if(f)dt(f.series,f.datapoint,e)}t.trigger(e,[u,f])}function ht(){var e=a.interaction.redrawOverlayInterval;if(e==-1){pt();return}if(!ot)ot=setTimeout(pt,e)}function pt(){ot=null;p.save();l.clear();p.translate(m.left,m.top);var e,t;for(e=0;e<st.length;++e){t=st[e];if(t.series.bars.show)yt(t.series,t.point);else gt(t.series,t.point)}p.restore();E(b.drawOverlay,[p])}function dt(e,t,n){if(typeof e=="number")e=u[e];if(typeof t=="number"){var r=e.datapoints.pointsize;t=e.datapoints.points.slice(r*t,r*(t+1))}var i=mt(e,t);if(i==-1){st.push({series:e,point:t,auto:n});ht()}else if(!n)st[i].auto=false}function vt(e,t){if(e==null&&t==null){st=[];ht();return}if(typeof e=="number")e=u[e];if(typeof t=="number"){var n=e.datapoints.pointsize;t=e.datapoints.points.slice(n*t,n*(t+1))}var r=mt(e,t);if(r!=-1){st.splice(r,1);ht()}}function mt(e,t){for(var n=0;n<st.length;++n){var r=st[n];if(r.series==e&&r.point[0]==t[0]&&r.point[1]==t[1])return n}return-1}function gt(t,n){var r=n[0],i=n[1],s=t.xaxis,o=t.yaxis,u=typeof t.highlightColor==="string"?t.highlightColor:e.color.parse(t.color).scale("a",.5).toString();if(r<s.min||r>s.max||i<o.min||i>o.max)return;var a=t.points.radius+t.points.lineWidth/2;p.lineWidth=a;p.strokeStyle=u;var f=1.5*a;r=s.p2c(r);i=o.p2c(i);p.beginPath();if(t.points.symbol=="circle")p.arc(r,i,f,0,2*Math.PI,false);else t.points.symbol(p,r,i,f,false);p.closePath();p.stroke()}function yt(t,n){var r=typeof t.highlightColor==="string"?t.highlightColor:e.color.parse(t.color).scale("a",.5).toString(),i=r,s;switch(t.bars.align){case"left":s=0;break;case"right":s=-t.bars.barWidth;break;default:s=-t.bars.barWidth/2}p.lineWidth=t.bars.lineWidth;p.strokeStyle=r;tt(n[0],n[1],n[2]||0,s,s+t.bars.barWidth,function(){return i},t.xaxis,t.yaxis,p,t.bars.horizontal,t.bars.lineWidth)}function bt(t,n,r,i){if(typeof t=="string")return t;else{var s=h.createLinearGradient(0,r,0,n);for(var o=0,u=t.colors.length;o<u;++o){var a=t.colors[o];if(typeof a!="string"){var f=e.color.parse(i);if(a.brightness!=null)f=f.scale("rgb",a.brightness);if(a.opacity!=null)f.a*=a.opacity;a=f.toString()}s.addColorStop(o/(u-1),a)}return s}}var u=[],a={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:.85,sorted:null},xaxis:{show:null,position:"bottom",mode:null,font:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false,zero:true},shadowSize:3,highlightColor:null},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},interaction:{redrawOverlayInterval:1e3/60},hooks:{}},f=null,l=null,c=null,h=null,p=null,d=[],v=[],m={left:0,right:0,top:0,bottom:0},g=0,y=0,b={processOptions:[],processRawData:[],processDatapoints:[],processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},w=this;w.setData=T;w.setupGrid=R;w.draw=V;w.getPlaceholder=function(){return t};w.getCanvas=function(){return f.element};w.getPlotOffset=function(){return m};w.width=function(){return g};w.height=function(){return y};w.offset=function(){var e=c.offset();e.left+=m.left;e.top+=m.top;return e};w.getData=function(){return u};w.getAxes=function(){var t={},n;e.each(d.concat(v),function(e,n){if(n)t[n.direction+(n.n!=1?n.n:"")+"axis"]=n});return t};w.getXAxes=function(){return d};w.getYAxes=function(){return v};w.c2p=L;w.p2c=A;w.getOptions=function(){return a};w.highlight=dt;w.unhighlight=vt;w.triggerRedrawOverlay=ht;w.pointOffset=function(e){return{left:parseInt(d[C(e,"x")-1].p2c(+e.x)+m.left,10),top:parseInt(v[C(e,"y")-1].p2c(+e.y)+m.top,10)}};w.shutdown=H;w.destroy=function(){H();t.removeData("plot").empty();u=[];a=null;f=null;l=null;c=null;h=null;p=null;d=[];v=[];b=null;st=[];w=null};w.resize=function(){var e=t.width(),n=t.height();f.resize(e,n);l.resize(e,n)};w.hooks=b;S(w);x(s);D();T(r);R();V();P();var st=[],ot=null}function i(e,t){return t*Math.floor(e/t)}var t=Object.prototype.hasOwnProperty;n.prototype.resize=function(e,t){if(e<=0||t<=0){throw new Error("Invalid dimensions for plot, width = "+e+", height = "+t)}var n=this.element,r=this.context,i=this.pixelRatio;if(this.width!=e){n.width=e*i;n.style.width=e+"px";this.width=e}if(this.height!=t){n.height=t*i;n.style.height=t+"px";this.height=t}r.restore();r.save();r.scale(i,i)};n.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)};n.prototype.render=function(){var e=this._textCache;for(var n in e){if(t.call(e,n)){var r=this.getTextLayer(n),i=e[n];r.hide();for(var s in i){if(t.call(i,s)){var o=i[s];for(var u in o){if(t.call(o,u)){var a=o[u].positions;for(var f=0,l;l=a[f];f++){if(l.active){if(!l.rendered){r.append(l.element);l.rendered=true}}else{a.splice(f--,1);if(l.rendered){l.element.detach()}}}if(a.length==0){delete o[u]}}}}}r.show()}}};n.prototype.getTextLayer=function(t){var n=this.text[t];if(n==null){if(this.textContainer==null){this.textContainer=e("<div class='flot-text'></div>").css({position:"absolute",top:0,left:0,bottom:0,right:0,"font-size":"smaller",color:"#545454"}).insertAfter(this.element)}n=this.text[t]=e("<div></div>").addClass(t).css({position:"absolute",top:0,left:0,bottom:0,right:0}).appendTo(this.textContainer)}return n};n.prototype.getTextInfo=function(t,n,r,i,s){var o,u,a,f;n=""+n;if(typeof r==="object"){o=r.style+" "+r.variant+" "+r.weight+" "+r.size+"px/"+r.lineHeight+"px "+r.family}else{o=r}u=this._textCache[t];if(u==null){u=this._textCache[t]={}}a=u[o];if(a==null){a=u[o]={}}f=a[n];if(f==null){var l=e("<div></div>").html(n).css({position:"absolute","max-width":s,top:-9999}).appendTo(this.getTextLayer(t));if(typeof r==="object"){l.css({font:o,color:r.color})}else if(typeof r==="string"){l.addClass(r)}f=a[n]={width:l.outerWidth(true),height:l.outerHeight(true),element:l,positions:[]};l.detach()}return f};n.prototype.addText=function(e,t,n,r,i,s,o,u,a){var f=this.getTextInfo(e,r,i,s,o),l=f.positions;if(u=="center"){t-=f.width/2}else if(u=="right"){t-=f.width}if(a=="middle"){n-=f.height/2}else if(a=="bottom"){n-=f.height}for(var c=0,h;h=l[c];c++){if(h.x==t&&h.y==n){h.active=true;return}}h={active:true,rendered:false,element:l.length?f.element.clone():f.element,x:t,y:n};l.push(h);h.element.css({top:Math.round(n),left:Math.round(t),"text-align":u})};n.prototype.removeText=function(e,n,r,i,s,o){if(i==null){var u=this._textCache[e];if(u!=null){for(var a in u){if(t.call(u,a)){var f=u[a];for(var l in f){if(t.call(f,l)){var c=f[l].positions;for(var h=0,p;p=c[h];h++){p.active=false}}}}}}}else{var c=this.getTextInfo(e,i,s,o).positions;for(var h=0,p;p=c[h];h++){if(p.x==n&&p.y==r){p.active=false}}}};e.plot=function(t,n,i){var s=new r(e(t),n,i,e.plot.plugins);return s};e.plot.version="0.8.2";e.plot.plugins=[];e.fn.plot=function(t,n){return this.each(function(){e.plot(this,t,n)})}})(jQuery);
616
 
617
- /* flot navigate v0.8.2 | https://github.com/flot/flot | Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. */
618
- (function(e){function t(i){var l,h=this,p=i.data||{};if(p.elem)h=i.dragTarget=p.elem,i.dragProxy=a.proxy||h,i.cursorOffsetX=p.pageX-p.left,i.cursorOffsetY=p.pageY-p.top,i.offsetX=i.pageX-i.cursorOffsetX,i.offsetY=i.pageY-i.cursorOffsetY;else if(a.dragging||p.which>0&&i.which!=p.which||e(i.target).is(p.not))return;switch(i.type){case"mousedown":return e.extend(p,e(h).offset(),{elem:h,target:i.target,pageX:i.pageX,pageY:i.pageY}),o.add(document,"mousemove mouseup",t,p),s(h,!1),a.dragging=null,!1;case!a.dragging&&"mousemove":if(r(i.pageX-p.pageX)+r(i.pageY-p.pageY)<p.distance)break;i.target=p.target,l=n(i,"dragstart",h),l!==!1&&(a.dragging=h,a.proxy=i.dragProxy=e(l||h)[0]);case"mousemove":if(a.dragging){if(l=n(i,"drag",h),u.drop&&(u.drop.allowed=l!==!1,u.drop.handler(i)),l!==!1)break;i.type="mouseup"};case"mouseup":o.remove(document,"mousemove mouseup",t),a.dragging&&(u.drop&&u.drop.handler(i),n(i,"dragend",h)),s(h,!0),a.dragging=a.proxy=p.elem=!1}return!0}function n(t,n,r){t.type=n;var i=e.event.dispatch.call(r,t);return i===!1?!1:i||t.result}function r(e){return Math.pow(e,2)}function i(){return a.dragging===!1}function s(e,t){e&&(e.unselectable=t?"off":"on",e.onselectstart=function(){return t},e.style&&(e.style.MozUserSelect=t?"":"none"))}e.fn.drag=function(e,t,n){return t&&this.bind("dragstart",e),n&&this.bind("dragend",n),e?this.bind("drag",t?t:e):this.trigger("drag")};var o=e.event,u=o.special,a=u.drag={not:":input",distance:0,which:1,dragging:!1,setup:function(n){n=e.extend({distance:a.distance,which:a.which,not:a.not},n||{}),n.distance=r(n.distance),o.add(this,"mousedown",t,n),this.attachEvent&&this.attachEvent("ondragstart",i)},teardown:function(){o.remove(this,"mousedown",t),this===a.dragging&&(a.dragging=a.proxy=!1),s(this,!0),this.detachEvent&&this.detachEvent("ondragstart",i)}};u.dragstart=u.dragend={setup:function(){},teardown:function(){}}})(jQuery);(function(e){function t(t){var n=t||window.event,r=[].slice.call(arguments,1),i=0,s=0,o=0,t=e.event.fix(n);t.type="mousewheel";n.wheelDelta&&(i=n.wheelDelta/120);n.detail&&(i=-n.detail/3);o=i;void 0!==n.axis&&n.axis===n.HORIZONTAL_AXIS&&(o=0,s=-1*i);void 0!==n.wheelDeltaY&&(o=n.wheelDeltaY/120);void 0!==n.wheelDeltaX&&(s=-1*n.wheelDeltaX/120);r.unshift(t,i,s,o);return(e.event.dispatch||e.event.handle).apply(this,r)}var n=["DOMMouseScroll","mousewheel"];if(e.event.fixHooks)for(var r=n.length;r;)e.event.fixHooks[n[--r]]=e.event.mouseHooks;e.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var e=n.length;e;)this.addEventListener(n[--e],t,!1);else this.onmousewheel=t},teardown:function(){if(this.removeEventListener)for(var e=n.length;e;)this.removeEventListener(n[--e],t,!1);else this.onmousewheel=null}};e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})})(jQuery);(function(e){function n(t){function n(e,n){var r=t.offset();r.left=e.pageX-r.left;r.top=e.pageY-r.top;if(n)t.zoomOut({center:r});else t.zoom({center:r})}function r(e,t){e.preventDefault();n(e,t<0);return false}function a(e){if(e.which!=1)return false;var n=t.getPlaceholder().css("cursor");if(n)i=n;t.getPlaceholder().css("cursor",t.getOptions().pan.cursor);s=e.pageX;o=e.pageY}function f(e){var n=t.getOptions().pan.frameRate;if(u||!n)return;u=setTimeout(function(){t.pan({left:s-e.pageX,top:o-e.pageY});s=e.pageX;o=e.pageY;u=null},1/n*1e3)}function l(e){if(u){clearTimeout(u);u=null}t.getPlaceholder().css("cursor",i);t.pan({left:s-e.pageX,top:o-e.pageY})}function c(e,t){var i=e.getOptions();if(i.zoom.interactive){t[i.zoom.trigger](n);t.mousewheel(r)}if(i.pan.interactive){t.bind("dragstart",{distance:10},a);t.bind("drag",f);t.bind("dragend",l)}}function h(e,t){t.unbind(e.getOptions().zoom.trigger,n);t.unbind("mousewheel",r);t.unbind("dragstart",a);t.unbind("drag",f);t.unbind("dragend",l);if(u)clearTimeout(u)}var i="default",s=0,o=0,u=null;t.zoomOut=function(e){if(!e)e={};if(!e.amount)e.amount=t.getOptions().zoom.amount;e.amount=1/e.amount;t.zoom(e)};t.zoom=function(n){if(!n)n={};var r=n.center,i=n.amount||t.getOptions().zoom.amount,s=t.width(),o=t.height();if(!r)r={left:s/2,top:o/2};var u=r.left/s,a=r.top/o,f={x:{min:r.left-u*s/i,max:r.left+(1-u)*s/i},y:{min:r.top-a*o/i,max:r.top+(1-a)*o/i}};e.each(t.getAxes(),function(e,t){var n=t.options,r=f[t.direction].min,i=f[t.direction].max,s=n.zoomRange,o=n.panRange;if(s===false)return;r=t.c2p(r);i=t.c2p(i);if(r>i){var u=r;r=i;i=u}if(o){if(o[0]!=null&&r<o[0]){r=o[0]}if(o[1]!=null&&i>o[1]){i=o[1]}}var a=i-r;if(s&&(s[0]!=null&&a<s[0]||s[1]!=null&&a>s[1]))return;n.min=r;n.max=i});t.setupGrid();t.draw();if(!n.preventEvent)t.getPlaceholder().trigger("plotzoom",[t,n])};t.pan=function(n){var r={x:+n.left,y:+n.top};if(isNaN(r.x))r.x=0;if(isNaN(r.y))r.y=0;e.each(t.getAxes(),function(e,t){var n=t.options,i,s,o=r[t.direction];i=t.c2p(t.p2c(t.min)+o),s=t.c2p(t.p2c(t.max)+o);var u=n.panRange;if(u===false)return;if(u){if(u[0]!=null&&u[0]>i){o=u[0]-i;i+=o;s+=o}if(u[1]!=null&&u[1]<s){o=u[1]-s;i+=o;s+=o}}n.min=i;n.max=s});t.setupGrid();t.draw();if(!n.preventEvent)t.getPlaceholder().trigger("plotpan",[t,n])};t.hooks.bindEvents.push(c);t.hooks.shutdown.push(h)}var t={xaxis:{zoomRange:null,panRange:null},zoom:{interactive:false,trigger:"dblclick",amount:1.5},pan:{interactive:false,cursor:"move",frameRate:20}};e.plot.plugins.push({init:n,options:t,name:"navigate",version:"1.3"})})(jQuery);
3
  // Public variables
4
  chart_data: [],
5
  chart_info: [],
6
+ chart_id: 0,
7
  ticks: [],
8
 
9
  // Private variables
28
  zoom: { interactive: true }
29
  },
30
  _placeholder: null,
31
+ _chart_id: 0,
32
  _qtip_previous_point: null,
33
  _refresh_timer: [0, 0],
34
  _tooltip: {},
47
  },
48
 
49
  chart_init: function() {
50
+ jQuery(".chart-placeholder").each( function() {
51
+ SlimStatAdmin._placeholder = jQuery(this);
52
+ SlimStatAdmin._chart_id = jQuery(this).parents('.postbox').attr('id');
53
 
54
+ // Don't do anything if no placeholder or if hidden
55
+ if (!SlimStatAdmin._placeholder.length || SlimStatAdmin._placeholder.is(':hidden')){
56
+ return true;
57
+ }
58
 
59
+ max_y_axis = 0;
60
+ for (i in SlimStatAdmin.chart_data[ SlimStatAdmin._chart_id ]){
61
+ max = SlimStatAdmin.chart_data[ SlimStatAdmin._chart_id ][ i ].data.reduce( function( max, arr ) {
62
+ return Math.max(max, arr[1]);
63
+ }, -Infinity)+1;
64
+ if (max > max_y_axis) max_y_axis = max;
65
+ }
66
 
67
+ // Calculate the remaining options
68
+ SlimStatAdmin._chart_options.colors = SlimStatAdminParams.chart_colors,
69
+ //
70
+ SlimStatAdmin._chart_options.xaxis = {
71
+ ticks: (SlimStatAdmin.ticks[0][1].indexOf('/') > 0 && SlimStatAdmin.ticks.length > 16) ? [] : SlimStatAdmin.ticks,
72
+ tickDecimals: 0,
73
+ tickLength: 0,
74
+ tickSize: 1,
75
+ panRange: [ 0, SlimStatAdmin.chart_data[ SlimStatAdmin._chart_id ][ 0 ].data.length - 1 ],
76
+ zoomRange: [ 5, SlimStatAdmin.chart_data[ SlimStatAdmin._chart_id ][ 0 ].data.length - 1],
 
 
 
 
 
 
 
77
  };
78
+ if (SlimStatAdminParams.text_direction == 'rtl'){
79
+ SlimStatAdmin._chart_options.xaxis.transform = function(v) {
80
+ return -v;
81
+ };
82
+ SlimStatAdmin._chart_options.xaxis.inverseTransform = function(v) {
83
+ return -v;
84
+ };
85
+ }
86
 
87
+ SlimStatAdmin._chart_options.yaxis = {
88
+ tickDecimals: 0,
89
+ zoomRange: [5, max_y_axis],
90
+ panRange:[0, max_y_axis]
91
+ };
92
 
93
+ // Draw the chart
94
+ jQuery.plot(SlimStatAdmin._placeholder, SlimStatAdmin.chart_data[ SlimStatAdmin._chart_id ], SlimStatAdmin._chart_options);
95
+ SlimStatAdmin.chart_color_weekends();
96
+
97
+ // Enable tooltips
98
+ SlimStatAdmin._tooltip = SlimStatAdmin._placeholder.qtip({
99
+ content: ' ',
100
+ hide: {
101
+ event: false,
102
+ fixed: true
103
+ },
104
+ //id: 'chart-placeholder',
105
+ position: {
106
+ target: 'mouse',
107
+ viewport: SlimStatAdmin._placeholder,
108
+ adjust: {
109
+ x: 15
110
+ }
111
+ },
112
+ prerender: true,
113
+ show: false,
114
+ style: {
115
+ classes: 'qtip-dark'
116
+ }
117
+ });
118
+ SlimStatAdmin._placeholder.bind("plothover", function (event, coords, item) {
119
+ // Grab the API reference
120
+ var api = jQuery(this).qtip();
121
+
122
+ // If we weren't passed the item object, hide the tooltip and remove cached point data
123
+ if (!item) {
124
+ api.cache.point = false;
125
+ return api.hide(item);
126
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
 
128
+ SlimStatAdmin._previous_point = api.cache.point;
129
+ if (SlimStatAdmin._previous_point !== item.dataIndex) {
130
+ api.cache.point = item.dataIndex;
131
 
132
+ label = item.series.label.replace(/[0-9\/\:]+(.*)(am|pm)?/gi, '');
133
+ if (SlimStatAdmin.ticks[item.dataIndex][1].indexOf('/') > 0){
134
+ label += ' ' + SlimStatAdmin.ticks[item.dataIndex][1];
135
+ }
136
+ api.set('content.text', label + ': ' + item.datapoint[1]);
137
 
138
+ api.elements.tooltip.stop(1, 1);
139
+ api.show(item);
 
 
 
 
 
 
 
 
 
 
140
  }
141
+ });
 
 
 
 
 
 
142
 
143
+ SlimStatAdmin._placeholder.bind('plotzoom', SlimStatAdmin.chart_color_weekends);
144
+ SlimStatAdmin._placeholder.bind('plotpan', SlimStatAdmin.chart_color_weekends);
145
+ });
146
  },
147
 
148
  parse_url_filters: function(report_id, href){
233
  jQuery('.slimstat-temp-filter').remove();
234
  },
235
 
236
+ get_query_string_value: function( key ) {
237
  query_string = window.location.search.substring( 1 );
238
 
239
  // Split into key/value pairs
260
  }
261
 
262
  // Refresh report if (re)activated via the checkbox under Screen Options
263
+ jQuery( 'input.hide-postbox-tog[id^=slim_]' ).bind( 'click.postboxes', function () {
264
+ if ( jQuery( this ).prop( "checked" ) && jQuery( '#' + jQuery( this ).val() ).length ) {
265
+ var report_id = jQuery( this ).val();
266
+ var data = { action: 'slimstat_load_report', report_id: report_id, security: jQuery( '#meta-box-order-nonce' ).val() }
267
+ jQuery( '#' + report_id ).removeClass( 'hidden' );
268
+ jQuery( '#' + report_id + ' .inside' ).html( '<p class="loading"></p>' );
269
+ SlimStatAdmin.refresh_report( report_id, data );
270
  }
271
  });
272
 
337
  });
338
 
339
  // Send filters as post requests
340
+ jQuery(document).on('click', '.slimstat-filter-link, #toplevel_page_slimview1 li a, #wp-admin-bar-slimstat-header li a', function(e){
341
  e.preventDefault();
342
 
343
  if (!jQuery('#slimstat-filters-form').length){
397
  data: data
398
  });
399
  });
400
+
401
  // Hide GeoLite Notice
402
  jQuery(document).on('click', '#slimstat-hide-geolite-notice', function(e){
403
  e.preventDefault();
553
  }).html(inner_html);
554
  jQuery('#slimstat-modal-dialog').dialog('open');
555
  });
556
+
557
+ // Save Filters
558
  jQuery(document).on('click', '#slimstat-save-filter', function(e){
559
  e.preventDefault();
560
 
569
  }
570
  });
571
  });
572
+
573
+ // Delete saved filters
574
  jQuery(document).on('click', '.slimstat-delete-filter', function(e){
575
  e.preventDefault();
576
 
592
  SlimStatAdmin.chart_init();
593
  });
594
 
595
+ // Customizer: clone and delete report placeholders
596
+ jQuery( '.slimstat-layout .slimstat-header-buttons a' ).on( 'click', function() {
597
+ if ( jQuery( this ).hasClass( 'slimstat-font-docs') ) {
598
+ jQuery( this ).removeClass( 'slimstat-font-docs' ).addClass( 'slimstat-font-trash' ).parents( '.postbox' ).clone(true).appendTo( jQuery( this ).parents( '.meta-box-sortables' ) );
599
+ jQuery( this ).removeClass( 'slimstat-font-trash' ).addClass( 'slimstat-font-docs' );
600
+ }
601
+ else {
602
+ jQuery( this ).parents( '.postbox' ).remove();
603
+ }
604
+
605
+ // Save the new groups
606
+ data = { action: 'meta-box-order', _ajax_nonce: jQuery('#meta-box-order-nonce').val(), page_columns: 0, page: 'slimstat_page_slimlayout' };
607
+ jQuery( '.meta-box-sortables' ).each( function() {
608
+ data[ 'order[' + this.id.split("-")[0] + ']' ] = jQuery( this ).sortable( 'toArray' ).join( ',' );
609
+ });
610
+
611
+ jQuery.ajax({
612
+ url: ajaxurl,
613
+ type: 'post',
614
+ async: true,
615
+ data: data
616
+ });
617
+
618
+ return false;
619
+ });
620
  });
621
 
622
  /* SlimScroll v1.3.6 | http://rocha.la | Copyright (c) 2011 Piotr Rochala. Licensed MIT, GPL. */
625
  /* qTip2 v2.2.1 | http://qtip2.com | Licensed MIT, GPL. */
626
  !function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=z,this.elements={target:a},this._id=M+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:y,attr:e,onTooltip:y,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=y}function f(a){return a===z||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?y:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?y:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==y,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,z,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||y)&&(b.title=y))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===x?{ready:x}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(L,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return P.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(W)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(x,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(W)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(Q)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(y,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(W)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+M+" "))+"."+M,function(){var a=s.api[d.attr(this,O)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):z,p="html5"===f.metadata.type&&o?o[f.metadata.name]:z,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(x,{},s.defaults,f,"object"==typeof q?h(q):z,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===y||!j)return y;k.content.text=j}if(i.container.length||(i.container=m),i.target===y&&(i.target=n),k.show.target===y&&(k.show.target=n),k.show.solo===x&&(k.show.solo=i.container.closest("body")),k.hide.target===y&&(k.hide.target=n),k.position.viewport===x&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new u(i.at,x),i.my=new u(i.my),a.data(M))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===y)return y;return a.attr(N,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(Y,l).attr("title",""),g=new e(a,k,c,!!j),a.data(M,g),g}var s,t,u,v,w,x=!0,y=!1,z=null,A="x",B="y",C="width",D="height",E="top",F="left",G="bottom",H="right",I="center",J="flipinvert",K="shift",L={},M="qtip",N="data-hasqtip",O="data-qtip-id",P=["ui-widget","ui-tooltip"],Q="."+M,R="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),S=M+"-fixed",T=M+"-default",U=M+"-focus",V=M+"-hover",W=M+"-disabled",X="_replacedByqTip",Y="oldtitle",Z={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||y};t=e.prototype,t._when=function(a){return d.when.apply(d,a)},t.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[M,T,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":y,"aria-describedby":this._id+"-content","aria-hidden":x}).toggleClass(W,this.disabled).attr(O,this.id).data(M,this).appendTo(k.container).append(g.content=d("<div />",{"class":M+"-content",id:this._id+"-content","aria-atomic":x})),this.rendered=-1,this.positioning=x,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,y))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,y)),this.rendered=x,this._setWidget(),d.each(L,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=y,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(x,f.event,y),c.hiddenDuringWait=y}),s.api[this.id]=this,this},t.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=x;var a,b=this.target,c=b.attr(Y);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(M).removeAttr(O).removeAttr(N).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(Y),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=z,delete s.api[this.id]}}return this.destroyed?this.target:(a===x&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},v=t.checks={builtin:{"^id$":function(a,b,c,e){var f=c===x?s.nextid:c,g=M+"-"+f;f!==y&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new u(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(x)||this.toggle(x))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(T,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},t.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var $=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,_=/^prerender|show\.ready/i;t.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=y,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&_.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=$.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=x,d.each(a,d.proxy(j,this)),this.positioning=y,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?z:this.cache.event),this},t._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=x,a.then(function(a){return e.waiting=y,c._update(a,b)},z,function(a){return c._update(a,b)})):a===y||!a&&""!==a?y:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):y},t._waitForContent=function(a){var b=this.cache;return b.waiting=x,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=y}).promise()},t._updateContent=function(a,b){this._update(a,this.elements.content,b)},t._updateTitle=function(a,b){this._update(a,this.elements.title,b)===y&&this._removeTitle(y)},t._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":M+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":M+"-title","aria-atomic":x})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},t._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=z,a!==y&&this.reposition())},t._createPosClass=function(a){return M+"-pos-"+(a||this.options.position.my).abbrev()},t.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=x;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(y),u=k.outerHeight(y),v=0,w=0,z=k.css("position"),A={left:0,top:0},B=k[0].offsetWidth>0,C=c&&"scroll"===c.type,D=d(a),J=q[0].ownerDocument,K=this.mouse;if(d.isArray(m)&&2===m.length)o={x:F,y:E},A={left:m[0],top:m[1]};else if("mouse"===m)o={x:F,y:E},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:K&&K.pageX&&(c=K),"static"!==z&&(A=q.offset()),J.body.offsetWidth!==(a.innerWidth||J.documentElement.clientWidth)&&(g=d(b.body).offset()),A={left:c.pageX-A.left+(g&&g.left||0),top:c.pageY-A.top+(g&&g.top||0)},r.mouse&&C&&K&&(A.left-=(K.scrollX||0)-D.scrollLeft(),A.top-=(K.scrollY||0)-D.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=Z.iOS?a.innerWidth:m.width(),w=Z.iOS?a.innerHeight:m.height(),m[0]===a&&(A={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):L.imagemap&&m.is("area")?f=L.imagemap(this,m,o,L.viewport?s:y):L.svg&&m&&m[0].ownerSVGElement?f=L.svg(this,m,o,L.viewport?s:y):(v=m.outerWidth(y),w=m.outerHeight(y),A=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,A=f.position),A=this.reposition.offset(m,A,q),(Z.iOS>3.1&&Z.iOS<4.1||Z.iOS>=4.3&&Z.iOS<4.33||!Z.iOS&&"fixed"===z)&&(A.left-=D.scrollLeft(),A.top-=D.scrollTop()),(!f||f&&f.adjustable!==y)&&(A.left+=o.x===H?v:o.x===I?v/2:0,A.top+=o.y===G?w:o.y===I?w/2:0)}return A.left+=r.x+(n.x===H?-t:n.x===I?-t/2:0),A.top+=r.y+(n.y===G?-u:n.y===I?-u/2:0),L.viewport?(h=A.adjusted=L.viewport(this,A,l,v,w,t,u),g&&h.left&&(A.left+=g.left),g&&h.top&&(A.top+=g.top),h.my&&(this.position.my=h.my)):A.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[A,p.elem||p],c)?(delete A.adjusted,e===y||!B||isNaN(A.left)||isNaN(A.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(A):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},A)),k.queue(function(a){d(this).css({opacity:"",height:""}),Z.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=y,this):this},t.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!Z.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var ab=(u=t.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,I).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?B:A}).prototype;ab.invert=function(a,b){this[a]=this[a]===F?H:this[a]===H?F:b||this[a]},ab.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===B||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},ab.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},ab.clone=function(){return new u(this.string(),this.forceY)},t.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=x),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?z:!!this._trigger(k,[90]),this.destroyed?this:(i!==y&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,y),d.isFunction(n.title)&&this._updateTitle(n.title,y),!w&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+M,this._storeMouse),w=x),o||g.css("width",g.outerWidth(y)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(Q,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,w&&!d(Q+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+M),w=y),this.blur(c)),j=d.proxy(function(){a?(Z.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===y||q===y?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},t.show=function(a){return this.toggle(x,a)},t.hide=function(a){return this.toggle(y,a)},t.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(Q),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=s.zindex+b.length;return c.hasClass(U)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+U).qtip("blur",a)),c.addClass(U)[0].style.zIndex=f),this},t.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass(U),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},t.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(W):this.disabled):"boolean"!=typeof a&&(a=x),this.rendered&&this.tooltip.toggleClass(W,a).attr("aria-disabled",a),this.disabled=!!a,this)},t.enable=function(){return this.disable(y)},t._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":M+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(W)||a.hide(b),y})},t._updateButton=function(a){if(!this.rendered)return y;var b=this.elements.button;a?this._createButton():b.remove()},t._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(W);c.removeClass(W),W=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(W,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(T,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(M+"-icon",!a)},t._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},t._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},t._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},t._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||z,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=y,!e.isDefaultPrevented()},t._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},t._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?y:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=x}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):y}),(c.show.ready||c.prerender)&&b.call(this,a)},t._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],t=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(S)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(W)&&this.tooltip[0].offsetWidth>0,e=b.parents(Q).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),s.inactiveEvents,o)),this._bindEvents(r,t,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):y}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(W)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},t._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(Q,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(S)&&!c.hasClass(W)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(V,b)}),q("["+O+"]",R,o)}),s=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=z,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],M):z;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,M);if(!a)return x;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),y;a.set(b,e)}}),g!==z?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(x,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===y||c.length<1||s.api[c]?s.nextid++:c,b=r(d(this),c,k),b===y?x:(s.api[c]=b,d.each(L,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,s.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,Y):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(Y,b))}return d.fn["attr"+X].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+X].apply(this,arguments));return a||b.filter("["+Y+"]").attr("title",function(){return d.attr(this,Y)}).removeAttr(Y),b}},function(a,b){if(!b||d.fn[a+X])return x;var c=d.fn[a+X]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+X]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(N))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+X].apply(this,arguments)}),s.version="2.2.1",s.nextid=0,s.inactiveEvents=R,s.zindex=15e3,s.defaults={prerender:y,id:y,overwrite:x,suppress:x,content:{text:x,attr:"title",title:y,button:y},position:{my:"top left",at:"bottom right",target:y,container:y,viewport:y,adjust:{x:0,y:0,mouse:x,scroll:x,resize:x,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:y})}},show:{target:y,event:"mouseenter",effect:x,delay:90,solo:y,ready:y,autofocus:y},hide:{target:y,event:"mouseleave",effect:x,delay:0,fixed:y,inactive:y,leave:"window",distance:y},style:{classes:"",widget:y,width:y,height:y,def:x},events:{render:z,move:z,show:z,hide:z,toggle:z,visible:z,hidden:z,focus:z,blur:z}},L.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===K,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===C?o:p)-z,D=x-(u.precedance===a||s===u[b]?y:0)-(t===I?i/2:0);return w?(D=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-D,Math.min(Math.max(-m[f]+r[f]+(h===C?o:p),k+D),d[f],"center"===s?k-x:1e9))):(e*=c===J?2:0,A>0&&(s!==f||B>0)?(d[f]-=D+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===I?-D:D)+e,l.invert(a,g)),d[f]<q&&-d[f]>B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),z=x[0],L=x[1]||x[0],M=e.viewport,N=e.container,O=(c.cache,{left:0,top:0});return M.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=N.offset()||O,n="static"===N.css("position"),k="fixed"===t.css("position"),o=M[0]===a?M.width():M.outerWidth(y),p=M[0]===a?M.height():M.outerHeight(y),q={left:k?0:M.scrollLeft(),top:k?0:M.scrollTop()},r=M.offset()||O,("shift"!==z||"shift"!==L)&&(l=u.clone()),O={left:"none"!==z?j(A,B,z,w.x,F,H,C,f,h):0,top:"none"!==L?j(B,A,L,w.y,E,G,D,g,i):0,my:l}):O}})}(window,document);
627
 
628
+ /* flot v0.8.3 | https://github.com/flot/flot | Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. */
629
+ (function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function($){var hasOwnProperty=Object.prototype.hasOwnProperty;if(!$.fn.detach){$.fn.detach=function(){return this.each(function(){if(this.parentNode){this.parentNode.removeChild(this)}})}}function Canvas(cls,container){var element=container.children("."+cls)[0];if(element==null){element=document.createElement("canvas");element.className=cls;$(element).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(container);if(!element.getContext){if(window.G_vmlCanvasManager){element=window.G_vmlCanvasManager.initElement(element)}else{throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.")}}}this.element=element;var context=this.context=element.getContext("2d");var devicePixelRatio=window.devicePixelRatio||1,backingStoreRatio=context.webkitBackingStorePixelRatio||context.mozBackingStorePixelRatio||context.msBackingStorePixelRatio||context.oBackingStorePixelRatio||context.backingStorePixelRatio||1;this.pixelRatio=devicePixelRatio/backingStoreRatio;this.resize(container.width(),container.height());this.textContainer=null;this.text={};this._textCache={}}Canvas.prototype.resize=function(width,height){if(width<=0||height<=0){throw new Error("Invalid dimensions for plot, width = "+width+", height = "+height)}var element=this.element,context=this.context,pixelRatio=this.pixelRatio;if(this.width!=width){element.width=width*pixelRatio;element.style.width=width+"px";this.width=width}if(this.height!=height){element.height=height*pixelRatio;element.style.height=height+"px";this.height=height}context.restore();context.save();context.scale(pixelRatio,pixelRatio)};Canvas.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)};Canvas.prototype.render=function(){var cache=this._textCache;for(var layerKey in cache){if(hasOwnProperty.call(cache,layerKey)){var layer=this.getTextLayer(layerKey),layerCache=cache[layerKey];layer.hide();for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var positions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){if(position.active){if(!position.rendered){layer.append(position.element);position.rendered=true}}else{positions.splice(i--,1);if(position.rendered){position.element.detach()}}}if(positions.length==0){delete styleCache[key]}}}}}layer.show()}}};Canvas.prototype.getTextLayer=function(classes){var layer=this.text[classes];if(layer==null){if(this.textContainer==null){this.textContainer=$("<div class='flot-text'></div>").css({position:"absolute",top:0,left:0,bottom:0,right:0,"font-size":"smaller",color:"#545454"}).insertAfter(this.element)}layer=this.text[classes]=$("<div></div>").addClass(classes).css({position:"absolute",top:0,left:0,bottom:0,right:0}).appendTo(this.textContainer)}return layer};Canvas.prototype.getTextInfo=function(layer,text,font,angle,width){var textStyle,layerCache,styleCache,info;text=""+text;if(typeof font==="object"){textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px/"+font.lineHeight+"px "+font.family}else{textStyle=font}layerCache=this._textCache[layer];if(layerCache==null){layerCache=this._textCache[layer]={}}styleCache=layerCache[textStyle];if(styleCache==null){styleCache=layerCache[textStyle]={}}info=styleCache[text];if(info==null){var element=$("<div></div>").html(text).css({position:"absolute","max-width":width,top:-9999}).appendTo(this.getTextLayer(layer));if(typeof font==="object"){element.css({font:textStyle,color:font.color})}else if(typeof font==="string"){element.addClass(font)}info=styleCache[text]={width:element.outerWidth(true),height:element.outerHeight(true),element:element,positions:[]};element.detach()}return info};Canvas.prototype.addText=function(layer,x,y,text,font,angle,width,halign,valign){var info=this.getTextInfo(layer,text,font,angle,width),positions=info.positions;if(halign=="center"){x-=info.width/2}else if(halign=="right"){x-=info.width}if(valign=="middle"){y-=info.height/2}else if(valign=="bottom"){y-=info.height}for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=true;return}}position={active:true,rendered:false,element:positions.length?info.element.clone():info.element,x:x,y:y};positions.push(position);position.element.css({top:Math.round(y),left:Math.round(x),"text-align":halign})};Canvas.prototype.removeText=function(layer,x,y,text,font,angle){if(text==null){var layerCache=this._textCache[layer];if(layerCache!=null){for(var styleKey in layerCache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var positions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){position.active=false}}}}}}}else{var positions=this.getTextInfo(layer,text,font,angle).positions;for(var i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=false}}}};function Plot(placeholder,data_,options_,plugins){var series=[],options={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:.85,sorted:null},xaxis:{show:null,position:"bottom",mode:null,font:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false,zero:true},shadowSize:3,highlightColor:null},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},interaction:{redrawOverlayInterval:1e3/60},hooks:{}},surface=null,overlay=null,eventHolder=null,ctx=null,octx=null,xaxes=[],yaxes=[],plotOffset={left:0,right:0,top:0,bottom:0},plotWidth=0,plotHeight=0,hooks={processOptions:[],processRawData:[],processDatapoints:[],processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},plot=this;plot.setData=setData;plot.setupGrid=setupGrid;plot.draw=draw;plot.getPlaceholder=function(){return placeholder};plot.getCanvas=function(){return surface.element};plot.getPlotOffset=function(){return plotOffset};plot.width=function(){return plotWidth};plot.height=function(){return plotHeight};plot.offset=function(){var o=eventHolder.offset();o.left+=plotOffset.left;o.top+=plotOffset.top;return o};plot.getData=function(){return series};plot.getAxes=function(){var res={},i;$.each(xaxes.concat(yaxes),function(_,axis){if(axis)res[axis.direction+(axis.n!=1?axis.n:"")+"axis"]=axis});return res};plot.getXAxes=function(){return xaxes};plot.getYAxes=function(){return yaxes};plot.c2p=canvasToAxisCoords;plot.p2c=axisToCanvasCoords;plot.getOptions=function(){return options};plot.highlight=highlight;plot.unhighlight=unhighlight;plot.triggerRedrawOverlay=triggerRedrawOverlay;plot.pointOffset=function(point){return{left:parseInt(xaxes[axisNumber(point,"x")-1].p2c(+point.x)+plotOffset.left,10),top:parseInt(yaxes[axisNumber(point,"y")-1].p2c(+point.y)+plotOffset.top,10)}};plot.shutdown=shutdown;plot.destroy=function(){shutdown();placeholder.removeData("plot").empty();series=[];options=null;surface=null;overlay=null;eventHolder=null;ctx=null;octx=null;xaxes=[];yaxes=[];hooks=null;highlights=[];plot=null};plot.resize=function(){var width=placeholder.width(),height=placeholder.height();surface.resize(width,height);overlay.resize(width,height)};plot.hooks=hooks;initPlugins(plot);parseOptions(options_);setupCanvases();setData(data_);setupGrid();draw();bindEvents();function executeHooks(hook,args){args=[plot].concat(args);for(var i=0;i<hook.length;++i)hook[i].apply(this,args)}function initPlugins(){var classes={Canvas:Canvas};for(var i=0;i<plugins.length;++i){var p=plugins[i];p.init(plot,classes);if(p.options)$.extend(true,options,p.options)}}function parseOptions(opts){$.extend(true,options,opts);if(opts&&opts.colors){options.colors=opts.colors}if(options.xaxis.color==null)options.xaxis.color=$.color.parse(options.grid.color).scale("a",.22).toString();if(options.yaxis.color==null)options.yaxis.color=$.color.parse(options.grid.color).scale("a",.22).toString();if(options.xaxis.tickColor==null)options.xaxis.tickColor=options.grid.tickColor||options.xaxis.color;if(options.yaxis.tickColor==null)options.yaxis.tickColor=options.grid.tickColor||options.yaxis.color;if(options.grid.borderColor==null)options.grid.borderColor=options.grid.color;if(options.grid.tickColor==null)options.grid.tickColor=$.color.parse(options.grid.color).scale("a",.22).toString();var i,axisOptions,axisCount,fontSize=placeholder.css("font-size"),fontSizeDefault=fontSize?+fontSize.replace("px",""):13,fontDefaults={style:placeholder.css("font-style"),size:Math.round(.8*fontSizeDefault),variant:placeholder.css("font-variant"),weight:placeholder.css("font-weight"),family:placeholder.css("font-family")};axisCount=options.xaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.xaxes[i];if(axisOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},options.xaxis,axisOptions);options.xaxes[i]=axisOptions;if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}if(!axisOptions.font.lineHeight){axisOptions.font.lineHeight=Math.round(axisOptions.font.size*1.15)}}}axisCount=options.yaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.yaxes[i];if(axisOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},options.yaxis,axisOptions);options.yaxes[i]=axisOptions;if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}if(!axisOptions.font.lineHeight){axisOptions.font.lineHeight=Math.round(axisOptions.font.size*1.15)}}}if(options.xaxis.noTicks&&options.xaxis.ticks==null)options.xaxis.ticks=options.xaxis.noTicks;if(options.yaxis.noTicks&&options.yaxis.ticks==null)options.yaxis.ticks=options.yaxis.noTicks;if(options.x2axis){options.xaxes[1]=$.extend(true,{},options.xaxis,options.x2axis);options.xaxes[1].position="top";if(options.x2axis.min==null){options.xaxes[1].min=null}if(options.x2axis.max==null){options.xaxes[1].max=null}}if(options.y2axis){options.yaxes[1]=$.extend(true,{},options.yaxis,options.y2axis);options.yaxes[1].position="right";if(options.y2axis.min==null){options.yaxes[1].min=null}if(options.y2axis.max==null){options.yaxes[1].max=null}}if(options.grid.coloredAreas)options.grid.markings=options.grid.coloredAreas;if(options.grid.coloredAreasColor)options.grid.markingsColor=options.grid.coloredAreasColor;if(options.lines)$.extend(true,options.series.lines,options.lines);if(options.points)$.extend(true,options.series.points,options.points);if(options.bars)$.extend(true,options.series.bars,options.bars);if(options.shadowSize!=null)options.series.shadowSize=options.shadowSize;if(options.highlightColor!=null)options.series.highlightColor=options.highlightColor;for(i=0;i<options.xaxes.length;++i)getOrCreateAxis(xaxes,i+1).options=options.xaxes[i];for(i=0;i<options.yaxes.length;++i)getOrCreateAxis(yaxes,i+1).options=options.yaxes[i];for(var n in hooks)if(options.hooks[n]&&options.hooks[n].length)hooks[n]=hooks[n].concat(options.hooks[n]);executeHooks(hooks.processOptions,[options])}function setData(d){series=parseData(d);fillInSeriesOptions();processData()}function parseData(d){var res=[];for(var i=0;i<d.length;++i){var s=$.extend(true,{},options.series);if(d[i].data!=null){s.data=d[i].data;delete d[i].data;$.extend(true,s,d[i]);d[i].data=s.data}else s.data=d[i];res.push(s)}return res}function axisNumber(obj,coord){var a=obj[coord+"axis"];if(typeof a=="object")a=a.n;if(typeof a!="number")a=1;return a}function allAxes(){return $.grep(xaxes.concat(yaxes),function(a){return a})}function canvasToAxisCoords(pos){var res={},i,axis;for(i=0;i<xaxes.length;++i){axis=xaxes[i];if(axis&&axis.used)res["x"+axis.n]=axis.c2p(pos.left)}for(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used)res["y"+axis.n]=axis.c2p(pos.top)}if(res.x1!==undefined)res.x=res.x1;if(res.y1!==undefined)res.y=res.y1;return res}function axisToCanvasCoords(pos){var res={},i,axis,key;for(i=0;i<xaxes.length;++i){axis=xaxes[i];if(axis&&axis.used){key="x"+axis.n;if(pos[key]==null&&axis.n==1)key="x";if(pos[key]!=null){res.left=axis.p2c(pos[key]);break}}}for(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used){key="y"+axis.n;if(pos[key]==null&&axis.n==1)key="y";if(pos[key]!=null){res.top=axis.p2c(pos[key]);break}}}return res}function getOrCreateAxis(axes,number){if(!axes[number-1])axes[number-1]={n:number,direction:axes==xaxes?"x":"y",options:$.extend(true,{},axes==xaxes?options.xaxis:options.yaxis)};return axes[number-1]}function fillInSeriesOptions(){var neededColors=series.length,maxIndex=-1,i;for(i=0;i<series.length;++i){var sc=series[i].color;if(sc!=null){neededColors--;if(typeof sc=="number"&&sc>maxIndex){maxIndex=sc}}}if(neededColors<=maxIndex){neededColors=maxIndex+1}var c,colors=[],colorPool=options.colors,colorPoolSize=colorPool.length,variation=0;for(i=0;i<neededColors;i++){c=$.color.parse(colorPool[i%colorPoolSize]||"#666");if(i%colorPoolSize==0&&i){if(variation>=0){if(variation<.5){variation=-variation-.2}else variation=0}else variation=-variation}colors[i]=c.scale("rgb",1+variation)}var colori=0,s;for(i=0;i<series.length;++i){s=series[i];if(s.color==null){s.color=colors[colori].toString();++colori}else if(typeof s.color=="number")s.color=colors[s.color].toString();if(s.lines.show==null){var v,show=true;for(v in s)if(s[v]&&s[v].show){show=false;break}if(show)s.lines.show=true}if(s.lines.zero==null){s.lines.zero=!!s.lines.fill}s.xaxis=getOrCreateAxis(xaxes,axisNumber(s,"x"));s.yaxis=getOrCreateAxis(yaxes,axisNumber(s,"y"))}}function processData(){var topSentry=Number.POSITIVE_INFINITY,bottomSentry=Number.NEGATIVE_INFINITY,fakeInfinity=Number.MAX_VALUE,i,j,k,m,length,s,points,ps,x,y,axis,val,f,p,data,format;function updateAxis(axis,min,max){if(min<axis.datamin&&min!=-fakeInfinity)axis.datamin=min;if(max>axis.datamax&&max!=fakeInfinity)axis.datamax=max}$.each(allAxes(),function(_,axis){axis.datamin=topSentry;axis.datamax=bottomSentry;axis.used=false});for(i=0;i<series.length;++i){s=series[i];s.datapoints={points:[]};executeHooks(hooks.processRawData,[s,s.data,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];data=s.data;format=s.datapoints.format;if(!format){format=[];format.push({x:true,number:true,required:true});format.push({y:true,number:true,required:true});if(s.bars.show||s.lines.show&&s.lines.fill){var autoscale=!!(s.bars.show&&s.bars.zero||s.lines.show&&s.lines.zero);format.push({y:true,number:true,required:false,defaultValue:0,autoscale:autoscale});if(s.bars.horizontal){delete format[format.length-1].y;format[format.length-1].x=true}}s.datapoints.format=format}if(s.datapoints.pointsize!=null)continue;s.datapoints.pointsize=format.length;ps=s.datapoints.pointsize;points=s.datapoints.points;var insertSteps=s.lines.show&&s.lines.steps;s.xaxis.used=s.yaxis.used=true;for(j=k=0;j<data.length;++j,k+=ps){p=data[j];var nullify=p==null;if(!nullify){for(m=0;m<ps;++m){val=p[m];f=format[m];if(f){if(f.number&&val!=null){val=+val;if(isNaN(val))val=null;else if(val==Infinity)val=fakeInfinity;else if(val==-Infinity)val=-fakeInfinity}if(val==null){if(f.required)nullify=true;if(f.defaultValue!=null)val=f.defaultValue}}points[k+m]=val}}if(nullify){for(m=0;m<ps;++m){val=points[k+m];if(val!=null){f=format[m];if(f.autoscale!==false){if(f.x){updateAxis(s.xaxis,val,val)}if(f.y){updateAxis(s.yaxis,val,val)}}}points[k+m]=null}}else{if(insertSteps&&k>0&&points[k-ps]!=null&&points[k-ps]!=points[k]&&points[k-ps+1]!=points[k+1]){for(m=0;m<ps;++m)points[k+ps+m]=points[k+m];points[k+1]=points[k-ps+1];k+=ps}}}}for(i=0;i<series.length;++i){s=series[i];executeHooks(hooks.processDatapoints,[s,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];points=s.datapoints.points;ps=s.datapoints.pointsize;format=s.datapoints.format;var xmin=topSentry,ymin=topSentry,xmax=bottomSentry,ymax=bottomSentry;for(j=0;j<points.length;j+=ps){if(points[j]==null)continue;for(m=0;m<ps;++m){val=points[j+m];f=format[m];if(!f||f.autoscale===false||val==fakeInfinity||val==-fakeInfinity)continue;if(f.x){if(val<xmin)xmin=val;if(val>xmax)xmax=val}if(f.y){if(val<ymin)ymin=val;if(val>ymax)ymax=val}}}if(s.bars.show){var delta;switch(s.bars.align){case"left":delta=0;break;case"right":delta=-s.bars.barWidth;break;default:delta=-s.bars.barWidth/2}if(s.bars.horizontal){ymin+=delta;ymax+=delta+s.bars.barWidth}else{xmin+=delta;xmax+=delta+s.bars.barWidth}}updateAxis(s.xaxis,xmin,xmax);updateAxis(s.yaxis,ymin,ymax)}$.each(allAxes(),function(_,axis){if(axis.datamin==topSentry)axis.datamin=null;if(axis.datamax==bottomSentry)axis.datamax=null})}function setupCanvases(){placeholder.css("padding",0).children().filter(function(){return!$(this).hasClass("flot-overlay")&&!$(this).hasClass("flot-base")}).remove();if(placeholder.css("position")=="static")placeholder.css("position","relative");surface=new Canvas("flot-base",placeholder);overlay=new Canvas("flot-overlay",placeholder);ctx=surface.context;octx=overlay.context;eventHolder=$(overlay.element).unbind();var existing=placeholder.data("plot");if(existing){existing.shutdown();overlay.clear()}placeholder.data("plot",plot)}function bindEvents(){if(options.grid.hoverable){eventHolder.mousemove(onMouseMove);eventHolder.bind("mouseleave",onMouseLeave)}if(options.grid.clickable)eventHolder.click(onClick);executeHooks(hooks.bindEvents,[eventHolder])}function shutdown(){if(redrawTimeout)clearTimeout(redrawTimeout);eventHolder.unbind("mousemove",onMouseMove);eventHolder.unbind("mouseleave",onMouseLeave);eventHolder.unbind("click",onClick);executeHooks(hooks.shutdown,[eventHolder])}function setTransformationHelpers(axis){function identity(x){return x}var s,m,t=axis.options.transform||identity,it=axis.options.inverseTransform;if(axis.direction=="x"){s=axis.scale=plotWidth/Math.abs(t(axis.max)-t(axis.min));m=Math.min(t(axis.max),t(axis.min))}else{s=axis.scale=plotHeight/Math.abs(t(axis.max)-t(axis.min));s=-s;m=Math.max(t(axis.max),t(axis.min))}if(t==identity)axis.p2c=function(p){return(p-m)*s};else axis.p2c=function(p){return(t(p)-m)*s};if(!it)axis.c2p=function(c){return m+c/s};else axis.c2p=function(c){return it(m+c/s)}}function measureTickLabels(axis){var opts=axis.options,ticks=axis.ticks||[],labelWidth=opts.labelWidth||0,labelHeight=opts.labelHeight||0,maxWidth=labelWidth||(axis.direction=="x"?Math.floor(surface.width/(ticks.length||1)):null),legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=opts.font||"flot-tick-label tickLabel";for(var i=0;i<ticks.length;++i){var t=ticks[i];if(!t.label)continue;var info=surface.getTextInfo(layer,t.label,font,null,maxWidth);labelWidth=Math.max(labelWidth,info.width);labelHeight=Math.max(labelHeight,info.height)}axis.labelWidth=opts.labelWidth||labelWidth;axis.labelHeight=opts.labelHeight||labelHeight}function allocateAxisBoxFirstPhase(axis){var lw=axis.labelWidth,lh=axis.labelHeight,pos=axis.options.position,isXAxis=axis.direction==="x",tickLength=axis.options.tickLength,axisMargin=options.grid.axisMargin,padding=options.grid.labelMargin,innermost=true,outermost=true,first=true,found=false;$.each(isXAxis?xaxes:yaxes,function(i,a){if(a&&(a.show||a.reserveSpace)){if(a===axis){found=true}else if(a.options.position===pos){if(found){outermost=false}else{innermost=false}}if(!found){first=false}}});if(outermost){axisMargin=0}if(tickLength==null){tickLength=first?"full":5}if(!isNaN(+tickLength))padding+=+tickLength;if(isXAxis){lh+=padding;if(pos=="bottom"){plotOffset.bottom+=lh+axisMargin;axis.box={top:surface.height-plotOffset.bottom,height:lh}}else{axis.box={top:plotOffset.top+axisMargin,height:lh};plotOffset.top+=lh+axisMargin}}else{lw+=padding;if(pos=="left"){axis.box={left:plotOffset.left+axisMargin,width:lw};plotOffset.left+=lw+axisMargin}else{plotOffset.right+=lw+axisMargin;axis.box={left:surface.width-plotOffset.right,width:lw}}}axis.position=pos;axis.tickLength=tickLength;axis.box.padding=padding;axis.innermost=innermost}function allocateAxisBoxSecondPhase(axis){if(axis.direction=="x"){axis.box.left=plotOffset.left-axis.labelWidth/2;axis.box.width=surface.width-plotOffset.left-plotOffset.right+axis.labelWidth}else{axis.box.top=plotOffset.top-axis.labelHeight/2;axis.box.height=surface.height-plotOffset.bottom-plotOffset.top+axis.labelHeight}}function adjustLayoutForThingsStickingOut(){var minMargin=options.grid.minBorderMargin,axis,i;if(minMargin==null){minMargin=0;for(i=0;i<series.length;++i)minMargin=Math.max(minMargin,2*(series[i].points.radius+series[i].points.lineWidth/2))}var margins={left:minMargin,right:minMargin,top:minMargin,bottom:minMargin};$.each(allAxes(),function(_,axis){if(axis.reserveSpace&&axis.ticks&&axis.ticks.length){if(axis.direction==="x"){margins.left=Math.max(margins.left,axis.labelWidth/2);margins.right=Math.max(margins.right,axis.labelWidth/2)}else{margins.bottom=Math.max(margins.bottom,axis.labelHeight/2);margins.top=Math.max(margins.top,axis.labelHeight/2)}}});plotOffset.left=Math.ceil(Math.max(margins.left,plotOffset.left));plotOffset.right=Math.ceil(Math.max(margins.right,plotOffset.right));plotOffset.top=Math.ceil(Math.max(margins.top,plotOffset.top));plotOffset.bottom=Math.ceil(Math.max(margins.bottom,plotOffset.bottom))}function setupGrid(){var i,axes=allAxes(),showGrid=options.grid.show;for(var a in plotOffset){var margin=options.grid.margin||0;plotOffset[a]=typeof margin=="number"?margin:margin[a]||0}executeHooks(hooks.processOffset,[plotOffset]);for(var a in plotOffset){if(typeof options.grid.borderWidth=="object"){plotOffset[a]+=showGrid?options.grid.borderWidth[a]:0}else{plotOffset[a]+=showGrid?options.grid.borderWidth:0}}$.each(axes,function(_,axis){var axisOpts=axis.options;axis.show=axisOpts.show==null?axis.used:axisOpts.show;axis.reserveSpace=axisOpts.reserveSpace==null?axis.show:axisOpts.reserveSpace;setRange(axis)});if(showGrid){var allocatedAxes=$.grep(axes,function(axis){return axis.show||axis.reserveSpace});$.each(allocatedAxes,function(_,axis){setupTickGeneration(axis);setTicks(axis);snapRangeToTicks(axis,axis.ticks);measureTickLabels(axis)});for(i=allocatedAxes.length-1;i>=0;--i)allocateAxisBoxFirstPhase(allocatedAxes[i]);adjustLayoutForThingsStickingOut();$.each(allocatedAxes,function(_,axis){allocateAxisBoxSecondPhase(axis)})}plotWidth=surface.width-plotOffset.left-plotOffset.right;plotHeight=surface.height-plotOffset.bottom-plotOffset.top;$.each(axes,function(_,axis){setTransformationHelpers(axis)});if(showGrid){drawAxisLabels()}insertLegend()}function setRange(axis){var opts=axis.options,min=+(opts.min!=null?opts.min:axis.datamin),max=+(opts.max!=null?opts.max:axis.datamax),delta=max-min;if(delta==0){var widen=max==0?1:.01;if(opts.min==null)min-=widen;if(opts.max==null||opts.min!=null)max+=widen}else{var margin=opts.autoscaleMargin;if(margin!=null){if(opts.min==null){min-=delta*margin;if(min<0&&axis.datamin!=null&&axis.datamin>=0)min=0}if(opts.max==null){max+=delta*margin;if(max>0&&axis.datamax!=null&&axis.datamax<=0)max=0}}}axis.min=min;axis.max=max}function setupTickGeneration(axis){var opts=axis.options;var noTicks;if(typeof opts.ticks=="number"&&opts.ticks>0)noTicks=opts.ticks;else noTicks=.3*Math.sqrt(axis.direction=="x"?surface.width:surface.height);var delta=(axis.max-axis.min)/noTicks,dec=-Math.floor(Math.log(delta)/Math.LN10),maxDec=opts.tickDecimals;if(maxDec!=null&&dec>maxDec){dec=maxDec}var magn=Math.pow(10,-dec),norm=delta/magn,size;if(norm<1.5){size=1}else if(norm<3){size=2;if(norm>2.25&&(maxDec==null||dec+1<=maxDec)){size=2.5;++dec}}else if(norm<7.5){size=5}else{size=10}size*=magn;if(opts.minTickSize!=null&&size<opts.minTickSize){size=opts.minTickSize}axis.delta=delta;axis.tickDecimals=Math.max(0,maxDec!=null?maxDec:dec);axis.tickSize=opts.tickSize||size;if(opts.mode=="time"&&!axis.tickGenerator){throw new Error("Time mode requires the flot.time plugin.")}if(!axis.tickGenerator){axis.tickGenerator=function(axis){var ticks=[],start=floorInBase(axis.min,axis.tickSize),i=0,v=Number.NaN,prev;do{prev=v;v=start+i*axis.tickSize;ticks.push(v);++i}while(v<axis.max&&v!=prev);return ticks};axis.tickFormatter=function(value,axis){var factor=axis.tickDecimals?Math.pow(10,axis.tickDecimals):1;var formatted=""+Math.round(value*factor)/factor;if(axis.tickDecimals!=null){var decimal=formatted.indexOf(".");var precision=decimal==-1?0:formatted.length-decimal-1;if(precision<axis.tickDecimals){return(precision?formatted:formatted+".")+(""+factor).substr(1,axis.tickDecimals-precision)}}return formatted}}if($.isFunction(opts.tickFormatter))axis.tickFormatter=function(v,axis){return""+opts.tickFormatter(v,axis)};if(opts.alignTicksWithAxis!=null){var otherAxis=(axis.direction=="x"?xaxes:yaxes)[opts.alignTicksWithAxis-1];if(otherAxis&&otherAxis.used&&otherAxis!=axis){var niceTicks=axis.tickGenerator(axis);if(niceTicks.length>0){if(opts.min==null)axis.min=Math.min(axis.min,niceTicks[0]);if(opts.max==null&&niceTicks.length>1)axis.max=Math.max(axis.max,niceTicks[niceTicks.length-1])}axis.tickGenerator=function(axis){var ticks=[],v,i;for(i=0;i<otherAxis.ticks.length;++i){v=(otherAxis.ticks[i].v-otherAxis.min)/(otherAxis.max-otherAxis.min);v=axis.min+v*(axis.max-axis.min);ticks.push(v)}return ticks};if(!axis.mode&&opts.tickDecimals==null){var extraDec=Math.max(0,-Math.floor(Math.log(axis.delta)/Math.LN10)+1),ts=axis.tickGenerator(axis);if(!(ts.length>1&&/\..*0$/.test((ts[1]-ts[0]).toFixed(extraDec))))axis.tickDecimals=extraDec}}}}function setTicks(axis){var oticks=axis.options.ticks,ticks=[];if(oticks==null||typeof oticks=="number"&&oticks>0)ticks=axis.tickGenerator(axis);else if(oticks){if($.isFunction(oticks))ticks=oticks(axis);else ticks=oticks}var i,v;axis.ticks=[];for(i=0;i<ticks.length;++i){var label=null;var t=ticks[i];if(typeof t=="object"){v=+t[0];if(t.length>1)label=t[1]}else v=+t;if(label==null)label=axis.tickFormatter(v,axis);if(!isNaN(v))axis.ticks.push({v:v,label:label})}}function snapRangeToTicks(axis,ticks){if(axis.options.autoscaleMargin&&ticks.length>0){if(axis.options.min==null)axis.min=Math.min(axis.min,ticks[0].v);if(axis.options.max==null&&ticks.length>1)axis.max=Math.max(axis.max,ticks[ticks.length-1].v)}}function draw(){surface.clear();executeHooks(hooks.drawBackground,[ctx]);var grid=options.grid;if(grid.show&&grid.backgroundColor)drawBackground();if(grid.show&&!grid.aboveData){drawGrid()}for(var i=0;i<series.length;++i){executeHooks(hooks.drawSeries,[ctx,series[i]]);drawSeries(series[i])}executeHooks(hooks.draw,[ctx]);if(grid.show&&grid.aboveData){drawGrid()}surface.render();triggerRedrawOverlay()}function extractRange(ranges,coord){var axis,from,to,key,axes=allAxes();for(var i=0;i<axes.length;++i){axis=axes[i];if(axis.direction==coord){key=coord+axis.n+"axis";if(!ranges[key]&&axis.n==1)key=coord+"axis";if(ranges[key]){from=ranges[key].from;to=ranges[key].to;break}}}if(!ranges[key]){axis=coord=="x"?xaxes[0]:yaxes[0];from=ranges[coord+"1"];to=ranges[coord+"2"]}if(from!=null&&to!=null&&from>to){var tmp=from;from=to;to=tmp}return{from:from,to:to,axis:axis}}function drawBackground(){ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.fillStyle=getColorOrGradient(options.grid.backgroundColor,plotHeight,0,"rgba(255, 255, 255, 0)");ctx.fillRect(0,0,plotWidth,plotHeight);ctx.restore()}function drawGrid(){var i,axes,bw,bc;ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var markings=options.grid.markings;if(markings){if($.isFunction(markings)){axes=plot.getAxes();axes.xmin=axes.xaxis.min;axes.xmax=axes.xaxis.max;axes.ymin=axes.yaxis.min;axes.ymax=axes.yaxis.max;markings=markings(axes)}for(i=0;i<markings.length;++i){var m=markings[i],xrange=extractRange(m,"x"),yrange=extractRange(m,"y");if(xrange.from==null)xrange.from=xrange.axis.min;if(xrange.to==null)xrange.to=xrange.axis.max;if(yrange.from==null)yrange.from=yrange.axis.min;if(yrange.to==null)yrange.to=yrange.axis.max;if(xrange.to<xrange.axis.min||xrange.from>xrange.axis.max||yrange.to<yrange.axis.min||yrange.from>yrange.axis.max)continue;xrange.from=Math.max(xrange.from,xrange.axis.min);xrange.to=Math.min(xrange.to,xrange.axis.max);yrange.from=Math.max(yrange.from,yrange.axis.min);yrange.to=Math.min(yrange.to,yrange.axis.max);var xequal=xrange.from===xrange.to,yequal=yrange.from===yrange.to;if(xequal&&yequal){continue}xrange.from=Math.floor(xrange.axis.p2c(xrange.from));xrange.to=Math.floor(xrange.axis.p2c(xrange.to));yrange.from=Math.floor(yrange.axis.p2c(yrange.from));yrange.to=Math.floor(yrange.axis.p2c(yrange.to));if(xequal||yequal){var lineWidth=m.lineWidth||options.grid.markingsLineWidth,subPixel=lineWidth%2?.5:0;ctx.beginPath();ctx.strokeStyle=m.color||options.grid.markingsColor;ctx.lineWidth=lineWidth;if(xequal){ctx.moveTo(xrange.to+subPixel,yrange.from);ctx.lineTo(xrange.to+subPixel,yrange.to)}else{ctx.moveTo(xrange.from,yrange.to+subPixel);ctx.lineTo(xrange.to,yrange.to+subPixel)}ctx.stroke()}else{ctx.fillStyle=m.color||options.grid.markingsColor;ctx.fillRect(xrange.from,yrange.to,xrange.to-xrange.from,yrange.from-yrange.to)}}}axes=allAxes();bw=options.grid.borderWidth;for(var j=0;j<axes.length;++j){var axis=axes[j],box=axis.box,t=axis.tickLength,x,y,xoff,yoff;if(!axis.show||axis.ticks.length==0)continue;ctx.lineWidth=1;if(axis.direction=="x"){x=0;if(t=="full")y=axis.position=="top"?0:plotHeight;else y=box.top-plotOffset.top+(axis.position=="top"?box.height:0)}else{y=0;if(t=="full")x=axis.position=="left"?0:plotWidth;else x=box.left-plotOffset.left+(axis.position=="left"?box.width:0)}if(!axis.innermost){ctx.strokeStyle=axis.options.color;ctx.beginPath();xoff=yoff=0;if(axis.direction=="x")xoff=plotWidth+1;else yoff=plotHeight+1;if(ctx.lineWidth==1){if(axis.direction=="x"){y=Math.floor(y)+.5}else{x=Math.floor(x)+.5}}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff);ctx.stroke()}ctx.strokeStyle=axis.options.tickColor;ctx.beginPath();for(i=0;i<axis.ticks.length;++i){var v=axis.ticks[i].v;xoff=yoff=0;if(isNaN(v)||v<axis.min||v>axis.max||t=="full"&&(typeof bw=="object"&&bw[axis.position]>0||bw>0)&&(v==axis.min||v==axis.max))continue;if(axis.direction=="x"){x=axis.p2c(v);yoff=t=="full"?-plotHeight:t;if(axis.position=="top")yoff=-yoff}else{y=axis.p2c(v);xoff=t=="full"?-plotWidth:t;if(axis.position=="left")xoff=-xoff}if(ctx.lineWidth==1){if(axis.direction=="x")x=Math.floor(x)+.5;else y=Math.floor(y)+.5}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff)}ctx.stroke()}if(bw){bc=options.grid.borderColor;if(typeof bw=="object"||typeof bc=="object"){if(typeof bw!=="object"){bw={top:bw,right:bw,bottom:bw,left:bw}}if(typeof bc!=="object"){bc={top:bc,right:bc,bottom:bc,left:bc}}if(bw.top>0){ctx.strokeStyle=bc.top;ctx.lineWidth=bw.top;ctx.beginPath();ctx.moveTo(0-bw.left,0-bw.top/2);ctx.lineTo(plotWidth,0-bw.top/2);ctx.stroke()}if(bw.right>0){ctx.strokeStyle=bc.right;ctx.lineWidth=bw.right;ctx.beginPath();ctx.moveTo(plotWidth+bw.right/2,0-bw.top);ctx.lineTo(plotWidth+bw.right/2,plotHeight);ctx.stroke()}if(bw.bottom>0){ctx.strokeStyle=bc.bottom;ctx.lineWidth=bw.bottom;ctx.beginPath();ctx.moveTo(plotWidth+bw.right,plotHeight+bw.bottom/2);ctx.lineTo(0,plotHeight+bw.bottom/2);ctx.stroke()}if(bw.left>0){ctx.strokeStyle=bc.left;ctx.lineWidth=bw.left;ctx.beginPath();ctx.moveTo(0-bw.left/2,plotHeight+bw.bottom);ctx.lineTo(0-bw.left/2,0);ctx.stroke()}}else{ctx.lineWidth=bw;ctx.strokeStyle=options.grid.borderColor;ctx.strokeRect(-bw/2,-bw/2,plotWidth+bw,plotHeight+bw)}}ctx.restore()}function drawAxisLabels(){$.each(allAxes(),function(_,axis){var box=axis.box,legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=axis.options.font||"flot-tick-label tickLabel",tick,x,y,halign,valign;surface.removeText(layer);if(!axis.show||axis.ticks.length==0)return;for(var i=0;i<axis.ticks.length;++i){tick=axis.ticks[i];if(!tick.label||tick.v<axis.min||tick.v>axis.max)continue;if(axis.direction=="x"){halign="center";x=plotOffset.left+axis.p2c(tick.v);if(axis.position=="bottom"){y=box.top+box.padding}else{y=box.top+box.height-box.padding;valign="bottom"}}else{valign="middle";y=plotOffset.top+axis.p2c(tick.v);if(axis.position=="left"){x=box.left+box.width-box.padding;halign="right"}else{x=box.left+box.padding}}surface.addText(layer,x,y,tick.label,font,null,null,halign,valign)}})}function drawSeries(series){if(series.lines.show)drawSeriesLines(series);if(series.bars.show)drawSeriesBars(series);if(series.points.show)drawSeriesPoints(series)}function drawSeriesLines(series){function plotLine(datapoints,xoffset,yoffset,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,prevx=null,prevy=null;ctx.beginPath();for(var i=ps;i<points.length;i+=ps){var x1=points[i-ps],y1=points[i-ps+1],x2=points[i],y2=points[i+1];if(x1==null||x2==null)continue;if(y1<=y2&&y1<axisy.min){if(y2<axisy.min)continue;x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else if(y2<=y1&&y2<axisy.min){if(y1<axisy.min)continue;x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}if(y1>=y2&&y1>axisy.max){if(y2>axisy.max)continue;x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else if(y2>=y1&&y2>axisy.max){if(y1>axisy.max)continue;x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}if(x1<=x2&&x1<axisx.min){if(x2<axisx.min)continue;y1=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else if(x2<=x1&&x2<axisx.min){if(x1<axisx.min)continue;y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}if(x1>=x2&&x1>axisx.max){if(x2>axisx.max)continue;y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max}else if(x2>=x1&&x2>axisx.max){if(x1>axisx.max)continue;y2=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.max}if(x1!=prevx||y1!=prevy)ctx.moveTo(axisx.p2c(x1)+xoffset,axisy.p2c(y1)+yoffset);prevx=x2;prevy=y2;ctx.lineTo(axisx.p2c(x2)+xoffset,axisy.p2c(y2)+yoffset)}ctx.stroke()}function plotLineArea(datapoints,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,bottom=Math.min(Math.max(0,axisy.min),axisy.max),i=0,top,areaOpen=false,ypos=1,segmentStart=0,segmentEnd=0;while(true){if(ps>0&&i>points.length+ps)break;i+=ps;var x1=points[i-ps],y1=points[i-ps+ypos],x2=points[i],y2=points[i+ypos];if(areaOpen){if(ps>0&&x1!=null&&x2==null){segmentEnd=i;ps=-ps;ypos=2;continue}if(ps<0&&i==segmentStart+ps){ctx.fill();areaOpen=false;ps=-ps;ypos=1;i=segmentStart=segmentEnd+ps;continue}}if(x1==null||x2==null)continue;if(x1<=x2&&x1<axisx.min){if(x2<axisx.min)continue;y1=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else if(x2<=x1&&x2<axisx.min){if(x1<axisx.min)continue;y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}if(x1>=x2&&x1>axisx.max){if(x2>axisx.max)continue;y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max}else if(x2>=x1&&x2>axisx.max){if(x1>axisx.max)continue;y2=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.max}if(!areaOpen){ctx.beginPath();ctx.moveTo(axisx.p2c(x1),axisy.p2c(bottom));areaOpen=true}if(y1>=axisy.max&&y2>=axisy.max){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.max));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.max));continue}else if(y1<=axisy.min&&y2<=axisy.min){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.min));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.min));continue}var x1old=x1,x2old=x2;if(y1<=y2&&y1<axisy.min&&y2>=axisy.min){x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else if(y2<=y1&&y2<axisy.min&&y1>=axisy.min){x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}if(y1>=y2&&y1>axisy.max&&y2<=axisy.max){x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else if(y2>=y1&&y2>axisy.max&&y1<=axisy.max){x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}if(x1!=x1old){ctx.lineTo(axisx.p2c(x1old),axisy.p2c(y1))}ctx.lineTo(axisx.p2c(x1),axisy.p2c(y1));ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));if(x2!=x2old){ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));ctx.lineTo(axisx.p2c(x2old),axisy.p2c(y2))}}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineJoin="round";var lw=series.lines.lineWidth,sw=series.shadowSize;if(lw>0&&sw>0){ctx.lineWidth=sw;ctx.strokeStyle="rgba(0,0,0,0.1)";var angle=Math.PI/18;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/2),Math.cos(angle)*(lw/2+sw/2),series.xaxis,series.yaxis);ctx.lineWidth=sw/2;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/4),Math.cos(angle)*(lw/2+sw/4),series.xaxis,series.yaxis)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;var fillStyle=getFillStyle(series.lines,series.color,0,plotHeight);if(fillStyle){ctx.fillStyle=fillStyle;plotLineArea(series.datapoints,series.xaxis,series.yaxis)}if(lw>0)plotLine(series.datapoints,0,0,series.xaxis,series.yaxis);ctx.restore()}function drawSeriesPoints(series){function plotPoints(datapoints,radius,fillStyle,offset,shadow,axisx,axisy,symbol){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points.length;i+=ps){var x=points[i],y=points[i+1];if(x==null||x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max)continue;ctx.beginPath();x=axisx.p2c(x);y=axisy.p2c(y)+offset;if(symbol=="circle")ctx.arc(x,y,radius,0,shadow?Math.PI:Math.PI*2,false);else symbol(ctx,x,y,radius,shadow);ctx.closePath();if(fillStyle){ctx.fillStyle=fillStyle;ctx.fill()}ctx.stroke()}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var lw=series.points.lineWidth,sw=series.shadowSize,radius=series.points.radius,symbol=series.points.symbol;if(lw==0)lw=1e-4;if(lw>0&&sw>0){var w=sw/2;ctx.lineWidth=w;ctx.strokeStyle="rgba(0,0,0,0.1)";plotPoints(series.datapoints,radius,null,w+w/2,true,series.xaxis,series.yaxis,symbol);ctx.strokeStyle="rgba(0,0,0,0.2)";plotPoints(series.datapoints,radius,null,w/2,true,series.xaxis,series.yaxis,symbol)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;plotPoints(series.datapoints,radius,getFillStyle(series.points,series.color),0,false,series.xaxis,series.yaxis,symbol);ctx.restore()}function drawBar(x,y,b,barLeft,barRight,fillStyleCallback,axisx,axisy,c,horizontal,lineWidth){var left,right,bottom,top,drawLeft,drawRight,drawTop,drawBottom,tmp;if(horizontal){drawBottom=drawRight=drawTop=true;drawLeft=false;left=b;right=x;top=y+barLeft;bottom=y+barRight;if(right<left){tmp=right;right=left;left=tmp;drawLeft=true;drawRight=false}}else{drawLeft=drawRight=drawTop=true;drawBottom=false;left=x+barLeft;right=x+barRight;bottom=b;top=y;if(top<bottom){tmp=top;top=bottom;bottom=tmp;drawBottom=true;drawTop=false}}if(right<axisx.min||left>axisx.max||top<axisy.min||bottom>axisy.max)return;if(left<axisx.min){left=axisx.min;drawLeft=false}if(right>axisx.max){right=axisx.max;drawRight=false}if(bottom<axisy.min){bottom=axisy.min;drawBottom=false}if(top>axisy.max){top=axisy.max;drawTop=false}left=axisx.p2c(left);bottom=axisy.p2c(bottom);right=axisx.p2c(right);top=axisy.p2c(top);if(fillStyleCallback){c.fillStyle=fillStyleCallback(bottom,top);c.fillRect(left,top,right-left,bottom-top)}if(lineWidth>0&&(drawLeft||drawRight||drawTop||drawBottom)){c.beginPath();c.moveTo(left,bottom);if(drawLeft)c.lineTo(left,top);else c.moveTo(left,top);if(drawTop)c.lineTo(right,top);else c.moveTo(right,top);if(drawRight)c.lineTo(right,bottom);else c.moveTo(right,bottom);if(drawBottom)c.lineTo(left,bottom);else c.moveTo(left,bottom);c.stroke()}}function drawSeriesBars(series){function plotBars(datapoints,barLeft,barRight,fillStyleCallback,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points.length;i+=ps){if(points[i]==null)continue;drawBar(points[i],points[i+1],points[i+2],barLeft,barRight,fillStyleCallback,axisx,axisy,ctx,series.bars.horizontal,series.bars.lineWidth)}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineWidth=series.bars.lineWidth;ctx.strokeStyle=series.color;var barLeft;switch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:barLeft=-series.bars.barWidth/2}var fillStyleCallback=series.bars.fill?function(bottom,top){return getFillStyle(series.bars,series.color,bottom,top)}:null;plotBars(series.datapoints,barLeft,barLeft+series.bars.barWidth,fillStyleCallback,series.xaxis,series.yaxis);ctx.restore()}function getFillStyle(filloptions,seriesColor,bottom,top){var fill=filloptions.fill;if(!fill)return null;if(filloptions.fillColor)return getColorOrGradient(filloptions.fillColor,bottom,top,seriesColor);var c=$.color.parse(seriesColor);c.a=typeof fill=="number"?fill:.4;c.normalize();return c.toString()}function insertLegend(){if(options.legend.container!=null){$(options.legend.container).html("")}else{placeholder.find(".legend").remove()}if(!options.legend.show){return}var fragments=[],entries=[],rowStarted=false,lf=options.legend.labelFormatter,s,label;for(var i=0;i<series.length;++i){s=series[i];if(s.label){label=lf?lf(s.label,s):s.label;if(label){entries.push({label:label,color:s.color})}}}if(options.legend.sorted){if($.isFunction(options.legend.sorted)){entries.sort(options.legend.sorted)}else if(options.legend.sorted=="reverse"){entries.reverse()}else{var ascending=options.legend.sorted!="descending";entries.sort(function(a,b){return a.label==b.label?0:a.label<b.label!=ascending?1:-1})}}for(var i=0;i<entries.length;++i){var entry=entries[i];if(i%options.legend.noColumns==0){if(rowStarted)fragments.push("</tr>");fragments.push("<tr>");rowStarted=true}fragments.push('<td class="legendColorBox"><div style="border:1px solid '+options.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+entry.color+';overflow:hidden"></div></div></td>'+'<td class="legendLabel">'+entry.label+"</td>")}if(rowStarted)fragments.push("</tr>");if(fragments.length==0)return;var table='<table style="font-size:smaller;color:'+options.grid.color+'">'+fragments.join("")+"</table>";if(options.legend.container!=null)$(options.legend.container).html(table);else{var pos="",p=options.legend.position,m=options.legend.margin;if(m[0]==null)m=[m,m];if(p.charAt(0)=="n")pos+="top:"+(m[1]+plotOffset.top)+"px;";else if(p.charAt(0)=="s")pos+="bottom:"+(m[1]+plotOffset.bottom)+"px;";if(p.charAt(1)=="e")pos+="right:"+(m[0]+plotOffset.right)+"px;";else if(p.charAt(1)=="w")pos+="left:"+(m[0]+plotOffset.left)+"px;";var legend=$('<div class="legend">'+table.replace('style="','style="position:absolute;'+pos+";")+"</div>").appendTo(placeholder);if(options.legend.backgroundOpacity!=0){var c=options.legend.backgroundColor;if(c==null){c=options.grid.backgroundColor;if(c&&typeof c=="string")c=$.color.parse(c);else c=$.color.extract(legend,"background-color");c.a=1;c=c.toString()}var div=legend.children();$('<div style="position:absolute;width:'+div.width()+"px;height:"+div.height()+"px;"+pos+"background-color:"+c+';"> </div>').prependTo(legend).css("opacity",options.legend.backgroundOpacity)}}}var highlights=[],redrawTimeout=null;function findNearbyItem(mouseX,mouseY,seriesFilter){var maxDistance=options.grid.mouseActiveRadius,smallestDistance=maxDistance*maxDistance+1,item=null,foundPoint=false,i,j,ps;for(i=series.length-1;i>=0;--i){if(!seriesFilter(series[i]))continue;var s=series[i],axisx=s.xaxis,axisy=s.yaxis,points=s.datapoints.points,mx=axisx.c2p(mouseX),my=axisy.c2p(mouseY),maxx=maxDistance/axisx.scale,maxy=maxDistance/axisy.scale;ps=s.datapoints.pointsize;if(axisx.options.inverseTransform)maxx=Number.MAX_VALUE;if(axisy.options.inverseTransform)maxy=Number.MAX_VALUE;if(s.lines.show||s.points.show){for(j=0;j<points.length;j+=ps){var x=points[j],y=points[j+1];if(x==null)continue;if(x-mx>maxx||x-mx<-maxx||y-my>maxy||y-my<-maxy)continue;var dx=Math.abs(axisx.p2c(x)-mouseX),dy=Math.abs(axisy.p2c(y)-mouseY),dist=dx*dx+dy*dy;if(dist<smallestDistance){smallestDistance=dist;item=[i,j/ps]}}}if(s.bars.show&&!item){var barLeft,barRight;switch(s.bars.align){case"left":barLeft=0;break;case"right":barLeft=-s.bars.barWidth;break;default:barLeft=-s.bars.barWidth/2}barRight=barLeft+s.bars.barWidth;for(j=0;j<points.length;j+=ps){var x=points[j],y=points[j+1],b=points[j+2];if(x==null)continue;if(series[i].bars.horizontal?mx<=Math.max(b,x)&&mx>=Math.min(b,x)&&my>=y+barLeft&&my<=y+barRight:mx>=x+barLeft&&mx<=x+barRight&&my>=Math.min(b,y)&&my<=Math.max(b,y))item=[i,j/ps]}}}if(item){i=item[0];j=item[1];ps=series[i].datapoints.pointsize;return{datapoint:series[i].datapoints.points.slice(j*ps,(j+1)*ps),dataIndex:j,series:series[i],seriesIndex:i}}return null}function onMouseMove(e){if(options.grid.hoverable)triggerClickHoverEvent("plothover",e,function(s){return s["hoverable"]!=false})}function onMouseLeave(e){if(options.grid.hoverable)triggerClickHoverEvent("plothover",e,function(s){return false})}function onClick(e){triggerClickHoverEvent("plotclick",e,function(s){return s["clickable"]!=false})}function triggerClickHoverEvent(eventname,event,seriesFilter){var offset=eventHolder.offset(),canvasX=event.pageX-offset.left-plotOffset.left,canvasY=event.pageY-offset.top-plotOffset.top,pos=canvasToAxisCoords({left:canvasX,top:canvasY});pos.pageX=event.pageX;pos.pageY=event.pageY;var item=findNearbyItem(canvasX,canvasY,seriesFilter);if(item){item.pageX=parseInt(item.series.xaxis.p2c(item.datapoint[0])+offset.left+plotOffset.left,10);item.pageY=parseInt(item.series.yaxis.p2c(item.datapoint[1])+offset.top+plotOffset.top,10)}if(options.grid.autoHighlight){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.auto==eventname&&!(item&&h.series==item.series&&h.point[0]==item.datapoint[0]&&h.point[1]==item.datapoint[1]))unhighlight(h.series,h.point)}if(item)highlight(item.series,item.datapoint,eventname)}placeholder.trigger(eventname,[pos,item])}function triggerRedrawOverlay(){var t=options.interaction.redrawOverlayInterval;if(t==-1){drawOverlay();return}if(!redrawTimeout)redrawTimeout=setTimeout(drawOverlay,t)}function drawOverlay(){redrawTimeout=null;octx.save();overlay.clear();octx.translate(plotOffset.left,plotOffset.top);var i,hi;for(i=0;i<highlights.length;++i){hi=highlights[i];if(hi.series.bars.show)drawBarHighlight(hi.series,hi.point);else drawPointHighlight(hi.series,hi.point)}octx.restore();executeHooks(hooks.drawOverlay,[octx])}function highlight(s,point,auto){if(typeof s=="number")s=series[s];if(typeof point=="number"){var ps=s.datapoints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=indexOfHighlight(s,point);if(i==-1){highlights.push({series:s,point:point,auto:auto});triggerRedrawOverlay()}else if(!auto)highlights[i].auto=false}function unhighlight(s,point){if(s==null&&point==null){highlights=[];triggerRedrawOverlay();return}if(typeof s=="number")s=series[s];if(typeof point=="number"){var ps=s.datapoints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=indexOfHighlight(s,point);if(i!=-1){highlights.splice(i,1);triggerRedrawOverlay()}}function indexOfHighlight(s,p){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.series==s&&h.point[0]==p[0]&&h.point[1]==p[1])return i}return-1}function drawPointHighlight(series,point){var x=point[0],y=point[1],axisx=series.xaxis,axisy=series.yaxis,highlightColor=typeof series.highlightColor==="string"?series.highlightColor:$.color.parse(series.color).scale("a",.5).toString();if(x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max)return;var pointRadius=series.points.radius+series.points.lineWidth/2;octx.lineWidth=pointRadius;octx.strokeStyle=highlightColor;var radius=1.5*pointRadius;x=axisx.p2c(x);y=axisy.p2c(y);octx.beginPath();if(series.points.symbol=="circle")octx.arc(x,y,radius,0,2*Math.PI,false);else series.points.symbol(octx,x,y,radius,false);octx.closePath();octx.stroke()}function drawBarHighlight(series,point){var highlightColor=typeof series.highlightColor==="string"?series.highlightColor:$.color.parse(series.color).scale("a",.5).toString(),fillStyle=highlightColor,barLeft;switch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:barLeft=-series.bars.barWidth/2}octx.lineWidth=series.bars.lineWidth;octx.strokeStyle=highlightColor;drawBar(point[0],point[1],point[2]||0,barLeft,barLeft+series.bars.barWidth,function(){return fillStyle},series.xaxis,series.yaxis,octx,series.bars.horizontal,series.bars.lineWidth)}function getColorOrGradient(spec,bottom,top,defaultColor){if(typeof spec=="string")return spec;else{var gradient=ctx.createLinearGradient(0,top,0,bottom);for(var i=0,l=spec.colors.length;i<l;++i){var c=spec.colors[i];if(typeof c!="string"){var co=$.color.parse(defaultColor);if(c.brightness!=null)co=co.scale("rgb",c.brightness);if(c.opacity!=null)co.a*=c.opacity;c=co.toString()}gradient.addColorStop(i/(l-1),c)}return gradient}}}$.plot=function(placeholder,data,options){var plot=new Plot($(placeholder),data,options,$.plot.plugins);return plot};$.plot.version="0.8.3";$.plot.plugins=[];$.fn.plot=function(data,options){return this.each(function(){$.plot(this,data,options)})};function floorInBase(n,base){return base*Math.floor(n/base)}})(jQuery);
630
 
631
+ /* flot navigate v0.8.3 | https://github.com/flot/flot | Copyright (c) 2007-2014 IOLA and Ole Laursen. Licensed under the MIT license. */
632
+ (function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case"mousedown":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,"mousemove mouseup",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&"mousemove":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,"dragstart",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case"mousemove":if(d.dragging){if(k=f(h,"drag",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type="mouseup"}case"mouseup":b.remove(document,"mousemove mouseup",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,"dragend",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?"off":"on",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?"":"none"))}a.fn.drag=function(a,b,c){return b&&this.bind("dragstart",a),c&&this.bind("dragend",c),a?this.bind("drag",b?b:a):this.trigger("drag")};var b=a.event,c=b.special,d=c.drag={not:":input",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,"mousedown",e,c),this.attachEvent&&this.attachEvent("ondragstart",h)},teardown:function(){b.remove(this,"mousedown",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent("ondragstart",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery);(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);(function($){var options={xaxis:{zoomRange:null,panRange:null},zoom:{interactive:false,trigger:"dblclick",amount:1.5},pan:{interactive:false,cursor:"move",frameRate:20}};function init(plot){function onZoomClick(e,zoomOut){var c=plot.offset();c.left=e.pageX-c.left;c.top=e.pageY-c.top;if(zoomOut)plot.zoomOut({center:c});else plot.zoom({center:c})}function onMouseWheel(e,delta){e.preventDefault();onZoomClick(e,delta<0);return false}var prevCursor="default",prevPageX=0,prevPageY=0,panTimeout=null;function onDragStart(e){if(e.which!=1)return false;var c=plot.getPlaceholder().css("cursor");if(c)prevCursor=c;plot.getPlaceholder().css("cursor",plot.getOptions().pan.cursor);prevPageX=e.pageX;prevPageY=e.pageY}function onDrag(e){var frameRate=plot.getOptions().pan.frameRate;if(panTimeout||!frameRate)return;panTimeout=setTimeout(function(){plot.pan({left:prevPageX-e.pageX,top:prevPageY-e.pageY});prevPageX=e.pageX;prevPageY=e.pageY;panTimeout=null},1/frameRate*1e3)}function onDragEnd(e){if(panTimeout){clearTimeout(panTimeout);panTimeout=null}plot.getPlaceholder().css("cursor",prevCursor);plot.pan({left:prevPageX-e.pageX,top:prevPageY-e.pageY})}function bindEvents(plot,eventHolder){var o=plot.getOptions();if(o.zoom.interactive){eventHolder[o.zoom.trigger](onZoomClick);eventHolder.mousewheel(onMouseWheel)}if(o.pan.interactive){eventHolder.bind("dragstart",{distance:10},onDragStart);eventHolder.bind("drag",onDrag);eventHolder.bind("dragend",onDragEnd)}}plot.zoomOut=function(args){if(!args)args={};if(!args.amount)args.amount=plot.getOptions().zoom.amount;args.amount=1/args.amount;plot.zoom(args)};plot.zoom=function(args){if(!args)args={};var c=args.center,amount=args.amount||plot.getOptions().zoom.amount,w=plot.width(),h=plot.height();if(!c)c={left:w/2,top:h/2};var xf=c.left/w,yf=c.top/h,minmax={x:{min:c.left-xf*w/amount,max:c.left+(1-xf)*w/amount},y:{min:c.top-yf*h/amount,max:c.top+(1-yf)*h/amount}};$.each(plot.getAxes(),function(_,axis){var opts=axis.options,min=minmax[axis.direction].min,max=minmax[axis.direction].max,zr=opts.zoomRange,pr=opts.panRange;if(zr===false)return;min=axis.c2p(min);max=axis.c2p(max);if(min>max){var tmp=min;min=max;max=tmp}if(pr){if(pr[0]!=null&&min<pr[0]){min=pr[0]}if(pr[1]!=null&&max>pr[1]){max=pr[1]}}var range=max-min;if(zr&&(zr[0]!=null&&range<zr[0]&&amount>1||zr[1]!=null&&range>zr[1]&&amount<1))return;opts.min=min;opts.max=max});plot.setupGrid();plot.draw();if(!args.preventEvent)plot.getPlaceholder().trigger("plotzoom",[plot,args])};plot.pan=function(args){var delta={x:+args.left,y:+args.top};if(isNaN(delta.x))delta.x=0;if(isNaN(delta.y))delta.y=0;$.each(plot.getAxes(),function(_,axis){var opts=axis.options,min,max,d=delta[axis.direction];min=axis.c2p(axis.p2c(axis.min)+d),max=axis.c2p(axis.p2c(axis.max)+d);var pr=opts.panRange;if(pr===false)return;if(pr){if(pr[0]!=null&&pr[0]>min){d=pr[0]-min;min+=d;max+=d}if(pr[1]!=null&&pr[1]<max){d=pr[1]-max;min+=d;max+=d}}opts.min=min;opts.max=max});plot.setupGrid();plot.draw();if(!args.preventEvent)plot.getPlaceholder().trigger("plotpan",[plot,args])};function shutdown(plot,eventHolder){eventHolder.unbind(plot.getOptions().zoom.trigger,onZoomClick);eventHolder.unbind("mousewheel",onMouseWheel);eventHolder.unbind("dragstart",onDragStart);eventHolder.unbind("drag",onDrag);eventHolder.unbind("dragend",onDragEnd);if(panTimeout)clearTimeout(panTimeout)}plot.hooks.bindEvents.push(bindEvents);plot.hooks.shutdown.push(shutdown)}$.plot.plugins.push({init:init,options:options,name:"navigate",version:"1.3"})})(jQuery);
admin/{config → view}/addons.php RENAMED
File without changes
admin/view/index.php CHANGED
@@ -142,9 +142,9 @@
142
  <form method="get" action=""><input type="hidden" id="meta-box-order-nonce" name="meta-box-order-nonce" value="<?php echo wp_create_nonce('meta-box-order') ?>" /></form><?php
143
 
144
  foreach( wp_slimstat_reports::$reports_info as $a_report_id => $a_report_info ) {
145
- if ( empty( $a_report_info[ 'screens' ] ) || !in_array( $_GET[ 'page' ], $a_report_info[ 'screens' ] ) ) {
146
- continue;
147
- }
148
 
149
  wp_slimstat_reports::report_header( $a_report_id );
150
 
142
  <form method="get" action=""><input type="hidden" id="meta-box-order-nonce" name="meta-box-order-nonce" value="<?php echo wp_create_nonce('meta-box-order') ?>" /></form><?php
143
 
144
  foreach( wp_slimstat_reports::$reports_info as $a_report_id => $a_report_info ) {
145
+ // if ( empty( $a_report_info[ 'screens' ] ) || !in_array( $_GET[ 'page' ], $a_report_info[ 'screens' ] ) ) {
146
+ // continue;
147
+ // }
148
 
149
  wp_slimstat_reports::report_header( $a_report_id );
150
 
admin/view/layout.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ include_once( dirname(__FILE__) . '/wp-slimstat-reports.php' );
3
+ wp_slimstat_reports::init();
4
+
5
+ // Get default report placements
6
+ $report_locations = array(
7
+ 'inactive' => array(),
8
+ 'slimview1' => array(),
9
+ 'slimview2' => array(),
10
+ 'slimview3' => array(),
11
+ 'slimview4' => array(),
12
+ 'slimview5' => array(),
13
+ 'slimview6' => array(),
14
+ 'dashboard' => array()
15
+ );
16
+ foreach ( wp_slimstat_reports::$reports_info as $a_report_id => $a_report_info ) {
17
+ if ( !empty( $a_report_info[ 'screens' ] ) ) {
18
+ foreach ( $a_report_info[ 'screens' ] as $a_report_screen ) {
19
+ if ( isset( $report_locations[ $a_report_screen ] ) ) {
20
+ $report_locations[ $a_report_screen ][] = $a_report_id;
21
+ }
22
+ }
23
+ }
24
+ }
25
+
26
+ foreach ( $report_locations as $a_location_id => $a_location_list ) {
27
+ if ( !empty( wp_slimstat_reports::$user_reports[ $a_location_id ] ) ) {
28
+ $report_locations[ $a_location_id ] = explode( ',', wp_slimstat_reports::$user_reports[ $a_location_id ] );
29
+ }
30
+ }
31
+
32
+ // Keep track of multiple occurrences of the same report, to allow users to delete duplicates
33
+ $already_seen = array();
34
+
35
+ $current_user = wp_get_current_user();
36
+ $page_location = ( wp_slimstat::$options[ 'use_separate_menu' ] == 'yes' ) ? 'slimstat' : 'admin';
37
+ ?>
38
+
39
+ <div class="wrap slimstat-layout">
40
+ <h2><?php _e( 'Customize and organize your reports','wp-slimstat' ) ?></h2>
41
+ <p><?php _e( 'Drag and drop report placeholders from one container to another, to customize the information you want to see right away when you open Slimstat. Place two or more charts on the same view, clone reports or move them to the Inactive Reports container for improved performance. It is your website, and you know how metrics should be combined to get a clear picture of the traffic it generates.<br/><br/><strong>Note</strong>: if a placeholder is greyed out, it means that the corresponding report is currently hidden (Screen Options tab).', 'wp-slimstat') ?></p>
42
+
43
+ <form method="get" action=""><input type="hidden" id="meta-box-order-nonce" name="meta-box-order-nonce" value="<?php echo wp_create_nonce('meta-box-order') ?>" /></form>
44
+
45
+ <?php foreach ( $report_locations as $a_location_id => $a_location_list ): $hidden_reports = get_user_option( "metaboxhidden_{$page_location}_page_{$a_location_id}", $current_user->ID ); if ( !is_array( $hidden_reports ) ) $hidden_reports = array(); ?>
46
+ <div id="postbox-container-<?php echo $a_location_id ?>" class="postbox-container">
47
+ <h2 class="slimstat-options-section-header"><?php echo wp_slimstat_reports::$screens_info[ $a_location_id ] ?></h2>
48
+ <div id="<?php echo $a_location_id ?>-sortables" class="meta-box-sortables"><?php
49
+ foreach( $a_location_list as $a_report_id ) {
50
+ if ( !in_array( $a_report_id, $already_seen ) ) {
51
+ $already_seen[] = $a_report_id;
52
+ $icon = 'docs';
53
+ $title = __( 'Clone', 'wp-slimstat' );
54
+ }
55
+ else{
56
+ $icon = 'trash';
57
+ $title = __( 'Delete', 'wp-slimstat' );
58
+ }
59
+
60
+ $placeholder_classes = '';
61
+ if ( ( in_array( 'hidden', wp_slimstat_reports::$reports_info[ $a_report_id ][ 'classes' ] ) && empty( $hidden_reports ) ) || in_array( $a_report_id, $hidden_reports ) ) {
62
+ $placeholder_classes = ' invisible';
63
+ }
64
+
65
+ echo "
66
+ <div class='postbox$placeholder_classes' id='$a_report_id'>
67
+ <div class='slimstat-header-buttons'><a class='slimstat-font-$icon' href='#' title='$title'></a></div>
68
+ <h3 class='hndle'>" . wp_slimstat_reports::$reports_info[ $a_report_id ][ 'title' ] . "</h3>
69
+ </div>";
70
+ } ?>
71
+ </div>
72
+ </div>
73
+ <?php endforeach; ?>
admin/view/wp-slimstat-reports.php CHANGED
@@ -5,6 +5,7 @@ class wp_slimstat_reports {
5
  // Structures to store all the information about what screens and reports are available
6
  public static $screens_info = array();
7
  public static $reports_info = array();
 
8
 
9
  // Hidden filters are not displayed to the user, but are applied to the reports
10
  public static $hidden_filters = array();
@@ -17,12 +18,14 @@ class wp_slimstat_reports {
17
  */
18
  public static function init(){
19
  self::$screens_info = array(
20
- 'wp-slim-view-1' => __( 'Access Log', 'wp-slimstat' ),
21
- 'wp-slim-view-2' => __( 'Overview', 'wp-slimstat' ),
22
- 'wp-slim-view-3' => __( 'Audience', 'wp-slimstat' ),
23
- 'wp-slim-view-4' => __( 'Site Analysis', 'wp-slimstat' ),
24
- 'wp-slim-view-5' => __( 'Traffic Sources', 'wp-slimstat' ),
25
- 'wp-slim-view-6' => __( 'Map Overlay', 'wp-slimstat' )
 
 
26
  );
27
 
28
  // Filters use the following format: browser equals Firefox&&&country contains gb
@@ -68,16 +71,16 @@ class wp_slimstat_reports {
68
  // - callback : function to use to render the report
69
  // - callback_args : parameters to pass to the function
70
  // - classes : determine the look and feel of this report ( tall, normal, wide, hidden )
71
- // - screens : where should the report appear ( wp-slim-view-1, .., wp-slim-view-4, dashboard )
72
  // - tooltip : contextual help to be displayed on hover
73
 
74
- $chart_tooltip = '<strong>' . __( 'Chart controls', 'wp-slimstat' ) . '</strong><ul><li>' . __( 'Use your mouse wheel to zoom in and out', 'wp-slimstat' ) . '</li><li>' . __( 'While zooming in, drag the chart to move to a different area', 'wp-slimstat' ) . '</li><li>' . __( 'Double click on an empty region to reset the zoom level', 'wp-slimstat' ) . '</li></ul>';
75
  self::$reports_info = array(
76
  'slim_getsocial' => array(
77
- 'title' => __( 'Social Sharing Analytics <a href="http://getsocial.io/?utm_source=slimstat">powered by GetSocial</a>', 'wp-slimstat' ),
78
  'callback' => array( __CLASS__, 'show_getsocial' ),
79
  'classes' => array( 'full-width' ),
80
- 'screens' => array( 'wp-slim-view-4' )
81
  ),
82
 
83
  'slim_p7_02' => array(
@@ -89,7 +92,7 @@ class wp_slimstat_reports {
89
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
90
  ),
91
  'classes' => array( 'full-width', 'tall' ),
92
- 'screens' => array( 'wp-slim-view-1', 'dashboard' ),
93
  'tooltip' => __( 'Color codes', 'wp-slimstat' ).'</strong><p><span class="little-color-box is-search-engine"></span> '.__( 'From search result page', 'wp-slimstat' ).'</p><p><span class="little-color-box is-known-visitor"></span> '.__( 'Known Visitor', 'wp-slimstat' ).'</p><p><span class="little-color-box is-known-user"></span> '.__( 'Known Users', 'wp-slimstat' ).'</p><p><span class="little-color-box is-direct"></span> '.__( 'Other Humans', 'wp-slimstat' ).'</p><p><span class="little-color-box"></span> '.__( 'Bot or Crawler', 'wp-slimstat' ).'</p>'
94
  ),
95
 
@@ -97,21 +100,20 @@ class wp_slimstat_reports {
97
  'title' => __( 'Pageviews', 'wp-slimstat' ),
98
  'callback' => array( __CLASS__, 'show_chart' ),
99
  'callback_args' => array(
100
- 'type' => 'p1_01'
101
  ),
102
  'classes' => array( 'wide', 'chart' ),
103
- 'screens' => array( 'wp-slim-view-2', 'dashboard' ),
104
  'tooltip' => $chart_tooltip
105
  ),
106
  'slim_p1_02' => array(
107
  'title' => __( 'About Slimstat', 'wp-slimstat' ),
108
- //'callback' => array( __CLASS__, 'show_about_wpslimstat' ),
109
  'callback' => array( __CLASS__, 'raw_results_to_html' ),
110
  'callback_args' => array(
111
  'raw' => array( __CLASS__, 'get_about_wpslimstat' )
112
  ),
113
  'classes' => array( 'normal', 'hidden' ),
114
- 'screens' => array( 'wp-slim-view-2' )
115
  ),
116
  'slim_p1_03' => array(
117
  'title' => __( 'Traffic at a Glance', 'wp-slimstat' ),
@@ -121,7 +123,7 @@ class wp_slimstat_reports {
121
  'raw' => array( __CLASS__, 'get_overview_summary' )
122
  ),
123
  'classes' => array( 'normal' ),
124
- 'screens' => array( 'wp-slim-view-2', 'dashboard' )
125
  ),
126
  'slim_p1_04' => array(
127
  'title' => __( 'Currently Online', 'wp-slimstat' ),
@@ -134,7 +136,7 @@ class wp_slimstat_reports {
134
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
135
  ),
136
  'classes' => array( 'normal' ),
137
- 'screens' => array( 'wp-slim-view-2', 'dashboard' )
138
  ),
139
  'slim_p1_06' => array(
140
  'title' => __( 'Recent Search Terms', 'wp-slimstat' ),
@@ -146,11 +148,11 @@ class wp_slimstat_reports {
146
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
147
  ),
148
  'classes' => array( 'normal' ),
149
- 'screens' => array( 'wp-slim-view-2', 'wp-slim-view-5' ),
150
  'tooltip' => __( 'Keywords used by your visitors to find your website on a search engine.', 'wp-slimstat' )
151
  ),
152
  'slim_p1_08' => array(
153
- 'title' => __( 'Top Pages', 'wp-slimstat' ),
154
  'callback' => array( __CLASS__, 'raw_results_to_html' ),
155
  'callback_args' => array(
156
  'type' => 'top',
@@ -160,8 +162,8 @@ class wp_slimstat_reports {
160
  'raw' => array( 'wp_slimstat_db', 'get_top' )
161
  ),
162
  'classes' => array( 'normal' ),
163
- 'screens' => array( 'wp-slim-view-2', 'dashboard' ),
164
- 'tooltip' => __( 'Here a "page" is not just a WordPress page type, but any web page on your website, including posts, products, categories, and so on.', 'wp-slimstat' )
165
  ),
166
  'slim_p1_10' => array(
167
  'title' => __('Top Traffic Sources', 'wp-slimstat'),
@@ -173,7 +175,7 @@ class wp_slimstat_reports {
173
  'raw' => array( 'wp_slimstat_db', 'get_top' )
174
  ),
175
  'classes' => array( 'normal' ),
176
- 'screens' => array( 'wp-slim-view-2', 'wp-slim-view-5', 'dashboard' )
177
  ),
178
  'slim_p1_11' => array(
179
  'title' => __( 'Top Known Visitors', 'wp-slimstat' ),
@@ -184,7 +186,7 @@ class wp_slimstat_reports {
184
  'raw' => array( 'wp_slimstat_db', 'get_top' )
185
  ),
186
  'classes' => array( 'normal', 'hidden' ),
187
- 'screens' => array( 'wp-slim-view-2', 'dashboard' )
188
  ),
189
  'slim_p1_12' => array(
190
  'title' => __( 'Top Search Terms', 'wp-slimstat' ),
@@ -195,7 +197,7 @@ class wp_slimstat_reports {
195
  'raw' => array( 'wp_slimstat_db', 'get_top' )
196
  ),
197
  'classes' => array( 'normal' ),
198
- 'screens' => array( 'wp-slim-view-2', 'wp-slim-view-4', 'wp-slim-view-5', 'dashboard' )
199
  ),
200
  'slim_p1_13' => array(
201
  'title' => __( 'Top Countries', 'wp-slimstat' ),
@@ -206,14 +208,14 @@ class wp_slimstat_reports {
206
  'raw' => array( 'wp_slimstat_db', 'get_top' )
207
  ),
208
  'classes' => array( 'normal', 'hidden' ),
209
- 'screens' => array( 'wp-slim-view-2', 'wp-slim-view-3', 'wp-slim-view-5', 'dashboard' ),
210
  'tooltip' => __( 'You can configure Slimstat to ignore a specific Country by setting the corresponding filter under Settings > Slimstat > Filters.', 'wp-slimstat' )
211
  ),
212
  'slim_p1_15' => array(
213
  'title' => __( 'Rankings', 'wp-slimstat' ),
214
  'callback' => array( __CLASS__, 'show_rankings' ),
215
  'classes' => array( 'normal' ),
216
- 'screens' => array( 'wp-slim-view-2' ),
217
  'tooltip' => __( "Slimstat retrieves live information from Alexa, Facebook and Google, to measures your site's rankings. Values are updated every 12 hours. Filters set above don't apply to this report.", 'wp-slimstat' )
218
  ),
219
  'slim_p1_17' => array(
@@ -227,7 +229,7 @@ class wp_slimstat_reports {
227
  'raw' => array( 'wp_slimstat_db', 'get_top' )
228
  ),
229
  'classes' => array( 'normal', 'hidden' ),
230
- 'screens' => array( 'wp-slim-view-3' )
231
  ),
232
  'slim_p1_18' => array(
233
  'title' => __( 'Users Currently Online', 'wp-slimstat' ),
@@ -240,7 +242,7 @@ class wp_slimstat_reports {
240
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
241
  ),
242
  'classes' => array( 'normal', 'hidden' ),
243
- 'screens' => array( 'wp-slim-view-2', 'dashboard' ),
244
  'tooltip' => __( 'When visitors leave a comment on your blog, WordPress assigns them a cookie. Slimstat leverages this information to identify returning visitors. Please note that visitors also include registered users.', 'wp-slimstat' )
245
  ),
246
 
@@ -248,10 +250,10 @@ class wp_slimstat_reports {
248
  'title' => __( 'Human Visits', 'wp-slimstat' ),
249
  'callback' => array( __CLASS__, 'show_chart' ),
250
  'callback_args' => array(
251
- 'type' => 'p2_01'
252
  ),
253
  'classes' => array( 'wide', 'chart' ),
254
- 'screens' => array( 'wp-slim-view-3' ),
255
  'tooltip' => $chart_tooltip
256
  ),
257
  'slim_p2_02' => array(
@@ -261,7 +263,7 @@ class wp_slimstat_reports {
261
  'raw' => array( __CLASS__, 'get_visitors_summary' )
262
  ),
263
  'classes' => array( 'normal' ),
264
- 'screens' => array( 'wp-slim-view-3', 'dashboard' ),
265
  'tooltip' => __( 'Where not otherwise specified, the metrics in this report are referred to human visitors.', 'wp-slimstat' )
266
  ),
267
  'slim_p2_03' => array(
@@ -273,7 +275,7 @@ class wp_slimstat_reports {
273
  'raw' => array( 'wp_slimstat_db', 'get_top' )
274
  ),
275
  'classes' => array( 'normal' ),
276
- 'screens' => array( 'wp-slim-view-3' )
277
  ),
278
  'slim_p2_04' => array(
279
  'title' => __( 'Top Browsers', 'wp-slimstat' ),
@@ -284,7 +286,7 @@ class wp_slimstat_reports {
284
  'raw' => array( 'wp_slimstat_db', 'get_top' )
285
  ),
286
  'classes' => array( 'normal' ),
287
- 'screens' => array( 'wp-slim-view-3', 'dashboard' )
288
  ),
289
  'slim_p2_05' => array(
290
  'title' => __( 'Top Service Providers', 'wp-slimstat' ),
@@ -295,7 +297,7 @@ class wp_slimstat_reports {
295
  'raw' => array( 'wp_slimstat_db', 'get_top' )
296
  ),
297
  'classes' => array( 'wide', 'hidden' ),
298
- 'screens' => array( 'wp-slim-view-3' ),
299
  'tooltip' => __( 'Internet Service Provider: a company which provides other companies or individuals with access to the Internet. Your DSL or cable internet service is provided to you by your ISP.<br><br>You can ignore specific IP addresses by setting the corresponding filter under Settings > Slimstat > Filters.', 'wp-slimstat' )
300
  ),
301
  'slim_p2_06' => array(
@@ -307,7 +309,7 @@ class wp_slimstat_reports {
307
  'raw' => array( 'wp_slimstat_db', 'get_top' )
308
  ),
309
  'classes' => array( 'normal', 'hidden' ),
310
- 'screens' => array( 'wp-slim-view-3' ),
311
  'tooltip' => __( 'Internet Service Provider: a company which provides other companies or individuals with access to the Internet. Your DSL or cable internet service is provided to you by your ISP.<br><br>You can ignore specific IP addresses by setting the corresponding filter under Settings > Slimstat > Filters.', 'wp-slimstat' )
312
  ),
313
  'slim_p2_07' => array(
@@ -319,7 +321,7 @@ class wp_slimstat_reports {
319
  'raw' => array( 'wp_slimstat_db', 'get_top' )
320
  ),
321
  'classes' => array( 'normal' ),
322
- 'screens' => array( 'wp-slim-view-3', 'dashboard' )
323
  ),
324
  'slim_p2_08' => array(
325
  'title' => __( 'Top Viewport Sizes', 'wp-slimstat' ),
@@ -330,7 +332,7 @@ class wp_slimstat_reports {
330
  'raw' => array( 'wp_slimstat_db', 'get_top' )
331
  ),
332
  'classes' => array( 'normal', 'hidden' ),
333
- 'screens' => array( 'wp-slim-view-3' )
334
  ),
335
  'slim_p2_09' => array(
336
  'title' => __( 'Browser Capabilities', 'wp-slimstat' ),
@@ -339,7 +341,7 @@ class wp_slimstat_reports {
339
  'raw' => array( __CLASS__, 'get_plugins' )
340
  ),
341
  'classes' => array( 'normal', 'hidden' ),
342
- 'screens' => array( 'wp-slim-view-3' )
343
  ),
344
  'slim_p2_12' => array(
345
  'title' => __( 'Visit Duration', 'wp-slimstat' ),
@@ -348,7 +350,7 @@ class wp_slimstat_reports {
348
  'raw' => array( __CLASS__, 'get_visits_duration' )
349
  ),
350
  'classes' => array( 'normal', 'hidden' ),
351
- 'screens' => array( 'wp-slim-view-3' ),
352
  'tooltip' => __( 'All values represent the percentages of pageviews within the corresponding time range.', 'wp-slimstat' )
353
  ),
354
  'slim_p2_13' => array(
@@ -360,7 +362,7 @@ class wp_slimstat_reports {
360
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
361
  ),
362
  'classes' => array( 'normal', 'hidden' ),
363
- 'screens' => array( 'wp-slim-view-3', 'wp-slim-view-5' )
364
  ),
365
  'slim_p2_14' => array(
366
  'title' => __( 'Recent Viewport Sizes', 'wp-slimstat' ),
@@ -371,7 +373,7 @@ class wp_slimstat_reports {
371
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
372
  ),
373
  'classes' => array( 'normal', 'hidden' ),
374
- 'screens' => array( 'wp-slim-view-3' )
375
  ),
376
  'slim_p2_15' => array(
377
  'title' => __( 'Recent Operating Systems', 'wp-slimstat' ),
@@ -382,7 +384,7 @@ class wp_slimstat_reports {
382
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
383
  ),
384
  'classes' => array( 'normal', 'hidden' ),
385
- 'screens' => array( 'wp-slim-view-3' )
386
  ),
387
  'slim_p2_16' => array(
388
  'title' => __( 'Recent Browsers', 'wp-slimstat' ),
@@ -393,7 +395,7 @@ class wp_slimstat_reports {
393
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
394
  ),
395
  'classes' => array( 'normal', 'hidden' ),
396
- 'screens' => array( 'wp-slim-view-3' )
397
  ),
398
  'slim_p2_17' => array(
399
  'title' => __( 'Recent Languages', 'wp-slimstat' ),
@@ -404,7 +406,7 @@ class wp_slimstat_reports {
404
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
405
  ),
406
  'classes' => array( 'normal', 'hidden' ),
407
- 'screens' => array( 'wp-slim-view-3' )
408
  ),
409
  'slim_p2_18' => array(
410
  'title' => __( 'Top Browser Families', 'wp-slimstat' ),
@@ -415,7 +417,7 @@ class wp_slimstat_reports {
415
  'raw' => array( 'wp_slimstat_db', 'get_top' )
416
  ),
417
  'classes' => array( 'normal', 'hidden' ),
418
- 'screens' => array( 'wp-slim-view-3' ),
419
  'tooltip' => __( 'This report shows you what user agent families (no version considered) are popular among your visitors.', 'wp-slimstat' )
420
  ),
421
  'slim_p2_19' => array(
@@ -429,7 +431,7 @@ class wp_slimstat_reports {
429
  'raw' => array( 'wp_slimstat_db', 'get_top' )
430
  ),
431
  'classes' => array( 'normal' ),
432
- 'screens' => array( 'wp-slim-view-3' ),
433
  'tooltip' => __( 'This report shows you what operating system families (no version considered) are popular among your visitors.', 'wp-slimstat' )
434
  ),
435
  'slim_p2_20' => array(
@@ -442,7 +444,7 @@ class wp_slimstat_reports {
442
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
443
  ),
444
  'classes' => array( 'normal' ),
445
- 'screens' => array( 'wp-slim-view-3' )
446
  ),
447
  'slim_p2_21' => array(
448
  'title' => __( 'Top Users', 'wp-slimstat' ),
@@ -454,17 +456,17 @@ class wp_slimstat_reports {
454
  'raw' => array( 'wp_slimstat_db', 'get_top' )
455
  ),
456
  'classes' => array( 'normal', 'hidden' ),
457
- 'screens' => array( 'wp-slim-view-3', 'dashboard' )
458
  ),
459
 
460
  'slim_p3_01' => array(
461
  'title' => __( 'Traffic Sources', 'wp-slimstat' ),
462
  'callback' => array( __CLASS__, 'show_chart' ),
463
  'callback_args' => array(
464
- 'type' => 'p3_01'
465
  ),
466
  'classes' => array( 'wide', 'chart' ),
467
- 'screens' => array( 'wp-slim-view-5' ),
468
  'tooltip' => $chart_tooltip
469
  ),
470
  'slim_p3_02' => array(
@@ -474,7 +476,7 @@ class wp_slimstat_reports {
474
  'raw' => array( __CLASS__, 'get_traffic_sources_summary' )
475
  ),
476
  'classes' => array( 'normal' ),
477
- 'screens' => array( 'wp-slim-view-5' )
478
  ),
479
  'slim_p3_06' => array(
480
  'title' => __( 'Top Referring Search Engines', 'wp-slimstat' ),
@@ -486,7 +488,7 @@ class wp_slimstat_reports {
486
  'raw' => array( 'wp_slimstat_db', 'get_top' )
487
  ),
488
  'classes' => array( 'normal' ),
489
- 'screens' => array( 'wp-slim-view-5', 'dashboard' )
490
  ),
491
 
492
  /*
@@ -499,7 +501,7 @@ class wp_slimstat_reports {
499
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
500
  ),
501
  'classes' => array( 'normal' ),
502
- 'screens' => array( 'wp-slim-view-5' )
503
  ),
504
  */
505
 
@@ -512,7 +514,7 @@ class wp_slimstat_reports {
512
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
513
  ),
514
  'classes' => array( 'wide' ),
515
- 'screens' => array( 'wp-slim-view-4' ),
516
  'tooltip' => ''
517
  ),
518
  'slim_p4_02' => array(
@@ -525,7 +527,7 @@ class wp_slimstat_reports {
525
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
526
  ),
527
  'classes' => array( 'normal' ),
528
- 'screens' => array( 'wp-slim-view-4' )
529
  ),
530
  /*
531
  'slim_p4_03' => array(
@@ -539,7 +541,7 @@ class wp_slimstat_reports {
539
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
540
  ),
541
  'classes' => array( 'normal', 'hidden' ),
542
- 'screens' => array( 'wp-slim-view-4' ),
543
  'tooltip' => __( 'A <em>bounce page</em> is a single-page visit, or visit in which the person left your site from the entrance (landing) page.', 'wp-slimstat' )
544
  ),
545
  */
@@ -553,7 +555,7 @@ class wp_slimstat_reports {
553
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
554
  ),
555
  'classes' => array( 'normal', 'hidden' ),
556
- 'screens' => array( 'wp-slim-view-4' )
557
  ),
558
  'slim_p4_05' => array(
559
  'title' => __( 'Recent Pages Not Found', 'wp-slimstat' ),
@@ -565,7 +567,7 @@ class wp_slimstat_reports {
565
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
566
  ),
567
  'classes' => array( 'normal' ),
568
- 'screens' => array( 'wp-slim-view-4' )
569
  ),
570
  'slim_p4_06' => array(
571
  'title' => __( 'Recent Internal Searches', 'wp-slimstat' ),
@@ -577,7 +579,7 @@ class wp_slimstat_reports {
577
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
578
  ),
579
  'classes' => array( 'normal', 'hidden' ),
580
- 'screens' => array( 'wp-slim-view-4' ),
581
  'tooltip' => __( "Searches performed using WordPress' built-in search functionality.", 'wp-slimstat' )
582
  ),
583
  'slim_p4_07' => array(
@@ -590,7 +592,7 @@ class wp_slimstat_reports {
590
  'raw' => array( 'wp_slimstat_db', 'get_top' )
591
  ),
592
  'classes' => array( 'normal' ),
593
- 'screens' => array( 'wp-slim-view-4', 'dashboard' )
594
  ),
595
 
596
  'slim_p4_09' => array(
@@ -604,7 +606,7 @@ class wp_slimstat_reports {
604
  'criteria' => 'swap'
605
  ),
606
  'classes' => array( 'wide', 'hidden' ),
607
- 'screens' => array( 'wp-slim-view-4' ),
608
  'tooltip' => __( 'You can configure Slimstat to track specific file extensions as downloads.', 'wp-slimstat' )
609
  ),
610
  'slim_p4_10' => array(
@@ -616,7 +618,7 @@ class wp_slimstat_reports {
616
  'raw' => array( 'wp_slimstat_db', 'get_recent_events' )
617
  ),
618
  'classes' => array( 'normal', 'hidden' ),
619
- 'screens' => array( 'wp-slim-view-4' ),
620
  'tooltip' => __( 'This report lists any <em>event</em> occurred on your website. Please refer to the FAQ for more information on how to use this functionality.', 'wp-slimstat' )
621
  ),
622
  'slim_p4_11' => array(
@@ -629,7 +631,7 @@ class wp_slimstat_reports {
629
  'raw' => array( 'wp_slimstat_db', 'get_top' )
630
  ),
631
  'classes' => array( 'normal' ),
632
- 'screens' => array( 'wp-slim-view-4' )
633
  ),
634
  'slim_p4_12' => array(
635
  'title' => __( 'Top Events', 'wp-slimstat' ),
@@ -640,7 +642,7 @@ class wp_slimstat_reports {
640
  'raw' => array( 'wp_slimstat_db', 'get_top_events' )
641
  ),
642
  'classes' => array( 'normal', 'hidden' ),
643
- 'screens' => array( 'wp-slim-view-4' ),
644
  'tooltip' => __( 'This report lists any <em>event</em> occurred on your website. Please refer to the FAQ for more information on how to use this functionality.', 'wp-slimstat' )
645
  ),
646
  'slim_p4_13' => array(
@@ -653,7 +655,7 @@ class wp_slimstat_reports {
653
  'raw' => array( 'wp_slimstat_db', 'get_top' )
654
  ),
655
  'classes' => array( 'normal', 'hidden' ),
656
- 'screens' => array( 'wp-slim-view-4' )
657
  ),
658
  'slim_p4_15' => array(
659
  'title' => __( 'Recent Categories', 'wp-slimstat' ),
@@ -665,7 +667,7 @@ class wp_slimstat_reports {
665
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
666
  ),
667
  'classes' => array( 'normal', 'hidden' ),
668
- 'screens' => array( 'wp-slim-view-4' )
669
  ),
670
  'slim_p4_16' => array(
671
  'title' => __( 'Top Pages Not Found', 'wp-slimstat' ),
@@ -677,7 +679,7 @@ class wp_slimstat_reports {
677
  'raw' => array( 'wp_slimstat_db', 'get_top' )
678
  ),
679
  'classes' => array( 'normal' ),
680
- 'screens' => array( 'wp-slim-view-4' )
681
  ),
682
  'slim_p4_18' => array(
683
  'title' => __( 'Top Authors', 'wp-slimstat' ),
@@ -688,7 +690,7 @@ class wp_slimstat_reports {
688
  'raw' => array( 'wp_slimstat_db', 'get_top' )
689
  ),
690
  'classes' => array( 'normal' ),
691
- 'screens' => array( 'wp-slim-view-4', 'dashboard' )
692
  ),
693
  'slim_p4_19' => array(
694
  'title' => __( 'Top Tags', 'wp-slimstat' ),
@@ -700,7 +702,7 @@ class wp_slimstat_reports {
700
  'raw' => array( 'wp_slimstat_db', 'get_top' )
701
  ),
702
  'classes' => array( 'normal', 'hidden' ),
703
- 'screens' => array( 'wp-slim-view-4' )
704
  ),
705
  'slim_p4_20' => array(
706
  'title' => __( 'Recent Downloads', 'wp-slimstat' ),
@@ -712,7 +714,7 @@ class wp_slimstat_reports {
712
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
713
  ),
714
  'classes' => array( 'wide', 'hidden' ),
715
- 'screens' => array( 'wp-slim-view-4' )
716
  ),
717
  'slim_p4_21' => array(
718
  'title' => __( 'Top Outbound Links', 'wp-slimstat' ),
@@ -724,7 +726,7 @@ class wp_slimstat_reports {
724
  'criteria' => 'swap'
725
  ),
726
  'classes' => array( 'normal', 'hidden' ),
727
- 'screens' => array( 'wp-slim-view-4', 'dashboard' ),
728
  ),
729
  'slim_p4_22' => array(
730
  'title' => __( 'Your Website', 'wp-slimstat' ),
@@ -733,7 +735,7 @@ class wp_slimstat_reports {
733
  'raw' => array( __CLASS__, 'get_your_blog' )
734
  ),
735
  'classes' => array( 'normal', 'hidden' ),
736
- 'screens' => array( 'wp-slim-view-4' ),
737
  'tooltip' => __( 'Your content at a glance: posts, comments, pingbacks, etc. Please note that this report is not affected by the filters set here above.', 'wp-slimstat' )
738
  ),
739
  'slim_p4_23' => array(
@@ -747,7 +749,7 @@ class wp_slimstat_reports {
747
  'raw' => array( 'wp_slimstat_db', 'get_top' )
748
  ),
749
  'classes' => array( 'normal', 'hidden' ),
750
- 'screens' => array( 'wp-slim-view-4' )
751
  ),
752
  'slim_p4_24' => array(
753
  'title' => __( 'Top Exit Pages', 'wp-slimstat' ),
@@ -760,7 +762,7 @@ class wp_slimstat_reports {
760
  'raw' => array( 'wp_slimstat_db', 'get_top_aggr' )
761
  ),
762
  'classes' => array( 'normal', 'hidden' ),
763
- 'screens' => array( 'wp-slim-view-4', 'dashboard' )
764
  ),
765
  'slim_p4_25' => array(
766
  'title' => __( 'Top Entry Pages', 'wp-slimstat' ),
@@ -773,14 +775,14 @@ class wp_slimstat_reports {
773
  'raw' => array( 'wp_slimstat_db', 'get_top_aggr' )
774
  ),
775
  'classes' => array( 'normal', 'hidden' ),
776
- 'screens' => array( 'wp-slim-view-4' )
777
  ),
778
 
779
  'slim_p6_01' => array(
780
  'title' => __( 'World Map', 'wp-slimstat' ),
781
  'callback' => array( __CLASS__, 'show_world_map' ),
782
  'classes' => array( 'full-width tall' ),
783
- 'screens' => array( 'wp-slim-view-6' ),
784
  'tooltip' => ''
785
  )
786
  );
@@ -805,26 +807,34 @@ class wp_slimstat_reports {
805
  );
806
 
807
  // Retrieve this user's list of active reports,
808
- $user = wp_get_current_user();
809
  $page_location = ( wp_slimstat::$options[ 'use_separate_menu' ] == 'yes' ) ? 'slimstat' : 'admin';
810
 
811
  // Do this only if we are in one of our screens (no dashboard!)
812
- if ( !empty( $_REQUEST['page'] ) && strpos( $_REQUEST['page'], 'wp-slim-view' ) !== false ) {
813
- $user_reports = get_user_option( "meta-box-order_{$page_location}_page_{$_REQUEST['page']}", $user->ID );
814
-
 
815
  // If this list is not empty, we rearrange the order of our reports
816
- if ( !empty( $user_reports[ 0 ] ) ) {
817
- $user_reports = array_flip( explode( ',', $user_reports[ 0 ] ) );
818
- self::$reports_info = array_intersect_key( array_merge( $user_reports, self::$reports_info ), $user_reports );
 
 
 
 
 
 
 
819
  }
820
 
821
  // Remove deprecated reports
822
  self::$reports_info = array_diff_key( self::$reports_info, $deprecated_reports );
823
 
824
- $hidden_reports = get_user_option( "metaboxhidden_{$page_location}_page_{$_REQUEST['page']}", $user->ID );
825
 
826
  // If this list is not empty, use it instead of the predefined visibility
827
- if ( !empty( $hidden_reports ) && is_array( $hidden_reports ) ) {
828
  foreach ( self::$reports_info as $a_report_id => $a_report_info ) {
829
  if ( in_array( $a_report_id, $hidden_reports ) ) {
830
  if ( is_array( self::$reports_info[ $a_report_id ][ 'classes' ] ) && !in_array( 'hidden', $a_report_info[ 'classes' ] ) ) {
@@ -838,7 +848,7 @@ class wp_slimstat_reports {
838
  }
839
  }
840
  // If we are on the WP Dashboard page, all the reports are 'visible': WP will take care of honoring the Screen Options settings for that page
841
- else {
842
  foreach ( self::$reports_info as $a_report_id => $a_report_info ) {
843
  if ( is_array( self::$reports_info[ $a_report_id ][ 'classes' ] ) ) {
844
  self::$reports_info[ $a_report_id ][ 'classes' ] = array_diff( self::$reports_info[ $a_report_id ][ 'classes' ], array( 'hidden' ) );
@@ -853,7 +863,7 @@ class wp_slimstat_reports {
853
  $header_buttons = '<div class="slimstat-header-buttons">'.apply_filters('slimstat_report_header_buttons', '<a class="button-ajax refresh slimstat-font-arrows-cw" title="'.__('Refresh','wp-slimstat').'" href="'.self::fs_url().'"></a>', $_report_id).'</div>';
854
  $header_tooltip = !empty( self::$reports_info[ $_report_id ][ 'tooltip' ] ) ? "<i class='slimstat-tooltip-trigger corner'></i><span class='slimstat-tooltip-content'>".self::$reports_info[ $_report_id ][ 'tooltip' ]."</span>" : '';
855
 
856
- echo "<div class='postbox $header_classes' id='$_report_id'>$header_buttons<h3 class='hndle'>".self::$reports_info[ $_report_id ][ 'title' ]." $header_tooltip</h3><div class='inside' id='{$_report_id}_inside'>";
857
  }
858
 
859
  public static function report_footer(){
@@ -1120,17 +1130,17 @@ class wp_slimstat_reports {
1120
  wp_slimstat_db::$debug_message = '';
1121
 
1122
  switch ( $_args[ 'type' ] ) {
1123
- case 'p1_01':
1124
  $chart_data = wp_slimstat_db::get_data_for_chart( 'COUNT(ip)', 'COUNT(DISTINCT(ip))' );
1125
  $chart_labels = array( __( 'Pageviews', 'wp-slimstat' ), __( 'Unique IPs', 'wp-slimstat' ) );
1126
  break;
1127
 
1128
- case 'p2_01':
1129
  $chart_data = wp_slimstat_db::get_data_for_chart( 'COUNT(DISTINCT visit_id)', 'COUNT(DISTINCT ip)', '(visit_id > 0 AND browser_type <> 1)' );
1130
  $chart_labels = array( __( 'Visits', 'wp-slimstat' ), __( 'Unique IPs', 'wp-slimstat' ) );
1131
  break;
1132
 
1133
- case 'p3_01':
1134
  $chart_data = wp_slimstat_db::get_data_for_chart( 'COUNT(DISTINCT(referer))', 'COUNT(DISTINCT(ip))', '(referer IS NOT NULL AND referer NOT LIKE "%' . home_url() . '%")' );
1135
  $chart_labels = array( __( 'Domains', 'wp-slimstat' ), __( 'Unique IPs', 'wp-slimstat' ) );
1136
  break;
@@ -1143,12 +1153,12 @@ class wp_slimstat_reports {
1143
 
1144
  echo wp_slimstat_db::$debug_message;
1145
  ?>
1146
- <div id="chart-placeholder"></div><div id="chart-legend"></div>
1147
  <script type="text/javascript">
1148
- SlimStatAdmin.chart_data = [];
1149
 
1150
  <?php if ( !empty( $chart_data[ 'previous' ][ 'label' ] ) ) : ?>
1151
- SlimStatAdmin.chart_data.push({
1152
  label: '<?php echo $chart_labels[ 0 ] . ' ' . $chart_data[ 'previous' ][ 'label' ] ?>',
1153
  data: [<?php
1154
  $tmp_serialize = array();
@@ -1166,7 +1176,7 @@ class wp_slimstat_reports {
1166
  }
1167
  }
1168
  });
1169
- SlimStatAdmin.chart_data.push({
1170
  label: '<?php echo $chart_labels[ 1 ] . ' ' . $chart_data[ 'previous' ][ 'label' ] ?>',
1171
  data: [<?php
1172
  $tmp_serialize = array();
@@ -1186,7 +1196,7 @@ class wp_slimstat_reports {
1186
  });
1187
  <?php endif ?>
1188
 
1189
- SlimStatAdmin.chart_data.push({
1190
  label: '<?php echo $chart_labels[ 0 ] . ' ' . $chart_data[ 'current' ][ 'label' ] ?>',
1191
  data: [<?php
1192
  $tmp_serialize = array();
@@ -1204,7 +1214,7 @@ class wp_slimstat_reports {
1204
  }
1205
  }
1206
  });
1207
- SlimStatAdmin.chart_data.push({
1208
  label: '<?php echo $chart_labels[ 1 ] . ' ' . $chart_data[ 'current' ][ 'label' ] ?>',
1209
  data: [<?php
1210
  $tmp_serialize = array();
@@ -1812,7 +1822,7 @@ class wp_slimstat_reports {
1812
  }
1813
 
1814
  if (!empty($_searchterms)){
1815
- $search_terms_info = htmlentities($_searchterms, ENT_QUOTES, 'UTF-8').'<a class="slimstat-font-logout" target="_blank" title="'.htmlentities(__('Go to the referring page','wp-slimstat'), ENT_QUOTES, 'UTF-8').'" href="'.$_referer.'"></a>';
1816
  $search_terms_info = "$search_terms_info $query_details";
1817
  }
1818
  return $search_terms_info;
@@ -1852,7 +1862,7 @@ class wp_slimstat_reports {
1852
 
1853
  // Allow only legitimate requests
1854
  $request_uri = $_SERVER['REQUEST_URI'];
1855
- $request_page = 'wp-slim-view-1';
1856
 
1857
  // Are we on the Dashboard?
1858
  if ( empty( $_REQUEST[ 'page' ] ) ) {
@@ -1981,9 +1991,9 @@ class wp_slimstat_reports {
1981
  }
1982
 
1983
  // Honor the 'hidden' attribute, but not on the WP Dashboard ( empty( $_args[ 'id' ] ) )
1984
- if ( empty( $report_id ) || in_array( 'hidden', self::$reports_info[ $report_id ][ 'classes' ] ) ) {
1985
- return array();
1986
- }
1987
 
1988
  if ( !empty( self::$reports_info[ $report_id ] ) && is_array( self::$reports_info[ $report_id ] ) ) {
1989
  // Default values
5
  // Structures to store all the information about what screens and reports are available
6
  public static $screens_info = array();
7
  public static $reports_info = array();
8
+ public static $user_reports = array();
9
 
10
  // Hidden filters are not displayed to the user, but are applied to the reports
11
  public static $hidden_filters = array();
18
  */
19
  public static function init(){
20
  self::$screens_info = array(
21
+ 'slimview1' => __( 'Access Log', 'wp-slimstat' ),
22
+ 'slimview2' => __( 'Overview', 'wp-slimstat' ),
23
+ 'slimview3' => __( 'Audience', 'wp-slimstat' ),
24
+ 'slimview4' => __( 'Site Analysis', 'wp-slimstat' ),
25
+ 'slimview5' => __( 'Traffic Sources', 'wp-slimstat' ),
26
+ 'slimview6' => __( 'Geolocation', 'wp-slimstat' ),
27
+ 'dashboard' => __( 'WordPress Dashboard', 'wp-slimstat' ),
28
+ 'inactive' => __( 'Inactive Reports')
29
  );
30
 
31
  // Filters use the following format: browser equals Firefox&&&country contains gb
71
  // - callback : function to use to render the report
72
  // - callback_args : parameters to pass to the function
73
  // - classes : determine the look and feel of this report ( tall, normal, wide, hidden )
74
+ // - screens : where should the report appear ( slimview1, .., slimview4, dashboard )
75
  // - tooltip : contextual help to be displayed on hover
76
 
77
+ $chart_tooltip = '<strong>' . __( 'Chart controls', 'wp-slimstat' ) . '</strong><ul><li>' . __( 'Use your mouse wheel to zoom in and out', 'wp-slimstat' ) . '</li><li>' . __( 'While zooming in, drag the chart to move to a different area', 'wp-slimstat' ) . '</li></ul>';
78
  self::$reports_info = array(
79
  'slim_getsocial' => array(
80
+ 'title' => __( 'Social Sharing Analytics', 'wp-slimstat' ),
81
  'callback' => array( __CLASS__, 'show_getsocial' ),
82
  'classes' => array( 'full-width' ),
83
+ 'screens' => array( 'slimview4' )
84
  ),
85
 
86
  'slim_p7_02' => array(
92
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
93
  ),
94
  'classes' => array( 'full-width', 'tall' ),
95
+ 'screens' => array( 'slimview1', 'dashboard' ),
96
  'tooltip' => __( 'Color codes', 'wp-slimstat' ).'</strong><p><span class="little-color-box is-search-engine"></span> '.__( 'From search result page', 'wp-slimstat' ).'</p><p><span class="little-color-box is-known-visitor"></span> '.__( 'Known Visitor', 'wp-slimstat' ).'</p><p><span class="little-color-box is-known-user"></span> '.__( 'Known Users', 'wp-slimstat' ).'</p><p><span class="little-color-box is-direct"></span> '.__( 'Other Humans', 'wp-slimstat' ).'</p><p><span class="little-color-box"></span> '.__( 'Bot or Crawler', 'wp-slimstat' ).'</p>'
97
  ),
98
 
100
  'title' => __( 'Pageviews', 'wp-slimstat' ),
101
  'callback' => array( __CLASS__, 'show_chart' ),
102
  'callback_args' => array(
103
+ 'type' => 'slim_p1_01'
104
  ),
105
  'classes' => array( 'wide', 'chart' ),
106
+ 'screens' => array( 'slimview2', 'dashboard' ),
107
  'tooltip' => $chart_tooltip
108
  ),
109
  'slim_p1_02' => array(
110
  'title' => __( 'About Slimstat', 'wp-slimstat' ),
 
111
  'callback' => array( __CLASS__, 'raw_results_to_html' ),
112
  'callback_args' => array(
113
  'raw' => array( __CLASS__, 'get_about_wpslimstat' )
114
  ),
115
  'classes' => array( 'normal', 'hidden' ),
116
+ 'screens' => array( 'slimview2' )
117
  ),
118
  'slim_p1_03' => array(
119
  'title' => __( 'Traffic at a Glance', 'wp-slimstat' ),
123
  'raw' => array( __CLASS__, 'get_overview_summary' )
124
  ),
125
  'classes' => array( 'normal' ),
126
+ 'screens' => array( 'slimview2', 'dashboard' )
127
  ),
128
  'slim_p1_04' => array(
129
  'title' => __( 'Currently Online', 'wp-slimstat' ),
136
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
137
  ),
138
  'classes' => array( 'normal' ),
139
+ 'screens' => array( 'slimview2', 'dashboard' )
140
  ),
141
  'slim_p1_06' => array(
142
  'title' => __( 'Recent Search Terms', 'wp-slimstat' ),
148
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
149
  ),
150
  'classes' => array( 'normal' ),
151
+ 'screens' => array( 'slimview2', 'slimview5' ),
152
  'tooltip' => __( 'Keywords used by your visitors to find your website on a search engine.', 'wp-slimstat' )
153
  ),
154
  'slim_p1_08' => array(
155
+ 'title' => __( 'Top Web Pages', 'wp-slimstat' ),
156
  'callback' => array( __CLASS__, 'raw_results_to_html' ),
157
  'callback_args' => array(
158
  'type' => 'top',
162
  'raw' => array( 'wp_slimstat_db', 'get_top' )
163
  ),
164
  'classes' => array( 'normal' ),
165
+ 'screens' => array( 'slimview2', 'dashboard' ),
166
+ 'tooltip' => __( 'Here a "page" is not just a WordPress page type, but any webpage on your site, including posts, products, categories, and so on.', 'wp-slimstat' )
167
  ),
168
  'slim_p1_10' => array(
169
  'title' => __('Top Traffic Sources', 'wp-slimstat'),
175
  'raw' => array( 'wp_slimstat_db', 'get_top' )
176
  ),
177
  'classes' => array( 'normal' ),
178
+ 'screens' => array( 'slimview2', 'slimview5', 'dashboard' )
179
  ),
180
  'slim_p1_11' => array(
181
  'title' => __( 'Top Known Visitors', 'wp-slimstat' ),
186
  'raw' => array( 'wp_slimstat_db', 'get_top' )
187
  ),
188
  'classes' => array( 'normal', 'hidden' ),
189
+ 'screens' => array( 'slimview2', 'dashboard' )
190
  ),
191
  'slim_p1_12' => array(
192
  'title' => __( 'Top Search Terms', 'wp-slimstat' ),
197
  'raw' => array( 'wp_slimstat_db', 'get_top' )
198
  ),
199
  'classes' => array( 'normal' ),
200
+ 'screens' => array( 'slimview2', 'slimview4', 'slimview5', 'dashboard' )
201
  ),
202
  'slim_p1_13' => array(
203
  'title' => __( 'Top Countries', 'wp-slimstat' ),
208
  'raw' => array( 'wp_slimstat_db', 'get_top' )
209
  ),
210
  'classes' => array( 'normal', 'hidden' ),
211
+ 'screens' => array( 'slimview2', 'slimview3', 'slimview5', 'dashboard' ),
212
  'tooltip' => __( 'You can configure Slimstat to ignore a specific Country by setting the corresponding filter under Settings > Slimstat > Filters.', 'wp-slimstat' )
213
  ),
214
  'slim_p1_15' => array(
215
  'title' => __( 'Rankings', 'wp-slimstat' ),
216
  'callback' => array( __CLASS__, 'show_rankings' ),
217
  'classes' => array( 'normal' ),
218
+ 'screens' => array( 'slimview2' ),
219
  'tooltip' => __( "Slimstat retrieves live information from Alexa, Facebook and Google, to measures your site's rankings. Values are updated every 12 hours. Filters set above don't apply to this report.", 'wp-slimstat' )
220
  ),
221
  'slim_p1_17' => array(
229
  'raw' => array( 'wp_slimstat_db', 'get_top' )
230
  ),
231
  'classes' => array( 'normal', 'hidden' ),
232
+ 'screens' => array( 'slimview3' )
233
  ),
234
  'slim_p1_18' => array(
235
  'title' => __( 'Users Currently Online', 'wp-slimstat' ),
242
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
243
  ),
244
  'classes' => array( 'normal', 'hidden' ),
245
+ 'screens' => array( 'slimview2', 'dashboard' ),
246
  'tooltip' => __( 'When visitors leave a comment on your blog, WordPress assigns them a cookie. Slimstat leverages this information to identify returning visitors. Please note that visitors also include registered users.', 'wp-slimstat' )
247
  ),
248
 
250
  'title' => __( 'Human Visits', 'wp-slimstat' ),
251
  'callback' => array( __CLASS__, 'show_chart' ),
252
  'callback_args' => array(
253
+ 'type' => 'slim_p2_01'
254
  ),
255
  'classes' => array( 'wide', 'chart' ),
256
+ 'screens' => array( 'slimview3' ),
257
  'tooltip' => $chart_tooltip
258
  ),
259
  'slim_p2_02' => array(
263
  'raw' => array( __CLASS__, 'get_visitors_summary' )
264
  ),
265
  'classes' => array( 'normal' ),
266
+ 'screens' => array( 'slimview3', 'dashboard' ),
267
  'tooltip' => __( 'Where not otherwise specified, the metrics in this report are referred to human visitors.', 'wp-slimstat' )
268
  ),
269
  'slim_p2_03' => array(
275
  'raw' => array( 'wp_slimstat_db', 'get_top' )
276
  ),
277
  'classes' => array( 'normal' ),
278
+ 'screens' => array( 'slimview3' )
279
  ),
280
  'slim_p2_04' => array(
281
  'title' => __( 'Top Browsers', 'wp-slimstat' ),
286
  'raw' => array( 'wp_slimstat_db', 'get_top' )
287
  ),
288
  'classes' => array( 'normal' ),
289
+ 'screens' => array( 'slimview3', 'dashboard' )
290
  ),
291
  'slim_p2_05' => array(
292
  'title' => __( 'Top Service Providers', 'wp-slimstat' ),
297
  'raw' => array( 'wp_slimstat_db', 'get_top' )
298
  ),
299
  'classes' => array( 'wide', 'hidden' ),
300
+ 'screens' => array( 'slimview3' ),
301
  'tooltip' => __( 'Internet Service Provider: a company which provides other companies or individuals with access to the Internet. Your DSL or cable internet service is provided to you by your ISP.<br><br>You can ignore specific IP addresses by setting the corresponding filter under Settings > Slimstat > Filters.', 'wp-slimstat' )
302
  ),
303
  'slim_p2_06' => array(
309
  'raw' => array( 'wp_slimstat_db', 'get_top' )
310
  ),
311
  'classes' => array( 'normal', 'hidden' ),
312
+ 'screens' => array( 'slimview3' ),
313
  'tooltip' => __( 'Internet Service Provider: a company which provides other companies or individuals with access to the Internet. Your DSL or cable internet service is provided to you by your ISP.<br><br>You can ignore specific IP addresses by setting the corresponding filter under Settings > Slimstat > Filters.', 'wp-slimstat' )
314
  ),
315
  'slim_p2_07' => array(
321
  'raw' => array( 'wp_slimstat_db', 'get_top' )
322
  ),
323
  'classes' => array( 'normal' ),
324
+ 'screens' => array( 'slimview3', 'dashboard' )
325
  ),
326
  'slim_p2_08' => array(
327
  'title' => __( 'Top Viewport Sizes', 'wp-slimstat' ),
332
  'raw' => array( 'wp_slimstat_db', 'get_top' )
333
  ),
334
  'classes' => array( 'normal', 'hidden' ),
335
+ 'screens' => array( 'slimview3' )
336
  ),
337
  'slim_p2_09' => array(
338
  'title' => __( 'Browser Capabilities', 'wp-slimstat' ),
341
  'raw' => array( __CLASS__, 'get_plugins' )
342
  ),
343
  'classes' => array( 'normal', 'hidden' ),
344
+ 'screens' => array( 'slimview3' )
345
  ),
346
  'slim_p2_12' => array(
347
  'title' => __( 'Visit Duration', 'wp-slimstat' ),
350
  'raw' => array( __CLASS__, 'get_visits_duration' )
351
  ),
352
  'classes' => array( 'normal', 'hidden' ),
353
+ 'screens' => array( 'slimview3' ),
354
  'tooltip' => __( 'All values represent the percentages of pageviews within the corresponding time range.', 'wp-slimstat' )
355
  ),
356
  'slim_p2_13' => array(
362
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
363
  ),
364
  'classes' => array( 'normal', 'hidden' ),
365
+ 'screens' => array( 'slimview3', 'slimview5' )
366
  ),
367
  'slim_p2_14' => array(
368
  'title' => __( 'Recent Viewport Sizes', 'wp-slimstat' ),
373
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
374
  ),
375
  'classes' => array( 'normal', 'hidden' ),
376
+ 'screens' => array( 'slimview3' )
377
  ),
378
  'slim_p2_15' => array(
379
  'title' => __( 'Recent Operating Systems', 'wp-slimstat' ),
384
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
385
  ),
386
  'classes' => array( 'normal', 'hidden' ),
387
+ 'screens' => array( 'slimview3' )
388
  ),
389
  'slim_p2_16' => array(
390
  'title' => __( 'Recent Browsers', 'wp-slimstat' ),
395
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
396
  ),
397
  'classes' => array( 'normal', 'hidden' ),
398
+ 'screens' => array( 'slimview3' )
399
  ),
400
  'slim_p2_17' => array(
401
  'title' => __( 'Recent Languages', 'wp-slimstat' ),
406
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
407
  ),
408
  'classes' => array( 'normal', 'hidden' ),
409
+ 'screens' => array( 'slimview3' )
410
  ),
411
  'slim_p2_18' => array(
412
  'title' => __( 'Top Browser Families', 'wp-slimstat' ),
417
  'raw' => array( 'wp_slimstat_db', 'get_top' )
418
  ),
419
  'classes' => array( 'normal', 'hidden' ),
420
+ 'screens' => array( 'slimview3' ),
421
  'tooltip' => __( 'This report shows you what user agent families (no version considered) are popular among your visitors.', 'wp-slimstat' )
422
  ),
423
  'slim_p2_19' => array(
431
  'raw' => array( 'wp_slimstat_db', 'get_top' )
432
  ),
433
  'classes' => array( 'normal' ),
434
+ 'screens' => array( 'slimview3' ),
435
  'tooltip' => __( 'This report shows you what operating system families (no version considered) are popular among your visitors.', 'wp-slimstat' )
436
  ),
437
  'slim_p2_20' => array(
444
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
445
  ),
446
  'classes' => array( 'normal' ),
447
+ 'screens' => array( 'slimview3' )
448
  ),
449
  'slim_p2_21' => array(
450
  'title' => __( 'Top Users', 'wp-slimstat' ),
456
  'raw' => array( 'wp_slimstat_db', 'get_top' )
457
  ),
458
  'classes' => array( 'normal', 'hidden' ),
459
+ 'screens' => array( 'slimview3', 'dashboard' )
460
  ),
461
 
462
  'slim_p3_01' => array(
463
  'title' => __( 'Traffic Sources', 'wp-slimstat' ),
464
  'callback' => array( __CLASS__, 'show_chart' ),
465
  'callback_args' => array(
466
+ 'type' => 'slim_p3_01'
467
  ),
468
  'classes' => array( 'wide', 'chart' ),
469
+ 'screens' => array( 'slimview5' ),
470
  'tooltip' => $chart_tooltip
471
  ),
472
  'slim_p3_02' => array(
476
  'raw' => array( __CLASS__, 'get_traffic_sources_summary' )
477
  ),
478
  'classes' => array( 'normal' ),
479
+ 'screens' => array( 'slimview5' )
480
  ),
481
  'slim_p3_06' => array(
482
  'title' => __( 'Top Referring Search Engines', 'wp-slimstat' ),
488
  'raw' => array( 'wp_slimstat_db', 'get_top' )
489
  ),
490
  'classes' => array( 'normal' ),
491
+ 'screens' => array( 'slimview5', 'dashboard' )
492
  ),
493
 
494
  /*
501
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
502
  ),
503
  'classes' => array( 'normal' ),
504
+ 'screens' => array( 'slimview5' )
505
  ),
506
  */
507
 
514
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
515
  ),
516
  'classes' => array( 'wide' ),
517
+ 'screens' => array( 'slimview4' ),
518
  'tooltip' => ''
519
  ),
520
  'slim_p4_02' => array(
527
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
528
  ),
529
  'classes' => array( 'normal' ),
530
+ 'screens' => array( 'slimview4' )
531
  ),
532
  /*
533
  'slim_p4_03' => array(
541
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
542
  ),
543
  'classes' => array( 'normal', 'hidden' ),
544
+ 'screens' => array( 'slimview4' ),
545
  'tooltip' => __( 'A <em>bounce page</em> is a single-page visit, or visit in which the person left your site from the entrance (landing) page.', 'wp-slimstat' )
546
  ),
547
  */
555
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
556
  ),
557
  'classes' => array( 'normal', 'hidden' ),
558
+ 'screens' => array( 'slimview4' )
559
  ),
560
  'slim_p4_05' => array(
561
  'title' => __( 'Recent Pages Not Found', 'wp-slimstat' ),
567
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
568
  ),
569
  'classes' => array( 'normal' ),
570
+ 'screens' => array( 'slimview4' )
571
  ),
572
  'slim_p4_06' => array(
573
  'title' => __( 'Recent Internal Searches', 'wp-slimstat' ),
579
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
580
  ),
581
  'classes' => array( 'normal', 'hidden' ),
582
+ 'screens' => array( 'slimview4' ),
583
  'tooltip' => __( "Searches performed using WordPress' built-in search functionality.", 'wp-slimstat' )
584
  ),
585
  'slim_p4_07' => array(
592
  'raw' => array( 'wp_slimstat_db', 'get_top' )
593
  ),
594
  'classes' => array( 'normal' ),
595
+ 'screens' => array( 'slimview4', 'dashboard' )
596
  ),
597
 
598
  'slim_p4_09' => array(
606
  'criteria' => 'swap'
607
  ),
608
  'classes' => array( 'wide', 'hidden' ),
609
+ 'screens' => array( 'slimview4' ),
610
  'tooltip' => __( 'You can configure Slimstat to track specific file extensions as downloads.', 'wp-slimstat' )
611
  ),
612
  'slim_p4_10' => array(
618
  'raw' => array( 'wp_slimstat_db', 'get_recent_events' )
619
  ),
620
  'classes' => array( 'normal', 'hidden' ),
621
+ 'screens' => array( 'slimview4' ),
622
  'tooltip' => __( 'This report lists any <em>event</em> occurred on your website. Please refer to the FAQ for more information on how to use this functionality.', 'wp-slimstat' )
623
  ),
624
  'slim_p4_11' => array(
631
  'raw' => array( 'wp_slimstat_db', 'get_top' )
632
  ),
633
  'classes' => array( 'normal' ),
634
+ 'screens' => array( 'slimview4' )
635
  ),
636
  'slim_p4_12' => array(
637
  'title' => __( 'Top Events', 'wp-slimstat' ),
642
  'raw' => array( 'wp_slimstat_db', 'get_top_events' )
643
  ),
644
  'classes' => array( 'normal', 'hidden' ),
645
+ 'screens' => array( 'slimview4' ),
646
  'tooltip' => __( 'This report lists any <em>event</em> occurred on your website. Please refer to the FAQ for more information on how to use this functionality.', 'wp-slimstat' )
647
  ),
648
  'slim_p4_13' => array(
655
  'raw' => array( 'wp_slimstat_db', 'get_top' )
656
  ),
657
  'classes' => array( 'normal', 'hidden' ),
658
+ 'screens' => array( 'slimview4' )
659
  ),
660
  'slim_p4_15' => array(
661
  'title' => __( 'Recent Categories', 'wp-slimstat' ),
667
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
668
  ),
669
  'classes' => array( 'normal', 'hidden' ),
670
+ 'screens' => array( 'slimview4' )
671
  ),
672
  'slim_p4_16' => array(
673
  'title' => __( 'Top Pages Not Found', 'wp-slimstat' ),
679
  'raw' => array( 'wp_slimstat_db', 'get_top' )
680
  ),
681
  'classes' => array( 'normal' ),
682
+ 'screens' => array( 'slimview4' )
683
  ),
684
  'slim_p4_18' => array(
685
  'title' => __( 'Top Authors', 'wp-slimstat' ),
690
  'raw' => array( 'wp_slimstat_db', 'get_top' )
691
  ),
692
  'classes' => array( 'normal' ),
693
+ 'screens' => array( 'slimview4', 'dashboard' )
694
  ),
695
  'slim_p4_19' => array(
696
  'title' => __( 'Top Tags', 'wp-slimstat' ),
702
  'raw' => array( 'wp_slimstat_db', 'get_top' )
703
  ),
704
  'classes' => array( 'normal', 'hidden' ),
705
+ 'screens' => array( 'slimview4' )
706
  ),
707
  'slim_p4_20' => array(
708
  'title' => __( 'Recent Downloads', 'wp-slimstat' ),
714
  'raw' => array( 'wp_slimstat_db', 'get_recent' )
715
  ),
716
  'classes' => array( 'wide', 'hidden' ),
717
+ 'screens' => array( 'slimview4' )
718
  ),
719
  'slim_p4_21' => array(
720
  'title' => __( 'Top Outbound Links', 'wp-slimstat' ),
726
  'criteria' => 'swap'
727
  ),
728
  'classes' => array( 'normal', 'hidden' ),
729
+ 'screens' => array( 'slimview4', 'dashboard' ),
730
  ),
731
  'slim_p4_22' => array(
732
  'title' => __( 'Your Website', 'wp-slimstat' ),
735
  'raw' => array( __CLASS__, 'get_your_blog' )
736
  ),
737
  'classes' => array( 'normal', 'hidden' ),
738
+ 'screens' => array( 'slimview4' ),
739
  'tooltip' => __( 'Your content at a glance: posts, comments, pingbacks, etc. Please note that this report is not affected by the filters set here above.', 'wp-slimstat' )
740
  ),
741
  'slim_p4_23' => array(
749
  'raw' => array( 'wp_slimstat_db', 'get_top' )
750
  ),
751
  'classes' => array( 'normal', 'hidden' ),
752
+ 'screens' => array( 'slimview4' )
753
  ),
754
  'slim_p4_24' => array(
755
  'title' => __( 'Top Exit Pages', 'wp-slimstat' ),
762
  'raw' => array( 'wp_slimstat_db', 'get_top_aggr' )
763
  ),
764
  'classes' => array( 'normal', 'hidden' ),
765
+ 'screens' => array( 'slimview4', 'dashboard' )
766
  ),
767
  'slim_p4_25' => array(
768
  'title' => __( 'Top Entry Pages', 'wp-slimstat' ),
775
  'raw' => array( 'wp_slimstat_db', 'get_top_aggr' )
776
  ),
777
  'classes' => array( 'normal', 'hidden' ),
778
+ 'screens' => array( 'slimview4' )
779
  ),
780
 
781
  'slim_p6_01' => array(
782
  'title' => __( 'World Map', 'wp-slimstat' ),
783
  'callback' => array( __CLASS__, 'show_world_map' ),
784
  'classes' => array( 'full-width tall' ),
785
+ 'screens' => array( 'slimview6' ),
786
  'tooltip' => ''
787
  )
788
  );
807
  );
808
 
809
  // Retrieve this user's list of active reports,
810
+ $current_user = wp_get_current_user();
811
  $page_location = ( wp_slimstat::$options[ 'use_separate_menu' ] == 'yes' ) ? 'slimstat' : 'admin';
812
 
813
  // Do this only if we are in one of our screens (no dashboard!)
814
+ self::$user_reports = get_user_option( "meta-box-order_{$page_location}_page_slimlayout", $current_user->ID );
815
+
816
+ if ( !empty( $_REQUEST['page'] ) && strpos( $_REQUEST['page'], 'slimview' ) !== false ) {
817
+
818
  // If this list is not empty, we rearrange the order of our reports
819
+ if ( !empty( self::$user_reports[ $_REQUEST[ 'page' ] ] ) ) {
820
+ $user_reports_intersect = array_flip( explode( ',', self::$user_reports[ $_REQUEST[ 'page' ] ] ) );
821
+ self::$reports_info = array_intersect_key( array_merge( $user_reports_intersect, self::$reports_info ), $user_reports_intersect );
822
+ }
823
+ else {
824
+ foreach ( self::$reports_info as $a_report_id => $a_report_info ) {
825
+ if ( !in_array( $_REQUEST[ 'page' ], $a_report_info[ 'screens' ] ) ) {
826
+ unset( self::$reports_info[ $a_report_id ] );
827
+ }
828
+ }
829
  }
830
 
831
  // Remove deprecated reports
832
  self::$reports_info = array_diff_key( self::$reports_info, $deprecated_reports );
833
 
834
+ $hidden_reports = get_user_option( "metaboxhidden_{$page_location}_page_{$_REQUEST['page']}", $current_user->ID );
835
 
836
  // If this list is not empty, use it instead of the predefined visibility
837
+ if ( is_array( $hidden_reports ) ) {
838
  foreach ( self::$reports_info as $a_report_id => $a_report_info ) {
839
  if ( in_array( $a_report_id, $hidden_reports ) ) {
840
  if ( is_array( self::$reports_info[ $a_report_id ][ 'classes' ] ) && !in_array( 'hidden', $a_report_info[ 'classes' ] ) ) {
848
  }
849
  }
850
  // If we are on the WP Dashboard page, all the reports are 'visible': WP will take care of honoring the Screen Options settings for that page
851
+ else if ( !empty( $_REQUEST['page'] ) && strpos( $_REQUEST['page'], 'slimlayout' ) === false ) {
852
  foreach ( self::$reports_info as $a_report_id => $a_report_info ) {
853
  if ( is_array( self::$reports_info[ $a_report_id ][ 'classes' ] ) ) {
854
  self::$reports_info[ $a_report_id ][ 'classes' ] = array_diff( self::$reports_info[ $a_report_id ][ 'classes' ], array( 'hidden' ) );
863
  $header_buttons = '<div class="slimstat-header-buttons">'.apply_filters('slimstat_report_header_buttons', '<a class="button-ajax refresh slimstat-font-arrows-cw" title="'.__('Refresh','wp-slimstat').'" href="'.self::fs_url().'"></a>', $_report_id).'</div>';
864
  $header_tooltip = !empty( self::$reports_info[ $_report_id ][ 'tooltip' ] ) ? "<i class='slimstat-tooltip-trigger corner'></i><span class='slimstat-tooltip-content'>".self::$reports_info[ $_report_id ][ 'tooltip' ]."</span>" : '';
865
 
866
+ echo "<div class='postbox $header_classes' id='$_report_id'>$header_buttons<h3>".self::$reports_info[ $_report_id ][ 'title' ]." $header_tooltip</h3><div class='inside' id='{$_report_id}_inside'>";
867
  }
868
 
869
  public static function report_footer(){
1130
  wp_slimstat_db::$debug_message = '';
1131
 
1132
  switch ( $_args[ 'type' ] ) {
1133
+ case 'slim_p1_01':
1134
  $chart_data = wp_slimstat_db::get_data_for_chart( 'COUNT(ip)', 'COUNT(DISTINCT(ip))' );
1135
  $chart_labels = array( __( 'Pageviews', 'wp-slimstat' ), __( 'Unique IPs', 'wp-slimstat' ) );
1136
  break;
1137
 
1138
+ case 'slim_p2_01':
1139
  $chart_data = wp_slimstat_db::get_data_for_chart( 'COUNT(DISTINCT visit_id)', 'COUNT(DISTINCT ip)', '(visit_id > 0 AND browser_type <> 1)' );
1140
  $chart_labels = array( __( 'Visits', 'wp-slimstat' ), __( 'Unique IPs', 'wp-slimstat' ) );
1141
  break;
1142
 
1143
+ case 'slim_p3_01':
1144
  $chart_data = wp_slimstat_db::get_data_for_chart( 'COUNT(DISTINCT(referer))', 'COUNT(DISTINCT(ip))', '(referer IS NOT NULL AND referer NOT LIKE "%' . home_url() . '%")' );
1145
  $chart_labels = array( __( 'Domains', 'wp-slimstat' ), __( 'Unique IPs', 'wp-slimstat' ) );
1146
  break;
1153
 
1154
  echo wp_slimstat_db::$debug_message;
1155
  ?>
1156
+ <div class="chart-placeholder"></div><div class="chart-legend"></div>
1157
  <script type="text/javascript">
1158
+ SlimStatAdmin.chart_data[ '<?php echo $_args[ 'type' ] ?>' ] = [];
1159
 
1160
  <?php if ( !empty( $chart_data[ 'previous' ][ 'label' ] ) ) : ?>
1161
+ SlimStatAdmin.chart_data[ '<?php echo $_args[ 'type' ] ?>' ].push({
1162
  label: '<?php echo $chart_labels[ 0 ] . ' ' . $chart_data[ 'previous' ][ 'label' ] ?>',
1163
  data: [<?php
1164
  $tmp_serialize = array();
1176
  }
1177
  }
1178
  });
1179
+ SlimStatAdmin.chart_data[ '<?php echo $_args[ 'type' ] ?>' ].push({
1180
  label: '<?php echo $chart_labels[ 1 ] . ' ' . $chart_data[ 'previous' ][ 'label' ] ?>',
1181
  data: [<?php
1182
  $tmp_serialize = array();
1196
  });
1197
  <?php endif ?>
1198
 
1199
+ SlimStatAdmin.chart_data[ '<?php echo $_args[ 'type' ] ?>' ].push({
1200
  label: '<?php echo $chart_labels[ 0 ] . ' ' . $chart_data[ 'current' ][ 'label' ] ?>',
1201
  data: [<?php
1202
  $tmp_serialize = array();
1214
  }
1215
  }
1216
  });
1217
+ SlimStatAdmin.chart_data[ '<?php echo $_args[ 'type' ] ?>' ].push({
1218
  label: '<?php echo $chart_labels[ 1 ] . ' ' . $chart_data[ 'current' ][ 'label' ] ?>',
1219
  data: [<?php
1220
  $tmp_serialize = array();
1822
  }
1823
 
1824
  if (!empty($_searchterms)){
1825
+ $search_terms_info = '<a class="slimstat-font-logout" target="_blank" title="' . htmlentities( __( 'Go to the referring page', 'wp-slimstat' ), ENT_QUOTES, 'UTF-8' ) . '" href="' . $_referer . '"></a>' . htmlentities( $_searchterms, ENT_QUOTES, 'UTF-8' );
1826
  $search_terms_info = "$search_terms_info $query_details";
1827
  }
1828
  return $search_terms_info;
1862
 
1863
  // Allow only legitimate requests
1864
  $request_uri = $_SERVER['REQUEST_URI'];
1865
+ $request_page = 'slimview1';
1866
 
1867
  // Are we on the Dashboard?
1868
  if ( empty( $_REQUEST[ 'page' ] ) ) {
1991
  }
1992
 
1993
  // Honor the 'hidden' attribute, but not on the WP Dashboard ( empty( $_args[ 'id' ] ) )
1994
+ // if ( empty( $report_id ) || in_array( 'hidden', self::$reports_info[ $report_id ][ 'classes' ] ) ) {
1995
+ // return array();
1996
+ // }
1997
 
1998
  if ( !empty( self::$reports_info[ $report_id ] ) && is_array( self::$reports_info[ $report_id ] ) ) {
1999
  // Default values
admin/wp-slimstat-admin.php CHANGED
@@ -11,7 +11,7 @@ class wp_slimstat_admin{
11
  */
12
  public static function init(){
13
  if ((wp_slimstat::$options['enable_ads_network'] == 'yes' || wp_slimstat::$options['enable_ads_network'] == 'no')){
14
- self::$admin_notice = "Last time we asked our users to send us suggestions on what they would like us to focus on. Fabian came up with a great idea: free premium add-ons for reviewing Slimstat. We liked it so much that we decided to extend it to all our users: write a review and get a $50 coupon (to be used on our store). Just follow these three easy steps: [1] send us your website URL so that we can approve your request; [2] write a review and leave it online for at least two weeks; [3] send us a link to your review and earn a $50 discount code. What are you waiting for?";
15
  // The WordPress Translation Team contacted us to let us know that Slimstat has been imported into <a href='https://translate.wordpress.org/projects/wp-plugins/wp-slimstat' target='_blank'>translate.wordpress.org</a>. We are adapting the source code and moving the localization files within our folder structure, to comply with their new guidelines. It looks like it will now be much easier for our users to contribute, and help Slimstat speak many new languages. <a href='https://translate.wordpress.org/projects/wp-plugins/wp-slimstat/stable' target='_blank'>Go take a look</a> and get a $50 coupon to spend on our store for each localization you contribute.
16
 
17
  self::$admin_notice .= '<br/><br/><a id="slimstat-hide-admin-notice" href="#" class="button-secondary">Got it, thanks</a>';
@@ -91,7 +91,7 @@ class wp_slimstat_admin{
91
  add_filter('screen_settings', array(__CLASS__, 'screen_settings'), 10, 2);
92
 
93
  // Display a notice that hightlights this version's features
94
- if (!empty($_GET['page']) && strpos($_GET['page'], 'wp-slim-view') !== false && !empty(self::$admin_notice) && wp_slimstat::$options['show_admin_notice'] != wp_slimstat::$version && current_user_can('manage_options')) {
95
  add_action('admin_notices', array(__CLASS__, 'show_admin_notice'));
96
  }
97
 
@@ -130,7 +130,7 @@ class wp_slimstat_admin{
130
  }
131
 
132
  // Load the library of functions to generate the reports
133
- if ( ( !empty( $_GET[ 'page' ] ) && strpos( $_GET[ 'page' ], 'wp-slim-view' ) !== false ) || (!empty($_POST['action']) && $_POST['action'] == 'slimstat_load_report')){
134
  include_once(dirname(__FILE__).'/view/wp-slimstat-reports.php');
135
  wp_slimstat_reports::init();
136
 
@@ -517,7 +517,7 @@ class wp_slimstat_admin{
517
  // --- END: Updates for version 4.0 ---
518
 
519
  // --- Updates for version 4.1.3 ---
520
- if (version_compare(wp_slimstat::$options['version'], '4.1.3', '<')){
521
  // Change column type to add IPv6 support
522
  $my_wpdb->query( "ALTER TABLE {$GLOBALS['wpdb']->prefix}slim_stats ADD ip_temp VARCHAR(39) DEFAULT NULL AFTER outbound_resource, ADD other_ip_temp VARCHAR(39) DEFAULT NULL AFTER id" );
523
  $my_wpdb->query( "UPDATE {$GLOBALS['wpdb']->prefix}slim_stats SET ip_temp = INET_NTOA(ip), other_ip_temp = INET_NTOA(other_ip)" );
@@ -534,8 +534,30 @@ class wp_slimstat_admin{
534
  $my_wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD dt_out INT(10) UNSIGNED DEFAULT 0 AFTER outbound_resource" );
535
  }
536
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
537
  // Now we can update the version stored in the database
538
- wp_slimstat::$options['version'] = wp_slimstat::$version;
539
 
540
  return true;
541
  }
@@ -558,10 +580,18 @@ class wp_slimstat_admin{
558
  include_once(dirname(__FILE__).'/view/wp-slimstat-reports.php');
559
  wp_slimstat_reports::init();
560
 
561
- foreach ( wp_slimstat_reports::$reports_info as $a_report_id => $a_report_info ) {
562
- if ( in_array( 'dashboard', $a_report_info[ 'screens' ] ) ) {
563
- // When called this way, callback_wrapper receives just the report_id as the SECOND parameter
564
- wp_add_dashboard_widget( $a_report_id, $a_report_info[ 'title' ], array( 'wp_slimstat_reports', 'callback_wrapper' ) );
 
 
 
 
 
 
 
 
565
  }
566
  }
567
  }
@@ -599,7 +629,7 @@ class wp_slimstat_admin{
599
  return true;
600
  }
601
 
602
- wp_add_inline_style('dashicons', "#adminmenu #toplevel_page_wp-slim-view-1 .wp-menu-image:before { content: '\\f239'; margin-top: -2px; }");
603
  }
604
  // end wp_slimstat_stylesheet_icon
605
 
@@ -629,7 +659,7 @@ class wp_slimstat_admin{
629
  }
630
 
631
  public static function wp_slimstat_enqueue_config_scripts(){
632
- wp_enqueue_script('slimstat_config_admin', plugins_url('/admin/js/slimstat.config.admin.js', dirname(__FILE__)));
633
  }
634
 
635
  /**
@@ -646,29 +676,30 @@ class wp_slimstat_admin{
646
 
647
  $new_entry = array();
648
  if (wp_slimstat::$options['use_separate_menu'] == 'yes'){
649
- $new_entry[] = add_menu_page(__('SlimStat','wp-slimstat'), __('SlimStat','wp-slimstat'), $minimum_capability, 'wp-slim-view-1', array(__CLASS__, 'wp_slimstat_include_view'));
650
- $new_entry[] = add_submenu_page('wp-slim-view-1', __('Access Log','wp-slimstat'), __('Access Log','wp-slimstat'), $minimum_capability, 'wp-slim-view-1', array(__CLASS__, 'wp_slimstat_include_view'));
651
- $new_entry[] = add_submenu_page('wp-slim-view-1', __('Overview','wp-slimstat'), __('Overview','wp-slimstat'), $minimum_capability, 'wp-slim-view-2', array(__CLASS__, 'wp_slimstat_include_view'));
652
- $new_entry[] = add_submenu_page('wp-slim-view-1', __('Audience','wp-slimstat'), __('Audience','wp-slimstat'), $minimum_capability, 'wp-slim-view-3', array(__CLASS__, 'wp_slimstat_include_view'));
653
- $new_entry[] = add_submenu_page('wp-slim-view-1', __('Site Analysis','wp-slimstat'), __('Site Analysis','wp-slimstat'), $minimum_capability, 'wp-slim-view-4', array(__CLASS__, 'wp_slimstat_include_view'));
654
- $new_entry[] = add_submenu_page('wp-slim-view-1', __('Traffic Sources','wp-slimstat'), __('Traffic Sources','wp-slimstat'), $minimum_capability, 'wp-slim-view-5', array(__CLASS__, 'wp_slimstat_include_view'));
655
- $new_entry[] = add_submenu_page('wp-slim-view-1', __('Map Overlay','wp-slimstat'), __('Map Overlay','wp-slimstat'), $minimum_capability, 'wp-slim-view-6', array(__CLASS__, 'wp_slimstat_include_view'));
656
- if (has_action('wp_slimstat_custom_report')) $new_entry[] = add_submenu_page('wp-slim-view-1', __('Custom Reports','wp-slimstat'), __('Custom Reports','wp-slimstat'), $minimum_capability, 'wp-slim-view-7', array(__CLASS__, 'wp_slimstat_include_view'));
657
- $new_entry[] = add_submenu_page('wp-slim-view-1', __('Add-ons','wp-slimstat'), __('Add-ons','wp-slimstat'), $minimum_capability, 'wp-slim-addons', array(__CLASS__, 'wp_slimstat_include_addons'));
658
  }
659
  else{
660
- $new_entry[] = add_submenu_page('admin.php', __('SlimStat','wp-slimstat'), __('SlimStat','wp-slimstat'), $minimum_capability, 'wp-slim-view-1', array(__CLASS__, 'wp_slimstat_include_view'));
661
  if (!is_admin_bar_showing()){
662
- $new_entry[] = add_submenu_page('index.php', __('SlimStat','wp-slimstat'), __('SlimStat','wp-slimstat'), $minimum_capability, 'wp-slim-view-1', array(__CLASS__, 'wp_slimstat_include_view'));
663
  }
664
 
665
  // Let's tell WordPress that these page exist, without showing them
666
- $new_entry[] = add_submenu_page('admin.php', __('Overview','wp-slimstat'), __('Overview','wp-slimstat'), $minimum_capability, 'wp-slim-view-2', array(__CLASS__, 'wp_slimstat_include_view'));
667
- $new_entry[] = add_submenu_page('admin.php', __('Audience','wp-slimstat'), __('Audience','wp-slimstat'), $minimum_capability, 'wp-slim-view-3', array(__CLASS__, 'wp_slimstat_include_view'));
668
- $new_entry[] = add_submenu_page('admin.php', __('Site Analysis','wp-slimstat'), __('Site Analysis','wp-slimstat'), $minimum_capability, 'wp-slim-view-4', array(__CLASS__, 'wp_slimstat_include_view'));
669
- $new_entry[] = add_submenu_page('admin.php', __('Traffic Sources','wp-slimstat'), __('Traffic Sources','wp-slimstat'), $minimum_capability, 'wp-slim-view-5', array(__CLASS__, 'wp_slimstat_include_view'));
670
- $new_entry[] = add_submenu_page('admin.php', __('Map Overlay','wp-slimstat'), __('Map Overlay','wp-slimstat'), $minimum_capability, 'wp-slim-view-6', array(__CLASS__, 'wp_slimstat_include_view'));
671
- $new_entry[] = add_submenu_page('admin.php', __('Add-ons','wp-slimstat'), __('Add-ons','wp-slimstat'), $minimum_capability, 'wp-slim-addons', array(__CLASS__, 'wp_slimstat_include_addons'));
 
672
  }
673
 
674
  // Load styles and Javascript needed to make the reports look nice and interactive
@@ -695,7 +726,7 @@ class wp_slimstat_admin{
695
  }
696
 
697
  if (wp_slimstat::$options['use_separate_menu'] == 'yes'){
698
- $new_entry = add_submenu_page('wp-slim-view-1', __('Settings','wp-slimstat'), __('Settings','wp-slimstat'), $minimum_capability, 'wp-slim-config', array(__CLASS__, 'wp_slimstat_include_config'));
699
  }
700
  else {
701
  $new_entry = add_submenu_page(null, __('Settings','wp-slimstat'), __('Settings','wp-slimstat'), $minimum_capability, 'wp-slim-config', array(__CLASS__, 'wp_slimstat_include_config'));
@@ -717,11 +748,19 @@ class wp_slimstat_admin{
717
  }
718
  // end wp_slimstat_include_view
719
 
 
 
 
 
 
 
 
 
720
  /**
721
  * Includes the screen to manage add-ons
722
  */
723
  public static function wp_slimstat_include_addons(){
724
- include(dirname(__FILE__).'/config/addons.php');
725
  }
726
  // end wp_slimstat_include_addons
727
 
@@ -797,7 +836,7 @@ class wp_slimstat_admin{
797
  * Displays a tab to customize this user's screen options (what boxes to see/hide)
798
  */
799
  public static function screen_settings($_current, $_screen){
800
- if (strpos($_screen->id, 'page_wp-slim-view') === false){
801
  return $_current;
802
  }
803
 
@@ -805,10 +844,6 @@ class wp_slimstat_admin{
805
 
806
  // The Reports Library wp_slimstat_reports has already been loaded at this point
807
  foreach( wp_slimstat_reports::$reports_info as $a_report_id => $a_report_info ) {
808
- if ( empty( $a_report_info[ 'screens' ] ) || !in_array( $_GET[ 'page' ], $a_report_info[ 'screens' ] ) ) {
809
- continue;
810
- }
811
-
812
  $checked = !in_array( 'hidden', $a_report_info[ 'classes' ] ) ? ' checked="checked"' : '';
813
 
814
  $current .= "
11
  */
12
  public static function init(){
13
  if ((wp_slimstat::$options['enable_ads_network'] == 'yes' || wp_slimstat::$options['enable_ads_network'] == 'no')){
14
+ self::$admin_notice = "You now have full control over the placement of your reports. Move them not just within each screen, but from one screen to another. Build your own custom Overview, by simply dragging and dropping report labels just like you already do with widgets and widget areas. For example, you can now compare multiple charts side by side on the same screen. And access all the new reports we made available in this version of Slimstat. Go to Slimstat > Customize and... have fun!";
15
  // The WordPress Translation Team contacted us to let us know that Slimstat has been imported into <a href='https://translate.wordpress.org/projects/wp-plugins/wp-slimstat' target='_blank'>translate.wordpress.org</a>. We are adapting the source code and moving the localization files within our folder structure, to comply with their new guidelines. It looks like it will now be much easier for our users to contribute, and help Slimstat speak many new languages. <a href='https://translate.wordpress.org/projects/wp-plugins/wp-slimstat/stable' target='_blank'>Go take a look</a> and get a $50 coupon to spend on our store for each localization you contribute.
16
 
17
  self::$admin_notice .= '<br/><br/><a id="slimstat-hide-admin-notice" href="#" class="button-secondary">Got it, thanks</a>';
91
  add_filter('screen_settings', array(__CLASS__, 'screen_settings'), 10, 2);
92
 
93
  // Display a notice that hightlights this version's features
94
+ if (!empty($_GET['page']) && strpos($_GET['page'], 'slimview') !== false && !empty(self::$admin_notice) && wp_slimstat::$options['show_admin_notice'] != wp_slimstat::$version && current_user_can('manage_options')) {
95
  add_action('admin_notices', array(__CLASS__, 'show_admin_notice'));
96
  }
97
 
130
  }
131
 
132
  // Load the library of functions to generate the reports
133
+ if ( ( !empty( $_GET[ 'page' ] ) && strpos( $_GET[ 'page' ], 'slimview' ) !== false ) || (!empty($_POST['action']) && $_POST['action'] == 'slimstat_load_report')){
134
  include_once(dirname(__FILE__).'/view/wp-slimstat-reports.php');
135
  wp_slimstat_reports::init();
136
 
517
  // --- END: Updates for version 4.0 ---
518
 
519
  // --- Updates for version 4.1.3 ---
520
+ if ( version_compare( wp_slimstat::$options[ 'version' ], '4.1.3', '<' ) ) {
521
  // Change column type to add IPv6 support
522
  $my_wpdb->query( "ALTER TABLE {$GLOBALS['wpdb']->prefix}slim_stats ADD ip_temp VARCHAR(39) DEFAULT NULL AFTER outbound_resource, ADD other_ip_temp VARCHAR(39) DEFAULT NULL AFTER id" );
523
  $my_wpdb->query( "UPDATE {$GLOBALS['wpdb']->prefix}slim_stats SET ip_temp = INET_NTOA(ip), other_ip_temp = INET_NTOA(other_ip)" );
534
  $my_wpdb->query( "ALTER TABLE {$GLOBALS[ 'wpdb' ]->prefix}slim_stats ADD dt_out INT(10) UNSIGNED DEFAULT 0 AFTER outbound_resource" );
535
  }
536
 
537
+ // --- Updates for version 4.2 ---
538
+ if ( version_compare( wp_slimstat::$options[ 'version' ], '4.2', '<' ) ) {
539
+ // Report arrangements are now stored as a global usermeta value. Migrate old values to new variable
540
+ $current_user = wp_get_current_user();
541
+ $page_location = ( wp_slimstat::$options[ 'use_separate_menu' ] == 'yes' ) ? 'slimstat' : 'admin';
542
+ $new_user_reports = array();
543
+
544
+ for ( $i = 2; $i <= 5; $i++ ) {
545
+ $user_reports = get_user_option( "meta-box-order_{$page_location}_page_wp-slim-view-$i", $current_user->ID );
546
+
547
+ if ( !empty( $user_reports ) ) {
548
+ $new_user_reports[ "slimview$i" ] = $user_reports[ 0 ];
549
+ delete_user_option( $current_user->ID, "meta-box-order_{$page_location}_page_wp-slim-view-$i", true );
550
+ }
551
+ }
552
+
553
+ if ( !empty( $new_user_reports ) ) {
554
+ update_user_option( $current_user->ID, "meta-box-order_{$page_location}_page_slimlayout", $new_user_reports, true );
555
+ }
556
+ }
557
+ // --- END: Updates for version 4.2 ---
558
+
559
  // Now we can update the version stored in the database
560
+ //wp_slimstat::$options['version'] = wp_slimstat::$version;
561
 
562
  return true;
563
  }
580
  include_once(dirname(__FILE__).'/view/wp-slimstat-reports.php');
581
  wp_slimstat_reports::init();
582
 
583
+ if ( !empty( wp_slimstat_reports::$user_reports[ 'dashboard' ] ) ) {
584
+ $dashboard_reports = explode( ',', wp_slimstat_reports::$user_reports[ 'dashboard' ] );
585
+ foreach ( $dashboard_reports as $a_report_id ) {
586
+ wp_add_dashboard_widget( $a_report_id, wp_slimstat_reports::$reports_info[ $a_report_id ][ 'title' ], array( 'wp_slimstat_reports', 'callback_wrapper' ) );
587
+ }
588
+ }
589
+ else {
590
+ foreach ( wp_slimstat_reports::$reports_info as $a_report_id => $a_report_info ) {
591
+ if ( in_array( 'dashboard', $a_report_info[ 'screens' ] ) ) {
592
+ // When called this way, callback_wrapper receives just the report_id as the SECOND parameter
593
+ wp_add_dashboard_widget( $a_report_id, $a_report_info[ 'title' ], array( 'wp_slimstat_reports', 'callback_wrapper' ) );
594
+ }
595
  }
596
  }
597
  }
629
  return true;
630
  }
631
 
632
+ wp_add_inline_style('dashicons', "#adminmenu #toplevel_page_slimview1 .wp-menu-image:before { content: '\\f239'; margin-top: -2px; }");
633
  }
634
  // end wp_slimstat_stylesheet_icon
635
 
659
  }
660
 
661
  public static function wp_slimstat_enqueue_config_scripts(){
662
+ wp_enqueue_script('slimstat_config_admin', plugins_url('/admin/js/slimstat.config.admin.js', dirname(__FILE__)), array( 'dashboard' ));
663
  }
664
 
665
  /**
676
 
677
  $new_entry = array();
678
  if (wp_slimstat::$options['use_separate_menu'] == 'yes'){
679
+ $new_entry[] = add_menu_page(__('SlimStat','wp-slimstat'), __('SlimStat','wp-slimstat'), $minimum_capability, 'slimview1', array(__CLASS__, 'wp_slimstat_include_view'));
680
+ $new_entry[] = add_submenu_page('slimview1', __('Access Log','wp-slimstat'), __('Access Log','wp-slimstat'), $minimum_capability, 'slimview1', array(__CLASS__, 'wp_slimstat_include_view'));
681
+ $new_entry[] = add_submenu_page('slimview1', __('Overview','wp-slimstat'), __('Overview','wp-slimstat'), $minimum_capability, 'slimview2', array(__CLASS__, 'wp_slimstat_include_view'));
682
+ $new_entry[] = add_submenu_page('slimview1', __('Audience','wp-slimstat'), __('Audience','wp-slimstat'), $minimum_capability, 'slimview3', array(__CLASS__, 'wp_slimstat_include_view'));
683
+ $new_entry[] = add_submenu_page('slimview1', __('Site Analysis','wp-slimstat'), __('Site Analysis','wp-slimstat'), $minimum_capability, 'slimview4', array(__CLASS__, 'wp_slimstat_include_view'));
684
+ $new_entry[] = add_submenu_page('slimview1', __('Traffic Sources','wp-slimstat'), __('Traffic Sources','wp-slimstat'), $minimum_capability, 'slimview5', array(__CLASS__, 'wp_slimstat_include_view'));
685
+ $new_entry[] = add_submenu_page('slimview1', __('Geolocation','wp-slimstat'), __('Geolocation','wp-slimstat'), $minimum_capability, 'slimview6', array(__CLASS__, 'wp_slimstat_include_view'));
686
+ $new_entry[] = add_submenu_page('slimview1', __('Customize','wp-slimstat'), __('Customize','wp-slimstat'), $minimum_capability, 'slimlayout', array(__CLASS__, 'wp_slimstat_include_layout'));
687
+ $new_entry[] = add_submenu_page('slimview1', __('Add-ons','wp-slimstat'), __('Add-ons','wp-slimstat'), $minimum_capability, 'slimaddons', array(__CLASS__, 'wp_slimstat_include_addons'));
688
  }
689
  else{
690
+ $new_entry[] = add_submenu_page('admin.php', __('SlimStat','wp-slimstat'), __('SlimStat','wp-slimstat'), $minimum_capability, 'slimview1', array(__CLASS__, 'wp_slimstat_include_view'));
691
  if (!is_admin_bar_showing()){
692
+ $new_entry[] = add_submenu_page('index.php', __('SlimStat','wp-slimstat'), __('SlimStat','wp-slimstat'), $minimum_capability, 'slimview1', array(__CLASS__, 'wp_slimstat_include_view'));
693
  }
694
 
695
  // Let's tell WordPress that these page exist, without showing them
696
+ $new_entry[] = add_submenu_page('admin.php', __('Overview','wp-slimstat'), __('Overview','wp-slimstat'), $minimum_capability, 'slimview2', array(__CLASS__, 'wp_slimstat_include_view'));
697
+ $new_entry[] = add_submenu_page('admin.php', __('Audience','wp-slimstat'), __('Audience','wp-slimstat'), $minimum_capability, 'slimview3', array(__CLASS__, 'wp_slimstat_include_view'));
698
+ $new_entry[] = add_submenu_page('admin.php', __('Site Analysis','wp-slimstat'), __('Site Analysis','wp-slimstat'), $minimum_capability, 'slimview4', array(__CLASS__, 'wp_slimstat_include_view'));
699
+ $new_entry[] = add_submenu_page('admin.php', __('Traffic Sources','wp-slimstat'), __('Traffic Sources','wp-slimstat'), $minimum_capability, 'slimview5', array(__CLASS__, 'wp_slimstat_include_view'));
700
+ $new_entry[] = add_submenu_page('admin.php', __('Geolocation','wp-slimstat'), __('Geolocation','wp-slimstat'), $minimum_capability, 'slimview6', array(__CLASS__, 'wp_slimstat_include_view'));
701
+ $new_entry[] = add_submenu_page('admin.php', __('Customize','wp-slimstat'), __('Customize','wp-slimstat'), $minimum_capability, 'slimlayout', array(__CLASS__, 'wp_slimstat_include_layout'));
702
+ $new_entry[] = add_submenu_page('admin.php', __('Add-ons','wp-slimstat'), __('Add-ons','wp-slimstat'), $minimum_capability, 'slimaddons', array(__CLASS__, 'wp_slimstat_include_addons'));
703
  }
704
 
705
  // Load styles and Javascript needed to make the reports look nice and interactive
726
  }
727
 
728
  if (wp_slimstat::$options['use_separate_menu'] == 'yes'){
729
+ $new_entry = add_submenu_page('slimview1', __('Settings','wp-slimstat'), __('Settings','wp-slimstat'), $minimum_capability, 'wp-slim-config', array(__CLASS__, 'wp_slimstat_include_config'));
730
  }
731
  else {
732
  $new_entry = add_submenu_page(null, __('Settings','wp-slimstat'), __('Settings','wp-slimstat'), $minimum_capability, 'wp-slim-config', array(__CLASS__, 'wp_slimstat_include_config'));
748
  }
749
  // end wp_slimstat_include_view
750
 
751
+ /**
752
+ * Includes the screen to arrange the reports
753
+ */
754
+ public static function wp_slimstat_include_layout(){
755
+ include(dirname(__FILE__).'/view/layout.php');
756
+ }
757
+ // end wp_slimstat_include_addons
758
+
759
  /**
760
  * Includes the screen to manage add-ons
761
  */
762
  public static function wp_slimstat_include_addons(){
763
+ include(dirname(__FILE__).'/view/addons.php');
764
  }
765
  // end wp_slimstat_include_addons
766
 
836
  * Displays a tab to customize this user's screen options (what boxes to see/hide)
837
  */
838
  public static function screen_settings($_current, $_screen){
839
+ if (strpos($_screen->id, 'page_slimview') === false){
840
  return $_current;
841
  }
842
 
844
 
845
  // The Reports Library wp_slimstat_reports has already been loaded at this point
846
  foreach( wp_slimstat_reports::$reports_info as $a_report_id => $a_report_info ) {
 
 
 
 
847
  $checked = !in_array( 'hidden', $a_report_info[ 'classes' ] ) ? ' checked="checked"' : '';
848
 
849
  $current .= "
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: analytics, tracking, reports, analyze, wassup, geolocation, online users,
5
  Text Domain: wp-slimstat
6
  Requires at least: 3.8
7
  Tested up to: 4.4
8
- Stable tag: 4.1.8.1
9
 
10
  == Description ==
11
  [youtube https://www.youtube.com/watch?v=iJCtjxArq4U]
@@ -60,11 +60,19 @@ Our knowledge base is available on our [support center](http://docs.wp-slimstat.
60
 
61
  == Changelog ==
62
 
 
 
 
 
 
 
 
 
63
  = 4.1.8.1 =
64
- * [Update] Renamed and reorganized some tabs under Settings to make them easier to understand
65
- * [Update] Added icons for Windows 10 and Microsoft Edge 12 browser (thank you, Romain Petges)
66
- * [Update] Top Outbound Links and other reports can now be added to the WordPress dashboard (thank you, Cole)
67
- * [Fix] One metric's description was misleading: it was supposed to be Pageviews per Visit, not Pages per Visit (thank you, Bperun)
68
  * [Fix] Some people were having problems locating the Save button in the settings, which was also hidden when RTL was enabled.
69
 
70
  = 4.1.8 =
5
  Text Domain: wp-slimstat
6
  Requires at least: 3.8
7
  Tested up to: 4.4
8
+ Stable tag: 4.2
9
 
10
  == Description ==
11
  [youtube https://www.youtube.com/watch?v=iJCtjxArq4U]
60
 
61
  == Changelog ==
62
 
63
+ = 4.2 =
64
+ * [Note] You now have full control over the placement of your reports. Move them not just within each screen, but from one screen to another. Build your own custom Overview, by simply dragging and dropping report labels just like you already do with widgets and widget areas. Compare multiple charts in one screen, and much more. Go to Slimstat > Customize and... have fun!
65
+ * [Note] If for any reasons your reports are not being displayed correctly, make sure to give the No Panic button a try (under Settings > Maintenance)
66
+ * [Note] Did you say charts? We are adding new visual reports to Slimstat, to make your metrics easier to interpret. Stay tuned!
67
+ * [Update] Support for the old "Custom Report" screen (already deprecated in version 4.0) has been removed from the source code. Please update your custom reports accordingly.
68
+ * [Update] Renamed and reorganized tabs under Settings to make them easier to understand.
69
+ * [Update] [Flot](http://www.flotcharts.org/) chart library updated to version 0.8.3
70
+
71
  = 4.1.8.1 =
72
+ * [Update] Renamed and reorganized some tabs under Settings to make them easier to understand.
73
+ * [Update] Added icons for Windows 10 and Microsoft Edge 12 browser (thank you, Romain Petges).
74
+ * [Update] Top Outbound Links and other reports can now be added to the WordPress dashboard (thank you, Cole).
75
+ * [Fix] One metric's description was misleading: it was supposed to be Pageviews per Visit, not Pages per Visit (thank you, Bperun).
76
  * [Fix] Some people were having problems locating the Save button in the settings, which was also hidden when RTL was enabled.
77
 
78
  = 4.1.8 =
wp-slimstat.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: WP Slimstat
4
  Plugin URI: http://wordpress.org/plugins/wp-slimstat/
5
  Description: The leading web analytics plugin for WordPress
6
- Version: 4.1.8.1
7
  Author: Camu
8
  Author URI: http://www.wp-slimstat.com/
9
  Text Domain: wp-slimstat
@@ -13,7 +13,7 @@ Domain Path: /languages
13
  if ( !empty( wp_slimstat::$options ) ) return true;
14
 
15
  class wp_slimstat {
16
- public static $version = '4.1.8.1';
17
  public static $options = array();
18
 
19
  public static $wpdb = '';
@@ -1789,14 +1789,15 @@ class wp_slimstat {
1789
  $slimstat_view_url = get_admin_url($GLOBALS['blog_id'], "admin.php?page=");
1790
  $slimstat_config_url = get_admin_url($GLOBALS['blog_id'], "admin.php?page=wp-slim-config");
1791
 
1792
- $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-header', 'title' => 'Slimstat', 'href' => "{$slimstat_view_url}wp-slim-view-1"));
1793
- $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel1', 'href' => "{$slimstat_view_url}wp-slim-view-1", 'parent' => 'slimstat-header', 'title' => __('Access Log', 'wp-slimstat')));
1794
- $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel2', 'href' => "{$slimstat_view_url}wp-slim-view-2", 'parent' => 'slimstat-header', 'title' => __('Overview', 'wp-slimstat')));
1795
- $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel3', 'href' => "{$slimstat_view_url}wp-slim-view-3", 'parent' => 'slimstat-header', 'title' => __('Audience', 'wp-slimstat')));
1796
- $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel4', 'href' => "{$slimstat_view_url}wp-slim-view-4", 'parent' => 'slimstat-header', 'title' => __('Site Analysis', 'wp-slimstat')));
1797
- $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel5', 'href' => "{$slimstat_view_url}wp-slim-view-5", 'parent' => 'slimstat-header', 'title' => __('Traffic Sources', 'wp-slimstat')));
1798
- $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel6', 'href' => "{$slimstat_view_url}wp-slim-view-6", 'parent' => 'slimstat-header', 'title' => __('Map Overlay', 'wp-slimstat')));
1799
- $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel8', 'href' => "{$slimstat_view_url}wp-slim-addons", 'parent' => 'slimstat-header', 'title' => __('Add-ons', 'wp-slimstat')));
 
1800
 
1801
  if ( ( empty( self::$options[ 'can_admin' ] ) || strpos( self::$options[ 'can_admin' ], $GLOBALS[ 'current_user' ]->user_login ) !== false || $GLOBALS[ 'current_user' ]->user_login == 'slimstatadmin' ) && current_user_can( $minimum_capability_config ) ) {
1802
  $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-config', 'href' => $slimstat_config_url, 'parent' => 'slimstat-header', 'title' => __('Settings', 'wp-slimstat')));
3
  Plugin Name: WP Slimstat
4
  Plugin URI: http://wordpress.org/plugins/wp-slimstat/
5
  Description: The leading web analytics plugin for WordPress
6
+ Version: 4.2
7
  Author: Camu
8
  Author URI: http://www.wp-slimstat.com/
9
  Text Domain: wp-slimstat
13
  if ( !empty( wp_slimstat::$options ) ) return true;
14
 
15
  class wp_slimstat {
16
+ public static $version = '4.2';
17
  public static $options = array();
18
 
19
  public static $wpdb = '';
1789
  $slimstat_view_url = get_admin_url($GLOBALS['blog_id'], "admin.php?page=");
1790
  $slimstat_config_url = get_admin_url($GLOBALS['blog_id'], "admin.php?page=wp-slim-config");
1791
 
1792
+ $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-header', 'title' => 'Slimstat', 'href' => "{$slimstat_view_url}slimview1"));
1793
+ $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel1', 'href' => "{$slimstat_view_url}slimview1", 'parent' => 'slimstat-header', 'title' => __('Access Log', 'wp-slimstat')));
1794
+ $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel2', 'href' => "{$slimstat_view_url}slimview2", 'parent' => 'slimstat-header', 'title' => __('Overview', 'wp-slimstat')));
1795
+ $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel3', 'href' => "{$slimstat_view_url}slimview3", 'parent' => 'slimstat-header', 'title' => __('Audience', 'wp-slimstat')));
1796
+ $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel4', 'href' => "{$slimstat_view_url}slimview4", 'parent' => 'slimstat-header', 'title' => __('Site Analysis', 'wp-slimstat')));
1797
+ $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel5', 'href' => "{$slimstat_view_url}slimview5", 'parent' => 'slimstat-header', 'title' => __('Traffic Sources', 'wp-slimstat')));
1798
+ $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel6', 'href' => "{$slimstat_view_url}slimview6", 'parent' => 'slimstat-header', 'title' => __('Geolocation', 'wp-slimstat')));
1799
+ $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel9', 'href' => "{$slimstat_view_url}slimlayout", 'parent' => 'slimstat-header', 'title' => __('Customize', 'wp-slimstat')));
1800
+ $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-panel8', 'href' => "{$slimstat_view_url}slimaddons", 'parent' => 'slimstat-header', 'title' => __('Add-ons', 'wp-slimstat')));
1801
 
1802
  if ( ( empty( self::$options[ 'can_admin' ] ) || strpos( self::$options[ 'can_admin' ], $GLOBALS[ 'current_user' ]->user_login ) !== false || $GLOBALS[ 'current_user' ]->user_login == 'slimstatadmin' ) && current_user_can( $minimum_capability_config ) ) {
1803
  $GLOBALS['wp_admin_bar']->add_menu(array('id' => 'slimstat-config', 'href' => $slimstat_config_url, 'parent' => 'slimstat-header', 'title' => __('Settings', 'wp-slimstat')));