Post Views Counter - Version 1.2.0

Version Description

  • New: Dashboard post views stats widget.
  • Fix: A couple of typos in method names.
Download this release

Release Info

Developer dfactory
Plugin Icon 128x128 Post Views Counter
Version 1.2.0
Comparing to
See all releases

Code changes from version 1.1.4 to 1.2.0

css/admin-dashboard.css ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #pvc_dashboard_container {
2
+ color: #aaa;
3
+ min-height: 240px;
4
+ margin: 0 -4px;
5
+ text-align: center;
6
+ position: relative;
7
+ }
8
+ #pvc_dashboard_container .spinner {
9
+ position: absolute;
10
+ left: 50%;
11
+ top: 40%;
12
+ margin-left: -10px;
13
+ }
14
+ #pvc_dashboard p.sub {
15
+ color: #8f8f8f;
16
+ font-size: 14px;
17
+ text-align: left;
18
+ padding-bottom: 3px;
19
+ border-bottom: 1px solid #ececec;
20
+ }
includes/columns.php CHANGED
@@ -146,21 +146,12 @@ class Post_Views_Counter_Columns {
146
 
147
  if ( ! empty( $post_types ) ) {
148
  foreach ( $post_types as $post_type ) {
149
- if ( $post_type === 'page' ) {
150
- // actions
151
- add_action( 'manage_pages_custom_column', array( $this, 'add_new_column_content' ), 10, 2 );
152
-
153
- // filters
154
- add_filter( 'manage_pages_columns', array( $this, 'add_new_column' ) );
155
- add_filter( 'manage_edit-page_sortable_columns', array( $this, 'register_sortable_custom_column' ) );
156
- } else {
157
- // actions
158
- add_action( 'manage_' . $post_type . '_posts_custom_column', array( $this, 'add_new_column_content' ), 10, 2 );
159
-
160
- // filters
161
- add_filter( 'manage_' . $post_type . '_posts_columns', array( $this, 'add_new_column' ) );
162
- add_filter( 'manage_edit-' . $post_type . '_sortable_columns', array( $this, 'register_sortable_custom_column' ) );
163
- }
164
  }
165
  }
166
  }
146
 
147
  if ( ! empty( $post_types ) ) {
148
  foreach ( $post_types as $post_type ) {
149
+ // actions
150
+ add_action( 'manage_' . $post_type . '_posts_custom_column', array( $this, 'add_new_column_content' ), 10, 2 );
151
+
152
+ // filters
153
+ add_filter( 'manage_' . $post_type . '_posts_columns', array( $this, 'add_new_column' ) );
154
+ add_filter( 'manage_edit-' . $post_type . '_sortable_columns', array( $this, 'register_sortable_custom_column' ) );
 
 
 
 
 
 
 
 
 
155
  }
156
  }
157
  }
includes/counter.php CHANGED
@@ -21,50 +21,102 @@ class Post_Views_Counter_Counter {
21
  public function __construct() {
22
  // actions
23
  add_action( 'plugins_loaded', array( $this, 'check_cookie' ), 1 );
24
- add_action( 'wp', array( $this, 'check_post' ) );
25
  add_action( 'deleted_post', array( $this, 'delete_post_views' ) );
 
26
  add_action( 'wp_ajax_pvc-check-post', array( $this, 'check_post_ajax' ) );
27
  add_action( 'wp_ajax_nopriv_pvc-check-post', array( $this, 'check_post_ajax' ) );
28
  }
29
 
30
  /**
31
- * Remove post views from database when post is deleted.
32
  *
33
- * @param int $post_id
34
  */
35
- public function delete_post_views( $post_id ) {
36
- global $wpdb;
 
 
 
 
37
 
38
- $wpdb->delete( $wpdb->prefix . 'post_views', array( 'id' => $post_id ), array( '%d' ) );
39
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  /**
 
42
  *
43
- * Get timestamp convertion.
44
- *
45
- * @param string $type
46
- * @param int $number
47
- * @param int $timestamp
48
- * @return string
49
  */
50
- public function get_timestamp( $type, $number, $timestamp = true ) {
51
- $converter = array(
52
- 'minutes' => 60,
53
- 'hours' => 3600,
54
- 'days' => 86400,
55
- 'weeks' => 604800,
56
- 'months' => 2592000,
57
- 'years' => 946080000
58
- );
59
 
60
- return ($timestamp ? current_time( 'timestamp', true ) : 0) + $number * $converter[$type];
61
- }
 
 
 
62
 
 
 
 
 
 
 
 
63
  /**
64
  * Check whether to count visit via AJAX request.
65
  */
66
  public function check_post_ajax() {
67
- if ( isset( $_POST['action'], $_POST['post_id'], $_POST['pvc_nonce'], $_POST['post_type'] ) && $_POST['action'] === 'pvc-check-post' && ($post_id = (int) $_POST['post_id']) > 0 && wp_verify_nonce( $_POST['pvc_nonce'], 'pvc-check-post' ) !== false && Post_Views_Counter()->options['general']['counter_mode'] === 'js' ) {
 
 
 
 
 
68
  // get countable post types
69
  $post_types = Post_Views_Counter()->options['general']['post_types_count'];
70
 
@@ -74,128 +126,20 @@ class Post_Views_Counter_Counter {
74
  // whether to count this post type or not
75
  if ( empty( $post_types ) || empty( $post_type ) || $post_type !== $_POST['post_type'] || ! in_array( $post_type, $post_types, true ) )
76
  exit;
77
-
78
- // get excluded ips
79
- $excluded_ips = Post_Views_Counter()->options['general']['exclude_ips'];
80
-
81
- // whether to count this ip or not
82
- if ( ! empty( $excluded_ips ) && filter_var( preg_replace( '/[^0-9a-fA-F:., ]/', '', $_SERVER['REMOTE_ADDR'] ), FILTER_VALIDATE_IP ) && in_array( $_SERVER['REMOTE_ADDR'], $excluded_ips, true ) )
83
- exit;
84
-
85
- // get groups to check them faster
86
- $groups = Post_Views_Counter()->options['general']['exclude']['groups'];
87
-
88
- // whether to count this user
89
- if ( is_user_logged_in() ) {
90
- // exclude logged in users?
91
- if ( in_array( 'users', $groups, true ) )
92
- exit;
93
- // exclude specific roles?
94
- elseif ( in_array( 'roles', $groups, true ) && $this->is_user_role_excluded( Post_Views_Counter()->options['general']['exclude']['roles'] ) )
95
- exit;
96
- }
97
- // exclude guests?
98
- elseif ( in_array( 'guests', $groups, true ) )
99
- exit;
100
-
101
- // whether to count robots
102
- if ( $this->is_robot() )
103
- exit;
104
-
105
- // cookie already existed?
106
- if ( $this->cookie['exists'] ) {
107
- // post already viewed but not expired?
108
- if ( in_array( $post_id, array_keys( $this->cookie['visited_posts'] ), true ) && current_time( 'timestamp', true ) < $this->cookie['visited_posts'][$post_id] ) {
109
- // updates cookie but do not count visit
110
- $this->save_cookie( $post_id, $this->cookie, false );
111
-
112
- exit;
113
- } else
114
- // updates cookie
115
- $this->save_cookie( $post_id, $this->cookie );
116
- } else {
117
- // set new cookie
118
- $this->save_cookie( $post_id );
119
- }
120
-
121
- // count visit
122
- $this->count_visit( $post_id );
123
  }
124
 
125
  exit;
126
  }
127
 
128
- /**
129
- * Check whether to count visit.
130
- */
131
- public function check_post() {
132
- // do not count admin entries
133
- if ( is_admin() )
134
- return;
135
-
136
- // do we use PHP as counter?
137
- if ( Post_Views_Counter()->options['general']['counter_mode'] === 'php' ) {
138
- $post_types = Post_Views_Counter()->options['general']['post_types_count'];
139
-
140
- // whether to count this post type
141
- if ( empty( $post_types ) || ! is_singular( $post_types ) )
142
- return;
143
-
144
- $ips = Post_Views_Counter()->options['general']['exclude_ips'];
145
-
146
- // whether to count this ip
147
- if ( ! empty( $ips ) && filter_var( preg_replace( '/[^0-9a-fA-F:., ]/', '', $_SERVER['REMOTE_ADDR'] ), FILTER_VALIDATE_IP ) && in_array( $_SERVER['REMOTE_ADDR'], $ips, true ) )
148
- return;
149
-
150
- // get groups to check them faster
151
- $groups = Post_Views_Counter()->options['general']['exclude']['groups'];
152
-
153
- // whether to count this user
154
- if ( is_user_logged_in() ) {
155
- // exclude logged in users?
156
- if ( in_array( 'users', $groups, true ) )
157
- return;
158
- // exclude specific roles?
159
- elseif ( in_array( 'roles', $groups, true ) && $this->is_user_role_excluded( Post_Views_Counter()->options['general']['exclude']['roles'] ) )
160
- return;
161
- }
162
- // exclude guests?
163
- elseif ( in_array( 'guests', $groups, true ) )
164
- return;
165
-
166
- // whether to count robots
167
- if ( $this->is_robot() )
168
- return;
169
-
170
- // get post id
171
- $id = get_the_ID();
172
-
173
- // cookie already existed?
174
- if ( $this->cookie['exists'] ) {
175
- // post already viewed but not expired?
176
- if ( in_array( $id, array_keys( $this->cookie['visited_posts'] ), true ) && current_time( 'timestamp', true ) < $this->cookie['visited_posts'][$id] ) {
177
- // update cookie but do not count visit
178
- $this->save_cookie( $id, $this->cookie, false );
179
-
180
- return;
181
- } else
182
- // update cookie
183
- $this->save_cookie( $id, $this->cookie );
184
- } else
185
- // set new cookie
186
- $this->save_cookie( $id );
187
-
188
- // count visit
189
- $this->count_visit( $id );
190
- }
191
- }
192
-
193
  /**
194
  * Initialize cookie session.
195
  */
196
  public function check_cookie() {
197
  // do not run in admin except for ajax requests
198
- if ( is_admin() && ! (defined( 'DOING_AJAX' ) && DOING_AJAX) )
199
  return;
200
 
201
  // is cookie set?
@@ -305,24 +249,6 @@ class Post_Views_Counter_Counter {
305
  }
306
  }
307
 
308
- /**
309
- * Check if object cache is in use.
310
- *
311
- * @param bool $using
312
- * @return bool
313
- */
314
- public function using_object_cache( $using = null ) {
315
- $using = wp_using_ext_object_cache( $using );
316
-
317
- if ( $using ) {
318
- // check if explicitly disabled by flush_interval setting/option <= 0
319
- $flush_interval_number = Post_Views_Counter()->options['general']['flush_interval']['number'];
320
- $using = ( $flush_interval_number <= 0 ) ? false : true;
321
- }
322
-
323
- return $using;
324
- }
325
-
326
  /**
327
  * Count visit function.
328
  *
@@ -367,6 +293,57 @@ class Post_Views_Counter_Counter {
367
 
368
  return true;
369
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
 
371
  /**
372
  * Update the single cache key which holds a list of all the cache keys
21
  public function __construct() {
22
  // actions
23
  add_action( 'plugins_loaded', array( $this, 'check_cookie' ), 1 );
 
24
  add_action( 'deleted_post', array( $this, 'delete_post_views' ) );
25
+ add_action( 'wp', array( $this, 'check_post_php' ) );
26
  add_action( 'wp_ajax_pvc-check-post', array( $this, 'check_post_ajax' ) );
27
  add_action( 'wp_ajax_nopriv_pvc-check-post', array( $this, 'check_post_ajax' ) );
28
  }
29
 
30
  /**
31
+ * Check whether to count visit.
32
  *
33
+ * @param int $id
34
  */
35
+ public function check_post( $id = 0 ) {
36
+ // get post id
37
+ $id = (int) (empty( $id ) ? get_the_ID() : $id);
38
+
39
+ if ( empty( $id ) )
40
+ return;
41
 
42
+ $ips = Post_Views_Counter()->options['general']['exclude_ips'];
43
+
44
+ // whether to count this ip
45
+ if ( ! empty( $ips ) && filter_var( preg_replace( '/[^0-9a-fA-F:., ]/', '', $_SERVER['REMOTE_ADDR'] ), FILTER_VALIDATE_IP ) && in_array( $_SERVER['REMOTE_ADDR'], $ips, true ) )
46
+ return;
47
+
48
+ // get groups to check them faster
49
+ $groups = Post_Views_Counter()->options['general']['exclude']['groups'];
50
+
51
+ // whether to count this user
52
+ if ( is_user_logged_in() ) {
53
+ // exclude logged in users?
54
+ if ( in_array( 'users', $groups, true ) )
55
+ return;
56
+ // exclude specific roles?
57
+ elseif ( in_array( 'roles', $groups, true ) && $this->is_user_role_excluded( Post_Views_Counter()->options['general']['exclude']['roles'] ) )
58
+ return;
59
+ }
60
+ // exclude guests?
61
+ elseif ( in_array( 'guests', $groups, true ) )
62
+ return;
63
+
64
+ // whether to count robots
65
+ if ( $this->is_robot() )
66
+ return;
67
+
68
+ // cookie already existed?
69
+ if ( $this->cookie['exists'] ) {
70
+ // post already viewed but not expired?
71
+ if ( in_array( $id, array_keys( $this->cookie['visited_posts'] ), true ) && current_time( 'timestamp', true ) < $this->cookie['visited_posts'][$id] ) {
72
+ // update cookie but do not count visit
73
+ $this->save_cookie( $id, $this->cookie, false );
74
 
75
+ return;
76
+ } else
77
+ // update cookie
78
+ $this->save_cookie( $id, $this->cookie );
79
+ } else
80
+ // set new cookie
81
+ $this->save_cookie( $id );
82
+
83
+ // count visit
84
+ $this->count_visit( $id );
85
+ }
86
+
87
  /**
88
+ * Check whether to count visit via PHP request.
89
  *
90
+ * @param int $id
 
 
 
 
 
91
  */
92
+ public function check_post_php() {
93
+ // do not count admin entries
94
+ if ( is_admin() && ! (defined( 'DOING_AJAX' ) && DOING_AJAX) )
95
+ return;
 
 
 
 
 
96
 
97
+ // do we use PHP as counter?
98
+ if ( Post_Views_Counter()->options['general']['counter_mode'] != 'php' )
99
+ return;
100
+
101
+ $post_types = Post_Views_Counter()->options['general']['post_types_count'];
102
 
103
+ // whether to count this post type
104
+ if ( empty( $post_types ) || ! is_singular( $post_types ) )
105
+ return;
106
+
107
+ $this->check_post( get_the_ID() );
108
+ }
109
+
110
  /**
111
  * Check whether to count visit via AJAX request.
112
  */
113
  public function check_post_ajax() {
114
+ if ( isset( $_POST['action'], $_POST['post_id'], $_POST['pvc_nonce'], $_POST['post_type'] ) && $_POST['action'] === 'pvc-check-post' && ($post_id = (int) $_POST['post_id']) > 0 && wp_verify_nonce( $_POST['pvc_nonce'], 'pvc-check-post' ) !== false ) {
115
+
116
+ // do we use Ajax as counter?
117
+ if ( Post_Views_Counter()->options['general']['counter_mode'] != 'js' )
118
+ exit;
119
+
120
  // get countable post types
121
  $post_types = Post_Views_Counter()->options['general']['post_types_count'];
122
 
126
  // whether to count this post type or not
127
  if ( empty( $post_types ) || empty( $post_type ) || $post_type !== $_POST['post_type'] || ! in_array( $post_type, $post_types, true ) )
128
  exit;
129
+
130
+ $this->check_post( $post_id );
131
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  }
133
 
134
  exit;
135
  }
136
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  /**
138
  * Initialize cookie session.
139
  */
140
  public function check_cookie() {
141
  // do not run in admin except for ajax requests
142
+ if ( is_admin() && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) )
143
  return;
144
 
145
  // is cookie set?
249
  }
250
  }
251
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
  /**
253
  * Count visit function.
254
  *
293
 
294
  return true;
295
  }
296
+
297
+ /**
298
+ * Remove post views from database when post is deleted.
299
+ *
300
+ * @param int $post_id
301
+ */
302
+ public function delete_post_views( $post_id ) {
303
+ global $wpdb;
304
+
305
+ $wpdb->delete( $wpdb->prefix . 'post_views', array( 'id' => $post_id ), array( '%d' ) );
306
+ }
307
+
308
+ /**
309
+ *
310
+ * Get timestamp convertion.
311
+ *
312
+ * @param string $type
313
+ * @param int $number
314
+ * @param int $timestamp
315
+ * @return string
316
+ */
317
+ public function get_timestamp( $type, $number, $timestamp = true ) {
318
+ $converter = array(
319
+ 'minutes' => 60,
320
+ 'hours' => 3600,
321
+ 'days' => 86400,
322
+ 'weeks' => 604800,
323
+ 'months' => 2592000,
324
+ 'years' => 946080000
325
+ );
326
+
327
+ return ($timestamp ? current_time( 'timestamp', true ) : 0) + $number * $converter[$type];
328
+ }
329
+
330
+ /**
331
+ * Check if object cache is in use.
332
+ *
333
+ * @param bool $using
334
+ * @return bool
335
+ */
336
+ public function using_object_cache( $using = null ) {
337
+ $using = wp_using_ext_object_cache( $using );
338
+
339
+ if ( $using ) {
340
+ // check if explicitly disabled by flush_interval setting/option <= 0
341
+ $flush_interval_number = Post_Views_Counter()->options['general']['flush_interval']['number'];
342
+ $using = ( $flush_interval_number <= 0 ) ? false : true;
343
+ }
344
+
345
+ return $using;
346
+ }
347
 
348
  /**
349
  * Update the single cache key which holds a list of all the cache keys
includes/dashboard.php ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // exit if accessed directly
3
+ if ( ! defined( 'ABSPATH' ) )
4
+ exit;
5
+
6
+ /**
7
+ * Post_Views_Counter_Dashboard class.
8
+ */
9
+ class Post_Views_Counter_Dashboard {
10
+
11
+ public function __construct() {
12
+ // actions
13
+ add_action( 'wp_dashboard_setup', array( $this, 'wp_dashboard_setup' ) );
14
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts_styles' ) );
15
+ add_action( 'wp_ajax_pvc_dashboard_chart', array( $this, 'dashboard_widget_chart' ) );
16
+ }
17
+
18
+ /**
19
+ * Initialize widget.
20
+ */
21
+ public function wp_dashboard_setup() {
22
+ // filter user_can_see_stats
23
+ if ( ! apply_filters( 'pvc_user_can_see_stats', current_user_can( 'publish_posts' ) ) ) {
24
+ return;
25
+ }
26
+
27
+ // add dashboard widget
28
+ wp_add_dashboard_widget( 'pvc_dashboard', __( 'Post Views', 'post-views-counter' ), array( $this, 'dashboard_widget' ) /*, array( $this, 'dashboard_widget_control' ) */ );
29
+ }
30
+
31
+ /**
32
+ * Render dashboard widget.
33
+ *
34
+ * @return mixed
35
+ */
36
+ public function dashboard_widget() {
37
+ ?>
38
+ <div id="pvc_dashboard_container">
39
+ <canvas id="pvc_chart" height="175"></canvas>
40
+ </div>
41
+ <?php
42
+ }
43
+
44
+ /**
45
+ * Dashboard widget settings.
46
+ *
47
+ * @return mixed
48
+ */
49
+ public function dashboard_widget_control() {
50
+
51
+ }
52
+
53
+ /**
54
+ * Dashboard widget chart data function.
55
+ *
56
+ */
57
+ public function dashboard_widget_chart() {
58
+
59
+ if ( ! apply_filters( 'pvc_user_can_see_stats', current_user_can( 'publish_posts' ) ) )
60
+ wp_die( _( 'You do not have permission to access this page.', 'post-views-counter' ) );
61
+
62
+ if ( ! check_ajax_referer( 'dashboard-chart', 'nonce' ) )
63
+ wp_die( __( 'You do not have permission to access this page.', 'post-views-counter' ) );
64
+
65
+ $period = isset( $_REQUEST['period'] ) ? esc_attr( $_REQUEST['period'] ) : 'this_month';
66
+
67
+ $post_types = Post_Views_Counter()->options['general']['post_types_count'];
68
+
69
+ // get stats
70
+ $query_args = array(
71
+ 'post_type' => $post_types,
72
+ 'posts_per_page' => -1,
73
+ 'orderby' => 'post_views',
74
+ 'suppress_filters' => false
75
+ );
76
+
77
+ // set range
78
+ $range = 'this_month';
79
+ $now = getdate( current_time( 'timestamp', get_option( 'gmt_offset' ) ) );
80
+
81
+ // set chart labels
82
+ switch ( $range ) {
83
+ case 'this_week' :
84
+ $data = array(
85
+ 'text' => array(
86
+ 'xAxes' => date_i18n( 'F Y' ),
87
+ 'yAxes' => __( 'Post Views', 'post-views-counter' )
88
+ )
89
+ );
90
+
91
+ for ( $day = 0; $day <= 6; $day ++ ) {
92
+
93
+ $date = strtotime( $now['mday'] . '-' . $now['mon'] . '-' . $now['year'] . ' + ' . $day . ' days - ' . $now['wday'] . ' days' );
94
+ $query = new WP_Query( wp_parse_args( $query_args, array( 'views_query' => array( 'year' => date( 'Y', $date ), 'month' => date( 'n', $date ), 'day' => date( 'd', $date ) ) ) ) );
95
+
96
+ $data['data']['labels'][] = date_i18n( 'j', $date );
97
+ $data['data']['datasets'][$type_name]['label'] = __( 'Post Views', 'post-views-counter');
98
+ $data['data']['datasets'][0]['data'][] = $query->total_views;
99
+ }
100
+ break;
101
+
102
+ case 'this month' :
103
+ default :
104
+ $data = array(
105
+ 'text' => array(
106
+ 'xAxes' => date_i18n( 'F Y' ),
107
+ 'yAxes' => __( 'Post Views', 'post-views-counter' ),
108
+ ),
109
+ 'design' => array(
110
+ 'fill' => true,
111
+ 'backgroundColor' => 'rgba(50, 143, 186, 0.2)',
112
+ 'borderColor' => 'rgba(50, 143, 186, 1)',
113
+ 'borderWidth' => 2,
114
+ 'borderDash' => array(),
115
+ 'pointBorderColor' => 'rgba(50, 143, 186, 1)',
116
+ 'pointBackgroundColor' => 'rgba(255, 255, 255, 1)',
117
+ 'pointBorderWidth' => 1.2
118
+ )
119
+ );
120
+
121
+ $data['data']['datasets'][0]['label'] = __( 'Total Views', 'post-views-counter');
122
+
123
+ // get data for specific post types
124
+ $empty_post_type_views = array();
125
+
126
+ // reindex post types
127
+ $post_types = array_combine( range( 1, count( $post_types ) ), array_values( $post_types ) );
128
+
129
+ foreach ( $post_types as $id => $post_type ) {
130
+ $empty_post_type_views[$post_type] = 0;
131
+ $post_type_obj = get_post_type_object( $post_type );
132
+
133
+ $data['data']['datasets'][$id]['label'] = $post_type_obj->labels->name;
134
+ $data['data']['datasets'][$id]['data'] = array();
135
+ }
136
+
137
+ // reverse post types
138
+ $rev_post_types = array_flip( $post_types );
139
+
140
+ // this month day loop
141
+ for ( $i = 1; $i <= date( 't' ); $i++ ) {
142
+ $query = new WP_Query( wp_parse_args( $query_args, array( 'views_query' => array( 'year' => date( 'Y' ), 'month' => date( 'n' ), 'day' => str_pad( $i, 2, '0', STR_PAD_LEFT ) ) ) ) );
143
+
144
+ // get data for specific post types
145
+ $post_type_views = $empty_post_type_views;
146
+
147
+ if ( ! empty( $query->posts ) ) {
148
+ foreach ( $query->posts as $index => $post ) {
149
+ $post_type_views[$post->post_type] += $post->post_views;
150
+ }
151
+ }
152
+
153
+ // generate chart data
154
+ $data['data']['labels'][] = str_pad( $i, 2, '0', STR_PAD_LEFT );
155
+ $data['data']['dates'][] = date_i18n( get_option( 'date_format' ), strtotime( date( 'Y' ) . '-' . date( 'n' ) . '-' . str_pad( $i, 2, '0', STR_PAD_LEFT ) ) );
156
+ $data['data']['datasets'][0]['data'][] = $query->total_views;
157
+
158
+ // generate chart data for specific post types
159
+ foreach ( $post_type_views as $type_name => $type_views ) {
160
+ $data['data']['datasets'][$rev_post_types[$type_name]]['data'][] = $type_views;
161
+ }
162
+ }
163
+
164
+ break;
165
+ }
166
+
167
+ echo json_encode( $data );
168
+
169
+ exit;
170
+ }
171
+
172
+ /**
173
+ * Enqueue admin scripts and styles.
174
+ *
175
+ * @param string $pagenow
176
+ */
177
+ public function admin_scripts_styles( $pagenow ) {
178
+ if ( $pagenow != 'index.php' )
179
+ return;
180
+
181
+ // filter user_can_see_stats
182
+ if ( ! apply_filters( 'pvc_user_can_see_stats', current_user_can( 'publish_posts' ) ) ) {
183
+ return;
184
+ }
185
+
186
+ wp_register_style(
187
+ 'pvc-admin-dashboard', POST_VIEWS_COUNTER_URL . '/css/admin-dashboard.css'
188
+ );
189
+ wp_enqueue_style( 'pvc-admin-dashboard' );
190
+
191
+ wp_register_script(
192
+ 'pvc-admin-dashboard', POST_VIEWS_COUNTER_URL . '/js/admin-dashboard.js', array( 'jquery', 'pvc-chart' ), Post_Views_Counter()->defaults['version'], true
193
+ );
194
+
195
+ wp_register_script(
196
+ 'pvc-chart', POST_VIEWS_COUNTER_URL . '/js/chart.min.js', array( 'jquery' ), Post_Views_Counter()->defaults['version'], true
197
+ );
198
+
199
+ // set ajax args
200
+ $ajax_args = array(
201
+ 'ajaxURL' => admin_url( 'admin-ajax.php' ),
202
+ 'nonce' => wp_create_nonce( 'dashboard-chart' )
203
+ );
204
+
205
+ wp_enqueue_script( 'pvc-admin-dashboard' );
206
+ // wp_enqueue_script( 'pvc-chart' );
207
+
208
+ wp_localize_script(
209
+ 'pvc-admin-dashboard', 'pvcArgs', $ajax_args
210
+ );
211
+
212
+ }
213
+ }
includes/frontend.php CHANGED
@@ -48,34 +48,41 @@ class Post_Views_Counter_Frontend {
48
  * @return mixed
49
  */
50
  public function add_post_views_count( $content ) {
51
- if ( is_singular() && in_array( get_post_type(), Post_Views_Counter()->options['display']['post_types_display'], true ) ) {
52
-
53
- // get groups to check it faster
54
- $groups = Post_Views_Counter()->options['display']['restrict_display']['groups'];
55
-
56
- // whether to display views
57
- if ( is_user_logged_in() ) {
58
- // exclude logged in users?
59
- if ( in_array( 'users', $groups, true ) )
60
- return $content;
61
- // exclude specific roles?
62
- elseif ( in_array( 'roles', $groups, true ) && Post_Views_Counter()->_counter->is_user_roles_excluded( Post_Views_Counter()->options['display']['restrict_display']['roles'] ) )
63
- return $content;
64
- }
65
- // exclude guests?
66
- elseif ( in_array( 'guests', $groups, true ) )
67
- return $content;
 
 
 
68
 
 
 
69
  switch ( Post_Views_Counter()->options['display']['position'] ) {
70
  case 'after':
71
- return $content . '[post-views]';
 
72
 
73
  case 'before':
74
- return '[post-views]' . $content;
 
75
 
76
- default:
77
  case 'manual':
78
- return $content;
 
79
  }
80
  }
81
 
48
  * @return mixed
49
  */
50
  public function add_post_views_count( $content ) {
51
+ $display = false;
52
+
53
+ if ( is_singular() && in_array( get_post_type(), Post_Views_Counter()->options['display']['post_types_display'], true ) )
54
+ $display = true;
55
+
56
+ // get groups to check it faster
57
+ $groups = Post_Views_Counter()->options['display']['restrict_display']['groups'];
58
+
59
+ // whether to display views
60
+ if ( is_user_logged_in() ) {
61
+ // exclude logged in users?
62
+ if ( in_array( 'users', $groups, true ) )
63
+ $display = false;
64
+ // exclude specific roles?
65
+ elseif ( in_array( 'roles', $groups, true ) && Post_Views_Counter()->counter->is_user_roles_excluded( Post_Views_Counter()->options['display']['restrict_display']['roles'] ) )
66
+ $display = false;
67
+ }
68
+ // exclude guests?
69
+ elseif ( in_array( 'guests', $groups, true ) )
70
+ $display = false;
71
 
72
+
73
+ if ( apply_filters( 'pvc_display_views_count', $display ) === true ) {
74
  switch ( Post_Views_Counter()->options['display']['position'] ) {
75
  case 'after':
76
+ $content = $content . '[post-views]';
77
+ break;
78
 
79
  case 'before':
80
+ $content = '[post-views]' . $content;
81
+ break;
82
 
 
83
  case 'manual':
84
+ default:
85
+ break;
86
  }
87
  }
88
 
includes/functions.php CHANGED
@@ -53,7 +53,7 @@ if ( ! function_exists( 'pvc_post_views' ) ) {
53
 
54
  function pvc_post_views( $post_id = 0, $display = true ) {
55
  // get all data
56
- $post_id = (int) (empty( $post_id ) ? get_the_ID() : $post_id);
57
  $options = Post_Views_Counter()->options['display'];
58
  $views = pvc_get_post_views( $post_id );
59
 
@@ -122,14 +122,14 @@ if ( ! function_exists( 'pvc_most_viewed_posts' ) ) {
122
 
123
  function pvc_most_viewed_posts( $args = array(), $display = true ) {
124
  $defaults = array(
125
- 'number_of_posts' => 5,
126
- 'post_types' => array( 'post' ),
127
- 'order' => 'desc',
128
- 'thumbnail_size' => 'thumbnail',
129
- 'show_post_views' => true,
130
- 'show_post_thumbnail' => false,
131
- 'show_post_excerpt' => false,
132
- 'no_posts_message' => __( 'No Posts', 'post-views-counter' )
133
  );
134
 
135
  $args = apply_filters( 'pvc_most_viewed_posts_args', wp_parse_args( $args, $defaults ) );
@@ -142,7 +142,7 @@ if ( ! function_exists( 'pvc_most_viewed_posts' ) ) {
142
  array(
143
  'posts_per_page' => (isset( $args['number_of_posts'] ) ? (int) $args['number_of_posts'] : $defaults['number_of_posts']),
144
  'order' => (isset( $args['order'] ) ? $args['order'] : $defaults['order']),
145
- 'post_type' => (isset( $args['post_types'] ) ? $args['post_types'] : $defaults['post_types'])
146
  )
147
  );
148
 
@@ -202,3 +202,21 @@ if ( ! function_exists( 'pvc_most_viewed_posts' ) ) {
202
  }
203
 
204
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  function pvc_post_views( $post_id = 0, $display = true ) {
55
  // get all data
56
+ $post_id = (int) ( empty( $post_id ) ? get_the_ID() : $post_id );
57
  $options = Post_Views_Counter()->options['display'];
58
  $views = pvc_get_post_views( $post_id );
59
 
122
 
123
  function pvc_most_viewed_posts( $args = array(), $display = true ) {
124
  $defaults = array(
125
+ 'number_of_posts' => 5,
126
+ 'post_type' => array( 'post' ),
127
+ 'order' => 'desc',
128
+ 'thumbnail_size' => 'thumbnail',
129
+ 'show_post_views' => true,
130
+ 'show_post_thumbnail' => false,
131
+ 'show_post_excerpt' => false,
132
+ 'no_posts_message' => __( 'No Posts', 'post-views-counter' )
133
  );
134
 
135
  $args = apply_filters( 'pvc_most_viewed_posts_args', wp_parse_args( $args, $defaults ) );
142
  array(
143
  'posts_per_page' => (isset( $args['number_of_posts'] ) ? (int) $args['number_of_posts'] : $defaults['number_of_posts']),
144
  'order' => (isset( $args['order'] ) ? $args['order'] : $defaults['order']),
145
+ 'post_type' => (isset( $args['post_type'] ) ? $args['post_type'] : $defaults['post_type'])
146
  )
147
  );
148
 
202
  }
203
 
204
  }
205
+
206
+ /**
207
+ * View post manually function.
208
+ *
209
+ * @since 1.2.0
210
+ * @param int $post_id
211
+ * @return bool
212
+ */
213
+ function pvc_view_post( $post_id = 0 ) {
214
+ $post_id = (int) ( empty( $post_id ) ? get_the_ID() : $post_id );
215
+
216
+ if ( ! $post_id )
217
+ return false;
218
+
219
+ Post_Views_Counter()->counter->check_post( $post_id );
220
+
221
+ return true;
222
+ }
includes/query.php CHANGED
@@ -18,10 +18,11 @@ class Post_Views_Counter_Query {
18
  add_filter( 'posts_groupby', array( $this, 'posts_groupby' ), 10, 2 );
19
  add_filter( 'posts_orderby', array( $this, 'posts_orderby' ), 10, 2 );
20
  add_filter( 'posts_fields', array( $this, 'posts_fields' ), 10, 2 );
 
21
  }
22
 
23
  /**
24
- * Regiseter views_query var.
25
  *
26
  * @param array $query_vars
27
  * @return array
@@ -34,7 +35,7 @@ class Post_Views_Counter_Query {
34
 
35
  /**
36
  * Extend query with post_views orderby parameter.
37
- *
38
  * @param object $query
39
  */
40
  public function extend_pre_query( $query ) {
@@ -136,6 +137,9 @@ class Post_Views_Counter_Query {
136
 
137
  if ( strpos( $groupby, $wpdb->prefix . 'posts.ID' ) === false )
138
  $groupby = ( $groupby !== '' ? $groupby . ', ' : '') . $wpdb->prefix . 'posts.ID';
 
 
 
139
  }
140
 
141
  return $groupby;
@@ -155,7 +159,7 @@ class Post_Views_Counter_Query {
155
  global $wpdb;
156
 
157
  $order = $query->get( 'order' );
158
- $orderby = 'pvc.count ' . $order . ', ' . $wpdb->prefix . 'posts.ID ' . $order;
159
  }
160
 
161
  return $orderby;
@@ -170,11 +174,37 @@ class Post_Views_Counter_Query {
170
  */
171
  public function posts_fields( $fields, $query ) {
172
  if ( ( ! isset( $query->query['fields'] ) || $query->query['fields'] === '' ) && ( ( isset( $query->pvc_orderby ) && $query->pvc_orderby ) || ( isset( $query->pvc_query ) && $query->pvc_query ) || apply_filters( 'pvc_extend_post_object', false, $query ) === true ) )
173
- $fields = $fields . ', IFNULL( pvc.count, 0 ) AS post_views';
174
 
175
  return $fields;
176
  }
177
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  /**
179
  * Validate date helper function.
180
  *
18
  add_filter( 'posts_groupby', array( $this, 'posts_groupby' ), 10, 2 );
19
  add_filter( 'posts_orderby', array( $this, 'posts_orderby' ), 10, 2 );
20
  add_filter( 'posts_fields', array( $this, 'posts_fields' ), 10, 2 );
21
+ add_filter( 'the_posts', array( $this, 'the_posts' ), 10, 2 );
22
  }
23
 
24
  /**
25
+ * Register views_query var.
26
  *
27
  * @param array $query_vars
28
  * @return array
35
 
36
  /**
37
  * Extend query with post_views orderby parameter.
38
+ *
39
  * @param object $query
40
  */
41
  public function extend_pre_query( $query ) {
137
 
138
  if ( strpos( $groupby, $wpdb->prefix . 'posts.ID' ) === false )
139
  $groupby = ( $groupby !== '' ? $groupby . ', ' : '') . $wpdb->prefix . 'posts.ID';
140
+
141
+ if ( ! isset( $query->query['views_query']['hide_empty'] ) || $query->query['views_query']['hide_empty'] === true )
142
+ $groupby .= ' HAVING post_views > 0';
143
  }
144
 
145
  return $groupby;
159
  global $wpdb;
160
 
161
  $order = $query->get( 'order' );
162
+ $orderby = ( ! isset( $query->query['views_query']['hide_empty'] ) || $query->query['views_query']['hide_empty'] === true ? 'post_views' : 'pvc.count' ) . ' ' . $order . ', ' . $wpdb->prefix . 'posts.ID ' . $order;
163
  }
164
 
165
  return $orderby;
174
  */
175
  public function posts_fields( $fields, $query ) {
176
  if ( ( ! isset( $query->query['fields'] ) || $query->query['fields'] === '' ) && ( ( isset( $query->pvc_orderby ) && $query->pvc_orderby ) || ( isset( $query->pvc_query ) && $query->pvc_query ) || apply_filters( 'pvc_extend_post_object', false, $query ) === true ) )
177
+ $fields = $fields . ', SUM( IFNULL( pvc.count, 0 ) ) AS post_views';
178
 
179
  return $fields;
180
  }
181
 
182
+ /**
183
+ * Extend query object with total post views.
184
+ *
185
+ * @param array $posts
186
+ * @param object $query
187
+ * @return array
188
+ */
189
+ public function the_posts( $posts, $query ) {
190
+ if ( ( isset( $query->pvc_orderby ) && $query->pvc_orderby ) || ( isset( $query->pvc_query ) && $query->pvc_query ) || apply_filters( 'pvc_extend_post_object', false, $query ) === true ) {
191
+ $sum = 0;
192
+
193
+ // any posts found?
194
+ if ( ! empty( $posts ) ) {
195
+ foreach ( $posts as $post ) {
196
+ if ( ! empty( $post->post_views ) )
197
+ $sum += (int) $post->post_views;
198
+ }
199
+ }
200
+
201
+ // pass total views
202
+ $query->total_views = $sum;
203
+ }
204
+
205
+ return $posts;
206
+ }
207
+
208
  /**
209
  * Validate date helper function.
210
  *
includes/widgets.php CHANGED
@@ -45,15 +45,15 @@ class Post_Views_Counter_List_Widget extends WP_Widget {
45
  );
46
 
47
  $this->pvc_defaults = array(
48
- 'title' => __( 'Most Viewed Posts', 'post-views-counter' ),
49
- 'number_of_posts' => 5,
50
- 'thumbnail_size' => 'thumbnail',
51
- 'post_types' => array(),
52
- 'order' => 'desc',
53
- 'show_post_views' => true,
54
- 'show_post_thumbnail' => false,
55
- 'show_post_excerpt' => false,
56
- 'no_posts_message' => __( 'No Posts found', 'post-views-counter' )
57
  );
58
 
59
  $this->pvc_order_types = array(
@@ -103,7 +103,7 @@ class Post_Views_Counter_List_Widget extends WP_Widget {
103
 
104
  foreach ( $this->pvc_post_types as $post_type => $post_type_name ) {
105
  $html .= '
106
- <input id="' . $this->get_field_id( 'post_types' ) . '-' . $post_type . '" type="checkbox" name="' . $this->get_field_name( 'post_types' ) . '[]" value="' . $post_type . '" ' . checked( ( ! isset( $instance['post_types'] ) ? true : in_array( $post_type, $instance['post_types'], true ) ), true, false ) . '><label for="' . $this->get_field_id( 'post_types' ) . '-' . $post_type . '">' . esc_html( $post_type_name ) . '</label>';
107
  }
108
 
109
  $show_post_thumbnail = isset( $instance['show_post_thumbnail'] ) ? $instance['show_post_thumbnail'] : $this->pvc_defaults['show_post_thumbnail'];
@@ -179,17 +179,17 @@ class Post_Views_Counter_List_Widget extends WP_Widget {
179
  $old_instance['no_posts_message'] = sanitize_text_field( isset( $new_instance['no_posts_message'] ) ? $new_instance['no_posts_message'] : $this->pvc_defaults['no_posts_message'] );
180
 
181
  // post types
182
- if ( isset( $new_instance['post_types'] ) ) {
183
  $post_types = array();
184
 
185
- foreach ( $new_instance['post_types'] as $post_type ) {
186
  if ( isset( $this->pvc_post_types[$post_type] ) )
187
  $post_types[] = $post_type;
188
  }
189
 
190
- $old_instance['post_types'] = array_unique( $post_types );
191
  } else
192
- $old_instance['post_types'] = array( 'post' );
193
 
194
  return $old_instance;
195
  }
45
  );
46
 
47
  $this->pvc_defaults = array(
48
+ 'title' => __( 'Most Viewed Posts', 'post-views-counter' ),
49
+ 'number_of_posts' => 5,
50
+ 'thumbnail_size' => 'thumbnail',
51
+ 'post_type' => array(),
52
+ 'order' => 'desc',
53
+ 'show_post_views' => true,
54
+ 'show_post_thumbnail' => false,
55
+ 'show_post_excerpt' => false,
56
+ 'no_posts_message' => __( 'No Posts found', 'post-views-counter' )
57
  );
58
 
59
  $this->pvc_order_types = array(
103
 
104
  foreach ( $this->pvc_post_types as $post_type => $post_type_name ) {
105
  $html .= '
106
+ <input id="' . $this->get_field_id( 'post_type' ) . '-' . $post_type . '" type="checkbox" name="' . $this->get_field_name( 'post_type' ) . '[]" value="' . $post_type . '" ' . checked( ( ! isset( $instance['post_type'] ) ? true : in_array( $post_type, $instance['post_type'], true ) ), true, false ) . '><label for="' . $this->get_field_id( 'post_type' ) . '-' . $post_type . '">' . esc_html( $post_type_name ) . '</label>';
107
  }
108
 
109
  $show_post_thumbnail = isset( $instance['show_post_thumbnail'] ) ? $instance['show_post_thumbnail'] : $this->pvc_defaults['show_post_thumbnail'];
179
  $old_instance['no_posts_message'] = sanitize_text_field( isset( $new_instance['no_posts_message'] ) ? $new_instance['no_posts_message'] : $this->pvc_defaults['no_posts_message'] );
180
 
181
  // post types
182
+ if ( isset( $new_instance['post_type'] ) ) {
183
  $post_types = array();
184
 
185
+ foreach ( $new_instance['post_type'] as $post_type ) {
186
  if ( isset( $this->pvc_post_types[$post_type] ) )
187
  $post_types[] = $post_type;
188
  }
189
 
190
+ $old_instance['post_type'] = array_unique( $post_types );
191
  } else
192
+ $old_instance['post_type'] = array( 'post' );
193
 
194
  return $old_instance;
195
  }
js/admin-dashboard.js ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function ( $ ) {
2
+
3
+ // set global options
4
+ // Chart.defaults.global.tooltips.titleMarginBottom = 0;
5
+ // Chart.defaults.global.tooltips.footerMarginTop = 4;
6
+
7
+ window.onload = function() {
8
+ updateChart( 'this_month' );
9
+ };
10
+
11
+ function updateChart( period ) {
12
+
13
+ var container = document.getElementById( 'pvc_dashboard_container' );
14
+
15
+ if ( $( container ).length > 0 ) {
16
+
17
+ $( container ).addClass( 'loading' ).append( '<span class="spinner is-active"></span>' );
18
+
19
+ $.ajax( {
20
+ url: pvcArgs.ajaxURL,
21
+ type: 'POST',
22
+ dataType: 'json',
23
+ data: ( {
24
+ action : 'pvc_dashboard_chart',
25
+ nonce : pvcArgs.nonce,
26
+ period : period
27
+ } ),
28
+ success: function ( args ) {
29
+
30
+ $( container ).removeClass( 'loading' );
31
+ $( container ).find( '.spinner' ).removeClass( 'is-active' );
32
+
33
+ var config = {
34
+ type: 'line',
35
+ data: args.data,
36
+ options: {
37
+ responsive: true,
38
+ legend: {
39
+ display: false,
40
+ position: 'bottom',
41
+ },
42
+ scales: {
43
+ xAxes: [{
44
+ display: true,
45
+ scaleLabel: {
46
+ display: true,
47
+ labelString: args.text.xAxes
48
+ }
49
+ }],
50
+ yAxes: [{
51
+ display: true,
52
+ scaleLabel: {
53
+ display: false,
54
+ labelString: args.text.yAxes
55
+ }
56
+ }]
57
+ },
58
+ hover: {
59
+ mode: 'label'
60
+ },
61
+ tooltips: {
62
+ custom: function( tooltip ) {
63
+ // console.log( tooltip );
64
+ },
65
+ callbacks: {
66
+ title: function( tooltip ) {
67
+ return args.data.dates[tooltip[0].index];
68
+ }
69
+ }
70
+ }
71
+ }
72
+ };
73
+
74
+ $.each( config.data.datasets, function ( i, dataset ) {
75
+ dataset.fill = args.design.fill;
76
+ dataset.borderColor = args.design.borderColor;
77
+ dataset.backgroundColor = args.design.backgroundColor;
78
+ dataset.borderWidth = args.design.borderWidth;
79
+ dataset.borderDash = args.design.borderDash;
80
+ dataset.pointBorderColor = args.design.pointBorderColor;
81
+ dataset.pointBackgroundColor = args.design.pointBackgroundColor;
82
+ dataset.pointBorderWidth = args.design.pointBorderWidth;
83
+ } );
84
+
85
+ window.chartPVC = new Chart( document.getElementById( 'pvc_chart' ).getContext( '2d' ), config );
86
+ }
87
+ } );
88
+
89
+ }
90
+ }
91
+
92
+ function updateLegend() {
93
+ $legendContainer = $( '#legendContainer' );
94
+ $legendContainer.empty();
95
+ $legendContainer.append( window.chartPVC.generateLegend() );
96
+ }
97
+
98
+ } )( jQuery );
js/chart.min.js ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ !function(t,e){"function"==typeof define&&define.amd?define(["moment"],e):"object"==typeof exports?module.exports=e.call(t,require("moment")):t.Chart=e.call(t,t.moment)}(this||window,function(t){/*!
2
+ * Chart.js
3
+ * http://chartjs.org/
4
+ * Version: 2.0.0-beta2
5
+ *
6
+ * Copyright 2015 Nick Downie
7
+ * Released under the MIT license
8
+ * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md
9
+ */
10
+ /*!
11
+ * Chart.js
12
+ * http://chartjs.org/
13
+ * Version: 2.0.0-beta2
14
+ *
15
+ * Copyright 2015 Nick Downie
16
+ * Released under the MIT license
17
+ * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md
18
+ */
19
+ /*!
20
+ * Chart.js
21
+ * http://chartjs.org/
22
+ * Version: 2.0.0-beta2
23
+ *
24
+ * Copyright 2015 Nick Downie
25
+ * Released under the MIT license
26
+ * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md
27
+ */
28
+ /*!
29
+ * Chart.js
30
+ * http://chartjs.org/
31
+ * Version: 2.0.0-beta2
32
+ *
33
+ * Copyright 2015 Nick Downie
34
+ * Released under the MIT license
35
+ * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md
36
+ */
37
+ return!function e(t,i,s){function a(n,r){if(!i[n]){if(!t[n]){var h="function"==typeof require&&require;if(!r&&h)return h(n,!0);if(o)return o(n,!0);var l=new Error("Cannot find module '"+n+"'");throw l.code="MODULE_NOT_FOUND",l}var c=i[n]={exports:{}};t[n][0].call(c.exports,function(e){var i=t[n][1][e];return a(i?i:e)},c,c.exports,e,t,i,s)}return i[n].exports}for(var o="function"==typeof require&&require,n=0;n<s.length;n++)a(s[n]);return a}({1:[function(t,e,i){!function(){var i=t("color-convert"),s=t("color-string"),a=function(t){if(t instanceof a)return t;if(!(this instanceof a))return new a(t);if(this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},"string"==typeof t){var e=s.getRgba(t);if(e)this.setValues("rgb",e);else if(e=s.getHsla(t))this.setValues("hsl",e);else{if(!(e=s.getHwb(t)))throw new Error('Unable to parse color from string "'+t+'"');this.setValues("hwb",e)}}else if("object"==typeof t){var e=t;if(void 0!==e.r||void 0!==e.red)this.setValues("rgb",e);else if(void 0!==e.l||void 0!==e.lightness)this.setValues("hsl",e);else if(void 0!==e.v||void 0!==e.value)this.setValues("hsv",e);else if(void 0!==e.w||void 0!==e.whiteness)this.setValues("hwb",e);else{if(void 0===e.c&&void 0===e.cyan)throw new Error("Unable to parse color from object "+JSON.stringify(t));this.setValues("cmyk",e)}}};a.prototype={rgb:function(t){return this.setSpace("rgb",arguments)},hsl:function(t){return this.setSpace("hsl",arguments)},hsv:function(t){return this.setSpace("hsv",arguments)},hwb:function(t){return this.setSpace("hwb",arguments)},cmyk:function(t){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){return 1!==this.values.alpha?this.values.hwb.concat([this.values.alpha]):this.values.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values.rgb;return t.concat([this.values.alpha])},hslaArray:function(){var t=this.values.hsl;return t.concat([this.values.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return s.hexString(this.values.rgb)},rgbString:function(){return s.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return s.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return s.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return s.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return s.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return s.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return s.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){return this.values.rgb[0]<<16|this.values.rgb[1]<<8|this.values.rgb[2]},luminosity:function(){for(var t=this.values.rgb,e=[],i=0;i<t.length;i++){var s=t[i]/255;e[i]=.03928>=s?s/12.92:Math.pow((s+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),i=t.luminosity();return e>i?(e+.05)/(i+.05):(i+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb,e=(299*t[0]+587*t[1]+114*t[2])/1e3;return 128>e},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;3>e;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){return this.values.hsl[2]+=this.values.hsl[2]*t,this.setValues("hsl",this.values.hsl),this},darken:function(t){return this.values.hsl[2]-=this.values.hsl[2]*t,this.setValues("hsl",this.values.hsl),this},saturate:function(t){return this.values.hsl[1]+=this.values.hsl[1]*t,this.setValues("hsl",this.values.hsl),this},desaturate:function(t){return this.values.hsl[1]-=this.values.hsl[1]*t,this.setValues("hsl",this.values.hsl),this},whiten:function(t){return this.values.hwb[1]+=this.values.hwb[1]*t,this.setValues("hwb",this.values.hwb),this},blacken:function(t){return this.values.hwb[2]+=this.values.hwb[2]*t,this.setValues("hwb",this.values.hwb),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){return this.setValues("alpha",this.values.alpha-this.values.alpha*t),this},opaquer:function(t){return this.setValues("alpha",this.values.alpha+this.values.alpha*t),this},rotate:function(t){var e=this.values.hsl[0];return e=(e+t)%360,e=0>e?360+e:e,this.values.hsl[0]=e,this.setValues("hsl",this.values.hsl),this},mix:function(t,e){e=1-(null==e?.5:e);for(var i=2*e-1,s=this.alpha()-t.alpha(),a=((i*s==-1?i:(i+s)/(1+i*s))+1)/2,o=1-a,n=this.rgbArray(),r=t.rgbArray(),h=0;h<n.length;h++)n[h]=n[h]*a+r[h]*o;this.setValues("rgb",n);var l=this.alpha()*e+t.alpha()*(1-e);return this.setValues("alpha",l),this},toJSON:function(){return this.rgb()},clone:function(){return new a(this.rgb())}},a.prototype.getValues=function(t){for(var e={},i=0;i<t.length;i++)e[t.charAt(i)]=this.values[t][i];return 1!=this.values.alpha&&(e.a=this.values.alpha),e},a.prototype.setValues=function(t,e){var s={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},a={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},o=1;if("alpha"==t)o=e;else if(e.length)this.values[t]=e.slice(0,t.length),o=e[t.length];else if(void 0!==e[t.charAt(0)]){for(var n=0;n<t.length;n++)this.values[t][n]=e[t.charAt(n)];o=e.a}else if(void 0!==e[s[t][0]]){for(var r=s[t],n=0;n<t.length;n++)this.values[t][n]=e[r[n]];o=e.alpha}if(this.values.alpha=Math.max(0,Math.min(1,void 0!==o?o:this.values.alpha)),"alpha"!=t){for(var n=0;n<t.length;n++){var h=Math.max(0,Math.min(a[t][n],this.values[t][n]));this.values[t][n]=Math.round(h)}for(var l in s){l!=t&&(this.values[l]=i[t][l](this.values[t]));for(var n=0;n<l.length;n++){var h=Math.max(0,Math.min(a[l][n],this.values[l][n]));this.values[l][n]=Math.round(h)}}return!0}},a.prototype.setSpace=function(t,e){var i=e[0];return void 0===i?this.getValues(t):("number"==typeof i&&(i=Array.prototype.slice.call(e)),this.setValues(t,i),this)},a.prototype.setChannel=function(t,e,i){return void 0===i?this.values[t][e]:(this.values[t][e]=i,this.setValues(t,this.values[t]),this)},window.Color=e.exports=a}()},{"color-convert":3,"color-string":4}],2:[function(t,e,i){function s(t){var e,i,s,a=t[0]/255,o=t[1]/255,n=t[2]/255,r=Math.min(a,o,n),h=Math.max(a,o,n),l=h-r;return h==r?e=0:a==h?e=(o-n)/l:o==h?e=2+(n-a)/l:n==h&&(e=4+(a-o)/l),e=Math.min(60*e,360),0>e&&(e+=360),s=(r+h)/2,i=h==r?0:.5>=s?l/(h+r):l/(2-h-r),[e,100*i,100*s]}function a(t){var e,i,s,a=t[0],o=t[1],n=t[2],r=Math.min(a,o,n),h=Math.max(a,o,n),l=h-r;return i=0==h?0:l/h*1e3/10,h==r?e=0:a==h?e=(o-n)/l:o==h?e=2+(n-a)/l:n==h&&(e=4+(a-o)/l),e=Math.min(60*e,360),0>e&&(e+=360),s=h/255*1e3/10,[e,i,s]}function o(t){var e=t[0],i=t[1],a=t[2],o=s(t)[0],n=1/255*Math.min(e,Math.min(i,a)),a=1-1/255*Math.max(e,Math.max(i,a));return[o,100*n,100*a]}function n(t){var e,i,s,a,o=t[0]/255,n=t[1]/255,r=t[2]/255;return a=Math.min(1-o,1-n,1-r),e=(1-o-a)/(1-a)||0,i=(1-n-a)/(1-a)||0,s=(1-r-a)/(1-a)||0,[100*e,100*i,100*s,100*a]}function h(t){return G[JSON.stringify(t)]}function l(t){var e=t[0]/255,i=t[1]/255,s=t[2]/255;e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92,i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92,s=s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92;var a=.4124*e+.3576*i+.1805*s,o=.2126*e+.7152*i+.0722*s,n=.0193*e+.1192*i+.9505*s;return[100*a,100*o,100*n]}function c(t){var e,i,s,a=l(t),o=a[0],n=a[1],r=a[2];return o/=95.047,n/=100,r/=108.883,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,n=n>.008856?Math.pow(n,1/3):7.787*n+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,e=116*n-16,i=500*(o-n),s=200*(n-r),[e,i,s]}function d(t){return B(c(t))}function u(t){var e,i,s,a,o,n=t[0]/360,r=t[1]/100,h=t[2]/100;if(0==r)return o=255*h,[o,o,o];i=.5>h?h*(1+r):h+r-h*r,e=2*h-i,a=[0,0,0];for(var l=0;3>l;l++)s=n+1/3*-(l-1),0>s&&s++,s>1&&s--,o=1>6*s?e+6*(i-e)*s:1>2*s?i:2>3*s?e+(i-e)*(2/3-s)*6:e,a[l]=255*o;return a}function m(t){var e,i,s=t[0],a=t[1]/100,o=t[2]/100;return o*=2,a*=1>=o?o:2-o,i=(o+a)/2,e=2*a/(o+a),[s,100*e,100*i]}function p(t){return o(u(t))}function f(t){return n(u(t))}function x(t){return h(u(t))}function v(t){var e=t[0]/60,i=t[1]/100,s=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),n=255*s*(1-i),r=255*s*(1-i*o),h=255*s*(1-i*(1-o)),s=255*s;switch(a){case 0:return[s,h,n];case 1:return[r,s,n];case 2:return[n,s,h];case 3:return[n,r,s];case 4:return[h,n,s];case 5:return[s,n,r]}}function y(t){var e,i,s=t[0],a=t[1]/100,o=t[2]/100;return i=(2-a)*o,e=a*o,e/=1>=i?i:2-i,e=e||0,i/=2,[s,100*e,100*i]}function k(t){return o(v(t))}function S(t){return n(v(t))}function D(t){return h(v(t))}function C(t){var e,i,s,a,o=t[0]/360,n=t[1]/100,h=t[2]/100,l=n+h;switch(l>1&&(n/=l,h/=l),e=Math.floor(6*o),i=1-h,s=6*o-e,0!=(1&e)&&(s=1-s),a=n+s*(i-n),e){default:case 6:case 0:r=i,g=a,b=n;break;case 1:r=a,g=i,b=n;break;case 2:r=n,g=i,b=a;break;case 3:r=n,g=a,b=i;break;case 4:r=a,g=n,b=i;break;case 5:r=i,g=n,b=a}return[255*r,255*g,255*b]}function w(t){return s(C(t))}function _(t){return a(C(t))}function A(t){return n(C(t))}function M(t){return h(C(t))}function I(t){var e,i,s,a=t[0]/100,o=t[1]/100,n=t[2]/100,r=t[3]/100;return e=1-Math.min(1,a*(1-r)+r),i=1-Math.min(1,o*(1-r)+r),s=1-Math.min(1,n*(1-r)+r),[255*e,255*i,255*s]}function P(t){return s(I(t))}function T(t){return a(I(t))}function F(t){return o(I(t))}function R(t){return h(I(t))}function L(t){var e,i,s,a=t[0]/100,o=t[1]/100,n=t[2]/100;return e=3.2406*a+-1.5372*o+n*-.4986,i=a*-.9689+1.8758*o+.0415*n,s=.0557*a+o*-.204+1.057*n,e=e>.0031308?1.055*Math.pow(e,1/2.4)-.055:e=12.92*e,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i=12.92*i,s=s>.0031308?1.055*Math.pow(s,1/2.4)-.055:s=12.92*s,e=Math.min(Math.max(0,e),1),i=Math.min(Math.max(0,i),1),s=Math.min(Math.max(0,s),1),[255*e,255*i,255*s]}function W(t){var e,i,s,a=t[0],o=t[1],n=t[2];return a/=95.047,o/=100,n/=108.883,a=a>.008856?Math.pow(a,1/3):7.787*a+16/116,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,n=n>.008856?Math.pow(n,1/3):7.787*n+16/116,e=116*o-16,i=500*(a-o),s=200*(o-n),[e,i,s]}function z(t){return B(W(t))}function V(t){var e,i,s,a,o=t[0],n=t[1],r=t[2];return 8>=o?(i=100*o/903.3,a=7.787*(i/100)+16/116):(i=100*Math.pow((o+16)/116,3),a=Math.pow(i/100,1/3)),e=.008856>=e/95.047?e=95.047*(n/500+a-16/116)/7.787:95.047*Math.pow(n/500+a,3),s=.008859>=s/108.883?s=108.883*(a-r/200-16/116)/7.787:108.883*Math.pow(a-r/200,3),[e,i,s]}function B(t){var e,i,s,a=t[0],o=t[1],n=t[2];return e=Math.atan2(n,o),i=360*e/2/Math.PI,0>i&&(i+=360),s=Math.sqrt(o*o+n*n),[a,s,i]}function O(t){return L(V(t))}function N(t){var e,i,s,a=t[0],o=t[1],n=t[2];return s=n/360*2*Math.PI,e=o*Math.cos(s),i=o*Math.sin(s),[a,e,i]}function H(t){return V(N(t))}function E(t){return O(N(t))}function j(t){return X[t]}function q(t){return s(j(t))}function U(t){return a(j(t))}function Y(t){return o(j(t))}function Q(t){return n(j(t))}function J(t){return c(j(t))}function Z(t){return l(j(t))}e.exports={rgb2hsl:s,rgb2hsv:a,rgb2hwb:o,rgb2cmyk:n,rgb2keyword:h,rgb2xyz:l,rgb2lab:c,rgb2lch:d,hsl2rgb:u,hsl2hsv:m,hsl2hwb:p,hsl2cmyk:f,hsl2keyword:x,hsv2rgb:v,hsv2hsl:y,hsv2hwb:k,hsv2cmyk:S,hsv2keyword:D,hwb2rgb:C,hwb2hsl:w,hwb2hsv:_,hwb2cmyk:A,hwb2keyword:M,cmyk2rgb:I,cmyk2hsl:P,cmyk2hsv:T,cmyk2hwb:F,cmyk2keyword:R,keyword2rgb:j,keyword2hsl:q,keyword2hsv:U,keyword2hwb:Y,keyword2cmyk:Q,keyword2lab:J,keyword2xyz:Z,xyz2rgb:L,xyz2lab:W,xyz2lch:z,lab2xyz:V,lab2rgb:O,lab2lch:B,lch2lab:N,lch2xyz:H,lch2rgb:E};var X={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],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],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},G={};for(var $ in X)G[JSON.stringify(X[$])]=$},{}],3:[function(t,e,i){var s=t("./conversions"),a=function(){return new l};for(var o in s){a[o+"Raw"]=function(t){return function(e){return"number"==typeof e&&(e=Array.prototype.slice.call(arguments)),s[t](e)}}(o);var n=/(\w+)2(\w+)/.exec(o),r=n[1],h=n[2];a[r]=a[r]||{},a[r][h]=a[o]=function(t){return function(e){"number"==typeof e&&(e=Array.prototype.slice.call(arguments));var i=s[t](e);if("string"==typeof i||void 0===i)return i;for(var a=0;a<i.length;a++)i[a]=Math.round(i[a]);return i}}(o)}var l=function(){this.convs={}};l.prototype.routeSpace=function(t,e){var i=e[0];return void 0===i?this.getValues(t):("number"==typeof i&&(i=Array.prototype.slice.call(e)),this.setValues(t,i))},l.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},l.prototype.getValues=function(t){var e=this.convs[t];if(!e){var i=this.space,s=this.convs[i];e=a[i][t](s),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(t){l.prototype[t]=function(e){return this.routeSpace(t,arguments)}}),e.exports=a},{"./conversions":2}],4:[function(t,e,i){function s(t){if(t){var e=/^#([a-fA-F0-9]{3})$/,i=/^#([a-fA-F0-9]{6})$/,s=/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,a=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,o=/(\w+)/,n=[0,0,0],r=1,h=t.match(e);if(h){h=h[1];for(var l=0;l<n.length;l++)n[l]=parseInt(h[l]+h[l],16)}else if(h=t.match(i)){h=h[1];for(var l=0;l<n.length;l++)n[l]=parseInt(h.slice(2*l,2*l+2),16)}else if(h=t.match(s)){for(var l=0;l<n.length;l++)n[l]=parseInt(h[l+1]);r=parseFloat(h[4])}else if(h=t.match(a)){for(var l=0;l<n.length;l++)n[l]=Math.round(2.55*parseFloat(h[l+1]));r=parseFloat(h[4])}else if(h=t.match(o)){if("transparent"==h[1])return[0,0,0,0];if(n=y[h[1]],!n)return}for(var l=0;l<n.length;l++)n[l]=x(n[l],0,255);return r=r||0==r?x(r,0,1):1,n[3]=r,n}}function a(t){if(t){var e=/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,i=t.match(e);if(i){var s=parseFloat(i[4]),a=x(parseInt(i[1]),0,360),o=x(parseFloat(i[2]),0,100),n=x(parseFloat(i[3]),0,100),r=x(isNaN(s)?1:s,0,1);return[a,o,n,r]}}}function o(t){if(t){var e=/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,i=t.match(e);if(i){var s=parseFloat(i[4]),a=x(parseInt(i[1]),0,360),o=x(parseFloat(i[2]),0,100),n=x(parseFloat(i[3]),0,100),r=x(isNaN(s)?1:s,0,1);return[a,o,n,r]}}}function n(t){var e=s(t);return e&&e.slice(0,3)}function r(t){var e=a(t);return e&&e.slice(0,3)}function h(t){var e=s(t);return e?e[3]:(e=a(t))?e[3]:(e=o(t))?e[3]:void 0}function l(t){return"#"+v(t[0])+v(t[1])+v(t[2])}function c(t,e){return 1>e||t[3]&&t[3]<1?d(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"}function d(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function u(t,e){if(1>e||t[3]&&t[3]<1)return g(t,e);var i=Math.round(t[0]/255*100),s=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+i+"%, "+s+"%, "+a+"%)"}function g(t,e){var i=Math.round(t[0]/255*100),s=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgba("+i+"%, "+s+"%, "+a+"%, "+(e||t[3]||1)+")"}function m(t,e){return 1>e||t[3]&&t[3]<1?p(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function f(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"}function b(t){return k[t.slice(0,3)]}function x(t,e,i){return Math.min(Math.max(e,t),i)}function v(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var y=t("color-name");e.exports={getRgba:s,getHsla:a,getRgb:n,getHsl:r,getHwb:o,getAlpha:h,hexString:l,rgbString:c,rgbaString:d,percentString:u,percentaString:g,hslString:m,hslaString:p,hwbString:f,keyword:b};var k={};for(var S in y)k[y[S]]=S},{"color-name":5}],5:[function(t,e,i){e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],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],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}]},{},[1]),function(){"use strict";var t=this,e=t.Chart,i=function(t,e){this.config=e,t.length&&t[0].getContext&&(t=t[0]),t.getContext&&(t=t.getContext("2d")),this.ctx=t,this.canvas=t.canvas,this.width=t.canvas.width||parseInt(i.helpers.getStyle(t.canvas,"width"))||i.helpers.getMaximumWidth(t.canvas),this.height=t.canvas.height||parseInt(i.helpers.getStyle(t.canvas,"height"))||i.helpers.getMaximumHeight(t.canvas),this.aspectRatio=this.width/this.height,(isNaN(this.aspectRatio)||isFinite(this.aspectRatio)===!1)&&(this.aspectRatio=void 0!==e.aspectRatio?e.aspectRatio:2),this.originalCanvasStyleWidth=t.canvas.style.width,this.originalCanvasStyleHeight=t.canvas.style.height,i.helpers.retinaScale(this),e&&(this.controller=new i.Controller(this));var s=this;return i.helpers.addResizeListener(t.canvas.parentNode,function(){s.controller&&s.controller.config.options.responsive&&s.controller.resize()}),this.controller?this.controller:this};i.defaults={global:{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"single",animationDuration:400},onClick:null,defaultColor:"rgba(0,0,0,0.1)",elements:{},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var i=0;i<t.data.datasets.length;i++)e.push('<li><span style="background-color:'+t.data.datasets[i].backgroundColor+'">'),t.data.datasets[i].label&&e.push(t.data.datasets[i].label),e.push("</span></li>");return e.push("</ul>"),e.join("")}}},t.Chart=i,i.noConflict=function(){return t.Chart=e,i}}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers={};i.each=function(t,e,s,a){var o,n;if(i.isArray(t))if(n=t.length,a)for(o=n-1;o>=0;o--)e.call(s,t[o],o);else for(o=0;n>o;o++)e.call(s,t[o],o);else if("object"==typeof t){var r=Object.keys(t);for(n=r.length,o=0;n>o;o++)e.call(s,t[r[o]],r[o])}},i.clone=function(t){var e={};return i.each(t,function(s,a){t.hasOwnProperty(a)&&(i.isArray(s)?e[a]=s.slice(0):"object"==typeof s&&null!==s?e[a]=i.clone(s):e[a]=s)}),e},i.extend=function(t){for(var e=arguments.length,s=[],a=1;e>a;a++)s.push(arguments[a]);return i.each(s,function(e){i.each(e,function(i,s){e.hasOwnProperty(s)&&(t[s]=i)})}),t},i.configMerge=function(t){var s=i.clone(t);return i.each(Array.prototype.slice.call(arguments,1),function(t){i.each(t,function(a,o){if(t.hasOwnProperty(o))if("scales"===o)s[o]=i.scaleMerge(s.hasOwnProperty(o)?s[o]:{},a);else if("scale"===o)s[o]=i.configMerge(s.hasOwnProperty(o)?s[o]:{},e.scaleService.getScaleDefaults(a.type),a);else if(s.hasOwnProperty(o)&&i.isArray(s[o])&&i.isArray(a)){var n=s[o];i.each(a,function(t,e){e<n.length?"object"==typeof n[e]&&null!==n[e]&&"object"==typeof t&&null!==t?n[e]=i.configMerge(n[e],t):n[e]=t:n.push(t)})}else s.hasOwnProperty(o)&&"object"==typeof s[o]&&null!==s[o]&&"object"==typeof a?s[o]=i.configMerge(s[o],a):s[o]=a})}),s},i.extendDeep=function(t){function e(t){return i.each(arguments,function(s){s!==t&&i.each(s,function(i,s){t[s]&&t[s].constructor&&t[s].constructor===Object?e(t[s],i):t[s]=i})}),t}return e.apply(this,arguments)},i.scaleMerge=function(t,s){var a=i.clone(t);return i.each(s,function(t,o){s.hasOwnProperty(o)&&("xAxes"===o||"yAxes"===o?a.hasOwnProperty(o)?i.each(t,function(t,s){s>=a[o].length||!a[o][s].type?a[o].push(i.configMerge(t.type?e.scaleService.getScaleDefaults(t.type):{},t)):t.type!==a[o][s].type?a[o][s]=i.configMerge(a[o][s],t.type?e.scaleService.getScaleDefaults(t.type):{},t):a[o][s]=i.configMerge(a[o][s],t)}):(a[o]=[],i.each(t,function(t){a[o].push(i.configMerge(t.type?e.scaleService.getScaleDefaults(t.type):{},t))})):a.hasOwnProperty(o)&&"object"==typeof a[o]&&null!==a[o]&&"object"==typeof t?a[o]=i.configMerge(a[o],t):a[o]=t)}),a},i.getValueAtIndexOrDefault=function(t,e,s){return void 0===t||null===t?s:i.isArray(t)?e<t.length?t[e]:s:t},i.getValueOrDefault=function(t,e){return void 0===t?e:t},i.indexOf=function(t,e){if(Array.prototype.indexOf)return t.indexOf(e);for(var i=0;i<t.length;i++)if(t[i]===e)return i;return-1},i.where=function(t,e){var s=[];return i.each(t,function(t){e(t)&&s.push(t)}),s},i.findNextWhere=function(t,e,i){(void 0===i||null===i)&&(i=-1);for(var s=i+1;s<t.length;s++){var a=t[s];if(e(a))return a}},i.findPreviousWhere=function(t,e,i){(void 0===i||null===i)&&(i=t.length);for(var s=i-1;s>=0;s--){var a=t[s];if(e(a))return a}},i.inherits=function(t){var e=this,s=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},a=function(){this.constructor=s};return a.prototype=e.prototype,s.prototype=new a,s.extend=i.inherits,t&&i.extend(s.prototype,t),s.__super__=e.prototype,s},i.noop=function(){},i.uid=function(){var t=0;return function(){return"chart-"+t++}}(),i.warn=function(t){console&&"function"==typeof console.warn&&console.warn(t)},i.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},i.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},i.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},i.sign=function(t){return Math.sign?Math.sign(t):(t=+t,0===t||isNaN(t)?t:t>0?1:-1)},i.log10=function(t){return Math.log10?Math.log10(t):Math.log(t)/Math.LN10},i.toRadians=function(t){return t*(Math.PI/180)},i.toDegrees=function(t){return t*(180/Math.PI)},i.getAngleFromPoint=function(t,e){var i=e.x-t.x,s=e.y-t.y,a=Math.sqrt(i*i+s*s),o=Math.atan2(s,i);return o<-.5*Math.PI&&(o+=2*Math.PI),{angle:o,distance:a}},i.aliasPixel=function(t){return t%2===0?0:.5},i.splineCurve=function(t,e,i,s){var a=t.skip?e:t,o=e,n=i.skip?e:i,r=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),h=Math.sqrt(Math.pow(n.x-o.x,2)+Math.pow(n.y-o.y,2)),l=r/(r+h),c=h/(r+h);l=isNaN(l)?0:l,c=isNaN(c)?0:c;var d=s*l,u=s*c;return{previous:{x:o.x-d*(n.x-a.x),y:o.y-d*(n.y-a.y)},next:{x:o.x+u*(n.x-a.x),y:o.y+u*(n.y-a.y)}}},i.nextItem=function(t,e,i){return i?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},i.previousItem=function(t,e,i){return i?0>=e?t[t.length-1]:t[e-1]:0>=e?t[0]:t[e-1]},i.niceNum=function(t,e){var s,a=Math.floor(i.log10(t)),o=t/Math.pow(10,a);return s=e?1.5>o?1:3>o?2:7>o?5:10:1>=o?1:2>=o?2:5>=o?5:10,s*Math.pow(10,a)};var s=i.easingEffects={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-1*t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-0.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return 1*((t=t/1-1)*t*t+1)},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-1*((t=t/1-1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-0.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return 1*(t/=1)*t*t*t*t},easeOutQuint:function(t){return 1*((t=t/1-1)*t*t*t*t+1)},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return-1*Math.cos(t/1*(Math.PI/2))+1},easeOutSine:function(t){return 1*Math.sin(t/1*(Math.PI/2))},easeInOutSine:function(t){return-0.5*(Math.cos(Math.PI*t/1)-1)},easeInExpo:function(t){return 0===t?1:1*Math.pow(2,10*(t/1-1))},easeOutExpo:function(t){return 1===t?1:1*(-Math.pow(2,-10*t/1)+1)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(-Math.pow(2,-10*--t)+2)},easeInCirc:function(t){return t>=1?t:-1*(Math.sqrt(1-(t/=1)*t)-1)},easeOutCirc:function(t){return 1*Math.sqrt(1-(t=t/1-1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-0.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,i=0,s=1;return 0===t?0:1==(t/=1)?1:(i||(i=.3),s<Math.abs(1)?(s=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/s),-(s*Math.pow(2,10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/i)))},easeOutElastic:function(t){var e=1.70158,i=0,s=1;return 0===t?0:1==(t/=1)?1:(i||(i=.3),s<Math.abs(1)?(s=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/s),s*Math.pow(2,-10*t)*Math.sin((1*t-e)*(2*Math.PI)/i)+1)},easeInOutElastic:function(t){var e=1.70158,i=0,s=1;return 0===t?0:2==(t/=.5)?1:(i||(i=1*(.3*1.5)),s<Math.abs(1)?(s=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/s),1>t?-.5*(s*Math.pow(2,10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/i)):s*Math.pow(2,-10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/i)*.5+1)},easeInBack:function(t){var e=1.70158;return 1*(t/=1)*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return 1*((t=t/1-1)*t*((e+1)*t+e)+1)},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?.5*(t*t*(((e*=1.525)+1)*t-e)):.5*((t-=2)*t*(((e*=1.525)+1)*t+e)+2)},easeInBounce:function(t){return 1-s.easeOutBounce(1-t)},easeOutBounce:function(t){return(t/=1)<1/2.75?1*(7.5625*t*t):2/2.75>t?1*(7.5625*(t-=1.5/2.75)*t+.75):2.5/2.75>t?1*(7.5625*(t-=2.25/2.75)*t+.9375):1*(7.5625*(t-=2.625/2.75)*t+.984375);
38
+ },easeInOutBounce:function(t){return.5>t?.5*s.easeInBounce(2*t):.5*s.easeOutBounce(2*t-1)+.5}};i.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)}}(),i.cancelAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.oCancelAnimationFrame||window.msCancelAnimationFrame||function(t){return window.clearTimeout(t,1e3/60)}}(),i.getRelativePosition=function(t,e){var i,s,a=t.originalEvent||t,o=t.currentTarget||t.srcElement,n=o.getBoundingClientRect();return a.touches&&a.touches.length>0?(i=a.touches[0].clientX,s=a.touches[0].clientY):(i=a.clientX,s=a.clientY),i=Math.round((i-n.left)/(n.right-n.left)*o.width/e.currentDevicePixelRatio),s=Math.round((s-n.top)/(n.bottom-n.top)*o.height/e.currentDevicePixelRatio),{x:i,y:s}},i.addEvent=function(t,e,i){t.addEventListener?t.addEventListener(e,i):t.attachEvent?t.attachEvent("on"+e,i):t["on"+e]=i},i.removeEvent=function(t,e,s){t.removeEventListener?t.removeEventListener(e,s,!1):t.detachEvent?t.detachEvent("on"+e,s):t["on"+e]=i.noop},i.bindEvents=function(t,e,s){t.events||(t.events={}),i.each(e,function(e){t.events[e]=function(){s.apply(t,arguments)},i.addEvent(t.chart.canvas,e,t.events[e])})},i.unbindEvents=function(t,e){i.each(e,function(e,s){i.removeEvent(t.chart.canvas,s,e)})},i.getConstraintWidth=function(t){var e,i=document.defaultView.getComputedStyle(t)["max-width"],s=document.defaultView.getComputedStyle(t.parentNode)["max-width"],a=null!==i&&"none"!==i,o=null!==s&&"none"!==s;return(a||o)&&(e=Math.min(a?parseInt(i,10):Number.POSITIVE_INFINITY,o?parseInt(s,10):Number.POSITIVE_INFINITY)),e},i.getConstraintHeight=function(t){var e,i=document.defaultView.getComputedStyle(t)["max-height"],s=document.defaultView.getComputedStyle(t.parentNode)["max-height"],a=null!==i&&"none"!==i,o=null!==s&&"none"!==s;return(i||s)&&(e=Math.min(a?parseInt(i,10):Number.POSITIVE_INFINITY,o?parseInt(s,10):Number.POSITIVE_INFINITY)),e},i.getMaximumWidth=function(t){var e=t.parentNode,s=parseInt(i.getStyle(e,"padding-left"))+parseInt(i.getStyle(e,"padding-right")),a=e.clientWidth-s,o=i.getConstraintWidth(t);return void 0!==o&&(a=Math.min(a,o)),a},i.getMaximumHeight=function(t){var e=t.parentNode,s=parseInt(i.getStyle(e,"padding-top"))+parseInt(i.getStyle(e,"padding-bottom")),a=e.clientHeight-s,o=i.getConstraintHeight(t);return void 0!==o&&(a=Math.min(a,o)),a},i.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},i.retinaScale=function(t){var e=t.ctx,i=t.canvas.width,s=t.canvas.height,a=t.currentDevicePixelRatio=window.devicePixelRatio||1;1!==a&&(e.canvas.height=s*a,e.canvas.width=i*a,e.scale(a,a),e.canvas.style.width=i+"px",e.canvas.style.height=s+"px",t.originalDevicePixelRatio=t.originalDevicePixelRatio||a)},i.clear=function(t){t.ctx.clearRect(0,0,t.width,t.height)},i.fontString=function(t,e,i){return e+" "+t+"px "+i},i.longestText=function(t,e,s,a){a=a||{},a.data=a.data||{},a.garbageCollect=a.garbageCollect||[],a.font!==e&&(a.data={},a.garbageCollect=[],a.font=e),t.font=e;var o=0;i.each(s,function(e){var i=a.data[e];i||(i=a.data[e]=t.measureText(e).width,a.garbageCollect.push(e)),i>o&&(o=i)});var n=a.garbageCollect.length/2;if(n>s.length)for(var r=0;n>r;r++){var h=a.garbageCollect.shift();delete a.data[h]}return o},i.drawRoundedRectangle=function(t,e,i,s,a,o){t.beginPath(),t.moveTo(e+o,i),t.lineTo(e+s-o,i),t.quadraticCurveTo(e+s,i,e+s,i+o),t.lineTo(e+s,i+a-o),t.quadraticCurveTo(e+s,i+a,e+s-o,i+a),t.lineTo(e+o,i+a),t.quadraticCurveTo(e,i+a,e,i+a-o),t.lineTo(e,i+o),t.quadraticCurveTo(e,i,e+o,i),t.closePath()},i.color=function(e){return t.Color?t.Color(e):(console.log("Color.js not found!"),e)},i.addResizeListener=function(t,e){var i=document.createElement("iframe"),s="chartjs-hidden-iframe";i.classlist?i.classlist.add(s):i.setAttribute("class",s),i.style.width="100%",i.style.display="block",i.style.border=0,i.style.height=0,i.style.margin=0,i.style.position="absolute",i.style.left=0,i.style.right=0,i.style.top=0,i.style.bottom=0,t.insertBefore(i,t.firstChild);(i.contentWindow||i).onresize=function(){e&&e()}},i.removeResizeListener=function(t){var e=t.querySelector(".chartjs-hidden-iframe");e&&e.parentNode.removeChild(e)},i.isArray=function(t){return Array.isArray?Array.isArray(t):"[object Array]"===Object.prototype.toString.call(arg)},i.isDatasetVisible=function(t){return!t.hidden},i.callCallback=function(t,e,i){t&&"function"==typeof t.call&&t.apply(i,e)}}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.elements={},e.Element=function(t){i.extend(this,t),this.initialize.apply(this,arguments)},i.extend(e.Element.prototype,{initialize:function(){},pivot:function(){return this._view||(this._view=i.clone(this._model)),this._start=i.clone(this._view),this},transition:function(t){return this._view||(this._view=i.clone(this._model)),1===t?(this._view=this._model,this._start=null,this):(this._start||this.pivot(),i.each(this._model,function(e,s){if("_"!==s[0]&&this._model.hasOwnProperty(s))if(this._view.hasOwnProperty(s))if(e===this._view[s]);else if("string"==typeof e)try{var a=i.color(this._start[s]).mix(i.color(this._model[s]),t);this._view[s]=a.rgbString()}catch(o){this._view[s]=e}else if("number"==typeof e){var n=void 0!==this._start[s]&&isNaN(this._start[s])===!1?this._start[s]:0;this._view[s]=(this._model[s]-n)*t+n}else this._view[s]=e;else"number"!=typeof e||isNaN(this._view[s])?this._view[s]=e:this._view[s]=e*t;else;},this),this)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return i.isNumber(this._model.x)&&i.isNumber(this._model.y)}}),e.Element.extend=i.inherits}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.global.animation={duration:1e3,easing:"easeOutQuart",onProgress:i.noop,onComplete:i.noop},e.Animation=e.Element.extend({currentStep:null,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),e.animationService={frameDuration:17,animations:[],dropFrames:0,addAnimation:function(t,e,s,a){a||(t.animating=!0);for(var o=0;o<this.animations.length;++o)if(this.animations[o].chartInstance===t)return void(this.animations[o].animationObject=e);this.animations.push({chartInstance:t,animationObject:e}),1==this.animations.length&&i.requestAnimFrame.call(window,this.digestWrapper)},cancelAnimation:function(t){var e=i.findNextWhere(this.animations,function(e){return e.chartInstance===t});e&&(this.animations.splice(e,1),t.animating=!1)},digestWrapper:function(){e.animationService.startDigest.call(e.animationService)},startDigest:function(){var t=Date.now(),e=0;this.dropFrames>1&&(e=Math.floor(this.dropFrames),this.dropFrames=this.dropFrames%1);for(var s=0;s<this.animations.length;s++)null===this.animations[s].animationObject.currentStep&&(this.animations[s].animationObject.currentStep=0),this.animations[s].animationObject.currentStep+=1+e,this.animations[s].animationObject.currentStep>this.animations[s].animationObject.numSteps&&(this.animations[s].animationObject.currentStep=this.animations[s].animationObject.numSteps),this.animations[s].animationObject.render(this.animations[s].chartInstance,this.animations[s].animationObject),this.animations[s].animationObject.onAnimationProgress&&this.animations[s].animationObject.onAnimationProgress.call&&this.animations[s].animationObject.onAnimationProgress.call(this.animations[s].chartInstance,this.animations[s]),this.animations[s].animationObject.currentStep==this.animations[s].animationObject.numSteps&&(this.animations[s].animationObject.onAnimationComplete&&this.animations[s].animationObject.onAnimationComplete.call&&this.animations[s].animationObject.onAnimationComplete.call(this.animations[s].chartInstance,this.animations[s]),this.animations[s].chartInstance.animating=!1,this.animations.splice(s,1),s--);var a=Date.now(),o=(a-t)/this.frameDuration;this.dropFrames+=o,this.animations.length>0&&i.requestAnimFrame.call(window,this.digestWrapper)}}}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.types={},e.instances={},e.controllers={},e.Controller=function(t){return this.chart=t,this.config=t.config,this.options=this.config.options=i.configMerge(e.defaults.global,e.defaults[this.config.type],this.config.options||{}),this.id=i.uid(),Object.defineProperty(this,"data",{get:function(){return this.config.data}}),e.instances[this.id]=this,this.options.responsive&&this.resize(!0),this.initialize.call(this),this},i.extend(e.Controller.prototype,{initialize:function(){return this.bindEvents(),this.ensureScalesHaveIDs(),this.buildOrUpdateControllers(),this.buildScales(),this.buildSurroundingItems(),this.updateLayout(),this.resetElements(),this.initToolTip(),this.draw(),this.update(),this},clear:function(){return i.clear(this.chart),this},stop:function(){return e.animationService.cancelAnimation(this),this},resize:function(t){var e=this.chart.canvas,s=i.getMaximumWidth(this.chart.canvas),a=this.options.maintainAspectRatio&&isNaN(this.chart.aspectRatio)===!1&&isFinite(this.chart.aspectRatio)&&0!==this.chart.aspectRatio?s/this.chart.aspectRatio:i.getMaximumHeight(this.chart.canvas),o=this.chart.width!==s||this.chart.height!==a;return o?(e.width=this.chart.width=s,e.height=this.chart.height=a,i.retinaScale(this.chart),t||(this.stop(),this.update(this.options.responsiveAnimationDuration)),this):this},ensureScalesHaveIDs:function(){var t="x-axis-",e="y-axis-";this.options.scales&&(this.options.scales.xAxes&&this.options.scales.xAxes.length&&i.each(this.options.scales.xAxes,function(e,i){e.id=e.id||t+i}),this.options.scales.yAxes&&this.options.scales.yAxes.length&&i.each(this.options.scales.yAxes,function(t,i){t.id=t.id||e+i}))},buildScales:function(){if(this.scales={},this.options.scales&&(this.options.scales.xAxes&&this.options.scales.xAxes.length&&i.each(this.options.scales.xAxes,function(t,i){var s=e.scaleService.getScaleConstructor(t.type);if(s){var a=new s({ctx:this.chart.ctx,options:t,chart:this,id:t.id});this.scales[a.id]=a}},this),this.options.scales.yAxes&&this.options.scales.yAxes.length&&i.each(this.options.scales.yAxes,function(t,i){var s=e.scaleService.getScaleConstructor(t.type);if(s){var a=new s({ctx:this.chart.ctx,options:t,chart:this,id:t.id});this.scales[a.id]=a}},this)),this.options.scale){var t=e.scaleService.getScaleConstructor(this.options.scale.type);if(t){var s=new t({ctx:this.chart.ctx,options:this.options.scale,chart:this});this.scale=s,this.scales.radialScale=s}}e.scaleService.addScalesToLayout(this)},buildSurroundingItems:function(){this.options.title&&(this.titleBlock=new e.Title({ctx:this.chart.ctx,options:this.options.title,chart:this}),e.layoutService.addBox(this,this.titleBlock)),this.options.legend&&(this.legend=new e.Legend({ctx:this.chart.ctx,options:this.options.legend,chart:this}),e.layoutService.addBox(this,this.legend))},updateLayout:function(){e.layoutService.update(this,this.chart.width,this.chart.height)},buildOrUpdateControllers:function(){var t=[],s=[];if(i.each(this.data.datasets,function(i,a){i.type||(i.type=this.config.type);var o=i.type;t.push(o),i.controller?i.controller.updateIndex(a):(i.controller=new e.controllers[o](this,a),s.push(i.controller))},this),t.length>1)for(var a=1;a<t.length;a++)if(t[a]!=t[a-1]){this.isCombo=!0;break}return s},resetElements:function(){i.each(this.data.datasets,function(t,e){t.controller.reset()})},update:function(t,s){this.tooltip._data=this.data;var a=this.buildOrUpdateControllers();e.layoutService.update(this,this.chart.width,this.chart.height),i.each(a,function(t){t.reset()}),i.each(this.data.datasets,function(t,e){t.controller.buildOrUpdateElements()}),i.each(this.data.datasets,function(t,e){t.controller.update()}),this.render(t,s)},render:function(t,s){if(this.options.animation&&("undefined"!=typeof t&&0!==t||"undefined"==typeof t&&0!==this.options.animation.duration)){var a=new e.Animation;a.numSteps=(t||this.options.animation.duration)/16.66,a.easing=this.options.animation.easing,a.render=function(t,e){var s=i.easingEffects[e.easing],a=e.currentStep/e.numSteps,o=s(a);t.draw(o,a,e.currentStep)},a.onAnimationProgress=this.options.animation.onProgress,a.onAnimationComplete=this.options.animation.onComplete,e.animationService.addAnimation(this,a,t,s)}else this.draw(),this.options.animation&&this.options.animation.onComplete&&this.options.animation.onComplete.call&&this.options.animation.onComplete.call(this);return this},draw:function(t){var e=t||1;this.clear(),i.each(this.boxes,function(t){t.draw(this.chartArea)},this),this.scale&&this.scale.draw(),i.each(this.data.datasets,function(e,s){i.isDatasetVisible(e)&&e.controller.draw(t)}),this.tooltip.transition(e).draw()},getElementAtEvent:function(t){var e=i.getRelativePosition(t,this.chart),s=[];return i.each(this.data.datasets,function(t,a){i.isDatasetVisible(t)&&i.each(t.metaData,function(t,i){return t.inRange(e.x,e.y)?(s.push(t),s):void 0})}),s},getElementsAtEvent:function(t){var e=i.getRelativePosition(t,this.chart),s=[],a=function(){for(var t=0;t<this.data.datasets.length;t++)if(i.isDatasetVisible(this.data.datasets[t]))for(var s=0;s<this.data.datasets[t].metaData.length;s++)if(this.data.datasets[t].metaData[s].inRange(e.x,e.y))return this.data.datasets[t].metaData[s]}.call(this);return a?(i.each(this.data.datasets,function(t,e){i.isDatasetVisible(t)&&s.push(t.metaData[a._index])}),s):s},getDatasetAtEvent:function(t){var e=this.getElementAtEvent(t);return e.length>0&&(e=this.data.datasets[e[0]._datasetIndex].metaData),e},generateLegend:function(){return this.options.legendCallback(this)},destroy:function(){this.clear(),i.unbindEvents(this,this.events),i.removeResizeListener(this.chart.canvas.parentNode);var t=this.chart.canvas;t.width=this.chart.width,t.height=this.chart.height,void 0!==this.chart.originalDevicePixelRatio&&this.chart.ctx.scale(1/this.chart.originalDevicePixelRatio,1/this.chart.originalDevicePixelRatio),t.style.width=this.chart.originalCanvasStyleWidth,t.style.height=this.chart.originalCanvasStyleHeight,delete e.instances[this.id]},toBase64Image:function(){return this.chart.canvas.toDataURL.apply(this.chart.canvas,arguments)},initToolTip:function(){this.tooltip=new e.Tooltip({_chart:this.chart,_chartInstance:this,_data:this.data,_options:this.options},this)},bindEvents:function(){i.bindEvents(this,this.options.events,function(t){this.eventHandler(t)})},eventHandler:function(t){if(this.lastActive=this.lastActive||[],this.lastTooltipActive=this.lastTooltipActive||[],"mouseout"==t.type)this.active=[],this.tooltipActive=[];else{var e=this,s=function(i){switch(i){case"single":return e.getElementAtEvent(t);case"label":return e.getElementsAtEvent(t);case"dataset":return e.getDatasetAtEvent(t);default:return t}};this.active=s(this.options.hover.mode),this.tooltipActive=s(this.options.tooltips.mode)}this.options.hover.onHover&&this.options.hover.onHover.call(this,this.active),("mouseup"==t.type||"click"==t.type)&&(this.options.onClick&&this.options.onClick.call(this,t,this.active),this.legend&&this.legend.handleEvent&&this.legend.handleEvent(t));if(this.lastActive.length)switch(this.options.hover.mode){case"single":this.data.datasets[this.lastActive[0]._datasetIndex].controller.removeHoverStyle(this.lastActive[0],this.lastActive[0]._datasetIndex,this.lastActive[0]._index);break;case"label":case"dataset":for(var a=0;a<this.lastActive.length;a++)this.lastActive[a]&&this.data.datasets[this.lastActive[a]._datasetIndex].controller.removeHoverStyle(this.lastActive[a],this.lastActive[a]._datasetIndex,this.lastActive[a]._index)}if(this.active.length&&this.options.hover.mode)switch(this.options.hover.mode){case"single":this.data.datasets[this.active[0]._datasetIndex].controller.setHoverStyle(this.active[0]);break;case"label":case"dataset":for(var o=0;o<this.active.length;o++)this.active[o]&&this.data.datasets[this.active[o]._datasetIndex].controller.setHoverStyle(this.active[o])}if((this.options.tooltips.enabled||this.options.tooltips.custom)&&(this.tooltip.initialize(),this.tooltip._active=this.tooltipActive,this.tooltip.update()),this.tooltip.pivot(),!this.animating){var n;i.each(this.active,function(t,e){t!==this.lastActive[e]&&(n=!0)},this),i.each(this.tooltipActive,function(t,e){t!==this.lastTooltipActive[e]&&(n=!0)},this),(this.lastActive.length!==this.active.length||this.lastTooltipActive.length!==this.tooltipActive.length||n)&&(this.stop(),(this.options.tooltips.enabled||this.options.tooltips.custom)&&this.tooltip.update(!0),this.render(this.options.hover.animationDuration,!0))}return this.lastActive=this.active,this.lastTooltipActive=this.tooltipActive,this}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.DatasetController=function(t,e){this.initialize.call(this,t,e)},i.extend(e.DatasetController.prototype,{initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){this.getDataset().xAxisID||(this.getDataset().xAxisID=this.chart.options.scales.xAxes[0].id),this.getDataset().yAxisID||(this.getDataset().yAxisID=this.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getScaleForId:function(t){return this.chart.scales[t]},reset:function(){this.update(!0)},buildOrUpdateElements:function(){var t=this.getDataset().data.length,e=this.getDataset().metaData.length;if(e>t)this.getDataset().metaData.splice(t,e-t);else if(t>e)for(var i=e;t>i;++i)this.addElementAndReset(i)},addElements:i.noop,addElementAndReset:i.noop,draw:i.noop,removeHoverStyle:i.noop,setHoverStyle:i.noop,update:i.noop}),e.DatasetController.extend=i.inherits}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.layoutService={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),t.boxes.push(e)},removeBox:function(t,e){t.boxes&&t.boxes.splice(t.boxes.indexOf(e),1)},update:function(t,e,s){function a(t){var e,i=t.isHorizontal();i?(e=t.update(t.options.fullWidth?p:k,y),S-=e.height):(e=t.update(v,x),k-=e.width),D.push({horizontal:i,minSize:e,box:t})}function o(t){var e=i.findNextWhere(D,function(e){return e.box===t});if(e)if(t.isHorizontal()){var s={left:C,right:w,top:0,bottom:0};t.update(t.options.fullWidth?p:k,f/2,s)}else t.update(e.minSize.width,S)}function n(t){var e=i.findNextWhere(D,function(e){return e.box===t}),s={left:0,right:0,top:_,bottom:A};e&&t.update(e.minSize.width,S,s)}function r(t){t.isHorizontal()?(t.left=t.options.fullWidth?h:C,t.right=t.options.fullWidth?e-h:C+k,t.top=T,t.bottom=T+t.height,T=t.bottom):(t.left=P,t.right=P+t.width,t.top=_,t.bottom=_+S,P=t.right)}if(t){var h=e>30?5:2,l=s>30?5:2,c=i.where(t.boxes,function(t){return"left"==t.options.position}),d=i.where(t.boxes,function(t){return"right"==t.options.position}),u=i.where(t.boxes,function(t){return"top"==t.options.position}),g=i.where(t.boxes,function(t){return"bottom"==t.options.position}),m=i.where(t.boxes,function(t){return"chartArea"==t.options.position});u.sort(function(t,e){return(e.options.fullWidth?1:0)-(t.options.fullWidth?1:0)}),g.sort(function(t,e){return(t.options.fullWidth?1:0)-(e.options.fullWidth?1:0)});var p=e-2*h,f=s-2*l,b=p/2,x=f/2,v=(e-b)/(c.length+d.length),y=(s-x)/(u.length+g.length),k=p,S=f,D=[];i.each(c.concat(d,u,g),a);var C=h,w=h,_=l,A=l;i.each(c.concat(d),o),i.each(c,function(t){C+=t.width}),i.each(d,function(t){w+=t.width}),i.each(u.concat(g),o),i.each(u,function(t){_+=t.height}),i.each(g,function(t){A+=t.height}),i.each(c.concat(d),n),C=h,w=h,_=l,A=l,i.each(c,function(t){C+=t.width}),i.each(d,function(t){w+=t.width}),i.each(u,function(t){_+=t.height}),i.each(g,function(t){A+=t.height});var M=s-_-A,I=e-C-w;(I!==k||M!==S)&&(i.each(c,function(t){t.height=M}),i.each(d,function(t){t.height=M}),i.each(u,function(t){t.width=I}),i.each(g,function(t){t.width=I}),S=M,k=I);var P=h,T=l;i.each(c.concat(u),r),P+=k,T+=S,i.each(d,r),i.each(g,r),t.chartArea={left:C,top:_,right:C+k,bottom:_+S},i.each(m,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(k,S)})}}}}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.global.legend={display:!0,position:"top",fullWidth:!0,onClick:function(t,e){var i=this.chart.data.datasets[e.datasetIndex];i.hidden=!i.hidden,this.chart.update()},labels:{boxWidth:40,fontSize:12,fontStyle:"normal",fontColor:"#666",fontFamily:"Helvetica Neue",padding:10,generateLabels:function(t){return t.datasets.map(function(t,e){return{text:t.label,fillStyle:t.backgroundColor,hidden:t.hidden,lineCap:t.borderCapStyle,lineDash:t.borderDash,lineDashOffset:t.borderDashOffset,lineJoin:t.borderJoinStyle,lineWidth:t.borderWidth,strokeStyle:t.borderColor,datasetIndex:e}},this)}}},e.Legend=e.Element.extend({initialize:function(t){i.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:i.noop,update:function(t,e,i){return this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this.margins=i,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this.beforeBuildLabels(),this.buildLabels(),this.afterBuildLabels(),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate(),this.minSize},afterUpdate:i.noop,beforeSetDimensions:i.noop,setDimensions:function(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0,this.minSize={width:0,height:0}},afterSetDimensions:i.noop,beforeBuildLabels:i.noop,buildLabels:function(){this.legendItems=this.options.labels.generateLabels.call(this,this.chart.data)},afterBuildLabels:i.noop,beforeFit:i.noop,fit:function(){var t=this.ctx,e=i.fontString(this.options.labels.fontSize,this.options.labels.fontStyle,this.options.labels.fontFamily);if(this.legendHitBoxes=[],this.isHorizontal()?this.minSize.width=this.maxWidth:this.minSize.width=this.options.display?10:0,this.isHorizontal()?this.minSize.height=this.options.display?10:0:this.minSize.height=this.maxHeight,this.options.display&&this.isHorizontal()){this.lineWidths=[0];var s=this.legendItems.length?this.options.labels.fontSize+this.options.labels.padding:0;t.textAlign="left",t.textBaseline="top",t.font=e,i.each(this.legendItems,function(e,i){var a=this.options.labels.boxWidth+this.options.labels.fontSize/2+t.measureText(e.text).width;this.lineWidths[this.lineWidths.length-1]+a>=this.width&&(s+=this.options.labels.fontSize+this.options.labels.padding,this.lineWidths[this.lineWidths.length]=this.left),this.legendHitBoxes[i]={left:0,top:0,width:a,height:this.options.labels.fontSize},this.lineWidths[this.lineWidths.length-1]+=a+this.options.labels.padding},this),this.minSize.height+=s}this.width=this.minSize.width,this.height=this.minSize.height},afterFit:i.noop,isHorizontal:function(){return"top"==this.options.position||"bottom"==this.options.position},draw:function(){if(this.options.display){var t=this.ctx,s={x:this.left+(this.width-this.lineWidths[0])/2,y:this.top+this.options.labels.padding,line:0},a=i.fontString(this.options.labels.fontSize,this.options.labels.fontStyle,this.options.labels.fontFamily);this.isHorizontal()&&(t.textAlign="left",t.textBaseline="top",t.lineWidth=.5,t.strokeStyle=this.options.labels.fontColor,t.fillStyle=this.options.labels.fontColor,t.font=a,i.each(this.legendItems,function(i,a){var o=t.measureText(i.text).width,n=this.options.labels.boxWidth+this.options.labels.fontSize/2+o;s.x+n>=this.width&&(s.y+=this.options.labels.fontSize+this.options.labels.padding,s.line++,s.x=this.left+(this.width-this.lineWidths[s.line])/2),t.save();var r=function(t,e){return void 0!==t?t:e};t.fillStyle=r(i.fillStyle,e.defaults.global.defaultColor),t.lineCap=r(i.lineCap,e.defaults.global.elements.line.borderCapStyle),t.lineDashOffset=r(i.lineDashOffset,e.defaults.global.elements.line.borderDashOffset),t.lineJoin=r(i.lineJoin,e.defaults.global.elements.line.borderJoinStyle),t.lineWidth=r(i.lineWidth,e.defaults.global.elements.line.borderWidth),t.strokeStyle=r(i.strokeStyle,e.defaults.global.defaultColor),t.setLineDash&&t.setLineDash(r(i.lineDash,e.defaults.global.elements.line.borderDash)),t.strokeRect(s.x,s.y,this.options.labels.boxWidth,this.options.labels.fontSize),t.fillRect(s.x,s.y,this.options.labels.boxWidth,this.options.labels.fontSize),t.restore(),this.legendHitBoxes[a].left=s.x,this.legendHitBoxes[a].top=s.y,t.fillText(i.text,this.options.labels.boxWidth+this.options.labels.fontSize/2+s.x,s.y),i.hidden&&(t.beginPath(),t.lineWidth=2,t.moveTo(this.options.labels.boxWidth+this.options.labels.fontSize/2+s.x,s.y+this.options.labels.fontSize/2),t.lineTo(this.options.labels.boxWidth+this.options.labels.fontSize/2+s.x+o,s.y+this.options.labels.fontSize/2),t.stroke()),s.x+=n+this.options.labels.padding},this))}},handleEvent:function(t){var e=i.getRelativePosition(t,this.chart.chart);if(e.x>=this.left&&e.x<=this.right&&e.y>=this.top&&e.y<=this.bottom)for(var s=0;s<this.legendHitBoxes.length;++s){var a=this.legendHitBoxes[s];if(e.x>=a.left&&e.x<=a.left+a.width&&e.y>=a.top&&e.y<=a.top+a.height){this.options.onClick&&this.options.onClick.call(this,t,this.legendItems[s]);break}}}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.scale={display:!0,gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawOnChartArea:!0,drawTicks:!0,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",offsetGridLines:!1},scaleLabel:{fontColor:"#666",fontFamily:"Helvetica Neue",fontSize:12,fontStyle:"normal",labelString:"",display:!1},ticks:{beginAtZero:!1,fontSize:12,fontStyle:"normal",fontColor:"#666",fontFamily:"Helvetica Neue",maxRotation:90,mirror:!1,padding:10,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:20,callback:function(t){return""+t}}},e.Scale=e.Element.extend({beforeUpdate:function(){i.callCallback(this.options.beforeUpdate,[this])},update:function(t,e,s){return this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this.margins=i.extend({left:0,right:0,top:0,bottom:0},s),this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this.beforeBuildTicks(),this.buildTicks(),this.afterBuildTicks(),this.beforeTickToLabelConversion(),this.convertTicksToLabels(),this.afterTickToLabelConversion(),this.beforeCalculateTickRotation(),this.calculateTickRotation(),this.afterCalculateTickRotation(),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate(),this.minSize},afterUpdate:function(){i.callCallback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){i.callCallback(this.options.beforeSetDimensions,[this])},setDimensions:function(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0},afterSetDimensions:function(){i.callCallback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){i.callCallback(this.options.beforeDataLimits,[this])},determineDataLimits:i.noop,afterDataLimits:function(){i.callCallback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){i.callCallback(this.options.beforeBuildTicks,[this])},buildTicks:i.noop,afterBuildTicks:function(){i.callCallback(this.options.afterBuildTicks,[this])},beforeTickToLabelConversion:function(){i.callCallback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){this.ticks=this.ticks.map(function(t,e,i){return this.options.ticks.userCallback?this.options.ticks.userCallback(t,e,i):this.options.ticks.callback(t,e,i)},this)},afterTickToLabelConversion:function(){i.callCallback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){i.callCallback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=i.fontString(this.options.ticks.fontSize,this.options.ticks.fontStyle,this.options.ticks.fontFamily);this.ctx.font=t;var e,s=this.ctx.measureText(this.ticks[0]).width,a=this.ctx.measureText(this.ticks[this.ticks.length-1]).width;if(this.labelRotation=0,this.paddingRight=0,this.paddingLeft=0,this.options.display&&this.isHorizontal()){this.paddingRight=a/2+3,this.paddingLeft=s/2+3,this.longestTextCache||(this.longestTextCache={});for(var o,n,r=i.longestText(this.ctx,t,this.ticks,this.longestTextCache),h=r,l=this.getPixelForTick(1)-this.getPixelForTick(0)-6;h>l&&this.labelRotation<this.options.ticks.maxRotation;){if(o=Math.cos(i.toRadians(this.labelRotation)),n=Math.sin(i.toRadians(this.labelRotation)),e=o*s,e+this.options.ticks.fontSize/2>this.yLabelWidth&&(this.paddingLeft=e+this.options.ticks.fontSize/2),this.paddingRight=this.options.ticks.fontSize/2,n*r>this.maxHeight){this.labelRotation--;break}this.labelRotation++,h=o*r}}this.margins&&(this.paddingLeft=Math.max(this.paddingLeft-this.margins.left,0),this.paddingRight=Math.max(this.paddingRight-this.margins.right,0))},afterCalculateTickRotation:function(){i.callCallback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){i.callCallback(this.options.beforeFit,[this])},fit:function(){if(this.minSize={width:0,height:0},this.isHorizontal()?this.minSize.width=this.isFullWidth()?this.maxWidth-this.margins.left-this.margins.right:this.maxWidth:this.minSize.width=this.options.gridLines.display&&this.options.display?10:0,this.isHorizontal()?this.minSize.height=this.options.gridLines.display&&this.options.display?10:0:this.minSize.height=this.maxHeight,this.options.scaleLabel.display&&(this.isHorizontal()?this.minSize.height+=1.5*this.options.scaleLabel.fontSize:this.minSize.width+=1.5*this.options.scaleLabel.fontSize),this.options.ticks.display&&this.options.display){var t=i.fontString(this.options.ticks.fontSize,this.options.ticks.fontStyle,this.options.ticks.fontFamily);this.longestTextCache||(this.longestTextCache={});var e=i.longestText(this.ctx,t,this.ticks,this.longestTextCache);if(this.isHorizontal()){this.longestLabelWidth=e;var s=Math.sin(i.toRadians(this.labelRotation))*this.longestLabelWidth+1.5*this.options.ticks.fontSize;this.minSize.height=Math.min(this.maxHeight,this.minSize.height+s),t=i.fontString(this.options.ticks.fontSize,this.options.ticks.fontStyle,this.options.ticks.fontFamily),this.ctx.font=t;var a=this.ctx.measureText(this.ticks[0]).width,o=this.ctx.measureText(this.ticks[this.ticks.length-1]).width,n=Math.cos(i.toRadians(this.labelRotation)),r=Math.sin(i.toRadians(this.labelRotation));this.paddingLeft=0!==this.labelRotation?n*a+3:a/2+3,this.paddingRight=0!==this.labelRotation?r*(this.options.ticks.fontSize/2)+3:o/2+3}else{var h=this.maxWidth-this.minSize.width;this.options.ticks.mirror||(e+=this.options.ticks.padding),h>e?this.minSize.width+=e:this.minSize.width=this.maxWidth,this.paddingTop=this.options.ticks.fontSize/2,this.paddingBottom=this.options.ticks.fontSize/2}}this.margins&&(this.paddingLeft=Math.max(this.paddingLeft-this.margins.left,0),this.paddingTop=Math.max(this.paddingTop-this.margins.top,0),this.paddingRight=Math.max(this.paddingRight-this.margins.right,0),this.paddingBottom=Math.max(this.paddingBottom-this.margins.bottom,0)),this.width=this.minSize.width,this.height=this.minSize.height},afterFit:function(){i.callCallback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function s(t){return null===t||"undefined"==typeof t?NaN:"number"==typeof t&&isNaN(t)?NaN:"object"==typeof t?t instanceof Date?t:s(this.isHorizontal()?t.x:t.y):t},getLabelForIndex:i.noop,getPixelForValue:i.noop,getPixelForTick:function(t,e){if(this.isHorizontal()){
39
+ var i=this.width-(this.paddingLeft+this.paddingRight),s=i/Math.max(this.ticks.length-(this.options.gridLines.offsetGridLines?0:1),1),a=s*t+this.paddingLeft;e&&(a+=s/2);var o=this.left+Math.round(a);return o+=this.isFullWidth()?this.margins.left:0}var n=this.height-(this.paddingTop+this.paddingBottom);return this.top+t*(n/(this.ticks.length-1))},getPixelForDecimal:function(t){if(this.isHorizontal()){var e=this.width-(this.paddingLeft+this.paddingRight),i=e*t+this.paddingLeft,s=this.left+Math.round(i);return s+=this.isFullWidth()?this.margins.left:0}return this.top+t*this.height},draw:function(t){if(this.options.display){var e,s,a,o,n,r=0!==this.labelRotation,h=this.options.ticks.autoSkip;this.options.ticks.maxTicksLimit&&(n=this.options.ticks.maxTicksLimit),this.ctx.fillStyle=this.options.ticks.fontColor;var l=i.fontString(this.options.ticks.fontSize,this.options.ticks.fontStyle,this.options.ticks.fontFamily),c=Math.cos(i.toRadians(this.labelRotation)),d=Math.sin(i.toRadians(this.labelRotation)),u=this.longestLabelWidth*c;this.options.ticks.fontSize*d;if(this.isHorizontal()){e=!0;var g="bottom"===this.options.position?this.top:this.bottom-10,m="bottom"===this.options.position?this.top+10:this.bottom;if(s=!1,(u/2+this.options.ticks.autoSkipPadding)*this.ticks.length>this.width-(this.paddingLeft+this.paddingRight)&&(s=1+Math.floor((u/2+this.options.ticks.autoSkipPadding)*this.ticks.length/(this.width-(this.paddingLeft+this.paddingRight)))),h||(s=!1),n&&this.ticks.length>n)for(;!s||this.ticks.length/(s||1)>n;)s||(s=1),s+=1;i.each(this.ticks,function(a,o){var n=this.ticks.length==o+1,h=s>1&&o%s>0;if((!h||n)&&void 0!==a&&null!==a){var c=this.getPixelForTick(o),d=this.getPixelForTick(o,this.options.gridLines.offsetGridLines);this.options.gridLines.display&&(o===("undefined"!=typeof this.zeroLineIndex?this.zeroLineIndex:0)?(this.ctx.lineWidth=this.options.gridLines.zeroLineWidth,this.ctx.strokeStyle=this.options.gridLines.zeroLineColor,e=!0):e&&(this.ctx.lineWidth=this.options.gridLines.lineWidth,this.ctx.strokeStyle=this.options.gridLines.color,e=!1),c+=i.aliasPixel(this.ctx.lineWidth),this.ctx.beginPath(),this.options.gridLines.drawTicks&&(this.ctx.moveTo(c,g),this.ctx.lineTo(c,m)),this.options.gridLines.drawOnChartArea&&(this.ctx.moveTo(c,t.top),this.ctx.lineTo(c,t.bottom)),this.ctx.stroke()),this.options.ticks.display&&(this.ctx.save(),this.ctx.translate(d,r?this.top+12:"top"===this.options.position?this.bottom-10:this.top+10),this.ctx.rotate(-1*i.toRadians(this.labelRotation)),this.ctx.font=l,this.ctx.textAlign=r?"right":"center",this.ctx.textBaseline=r?"middle":"top"===this.options.position?"bottom":"top",this.ctx.fillText(a,0,0),this.ctx.restore())}},this),this.options.scaleLabel.display&&(this.ctx.textAlign="center",this.ctx.textBaseline="middle",this.ctx.fillStyle=this.options.scaleLabel.fontColor,this.ctx.font=i.fontString(this.options.scaleLabel.fontSize,this.options.scaleLabel.fontStyle,this.options.scaleLabel.fontFamily),a=this.left+(this.right-this.left)/2,o="bottom"===this.options.position?this.bottom-this.options.scaleLabel.fontSize/2:this.top+this.options.scaleLabel.fontSize/2,this.ctx.fillText(this.options.scaleLabel.labelString,a,o))}else{e=!0;var p="right"===this.options.position?this.left:this.right-5,f="right"===this.options.position?this.left+5:this.right;if(i.each(this.ticks,function(s,a){if(void 0!==s&&null!==s){var o=this.getPixelForTick(a);if(this.options.gridLines.display&&(a===("undefined"!=typeof this.zeroLineIndex?this.zeroLineIndex:0)?(this.ctx.lineWidth=this.options.gridLines.zeroLineWidth,this.ctx.strokeStyle=this.options.gridLines.zeroLineColor,e=!0):e&&(this.ctx.lineWidth=this.options.gridLines.lineWidth,this.ctx.strokeStyle=this.options.gridLines.color,e=!1),o+=i.aliasPixel(this.ctx.lineWidth),this.ctx.beginPath(),this.options.gridLines.drawTicks&&(this.ctx.moveTo(p,o),this.ctx.lineTo(f,o)),this.options.gridLines.drawOnChartArea&&(this.ctx.moveTo(t.left,o),this.ctx.lineTo(t.right,o)),this.ctx.stroke()),this.options.ticks.display){var n,r=this.getPixelForTick(a,this.options.gridLines.offsetGridLines);this.ctx.save(),"left"===this.options.position?this.options.ticks.mirror?(n=this.right+this.options.ticks.padding,this.ctx.textAlign="left"):(n=this.right-this.options.ticks.padding,this.ctx.textAlign="right"):this.options.ticks.mirror?(n=this.left-this.options.ticks.padding,this.ctx.textAlign="right"):(n=this.left+this.options.ticks.padding,this.ctx.textAlign="left"),this.ctx.translate(n,r),this.ctx.rotate(-1*i.toRadians(this.labelRotation)),this.ctx.font=l,this.ctx.textBaseline="middle",this.ctx.fillText(s,0,0),this.ctx.restore()}}},this),this.options.scaleLabel.display){a="left"===this.options.position?this.left+this.options.scaleLabel.fontSize/2:this.right-this.options.scaleLabel.fontSize/2,o=this.top+(this.bottom-this.top)/2;var b="left"===this.options.position?-.5*Math.PI:.5*Math.PI;this.ctx.save(),this.ctx.translate(a,o),this.ctx.rotate(b),this.ctx.textAlign="center",this.ctx.fillStyle=this.options.scaleLabel.fontColor,this.ctx.font=i.fontString(this.options.scaleLabel.fontSize,this.options.scaleLabel.fontStyle,this.options.scaleLabel.fontFamily),this.ctx.textBaseline="middle",this.ctx.fillText(this.options.scaleLabel.labelString,0,0),this.ctx.restore()}}this.ctx.lineWidth=this.options.gridLines.lineWidth,this.ctx.strokeStyle=this.options.gridLines.color;var x=this.left,v=this.right,y=this.top,k=this.bottom;this.isHorizontal()?(y=k="top"===this.options.position?this.bottom:this.top,y+=i.aliasPixel(this.ctx.lineWidth),k+=i.aliasPixel(this.ctx.lineWidth)):(x=v="left"===this.options.position?this.right:this.left,x+=i.aliasPixel(this.ctx.lineWidth),v+=i.aliasPixel(this.ctx.lineWidth)),this.ctx.beginPath(),this.ctx.moveTo(x,y),this.ctx.lineTo(v,k),this.ctx.stroke()}}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.scaleService={constructors:{},defaults:{},registerScaleType:function(t,e,s){this.constructors[t]=e,this.defaults[t]=i.clone(s)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?i.scaleMerge(e.defaults.scale,this.defaults[t]):{}},addScalesToLayout:function(t){i.each(t.scales,function(i){e.layoutService.addBox(t,i)})}}}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.global.title={display:!1,position:"top",fullWidth:!0,fontColor:"#666",fontFamily:"Helvetica Neue",fontSize:12,fontStyle:"bold",padding:10,text:""},e.Title=e.Element.extend({initialize:function(t){i.extend(this,t),this.options=i.configMerge(e.defaults.global.title,t.options),this.legendHitBoxes=[]},beforeUpdate:i.noop,update:function(t,e,i){return this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this.margins=i,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this.beforeBuildLabels(),this.buildLabels(),this.afterBuildLabels(),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate(),this.minSize},afterUpdate:i.noop,beforeSetDimensions:i.noop,setDimensions:function(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0,this.minSize={width:0,height:0}},afterSetDimensions:i.noop,beforeBuildLabels:i.noop,buildLabels:i.noop,afterBuildLabels:i.noop,beforeFit:i.noop,fit:function(){this.ctx,i.fontString(this.options.fontSize,this.options.fontStyle,this.options.fontFamily);this.isHorizontal()?this.minSize.width=this.maxWidth:this.minSize.width=0,this.isHorizontal()?this.minSize.height=0:this.minSize.height=this.maxHeight,this.isHorizontal()&&this.options.display&&(this.minSize.height+=this.options.fontSize+2*this.options.padding),this.width=this.minSize.width,this.height=this.minSize.height},afterFit:i.noop,isHorizontal:function(){return"top"==this.options.position||"bottom"==this.options.position},draw:function(){if(this.options.display){var t,e,s=this.ctx;if(this.isHorizontal())this.options.display&&(s.textAlign="center",s.textBaseline="middle",s.fillStyle=this.options.fontColor,s.font=i.fontString(this.options.fontSize,this.options.fontStyle,this.options.fontFamily),t=this.left+(this.right-this.left)/2,e=this.top+(this.bottom-this.top)/2,s.fillText(this.options.text,t,e));else if(this.options.display){t="left"==this.options.position?this.left+this.options.fontSize/2:this.right-this.options.fontSize/2,e=this.top+(this.bottom-this.top)/2;var a="left"==this.options.position?-.5*Math.PI:.5*Math.PI;s.save(),s.translate(t,e),s.rotate(a),s.textAlign="center",s.fillStyle=this.options.fontColor,s.font=i.fontString(this.options.fontSize,this.options.fontStyle,this.options.fontFamily),s.textBaseline="middle",s.fillText(this.options.text,0,0),s.restore()}}}})}.call(this),function(){"use strict";function t(t,e){return e&&(s.isArray(e)?t=t.concat(e):t.push(e)),t}var e=this,i=e.Chart,s=i.helpers;i.defaults.global.tooltips={enabled:!0,custom:null,mode:"single",backgroundColor:"rgba(0,0,0,0.8)",titleFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",titleFontSize:12,titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleColor:"#fff",titleAlign:"left",bodyFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",bodyFontSize:12,bodyFontStyle:"normal",bodySpacing:2,bodyColor:"#fff",bodyAlign:"left",footerFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",footerFontSize:12,footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",callbacks:{beforeTitle:s.noop,title:function(t,e){var i="";return t.length>0&&(t[0].xLabel?i=t[0].xLabel:e.labels.length>0&&t[0].index<e.labels.length&&(i=e.labels[t[0].index])),i},afterTitle:s.noop,beforeBody:s.noop,beforeLabel:s.noop,label:function(t,e){var i=e.datasets[t.datasetIndex].label||"";return i+": "+t.yLabel},afterLabel:s.noop,afterBody:s.noop,beforeFooter:s.noop,footer:s.noop,afterFooter:s.noop}},i.Tooltip=i.Element.extend({initialize:function(){var t=this._options;s.extend(this,{_model:{xPadding:t.tooltips.xPadding,yPadding:t.tooltips.yPadding,bodyColor:t.tooltips.bodyColor,_bodyFontFamily:t.tooltips.bodyFontFamily,_bodyFontStyle:t.tooltips.bodyFontStyle,_bodyAlign:t.tooltips.bodyAlign,bodyFontSize:t.tooltips.bodyFontSize,bodySpacing:t.tooltips.bodySpacing,titleColor:t.tooltips.titleColor,_titleFontFamily:t.tooltips.titleFontFamily,_titleFontStyle:t.tooltips.titleFontStyle,titleFontSize:t.tooltips.titleFontSize,_titleAlign:t.tooltips.titleAlign,titleSpacing:t.tooltips.titleSpacing,titleMarginBottom:t.tooltips.titleMarginBottom,footerColor:t.tooltips.footerColor,_footerFontFamily:t.tooltips.footerFontFamily,_footerFontStyle:t.tooltips.footerFontStyle,footerFontSize:t.tooltips.footerFontSize,_footerAlign:t.tooltips.footerAlign,footerSpacing:t.tooltips.footerSpacing,footerMarginTop:t.tooltips.footerMarginTop,caretSize:t.tooltips.caretSize,cornerRadius:t.tooltips.cornerRadius,backgroundColor:t.tooltips.backgroundColor,opacity:0,legendColorBackground:t.tooltips.multiKeyBackground}})},getTitle:function(){var e=this._options.tooltips.callbacks.beforeTitle.apply(this,arguments),i=this._options.tooltips.callbacks.title.apply(this,arguments),s=this._options.tooltips.callbacks.afterTitle.apply(this,arguments),a=[];return a=t(a,e),a=t(a,i),a=t(a,s)},getBeforeBody:function(){var t=this._options.tooltips.callbacks.beforeBody.apply(this,arguments);return s.isArray(t)?t:void 0!==t?[t]:[]},getBody:function(t,e){var i=[];return s.each(t,function(t){var s=this._options.tooltips.callbacks.beforeLabel.call(this,t,e)||"",a=this._options.tooltips.callbacks.label.call(this,t,e)||"",o=this._options.tooltips.callbacks.afterLabel.call(this,t,e)||"";i.push(s+a+o)},this),i},getAfterBody:function(){var t=this._options.tooltips.callbacks.afterBody.apply(this,arguments);return s.isArray(t)?t:void 0!==t?[t]:[]},getFooter:function(){var e=this._options.tooltips.callbacks.beforeFooter.apply(this,arguments),i=this._options.tooltips.callbacks.footer.apply(this,arguments),s=this._options.tooltips.callbacks.afterFooter.apply(this,arguments),a=[];return a=t(a,e),a=t(a,i),a=t(a,s)},getAveragePosition:function(t){if(!t.length)return!1;var e=[],i=[];s.each(t,function(t){if(t){var s=t.tooltipPosition();e.push(s.x),i.push(s.y)}});for(var a=0,o=0,n=0;n<e.length;n++)a+=e[n],o+=i[n];return{x:Math.round(a/e.length),y:Math.round(o/e.length)}},update:function(t){if(this._active.length){this._model.opacity=1;var e,i=this._active[0],a=[],o=[];if("single"===this._options.tooltips.mode){var n=i._yScale||i._scale;o.push({xLabel:i._xScale?i._xScale.getLabelForIndex(i._index,i._datasetIndex):"",yLabel:n?n.getLabelForIndex(i._index,i._datasetIndex):"",index:i._index,datasetIndex:i._datasetIndex}),e=this.getAveragePosition(this._active)}else s.each(this._data.datasets,function(t,e){if(s.isDatasetVisible(t)){var a=t.metaData[i._index];if(a){var n=i._yScale||i._scale;o.push({xLabel:a._xScale?a._xScale.getLabelForIndex(a._index,a._datasetIndex):"",yLabel:n?n.getLabelForIndex(a._index,a._datasetIndex):"",index:i._index,datasetIndex:e})}}}),s.each(this._active,function(t){t&&a.push({borderColor:t._view.borderColor,backgroundColor:t._view.backgroundColor})}),e=this.getAveragePosition(this._active),e.y=this._active[0]._yScale.getPixelForDecimal(.5);s.extend(this._model,{title:this.getTitle(o,this._data),beforeBody:this.getBeforeBody(o,this._data),body:this.getBody(o,this._data),afterBody:this.getAfterBody(o,this._data),footer:this.getFooter(o,this._data)}),s.extend(this._model,{x:Math.round(e.x),y:Math.round(e.y),caretPadding:s.getValueOrDefault(e.padding,2),labelColors:a});var r=this.getTooltipSize(this._model);this.determineAlignment(r),s.extend(this._model,this.getBackgroundPoint(this._model,r))}else this._model.opacity=0;return t&&this._options.tooltips.custom&&this._options.tooltips.custom.call(this,this._model),this},getTooltipSize:function(t){var e=this._chart.ctx,i={height:2*t.yPadding,width:0},a=t.body.length+t.beforeBody.length+t.afterBody.length;return i.height+=t.title.length*t.titleFontSize,i.height+=(t.title.length-1)*t.titleSpacing,i.height+=t.title.length?t.titleMarginBottom:0,i.height+=a*t.bodyFontSize,i.height+=a?(a-1)*t.bodySpacing:0,i.height+=t.footer.length?t.footerMarginTop:0,i.height+=t.footer.length*t.footerFontSize,i.height+=t.footer.length?(t.footer.length-1)*t.footerSpacing:0,e.font=s.fontString(t.titleFontSize,t._titleFontStyle,t._titleFontFamily),s.each(t.title,function(t){i.width=Math.max(i.width,e.measureText(t).width)}),e.font=s.fontString(t.bodyFontSize,t._bodyFontStyle,t._bodyFontFamily),s.each(t.beforeBody.concat(t.afterBody),function(t){i.width=Math.max(i.width,e.measureText(t).width)}),s.each(t.body,function(s){i.width=Math.max(i.width,e.measureText(s).width+("single"!==this._options.tooltips.mode?t.bodyFontSize+2:0))},this),e.font=s.fontString(t.footerFontSize,t._footerFontStyle,t._footerFontFamily),s.each(t.footer,function(t){i.width=Math.max(i.width,e.measureText(t).width)}),i.width+=2*t.xPadding,i},determineAlignment:function(t){this._model.xAlign=this._model.yAlign="center",this._model.y<t.height?this._model.yAlign="top":this._model.y>this._chart.height-t.height&&(this._model.yAlign="bottom");var e,i,s,a,o,n=this,r=(this._chartInstance.chartArea.left+this._chartInstance.chartArea.right)/2,h=(this._chartInstance.chartArea.top+this._chartInstance.chartArea.bottom)/2;"center"===this._model.yAlign?(e=function(t){return r>=t},i=function(t){return t>r}):(e=function(e){return e<=t.width/2},i=function(e){return e>=n._chart.width-t.width/2}),s=function(e){return e+t.width>n._chart.width},a=function(e){return e-t.width<0},o=function(t){return h>=t?"top":"bottom"},e(this._model.x)?(this._model.xAlign="left",s(this._model.x)&&(this._model.xAlign="center",this._model.yAlign=o(this._model.y))):i(this._model.x)&&(this._model.xAlign="right",a(this._model.x)&&(this._model.xAlign="center",this._model.yAlign=o(this._model.y)))},getBackgroundPoint:function(t,e){var i={x:t.x,y:t.y};return"right"===t.xAlign?i.x-=e.width:"center"===t.xAlign&&(i.x-=e.width/2),"top"===t.yAlign?i.y+=t.caretPadding+t.caretSize:"bottom"===t.yAlign?i.y-=e.height+t.caretPadding+t.caretSize:i.y-=e.height/2,"center"==t.yAlign?"left"===t.xAlign?i.x+=t.caretPadding+t.caretSize:"right"===t.xAlign&&(i.x-=t.caretPadding+t.caretSize):"left"===t.xAlign?i.x-=t.cornerRadius+t.caretPadding:"right"===t.xAlign&&(i.x+=t.cornerRadius+t.caretPadding),i},drawCaret:function(t,e,i,a){var o,n,r,h,l,c,d=this._view,u=this._chart.ctx;"center"===d.yAlign?("left"===d.xAlign?(o=t.x,n=o-d.caretSize,r=o):(o=t.x+e.width,n=o+d.caretSize,r=o),l=t.y+e.height/2,h=l-d.caretSize,c=l+d.caretSize):("left"===d.xAlign?(o=t.x+d.cornerRadius,n=o+d.caretSize,r=n+d.caretSize):"right"===d.xAlign?(o=t.x+e.width-d.cornerRadius,n=o-d.caretSize,r=n-d.caretSize):(n=t.x+e.width/2,o=n-d.caretSize,r=n+d.caretSize),"top"===d.yAlign?(h=t.y,l=h-d.caretSize,c=h):(h=t.y+e.height,l=h+d.caretSize,c=h)),u.fillStyle=s.color(d.backgroundColor).alpha(i).rgbString(),u.beginPath(),u.moveTo(o,h),u.lineTo(n,l),u.lineTo(r,c),u.closePath(),u.fill()},drawTitle:function(t,e,i,a){e.title.length&&(i.textAlign=e._titleAlign,i.textBaseline="top",i.fillStyle=s.color(e.titleColor).alpha(a).rgbString(),i.font=s.fontString(e.titleFontSize,e._titleFontStyle,e._titleFontFamily),s.each(e.title,function(s,a){i.fillText(s,t.x,t.y),t.y+=e.titleFontSize+e.titleSpacing,a+1===e.title.length&&(t.y+=e.titleMarginBottom-e.titleSpacing)}))},drawBody:function(t,e,i,a){i.textAlign=e._bodyAlign,i.textBaseline="top",i.fillStyle=s.color(e.bodyColor).alpha(a).rgbString(),i.font=s.fontString(e.bodyFontSize,e._bodyFontStyle,e._bodyFontFamily),s.each(e.beforeBody,function(s){i.fillText(s,t.x,t.y),t.y+=e.bodyFontSize+e.bodySpacing}),s.each(e.body,function(o,n){"single"!==this._options.tooltips.mode&&(i.fillStyle=s.color(e.legendColorBackground).alpha(a).rgbaString(),i.fillRect(t.x,t.y,e.bodyFontSize,e.bodyFontSize),i.strokeStyle=s.color(e.labelColors[n].borderColor).alpha(a).rgbaString(),i.strokeRect(t.x,t.y,e.bodyFontSize,e.bodyFontSize),i.fillStyle=s.color(e.labelColors[n].backgroundColor).alpha(a).rgbaString(),i.fillRect(t.x+1,t.y+1,e.bodyFontSize-2,e.bodyFontSize-2),i.fillStyle=s.color(e.bodyColor).alpha(a).rgbaString()),i.fillText(o,t.x+("single"!==this._options.tooltips.mode?e.bodyFontSize+2:0),t.y),t.y+=e.bodyFontSize+e.bodySpacing},this),s.each(e.afterBody,function(s){i.fillText(s,t.x,t.y),t.y+=e.bodyFontSize}),t.y-=e.bodySpacing},drawFooter:function(t,e,i,a){e.footer.length&&(t.y+=e.footerMarginTop,i.textAlign=e._footerAlign,i.textBaseline="top",i.fillStyle=s.color(e.footerColor).alpha(a).rgbString(),i.font=s.fontString(e.footerFontSize,e._footerFontStyle,e._footerFontFamily),s.each(e.footer,function(s){i.fillText(s,t.x,t.y),t.y+=e.footerFontSize+e.footerSpacing}))},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var i=e.caretPadding,a=this.getTooltipSize(e),o={x:e.x,y:e.y},n=Math.abs(e.opacity<.001)?0:e.opacity;this._options.tooltips.enabled&&(t.fillStyle=s.color(e.backgroundColor).alpha(n).rgbString(),s.drawRoundedRectangle(t,o.x,o.y,a.width,a.height,e.cornerRadius),t.fill(),this.drawCaret(o,a,n,i),o.x+=e.xPadding,o.y+=e.yPadding,this.drawTitle(o,e,t,n),this.drawBody(o,e,t,n),this.drawFooter(o,e,t,n))}}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.bar={hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}},e.controllers.bar=e.DatasetController.extend({initialize:function(t,i){e.DatasetController.prototype.initialize.call(this,t,i),this.getDataset().bar=!0},getBarCount:function(){var t=0;return i.each(this.chart.data.datasets,function(e){i.isDatasetVisible(e)&&e.bar&&++t}),t},addElements:function(){this.getDataset().metaData=this.getDataset().metaData||[],i.each(this.getDataset().data,function(t,i){this.getDataset().metaData[i]=this.getDataset().metaData[i]||new e.elements.Rectangle({_chart:this.chart.chart,_datasetIndex:this.index,_index:i})},this)},addElementAndReset:function(t){this.getDataset().metaData=this.getDataset().metaData||[];var i=new e.elements.Rectangle({_chart:this.chart.chart,_datasetIndex:this.index,_index:t}),s=this.getBarCount();this.updateElement(i,t,!0,s),this.getDataset().metaData.splice(t,0,i)},update:function(t){var e=this.getBarCount();i.each(this.getDataset().metaData,function(i,s){this.updateElement(i,s,t,e)},this)},updateElement:function(t,e,s,a){var o,n=this.getScaleForId(this.getDataset().xAxisID),r=this.getScaleForId(this.getDataset().yAxisID);o=r.min<0&&r.max<0?r.getPixelForValue(r.max):r.min>0&&r.max>0?r.getPixelForValue(r.min):r.getPixelForValue(0),i.extend(t,{_chart:this.chart.chart,_xScale:n,_yScale:r,_datasetIndex:this.index,_index:e,_model:{x:this.calculateBarX(e,this.index),y:s?o:this.calculateBarY(e,this.index),label:this.chart.data.labels[e],datasetLabel:this.getDataset().label,base:this.calculateBarBase(this.index,e),width:this.calculateBarWidth(a),backgroundColor:t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().backgroundColor,e,this.chart.options.elements.rectangle.backgroundColor),borderColor:t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().borderColor,e,this.chart.options.elements.rectangle.borderColor),borderWidth:t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().borderWidth,e,this.chart.options.elements.rectangle.borderWidth)}}),t.pivot()},calculateBarBase:function(t,e){var s=(this.getScaleForId(this.getDataset().xAxisID),this.getScaleForId(this.getDataset().yAxisID)),a=0;if(s.options.stacked){var o=this.chart.data.datasets[t].data[e];if(0>o)for(var n=0;t>n;n++){var r=this.chart.data.datasets[n];i.isDatasetVisible(r)&&r.yAxisID===s.id&&r.bar&&(a+=r.data[e]<0?r.data[e]:0)}else for(var h=0;t>h;h++){var l=this.chart.data.datasets[h];i.isDatasetVisible(l)&&l.yAxisID===s.id&&l.bar&&(a+=l.data[e]>0?l.data[e]:0)}return s.getPixelForValue(a)}return a=s.getPixelForValue(s.min),s.beginAtZero||s.min<=0&&s.max>=0||s.min>=0&&s.max<=0?a=s.getPixelForValue(0,0):s.min<0&&s.max<0&&(a=s.getPixelForValue(s.max)),a},getRuler:function(){var t=this.getScaleForId(this.getDataset().xAxisID),e=(this.getScaleForId(this.getDataset().yAxisID),this.getBarCount()),i=function(){for(var e=t.getPixelForTick(1)-t.getPixelForTick(0),i=2;i<this.getDataset().data.length;i++)e=Math.min(t.getPixelForTick(i)-t.getPixelForTick(i-1),e);return e}.call(this),s=i*t.options.categoryPercentage,a=(i-i*t.options.categoryPercentage)/2,o=s/e,n=o*t.options.barPercentage,r=o-o*t.options.barPercentage;return{datasetCount:e,tickWidth:i,categoryWidth:s,categorySpacing:a,fullBarWidth:o,barWidth:n,barSpacing:r}},calculateBarWidth:function(){var t=this.getScaleForId(this.getDataset().xAxisID),e=this.getRuler();return t.options.stacked?e.categoryWidth:e.barWidth},getBarIndex:function(t){for(var e=0,s=0;t>s;++s)i.isDatasetVisible(this.chart.data.datasets[s])&&this.chart.data.datasets[s].bar&&++e;return e},calculateBarX:function(t,e){var i=(this.getScaleForId(this.getDataset().yAxisID),this.getScaleForId(this.getDataset().xAxisID)),s=this.getBarIndex(e),a=this.getRuler(),o=i.getPixelForValue(null,t,e,this.chart.isCombo);return o-=this.chart.isCombo?a.tickWidth/2:0,i.options.stacked?o+a.categoryWidth/2+a.categorySpacing:o+a.barWidth/2+a.categorySpacing+a.barWidth*s+a.barSpacing/2+a.barSpacing*s},calculateBarY:function(t,e){var s=(this.getScaleForId(this.getDataset().xAxisID),this.getScaleForId(this.getDataset().yAxisID)),a=this.getDataset().data[t];if(s.options.stacked){for(var o=0,n=0,r=0;e>r;r++){var h=this.chart.data.datasets[r];i.isDatasetVisible(h)&&h.bar&&h.yAxisID===s.id&&(h.data[t]<0?n+=h.data[t]||0:o+=h.data[t]||0)}return 0>a?s.getPixelForValue(n+a):s.getPixelForValue(o+a)}return s.getPixelForValue(a)},draw:function(t){var e=t||1;i.each(this.getDataset().metaData,function(t,i){var s=this.getDataset().data[i];null===s||void 0===s||isNaN(s)||t.transition(e).draw()},this)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],s=t._index;t._model.backgroundColor=t.custom&&t.custom.hoverBackgroundColor?t.custom.hoverBackgroundColor:i.getValueAtIndexOrDefault(e.hoverBackgroundColor,s,i.color(t._model.backgroundColor).saturate(.5).darken(.1).rgbString()),t._model.borderColor=t.custom&&t.custom.hoverBorderColor?t.custom.hoverBorderColor:i.getValueAtIndexOrDefault(e.hoverBorderColor,s,i.color(t._model.borderColor).saturate(.5).darken(.1).rgbString()),t._model.borderWidth=t.custom&&t.custom.hoverBorderWidth?t.custom.hoverBorderWidth:i.getValueAtIndexOrDefault(e.hoverBorderWidth,s,t._model.borderWidth)},removeHoverStyle:function(t){var e=(this.chart.data.datasets[t._datasetIndex],t._index);t._model.backgroundColor=t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().backgroundColor,e,this.chart.options.elements.rectangle.backgroundColor),t._model.borderColor=t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().borderColor,e,this.chart.options.elements.rectangle.borderColor),t._model.borderWidth=t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().borderWidth,e,this.chart.options.elements.rectangle.borderWidth)}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.bubble={hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(t,e){return""},label:function(t,e){var i=e.datasets[t.datasetIndex].label||"",s=e.datasets[t.datasetIndex].data[t.index];return i+": ("+s.x+", "+s.y+", "+s.r+")"}}}},e.controllers.bubble=e.DatasetController.extend({addElements:function(){this.getDataset().metaData=this.getDataset().metaData||[],i.each(this.getDataset().data,function(t,i){this.getDataset().metaData[i]=this.getDataset().metaData[i]||new e.elements.Point({_chart:this.chart.chart,_datasetIndex:this.index,_index:i})},this)},addElementAndReset:function(t){this.getDataset().metaData=this.getDataset().metaData||[];var i=new e.elements.Point({_chart:this.chart.chart,_datasetIndex:this.index,_index:t});this.updateElement(i,t,!0),this.getDataset().metaData.splice(t,0,i)},update:function(t){var e,s=this.getDataset().metaData,a=this.getScaleForId(this.getDataset().yAxisID);this.getScaleForId(this.getDataset().xAxisID);e=a.min<0&&a.max<0?a.getPixelForValue(a.max):a.min>0&&a.max>0?a.getPixelForValue(a.min):a.getPixelForValue(0),i.each(s,function(e,i){this.updateElement(e,i,t)},this)},updateElement:function(t,e,s){var a,o=this.getScaleForId(this.getDataset().yAxisID),n=this.getScaleForId(this.getDataset().xAxisID);a=o.min<0&&o.max<0?o.getPixelForValue(o.max):o.min>0&&o.max>0?o.getPixelForValue(o.min):o.getPixelForValue(0),i.extend(t,{_chart:this.chart.chart,_xScale:n,_yScale:o,_datasetIndex:this.index,_index:e,_model:{x:s?n.getPixelForDecimal(.5):n.getPixelForValue(this.getDataset().data[e],e,this.index,this.chart.isCombo),y:s?a:o.getPixelForValue(this.getDataset().data[e],e,this.index),radius:s?0:t.custom&&t.custom.radius?t.custom.radius:this.getRadius(this.getDataset().data[e]),backgroundColor:t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().backgroundColor,e,this.chart.options.elements.point.backgroundColor),borderColor:t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().borderColor,e,this.chart.options.elements.point.borderColor),borderWidth:t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().borderWidth,e,this.chart.options.elements.point.borderWidth),hitRadius:t.custom&&t.custom.hitRadius?t.custom.hitRadius:i.getValueAtIndexOrDefault(this.getDataset().hitRadius,e,this.chart.options.elements.point.hitRadius)}}),t._model.skip=t.custom&&t.custom.skip?t.custom.skip:isNaN(t._model.x)||isNaN(t._model.y),t.pivot()},getRadius:function(t){return t.r||this.chart.options.elements.point.radius},draw:function(t){var e=t||1;i.each(this.getDataset().metaData,function(t,i){t.transition(e),t.draw()})},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],s=t._index;t._model.radius=t.custom&&t.custom.hoverRadius?t.custom.hoverRadius:i.getValueAtIndexOrDefault(e.hoverRadius,s,this.chart.options.elements.point.hoverRadius)+this.getRadius(this.getDataset().data[t._index]),t._model.backgroundColor=t.custom&&t.custom.hoverBackgroundColor?t.custom.hoverBackgroundColor:i.getValueAtIndexOrDefault(e.hoverBackgroundColor,s,i.color(t._model.backgroundColor).saturate(.5).darken(.1).rgbString()),t._model.borderColor=t.custom&&t.custom.hoverBorderColor?t.custom.hoverBorderColor:i.getValueAtIndexOrDefault(e.hoverBorderColor,s,i.color(t._model.borderColor).saturate(.5).darken(.1).rgbString()),t._model.borderWidth=t.custom&&t.custom.hoverBorderWidth?t.custom.hoverBorderWidth:i.getValueAtIndexOrDefault(e.hoverBorderWidth,s,t._model.borderWidth)},removeHoverStyle:function(t){var e=(this.chart.data.datasets[t._datasetIndex],t._index);t._model.radius=t.custom&&t.custom.radius?t.custom.radius:this.getRadius(this.getDataset().data[t._index]),t._model.backgroundColor=t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().backgroundColor,e,this.chart.options.elements.point.backgroundColor),t._model.borderColor=t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().borderColor,e,this.chart.options.elements.point.borderColor),t._model.borderWidth=t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().borderWidth,e,this.chart.options.elements.point.borderWidth)}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.doughnut={animation:{animateRotate:!0,animateScale:!1},aspectRatio:1,hover:{mode:"single"},legendCallback:function(t){var e=[];if(e.push('<ul class="'+t.id+'-legend">'),t.data.datasets.length)for(var i=0;i<t.data.datasets[0].data.length;++i)e.push('<li><span style="background-color:'+t.data.datasets[0].backgroundColor[i]+'">'),t.data.labels[i]&&e.push(t.data.labels[i]),e.push("</span></li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){return t.labels.map(function(e,i){return{text:e,fillStyle:t.datasets[0].backgroundColor[i],hidden:isNaN(t.datasets[0].data[i]),index:i}})}},onClick:function(t,e){i.each(this.chart.data.datasets,function(t){t.metaHiddenData=t.metaHiddenData||[];var i=e.index;isNaN(t.data[i])?isNaN(t.metaHiddenData[i])||(t.data[i]=t.metaHiddenData[i]):(t.metaHiddenData[i]=t.data[i],t.data[i]=NaN)}),this.chart.update()}},cutoutPercentage:50,tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+e.datasets[t.datasetIndex].data[t.index]}}}},e.defaults.pie=i.clone(e.defaults.doughnut),i.extend(e.defaults.pie,{cutoutPercentage:0}),e.controllers.doughnut=e.controllers.pie=e.DatasetController.extend({linkScales:function(){},addElements:function(){this.getDataset().metaData=this.getDataset().metaData||[],i.each(this.getDataset().data,function(t,i){this.getDataset().metaData[i]=this.getDataset().metaData[i]||new e.elements.Arc({_chart:this.chart.chart,_datasetIndex:this.index,_index:i})},this)},addElementAndReset:function(t,s){this.getDataset().metaData=this.getDataset().metaData||[];var a=new e.elements.Arc({_chart:this.chart.chart,_datasetIndex:this.index,_index:t});s&&i.isArray(this.getDataset().backgroundColor)&&this.getDataset().backgroundColor.splice(t,0,s),this.updateElement(a,t,!0),
40
+ this.getDataset().metaData.splice(t,0,a)},getVisibleDatasetCount:function(){return i.where(this.chart.data.datasets,function(t){return i.isDatasetVisible(t)}).length},getRingIndex:function(t){for(var e=0,s=0;t>s;++s)i.isDatasetVisible(this.chart.data.datasets[s])&&++e;return e},update:function(t){var e=Math.min(this.chart.chartArea.right-this.chart.chartArea.left,this.chart.chartArea.bottom-this.chart.chartArea.top);this.chart.outerRadius=Math.max(e/2-this.chart.options.elements.arc.borderWidth/2,0),this.chart.innerRadius=Math.max(this.chart.options.cutoutPercentage?this.chart.outerRadius/100*this.chart.options.cutoutPercentage:1,0),this.chart.radiusLength=(this.chart.outerRadius-this.chart.innerRadius)/this.getVisibleDatasetCount(),this.getDataset().total=0,i.each(this.getDataset().data,function(t){isNaN(t)||(this.getDataset().total+=Math.abs(t))},this),this.outerRadius=this.chart.outerRadius-this.chart.radiusLength*this.getRingIndex(this.index),this.innerRadius=this.outerRadius-this.chart.radiusLength,i.each(this.getDataset().metaData,function(e,i){this.updateElement(e,i,t)},this)},updateElement:function(t,e,s){var a=(this.chart.chartArea.left+this.chart.chartArea.right)/2,o=(this.chart.chartArea.top+this.chart.chartArea.bottom)/2,n={x:a,y:o,startAngle:Math.PI*-.5,endAngle:Math.PI*-.5,circumference:this.chart.options.animation.animateRotate?0:this.calculateCircumference(this.getDataset().data[e]),outerRadius:this.chart.options.animation.animateScale?0:this.outerRadius,innerRadius:this.chart.options.animation.animateScale?0:this.innerRadius};i.extend(t,{_chart:this.chart.chart,_datasetIndex:this.index,_index:e,_model:s?n:{x:a,y:o,circumference:this.calculateCircumference(this.getDataset().data[e]),outerRadius:this.outerRadius,innerRadius:this.innerRadius,backgroundColor:t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().backgroundColor,e,this.chart.options.elements.arc.backgroundColor),hoverBackgroundColor:t.custom&&t.custom.hoverBackgroundColor?t.custom.hoverBackgroundColor:i.getValueAtIndexOrDefault(this.getDataset().hoverBackgroundColor,e,this.chart.options.elements.arc.hoverBackgroundColor),borderWidth:t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().borderWidth,e,this.chart.options.elements.arc.borderWidth),borderColor:t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().borderColor,e,this.chart.options.elements.arc.borderColor),label:i.getValueAtIndexOrDefault(this.getDataset().label,e,this.chart.data.labels[e])}}),s||(0===e?t._model.startAngle=Math.PI*-.5:t._model.startAngle=this.getDataset().metaData[e-1]._model.endAngle,t._model.endAngle=t._model.startAngle+t._model.circumference,e<this.getDataset().data.length-1&&(this.getDataset().metaData[e+1]._model.startAngle=t._model.endAngle)),t.pivot()},draw:function(t){var e=t||1;i.each(this.getDataset().metaData,function(t,i){t.transition(e).draw()})},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],s=t._index;t._model.backgroundColor=t.custom&&t.custom.hoverBackgroundColor?t.custom.hoverBackgroundColor:i.getValueAtIndexOrDefault(e.hoverBackgroundColor,s,i.color(t._model.backgroundColor).saturate(.5).darken(.1).rgbString()),t._model.borderColor=t.custom&&t.custom.hoverBorderColor?t.custom.hoverBorderColor:i.getValueAtIndexOrDefault(e.hoverBorderColor,s,i.color(t._model.borderColor).saturate(.5).darken(.1).rgbString()),t._model.borderWidth=t.custom&&t.custom.hoverBorderWidth?t.custom.hoverBorderWidth:i.getValueAtIndexOrDefault(e.hoverBorderWidth,s,t._model.borderWidth)},removeHoverStyle:function(t){var e=(this.chart.data.datasets[t._datasetIndex],t._index);t._model.backgroundColor=t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().backgroundColor,e,this.chart.options.elements.arc.backgroundColor),t._model.borderColor=t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().borderColor,e,this.chart.options.elements.arc.borderColor),t._model.borderWidth=t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().borderWidth,e,this.chart.options.elements.arc.borderWidth)},calculateCircumference:function(t){return this.getDataset().total>0&&!isNaN(t)?1.999999*Math.PI*(t/this.getDataset().total):0}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.line={showLines:!0,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}},e.controllers.line=e.DatasetController.extend({addElements:function(){this.getDataset().metaData=this.getDataset().metaData||[],this.getDataset().metaDataset=this.getDataset().metaDataset||new e.elements.Line({_chart:this.chart.chart,_datasetIndex:this.index,_points:this.getDataset().metaData}),i.each(this.getDataset().data,function(t,i){this.getDataset().metaData[i]=this.getDataset().metaData[i]||new e.elements.Point({_chart:this.chart.chart,_datasetIndex:this.index,_index:i})},this)},addElementAndReset:function(t){this.getDataset().metaData=this.getDataset().metaData||[];var i=new e.elements.Point({_chart:this.chart.chart,_datasetIndex:this.index,_index:t});this.updateElement(i,t,!0),this.getDataset().metaData.splice(t,0,i),this.chart.options.showLines&&0!==this.chart.options.elements.line.tension&&this.updateBezierControlPoints()},update:function(t){var e,s=this.getDataset().metaDataset,a=this.getDataset().metaData,o=this.getScaleForId(this.getDataset().yAxisID);this.getScaleForId(this.getDataset().xAxisID);e=o.min<0&&o.max<0?o.getPixelForValue(o.max):o.min>0&&o.max>0?o.getPixelForValue(o.min):o.getPixelForValue(0),this.chart.options.showLines&&(s._scale=o,s._datasetIndex=this.index,s._children=a,s._model={tension:s.custom&&s.custom.tension?s.custom.tension:i.getValueOrDefault(this.getDataset().tension,this.chart.options.elements.line.tension),backgroundColor:s.custom&&s.custom.backgroundColor?s.custom.backgroundColor:this.getDataset().backgroundColor||this.chart.options.elements.line.backgroundColor,borderWidth:s.custom&&s.custom.borderWidth?s.custom.borderWidth:this.getDataset().borderWidth||this.chart.options.elements.line.borderWidth,borderColor:s.custom&&s.custom.borderColor?s.custom.borderColor:this.getDataset().borderColor||this.chart.options.elements.line.borderColor,borderCapStyle:s.custom&&s.custom.borderCapStyle?s.custom.borderCapStyle:this.getDataset().borderCapStyle||this.chart.options.elements.line.borderCapStyle,borderDash:s.custom&&s.custom.borderDash?s.custom.borderDash:this.getDataset().borderDash||this.chart.options.elements.line.borderDash,borderDashOffset:s.custom&&s.custom.borderDashOffset?s.custom.borderDashOffset:this.getDataset().borderDashOffset||this.chart.options.elements.line.borderDashOffset,borderJoinStyle:s.custom&&s.custom.borderJoinStyle?s.custom.borderJoinStyle:this.getDataset().borderJoinStyle||this.chart.options.elements.line.borderJoinStyle,fill:s.custom&&s.custom.fill?s.custom.fill:void 0!==this.getDataset().fill?this.getDataset().fill:this.chart.options.elements.line.fill,scaleTop:o.top,scaleBottom:o.bottom,scaleZero:e},s.pivot()),i.each(a,function(e,i){this.updateElement(e,i,t)},this),this.chart.options.showLines&&0!==this.chart.options.elements.line.tension&&this.updateBezierControlPoints()},getPointBackgroundColor:function(t,e){var s=this.chart.options.elements.point.backgroundColor,a=this.getDataset();return t.custom&&t.custom.backgroundColor?s=t.custom.backgroundColor:a.pointBackgroundColor?s=i.getValueAtIndexOrDefault(a.pointBackgroundColor,e,s):a.backgroundColor&&(s=a.backgroundColor),s},getPointBorderColor:function(t,e){var s=this.chart.options.elements.point.borderColor,a=this.getDataset();return t.custom&&t.custom.borderColor?s=t.custom.borderColor:a.pointBorderColor?s=i.getValueAtIndexOrDefault(this.getDataset().pointBorderColor,e,s):a.borderColor&&(s=a.borderColor),s},getPointBorderWidth:function(t,e){var s=this.chart.options.elements.point.borderWidth,a=this.getDataset();return t.custom&&void 0!==t.custom.borderWidth?s=t.custom.borderWidth:void 0!==a.pointBorderWidth?s=i.getValueAtIndexOrDefault(a.pointBorderWidth,e,s):void 0!==a.borderWidth&&(s=a.borderWidth),s},updateElement:function(t,e,s){var a,o=this.getScaleForId(this.getDataset().yAxisID),n=this.getScaleForId(this.getDataset().xAxisID);a=o.min<0&&o.max<0?o.getPixelForValue(o.max):o.min>0&&o.max>0?o.getPixelForValue(o.min):o.getPixelForValue(0),t._chart=this.chart.chart,t._xScale=n,t._yScale=o,t._datasetIndex=this.index,t._index=e,t._model={x:n.getPixelForValue(this.getDataset().data[e],e,this.index,this.chart.isCombo),y:s?a:this.calculatePointY(this.getDataset().data[e],e,this.index,this.chart.isCombo),tension:t.custom&&t.custom.tension?t.custom.tension:i.getValueOrDefault(this.getDataset().tension,this.chart.options.elements.line.tension),radius:t.custom&&t.custom.radius?t.custom.radius:i.getValueAtIndexOrDefault(this.getDataset().radius,e,this.chart.options.elements.point.radius),pointStyle:t.custom&&t.custom.pointStyle?t.custom.pointStyle:i.getValueAtIndexOrDefault(this.getDataset().pointStyle,e,this.chart.options.elements.point.pointStyle),backgroundColor:this.getPointBackgroundColor(t,e),borderColor:this.getPointBorderColor(t,e),borderWidth:this.getPointBorderWidth(t,e),hitRadius:t.custom&&t.custom.hitRadius?t.custom.hitRadius:i.getValueAtIndexOrDefault(this.getDataset().hitRadius,e,this.chart.options.elements.point.hitRadius)},t._model.skip=t.custom&&t.custom.skip?t.custom.skip:isNaN(t._model.x)||isNaN(t._model.y)},calculatePointY:function(t,e,s,a){var o=(this.getScaleForId(this.getDataset().xAxisID),this.getScaleForId(this.getDataset().yAxisID));if(o.options.stacked){for(var n=0,r=0,h=this.chart.data.datasets.length-1;h>s;h--){var l=this.chart.data.datasets[h];"line"===l.type&&i.isDatasetVisible(l)&&(l.data[e]<0?r+=l.data[e]||0:n+=l.data[e]||0)}return 0>t?o.getPixelForValue(r+t):o.getPixelForValue(n+t)}return o.getPixelForValue(t)},updateBezierControlPoints:function(){i.each(this.getDataset().metaData,function(t,e){var s=i.splineCurve(i.previousItem(this.getDataset().metaData,e)._model,t._model,i.nextItem(this.getDataset().metaData,e)._model,t._model.tension);t._model.controlPointPreviousX=Math.max(Math.min(s.previous.x,this.chart.chartArea.right),this.chart.chartArea.left),t._model.controlPointPreviousY=Math.max(Math.min(s.previous.y,this.chart.chartArea.bottom),this.chart.chartArea.top),t._model.controlPointNextX=Math.max(Math.min(s.next.x,this.chart.chartArea.right),this.chart.chartArea.left),t._model.controlPointNextY=Math.max(Math.min(s.next.y,this.chart.chartArea.bottom),this.chart.chartArea.top),t.pivot()},this)},draw:function(t){var e=t||1;i.each(this.getDataset().metaData,function(t){t.transition(e)}),this.chart.options.showLines&&this.getDataset().metaDataset.transition(e).draw(),i.each(this.getDataset().metaData,function(t){t.draw()})},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],s=t._index;t._model.radius=t.custom&&t.custom.hoverRadius?t.custom.hoverRadius:i.getValueAtIndexOrDefault(e.pointHoverRadius,s,this.chart.options.elements.point.hoverRadius),t._model.backgroundColor=t.custom&&t.custom.hoverBackgroundColor?t.custom.hoverBackgroundColor:i.getValueAtIndexOrDefault(e.pointHoverBackgroundColor,s,i.color(t._model.backgroundColor).saturate(.5).darken(.1).rgbString()),t._model.borderColor=t.custom&&t.custom.hoverBorderColor?t.custom.hoverBorderColor:i.getValueAtIndexOrDefault(e.pointHoverBorderColor,s,i.color(t._model.borderColor).saturate(.5).darken(.1).rgbString()),t._model.borderWidth=t.custom&&t.custom.hoverBorderWidth?t.custom.hoverBorderWidth:i.getValueAtIndexOrDefault(e.pointHoverBorderWidth,s,t._model.borderWidth)},removeHoverStyle:function(t){var e=(this.chart.data.datasets[t._datasetIndex],t._index);t._model.radius=t.custom&&t.custom.radius?t.custom.radius:i.getValueAtIndexOrDefault(this.getDataset().radius,e,this.chart.options.elements.point.radius),t._model.backgroundColor=this.getPointBackgroundColor(t,e),t._model.borderColor=this.getPointBorderColor(t,e),t._model.borderWidth=this.getPointBorderWidth(t,e)}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.polarArea={scale:{type:"radialLinear",lineArc:!0},animateRotate:!0,animateScale:!0,aspectRatio:1,legendCallback:function(t){var e=[];if(e.push('<ul class="'+t.id+'-legend">'),t.data.datasets.length)for(var i=0;i<t.data.datasets[0].data.length;++i)e.push('<li><span style="background-color:'+t.data.datasets[0].backgroundColor[i]+'">'),t.data.labels[i]&&e.push(t.data.labels[i]),e.push("</span></li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){return t.labels.map(function(e,i){return{text:e,fillStyle:t.datasets[0].backgroundColor[i],hidden:isNaN(t.datasets[0].data[i]),index:i}})}},onClick:function(t,e){i.each(this.chart.data.datasets,function(t){t.metaHiddenData=t.metaHiddenData||[];var i=e.index;isNaN(t.data[i])?isNaN(t.metaHiddenData[i])||(t.data[i]=t.metaHiddenData[i]):(t.metaHiddenData[i]=t.data[i],t.data[i]=NaN)}),this.chart.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}},e.controllers.polarArea=e.DatasetController.extend({linkScales:function(){},addElements:function(){this.getDataset().metaData=this.getDataset().metaData||[],i.each(this.getDataset().data,function(t,i){this.getDataset().metaData[i]=this.getDataset().metaData[i]||new e.elements.Arc({_chart:this.chart.chart,_datasetIndex:this.index,_index:i})},this)},addElementAndReset:function(t){this.getDataset().metaData=this.getDataset().metaData||[];var i=new e.elements.Arc({_chart:this.chart.chart,_datasetIndex:this.index,_index:t});this.updateElement(i,t,!0),this.getDataset().metaData.splice(t,0,i)},getVisibleDatasetCount:function(){return i.where(this.chart.data.datasets,function(t){return i.isDatasetVisible(t)}).length},update:function(t){var e=Math.min(this.chart.chartArea.right-this.chart.chartArea.left,this.chart.chartArea.bottom-this.chart.chartArea.top);this.chart.outerRadius=Math.max((e-this.chart.options.elements.arc.borderWidth/2)/2,0),this.chart.innerRadius=Math.max(this.chart.options.cutoutPercentage?this.chart.outerRadius/100*this.chart.options.cutoutPercentage:1,0),this.chart.radiusLength=(this.chart.outerRadius-this.chart.innerRadius)/this.getVisibleDatasetCount(),this.getDataset().total=0,i.each(this.getDataset().data,function(t){this.getDataset().total+=Math.abs(t)},this),this.outerRadius=this.chart.outerRadius-this.chart.radiusLength*this.index,this.innerRadius=this.outerRadius-this.chart.radiusLength,i.each(this.getDataset().metaData,function(e,i){this.updateElement(e,i,t)},this)},updateElement:function(t,e,s){for(var a=this.calculateCircumference(this.getDataset().data[e]),o=(this.chart.chartArea.left+this.chart.chartArea.right)/2,n=(this.chart.chartArea.top+this.chart.chartArea.bottom)/2,r=0,h=0;e>h;++h)isNaN(this.getDataset().data[h])||++r;var l=-.5*Math.PI+a*r,c=l+a,d={x:o,y:n,innerRadius:0,outerRadius:this.chart.options.animateScale?0:this.chart.scale.getDistanceFromCenterForValue(this.getDataset().data[e]),startAngle:this.chart.options.animateRotate?Math.PI*-.5:l,endAngle:this.chart.options.animateRotate?Math.PI*-.5:c,backgroundColor:t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().backgroundColor,e,this.chart.options.elements.arc.backgroundColor),borderWidth:t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().borderWidth,e,this.chart.options.elements.arc.borderWidth),borderColor:t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().borderColor,e,this.chart.options.elements.arc.borderColor),label:i.getValueAtIndexOrDefault(this.chart.data.labels,e,this.chart.data.labels[e])};i.extend(t,{_chart:this.chart.chart,_datasetIndex:this.index,_index:e,_scale:this.chart.scale,_model:s?d:{x:o,y:n,innerRadius:0,outerRadius:this.chart.scale.getDistanceFromCenterForValue(this.getDataset().data[e]),startAngle:l,endAngle:c,backgroundColor:t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().backgroundColor,e,this.chart.options.elements.arc.backgroundColor),borderWidth:t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().borderWidth,e,this.chart.options.elements.arc.borderWidth),borderColor:t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().borderColor,e,this.chart.options.elements.arc.borderColor),label:i.getValueAtIndexOrDefault(this.chart.data.labels,e,this.chart.data.labels[e])}}),t.pivot()},draw:function(t){var e=t||1;i.each(this.getDataset().metaData,function(t,i){t.transition(e).draw()})},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],s=t._index;t._model.backgroundColor=t.custom&&t.custom.hoverBackgroundColor?t.custom.hoverBackgroundColor:i.getValueAtIndexOrDefault(e.hoverBackgroundColor,s,i.color(t._model.backgroundColor).saturate(.5).darken(.1).rgbString()),t._model.borderColor=t.custom&&t.custom.hoverBorderColor?t.custom.hoverBorderColor:i.getValueAtIndexOrDefault(e.hoverBorderColor,s,i.color(t._model.borderColor).saturate(.5).darken(.1).rgbString()),t._model.borderWidth=t.custom&&t.custom.hoverBorderWidth?t.custom.hoverBorderWidth:i.getValueAtIndexOrDefault(e.hoverBorderWidth,s,t._model.borderWidth)},removeHoverStyle:function(t){var e=(this.chart.data.datasets[t._datasetIndex],t._index);t._model.backgroundColor=t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().backgroundColor,e,this.chart.options.elements.arc.backgroundColor),t._model.borderColor=t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().borderColor,e,this.chart.options.elements.arc.borderColor),t._model.borderWidth=t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().borderWidth,e,this.chart.options.elements.arc.borderWidth)},calculateCircumference:function(t){if(isNaN(t))return 0;var e=i.where(this.getDataset().data,function(t){return isNaN(t)}).length;return 2*Math.PI/(this.getDataset().data.length-e)}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.radar={scale:{type:"radialLinear"},elements:{line:{tension:0}}},e.controllers.radar=e.DatasetController.extend({linkScales:function(){},addElements:function(){this.getDataset().metaData=this.getDataset().metaData||[],this.getDataset().metaDataset=this.getDataset().metaDataset||new e.elements.Line({_chart:this.chart.chart,_datasetIndex:this.index,_points:this.getDataset().metaData,_loop:!0}),i.each(this.getDataset().data,function(t,i){this.getDataset().metaData[i]=this.getDataset().metaData[i]||new e.elements.Point({_chart:this.chart.chart,_datasetIndex:this.index,_index:i,_model:{x:0,y:0}})},this)},addElementAndReset:function(t){this.getDataset().metaData=this.getDataset().metaData||[];var i=new e.elements.Point({_chart:this.chart.chart,_datasetIndex:this.index,_index:t});this.updateElement(i,t,!0),this.getDataset().metaData.splice(t,0,i),this.updateBezierControlPoints()},update:function(t){var e,s=this.getDataset().metaDataset,a=this.getDataset().metaData,o=this.chart.scale;e=o.min<0&&o.max<0?o.getPointPositionForValue(0,o.max):o.min>0&&o.max>0?o.getPointPositionForValue(0,o.min):o.getPointPositionForValue(0,0),i.extend(this.getDataset().metaDataset,{_datasetIndex:this.index,_children:this.getDataset().metaData,_model:{tension:s.custom&&s.custom.tension?s.custom.tension:i.getValueOrDefault(this.getDataset().tension,this.chart.options.elements.line.tension),backgroundColor:s.custom&&s.custom.backgroundColor?s.custom.backgroundColor:this.getDataset().backgroundColor||this.chart.options.elements.line.backgroundColor,borderWidth:s.custom&&s.custom.borderWidth?s.custom.borderWidth:this.getDataset().borderWidth||this.chart.options.elements.line.borderWidth,borderColor:s.custom&&s.custom.borderColor?s.custom.borderColor:this.getDataset().borderColor||this.chart.options.elements.line.borderColor,fill:s.custom&&s.custom.fill?s.custom.fill:void 0!==this.getDataset().fill?this.getDataset().fill:this.chart.options.elements.line.fill,borderCapStyle:s.custom&&s.custom.borderCapStyle?s.custom.borderCapStyle:this.getDataset().borderCapStyle||this.chart.options.elements.line.borderCapStyle,borderDash:s.custom&&s.custom.borderDash?s.custom.borderDash:this.getDataset().borderDash||this.chart.options.elements.line.borderDash,borderDashOffset:s.custom&&s.custom.borderDashOffset?s.custom.borderDashOffset:this.getDataset().borderDashOffset||this.chart.options.elements.line.borderDashOffset,borderJoinStyle:s.custom&&s.custom.borderJoinStyle?s.custom.borderJoinStyle:this.getDataset().borderJoinStyle||this.chart.options.elements.line.borderJoinStyle,scaleTop:o.top,scaleBottom:o.bottom,scaleZero:e}}),this.getDataset().metaDataset.pivot(),i.each(a,function(e,i){this.updateElement(e,i,t)},this),this.updateBezierControlPoints()},updateElement:function(t,e,s){var a=this.chart.scale.getPointPositionForValue(e,this.getDataset().data[e]);i.extend(t,{_datasetIndex:this.index,_index:e,_scale:this.chart.scale,_model:{x:s?this.chart.scale.xCenter:a.x,y:s?this.chart.scale.yCenter:a.y,tension:t.custom&&t.custom.tension?t.custom.tension:i.getValueOrDefault(this.getDataset().tension,this.chart.options.elements.line.tension),radius:t.custom&&t.custom.radius?t.custom.radius:i.getValueAtIndexOrDefault(this.getDataset().pointRadius,e,this.chart.options.elements.point.radius),backgroundColor:t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().pointBackgroundColor,e,this.chart.options.elements.point.backgroundColor),borderColor:t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().pointBorderColor,e,this.chart.options.elements.point.borderColor),borderWidth:t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().pointBorderWidth,e,this.chart.options.elements.point.borderWidth),pointStyle:t.custom&&t.custom.pointStyle?t.custom.pointStyle:i.getValueAtIndexOrDefault(this.getDataset().pointStyle,e,this.chart.options.elements.point.pointStyle),hitRadius:t.custom&&t.custom.hitRadius?t.custom.hitRadius:i.getValueAtIndexOrDefault(this.getDataset().hitRadius,e,this.chart.options.elements.point.hitRadius)}}),t._model.skip=t.custom&&t.custom.skip?t.custom.skip:isNaN(t._model.x)||isNaN(t._model.y)},updateBezierControlPoints:function(){i.each(this.getDataset().metaData,function(t,e){var s=i.splineCurve(i.previousItem(this.getDataset().metaData,e,!0)._model,t._model,i.nextItem(this.getDataset().metaData,e,!0)._model,t._model.tension);t._model.controlPointPreviousX=Math.max(Math.min(s.previous.x,this.chart.chartArea.right),this.chart.chartArea.left),t._model.controlPointPreviousY=Math.max(Math.min(s.previous.y,this.chart.chartArea.bottom),this.chart.chartArea.top),t._model.controlPointNextX=Math.max(Math.min(s.next.x,this.chart.chartArea.right),this.chart.chartArea.left),t._model.controlPointNextY=Math.max(Math.min(s.next.y,this.chart.chartArea.bottom),this.chart.chartArea.top),t.pivot()},this)},draw:function(t){var e=t||1;i.each(this.getDataset().metaData,function(t,i){t.transition(e)}),this.getDataset().metaDataset.transition(e).draw(),i.each(this.getDataset().metaData,function(t){t.draw()})},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],s=t._index;t._model.radius=t.custom&&t.custom.hoverRadius?t.custom.hoverRadius:i.getValueAtIndexOrDefault(e.pointHoverRadius,s,this.chart.options.elements.point.hoverRadius),t._model.backgroundColor=t.custom&&t.custom.hoverBackgroundColor?t.custom.hoverBackgroundColor:i.getValueAtIndexOrDefault(e.pointHoverBackgroundColor,s,i.color(t._model.backgroundColor).saturate(.5).darken(.1).rgbString()),t._model.borderColor=t.custom&&t.custom.hoverBorderColor?t.custom.hoverBorderColor:i.getValueAtIndexOrDefault(e.pointHoverBorderColor,s,i.color(t._model.borderColor).saturate(.5).darken(.1).rgbString()),t._model.borderWidth=t.custom&&t.custom.hoverBorderWidth?t.custom.hoverBorderWidth:i.getValueAtIndexOrDefault(e.pointHoverBorderWidth,s,t._model.borderWidth)},removeHoverStyle:function(t){var e=(this.chart.data.datasets[t._datasetIndex],t._index);t._model.radius=t.custom&&t.custom.radius?t.custom.radius:i.getValueAtIndexOrDefault(this.getDataset().radius,e,this.chart.options.elements.point.radius),t._model.backgroundColor=t.custom&&t.custom.backgroundColor?t.custom.backgroundColor:i.getValueAtIndexOrDefault(this.getDataset().pointBackgroundColor,e,this.chart.options.elements.point.backgroundColor),t._model.borderColor=t.custom&&t.custom.borderColor?t.custom.borderColor:i.getValueAtIndexOrDefault(this.getDataset().pointBorderColor,e,this.chart.options.elements.point.borderColor),t._model.borderWidth=t.custom&&t.custom.borderWidth?t.custom.borderWidth:i.getValueAtIndexOrDefault(this.getDataset().pointBorderWidth,e,this.chart.options.elements.point.borderWidth)}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=(e.helpers,{position:"bottom"}),s=e.Scale.extend({buildTicks:function(t){this.ticks=this.chart.data.labels},getLabelForIndex:function(t,e){return this.ticks[t]},getPixelForValue:function(t,e,i,s){if(this.isHorizontal()){var a=this.width-(this.paddingLeft+this.paddingRight),o=a/Math.max(this.chart.data.labels.length-(this.options.gridLines.offsetGridLines?0:1),1),n=o*e+this.paddingLeft;return this.options.gridLines.offsetGridLines&&s&&(n+=o/2),this.left+Math.round(n)}var r=this.height-(this.paddingTop+this.paddingBottom),h=r/Math.max(this.chart.data.labels.length-(this.options.gridLines.offsetGridLines?0:1),1),l=h*e+this.paddingTop;return this.options.gridLines.offsetGridLines&&s&&(l+=h/2),this.top+Math.round(l)}});e.scaleService.registerScaleType("category",s,i)}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers,s={position:"left",ticks:{callback:function(t,e,s){var a=s[1]-s[0];Math.abs(a)>1&&t!==Math.floor(t)&&(a=t-Math.floor(t));var o=i.log10(Math.abs(a)),n="";if(0!==t){var r=-1*Math.floor(o);r=Math.max(Math.min(r,20),0),n=t.toFixed(r)}else n="0";return n}}},a=e.Scale.extend({determineDataLimits:function(){if(this.min=null,this.max=null,this.options.stacked){var t={},e=!1,s=!1;i.each(this.chart.data.datasets,function(a){void 0===t[a.type]&&(t[a.type]={positiveValues:[],negativeValues:[]});var o=t[a.type].positiveValues,n=t[a.type].negativeValues;i.isDatasetVisible(a)&&(this.isHorizontal()?a.xAxisID===this.id:a.yAxisID===this.id)&&i.each(a.data,function(t,i){var a=+this.getRightValue(t);isNaN(a)||(o[i]=o[i]||0,n[i]=n[i]||0,this.options.relativePoints?o[i]=100:0>a?(s=!0,n[i]+=a):(e=!0,o[i]+=a))},this)},this),i.each(t,function(t){var e=t.positiveValues.concat(t.negativeValues),s=i.min(e),a=i.max(e);this.min=null===this.min?s:Math.min(this.min,s),this.max=null===this.max?a:Math.max(this.max,a)},this)}else i.each(this.chart.data.datasets,function(t){i.isDatasetVisible(t)&&(this.isHorizontal()?t.xAxisID===this.id:t.yAxisID===this.id)&&i.each(t.data,function(t,e){var i=+this.getRightValue(t);isNaN(i)||(null===this.min?this.min=i:i<this.min&&(this.min=i),null===this.max?this.max=i:i>this.max&&(this.max=i))},this)},this);if(this.options.ticks.beginAtZero){var a=i.sign(this.min),o=i.sign(this.max);0>a&&0>o?this.max=0:a>0&&o>0&&(this.min=0)}void 0!==this.options.ticks.min?this.min=this.options.ticks.min:void 0!==this.options.ticks.suggestedMin&&(this.min=Math.min(this.min,this.options.ticks.suggestedMin)),void 0!==this.options.ticks.max?this.max=this.options.ticks.max:void 0!==this.options.ticks.suggestedMax&&(this.max=Math.max(this.max,this.options.ticks.suggestedMax)),this.min===this.max&&(this.min--,this.max++)},buildTicks:function(){this.ticks=[];var t;t=this.isHorizontal()?Math.min(this.options.ticks.maxTicksLimit?this.options.ticks.maxTicksLimit:11,Math.ceil(this.width/50)):Math.min(this.options.ticks.maxTicksLimit?this.options.ticks.maxTicksLimit:11,Math.ceil(this.height/(2*this.options.ticks.fontSize))),t=Math.max(2,t);var e=i.niceNum(this.max-this.min,!1),s=i.niceNum(e/(t-1),!0),a=Math.floor(this.min/s)*s,o=Math.ceil(this.max/s)*s,n=Math.ceil((o-a)/s);this.ticks.push(void 0!==this.options.ticks.min?this.options.ticks.min:a);for(var r=1;n>r;++r)this.ticks.push(a+r*s);this.ticks.push(void 0!==this.options.ticks.max?this.options.ticks.max:o),("left"==this.options.position||"right"==this.options.position)&&this.ticks.reverse(),this.max=i.max(this.ticks),this.min=i.min(this.ticks),this.options.ticks.reverse?(this.ticks.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),this.ticksAsNumbers=this.ticks.slice(),this.zeroLineIndex=this.ticks.indexOf(0)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t,e,i,s){var a,o=+this.getRightValue(t),n=this.end-this.start;if(this.isHorizontal()){var r=this.width-(this.paddingLeft+this.paddingRight);return a=this.left+r/n*(o-this.start),Math.round(a+this.paddingLeft)}var h=this.height-(this.paddingTop+this.paddingBottom);return a=this.bottom-this.paddingBottom-h/n*(o-this.start),Math.round(a)},getPixelForTick:function(t,e){return this.getPixelForValue(this.ticksAsNumbers[t],null,null,e)}});e.scaleService.registerScaleType("linear",a,s)}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers,s={position:"left",ticks:{callback:function(t,i,s){var a=t/Math.pow(10,Math.floor(e.helpers.log10(t)));return 1===a||2===a||5===a||0===i||i===s.length-1?t.toExponential():""}}},a=e.Scale.extend({determineDataLimits:function(){if(this.min=null,this.max=null,this.options.stacked){var t={};i.each(this.chart.data.datasets,function(e){i.isDatasetVisible(e)&&(this.isHorizontal()?e.xAxisID===this.id:e.yAxisID===this.id)&&(void 0===t[e.type]&&(t[e.type]=[]),i.each(e.data,function(i,s){var a=t[e.type],o=+this.getRightValue(i);isNaN(o)||(a[s]=a[s]||0,this.options.relativePoints?a[s]=100:a[s]+=o)},this))},this),i.each(t,function(t){var e=i.min(t),s=i.max(t);this.min=null===this.min?e:Math.min(this.min,e),this.max=null===this.max?s:Math.max(this.max,s)},this)}else i.each(this.chart.data.datasets,function(t){i.isDatasetVisible(t)&&(this.isHorizontal()?t.xAxisID===this.id:t.yAxisID===this.id)&&i.each(t.data,function(t,e){var i=+this.getRightValue(t);isNaN(i)||(null===this.min?this.min=i:i<this.min&&(this.min=i),null===this.max?this.max=i:i>this.max&&(this.max=i))},this)},this);this.min=void 0!==this.options.ticks.min?this.options.ticks.min:this.min,this.max=void 0!==this.options.ticks.max?this.options.ticks.max:this.max,this.min===this.max&&(0!==this.min&&null!==this.min?(this.min=Math.pow(10,Math.floor(i.log10(this.min))-1),this.max=Math.pow(10,Math.floor(i.log10(this.max))+1)):(this.min=1,this.max=10))},buildTicks:function(){this.tickValues=[];for(var t=void 0!==this.options.ticks.min?this.options.ticks.min:Math.pow(10,Math.floor(i.log10(this.min)));t<this.max;){this.tickValues.push(t);var e=Math.floor(i.log10(t)),s=Math.floor(t/Math.pow(10,e))+1;10===s&&(s=1,++e),t=s*Math.pow(10,e)}var a=void 0!==this.options.ticks.max?this.options.ticks.max:t;this.tickValues.push(a),("left"==this.options.position||"right"==this.options.position)&&this.tickValues.reverse(),this.max=i.max(this.tickValues),this.min=i.min(this.tickValues),this.options.ticks.reverse?(this.tickValues.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),this.ticks=this.tickValues.slice()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t,e){return this.getPixelForValue(this.tickValues[t],null,null,e);
41
+ },getPixelForValue:function(t,e,s,a){var o,n=+this.getRightValue(t),r=i.log10(this.end)-i.log10(this.start);if(this.isHorizontal())if(0===n)o=this.left+this.paddingLeft;else{var h=this.width-(this.paddingLeft+this.paddingRight);o=this.left+h/r*(i.log10(n)-i.log10(this.start)),o+=this.paddingLeft}else if(0===n)o=this.top+this.paddingTop;else{var l=this.height-(this.paddingTop+this.paddingBottom);o=this.bottom-this.paddingBottom-l/r*(i.log10(n)-i.log10(this.start))}return o}});e.scaleService.registerScaleType("logarithmic",a,s)}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers,s={display:!0,animate:!0,lineArc:!1,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2},pointLabels:{fontFamily:"'Arial'",fontStyle:"normal",fontSize:10,fontColor:"#666",callback:function(t){return t}}},a=e.Scale.extend({getValueCount:function(){return this.chart.data.labels.length},setDimensions:function(){this.width=this.maxWidth,this.height=this.maxHeight,this.xCenter=Math.round(this.width/2),this.yCenter=Math.round(this.height/2);var t=i.min([this.height,this.width]);this.drawingArea=this.options.display?t/2-(this.options.ticks.fontSize/2+this.options.ticks.backdropPaddingY):t/2},determineDataLimits:function(){if(this.min=null,this.max=null,i.each(this.chart.data.datasets,function(t){i.isDatasetVisible(t)&&i.each(t.data,function(t,e){var i=+this.getRightValue(t);isNaN(i)||(null===this.min?this.min=i:i<this.min&&(this.min=i),null===this.max?this.max=i:i>this.max&&(this.max=i))},this)},this),this.options.ticks.beginAtZero){var t=i.sign(this.min),e=i.sign(this.max);0>t&&0>e?this.max=0:t>0&&e>0&&(this.min=0)}void 0!==this.options.ticks.min?this.min=this.options.ticks.min:void 0!==this.options.ticks.suggestedMin&&(this.min=Math.min(this.min,this.options.ticks.suggestedMin)),void 0!==this.options.ticks.max?this.max=this.options.ticks.max:void 0!==this.options.ticks.suggestedMax&&(this.max=Math.max(this.max,this.options.ticks.suggestedMax)),this.min===this.max&&(this.min--,this.max++)},buildTicks:function(){this.ticks=[];var t=Math.min(this.options.ticks.maxTicksLimit?this.options.ticks.maxTicksLimit:11,Math.ceil(this.drawingArea/(1.5*this.options.ticks.fontSize)));t=Math.max(2,t);var e=i.niceNum(this.max-this.min,!1),s=i.niceNum(e/(t-1),!0),a=Math.floor(this.min/s)*s,o=Math.ceil(this.max/s)*s,n=Math.ceil((o-a)/s);this.ticks.push(void 0!==this.options.ticks.min?this.options.ticks.min:a);for(var r=1;n>r;++r)this.ticks.push(a+r*s);this.ticks.push(void 0!==this.options.ticks.max?this.options.ticks.max:o),this.max=i.max(this.ticks),this.min=i.min(this.ticks),this.options.ticks.reverse?(this.ticks.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),this.zeroLineIndex=this.ticks.indexOf(0)},convertTicksToLabels:function(){e.Scale.prototype.convertTicksToLabels.call(this),this.pointLabels=this.chart.data.labels.map(this.options.pointLabels.callback,this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t,e,s,a,o,n,r,h,l,c,d,u,g=i.min([this.height/2-this.options.pointLabels.fontSize-5,this.width/2]),m=this.width,p=0;for(this.ctx.font=i.fontString(this.options.pointLabels.fontSize,this.options.pointLabels.fontStyle,this.options.pointLabels.fontFamily),e=0;e<this.getValueCount();e++)t=this.getPointPosition(e,g),s=this.ctx.measureText(this.pointLabels[e]?this.pointLabels[e]:"").width+5,0===e||e===this.getValueCount()/2?(a=s/2,t.x+a>m&&(m=t.x+a,o=e),t.x-a<p&&(p=t.x-a,r=e)):e<this.getValueCount()/2?t.x+s>m&&(m=t.x+s,o=e):e>this.getValueCount()/2&&t.x-s<p&&(p=t.x-s,r=e);l=p,c=Math.ceil(m-this.width),n=this.getIndexAngle(o),h=this.getIndexAngle(r),d=c/Math.sin(n+Math.PI/2),u=l/Math.sin(h+Math.PI/2),d=i.isNumber(d)?d:0,u=i.isNumber(u)?u:0,this.drawingArea=Math.round(g-(u+d)/2),this.setCenterPoint(u,d)},setCenterPoint:function(t,e){var i=this.width-e-this.drawingArea,s=t+this.drawingArea;this.xCenter=Math.round((s+i)/2+this.left),this.yCenter=Math.round(this.height/2+this.top)},getIndexAngle:function(t){var e=2*Math.PI/this.getValueCount();return t*e-Math.PI/2},getDistanceFromCenterForValue:function(t){if(null===t)return 0;var e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e},getPointPosition:function(t,e){var i=this.getIndexAngle(t);return{x:Math.round(Math.cos(i)*e)+this.xCenter,y:Math.round(Math.sin(i)*e)+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},draw:function(){if(this.options.display){var t=this.ctx;if(i.each(this.ticks,function(e,s){if(s>0||this.options.reverse){var a=this.getDistanceFromCenterForValue(this.ticks[s]),o=this.yCenter-a;if(this.options.gridLines.display)if(t.strokeStyle=this.options.gridLines.color,t.lineWidth=this.options.gridLines.lineWidth,this.options.lineArc)t.beginPath(),t.arc(this.xCenter,this.yCenter,a,0,2*Math.PI),t.closePath(),t.stroke();else{t.beginPath();for(var n=0;n<this.getValueCount();n++){var r=this.getPointPosition(n,this.getDistanceFromCenterForValue(this.ticks[s]));0===n?t.moveTo(r.x,r.y):t.lineTo(r.x,r.y)}t.closePath(),t.stroke()}if(this.options.ticks.display){if(t.font=i.fontString(this.options.ticks.fontSize,this.options.ticks.fontStyle,this.options.ticks.fontFamily),this.options.ticks.showLabelBackdrop){var h=t.measureText(e).width;t.fillStyle=this.options.ticks.backdropColor,t.fillRect(this.xCenter-h/2-this.options.ticks.backdropPaddingX,o-this.options.ticks.fontSize/2-this.options.ticks.backdropPaddingY,h+2*this.options.ticks.backdropPaddingX,this.options.ticks.fontSize+2*this.options.ticks.backdropPaddingY)}t.textAlign="center",t.textBaseline="middle",t.fillStyle=this.options.ticks.fontColor,t.fillText(e,this.xCenter,o)}}},this),!this.options.lineArc){t.lineWidth=this.options.angleLines.lineWidth,t.strokeStyle=this.options.angleLines.color;for(var e=this.getValueCount()-1;e>=0;e--){if(this.options.angleLines.display){var s=this.getPointPosition(e,this.getDistanceFromCenterForValue(this.options.reverse?this.min:this.max));t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(s.x,s.y),t.stroke(),t.closePath()}var a=this.getPointPosition(e,this.getDistanceFromCenterForValue(this.options.reverse?this.min:this.max)+5);t.font=i.fontString(this.options.pointLabels.fontSize,this.options.pointLabels.fontStyle,this.options.pointLabels.fontFamily),t.fillStyle=this.options.pointLabels.fontColor;var o=this.pointLabels.length,n=this.pointLabels.length/2,r=n/2,h=r>e||e>o-r,l=e===r||e===o-r;0===e?t.textAlign="center":e===n?t.textAlign="center":n>e?t.textAlign="left":t.textAlign="right",l?t.textBaseline="middle":h?t.textBaseline="bottom":t.textBaseline="top",t.fillText(this.pointLabels[e]?this.pointLabels[e]:"",a.x,a.y)}}}}});e.scaleService.registerScaleType("radialLinear",a,s)}.call(this),function(t){"use strict";if(!t)return void console.warn("Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at http://momentjs.com/");var e=this,i=e.Chart,s=i.helpers,a={units:[{name:"millisecond",steps:[1,2,5,10,20,50,100,250,500]},{name:"second",steps:[1,2,5,10,30]},{name:"minute",steps:[1,2,5,10,30]},{name:"hour",steps:[1,2,3,6,12]},{name:"day",steps:[1,2,5]},{name:"week",maxStep:4},{name:"month",maxStep:3},{name:"quarter",maxStep:4},{name:"year",maxStep:!1}]},o={position:"bottom",time:{format:!1,unit:!1,round:!1,displayFormat:!1,displayFormats:{millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm:ss a",hour:"MMM D, hA",day:"ll",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"}}},n=i.Scale.extend({getLabelMoment:function(t,e){return this.labelMoments[t][e]},determineDataLimits:function(){this.labelMoments=[];var e=[];this.chart.data.labels&&this.chart.data.labels.length>0?(s.each(this.chart.data.labels,function(t,i){var s=this.parseTime(t);this.options.time.round&&s.startOf(this.options.time.round),e.push(s)},this),this.firstTick=t.min.call(this,e),this.lastTick=t.max.call(this,e)):(this.firstTick=null,this.lastTick=null),s.each(this.chart.data.datasets,function(i,a){var o=[];"object"==typeof i.data[0]?s.each(i.data,function(e,i){var s=this.parseTime(this.getRightValue(e));this.options.time.round&&s.startOf(this.options.time.round),o.push(s),this.firstTick=null!==this.firstTick?t.min(this.firstTick,s):s,this.lastTick=null!==this.lastTick?t.max(this.lastTick,s):s},this):o=e,this.labelMoments.push(o)},this),this.options.time.min&&(this.firstTick=this.parseTime(this.options.time.min)),this.options.time.max&&(this.lastTick=this.parseTime(this.options.time.max)),this.firstTick=(this.firstTick||t()).clone(),this.lastTick=(this.lastTick||t()).clone()},buildTicks:function(t){if(this.ticks=[],this.unitScale=1,this.options.time.unit)this.tickUnit=this.options.time.unit||"day",this.displayFormat=this.options.time.displayFormats[this.tickUnit],this.tickRange=Math.ceil(this.lastTick.diff(this.firstTick,this.tickUnit,!0));else{var e=this.isHorizontal()?this.width-(this.paddingLeft+this.paddingRight):this.height-(this.paddingTop+this.paddingBottom),i=e/(this.options.ticks.fontSize+10),o=this.options.time.round?0:1;this.tickUnit="millisecond",this.tickRange=Math.ceil(this.lastTick.diff(this.firstTick,this.tickUnit,!0)+o),this.displayFormat=this.options.time.displayFormats[this.tickUnit];for(var n=0,r=a.units[n];n<a.units.length;){if(this.unitScale=1,s.isArray(r.steps)&&Math.ceil(this.tickRange/i)<s.max(r.steps)){for(var h=0;h<r.steps.length;++h)if(r.steps[h]>Math.ceil(this.tickRange/i)){this.unitScale=r.steps[h];break}break}if(r.maxStep===!1||Math.ceil(this.tickRange/i)<r.maxStep){this.unitScale=Math.ceil(this.tickRange/i);break}++n,r=a.units[n],this.tickUnit=r.name,this.tickRange=Math.ceil(this.lastTick.diff(this.firstTick,this.tickUnit)+o),this.displayFormat=this.options.time.displayFormats[r.name]}}var l;this.options.time.min?l=this.firstTick.clone().startOf(this.tickUnit):(this.firstTick.startOf(this.tickUnit),l=this.firstTick),this.options.time.max||this.lastTick.endOf(this.tickUnit),this.smallestLabelSeparation=this.width,s.each(this.chart.data.datasets,function(t,e){for(var i=1;i<this.labelMoments[e].length;i++)this.smallestLabelSeparation=Math.min(this.smallestLabelSeparation,this.labelMoments[e][i].diff(this.labelMoments[e][i-1],this.tickUnit,!0))},this),this.options.time.displayFormat&&(this.displayFormat=this.options.time.displayFormat),this.ticks.push(this.firstTick.clone());for(var c=1;c<this.tickRange;++c){var d=l.clone().add(c,this.tickUnit);if(this.options.time.max&&d.diff(this.lastTick,this.tickUnit,!0)>=0)break;c%this.unitScale===0&&this.ticks.push(d)}this.options.time.max?this.ticks.push(this.lastTick.clone()):0!==this.ticks[this.ticks.length-1].diff(this.lastTick,this.tickUnit,!0)&&(this.tickRange=Math.ceil(this.tickRange/this.unitScale)*this.unitScale,this.ticks.push(this.firstTick.clone().add(this.tickRange,this.tickUnit)),this.lastTick=this.ticks[this.ticks.length-1].clone())},getLabelForIndex:function(t,e){var i=this.chart.data.labels&&t<this.chart.data.labels.length?this.chart.data.labels[t]:"";return"object"==typeof this.chart.data.datasets[e].data[0]&&(i=this.getRightValue(this.chart.data.datasets[e].data[t])),this.options.time.tooltipFormat&&(i=this.parseTime(i).format(this.options.time.tooltipFormat)),i},convertTicksToLabels:function(){this.ticks=this.ticks.map(function(t,e,i){var s=t.format(this.displayFormat);return this.options.ticks.userCallback?this.options.ticks.userCallback(s,e,i):s},this)},getPixelForValue:function(t,e,i,s){var a=this.getLabelMoment(i,e),o=a.diff(this.firstTick,this.tickUnit,!0),n=o/this.tickRange;if(this.isHorizontal()){var r=this.width-(this.paddingLeft+this.paddingRight),h=(r/Math.max(this.ticks.length-1,1),r*n+this.paddingLeft);return this.left+Math.round(h)}var l=this.height-(this.paddingTop+this.paddingBottom),c=(l/Math.max(this.ticks.length-1,1),l*n+this.paddingTop);return this.top+Math.round(c)},parseTime:function(e){return"function"==typeof e.getMonth||"number"==typeof e?t(e):e.isValid&&e.isValid()?e:"string"!=typeof this.options.time.format&&this.options.time.format.call?this.options.time.format(e):t(e,this.options.time.format)}});i.scaleService.registerScaleType("time",n,o)}.call(this,t),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.global.elements.arc={backgroundColor:e.defaults.global.defaultColor,borderColor:"#fff",borderWidth:2},e.elements.Arc=e.Element.extend({inLabelRange:function(t){var e=this._view;return e?Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2):!1},inRange:function(t,e){var s=this._view;if(s){var a=i.getAngleFromPoint(s,{x:t,y:e}),o=s.startAngle<-.5*Math.PI?s.startAngle+2*Math.PI:s.startAngle>1.5*Math.PI?s.startAngle-2*Math.PI:s.startAngle,n=s.endAngle<-.5*Math.PI?s.endAngle+2*Math.PI:s.endAngle>1.5*Math.PI?s.endAngle-2*Math.PI:s.endAngle,r=a.angle>=o&&a.angle<=n,h=a.distance>=s.innerRadius&&a.distance<=s.outerRadius;return r&&h}return!1},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,i=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},draw:function(){var t=this._chart.ctx,e=this._view;t.beginPath(),t.arc(e.x,e.y,e.outerRadius,e.startAngle,e.endAngle),t.arc(e.x,e.y,e.innerRadius,e.endAngle,e.startAngle,!0),t.closePath(),t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth,t.fillStyle=e.backgroundColor,t.fill(),t.lineJoin="bevel",e.borderWidth&&t.stroke()}})}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers;e.defaults.global.elements.line={tension:.4,backgroundColor:e.defaults.global.defaultColor,borderWidth:3,borderColor:e.defaults.global.defaultColor,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",fill:!0},e.elements.Line=e.Element.extend({lineToNextPoint:function(t,e,i,s,a){var o=this._chart.ctx;e._view.skip?s.call(this,t,e,i):t._view.skip?a.call(this,t,e,i):0===e._view.tension?o.lineTo(e._view.x,e._view.y):o.bezierCurveTo(t._view.controlPointNextX,t._view.controlPointNextY,e._view.controlPointPreviousX,e._view.controlPointPreviousY,e._view.x,e._view.y)},draw:function(){function t(t){n._view.skip||r._view.skip?t&&o.lineTo(s._view.scaleZero.x,s._view.scaleZero.y):o.bezierCurveTo(r._view.controlPointNextX,r._view.controlPointNextY,n._view.controlPointPreviousX,n._view.controlPointPreviousY,n._view.x,n._view.y)}var s=this,a=this._view,o=this._chart.ctx,n=this._children[0],r=this._children[this._children.length-1];o.save(),this._children.length>0&&a.fill&&(o.beginPath(),i.each(this._children,function(t,e){var s=i.previousItem(this._children,e),n=i.nextItem(this._children,e);0===e?(this._loop?o.moveTo(a.scaleZero.x,a.scaleZero.y):o.moveTo(t._view.x,a.scaleZero),t._view.skip?this._loop||o.moveTo(n._view.x,this._view.scaleZero):o.lineTo(t._view.x,t._view.y)):this.lineToNextPoint(s,t,n,function(t,e,i){this._loop?o.lineTo(this._view.scaleZero.x,this._view.scaleZero.y):(o.lineTo(t._view.x,this._view.scaleZero),o.moveTo(i._view.x,this._view.scaleZero))},function(t,e){o.lineTo(e._view.x,e._view.y)})},this),this._loop?t(!0):(o.lineTo(this._children[this._children.length-1]._view.x,a.scaleZero),o.lineTo(this._children[0]._view.x,a.scaleZero)),o.fillStyle=a.backgroundColor||e.defaults.global.defaultColor,o.closePath(),o.fill()),o.lineCap=a.borderCapStyle||e.defaults.global.elements.line.borderCapStyle,o.setLineDash&&o.setLineDash(a.borderDash||e.defaults.global.elements.line.borderDash),o.lineDashOffset=a.borderDashOffset||e.defaults.global.elements.line.borderDashOffset,o.lineJoin=a.borderJoinStyle||e.defaults.global.elements.line.borderJoinStyle,o.lineWidth=a.borderWidth||e.defaults.global.elements.line.borderWidth,o.strokeStyle=a.borderColor||e.defaults.global.defaultColor,o.beginPath(),i.each(this._children,function(t,e){var s=i.previousItem(this._children,e),a=i.nextItem(this._children,e);0===e?o.moveTo(t._view.x,t._view.y):this.lineToNextPoint(s,t,a,function(t,e,i){o.moveTo(i._view.x,i._view.y)},function(t,e){o.moveTo(e._view.x,e._view.y)})},this),this._loop&&this._children.length>0&&t(),o.stroke(),o.restore()}})}.call(this),function(){"use strict";var t=this,e=t.Chart;e.helpers;e.defaults.global.elements.point={radius:3,pointStyle:"circle",backgroundColor:e.defaults.global.defaultColor,borderWidth:1,borderColor:e.defaults.global.defaultColor,hitRadius:1,hoverRadius:4,hoverBorderWidth:1},e.elements.Point=e.Element.extend({inRange:function(t,e){var i=this._view;if(i){var s=i.hitRadius+i.radius;return Math.pow(t-i.x,2)+Math.pow(e-i.y,2)<Math.pow(s,2)}return!1},inLabelRange:function(t){var e=this._view;return e?Math.pow(t-e.x,2)<Math.pow(e.radius+e.hitRadius,2):!1},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(){var t=this._view,i=this._chart.ctx;if(!t.skip&&(t.radius>0||t.borderWidth>0)){i.strokeStyle=t.borderColor||e.defaults.global.defaultColor,i.lineWidth=t.borderWidth||e.defaults.global.elements.point.borderWidth,i.fillStyle=t.backgroundColor||e.defaults.global.defaultColor;var s=t.radius||e.defaults.global.elements.point.radius;switch(t.pointStyle){case"circle":default:i.beginPath(),i.arc(t.x,t.y,s,0,2*Math.PI),i.closePath(),i.fill();break;case"triangle":i.beginPath();var a=3*s/Math.sqrt(3),o=a*Math.sqrt(3)/2;i.moveTo(t.x-a/2,t.y+o/3),i.lineTo(t.x+a/2,t.y+o/3),i.lineTo(t.x,t.y-2*o/3),i.closePath(),i.fill();break;case"rect":i.fillRect(t.x-1/Math.SQRT2*s,t.y-1/Math.SQRT2*s,2/Math.SQRT2*s,2/Math.SQRT2*s),i.strokeRect(t.x-1/Math.SQRT2*s,t.y-1/Math.SQRT2*s,2/Math.SQRT2*s,2/Math.SQRT2*s);break;case"rectRot":i.translate(t.x,t.y),i.rotate(Math.PI/4),i.fillRect(-1/Math.SQRT2*s,-1/Math.SQRT2*s,2/Math.SQRT2*s,2/Math.SQRT2*s),i.strokeRect(-1/Math.SQRT2*s,-1/Math.SQRT2*s,2/Math.SQRT2*s,2/Math.SQRT2*s),i.setTransform(1,0,0,1,0,0);break;case"cross":i.beginPath(),i.moveTo(t.x,t.y+s),i.lineTo(t.x,t.y-s),i.moveTo(t.x-s,t.y),i.lineTo(t.x+s,t.y),i.closePath();break;case"crossRot":i.beginPath();var n=Math.cos(Math.PI/4)*s,r=Math.sin(Math.PI/4)*s;i.moveTo(t.x-n,t.y-r),i.lineTo(t.x+n,t.y+r),i.moveTo(t.x-n,t.y+r),i.lineTo(t.x+n,t.y-r),i.closePath();break;case"star":i.beginPath(),i.moveTo(t.x,t.y+s),i.lineTo(t.x,t.y-s),i.moveTo(t.x-s,t.y),i.lineTo(t.x+s,t.y);var n=Math.cos(Math.PI/4)*s,r=Math.sin(Math.PI/4)*s;i.moveTo(t.x-n,t.y-r),i.lineTo(t.x+n,t.y+r),i.moveTo(t.x-n,t.y+r),i.lineTo(t.x+n,t.y-r),i.closePath();break;case"line":i.beginPath(),i.moveTo(t.x-s,t.y),i.lineTo(t.x+s,t.y),i.closePath();break;case"dash":i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(t.x+s,t.y),i.closePath()}i.stroke()}}})}.call(this),function(){"use strict";var t=this,e=t.Chart;e.helpers;e.defaults.global.elements.rectangle={backgroundColor:e.defaults.global.defaultColor,borderWidth:0,borderColor:e.defaults.global.defaultColor},e.elements.Rectangle=e.Element.extend({draw:function(){var t=this._chart.ctx,e=this._view,i=e.width/2,s=e.x-i,a=e.x+i,o=e.base-(e.base-e.y),n=e.borderWidth/2;e.borderWidth&&(s+=n,a-=n,o+=n),t.beginPath(),t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth,t.moveTo(s,e.base),t.lineTo(s,o),t.lineTo(a,o),t.lineTo(a,e.base),t.fill(),e.borderWidth&&t.stroke()},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){var i=this._view,s=!1;return i&&(s=i.y<i.base?t>=i.x-i.width/2&&t<=i.x+i.width/2&&e>=i.y&&e<=i.base:t>=i.x-i.width/2&&t<=i.x+i.width/2&&e>=i.base&&e<=i.y),s},inLabelRange:function(t){var e=this._view;return e?t>=e.x-e.width/2&&t<=e.x+e.width/2:!1},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}})}.call(this),function(){"use strict";var t=this,e=t.Chart;e.helpers;e.Bar=function(t,i){return i.type="bar",new e(t,i)}}.call(this),function(){"use strict";var t=this,e=t.Chart;e.helpers;e.Bubble=function(t,i){return i.type="bubble",new e(t,i)}}.call(this),function(){"use strict";var t=this,e=t.Chart;e.helpers;e.Doughnut=function(t,i){return i.type="doughnut",new e(t,i)}}.call(this),function(){"use strict";var t=this,e=t.Chart;e.helpers;e.Line=function(t,i){return i.type="line",new e(t,i)}}.call(this),function(){"use strict";var t=this,e=t.Chart;e.helpers;e.PolarArea=function(t,i){return i.type="polarArea",new e(t,i)}}.call(this),function(){"use strict";var t=this,e=t.Chart,i=e.helpers,s={aspectRatio:1};e.Radar=function(t,a){return a.options=i.configMerge(s,a.options),a.type="radar",new e(t,a)}}.call(this),function(){"use strict";var t=this,e=t.Chart,i=(e.helpers,{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-1"}],yAxes:[{type:"linear",position:"left",id:"y-axis-1"}]},tooltips:{callbacks:{title:function(t,e){return""},label:function(t,e){return"("+t.xLabel+", "+t.yLabel+")"}}}});e.defaults.scatter=i,e.controllers.scatter=e.controllers.line,e.Scatter=function(t,i){return i.type="scatter",new e(t,i)}}.call(this),this.Chart});
languages/post-views-counter-pl_PL.mo CHANGED
Binary file
languages/post-views-counter-pl_PL.po CHANGED
@@ -1,15 +1,15 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Post Views Counter\n"
4
- "POT-Creation-Date: 2015-10-18 13:38+0200\n"
5
- "PO-Revision-Date: 2015-10-18 13:38+0200\n"
6
  "Last-Translator: Bartosz Arendt <info@dfactory.eu>\n"
7
  "Language-Team: dFactory <info@dfactory.eu>\n"
8
  "Language: pl_PL\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 1.8.5\n"
13
  "X-Poedit-KeywordsList: gettext;gettext_noop;__;_e;esc_attr__;esc_attr_e;"
14
  "esc_html__;esc_html_e\n"
15
  "X-Poedit-Basepath: .\n"
@@ -17,259 +17,269 @@ msgstr ""
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
  "X-Poedit-SearchPath-0: ..\n"
19
 
20
- #: ../includes/columns.php:56 ../includes/columns.php:208
21
- #: ../includes/columns.php:214 ../includes/columns.php:286
 
 
22
  msgid "Post Views"
23
  msgstr "Odwiedziny"
24
 
25
- #: ../includes/columns.php:65
26
  msgid "Edit"
27
  msgstr "Edytuj"
28
 
29
- #: ../includes/columns.php:69
30
  msgid "Adjust the views count for this post."
31
  msgstr "Zmodyfikuj liczbę odsłon tego wpisu."
32
 
33
- #: ../includes/columns.php:73
34
  msgid "OK"
35
  msgstr "OK"
36
 
37
- #: ../includes/columns.php:74
38
  msgid "Cancel"
39
  msgstr "Anuluj"
40
 
41
- #: ../includes/cron.php:49
42
  msgid "Post Views Counter reset daily counts interval"
43
  msgstr ""
44
  "Odstęp czasu po jakim resetowane będą dzienne dane o liczbie odwiedzin."
45
 
46
- #: ../includes/cron.php:54
47
  msgid "Post Views Counter cache flush interval"
48
  msgstr "Czas czyszczenia danych o odsłonach z cache"
49
 
50
- #: ../includes/functions.php:127
 
 
 
 
 
 
 
 
51
  msgid "No Posts"
52
  msgstr "Brak wpisów"
53
 
54
- #: ../includes/settings.php:36
55
  msgid "PHP"
56
  msgstr "PHP"
57
 
58
- #: ../includes/settings.php:37
59
  msgid "JavaScript"
60
  msgstr "JavaScript"
61
 
62
- #: ../includes/settings.php:41
63
  msgid "minutes"
64
  msgstr "minuty"
65
 
66
- #: ../includes/settings.php:42
67
  msgid "hours"
68
  msgstr "godziny"
69
 
70
- #: ../includes/settings.php:43
71
  msgid "days"
72
  msgstr "dni"
73
 
74
- #: ../includes/settings.php:44
75
  msgid "weeks"
76
  msgstr "tygodnie"
77
 
78
- #: ../includes/settings.php:45
79
  msgid "months"
80
  msgstr "miesiące"
81
 
82
- #: ../includes/settings.php:46
83
  msgid "years"
84
  msgstr "lata"
85
 
86
- #: ../includes/settings.php:50
87
  msgid "robots"
88
  msgstr "roboty"
89
 
90
- #: ../includes/settings.php:51
91
  msgid "logged in users"
92
  msgstr "zalogowani użytkownicy"
93
 
94
- #: ../includes/settings.php:52
95
  msgid "guests"
96
  msgstr "goście"
97
 
98
- #: ../includes/settings.php:53
99
  msgid "selected user roles"
100
  msgstr "wybrane role użytkowników"
101
 
102
- #: ../includes/settings.php:57
103
  msgid "before the content"
104
  msgstr "przed treścią"
105
 
106
- #: ../includes/settings.php:58
107
  msgid "after the content"
108
  msgstr "po treści"
109
 
110
- #: ../includes/settings.php:59
111
  msgid "manual"
112
  msgstr "ręcznie"
113
 
114
- #: ../includes/settings.php:63
115
  msgid "icon"
116
  msgstr "ikona"
117
 
118
- #: ../includes/settings.php:64
119
  msgid "label"
120
  msgstr "etykieta"
121
 
122
- #: ../includes/settings.php:69
123
  msgid "General"
124
  msgstr "Ogólne"
125
 
126
- #: ../includes/settings.php:75
127
  msgid "Display"
128
  msgstr "Wyświetlanie"
129
 
130
- #: ../includes/settings.php:130 ../includes/settings.php:142
131
- #: ../includes/settings.php:154
132
  msgid "Post Views Counter"
133
  msgstr "Licznik odwiedzin"
134
 
135
- #: ../includes/settings.php:156
136
  msgid "Need support?"
137
  msgstr "Potrzebujesz pomocy?"
138
 
139
- #: ../includes/settings.php:157
140
  msgid ""
141
  "If you are having problems with this plugin, please talk about them in the"
142
  msgstr "Jeśli masz jakieś problemy z tą wtyczką, powiedz o nich"
143
 
144
- #: ../includes/settings.php:157
145
  msgid "Support forum"
146
  msgstr "Forum pomocy"
147
 
148
- #: ../includes/settings.php:159
149
  msgid "Do you like this plugin?"
150
  msgstr "Lubisz tę wtyczkę?"
151
 
152
- #: ../includes/settings.php:160
153
  msgid "Rate it 5"
154
  msgstr "Oceń ją na 5"
155
 
156
- #: ../includes/settings.php:160
157
  msgid "on WordPress.org"
158
  msgstr "na WordPress.org"
159
 
160
- #: ../includes/settings.php:161
161
  msgid "Blog about it & link to the"
162
  msgstr "Napisz o niej i dodaj link"
163
 
164
- #: ../includes/settings.php:161
165
  msgid "plugin page"
166
  msgstr "do strony wtyczki"
167
 
168
- #: ../includes/settings.php:162
169
  msgid "Check out our other"
170
  msgstr "Sprawdż nasze inne"
171
 
172
- #: ../includes/settings.php:162
173
  msgid "WordPress plugins"
174
  msgstr "wtyczki do WordPressa"
175
 
176
- #: ../includes/settings.php:165
177
  msgid "Created by"
178
  msgstr "Stworzone przez"
179
 
180
- #: ../includes/settings.php:181
181
  msgid "Reset to defaults"
182
  msgstr "Resetuj do domyślnych"
183
 
184
- #: ../includes/settings.php:197
185
  msgid "General settings"
186
  msgstr "Ustawienia ogólne"
187
 
188
- #: ../includes/settings.php:198
189
  msgid "Post Types Count"
190
  msgstr "Własne typy wpisów"
191
 
192
- #: ../includes/settings.php:199
193
  msgid "Counter Mode"
194
  msgstr "Tryb pracy licznika"
195
 
196
- #: ../includes/settings.php:200
197
  msgid "Post Views Column"
198
  msgstr "Kolumna z liczbą odwiedzin"
199
 
200
- #: ../includes/settings.php:201
201
  msgid "Restrict Edit"
202
  msgstr "Ograniczenie edycji"
203
 
204
- #: ../includes/settings.php:202
205
  msgid "Time Between Counts"
206
  msgstr "Czas między zliczaniem"
207
 
208
- #: ../includes/settings.php:203
209
  msgid "Reset Data Interval"
210
  msgstr "Czas resetowania danych"
211
 
212
- #: ../includes/settings.php:204
213
  msgid "Flush Object Cache Interval"
214
  msgstr "Czas czyszczenia cache"
215
 
216
- #: ../includes/settings.php:205
217
  msgid "Exclude Visitors"
218
  msgstr "Wykluczanie odwiedzających"
219
 
220
- #: ../includes/settings.php:206
221
  msgid "Exclude IPs"
222
  msgstr "Wykluczanie IP"
223
 
224
- #: ../includes/settings.php:207
225
  msgid "WP-PostViews"
226
  msgstr "WP-PostViews"
227
 
228
- #: ../includes/settings.php:208
229
  msgid "Deactivation"
230
  msgstr "Deaktywacja wtyczki"
231
 
232
- #: ../includes/settings.php:212
233
  msgid "Display settings"
234
  msgstr "Ustawienia wyświetlania"
235
 
236
- #: ../includes/settings.php:213
237
  msgid "Post Views Label"
238
  msgstr "Etykieta licznika"
239
 
240
- #: ../includes/settings.php:214
241
  msgid "Post Types Display"
242
  msgstr "Wyświetlanie licznika"
243
 
244
- #: ../includes/settings.php:215
245
  msgid "Restrict Display"
246
  msgstr "Ograniczenia wyświetlania"
247
 
248
- #: ../includes/settings.php:216
249
  msgid "Position"
250
  msgstr "Pozycja"
251
 
252
- #: ../includes/settings.php:217
253
  msgid "Display Style"
254
  msgstr "Styl wyświetlania"
255
 
256
- #: ../includes/settings.php:218
257
  msgid "Icon Class"
258
  msgstr "Klasa ikony"
259
 
260
- #: ../includes/settings.php:229
261
  msgid "Enter the label for the post views counter field."
262
  msgstr "Wpisz etykietę jaka będzie wyświetlana w liczniku odwiedzin wpisu."
263
 
264
- #: ../includes/settings.php:247
265
  msgid "Select post types for which post views will be counted."
266
  msgstr "Wybierz typy wpisów dla których będzie włączone zliczanie."
267
 
268
- #: ../includes/settings.php:264
269
  msgid "Select post types for which post views will be displayed."
270
  msgstr "Wybierz typy wpisów dla których licznik będzie wyświetlony."
271
 
272
- #: ../includes/settings.php:283
273
  msgid ""
274
  "Select the method of collecting post views data. If you are using any of the "
275
  "caching plugins select Javascript."
@@ -277,17 +287,17 @@ msgstr ""
277
  "Wybierz metodę gromadzenia danych. Jeśli używaż jakiejkolwiek wtyczki do "
278
  "cachowania wybierz Javascript."
279
 
280
- #: ../includes/settings.php:293
281
  msgid ""
282
  "Enable to display post views count column for each of the selected post "
283
  "types."
284
  msgstr "Włącz aby wyświetlić kolumnę z liczbą odsłon."
285
 
286
- #: ../includes/settings.php:313
287
  msgid "Enter the time between single user visit count."
288
  msgstr "Określ czas pomiędzy zliczaniem wizyt poszczególnego użytkownika."
289
 
290
- #: ../includes/settings.php:333
291
  msgid ""
292
  "Delete single day post views data older than specified above. Enter 0 "
293
  "(number zero) if you want to preserve your data regardless of its age."
@@ -295,7 +305,7 @@ msgstr ""
295
  "Usuwanie dziennych danych o liczbie wpisów po określonym powyżej czasie. "
296
  "Wpisz 0 jeśli chcesz przetrzymywać te dane bez ograniczeń."
297
 
298
- #: ../includes/settings.php:353
299
  msgid ""
300
  "How often to flush cached view counts from the object cache into the "
301
  "database. This feature is used only if a persistent object cache is detected "
@@ -314,56 +324,56 @@ msgstr ""
314
  "jeśli cachowanie obiektowe nie będzie dostępne lub cache zostanie "
315
  "wyczyszczony w trakcie trwania wybranego okresu."
316
 
317
- #: ../includes/settings.php:370 ../includes/settings.php:508
318
  msgid "Use it to hide the post views counter from selected type of visitors."
319
  msgstr ""
320
  "Użyj tego aby ograniczyć wyświetlanie licznika do określonych typów "
321
  "użytkowników."
322
 
323
- #: ../includes/settings.php:377 ../includes/settings.php:515
324
  msgid "Use it to hide the post views counter from selected user roles."
325
  msgstr ""
326
  "Użyj tego aby ograniczyć wyświetlanie licznika do określonych tról "
327
  "użytkowników."
328
 
329
- #: ../includes/settings.php:393 ../includes/settings.php:402
330
  msgid "Remove"
331
  msgstr "Usuń"
332
 
333
- #: ../includes/settings.php:402
334
  msgid "Add new"
335
  msgstr "Dodaj nowy"
336
 
337
- #: ../includes/settings.php:402
338
  msgid "Add my current IP"
339
  msgstr "Dodaj mój aktualny IP"
340
 
341
- #: ../includes/settings.php:404
342
  msgid "Enter the IP addresses to be excluded from post views count."
343
  msgstr "Wpisz adresy IP, któe mają być wyłączone z działania licznika."
344
 
345
- #: ../includes/settings.php:415
346
  msgid "Import"
347
  msgstr "Importuj"
348
 
349
- #: ../includes/settings.php:416
350
  msgid "Import post views data from WP-PostViews plugin."
351
  msgstr "Importuj dane o liczbie odwiedzin z wtyczki WP-PostViews."
352
 
353
- #: ../includes/settings.php:417
354
  msgid "Override existing Post Views Counter data."
355
  msgstr "Nadpisz istniejące dane Licznika odwiedzin."
356
 
357
- #: ../includes/settings.php:428
358
  msgid "Enable to restrict post views editing to admins only."
359
  msgstr ""
360
  "Włącz aby ograniczyć możliwość edycji liczby wpisów do administratorów."
361
 
362
- #: ../includes/settings.php:438
363
  msgid "Enable to delete all plugin data on deactivation."
364
  msgstr "Włącz aby usunąć wszystkie dane wtyczki podczas deaktywacji"
365
 
366
- #: ../includes/settings.php:457
367
  msgid ""
368
  "Select where would you like to display the post views counter. Use [post-"
369
  "views] shortcode for manual display."
@@ -371,11 +381,11 @@ msgstr ""
371
  "Wybierz w którym miejscu chcesz wyświetlać licznik odwiedzin. Użyj skrótu "
372
  "[post-views] aby wyświetlić licznik ręcznie."
373
 
374
- #: ../includes/settings.php:476
375
  msgid "Choose how to display the post views counter."
376
  msgstr "Wybierz w jaki sposób chcesz wyświetlać licznik."
377
 
378
- #: ../includes/settings.php:487
379
  #, php-format
380
  msgid ""
381
  "Enter the post views icon class. Any of the <a href=\"%s\" target=\"_blank"
@@ -384,90 +394,96 @@ msgstr ""
384
  "Wpisz klasę CSS ikony. Każda z ikond typu <a href=\"%s\" target=\"_blank"
385
  "\">Dashicons</a> może być tutaj zastosowana."
386
 
387
- #: ../includes/settings.php:544
388
- msgid "WP-PostViews data imported succesfully."
389
- msgstr "Dane z wtyczki WP-PostViews zostały zaimportowane pomyślnie."
390
 
391
- #: ../includes/settings.php:546
392
- msgid "There was no data to import."
393
- msgstr "Niestety, nie znaleziono danych do zaimportowania."
394
 
395
- #: ../includes/settings.php:702
396
  msgid "General settings restored to defaults."
397
  msgstr "Ustawienia zostały przywrócone do domyślnych."
398
 
399
- #: ../includes/settings.php:706
400
  msgid "Display settings restored to defaults."
401
  msgstr "Ustawienia wyświetlania została przywrócone do domyślnych."
402
 
403
- #: ../includes/widgets.php:33 ../includes/widgets.php:43
404
  msgid "Most Viewed Posts"
405
  msgstr "Najczęściej oglądane wpisy"
406
 
407
- #: ../includes/widgets.php:34
408
  msgid "Displays a list of the most viewed posts"
409
  msgstr "Wyświetla listę najczęściej oglądanych wpisów"
410
 
411
- #: ../includes/widgets.php:51
412
  msgid "No Posts found"
413
  msgstr "Brak wpisów"
414
 
415
- #: ../includes/widgets.php:55
416
  msgid "Ascending"
417
  msgstr "Rosnąco"
418
 
419
- #: ../includes/widgets.php:56
420
  msgid "Descending"
421
  msgstr "Malejąco"
422
 
423
- #: ../includes/widgets.php:93
424
  msgid "Title"
425
  msgstr "Tytuł"
426
 
427
- #: ../includes/widgets.php:97
428
  msgid "Post Types"
429
  msgstr "Typy wpisów"
430
 
431
- #: ../includes/widgets.php:110
432
  msgid "Number of posts to show"
433
  msgstr "Liczba wpisów do wyświetlenia"
434
 
435
- #: ../includes/widgets.php:114
436
  msgid "No posts message"
437
  msgstr "Treść braku wpisów"
438
 
439
- #: ../includes/widgets.php:118
440
  msgid "Order"
441
  msgstr "Kolejność"
442
 
443
- #: ../includes/widgets.php:130
444
  msgid "Display post views?"
445
  msgstr "Wyświetlanie liczby odsłon?"
446
 
447
- #: ../includes/widgets.php:132
448
  msgid "Display post excerpt?"
449
  msgstr "Wyświetlanie wypisu?"
450
 
451
- #: ../includes/widgets.php:134
452
  msgid "Display post thumbnail?"
453
  msgstr "WYświetlanie miniatury?"
454
 
455
- #: ../includes/widgets.php:137
456
  msgid "Thumbnail size"
457
  msgstr "WIelkość miniatury"
458
 
459
- #: ../post-views-counter.php:275
460
  msgid "Are you sure you want to reset these settings to defaults?"
461
  msgstr "Czy jesteś pewny, że chcesz zresetować ustawienia do domyślnych?"
462
 
463
- #: ../post-views-counter.php:314
464
  msgid "Support"
465
  msgstr "Forum pomocy"
466
 
467
- #: ../post-views-counter.php:333
468
  msgid "Settings"
469
  msgstr "Ustawienia"
470
 
 
 
 
 
 
 
471
  #~ msgid "Select post types"
472
  #~ msgstr "Wybierz typy wpisów"
473
 
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Post Views Counter\n"
4
+ "POT-Creation-Date: 2016-02-12 10:50+0100\n"
5
+ "PO-Revision-Date: 2016-02-12 10:51+0100\n"
6
  "Last-Translator: Bartosz Arendt <info@dfactory.eu>\n"
7
  "Language-Team: dFactory <info@dfactory.eu>\n"
8
  "Language: pl_PL\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.8.7\n"
13
  "X-Poedit-KeywordsList: gettext;gettext_noop;__;_e;esc_attr__;esc_attr_e;"
14
  "esc_html__;esc_html_e\n"
15
  "X-Poedit-Basepath: .\n"
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
  "X-Poedit-SearchPath-0: ..\n"
19
 
20
+ #: ../includes/columns.php:59 ../includes/columns.php:194
21
+ #: ../includes/columns.php:200 ../includes/columns.php:272
22
+ #: ../includes/dashboard.php:28 ../includes/dashboard.php:87
23
+ #: ../includes/dashboard.php:97 ../includes/dashboard.php:107
24
  msgid "Post Views"
25
  msgstr "Odwiedziny"
26
 
27
+ #: ../includes/columns.php:68
28
  msgid "Edit"
29
  msgstr "Edytuj"
30
 
31
+ #: ../includes/columns.php:72
32
  msgid "Adjust the views count for this post."
33
  msgstr "Zmodyfikuj liczbę odsłon tego wpisu."
34
 
35
+ #: ../includes/columns.php:76
36
  msgid "OK"
37
  msgstr "OK"
38
 
39
+ #: ../includes/columns.php:77
40
  msgid "Cancel"
41
  msgstr "Anuluj"
42
 
43
+ #: ../includes/cron.php:52
44
  msgid "Post Views Counter reset daily counts interval"
45
  msgstr ""
46
  "Odstęp czasu po jakim resetowane będą dzienne dane o liczbie odwiedzin."
47
 
48
+ #: ../includes/cron.php:57
49
  msgid "Post Views Counter cache flush interval"
50
  msgstr "Czas czyszczenia danych o odsłonach z cache"
51
 
52
+ #: ../includes/dashboard.php:60 ../includes/dashboard.php:63
53
+ msgid "You do not have permission to access this page."
54
+ msgstr "Nie masz uprawnień dostępu do tej strony."
55
+
56
+ #: ../includes/dashboard.php:121
57
+ msgid "Total Views"
58
+ msgstr "Odwiedzin ogółem"
59
+
60
+ #: ../includes/functions.php:132
61
  msgid "No Posts"
62
  msgstr "Brak wpisów"
63
 
64
+ #: ../includes/settings.php:35
65
  msgid "PHP"
66
  msgstr "PHP"
67
 
68
+ #: ../includes/settings.php:36
69
  msgid "JavaScript"
70
  msgstr "JavaScript"
71
 
72
+ #: ../includes/settings.php:40
73
  msgid "minutes"
74
  msgstr "minuty"
75
 
76
+ #: ../includes/settings.php:41
77
  msgid "hours"
78
  msgstr "godziny"
79
 
80
+ #: ../includes/settings.php:42
81
  msgid "days"
82
  msgstr "dni"
83
 
84
+ #: ../includes/settings.php:43
85
  msgid "weeks"
86
  msgstr "tygodnie"
87
 
88
+ #: ../includes/settings.php:44
89
  msgid "months"
90
  msgstr "miesiące"
91
 
92
+ #: ../includes/settings.php:45
93
  msgid "years"
94
  msgstr "lata"
95
 
96
+ #: ../includes/settings.php:49
97
  msgid "robots"
98
  msgstr "roboty"
99
 
100
+ #: ../includes/settings.php:50
101
  msgid "logged in users"
102
  msgstr "zalogowani użytkownicy"
103
 
104
+ #: ../includes/settings.php:51
105
  msgid "guests"
106
  msgstr "goście"
107
 
108
+ #: ../includes/settings.php:52
109
  msgid "selected user roles"
110
  msgstr "wybrane role użytkowników"
111
 
112
+ #: ../includes/settings.php:56
113
  msgid "before the content"
114
  msgstr "przed treścią"
115
 
116
+ #: ../includes/settings.php:57
117
  msgid "after the content"
118
  msgstr "po treści"
119
 
120
+ #: ../includes/settings.php:58
121
  msgid "manual"
122
  msgstr "ręcznie"
123
 
124
+ #: ../includes/settings.php:62
125
  msgid "icon"
126
  msgstr "ikona"
127
 
128
+ #: ../includes/settings.php:63
129
  msgid "label"
130
  msgstr "etykieta"
131
 
132
+ #: ../includes/settings.php:68
133
  msgid "General"
134
  msgstr "Ogólne"
135
 
136
+ #: ../includes/settings.php:74
137
  msgid "Display"
138
  msgstr "Wyświetlanie"
139
 
140
+ #: ../includes/settings.php:129 ../includes/settings.php:141
141
+ #: ../includes/settings.php:153
142
  msgid "Post Views Counter"
143
  msgstr "Licznik odwiedzin"
144
 
145
+ #: ../includes/settings.php:155
146
  msgid "Need support?"
147
  msgstr "Potrzebujesz pomocy?"
148
 
149
+ #: ../includes/settings.php:156
150
  msgid ""
151
  "If you are having problems with this plugin, please talk about them in the"
152
  msgstr "Jeśli masz jakieś problemy z tą wtyczką, powiedz o nich"
153
 
154
+ #: ../includes/settings.php:156
155
  msgid "Support forum"
156
  msgstr "Forum pomocy"
157
 
158
+ #: ../includes/settings.php:158
159
  msgid "Do you like this plugin?"
160
  msgstr "Lubisz tę wtyczkę?"
161
 
162
+ #: ../includes/settings.php:159
163
  msgid "Rate it 5"
164
  msgstr "Oceń ją na 5"
165
 
166
+ #: ../includes/settings.php:159
167
  msgid "on WordPress.org"
168
  msgstr "na WordPress.org"
169
 
170
+ #: ../includes/settings.php:160
171
  msgid "Blog about it & link to the"
172
  msgstr "Napisz o niej i dodaj link"
173
 
174
+ #: ../includes/settings.php:160
175
  msgid "plugin page"
176
  msgstr "do strony wtyczki"
177
 
178
+ #: ../includes/settings.php:161
179
  msgid "Check out our other"
180
  msgstr "Sprawdż nasze inne"
181
 
182
+ #: ../includes/settings.php:161
183
  msgid "WordPress plugins"
184
  msgstr "wtyczki do WordPressa"
185
 
186
+ #: ../includes/settings.php:164
187
  msgid "Created by"
188
  msgstr "Stworzone przez"
189
 
190
+ #: ../includes/settings.php:180
191
  msgid "Reset to defaults"
192
  msgstr "Resetuj do domyślnych"
193
 
194
+ #: ../includes/settings.php:196
195
  msgid "General settings"
196
  msgstr "Ustawienia ogólne"
197
 
198
+ #: ../includes/settings.php:197
199
  msgid "Post Types Count"
200
  msgstr "Własne typy wpisów"
201
 
202
+ #: ../includes/settings.php:198
203
  msgid "Counter Mode"
204
  msgstr "Tryb pracy licznika"
205
 
206
+ #: ../includes/settings.php:199
207
  msgid "Post Views Column"
208
  msgstr "Kolumna z liczbą odwiedzin"
209
 
210
+ #: ../includes/settings.php:200
211
  msgid "Restrict Edit"
212
  msgstr "Ograniczenie edycji"
213
 
214
+ #: ../includes/settings.php:201
215
  msgid "Time Between Counts"
216
  msgstr "Czas między zliczaniem"
217
 
218
+ #: ../includes/settings.php:202
219
  msgid "Reset Data Interval"
220
  msgstr "Czas resetowania danych"
221
 
222
+ #: ../includes/settings.php:203
223
  msgid "Flush Object Cache Interval"
224
  msgstr "Czas czyszczenia cache"
225
 
226
+ #: ../includes/settings.php:204
227
  msgid "Exclude Visitors"
228
  msgstr "Wykluczanie odwiedzających"
229
 
230
+ #: ../includes/settings.php:205
231
  msgid "Exclude IPs"
232
  msgstr "Wykluczanie IP"
233
 
234
+ #: ../includes/settings.php:206
235
  msgid "WP-PostViews"
236
  msgstr "WP-PostViews"
237
 
238
+ #: ../includes/settings.php:207
239
  msgid "Deactivation"
240
  msgstr "Deaktywacja wtyczki"
241
 
242
+ #: ../includes/settings.php:211
243
  msgid "Display settings"
244
  msgstr "Ustawienia wyświetlania"
245
 
246
+ #: ../includes/settings.php:212
247
  msgid "Post Views Label"
248
  msgstr "Etykieta licznika"
249
 
250
+ #: ../includes/settings.php:213
251
  msgid "Post Types Display"
252
  msgstr "Wyświetlanie licznika"
253
 
254
+ #: ../includes/settings.php:214
255
  msgid "Restrict Display"
256
  msgstr "Ograniczenia wyświetlania"
257
 
258
+ #: ../includes/settings.php:215
259
  msgid "Position"
260
  msgstr "Pozycja"
261
 
262
+ #: ../includes/settings.php:216
263
  msgid "Display Style"
264
  msgstr "Styl wyświetlania"
265
 
266
+ #: ../includes/settings.php:217
267
  msgid "Icon Class"
268
  msgstr "Klasa ikony"
269
 
270
+ #: ../includes/settings.php:228
271
  msgid "Enter the label for the post views counter field."
272
  msgstr "Wpisz etykietę jaka będzie wyświetlana w liczniku odwiedzin wpisu."
273
 
274
+ #: ../includes/settings.php:246
275
  msgid "Select post types for which post views will be counted."
276
  msgstr "Wybierz typy wpisów dla których będzie włączone zliczanie."
277
 
278
+ #: ../includes/settings.php:263
279
  msgid "Select post types for which post views will be displayed."
280
  msgstr "Wybierz typy wpisów dla których licznik będzie wyświetlony."
281
 
282
+ #: ../includes/settings.php:282
283
  msgid ""
284
  "Select the method of collecting post views data. If you are using any of the "
285
  "caching plugins select Javascript."
287
  "Wybierz metodę gromadzenia danych. Jeśli używaż jakiejkolwiek wtyczki do "
288
  "cachowania wybierz Javascript."
289
 
290
+ #: ../includes/settings.php:292
291
  msgid ""
292
  "Enable to display post views count column for each of the selected post "
293
  "types."
294
  msgstr "Włącz aby wyświetlić kolumnę z liczbą odsłon."
295
 
296
+ #: ../includes/settings.php:312
297
  msgid "Enter the time between single user visit count."
298
  msgstr "Określ czas pomiędzy zliczaniem wizyt poszczególnego użytkownika."
299
 
300
+ #: ../includes/settings.php:332
301
  msgid ""
302
  "Delete single day post views data older than specified above. Enter 0 "
303
  "(number zero) if you want to preserve your data regardless of its age."
305
  "Usuwanie dziennych danych o liczbie wpisów po określonym powyżej czasie. "
306
  "Wpisz 0 jeśli chcesz przetrzymywać te dane bez ograniczeń."
307
 
308
+ #: ../includes/settings.php:352
309
  msgid ""
310
  "How often to flush cached view counts from the object cache into the "
311
  "database. This feature is used only if a persistent object cache is detected "
324
  "jeśli cachowanie obiektowe nie będzie dostępne lub cache zostanie "
325
  "wyczyszczony w trakcie trwania wybranego okresu."
326
 
327
+ #: ../includes/settings.php:369 ../includes/settings.php:512
328
  msgid "Use it to hide the post views counter from selected type of visitors."
329
  msgstr ""
330
  "Użyj tego aby ograniczyć wyświetlanie licznika do określonych typów "
331
  "użytkowników."
332
 
333
+ #: ../includes/settings.php:376 ../includes/settings.php:519
334
  msgid "Use it to hide the post views counter from selected user roles."
335
  msgstr ""
336
  "Użyj tego aby ograniczyć wyświetlanie licznika do określonych tról "
337
  "użytkowników."
338
 
339
+ #: ../includes/settings.php:396 ../includes/settings.php:402
340
  msgid "Remove"
341
  msgstr "Usuń"
342
 
343
+ #: ../includes/settings.php:407
344
  msgid "Add new"
345
  msgstr "Dodaj nowy"
346
 
347
+ #: ../includes/settings.php:407
348
  msgid "Add my current IP"
349
  msgstr "Dodaj mój aktualny IP"
350
 
351
+ #: ../includes/settings.php:408
352
  msgid "Enter the IP addresses to be excluded from post views count."
353
  msgstr "Wpisz adresy IP, któe mają być wyłączone z działania licznika."
354
 
355
+ #: ../includes/settings.php:419
356
  msgid "Import"
357
  msgstr "Importuj"
358
 
359
+ #: ../includes/settings.php:420
360
  msgid "Import post views data from WP-PostViews plugin."
361
  msgstr "Importuj dane o liczbie odwiedzin z wtyczki WP-PostViews."
362
 
363
+ #: ../includes/settings.php:421
364
  msgid "Override existing Post Views Counter data."
365
  msgstr "Nadpisz istniejące dane Licznika odwiedzin."
366
 
367
+ #: ../includes/settings.php:432
368
  msgid "Enable to restrict post views editing to admins only."
369
  msgstr ""
370
  "Włącz aby ograniczyć możliwość edycji liczby wpisów do administratorów."
371
 
372
+ #: ../includes/settings.php:442
373
  msgid "Enable to delete all plugin data on deactivation."
374
  msgstr "Włącz aby usunąć wszystkie dane wtyczki podczas deaktywacji"
375
 
376
+ #: ../includes/settings.php:461
377
  msgid ""
378
  "Select where would you like to display the post views counter. Use [post-"
379
  "views] shortcode for manual display."
381
  "Wybierz w którym miejscu chcesz wyświetlać licznik odwiedzin. Użyj skrótu "
382
  "[post-views] aby wyświetlić licznik ręcznie."
383
 
384
+ #: ../includes/settings.php:480
385
  msgid "Choose how to display the post views counter."
386
  msgstr "Wybierz w jaki sposób chcesz wyświetlać licznik."
387
 
388
+ #: ../includes/settings.php:491
389
  #, php-format
390
  msgid ""
391
  "Enter the post views icon class. Any of the <a href=\"%s\" target=\"_blank"
394
  "Wpisz klasę CSS ikony. Każda z ikond typu <a href=\"%s\" target=\"_blank"
395
  "\">Dashicons</a> może być tutaj zastosowana."
396
 
397
+ #: ../includes/settings.php:550
398
+ msgid "Post views data imported succesfully."
399
+ msgstr "Dane dotyczące liczby odwiedzin zostały zaimportowane pomyślnie."
400
 
401
+ #: ../includes/settings.php:552
402
+ msgid "There was no post views data to import."
403
+ msgstr "Nie znaleziono danych do zaimportowania,"
404
 
405
+ #: ../includes/settings.php:710
406
  msgid "General settings restored to defaults."
407
  msgstr "Ustawienia zostały przywrócone do domyślnych."
408
 
409
+ #: ../includes/settings.php:714
410
  msgid "Display settings restored to defaults."
411
  msgstr "Ustawienia wyświetlania została przywrócone do domyślnych."
412
 
413
+ #: ../includes/widgets.php:38 ../includes/widgets.php:48
414
  msgid "Most Viewed Posts"
415
  msgstr "Najczęściej oglądane wpisy"
416
 
417
+ #: ../includes/widgets.php:39
418
  msgid "Displays a list of the most viewed posts"
419
  msgstr "Wyświetla listę najczęściej oglądanych wpisów"
420
 
421
+ #: ../includes/widgets.php:56
422
  msgid "No Posts found"
423
  msgstr "Brak wpisów"
424
 
425
+ #: ../includes/widgets.php:60
426
  msgid "Ascending"
427
  msgstr "Rosnąco"
428
 
429
+ #: ../includes/widgets.php:61
430
  msgid "Descending"
431
  msgstr "Malejąco"
432
 
433
+ #: ../includes/widgets.php:98
434
  msgid "Title"
435
  msgstr "Tytuł"
436
 
437
+ #: ../includes/widgets.php:102
438
  msgid "Post Types"
439
  msgstr "Typy wpisów"
440
 
441
+ #: ../includes/widgets.php:115
442
  msgid "Number of posts to show"
443
  msgstr "Liczba wpisów do wyświetlenia"
444
 
445
+ #: ../includes/widgets.php:119
446
  msgid "No posts message"
447
  msgstr "Treść braku wpisów"
448
 
449
+ #: ../includes/widgets.php:123
450
  msgid "Order"
451
  msgstr "Kolejność"
452
 
453
+ #: ../includes/widgets.php:135
454
  msgid "Display post views?"
455
  msgstr "Wyświetlanie liczby odsłon?"
456
 
457
+ #: ../includes/widgets.php:137
458
  msgid "Display post excerpt?"
459
  msgstr "Wyświetlanie wypisu?"
460
 
461
+ #: ../includes/widgets.php:139
462
  msgid "Display post thumbnail?"
463
  msgstr "WYświetlanie miniatury?"
464
 
465
+ #: ../includes/widgets.php:142
466
  msgid "Thumbnail size"
467
  msgstr "WIelkość miniatury"
468
 
469
+ #: ../post-views-counter.php:280
470
  msgid "Are you sure you want to reset these settings to defaults?"
471
  msgstr "Czy jesteś pewny, że chcesz zresetować ustawienia do domyślnych?"
472
 
473
+ #: ../post-views-counter.php:323
474
  msgid "Support"
475
  msgstr "Forum pomocy"
476
 
477
+ #: ../post-views-counter.php:342
478
  msgid "Settings"
479
  msgstr "Ustawienia"
480
 
481
+ #~ msgid "WP-PostViews data imported succesfully."
482
+ #~ msgstr "Dane z wtyczki WP-PostViews zostały zaimportowane pomyślnie."
483
+
484
+ #~ msgid "There was no data to import."
485
+ #~ msgstr "Niestety, nie znaleziono danych do zaimportowania."
486
+
487
  #~ msgid "Select post types"
488
  #~ msgstr "Wybierz typy wpisów"
489
 
languages/post-views-counter.pot CHANGED
@@ -2,7 +2,7 @@
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: Post Views Counter\n"
5
- "POT-Creation-Date: 2015-10-18 13:38+0200\n"
6
  "PO-Revision-Date: 2015-04-08 18:59+0100\n"
7
  "Last-Translator: Bartosz Arendt <info@dfactory.eu>\n"
8
  "Language-Team: dFactory <info@dfactory.eu>\n"
@@ -10,7 +10,7 @@ msgstr ""
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
- "X-Generator: Poedit 1.8.5\n"
14
  "X-Poedit-KeywordsList: gettext;gettext_noop;__;_e;esc_attr__;esc_attr_e;"
15
  "esc_html__;esc_html_e\n"
16
  "X-Poedit-Basepath: .\n"
@@ -18,280 +18,290 @@ msgstr ""
18
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
  "X-Poedit-SearchPath-0: ..\n"
20
 
21
- #: ../includes/columns.php:56 ../includes/columns.php:208
22
- #: ../includes/columns.php:214 ../includes/columns.php:286
 
 
23
  msgid "Post Views"
24
  msgstr ""
25
 
26
- #: ../includes/columns.php:65
27
  msgid "Edit"
28
  msgstr ""
29
 
30
- #: ../includes/columns.php:69
31
  msgid "Adjust the views count for this post."
32
  msgstr ""
33
 
34
- #: ../includes/columns.php:73
35
  msgid "OK"
36
  msgstr ""
37
 
38
- #: ../includes/columns.php:74
39
  msgid "Cancel"
40
  msgstr ""
41
 
42
- #: ../includes/cron.php:49
43
  msgid "Post Views Counter reset daily counts interval"
44
  msgstr ""
45
 
46
- #: ../includes/cron.php:54
47
  msgid "Post Views Counter cache flush interval"
48
  msgstr ""
49
 
50
- #: ../includes/functions.php:127
 
 
 
 
 
 
 
 
51
  msgid "No Posts"
52
  msgstr ""
53
 
54
- #: ../includes/settings.php:36
55
  msgid "PHP"
56
  msgstr ""
57
 
58
- #: ../includes/settings.php:37
59
  msgid "JavaScript"
60
  msgstr ""
61
 
62
- #: ../includes/settings.php:41
63
  msgid "minutes"
64
  msgstr ""
65
 
66
- #: ../includes/settings.php:42
67
  msgid "hours"
68
  msgstr ""
69
 
70
- #: ../includes/settings.php:43
71
  msgid "days"
72
  msgstr ""
73
 
74
- #: ../includes/settings.php:44
75
  msgid "weeks"
76
  msgstr ""
77
 
78
- #: ../includes/settings.php:45
79
  msgid "months"
80
  msgstr ""
81
 
82
- #: ../includes/settings.php:46
83
  msgid "years"
84
  msgstr ""
85
 
86
- #: ../includes/settings.php:50
87
  msgid "robots"
88
  msgstr ""
89
 
90
- #: ../includes/settings.php:51
91
  msgid "logged in users"
92
  msgstr ""
93
 
94
- #: ../includes/settings.php:52
95
  msgid "guests"
96
  msgstr ""
97
 
98
- #: ../includes/settings.php:53
99
  msgid "selected user roles"
100
  msgstr ""
101
 
102
- #: ../includes/settings.php:57
103
  msgid "before the content"
104
  msgstr ""
105
 
106
- #: ../includes/settings.php:58
107
  msgid "after the content"
108
  msgstr ""
109
 
110
- #: ../includes/settings.php:59
111
  msgid "manual"
112
  msgstr ""
113
 
114
- #: ../includes/settings.php:63
115
  msgid "icon"
116
  msgstr ""
117
 
118
- #: ../includes/settings.php:64
119
  msgid "label"
120
  msgstr ""
121
 
122
- #: ../includes/settings.php:69
123
  msgid "General"
124
  msgstr ""
125
 
126
- #: ../includes/settings.php:75
127
  msgid "Display"
128
  msgstr ""
129
 
130
- #: ../includes/settings.php:130 ../includes/settings.php:142
131
- #: ../includes/settings.php:154
132
  msgid "Post Views Counter"
133
  msgstr ""
134
 
135
- #: ../includes/settings.php:156
136
  msgid "Need support?"
137
  msgstr ""
138
 
139
- #: ../includes/settings.php:157
140
  msgid ""
141
  "If you are having problems with this plugin, please talk about them in the"
142
  msgstr ""
143
 
144
- #: ../includes/settings.php:157
145
  msgid "Support forum"
146
  msgstr ""
147
 
148
- #: ../includes/settings.php:159
149
  msgid "Do you like this plugin?"
150
  msgstr ""
151
 
152
- #: ../includes/settings.php:160
153
  msgid "Rate it 5"
154
  msgstr ""
155
 
156
- #: ../includes/settings.php:160
157
  msgid "on WordPress.org"
158
  msgstr ""
159
 
160
- #: ../includes/settings.php:161
161
  msgid "Blog about it & link to the"
162
  msgstr ""
163
 
164
- #: ../includes/settings.php:161
165
  msgid "plugin page"
166
  msgstr ""
167
 
168
- #: ../includes/settings.php:162
169
  msgid "Check out our other"
170
  msgstr ""
171
 
172
- #: ../includes/settings.php:162
173
  msgid "WordPress plugins"
174
  msgstr ""
175
 
176
- #: ../includes/settings.php:165
177
  msgid "Created by"
178
  msgstr ""
179
 
180
- #: ../includes/settings.php:181
181
  msgid "Reset to defaults"
182
  msgstr ""
183
 
184
- #: ../includes/settings.php:197
185
  msgid "General settings"
186
  msgstr ""
187
 
188
- #: ../includes/settings.php:198
189
  msgid "Post Types Count"
190
  msgstr ""
191
 
192
- #: ../includes/settings.php:199
193
  msgid "Counter Mode"
194
  msgstr ""
195
 
196
- #: ../includes/settings.php:200
197
  msgid "Post Views Column"
198
  msgstr ""
199
 
200
- #: ../includes/settings.php:201
201
  msgid "Restrict Edit"
202
  msgstr ""
203
 
204
- #: ../includes/settings.php:202
205
  msgid "Time Between Counts"
206
  msgstr ""
207
 
208
- #: ../includes/settings.php:203
209
  msgid "Reset Data Interval"
210
  msgstr ""
211
 
212
- #: ../includes/settings.php:204
213
  msgid "Flush Object Cache Interval"
214
  msgstr ""
215
 
216
- #: ../includes/settings.php:205
217
  msgid "Exclude Visitors"
218
  msgstr ""
219
 
220
- #: ../includes/settings.php:206
221
  msgid "Exclude IPs"
222
  msgstr ""
223
 
224
- #: ../includes/settings.php:207
225
  msgid "WP-PostViews"
226
  msgstr ""
227
 
228
- #: ../includes/settings.php:208
229
  msgid "Deactivation"
230
  msgstr ""
231
 
232
- #: ../includes/settings.php:212
233
  msgid "Display settings"
234
  msgstr ""
235
 
236
- #: ../includes/settings.php:213
237
  msgid "Post Views Label"
238
  msgstr ""
239
 
240
- #: ../includes/settings.php:214
241
  msgid "Post Types Display"
242
  msgstr ""
243
 
244
- #: ../includes/settings.php:215
245
  msgid "Restrict Display"
246
  msgstr ""
247
 
248
- #: ../includes/settings.php:216
249
  msgid "Position"
250
  msgstr ""
251
 
252
- #: ../includes/settings.php:217
253
  msgid "Display Style"
254
  msgstr ""
255
 
256
- #: ../includes/settings.php:218
257
  msgid "Icon Class"
258
  msgstr ""
259
 
260
- #: ../includes/settings.php:229
261
  msgid "Enter the label for the post views counter field."
262
  msgstr ""
263
 
264
- #: ../includes/settings.php:247
265
  msgid "Select post types for which post views will be counted."
266
  msgstr ""
267
 
268
- #: ../includes/settings.php:264
269
  msgid "Select post types for which post views will be displayed."
270
  msgstr ""
271
 
272
- #: ../includes/settings.php:283
273
  msgid ""
274
  "Select the method of collecting post views data. If you are using any of the "
275
  "caching plugins select Javascript."
276
  msgstr ""
277
 
278
- #: ../includes/settings.php:293
279
  msgid ""
280
  "Enable to display post views count column for each of the selected post "
281
  "types."
282
  msgstr ""
283
 
284
- #: ../includes/settings.php:313
285
  msgid "Enter the time between single user visit count."
286
  msgstr ""
287
 
288
- #: ../includes/settings.php:333
289
  msgid ""
290
  "Delete single day post views data older than specified above. Enter 0 "
291
  "(number zero) if you want to preserve your data regardless of its age."
292
  msgstr ""
293
 
294
- #: ../includes/settings.php:353
295
  msgid ""
296
  "How often to flush cached view counts from the object cache into the "
297
  "database. This feature is used only if a persistent object cache is detected "
@@ -303,147 +313,147 @@ msgid ""
303
  "interval."
304
  msgstr ""
305
 
306
- #: ../includes/settings.php:370 ../includes/settings.php:508
307
  msgid "Use it to hide the post views counter from selected type of visitors."
308
  msgstr ""
309
 
310
- #: ../includes/settings.php:377 ../includes/settings.php:515
311
  msgid "Use it to hide the post views counter from selected user roles."
312
  msgstr ""
313
 
314
- #: ../includes/settings.php:393 ../includes/settings.php:402
315
  msgid "Remove"
316
  msgstr ""
317
 
318
- #: ../includes/settings.php:402
319
  msgid "Add new"
320
  msgstr ""
321
 
322
- #: ../includes/settings.php:402
323
  msgid "Add my current IP"
324
  msgstr ""
325
 
326
- #: ../includes/settings.php:404
327
  msgid "Enter the IP addresses to be excluded from post views count."
328
  msgstr ""
329
 
330
- #: ../includes/settings.php:415
331
  msgid "Import"
332
  msgstr ""
333
 
334
- #: ../includes/settings.php:416
335
  msgid "Import post views data from WP-PostViews plugin."
336
  msgstr ""
337
 
338
- #: ../includes/settings.php:417
339
  msgid "Override existing Post Views Counter data."
340
  msgstr ""
341
 
342
- #: ../includes/settings.php:428
343
  msgid "Enable to restrict post views editing to admins only."
344
  msgstr ""
345
 
346
- #: ../includes/settings.php:438
347
  msgid "Enable to delete all plugin data on deactivation."
348
  msgstr ""
349
 
350
- #: ../includes/settings.php:457
351
  msgid ""
352
  "Select where would you like to display the post views counter. Use [post-"
353
  "views] shortcode for manual display."
354
  msgstr ""
355
 
356
- #: ../includes/settings.php:476
357
  msgid "Choose how to display the post views counter."
358
  msgstr ""
359
 
360
- #: ../includes/settings.php:487
361
  #, php-format
362
  msgid ""
363
  "Enter the post views icon class. Any of the <a href=\"%s\" target=\"_blank"
364
  "\">Dashicons</a> classes are available."
365
  msgstr ""
366
 
367
- #: ../includes/settings.php:544
368
- msgid "WP-PostViews data imported succesfully."
369
  msgstr ""
370
 
371
- #: ../includes/settings.php:546
372
- msgid "There was no data to import."
373
  msgstr ""
374
 
375
- #: ../includes/settings.php:702
376
  msgid "General settings restored to defaults."
377
  msgstr ""
378
 
379
- #: ../includes/settings.php:706
380
  msgid "Display settings restored to defaults."
381
  msgstr ""
382
 
383
- #: ../includes/widgets.php:33 ../includes/widgets.php:43
384
  msgid "Most Viewed Posts"
385
  msgstr ""
386
 
387
- #: ../includes/widgets.php:34
388
  msgid "Displays a list of the most viewed posts"
389
  msgstr ""
390
 
391
- #: ../includes/widgets.php:51
392
  msgid "No Posts found"
393
  msgstr ""
394
 
395
- #: ../includes/widgets.php:55
396
  msgid "Ascending"
397
  msgstr ""
398
 
399
- #: ../includes/widgets.php:56
400
  msgid "Descending"
401
  msgstr ""
402
 
403
- #: ../includes/widgets.php:93
404
  msgid "Title"
405
  msgstr ""
406
 
407
- #: ../includes/widgets.php:97
408
  msgid "Post Types"
409
  msgstr ""
410
 
411
- #: ../includes/widgets.php:110
412
  msgid "Number of posts to show"
413
  msgstr ""
414
 
415
- #: ../includes/widgets.php:114
416
  msgid "No posts message"
417
  msgstr ""
418
 
419
- #: ../includes/widgets.php:118
420
  msgid "Order"
421
  msgstr ""
422
 
423
- #: ../includes/widgets.php:130
424
  msgid "Display post views?"
425
  msgstr ""
426
 
427
- #: ../includes/widgets.php:132
428
  msgid "Display post excerpt?"
429
  msgstr ""
430
 
431
- #: ../includes/widgets.php:134
432
  msgid "Display post thumbnail?"
433
  msgstr ""
434
 
435
- #: ../includes/widgets.php:137
436
  msgid "Thumbnail size"
437
  msgstr ""
438
 
439
- #: ../post-views-counter.php:275
440
  msgid "Are you sure you want to reset these settings to defaults?"
441
  msgstr ""
442
 
443
- #: ../post-views-counter.php:314
444
  msgid "Support"
445
  msgstr ""
446
 
447
- #: ../post-views-counter.php:333
448
  msgid "Settings"
449
  msgstr ""
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: Post Views Counter\n"
5
+ "POT-Creation-Date: 2016-02-12 10:50+0100\n"
6
  "PO-Revision-Date: 2015-04-08 18:59+0100\n"
7
  "Last-Translator: Bartosz Arendt <info@dfactory.eu>\n"
8
  "Language-Team: dFactory <info@dfactory.eu>\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 1.8.7\n"
14
  "X-Poedit-KeywordsList: gettext;gettext_noop;__;_e;esc_attr__;esc_attr_e;"
15
  "esc_html__;esc_html_e\n"
16
  "X-Poedit-Basepath: .\n"
18
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
  "X-Poedit-SearchPath-0: ..\n"
20
 
21
+ #: ../includes/columns.php:59 ../includes/columns.php:194
22
+ #: ../includes/columns.php:200 ../includes/columns.php:272
23
+ #: ../includes/dashboard.php:28 ../includes/dashboard.php:87
24
+ #: ../includes/dashboard.php:97 ../includes/dashboard.php:107
25
  msgid "Post Views"
26
  msgstr ""
27
 
28
+ #: ../includes/columns.php:68
29
  msgid "Edit"
30
  msgstr ""
31
 
32
+ #: ../includes/columns.php:72
33
  msgid "Adjust the views count for this post."
34
  msgstr ""
35
 
36
+ #: ../includes/columns.php:76
37
  msgid "OK"
38
  msgstr ""
39
 
40
+ #: ../includes/columns.php:77
41
  msgid "Cancel"
42
  msgstr ""
43
 
44
+ #: ../includes/cron.php:52
45
  msgid "Post Views Counter reset daily counts interval"
46
  msgstr ""
47
 
48
+ #: ../includes/cron.php:57
49
  msgid "Post Views Counter cache flush interval"
50
  msgstr ""
51
 
52
+ #: ../includes/dashboard.php:60 ../includes/dashboard.php:63
53
+ msgid "You do not have permission to access this page."
54
+ msgstr ""
55
+
56
+ #: ../includes/dashboard.php:121
57
+ msgid "Total Views"
58
+ msgstr ""
59
+
60
+ #: ../includes/functions.php:132
61
  msgid "No Posts"
62
  msgstr ""
63
 
64
+ #: ../includes/settings.php:35
65
  msgid "PHP"
66
  msgstr ""
67
 
68
+ #: ../includes/settings.php:36
69
  msgid "JavaScript"
70
  msgstr ""
71
 
72
+ #: ../includes/settings.php:40
73
  msgid "minutes"
74
  msgstr ""
75
 
76
+ #: ../includes/settings.php:41
77
  msgid "hours"
78
  msgstr ""
79
 
80
+ #: ../includes/settings.php:42
81
  msgid "days"
82
  msgstr ""
83
 
84
+ #: ../includes/settings.php:43
85
  msgid "weeks"
86
  msgstr ""
87
 
88
+ #: ../includes/settings.php:44
89
  msgid "months"
90
  msgstr ""
91
 
92
+ #: ../includes/settings.php:45
93
  msgid "years"
94
  msgstr ""
95
 
96
+ #: ../includes/settings.php:49
97
  msgid "robots"
98
  msgstr ""
99
 
100
+ #: ../includes/settings.php:50
101
  msgid "logged in users"
102
  msgstr ""
103
 
104
+ #: ../includes/settings.php:51
105
  msgid "guests"
106
  msgstr ""
107
 
108
+ #: ../includes/settings.php:52
109
  msgid "selected user roles"
110
  msgstr ""
111
 
112
+ #: ../includes/settings.php:56
113
  msgid "before the content"
114
  msgstr ""
115
 
116
+ #: ../includes/settings.php:57
117
  msgid "after the content"
118
  msgstr ""
119
 
120
+ #: ../includes/settings.php:58
121
  msgid "manual"
122
  msgstr ""
123
 
124
+ #: ../includes/settings.php:62
125
  msgid "icon"
126
  msgstr ""
127
 
128
+ #: ../includes/settings.php:63
129
  msgid "label"
130
  msgstr ""
131
 
132
+ #: ../includes/settings.php:68
133
  msgid "General"
134
  msgstr ""
135
 
136
+ #: ../includes/settings.php:74
137
  msgid "Display"
138
  msgstr ""
139
 
140
+ #: ../includes/settings.php:129 ../includes/settings.php:141
141
+ #: ../includes/settings.php:153
142
  msgid "Post Views Counter"
143
  msgstr ""
144
 
145
+ #: ../includes/settings.php:155
146
  msgid "Need support?"
147
  msgstr ""
148
 
149
+ #: ../includes/settings.php:156
150
  msgid ""
151
  "If you are having problems with this plugin, please talk about them in the"
152
  msgstr ""
153
 
154
+ #: ../includes/settings.php:156
155
  msgid "Support forum"
156
  msgstr ""
157
 
158
+ #: ../includes/settings.php:158
159
  msgid "Do you like this plugin?"
160
  msgstr ""
161
 
162
+ #: ../includes/settings.php:159
163
  msgid "Rate it 5"
164
  msgstr ""
165
 
166
+ #: ../includes/settings.php:159
167
  msgid "on WordPress.org"
168
  msgstr ""
169
 
170
+ #: ../includes/settings.php:160
171
  msgid "Blog about it & link to the"
172
  msgstr ""
173
 
174
+ #: ../includes/settings.php:160
175
  msgid "plugin page"
176
  msgstr ""
177
 
178
+ #: ../includes/settings.php:161
179
  msgid "Check out our other"
180
  msgstr ""
181
 
182
+ #: ../includes/settings.php:161
183
  msgid "WordPress plugins"
184
  msgstr ""
185
 
186
+ #: ../includes/settings.php:164
187
  msgid "Created by"
188
  msgstr ""
189
 
190
+ #: ../includes/settings.php:180
191
  msgid "Reset to defaults"
192
  msgstr ""
193
 
194
+ #: ../includes/settings.php:196
195
  msgid "General settings"
196
  msgstr ""
197
 
198
+ #: ../includes/settings.php:197
199
  msgid "Post Types Count"
200
  msgstr ""
201
 
202
+ #: ../includes/settings.php:198
203
  msgid "Counter Mode"
204
  msgstr ""
205
 
206
+ #: ../includes/settings.php:199
207
  msgid "Post Views Column"
208
  msgstr ""
209
 
210
+ #: ../includes/settings.php:200
211
  msgid "Restrict Edit"
212
  msgstr ""
213
 
214
+ #: ../includes/settings.php:201
215
  msgid "Time Between Counts"
216
  msgstr ""
217
 
218
+ #: ../includes/settings.php:202
219
  msgid "Reset Data Interval"
220
  msgstr ""
221
 
222
+ #: ../includes/settings.php:203
223
  msgid "Flush Object Cache Interval"
224
  msgstr ""
225
 
226
+ #: ../includes/settings.php:204
227
  msgid "Exclude Visitors"
228
  msgstr ""
229
 
230
+ #: ../includes/settings.php:205
231
  msgid "Exclude IPs"
232
  msgstr ""
233
 
234
+ #: ../includes/settings.php:206
235
  msgid "WP-PostViews"
236
  msgstr ""
237
 
238
+ #: ../includes/settings.php:207
239
  msgid "Deactivation"
240
  msgstr ""
241
 
242
+ #: ../includes/settings.php:211
243
  msgid "Display settings"
244
  msgstr ""
245
 
246
+ #: ../includes/settings.php:212
247
  msgid "Post Views Label"
248
  msgstr ""
249
 
250
+ #: ../includes/settings.php:213
251
  msgid "Post Types Display"
252
  msgstr ""
253
 
254
+ #: ../includes/settings.php:214
255
  msgid "Restrict Display"
256
  msgstr ""
257
 
258
+ #: ../includes/settings.php:215
259
  msgid "Position"
260
  msgstr ""
261
 
262
+ #: ../includes/settings.php:216
263
  msgid "Display Style"
264
  msgstr ""
265
 
266
+ #: ../includes/settings.php:217
267
  msgid "Icon Class"
268
  msgstr ""
269
 
270
+ #: ../includes/settings.php:228
271
  msgid "Enter the label for the post views counter field."
272
  msgstr ""
273
 
274
+ #: ../includes/settings.php:246
275
  msgid "Select post types for which post views will be counted."
276
  msgstr ""
277
 
278
+ #: ../includes/settings.php:263
279
  msgid "Select post types for which post views will be displayed."
280
  msgstr ""
281
 
282
+ #: ../includes/settings.php:282
283
  msgid ""
284
  "Select the method of collecting post views data. If you are using any of the "
285
  "caching plugins select Javascript."
286
  msgstr ""
287
 
288
+ #: ../includes/settings.php:292
289
  msgid ""
290
  "Enable to display post views count column for each of the selected post "
291
  "types."
292
  msgstr ""
293
 
294
+ #: ../includes/settings.php:312
295
  msgid "Enter the time between single user visit count."
296
  msgstr ""
297
 
298
+ #: ../includes/settings.php:332
299
  msgid ""
300
  "Delete single day post views data older than specified above. Enter 0 "
301
  "(number zero) if you want to preserve your data regardless of its age."
302
  msgstr ""
303
 
304
+ #: ../includes/settings.php:352
305
  msgid ""
306
  "How often to flush cached view counts from the object cache into the "
307
  "database. This feature is used only if a persistent object cache is detected "
313
  "interval."
314
  msgstr ""
315
 
316
+ #: ../includes/settings.php:369 ../includes/settings.php:512
317
  msgid "Use it to hide the post views counter from selected type of visitors."
318
  msgstr ""
319
 
320
+ #: ../includes/settings.php:376 ../includes/settings.php:519
321
  msgid "Use it to hide the post views counter from selected user roles."
322
  msgstr ""
323
 
324
+ #: ../includes/settings.php:396 ../includes/settings.php:402
325
  msgid "Remove"
326
  msgstr ""
327
 
328
+ #: ../includes/settings.php:407
329
  msgid "Add new"
330
  msgstr ""
331
 
332
+ #: ../includes/settings.php:407
333
  msgid "Add my current IP"
334
  msgstr ""
335
 
336
+ #: ../includes/settings.php:408
337
  msgid "Enter the IP addresses to be excluded from post views count."
338
  msgstr ""
339
 
340
+ #: ../includes/settings.php:419
341
  msgid "Import"
342
  msgstr ""
343
 
344
+ #: ../includes/settings.php:420
345
  msgid "Import post views data from WP-PostViews plugin."
346
  msgstr ""
347
 
348
+ #: ../includes/settings.php:421
349
  msgid "Override existing Post Views Counter data."
350
  msgstr ""
351
 
352
+ #: ../includes/settings.php:432
353
  msgid "Enable to restrict post views editing to admins only."
354
  msgstr ""
355
 
356
+ #: ../includes/settings.php:442
357
  msgid "Enable to delete all plugin data on deactivation."
358
  msgstr ""
359
 
360
+ #: ../includes/settings.php:461
361
  msgid ""
362
  "Select where would you like to display the post views counter. Use [post-"
363
  "views] shortcode for manual display."
364
  msgstr ""
365
 
366
+ #: ../includes/settings.php:480
367
  msgid "Choose how to display the post views counter."
368
  msgstr ""
369
 
370
+ #: ../includes/settings.php:491
371
  #, php-format
372
  msgid ""
373
  "Enter the post views icon class. Any of the <a href=\"%s\" target=\"_blank"
374
  "\">Dashicons</a> classes are available."
375
  msgstr ""
376
 
377
+ #: ../includes/settings.php:550
378
+ msgid "Post views data imported succesfully."
379
  msgstr ""
380
 
381
+ #: ../includes/settings.php:552
382
+ msgid "There was no post views data to import."
383
  msgstr ""
384
 
385
+ #: ../includes/settings.php:710
386
  msgid "General settings restored to defaults."
387
  msgstr ""
388
 
389
+ #: ../includes/settings.php:714
390
  msgid "Display settings restored to defaults."
391
  msgstr ""
392
 
393
+ #: ../includes/widgets.php:38 ../includes/widgets.php:48
394
  msgid "Most Viewed Posts"
395
  msgstr ""
396
 
397
+ #: ../includes/widgets.php:39
398
  msgid "Displays a list of the most viewed posts"
399
  msgstr ""
400
 
401
+ #: ../includes/widgets.php:56
402
  msgid "No Posts found"
403
  msgstr ""
404
 
405
+ #: ../includes/widgets.php:60
406
  msgid "Ascending"
407
  msgstr ""
408
 
409
+ #: ../includes/widgets.php:61
410
  msgid "Descending"
411
  msgstr ""
412
 
413
+ #: ../includes/widgets.php:98
414
  msgid "Title"
415
  msgstr ""
416
 
417
+ #: ../includes/widgets.php:102
418
  msgid "Post Types"
419
  msgstr ""
420
 
421
+ #: ../includes/widgets.php:115
422
  msgid "Number of posts to show"
423
  msgstr ""
424
 
425
+ #: ../includes/widgets.php:119
426
  msgid "No posts message"
427
  msgstr ""
428
 
429
+ #: ../includes/widgets.php:123
430
  msgid "Order"
431
  msgstr ""
432
 
433
+ #: ../includes/widgets.php:135
434
  msgid "Display post views?"
435
  msgstr ""
436
 
437
+ #: ../includes/widgets.php:137
438
  msgid "Display post excerpt?"
439
  msgstr ""
440
 
441
+ #: ../includes/widgets.php:139
442
  msgid "Display post thumbnail?"
443
  msgstr ""
444
 
445
+ #: ../includes/widgets.php:142
446
  msgid "Thumbnail size"
447
  msgstr ""
448
 
449
+ #: ../post-views-counter.php:280
450
  msgid "Are you sure you want to reset these settings to defaults?"
451
  msgstr ""
452
 
453
+ #: ../post-views-counter.php:323
454
  msgid "Support"
455
  msgstr ""
456
 
457
+ #: ../post-views-counter.php:342
458
  msgid "Settings"
459
  msgstr ""
post-views-counter.php CHANGED
@@ -1,370 +1,369 @@
1
- <?php
2
- /*
3
- Plugin Name: Post Views Counter
4
- Description: Forget WP-PostViews. Display how many times a post, page or custom post type had been viewed in a simple, fast and reliable way.
5
- Version: 1.1.4
6
- Author: dFactory
7
- Author URI: http://www.dfactory.eu/
8
- Plugin URI: http://www.dfactory.eu/plugins/post-views-counter/
9
- License: MIT License
10
- License URI: http://opensource.org/licenses/MIT
11
- Text Domain: post-views-counter
12
- Domain Path: /languages
13
-
14
- Post Views Counter
15
- Copyright (C) 2014-2015, Digital Factory - info@digitalfactory.pl
16
-
17
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
18
-
19
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
20
-
21
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- */
23
-
24
- // exit if accessed directly
25
- if ( ! defined( 'ABSPATH' ) )
26
- exit;
27
-
28
- if ( ! class_exists( 'Post_Views_Counter' ) ) :
29
-
30
- /**
31
- * Post Views Counter final class.
32
- *
33
- * @class Post_Views_Counter
34
- * @version 1.1.4
35
- */
36
- final class Post_Views_Counter {
37
-
38
- private static $instance;
39
- public $_cron;
40
- public $_counter;
41
- public $_settings;
42
- public $options;
43
- public $defaults = array(
44
- 'general' => array(
45
- 'post_types_count' => array( 'post' ),
46
- 'counter_mode' => 'php',
47
- 'post_views_column' => true,
48
- 'time_between_counts' => array(
49
- 'number' => 24,
50
- 'type' => 'hours'
51
- ),
52
- 'reset_counts' => array(
53
- 'number' => 30,
54
- 'type' => 'days'
55
- ),
56
- 'flush_interval' => array(
57
- 'number' => 0,
58
- 'type' => 'minutes'
59
- ),
60
- 'exclude' => array(
61
- 'groups' => array(),
62
- 'roles' => array()
63
- ),
64
- 'exclude_ips' => array(),
65
- 'restrict_edit_views' => false,
66
- 'deactivation_delete' => false,
67
- 'cron_run' => true,
68
- 'cron_update' => true
69
- ),
70
- 'display' => array(
71
- 'label' => 'Post Views:',
72
- 'post_types_display' => array( 'post' ),
73
- 'restrict_display' => array(
74
- 'groups' => array(),
75
- 'roles' => array()
76
- ),
77
- 'position' => 'after',
78
- 'display_style' => array(
79
- 'icon' => true,
80
- 'text' => true
81
- ),
82
- 'link_to_post' => true,
83
- 'icon_class' => 'dashicons-chart-bar'
84
- ),
85
- 'version' => '1.1.4'
86
- );
87
-
88
- /**
89
- * Disable object clone.
90
- */
91
- private function __clone() {}
92
-
93
- /**
94
- * Disable unserializing of the class.
95
- */
96
- private function __wakeup() {}
97
-
98
- /**
99
- * Main Post_Views_Counter instance,
100
- * Insures that only one instance of Post_Views_Counter exists in memory at one time.
101
- *
102
- * @return object
103
- */
104
- public static function instance() {
105
- if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Post_Views_Counter ) ) {
106
- self::$instance = new Post_Views_Counter;
107
- self::$instance->define_constants();
108
-
109
- add_action( 'plugins_loaded', array( self::$instance, 'load_textdomain' ) );
110
-
111
- self::$instance->includes();
112
- self::$instance->update = new Post_Views_Counter_Update();
113
- self::$instance->settings = new Post_Views_Counter_Settings();
114
- self::$instance->query = new Post_Views_Counter_Query();
115
- self::$instance->cron = new Post_Views_Counter_Cron();
116
- self::$instance->counter = new Post_Views_Counter_Counter();
117
- self::$instance->columns = new Post_Views_Counter_Columns();
118
- self::$instance->frontend = new Post_Views_Counter_Frontend();
119
- self::$instance->widgets = new Post_Views_Counter_Widgets();
120
- }
121
- return self::$instance;
122
- }
123
-
124
- /**
125
- * Setup plugin constants.
126
- *
127
- * @return void
128
- */
129
- private function define_constants() {
130
- define( 'POST_VIEWS_COUNTER_URL', plugins_url( '', __FILE__ ) );
131
- define( 'POST_VIEWS_COUNTER_PATH', plugin_dir_path( __FILE__ ) );
132
- define( 'POST_VIEWS_COUNTER_REL_PATH', dirname( plugin_basename( __FILE__ ) ) . '/' );
133
- }
134
-
135
- /**
136
- * Include required files
137
- *
138
- * @return void
139
- */
140
- private function includes() {
141
- include_once( POST_VIEWS_COUNTER_PATH . 'includes/update.php' );
142
- include_once( POST_VIEWS_COUNTER_PATH . 'includes/settings.php' );
143
- include_once( POST_VIEWS_COUNTER_PATH . 'includes/columns.php' );
144
- include_once( POST_VIEWS_COUNTER_PATH . 'includes/query.php' );
145
- include_once( POST_VIEWS_COUNTER_PATH . 'includes/cron.php' );
146
- include_once( POST_VIEWS_COUNTER_PATH . 'includes/counter.php' );
147
- include_once( POST_VIEWS_COUNTER_PATH . 'includes/frontend.php' );
148
- include_once( POST_VIEWS_COUNTER_PATH . 'includes/widgets.php' );
149
- }
150
-
151
- /**
152
- * Class constructor.
153
- *
154
- * @return void
155
- */
156
- public function __construct() {
157
- register_activation_hook( __FILE__, array( $this, 'activation' ) );
158
- register_deactivation_hook( __FILE__, array( $this, 'deactivation' ) );
159
-
160
- // settings
161
- $this->options = array(
162
- 'general' => array_merge( $this->defaults['general'], get_option( 'post_views_counter_settings_general', $this->defaults['general'] ) ),
163
- 'display' => array_merge( $this->defaults['display'], get_option( 'post_views_counter_settings_display', $this->defaults['display'] ) )
164
- );
165
-
166
- // actions
167
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts_styles' ) );
168
- add_action( 'wp_loaded', array( $this, 'load_pluggable_functions' ), 10 );
169
-
170
- // filters
171
- add_filter( 'plugin_row_meta', array( $this, 'plugin_extend_links' ), 10, 2 );
172
- add_filter( 'plugin_action_links', array( $this, 'plugin_settings_link' ), 10, 2 );
173
- }
174
-
175
- /**
176
- * Plugin activation function.
177
- */
178
- public function activation() {
179
- global $wpdb, $charset_collate;
180
-
181
- // required for dbdelta
182
- require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
183
-
184
- // create post views table
185
- dbDelta( '
186
- CREATE TABLE IF NOT EXISTS ' . $wpdb->prefix . 'post_views (
187
- id bigint unsigned NOT NULL,
188
- type tinyint(1) unsigned NOT NULL,
189
- period varchar(8) NOT NULL,
190
- count bigint unsigned NOT NULL,
191
- PRIMARY KEY (type, period, id),
192
- UNIQUE INDEX id_period (id, period) USING BTREE,
193
- INDEX type_period_count (type, period, count) USING BTREE
194
- ) ' . $charset_collate . ';'
195
- );
196
-
197
- // add default options
198
- add_option( 'post_views_counter_settings_general', $this->defaults['general'], '', 'no' );
199
- add_option( 'post_views_counter_settings_display', $this->defaults['display'], '', 'no' );
200
- add_option( 'post_views_counter_version', $this->defaults['version'], '', 'no' );
201
-
202
- // schedule cache flush
203
- $this->schedule_cache_flush();
204
- }
205
-
206
- /**
207
- * Plugin deactivation function.
208
- */
209
- public function deactivation() {
210
- // delete default options
211
- if ( $this->options['general']['deactivation_delete'] ) {
212
- delete_option( 'post_views_counter_settings_general' );
213
- delete_option( 'post_views_counter_settings_display' );
214
- }
215
-
216
- // remove schedule
217
- wp_clear_scheduled_hook( 'pvc_reset_counts' );
218
- remove_action( 'pvc_reset_counts', array( Post_Views_Counter()->_cron, 'reset_counts' ) );
219
-
220
- $this->remove_cache_flush();
221
- }
222
-
223
- /**
224
- * Schedule cache flushing if it's not already scheduled.
225
- */
226
- public function schedule_cache_flush( $forced = true ) {
227
- if ( $forced || ! wp_next_scheduled( 'pvc_flush_cached_counts' ) ) {
228
- wp_schedule_event( time(), 'post_views_counter_flush_interval', 'pvc_flush_cached_counts' );
229
- }
230
- }
231
-
232
- /**
233
- * Remove scheduled cache flush and the corresponding action.
234
- */
235
- public function remove_cache_flush() {
236
- wp_clear_scheduled_hook( 'pvc_flush_cached_counts' );
237
- remove_action( 'pvc_flush_cached_counts', array( Post_Views_Counter()->_cron, 'flush_cached_counts' ) );
238
- }
239
-
240
- /**
241
- * Load text domain.
242
- */
243
- public function load_textdomain() {
244
- load_plugin_textdomain( 'post-views-counter', false, POST_VIEWS_COUNTER_REL_PATH . 'languages/' );
245
- }
246
-
247
- /**
248
- * Load pluggable template functions.
249
- */
250
- public function load_pluggable_functions() {
251
- include_once( POST_VIEWS_COUNTER_PATH . 'includes/functions.php' );
252
- }
253
-
254
- /**
255
- * Enqueue admin scripts and styles.
256
- */
257
- public function admin_scripts_styles( $page ) {
258
- wp_register_style(
259
- 'pvc-admin', POST_VIEWS_COUNTER_URL . '/css/admin.css'
260
- );
261
-
262
- wp_register_script(
263
- 'pvc-admin-settings', POST_VIEWS_COUNTER_URL . '/js/admin-settings.js', array( 'jquery' ), $this->defaults['version']
264
- );
265
-
266
- wp_register_script(
267
- 'pvc-admin-post', POST_VIEWS_COUNTER_URL . '/js/admin-post.js', array( 'jquery' ), $this->defaults['version']
268
- );
269
-
270
- wp_register_script(
271
- 'pvc-admin-quick-edit', POST_VIEWS_COUNTER_URL . '/js/admin-quick-edit.js', array( 'jquery', 'inline-edit-post' ), $this->defaults['version']
272
- );
273
-
274
- // load on PVC settings page
275
- if ( $page === 'settings_page_post-views-counter' ) {
276
-
277
- wp_enqueue_script( 'pvc-admin-settings' );
278
-
279
- wp_localize_script(
280
- 'pvc-admin-settings', 'pvcArgsSettings', array(
281
- 'resetToDefaults' => __( 'Are you sure you want to reset these settings to defaults?', 'post-views-counter' )
282
- )
283
- );
284
-
285
- wp_enqueue_style( 'pvc-admin' );
286
-
287
- // load on single post page
288
- } elseif ( $page === 'post.php' || $page === 'post-new.php' ) {
289
-
290
- $post_types = Post_Views_Counter()->options['general']['post_types_count'];
291
-
292
- global $post_type;
293
-
294
- if ( ! in_array( $post_type, (array) $post_types ) )
295
- return;
296
-
297
- wp_enqueue_style( 'pvc-admin' );
298
- wp_enqueue_script( 'pvc-admin-post' );
299
- } elseif ( $page === 'edit.php' ) {
300
- $post_types = Post_Views_Counter()->options['general']['post_types_count'];
301
-
302
- global $post_type;
303
-
304
- if ( ! in_array( $post_type, (array) $post_types ) )
305
- return;
306
-
307
- wp_enqueue_style( 'pvc-admin' );
308
- wp_enqueue_script( 'pvc-admin-quick-edit' );
309
- }
310
- }
311
-
312
- /**
313
- * Add links to plugin support forum.
314
- */
315
- public function plugin_extend_links( $links, $file ) {
316
-
317
- if ( ! current_user_can( 'install_plugins' ) )
318
- return $links;
319
-
320
- $plugin = plugin_basename( __FILE__ );
321
-
322
- if ( $file == $plugin ) {
323
- return array_merge(
324
- $links, array( sprintf( '<a href="http://www.dfactory.eu/support/forum/post-views-counter/" target="_blank">%s</a>', __( 'Support', 'post-views-counter' ) ) )
325
- );
326
- }
327
-
328
- return $links;
329
- }
330
-
331
- /**
332
- * Add link to settings page.
333
- */
334
- public function plugin_settings_link( $links, $file ) {
335
- if ( ! is_admin() || ! current_user_can( 'manage_options' ) )
336
- return $links;
337
-
338
- static $plugin;
339
-
340
- $plugin = plugin_basename( __FILE__ );
341
-
342
- if ( $file == $plugin ) {
343
- $settings_link = sprintf( '<a href="%s">%s</a>', admin_url( 'options-general.php' ) . '?page=post-views-counter', __( 'Settings', 'post-views-counter' ) );
344
-
345
- array_unshift( $links, $settings_link );
346
- }
347
-
348
- return $links;
349
- }
350
-
351
- }
352
-
353
- endif; // end if class_exists check
354
-
355
- /**
356
- * Initialise Post Views Counter.
357
- *
358
- * @return object
359
- */
360
- function Post_Views_Counter() {
361
- static $instance;
362
-
363
- // first call to instance() initializes the plugin
364
- if ( $instance === null || ! ( $instance instanceof Post_Views_Counter ) )
365
- $instance = Post_Views_Counter::instance();
366
-
367
- return $instance;
368
- }
369
-
370
  Post_Views_Counter();
1
+ <?php
2
+ /*
3
+ Plugin Name: Post Views Counter
4
+ Description: Forget WP-PostViews. Display how many times a post, page or custom post type had been viewed in a simple, fast and reliable way.
5
+ Version: 1.2.0
6
+ Author: dFactory
7
+ Author URI: http://www.dfactory.eu/
8
+ Plugin URI: http://www.dfactory.eu/plugins/post-views-counter/
9
+ License: MIT License
10
+ License URI: http://opensource.org/licenses/MIT
11
+ Text Domain: post-views-counter
12
+ Domain Path: /languages
13
+
14
+ Post Views Counter
15
+ Copyright (C) 2014-2016, Digital Factory - info@digitalfactory.pl
16
+
17
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ */
23
+
24
+ // exit if accessed directly
25
+ if ( ! defined( 'ABSPATH' ) )
26
+ exit;
27
+
28
+ if ( ! class_exists( 'Post_Views_Counter' ) ) :
29
+
30
+ /**
31
+ * Post Views Counter final class.
32
+ *
33
+ * @class Post_Views_Counter
34
+ * @version 1.2.0
35
+ */
36
+ final class Post_Views_Counter {
37
+
38
+ private static $instance;
39
+ public $options;
40
+ public $defaults = array(
41
+ 'general' => array(
42
+ 'post_types_count' => array( 'post' ),
43
+ 'counter_mode' => 'php',
44
+ 'post_views_column' => true,
45
+ 'time_between_counts' => array(
46
+ 'number' => 24,
47
+ 'type' => 'hours'
48
+ ),
49
+ 'reset_counts' => array(
50
+ 'number' => 30,
51
+ 'type' => 'days'
52
+ ),
53
+ 'flush_interval' => array(
54
+ 'number' => 0,
55
+ 'type' => 'minutes'
56
+ ),
57
+ 'exclude' => array(
58
+ 'groups' => array(),
59
+ 'roles' => array()
60
+ ),
61
+ 'exclude_ips' => array(),
62
+ 'restrict_edit_views' => false,
63
+ 'deactivation_delete' => false,
64
+ 'cron_run' => true,
65
+ 'cron_update' => true
66
+ ),
67
+ 'display' => array(
68
+ 'label' => 'Post Views:',
69
+ 'post_types_display' => array( 'post' ),
70
+ 'restrict_display' => array(
71
+ 'groups' => array(),
72
+ 'roles' => array()
73
+ ),
74
+ 'position' => 'after',
75
+ 'display_style' => array(
76
+ 'icon' => true,
77
+ 'text' => true
78
+ ),
79
+ 'link_to_post' => true,
80
+ 'icon_class' => 'dashicons-chart-bar'
81
+ ),
82
+ 'version' => '1.2.0'
83
+ );
84
+
85
+ /**
86
+ * Disable object clone.
87
+ */
88
+ private function __clone() {}
89
+
90
+ /**
91
+ * Disable unserializing of the class.
92
+ */
93
+ private function __wakeup() {}
94
+
95
+ /**
96
+ * Main Post_Views_Counter instance,
97
+ * Insures that only one instance of Post_Views_Counter exists in memory at one time.
98
+ *
99
+ * @return object
100
+ */
101
+ public static function instance() {
102
+ if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Post_Views_Counter ) ) {
103
+ self::$instance = new Post_Views_Counter;
104
+ self::$instance->define_constants();
105
+
106
+ add_action( 'plugins_loaded', array( self::$instance, 'load_textdomain' ) );
107
+
108
+ self::$instance->includes();
109
+ self::$instance->update = new Post_Views_Counter_Update();
110
+ self::$instance->settings = new Post_Views_Counter_Settings();
111
+ self::$instance->query = new Post_Views_Counter_Query();
112
+ self::$instance->cron = new Post_Views_Counter_Cron();
113
+ self::$instance->counter = new Post_Views_Counter_Counter();
114
+ self::$instance->columns = new Post_Views_Counter_Columns();
115
+ self::$instance->frontend = new Post_Views_Counter_Frontend();
116
+ self::$instance->dashboard = new Post_Views_Counter_Dashboard();
117
+ self::$instance->widgets = new Post_Views_Counter_Widgets();
118
+ }
119
+ return self::$instance;
120
+ }
121
+
122
+ /**
123
+ * Setup plugin constants.
124
+ *
125
+ * @return void
126
+ */
127
+ private function define_constants() {
128
+ define( 'POST_VIEWS_COUNTER_URL', plugins_url( '', __FILE__ ) );
129
+ define( 'POST_VIEWS_COUNTER_PATH', plugin_dir_path( __FILE__ ) );
130
+ define( 'POST_VIEWS_COUNTER_REL_PATH', dirname( plugin_basename( __FILE__ ) ) . '/' );
131
+ }
132
+
133
+ /**
134
+ * Include required files
135
+ *
136
+ * @return void
137
+ */
138
+ private function includes() {
139
+ include_once( POST_VIEWS_COUNTER_PATH . 'includes/update.php' );
140
+ include_once( POST_VIEWS_COUNTER_PATH . 'includes/settings.php' );
141
+ include_once( POST_VIEWS_COUNTER_PATH . 'includes/columns.php' );
142
+ include_once( POST_VIEWS_COUNTER_PATH . 'includes/query.php' );
143
+ include_once( POST_VIEWS_COUNTER_PATH . 'includes/cron.php' );
144
+ include_once( POST_VIEWS_COUNTER_PATH . 'includes/counter.php' );
145
+ include_once( POST_VIEWS_COUNTER_PATH . 'includes/frontend.php' );
146
+ include_once( POST_VIEWS_COUNTER_PATH . 'includes/dashboard.php' );
147
+ include_once( POST_VIEWS_COUNTER_PATH . 'includes/widgets.php' );
148
+ }
149
+
150
+ /**
151
+ * Class constructor.
152
+ *
153
+ * @return void
154
+ */
155
+ public function __construct() {
156
+ register_activation_hook( __FILE__, array( $this, 'activation' ) );
157
+ register_deactivation_hook( __FILE__, array( $this, 'deactivation' ) );
158
+
159
+ // settings
160
+ $this->options = array(
161
+ 'general' => array_merge( $this->defaults['general'], get_option( 'post_views_counter_settings_general', $this->defaults['general'] ) ),
162
+ 'display' => array_merge( $this->defaults['display'], get_option( 'post_views_counter_settings_display', $this->defaults['display'] ) )
163
+ );
164
+
165
+ // actions
166
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts_styles' ) );
167
+ add_action( 'wp_loaded', array( $this, 'load_pluggable_functions' ), 10 );
168
+
169
+ // filters
170
+ add_filter( 'plugin_row_meta', array( $this, 'plugin_extend_links' ), 10, 2 );
171
+ add_filter( 'plugin_action_links', array( $this, 'plugin_settings_link' ), 10, 2 );
172
+ }
173
+
174
+ /**
175
+ * Plugin activation function.
176
+ */
177
+ public function activation() {
178
+ global $wpdb, $charset_collate;
179
+
180
+ // required for dbdelta
181
+ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
182
+
183
+ // create post views table
184
+ dbDelta( '
185
+ CREATE TABLE IF NOT EXISTS ' . $wpdb->prefix . 'post_views (
186
+ id bigint unsigned NOT NULL,
187
+ type tinyint(1) unsigned NOT NULL,
188
+ period varchar(8) NOT NULL,
189
+ count bigint unsigned NOT NULL,
190
+ PRIMARY KEY (type, period, id),
191
+ UNIQUE INDEX id_period (id, period) USING BTREE,
192
+ INDEX type_period_count (type, period, count) USING BTREE
193
+ ) ' . $charset_collate . ';'
194
+ );
195
+
196
+ // add default options
197
+ add_option( 'post_views_counter_settings_general', $this->defaults['general'], '', 'no' );
198
+ add_option( 'post_views_counter_settings_display', $this->defaults['display'], '', 'no' );
199
+ add_option( 'post_views_counter_version', $this->defaults['version'], '', 'no' );
200
+
201
+ // schedule cache flush
202
+ $this->schedule_cache_flush();
203
+ }
204
+
205
+ /**
206
+ * Plugin deactivation function.
207
+ */
208
+ public function deactivation() {
209
+ // delete default options
210
+ if ( $this->options['general']['deactivation_delete'] ) {
211
+ delete_option( 'post_views_counter_settings_general' );
212
+ delete_option( 'post_views_counter_settings_display' );
213
+ }
214
+
215
+ // remove schedule
216
+ wp_clear_scheduled_hook( 'pvc_reset_counts' );
217
+ remove_action( 'pvc_reset_counts', array( Post_Views_Counter()->cron, 'reset_counts' ) );
218
+
219
+ $this->remove_cache_flush();
220
+ }
221
+
222
+ /**
223
+ * Schedule cache flushing if it's not already scheduled.
224
+ */
225
+ public function schedule_cache_flush( $forced = true ) {
226
+ if ( $forced || ! wp_next_scheduled( 'pvc_flush_cached_counts' ) ) {
227
+ wp_schedule_event( time(), 'post_views_counter_flush_interval', 'pvc_flush_cached_counts' );
228
+ }
229
+ }
230
+
231
+ /**
232
+ * Remove scheduled cache flush and the corresponding action.
233
+ */
234
+ public function remove_cache_flush() {
235
+ wp_clear_scheduled_hook( 'pvc_flush_cached_counts' );
236
+ remove_action( 'pvc_flush_cached_counts', array( Post_Views_Counter()->cron, 'flush_cached_counts' ) );
237
+ }
238
+
239
+ /**
240
+ * Load text domain.
241
+ */
242
+ public function load_textdomain() {
243
+ load_plugin_textdomain( 'post-views-counter', false, POST_VIEWS_COUNTER_REL_PATH . 'languages/' );
244
+ }
245
+
246
+ /**
247
+ * Load pluggable template functions.
248
+ */
249
+ public function load_pluggable_functions() {
250
+ include_once( POST_VIEWS_COUNTER_PATH . 'includes/functions.php' );
251
+ }
252
+
253
+ /**
254
+ * Enqueue admin scripts and styles.
255
+ */
256
+ public function admin_scripts_styles( $page ) {
257
+ wp_register_style(
258
+ 'pvc-admin', POST_VIEWS_COUNTER_URL . '/css/admin.css'
259
+ );
260
+
261
+ wp_register_script(
262
+ 'pvc-admin-settings', POST_VIEWS_COUNTER_URL . '/js/admin-settings.js', array( 'jquery' ), $this->defaults['version']
263
+ );
264
+
265
+ wp_register_script(
266
+ 'pvc-admin-post', POST_VIEWS_COUNTER_URL . '/js/admin-post.js', array( 'jquery' ), $this->defaults['version']
267
+ );
268
+
269
+ wp_register_script(
270
+ 'pvc-admin-quick-edit', POST_VIEWS_COUNTER_URL . '/js/admin-quick-edit.js', array( 'jquery', 'inline-edit-post' ), $this->defaults['version']
271
+ );
272
+
273
+ // load on PVC settings page
274
+ if ( $page === 'settings_page_post-views-counter' ) {
275
+
276
+ wp_enqueue_script( 'pvc-admin-settings' );
277
+
278
+ wp_localize_script(
279
+ 'pvc-admin-settings', 'pvcArgsSettings', array(
280
+ 'resetToDefaults' => __( 'Are you sure you want to reset these settings to defaults?', 'post-views-counter' )
281
+ )
282
+ );
283
+
284
+ wp_enqueue_style( 'pvc-admin' );
285
+
286
+ // load on single post page
287
+ } elseif ( $page === 'post.php' || $page === 'post-new.php' ) {
288
+
289
+ $post_types = Post_Views_Counter()->options['general']['post_types_count'];
290
+
291
+ global $post_type;
292
+
293
+ if ( ! in_array( $post_type, (array) $post_types ) )
294
+ return;
295
+
296
+ wp_enqueue_style( 'pvc-admin' );
297
+ wp_enqueue_script( 'pvc-admin-post' );
298
+ } elseif ( $page === 'edit.php' ) {
299
+ $post_types = Post_Views_Counter()->options['general']['post_types_count'];
300
+
301
+ global $post_type;
302
+
303
+ if ( ! in_array( $post_type, (array) $post_types ) )
304
+ return;
305
+
306
+ wp_enqueue_style( 'pvc-admin' );
307
+ wp_enqueue_script( 'pvc-admin-quick-edit' );
308
+ }
309
+ }
310
+
311
+ /**
312
+ * Add links to plugin support forum.
313
+ */
314
+ public function plugin_extend_links( $links, $file ) {
315
+
316
+ if ( ! current_user_can( 'install_plugins' ) )
317
+ return $links;
318
+
319
+ $plugin = plugin_basename( __FILE__ );
320
+
321
+ if ( $file == $plugin ) {
322
+ return array_merge(
323
+ $links, array( sprintf( '<a href="http://www.dfactory.eu/support/forum/post-views-counter/" target="_blank">%s</a>', __( 'Support', 'post-views-counter' ) ) )
324
+ );
325
+ }
326
+
327
+ return $links;
328
+ }
329
+
330
+ /**
331
+ * Add link to settings page.
332
+ */
333
+ public function plugin_settings_link( $links, $file ) {
334
+ if ( ! is_admin() || ! current_user_can( 'manage_options' ) )
335
+ return $links;
336
+
337
+ static $plugin;
338
+
339
+ $plugin = plugin_basename( __FILE__ );
340
+
341
+ if ( $file == $plugin ) {
342
+ $settings_link = sprintf( '<a href="%s">%s</a>', admin_url( 'options-general.php' ) . '?page=post-views-counter', __( 'Settings', 'post-views-counter' ) );
343
+
344
+ array_unshift( $links, $settings_link );
345
+ }
346
+
347
+ return $links;
348
+ }
349
+
350
+ }
351
+
352
+ endif; // end if class_exists check
353
+
354
+ /**
355
+ * Initialise Post Views Counter.
356
+ *
357
+ * @return object
358
+ */
359
+ function Post_Views_Counter() {
360
+ static $instance;
361
+
362
+ // first call to instance() initializes the plugin
363
+ if ( $instance === null || ! ( $instance instanceof Post_Views_Counter ) )
364
+ $instance = Post_Views_Counter::instance();
365
+
366
+ return $instance;
367
+ }
368
+
 
369
  Post_Views_Counter();
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: dfactory
3
  Donate link: http://www.dfactory.eu/
4
  Tags: counter, hits, postviews, post views, views, count
5
  Requires at least: 4.0.0
6
- Tested up to: 4.4
7
- Stable tag: 1.1.4
8
  License: MIT License
9
  License URI: http://opensource.org/licenses/MIT
10
 
@@ -21,6 +21,7 @@ For more information, check out plugin page at [dFactory](http://www.dfactory.eu
21
  * Option to select post types for which post views will be counted and displayed.
22
  * 2 methods of collecting post views data: PHP and Javascript, for greater flexibility
23
  * Possibility to manually set views count for each post
 
24
  * Capability to query posts according to its views count
25
  * Option to set time between counts
26
  * Excluding counts from visitors: bots, logged in users, selected user roles
@@ -67,6 +68,10 @@ No questions yet.
67
 
68
  == Changelog ==
69
 
 
 
 
 
70
  = 1.1.4 =
71
  * Fix: Dashicons link broken.
72
  * Tweak: Confirmed WordPress 4.4 compatibility.
@@ -129,6 +134,5 @@ Initial release
129
 
130
  == Upgrade Notice ==
131
 
132
- = 1.1.4 =
133
- * Fix: Dashicons link broken.
134
- * Tweak: Confirmed WordPress 4.4 compatibility.
3
  Donate link: http://www.dfactory.eu/
4
  Tags: counter, hits, postviews, post views, views, count
5
  Requires at least: 4.0.0
6
+ Tested up to: 4.4.2
7
+ Stable tag: 1.2.0
8
  License: MIT License
9
  License URI: http://opensource.org/licenses/MIT
10
 
21
  * Option to select post types for which post views will be counted and displayed.
22
  * 2 methods of collecting post views data: PHP and Javascript, for greater flexibility
23
  * Possibility to manually set views count for each post
24
+ * Dashboard post views stats widget
25
  * Capability to query posts according to its views count
26
  * Option to set time between counts
27
  * Excluding counts from visitors: bots, logged in users, selected user roles
68
 
69
  == Changelog ==
70
 
71
+ = 1.2.0 =
72
+ * New: Dashboard post views stats widget.
73
+ * Fix: A couple of typos in method names.
74
+
75
  = 1.1.4 =
76
  * Fix: Dashicons link broken.
77
  * Tweak: Confirmed WordPress 4.4 compatibility.
134
 
135
  == Upgrade Notice ==
136
 
137
+ = 1.2.0 =
138
+ * New: Dashboard post views stats widget.