WP External Links (nofollow new tab seo) - Version 2.50

Version Description

  • 2021-07-09
    • completely new GUI
    • link scanner / link analyzer SaaS beta
Download this release

Release Info

Developer WebFactory
Plugin Icon 128x128 WP External Links (nofollow new tab seo)
Version 2.50
Comparing to
See all releases

Code changes from version 2.48 to 2.50

includes/admin/class-wpel-network-page.php CHANGED
@@ -126,7 +126,7 @@ final class WPEL_Network_Page extends WPRun_Base_1x0x0
126
  protected function action_admin_enqueue_scripts()
127
  {
128
  $current_screen = get_current_screen();
129
-
130
  if($current_screen->id == 'toplevel_page_wpel-network-settings-page-network' || $current_screen->id == 'settings_page_wpel-network-settings-page-network'){
131
  wp_enqueue_style( 'font-awesome' );
132
  wp_enqueue_style( 'wpel-admin-style' );
126
  protected function action_admin_enqueue_scripts()
127
  {
128
  $current_screen = get_current_screen();
129
+
130
  if($current_screen->id == 'toplevel_page_wpel-network-settings-page-network' || $current_screen->id == 'settings_page_wpel-network-settings-page-network'){
131
  wp_enqueue_style( 'font-awesome' );
132
  wp_enqueue_style( 'wpel-admin-style' );
includes/admin/class-wpel-settings-page.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Class WPEL_Settings_Page
4
  *
@@ -34,59 +35,83 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
34
  /**
35
  * Initialize
36
  */
37
- protected function init( $network_page, array $fields_objects )
38
  {
39
  $this->network_page = $network_page;
40
 
41
  $this->tabs = array(
 
 
 
 
42
  'external-links' => array(
43
- 'title' => __( 'External Links', 'wp-external-links' ),
44
- 'icon' => '<i class="fa fa-external-link-square" aria-hidden="true"></i>',
45
- 'fields' => $fields_objects[ 'external-links' ],
46
  ),
47
  'internal-links' => array(
48
- 'title' => __( 'Internal Links', 'wp-external-links' ),
49
- 'icon' => '<i class="fa fa-link" aria-hidden="true"></i>',
50
- 'fields' => $fields_objects[ 'internal-links' ],
51
  ),
52
  'excluded-links' => array(
53
- 'title' => __( 'Excluded Links', 'wp-external-links' ),
54
- 'icon' => '<i class="fa fa-share-square" aria-hidden="true"></i>',
55
- 'fields' => $fields_objects[ 'excluded-links' ],
56
  ),
57
  'exceptions' => array(
58
- 'title' => __( 'Exceptions', 'wp-external-links' ),
59
- 'icon' => '<i class="fa fa-th-large" aria-hidden="true"></i>',
60
- 'fields' => $fields_objects[ 'exceptions' ],
61
  ),
62
  'admin' => array(
63
- 'title' => __( 'Admin Settings', 'wp-external-links' ),
64
- 'icon' => '<i class="fa fa-cogs" aria-hidden="true"></i>',
65
- 'fields' => $fields_objects[ 'admin' ],
66
  ),
67
  'support' => array(
68
- 'title' => __( 'Support', 'wp-external-links' ),
69
- 'icon' => '<i class="fa fa-question" aria-hidden="true"></i>',
70
  ),
71
  );
72
 
73
  // check excluded links tab available
74
- if ( $this->get_option_value( 'excludes_as_internal_links', 'exceptions' ) ) {
75
- unset( $this->tabs[ 'excluded-links' ] );
76
  }
77
 
78
  // get current tab
79
- $this->current_tab = filter_input( INPUT_GET, 'tab', FILTER_SANITIZE_STRING );
80
 
81
  // set default tab
82
- if ( ! key_exists( $this->current_tab, $this->tabs ) ) {
83
- reset( $this->tabs );
84
- $this->current_tab = key( $this->tabs );
85
  }
86
 
87
  add_filter('plugin_action_links_' . plugin_basename(TEST_WPEL_PLUGIN_FILE), array($this, 'plugin_action_links'));
 
88
  }
89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  /**
91
  * Add "Configure Settings" action link to plugins table, left part
92
  *
@@ -96,11 +121,11 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
96
  */
97
  function plugin_action_links($links)
98
  {
99
- $settings_link = '<a href="' . admin_url('admin.php?page=wpel-settings-page') . '" title="Open WP External Links Settings">Configure Settings</a>';
100
 
101
- array_unshift($links, $settings_link);
102
 
103
- return $links;
104
  }
105
 
106
  /**
@@ -110,28 +135,28 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
110
  * @return string
111
  * @triggers E_USER_NOTICE Option value cannot be found
112
  */
113
- public function get_option_value( $key, $type = null )
114
  {
115
- if ( null === $type ) {
116
- foreach ( $this->tabs as $tab_key => $values ) {
117
- if ( ! isset( $values[ 'fields' ] ) ) {
118
  continue;
119
  }
120
 
121
- $option_values = $values[ 'fields' ]->get_option_values();
122
 
123
- if ( ! isset( $option_values[ $key ] ) ) {
124
  continue;
125
  }
126
 
127
- return $option_values[ $key ];
128
  }
129
- } else if ( isset( $this->tabs[ $type ][ 'fields' ] ) ) {
130
- $option_values = $this->tabs[ $type ][ 'fields' ]->get_option_values();
131
- return @$option_values[ $key ];
132
  }
133
 
134
- trigger_error( 'Option value "'. $key .'" cannot be found.' );
135
  }
136
 
137
  /**
@@ -139,50 +164,60 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
139
  */
140
  protected function action_admin_menu()
141
  {
142
- $capability = $this->network_page->get_option_value( 'capability' );
143
 
144
- $own_admin_menu = $this->get_option_value( 'own_admin_menu', 'admin' );
145
 
146
- if ( '1' === $own_admin_menu ) {
147
  $this->page_hook = add_menu_page(
148
- __( 'WP External Links' , 'wp-external-links' ) // page title
149
- , __( 'External Links' , 'wp-external-links' ) // menu title
150
- , $capability // capability
151
- , $this->menu_slug // id
152
- , $this->get_callback( 'show_admin_page' ) // callback
153
- , 'none' // icon
154
- , null // position
 
 
 
 
 
 
155
  );
156
  } else {
157
  $this->page_hook = add_options_page(
158
- __( 'WP External Links' , 'wp-external-links' ) // page title
159
- , __( 'External Links' , 'wp-external-links' ) // menu title
160
- , $capability // capability
161
- , $this->menu_slug // id
162
- , $this->get_callback( 'show_admin_page' ) // callback
 
 
 
 
163
  );
164
  }
165
 
166
- add_action( 'load-'. $this->page_hook, $this->get_callback( 'add_help_tabs' ) );
167
  }
168
 
169
  /**
170
  * Set default option values for new created sites
171
  * @param integer $blog_id
172
  */
173
- protected function action_wpmu_new_blog( $blog_id )
174
  {
175
- $default_site_id = $this->network_page->get_option_value( 'default_settings_site' );
176
 
177
- foreach ( $this->tabs as $tab_key => $values ) {
178
- if ( ! isset( $values[ 'fields' ] ) ) {
179
  continue;
180
  }
181
 
182
- $option_name = $values[ 'fields' ]->get_setting( 'option_name' );
183
 
184
- $default_option_values = get_blog_option( $default_site_id, $option_name, array() );
185
- update_blog_option( $blog_id, $option_name, $default_option_values );
186
  }
187
  }
188
 
@@ -192,13 +227,17 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
192
  protected function action_admin_enqueue_scripts()
193
  {
194
  $current_screen = get_current_screen();
195
- if($current_screen->id == 'toplevel_page_wpel-settings-page' || $current_screen->id == 'settings_page_wpel-settings-page'){
196
- wp_enqueue_style( 'font-awesome' );
197
- wp_enqueue_style( 'wpel-admin-style' );
198
- wp_enqueue_script( 'wpel-admin-script' );
 
 
 
 
199
  }
200
 
201
- wp_enqueue_style( 'wpel-admin-global-style' );
202
  }
203
 
204
  /**
@@ -206,19 +245,19 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
206
  */
207
  protected function show_admin_page()
208
  {
209
- $template_file = WPEL_Plugin::get_plugin_dir( '/templates/settings-page/main.php' );
210
- $page = $this->get_option_value( 'own_admin_menu' ) ? 'admin.php' : 'options-general.php';
211
- $page_url = admin_url() . $page .'?page='. $this->menu_slug;
212
 
213
  $template_vars = array(
214
  'tabs' => $this->tabs,
215
  'current_tab' => $this->current_tab,
216
  'page_url' => $page_url,
217
  'menu_slug' => $this->menu_slug,
218
- 'own_admin_menu' => $this->get_option_value( 'own_admin_menu', 'admin' ),
219
  );
220
 
221
- $this->show_template( $template_file, $template_vars );
222
  }
223
 
224
  /**
@@ -229,28 +268,25 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
229
  $screen = get_current_screen();
230
  return;
231
 
232
- $screen->add_help_tab( array(
233
  'id' => 'under-construction',
234
- 'title' => __( 'Under Construction', 'wp-external-links' ),
235
- 'callback' => $this->get_callback( 'show_help_tab' ),
236
- ) );
237
- $screen->add_help_tab( array(
238
  'id' => 'data-attributes',
239
- 'title' => __( 'Data Attributes', 'wp-external-links' ),
240
- 'callback' => $this->get_callback( 'show_help_tab' ),
241
- ) );
242
  }
243
 
244
  /**
245
  * @param WP_Screen $screen
246
  * @param array $args
247
  */
248
- protected function show_help_tab( $screen, array $args )
249
  {
250
- $template_file = WPEL_Plugin::get_plugin_dir( '/templates/settings-page/help-tabs/'. $args[ 'id' ] .'.php' );
251
- $this->show_template( $template_file );
252
  }
253
-
254
  }
255
-
256
- /*?>*/
1
  <?php
2
+
3
  /**
4
  * Class WPEL_Settings_Page
5
  *
35
  /**
36
  * Initialize
37
  */
38
+ protected function init($network_page, array $fields_objects)
39
  {
40
  $this->network_page = $network_page;
41
 
42
  $this->tabs = array(
43
+ 'link-checking' => array(
44
+ 'title' => '<span class="dashicons dashicons-star-filled"></span>'.__('Link Checker', 'wp-external-links'),
45
+ 'icon' => false,
46
+ ),
47
  'external-links' => array(
48
+ 'title' => __('External Links', 'wp-external-links'),
49
+ 'icon' => false,
50
+ 'fields' => $fields_objects['external-links'],
51
  ),
52
  'internal-links' => array(
53
+ 'title' => __('Internal Links', 'wp-external-links'),
54
+ 'icon' => false,
55
+ 'fields' => $fields_objects['internal-links'],
56
  ),
57
  'excluded-links' => array(
58
+ 'title' => __('Excluded Links', 'wp-external-links'),
59
+ 'icon' => false,
60
+ 'fields' => $fields_objects['excluded-links'],
61
  ),
62
  'exceptions' => array(
63
+ 'title' => __('Exceptions', 'wp-external-links'),
64
+ 'icon' => false,
65
+ 'fields' => $fields_objects['exceptions'],
66
  ),
67
  'admin' => array(
68
+ 'title' => __('Admin Settings', 'wp-external-links'),
69
+ 'icon' => false,
70
+ 'fields' => $fields_objects['admin'],
71
  ),
72
  'support' => array(
73
+ 'title' => __('Support', 'wp-external-links'),
74
+ 'icon' => false,
75
  ),
76
  );
77
 
78
  // check excluded links tab available
79
+ if ($this->get_option_value('excludes_as_internal_links', 'exceptions')) {
80
+ unset($this->tabs['excluded-links']);
81
  }
82
 
83
  // get current tab
84
+ $this->current_tab = filter_input(INPUT_GET, 'tab', FILTER_SANITIZE_STRING);
85
 
86
  // set default tab
87
+ if (!key_exists($this->current_tab, $this->tabs)) {
88
+ reset($this->tabs);
89
+ $this->current_tab = key($this->tabs);
90
  }
91
 
92
  add_filter('plugin_action_links_' . plugin_basename(TEST_WPEL_PLUGIN_FILE), array($this, 'plugin_action_links'));
93
+ add_filter('admin_footer_text', array($this, 'admin_footer_text'));
94
  }
95
 
96
+ /**
97
+ * Add powered by text in admin footer
98
+ *
99
+ * @param string $text Default footer text.
100
+ *
101
+ * @return string
102
+ */
103
+ function admin_footer_text($text)
104
+ {
105
+ $current_screen = get_current_screen();
106
+ if (!empty($current_screen) && $current_screen->id == 'toplevel_page_wpel-settings-page') {
107
+ $plugin_version = get_option('wpel-version');
108
+ $text = '<i>WP External Links v'.$plugin_version.' <a href="https://www.webfactoryltd.com?ref=wp-external-links" title="WebFactory Ltd" target="_blank">WebFactory Ltd</a>. Please <a target="_blank" href="https://wordpress.org/support/plugin/wp-external-links/reviews/#new-post" title="Rate the plugin">rate the plugin <span>★★★★★</span></a> to help us spread the word. Thank you 🙌 from the Webfactory team!</i>';
109
+ }
110
+ return $text;
111
+ } // admin_footer_text
112
+
113
+
114
+
115
  /**
116
  * Add "Configure Settings" action link to plugins table, left part
117
  *
121
  */
122
  function plugin_action_links($links)
123
  {
124
+ $settings_link = '<a href="' . admin_url('admin.php?page=wpel-settings-page') . '" title="Open WP External Links Settings">Configure Settings</a>';
125
 
126
+ array_unshift($links, $settings_link);
127
 
128
+ return $links;
129
  }
130
 
131
  /**
135
  * @return string
136
  * @triggers E_USER_NOTICE Option value cannot be found
137
  */
138
+ public function get_option_value($key, $type = null)
139
  {
140
+ if (null === $type) {
141
+ foreach ($this->tabs as $tab_key => $values) {
142
+ if (!isset($values['fields'])) {
143
  continue;
144
  }
145
 
146
+ $option_values = $values['fields']->get_option_values();
147
 
148
+ if (!isset($option_values[$key])) {
149
  continue;
150
  }
151
 
152
+ return $option_values[$key];
153
  }
154
+ } else if (isset($this->tabs[$type]['fields'])) {
155
+ $option_values = $this->tabs[$type]['fields']->get_option_values();
156
+ return @$option_values[$key];
157
  }
158
 
159
+ trigger_error('Option value "' . $key . '" cannot be found.');
160
  }
161
 
162
  /**
164
  */
165
  protected function action_admin_menu()
166
  {
167
+ $capability = $this->network_page->get_option_value('capability');
168
 
169
+ $own_admin_menu = $this->get_option_value('own_admin_menu', 'admin');
170
 
171
+ if ('1' === $own_admin_menu) {
172
  $this->page_hook = add_menu_page(
173
+ __('WP External Links', 'wp-external-links') // page title
174
+ ,
175
+ __('External Links', 'wp-external-links') // menu title
176
+ ,
177
+ $capability // capability
178
+ ,
179
+ $this->menu_slug // id
180
+ ,
181
+ $this->get_callback('show_admin_page') // callback
182
+ ,
183
+ 'none' // icon
184
+ ,
185
+ null // position
186
  );
187
  } else {
188
  $this->page_hook = add_options_page(
189
+ __('WP External Links', 'wp-external-links') // page title
190
+ ,
191
+ __('External Links', 'wp-external-links') // menu title
192
+ ,
193
+ $capability // capability
194
+ ,
195
+ $this->menu_slug // id
196
+ ,
197
+ $this->get_callback('show_admin_page') // callback
198
  );
199
  }
200
 
201
+ add_action('load-' . $this->page_hook, $this->get_callback('add_help_tabs'));
202
  }
203
 
204
  /**
205
  * Set default option values for new created sites
206
  * @param integer $blog_id
207
  */
208
+ protected function action_wpmu_new_blog($blog_id)
209
  {
210
+ $default_site_id = $this->network_page->get_option_value('default_settings_site');
211
 
212
+ foreach ($this->tabs as $tab_key => $values) {
213
+ if (!isset($values['fields'])) {
214
  continue;
215
  }
216
 
217
+ $option_name = $values['fields']->get_setting('option_name');
218
 
219
+ $default_option_values = get_blog_option($default_site_id, $option_name, array());
220
+ update_blog_option($blog_id, $option_name, $default_option_values);
221
  }
222
  }
223
 
227
  protected function action_admin_enqueue_scripts()
228
  {
229
  $current_screen = get_current_screen();
230
+ if ($current_screen->id == 'toplevel_page_wpel-settings-page' || $current_screen->id == 'settings_page_wpel-settings-page') {
231
+ wp_enqueue_script('jquery-ui-core');
232
+ wp_enqueue_script('jquery-ui-accordion');
233
+ wp_enqueue_style('font-awesome');
234
+ wp_enqueue_style('wpel-admin-style');
235
+ wp_enqueue_script('wpel-admin-script');
236
+ wp_enqueue_style('jquery-ui-smoothness', 'https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css', false, null);
237
+ wp_enqueue_style('wpel-admin-font', 'https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,200;0,300;0,400;0,500;0,600;1,200;1,300;1,400;1,500;1,600&display=swap');
238
  }
239
 
240
+ wp_enqueue_style('wpel-admin-global-style');
241
  }
242
 
243
  /**
245
  */
246
  protected function show_admin_page()
247
  {
248
+ $template_file = WPEL_Plugin::get_plugin_dir('/templates/settings-page/main.php');
249
+ $page = $this->get_option_value('own_admin_menu') ? 'admin.php' : 'options-general.php';
250
+ $page_url = admin_url() . $page . '?page=' . $this->menu_slug;
251
 
252
  $template_vars = array(
253
  'tabs' => $this->tabs,
254
  'current_tab' => $this->current_tab,
255
  'page_url' => $page_url,
256
  'menu_slug' => $this->menu_slug,
257
+ 'own_admin_menu' => $this->get_option_value('own_admin_menu', 'admin'),
258
  );
259
 
260
+ $this->show_template($template_file, $template_vars);
261
  }
262
 
263
  /**
268
  $screen = get_current_screen();
269
  return;
270
 
271
+ $screen->add_help_tab(array(
272
  'id' => 'under-construction',
273
+ 'title' => __('Under Construction', 'wp-external-links'),
274
+ 'callback' => $this->get_callback('show_help_tab'),
275
+ ));
276
+ $screen->add_help_tab(array(
277
  'id' => 'data-attributes',
278
+ 'title' => __('Data Attributes', 'wp-external-links'),
279
+ 'callback' => $this->get_callback('show_help_tab'),
280
+ ));
281
  }
282
 
283
  /**
284
  * @param WP_Screen $screen
285
  * @param array $args
286
  */
287
+ protected function show_help_tab($screen, array $args)
288
  {
289
+ $template_file = WPEL_Plugin::get_plugin_dir('/templates/settings-page/help-tabs/' . $args['id'] . '.php');
290
+ $this->show_template($template_file);
291
  }
 
292
  }
 
 
includes/class-wpel-front.php CHANGED
@@ -58,6 +58,8 @@ final class WPEL_Front extends WPRun_Base_1x0x0
58
  add_filter( $hook, $this->get_callback( 'scan' ), 10000000000 );
59
  }
60
  }
 
 
61
  }
62
 
63
 
@@ -102,6 +104,18 @@ final class WPEL_Front extends WPRun_Base_1x0x0
102
  if ( $this->opt( 'icon_type', 'external-links' ) || $this->opt( 'icon_type', 'internal-links' ) ) {
103
  wp_enqueue_style( 'wpel-style' );
104
  }
 
 
 
 
 
 
 
 
 
 
 
 
105
  }
106
 
107
  /**
58
  add_filter( $hook, $this->get_callback( 'scan' ), 10000000000 );
59
  }
60
  }
61
+
62
+
63
  }
64
 
65
 
104
  if ( $this->opt( 'icon_type', 'external-links' ) || $this->opt( 'icon_type', 'internal-links' ) ) {
105
  wp_enqueue_style( 'wpel-style' );
106
  }
107
+
108
+ wp_register_script(
109
+ 'wpel-link-highlighter',
110
+ plugins_url('/public/js/wpel-link-highlighter.js', WPEL_Plugin::get_plugin_file()),
111
+ array('jquery'),
112
+ false,
113
+ true
114
+ );
115
+
116
+ if(isset($_GET['wpel-link-highlight'])){
117
+ wp_enqueue_script( 'wpel-link-highlighter' );
118
+ }
119
  }
120
 
121
  /**
includes/class-wpel-linkhero.php ADDED
@@ -0,0 +1,297 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class WPEL_LinkHero
5
+ *
6
+ * @package WPEL
7
+ * @category WordPress Plugin
8
+ * @version 2.3
9
+ * @link https://www.webfactoryltd.com/
10
+ * @license Dual licensed under the MIT and GPLv2+ licenses
11
+ */
12
+ final class WPEL_LinkHero extends FWP_Plugin_Base_1x0x0
13
+ {
14
+ /**
15
+ * Initialize plugin
16
+ * @param string $plugin_file
17
+ * @param string $plugin_dir
18
+ */
19
+ public $linkhero;
20
+ public $linkhero_api = 'http://api-beta.linkhero.com';
21
+ public static $lh_url = 'https://linkhero.com/wpel/subscribe.php';
22
+
23
+ protected function init($plugin_file, $plugin_dir)
24
+ {
25
+ parent::init($plugin_file, $plugin_dir);
26
+ add_action('wp_ajax_wpel_run_tool', array($this, 'ajax_tool'));
27
+ add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'));
28
+ $this->linkhero = get_option('wpel-linkhero', array('checker' => array(), 'enabled' => false));
29
+ }
30
+
31
+ static function is_localhost()
32
+ {
33
+ $whitelist = array('127.0.0.1', '::1');
34
+ if (in_array($_SERVER['REMOTE_ADDR'], $whitelist)) {
35
+ return true;
36
+ }
37
+ return false;
38
+ }
39
+
40
+ function is_plugin_page()
41
+ {
42
+ $current_screen = get_current_screen();
43
+
44
+ if (!empty($current_screen) && $current_screen->id == 'toplevel_page_wpel-settings-page') {
45
+ return true;
46
+ } else {
47
+ return false;
48
+ }
49
+ } // is_plugin_page
50
+
51
+ function admin_enqueue_scripts()
52
+ {
53
+ if (!$this->is_plugin_page()) {
54
+ return;
55
+ }
56
+
57
+ $plugin_version = get_option('wpel-version');
58
+
59
+ wp_enqueue_style(
60
+ 'wpel-datatables-style',
61
+ plugins_url('/public/css/jquery.dataTables.min.css', WPEL_Plugin::get_plugin_file()),
62
+ array(),
63
+ $plugin_version
64
+ );
65
+
66
+ wp_enqueue_script(
67
+ 'wpel-datatables-script',
68
+ plugins_url('/public/js/jquery.dataTables.min.js', WPEL_Plugin::get_plugin_file()),
69
+ array('jquery'),
70
+ $plugin_version,
71
+ true
72
+ );
73
+ }
74
+
75
+ function get_sitemap_url()
76
+ {
77
+ return home_url('/sitemap.xml');
78
+ }
79
+
80
+ function lh_request_scan()
81
+ {
82
+ $sitemap_url = $this->get_sitemap_url();
83
+
84
+ if ($sitemap_url !== false) {
85
+ $request = array(
86
+ 'sitemap' => $sitemap_url
87
+ );
88
+
89
+ $res = wp_remote_post(
90
+ $this->linkhero_api . '/wpel/add/check_urls',
91
+ array(
92
+ 'sslverify' => false,
93
+ 'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
94
+ 'data_format' => 'body',
95
+ 'body' => json_encode($request),
96
+ 'timeout' => 15
97
+ )
98
+ );
99
+
100
+ if (!is_wp_error($res)) {
101
+ $res = wp_remote_retrieve_body($res);
102
+ $res = json_decode($res);
103
+
104
+ //TODO: Returns as object
105
+ if (!empty($res->success) && $res->success == true && isset($res->result->job_id)) {
106
+ $this->linkhero['checker']['lastscan'] = time();
107
+ $this->linkhero['checker']['status'] = 'pending';
108
+ $this->linkhero['checker']['limit'] = 0;
109
+ $this->linkhero['checker']['total_pages'] = 0;
110
+ $this->linkhero['checker']['job_id'] = $res->result->job_id;
111
+
112
+ update_option('wpel-linkhero', $this->linkhero);
113
+ return true;
114
+ } else {
115
+ //TODO: Handle error
116
+ return new WP_Error(1, 'An error occured: ' . $res->result);
117
+ }
118
+ } else {
119
+ //TODO: Handle error
120
+ return $res;
121
+ }
122
+ } else {
123
+ return new WP_Error(1, 'No sitemap found for your website');
124
+ }
125
+ }
126
+
127
+ function lh_get_results()
128
+ {
129
+ $request['job_id'] = $this->linkhero['checker']['job_id'];
130
+
131
+ $res = wp_remote_post(
132
+ $this->linkhero_api . '/wpel/get/check_urls',
133
+ array(
134
+ 'sslverify' => false,
135
+ 'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
136
+ 'data_format' => 'body',
137
+ 'body' => json_encode($request),
138
+ 'timeout' => 15
139
+ )
140
+ );
141
+
142
+ if (!is_wp_error($res)) {
143
+ $res = wp_remote_retrieve_body($res);
144
+ $res = json_decode($res, true);
145
+
146
+ if (!empty($res['success']) && $res['success'] == true) {
147
+ $this->linkhero['checker']['results'] = $res['result'];
148
+ $this->linkhero['checker']['limit'] = array_key_exists('limit', $res) && (int)$res['limit'] > 0 ? (int)$res['limit'] : 0;
149
+ $this->linkhero['checker']['total_pages'] = array_key_exists('total_pages', $res) && (int)$res['total_pages'] > 0 ? (int)$res['total_pages'] : 0;
150
+ $pending_pages = false;
151
+ foreach ($this->linkhero['checker']['results'] as $page_url => $page) {
152
+ if (!is_array($page) || $page['status'] != 'finished') {
153
+ $pending_pages = true;
154
+ break;
155
+ }
156
+
157
+ foreach ($page['hrefs'] as $href_url => $href) {
158
+ if (!array_key_exists('scrape_status', $href) || ($href['scrape_status'] != 'finished' && $href['scrape_status'] != 'error')) {
159
+ $this->linkhero['checker']['results'][$page_url]['status'] = 'pending';
160
+ $pending_pages = true;
161
+ break;
162
+ }
163
+ }
164
+ }
165
+
166
+ if (array_key_exists('results', $this->linkhero['checker']) && count($this->linkhero['checker']['results']) > 0 && !$pending_pages) {
167
+ $this->linkhero['checker']['status'] = 'finished';
168
+ }
169
+ update_option('wpel-linkhero', $this->linkhero);
170
+ } else {
171
+ //TODO: Handle error
172
+ return new WP_Error(1, 'An error occured: ' . $res->result);
173
+ }
174
+ } else {
175
+ //TODO: Handle error
176
+ return $res;
177
+ }
178
+ }
179
+
180
+ function ajax_tool()
181
+ {
182
+
183
+ switch ($_REQUEST['tool']) {
184
+ case 'check_links':
185
+ $this->linkhero['enabled'] = true;
186
+
187
+ if (isset($_REQUEST['force']) && $_REQUEST['force'] == 'true') {
188
+ $this->linkhero = array('checker' => array(), 'enabled' => false);
189
+ delete_option('wpel-linkhero-subscribed');
190
+ update_option('wpel-linkhero', $this->linkhero);
191
+ wp_send_json_success();
192
+ }
193
+
194
+ if (empty($this->linkhero['checker']) || $this->linkhero['checker'] == false || $this->linkhero['checker']['lastscan'] < (time() - 60 * 60 * 24)) {
195
+ $res = $this->lh_request_scan();
196
+ if (is_wp_error($res)) {
197
+ wp_send_json_error($res->get_error_message());
198
+ } else {
199
+ wp_send_json_success(array('status' => 'pending'));
200
+ }
201
+ } else {
202
+ //Refresh
203
+ // TODO: Add some limit to how many times we check status
204
+ if (!isset($this->linkhero['checker']['job_id']) || empty($this->linkhero['checker']['job_id'])) {
205
+ wp_send_json_error('No job ID exists');
206
+ }
207
+ if ($this->linkhero['checker']['status'] == 'pending') {
208
+ $this->lh_get_results();
209
+ }
210
+ $results = [];
211
+
212
+ foreach ($this->linkhero['checker']['results'] as $page_url => $page) {
213
+ if(!is_array($page)){
214
+ $page = json_decode($page);
215
+ }
216
+ if(!is_array($page)){
217
+ $page = [];
218
+ }
219
+
220
+ $results[$page_url] = $page;
221
+
222
+ $results[$page_url]['links_total'] = 0;
223
+ $results[$page_url]['links_finished'] = 0;
224
+ $results[$page_url]['links_error'] = 0;
225
+
226
+ if (array_key_exists('hrefs', $page) && is_array($page['hrefs'])) {
227
+ $results[$page_url]['links_total'] = count($page['hrefs']);
228
+ $results[$page_url]['links_finished'] = 0;
229
+ $results[$page_url]['links_error'] = 0;
230
+ foreach ($page['hrefs'] as $link_url => $url_result) {
231
+ if (array_key_exists('scrape_status', $url_result) && $url_result['scrape_status'] == 'finished') {
232
+ $results[$page_url]['links_finished']++;
233
+ } else if (array_key_exists('scrape_status', $url_result) && $url_result['scrape_status'] == 'error') {
234
+ $results[$page_url]['links_error']++;
235
+ }
236
+ }
237
+ }
238
+ }
239
+ wp_send_json_success(
240
+ array(
241
+ 'status' => $this->linkhero['checker']['status'],
242
+ 'pages' => $results,
243
+ 'limit' => $this->linkhero['checker']['limit'] > 0 ? $this->linkhero['checker']['limit'] : 0,
244
+ 'total_pages' => $this->linkhero['checker']['total_pages'] > 0 ? $this->linkhero['checker']['total_pages'] : 0
245
+ )
246
+ );
247
+ }
248
+ break;
249
+ case 'link_details':
250
+ $page = $_REQUEST['link'];
251
+ $results = [];
252
+ if (array_key_exists($page, $this->linkhero['checker']['results'])) {
253
+ foreach ($this->linkhero['checker']['results'][$page]['hrefs'] as $href => $details) {
254
+ $redirects = '';
255
+ if (array_key_exists('redirects', $details) && count($details['redirects']) > 0) {
256
+ foreach ($details['redirects'] as $redirect) {
257
+ $redirects .= '<span class="lh-redirect"><span>' . $redirect['status'] . '</span>' . $redirect['url'] . '</span>';
258
+ }
259
+ } else {
260
+ $redirects = '<i>not redirected</i>';
261
+ }
262
+
263
+ if (array_key_exists('target', $details) && !empty($details['target'])) {
264
+ $target = $details['target'];
265
+ } else {
266
+ $target = '_self';
267
+ }
268
+
269
+ $results[] = [
270
+ ($details['scrape_status'] == 'error' ? '<span title="' . $details['error'] . '" class="wpel_bad dashicons dashicons-editor-unlink"></span><span style="display:none">0</span>' : '<span class="wpel_good dashicons dashicons-admin-links"></span><span style="display:none">1</span>'),
271
+ '<div class="dt-lh-title">' .
272
+ $details['text'] . '<br />' .
273
+ '<a href="' . $details['href'] . '" target="_blank">' . $details['href'] . '</a>' .
274
+ '<a target="_blank" class="wpel-link-locator" href="' . $page . '?wpel-link-highlight=' . urlencode($details['href']) . '" title="Locate link on page"><span class="dashicons dashicons-pressthis"></span></a><br />' .
275
+ '</div>',
276
+ isset($details['title'])?$details['title']:'',
277
+ isset($details['type'])?$details['type']:'',
278
+ isset($details['rel']) && strlen($details['rel']) > 0 ? $details['rel'] : '<i>none</i>',
279
+ $target,
280
+ $redirects,
281
+ ];
282
+ }
283
+ }
284
+ echo json_encode(['data' => $results]);
285
+ break;
286
+ case 'subscribed':
287
+ update_option('wpel-linkhero-subscribed', true);
288
+ break;
289
+ default:
290
+ wp_send_json_error('Unknown action');
291
+ break;
292
+ }
293
+ die();
294
+ }
295
+ }
296
+
297
+ /*?>*/
includes/class-wpel-plugin.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Class WPEL_Plugin
4
  *
@@ -16,10 +17,9 @@ final class WPEL_Plugin extends FWP_Plugin_Base_1x0x0
16
  * @param string $plugin_file
17
  * @param string $plugin_dir
18
  */
19
- protected function init( $plugin_file, $plugin_dir )
20
  {
21
- parent::init( $plugin_file, $plugin_dir );
22
-
23
  $this->create_components();
24
  }
25
 
@@ -31,29 +31,26 @@ final class WPEL_Plugin extends FWP_Plugin_Base_1x0x0
31
  WPEL_Register_Scripts::create();
32
 
33
  // network admin page
34
- $network_page = WPEL_Network_Page::create( array(
35
  'network-settings' => WPEL_Network_Fields::create(),
36
  'network-admin-settings' => WPEL_Network_Admin_Fields::create(),
37
- ) );
38
 
39
  // admin settings page
40
- $settings_page = WPEL_Settings_Page::create( $network_page, array(
41
  'external-links' => WPEL_External_Link_Fields::create(),
42
  'internal-links' => WPEL_Internal_Link_Fields::create(),
43
  'excluded-links' => WPEL_Excluded_Link_Fields::create(),
44
  'admin' => WPEL_Admin_Fields::create(),
45
  'exceptions' => WPEL_Exceptions_Fields::create(),
46
- ) );
47
 
48
  // front site
49
- if ( ! is_admin() ) {
50
- WPEL_Front::create( $settings_page );
51
  }
52
 
53
  // update procedures
54
  WPEL_Update::create();
55
  }
56
-
57
  }
58
-
59
- /*?>*/
1
  <?php
2
+
3
  /**
4
  * Class WPEL_Plugin
5
  *
17
  * @param string $plugin_file
18
  * @param string $plugin_dir
19
  */
20
+ protected function init($plugin_file, $plugin_dir)
21
  {
22
+ parent::init($plugin_file, $plugin_dir);
 
23
  $this->create_components();
24
  }
25
 
31
  WPEL_Register_Scripts::create();
32
 
33
  // network admin page
34
+ $network_page = WPEL_Network_Page::create(array(
35
  'network-settings' => WPEL_Network_Fields::create(),
36
  'network-admin-settings' => WPEL_Network_Admin_Fields::create(),
37
+ ));
38
 
39
  // admin settings page
40
+ $settings_page = WPEL_Settings_Page::create($network_page, array(
41
  'external-links' => WPEL_External_Link_Fields::create(),
42
  'internal-links' => WPEL_Internal_Link_Fields::create(),
43
  'excluded-links' => WPEL_Excluded_Link_Fields::create(),
44
  'admin' => WPEL_Admin_Fields::create(),
45
  'exceptions' => WPEL_Exceptions_Fields::create(),
46
+ ));
47
 
48
  // front site
49
+ if (!is_admin()) {
50
+ WPEL_Front::create($settings_page);
51
  }
52
 
53
  // update procedures
54
  WPEL_Update::create();
55
  }
 
56
  }
 
 
includes/class-wpel-register-scripts.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Class WPEL_Register_Scripts
4
  *
@@ -32,50 +33,67 @@ final class WPEL_Register_Scripts extends WPRun_Base_1x0x0
32
  */
33
  protected function register_scripts()
34
  {
35
- $plugin_version = get_option( 'wpel-version' );
36
 
37
  // set style font awesome icons
38
  wp_register_style(
39
- 'font-awesome'
40
- , 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'
41
- , array()
42
- , $plugin_version
43
  );
44
 
45
  // front style
46
  wp_register_style(
47
- 'wpel-style'
48
- , plugins_url( '/public/css/wpel.css', WPEL_Plugin::get_plugin_file() )
49
- , array()
50
- , $plugin_version
51
  );
52
 
53
  // set admin style
54
  wp_register_style(
55
- 'wpel-admin-style'
56
- , plugins_url( '/public/css/wpel-admin.css', WPEL_Plugin::get_plugin_file() )
57
- , array()
58
- , $plugin_version
59
  );
60
 
61
  // set admin global style
62
  wp_register_style(
63
- 'wpel-admin-global-style'
64
- , plugins_url( '/public/css/wpel-admin-global.css', WPEL_Plugin::get_plugin_file() )
65
- , array()
66
- , $plugin_version
 
 
 
 
 
 
 
 
 
 
67
  );
68
 
 
 
 
 
 
 
69
  // set wpel admin script
70
  wp_register_script(
71
- 'wpel-admin-script'
72
- , plugins_url( '/public/js/wpel-admin.js', WPEL_Plugin::get_plugin_file() )
73
- , array( 'jquery' )
74
- , $plugin_version
75
- , true
76
  );
77
- }
78
 
 
 
79
  }
80
 
81
  /*?>*/
1
  <?php
2
+
3
  /**
4
  * Class WPEL_Register_Scripts
5
  *
33
  */
34
  protected function register_scripts()
35
  {
36
+ $plugin_version = get_option('wpel-version');
37
 
38
  // set style font awesome icons
39
  wp_register_style(
40
+ 'font-awesome',
41
+ 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css',
42
+ array(),
43
+ $plugin_version
44
  );
45
 
46
  // front style
47
  wp_register_style(
48
+ 'wpel-style',
49
+ plugins_url('/public/css/wpel.css', WPEL_Plugin::get_plugin_file()),
50
+ array(),
51
+ $plugin_version
52
  );
53
 
54
  // set admin style
55
  wp_register_style(
56
+ 'wpel-admin-style',
57
+ plugins_url('/public/css/wpel-admin.css', WPEL_Plugin::get_plugin_file()),
58
+ array(),
59
+ $plugin_version
60
  );
61
 
62
  // set admin global style
63
  wp_register_style(
64
+ 'wpel-admin-global-style',
65
+ plugins_url('/public/css/wpel-admin-global.css', WPEL_Plugin::get_plugin_file()),
66
+ array(),
67
+ $plugin_version
68
+ );
69
+
70
+ $linkhero = get_option('wpel-linkhero', array('checker' => array(), 'enabled' => false));
71
+ if(!isset($linkhero['enabled'])){
72
+ $linkhero['enabled'] = false;
73
+ }
74
+ $wpel_js = array(
75
+ 'nonce_ajax' => wp_create_nonce('wpel_run_tool'),
76
+ 'loader' => admin_url('/images/spinner.gif'),
77
+ 'link_checking_enabled' => false
78
  );
79
 
80
+ $wpel_js['lh_url'] = WPEL_LinkHero::$lh_url;
81
+
82
+ if(!WPEL_LinkHero::is_localhost()){
83
+ $wpel_js['link_checking_enabled'] = $linkhero['enabled'];
84
+ }
85
+
86
  // set wpel admin script
87
  wp_register_script(
88
+ 'wpel-admin-script',
89
+ plugins_url('/public/js/wpel-admin.js', WPEL_Plugin::get_plugin_file()),
90
+ array('jquery'),
91
+ $plugin_version,
92
+ true
93
  );
 
94
 
95
+ wp_localize_script('wpel-admin-script', 'wpel', $wpel_js);
96
+ }
97
  }
98
 
99
  /*?>*/
libs/fwp/class-fwp-debug.php CHANGED
@@ -65,8 +65,6 @@ class FWP_Debug_1x0x0 extends WPRun_Base_1x0x0
65
  }
66
 
67
  $content .= var_export( $entry, true );
68
-
69
- error_log( $content );
70
  }
71
 
72
  /**
65
  }
66
 
67
  $content .= var_export( $entry, true );
 
 
68
  }
69
 
70
  /**
libs/fwp/class-fwp-html-fields.php CHANGED
@@ -132,13 +132,13 @@ class FWP_HTML_Fields_1x0x0
132
  >';
133
  }
134
 
135
- echo '<input type="checkbox"
136
  id="' . $this->get_field_id( $key ) . '"
137
  name="' . $this->get_field_name( $key ) . '"
138
  value="' . esc_attr( $checked_value ) . '"
139
  ' . $this->get_checked_attr( $key, $checked_value ) . '
140
  ' . $this->get_html_atts( $atts ) . '
141
- >';
142
  }
143
 
144
  /**
@@ -167,13 +167,13 @@ class FWP_HTML_Fields_1x0x0
167
  {
168
  $id = $this->get_field_id( $key ) . '-' . sanitize_key( $checked_value );
169
 
170
- echo '<input type="radio"
171
  id="' . $id . '"
172
  name="' . $this->get_field_name( $key ) . '"
173
  value="' . esc_attr( $checked_value ) . '"
174
  ' . $this->get_checked_attr( $key, $checked_value ) . '
175
  ' . $this->get_html_atts( $atts ) . '
176
- >';
177
  }
178
 
179
  /**
132
  >';
133
  }
134
 
135
+ echo '<span class="checkbox-container"><input type="checkbox"
136
  id="' . $this->get_field_id( $key ) . '"
137
  name="' . $this->get_field_name( $key ) . '"
138
  value="' . esc_attr( $checked_value ) . '"
139
  ' . $this->get_checked_attr( $key, $checked_value ) . '
140
  ' . $this->get_html_atts( $atts ) . '
141
+ ><span class="checkmark"></span></span>';
142
  }
143
 
144
  /**
167
  {
168
  $id = $this->get_field_id( $key ) . '-' . sanitize_key( $checked_value );
169
 
170
+ echo '<span class="radio-container"><input type="radio"
171
  id="' . $id . '"
172
  name="' . $this->get_field_name( $key ) . '"
173
  value="' . esc_attr( $checked_value ) . '"
174
  ' . $this->get_checked_attr( $key, $checked_value ) . '
175
  ' . $this->get_html_atts( $atts ) . '
176
+ ><span class="radio"></span></span>';
177
  }
178
 
179
  /**
libs/fwp/component-bases/class-fwp-settings-section-base.php CHANGED
@@ -232,6 +232,7 @@ abstract class FWP_Settings_Section_Base_1x0x0 extends WPRun_Base_1x0x0
232
  $label = isset( $field_settings[ 'label' ] ) ? $field_settings[ 'label' ] : '';
233
  $class = isset( $field_settings[ 'class' ] ) ? $field_settings[ 'class' ] : '';
234
 
 
235
  add_settings_field(
236
  $key
237
  , $label
@@ -240,7 +241,7 @@ abstract class FWP_Settings_Section_Base_1x0x0 extends WPRun_Base_1x0x0
240
  , $this->get_setting( 'section_id' )
241
  , array(
242
  'key' => $key,
243
- 'label_for' => $this->html_fields->get_field_id( $key ),
244
  'class' => $class,
245
  )
246
  );
232
  $label = isset( $field_settings[ 'label' ] ) ? $field_settings[ 'label' ] : '';
233
  $class = isset( $field_settings[ 'class' ] ) ? $field_settings[ 'class' ] : '';
234
 
235
+ $label_for_exclude = array('wpel-external-link-settings-rel_noopener', 'wpel-internal-link-settings-rel_noopener', 'wpel-excluded-link-settings-rel_noopener');
236
  add_settings_field(
237
  $key
238
  , $label
241
  , $this->get_setting( 'section_id' )
242
  , array(
243
  'key' => $key,
244
+ 'label_for' => !in_array($this->html_fields->get_field_id( $key ), $label_for_exclude)?$this->html_fields->get_field_id( $key ):'',
245
  'class' => $class,
246
  )
247
  );
public/css/jquery.dataTables.min.css ADDED
@@ -0,0 +1 @@
 
1
+ table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;*cursor:hand;background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png") !important}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png") !important}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#b0bed9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_length select{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;padding:4px}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;margin-left:3px}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, white 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, white 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, white 0%, #dcdcdc 100%);background:-o-linear-gradient(top, white 0%, #dcdcdc 100%);background:linear-gradient(to bottom, white 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));background:-webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);background:-moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);background:-ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);background:-o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);background:linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}
public/css/wpel-admin.css CHANGED
@@ -2,68 +2,183 @@
2
  * WP External Links Plugin
3
  * Admin Style
4
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
6
  .wpel-no-label,
7
  .wpel-no-label th,
8
  .wpel-no-label td {
9
- padding-top: 0;
10
  }
11
  .wpel-no-label th:after {
12
- content: '\00a0';
13
  }
14
 
15
  .wpel-hidden {
16
- display: none;
17
  }
18
 
 
 
 
 
19
  /**
20
- * Tabs
21
  */
22
 
23
  .wpel-settings-page .nav-tab i,
24
  .wpel-network-page .nav-tab i {
25
- margin-right: 5px;
26
  }
27
 
28
  .wpel-settings-page .nav-tab-support,
29
  .wpel-network-page .nav-tab-support {
30
- float: right;
31
  }
32
 
33
  .wpel-settings-page form,
34
  .wpel-network-page form {
35
- position: relative;
36
  }
37
 
38
  .js-wpel-apply-child td {
39
- padding-left: 30px;
40
  }
41
 
42
  .wpel-icon-type-image-column {
43
- min-width: 10em;
44
- float: left;
45
  }
46
  .wpel-icon-type-image-column:after {
47
- clear: both;
48
  }
49
 
50
  ::-webkit-input-placeholder {
51
- color: #ccc;
52
- font-style: italic;
53
  }
54
- :-moz-placeholder { /* Firefox 18- */
55
- color: #ccc;
56
- font-style: italic;
 
57
  }
58
- ::-moz-placeholder { /* Firefox 19+ */
59
- color: #ccc;
60
- font-style: italic;
 
61
  }
62
  :-ms-input-placeholder {
63
- color: #ccc;
64
- font-style: italic;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
66
 
 
 
 
 
 
 
 
 
 
 
 
67
 
68
  /**
69
  * Background Icon
@@ -71,50 +186,535 @@
71
 
72
  .wpel-settings-page form:before,
73
  .wpel-network-page form:before {
74
- font-family: FontAwesome;
75
- opacity: 0.2;
76
- color: #aaa;
77
- font-size: 200pt;
78
- position: absolute;
79
- top: 140px;
80
- right: 40px;
81
- z-index: -1;
 
 
 
 
82
  }
83
 
84
- .wpel-settings-page-external-links form:before {
85
- content: "\f14c";
 
 
 
 
 
 
86
  }
87
- .wpel-settings-page-internal-links form:before {
88
- content: "\f0c1";
 
89
  }
90
- .wpel-settings-page-excluded-links form:before {
91
- content: "\f14d";
 
92
  }
93
- .wpel-settings-page-exceptions form:before {
94
- content: "\f009";
 
 
 
95
  }
96
- .wpel-settings-page-admin form:before {
97
- content: "\f085";
 
 
98
  }
99
- .wpel-settings-page-support form:before {
100
- content: "\f128";
 
101
  }
102
 
103
- .wpel-network-page-network-settings form:before {
104
- content: "\f0e8";
105
  }
106
- .wpel-network-page-network-admin-settings form:before {
107
- content: "\f085";
 
108
  }
109
- .wpel-network-page-support form:before {
110
- content: "\f128";
 
111
  }
112
 
113
- .wrap h2.nav-tab-wrapper {
114
- padding-top: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  }
116
 
117
- #rating-notice {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  display: inline-block;
119
- padding: 15px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  }
2
  * WP External Links Plugin
3
  * Admin Style
4
  */
5
+ .toplevel_page_wpel-settings-page #wpcontent {
6
+ font-family: "Poppins", sans-serif;
7
+ font-weight: 400;
8
+ color: #1d2328;
9
+ margin-bottom: 30px;
10
+ }
11
+
12
+ .toplevel_page_wpel-settings-page .wrap {
13
+ margin: 0px;
14
+ padding: 0px;
15
+ }
16
+
17
+ .wpel-body-wrap {
18
+ background-color: #fff;
19
+ padding: 40px 60px;
20
+ max-width: 1200px;
21
+ width: 100%;
22
+ margin: 0 auto;
23
+ box-sizing: border-box;
24
+ }
25
+
26
+ .toplevel_page_wpel-settings-page #wpcontent {
27
+ margin-left: 140px;
28
+ }
29
+
30
+ .toplevel_page_wpel-settings-page #wpfooter {
31
+ background: #fff;
32
+ padding: 24px 20px;
33
+ line-height: 20px;
34
+ font-weight: 400;
35
+ }
36
+
37
+ .wpel-body-wrap form h2{
38
+ display: none;
39
+ }
40
+
41
+ #wpfooter a {
42
+ text-decoration: none;
43
+ }
44
+
45
+ #wpfooter span {
46
+ color: #ffb900;
47
+ }
48
+
49
+ .nav-tab .dashicons {
50
+ color: #31a3d9;
51
+ font-size: 18px;
52
+ margin-right: 4px;
53
+ line-height: 24px;
54
+ }
55
+
56
+ .toplevel_page_wpel-settings-page .wrap .wpel-logo-wrapper {
57
+ background: #fff;
58
+ padding: 18px 20px 14px;
59
+ line-height: 20px;
60
+ margin-bottom: 10px;
61
+ }
62
+
63
+ .toplevel_page_wpel-settings-page #footer-thankyou {
64
+ font-style: normal;
65
+ }
66
+
67
+ .toplevel_page_wpel-settings-page .wrap h1.wpel-logo {
68
+ width: 100%;
69
+ max-width: 1200px;
70
+ margin: 0 auto;
71
+ padding: 0;
72
+ line-height: 20px;
73
+ }
74
 
75
  .wpel-no-label,
76
  .wpel-no-label th,
77
  .wpel-no-label td {
78
+ padding-top: 0;
79
  }
80
  .wpel-no-label th:after {
81
+ content: "\00a0";
82
  }
83
 
84
  .wpel-hidden {
85
+ display: none;
86
  }
87
 
88
+ .toplevel_page_wpel-settings-page table.dataTable thead th,
89
+ .toplevel_page_wpel-settings-page table.dataTable thead td{
90
+ padding: 10px 8px;
91
+ }
92
  /**
93
+ * Tabs
94
  */
95
 
96
  .wpel-settings-page .nav-tab i,
97
  .wpel-network-page .nav-tab i {
98
+ margin-right: 5px;
99
  }
100
 
101
  .wpel-settings-page .nav-tab-support,
102
  .wpel-network-page .nav-tab-support {
103
+ float: right;
104
  }
105
 
106
  .wpel-settings-page form,
107
  .wpel-network-page form {
108
+ position: relative;
109
  }
110
 
111
  .js-wpel-apply-child td {
112
+ padding-left: 30px;
113
  }
114
 
115
  .wpel-icon-type-image-column {
116
+ min-width: 10em;
117
+ float: left;
118
  }
119
  .wpel-icon-type-image-column:after {
120
+ clear: both;
121
  }
122
 
123
  ::-webkit-input-placeholder {
124
+ color: #ccc;
125
+ font-style: italic;
126
  }
127
+ :-moz-placeholder {
128
+ /* Firefox 18- */
129
+ color: #ccc;
130
+ font-style: italic;
131
  }
132
+ ::-moz-placeholder {
133
+ /* Firefox 19+ */
134
+ color: #ccc;
135
+ font-style: italic;
136
  }
137
  :-ms-input-placeholder {
138
+ color: #ccc;
139
+ font-style: italic;
140
+ }
141
+
142
+ .nav-tab,
143
+ .nav-tab:focus,
144
+ .nav-tab-active,
145
+ .nav-tab-active:focus,
146
+ .nav-tab-active:focus:active {
147
+ background: none;
148
+ border: none;
149
+ color: #1d2328;
150
+ margin-right: 0;
151
+ margin-left: 0;
152
+ margin-bottom: -3px;
153
+ border-bottom: 3px solid #eef3f5;
154
+ font-weight: 400;
155
+ padding: 10px 20px;
156
+ outline: none;
157
+ box-shadow: none;
158
+ font-weight: 500;
159
+ }
160
+
161
+ .nav-tab-active,
162
+ .nav-tab-active:hover,
163
+ .nav-tab:hover {
164
+ color: #31a3d9;
165
+ border-bottom: 3px solid #31a3d9;
166
+ background: none;
167
+ margin-right: 0;
168
+ margin-left: 0;
169
  }
170
 
171
+ .nav-tab-wrapper,
172
+ .wrap h2.nav-tab-wrapper,
173
+ h1.nav-tab-wrapper {
174
+ border-bottom: 3px solid #eef3f5;
175
+ margin-bottom: 30px;
176
+ }
177
+
178
+ .wpel-body-wrap h2 {
179
+ font-size: 32px;
180
+ font-weight: 400;
181
+ }
182
 
183
  /**
184
  * Background Icon
186
 
187
  .wpel-settings-page form:before,
188
  .wpel-network-page form:before {
189
+ font-family: FontAwesome;
190
+ opacity: 0.2;
191
+ color: #aaa;
192
+ font-size: 200pt;
193
+ position: absolute;
194
+ top: 140px;
195
+ right: 40px;
196
+ z-index: -1;
197
+ }
198
+
199
+ .wrap h2.nav-tab-wrapper {
200
+ padding-top: 20px;
201
  }
202
 
203
+ #rating-notice, .notice {
204
+ display: block;
205
+ width: 1200px;
206
+ margin: 10px auto !important;
207
+ box-sizing: border-box;
208
+ border-right: none;
209
+ border-top: none;
210
+ border-bottom: none;
211
  }
212
+
213
+ #rating-notice{
214
+ padding: 15px;
215
  }
216
+
217
+ .lh-table-loading {
218
+ color: #ccc;
219
  }
220
+
221
+ .wpel-page-button {
222
+ background: #fff;
223
+ border: 1px solid #ccc;
224
+ padding: 10px;
225
  }
226
+
227
+ .wpel-page-button:hover {
228
+ background: #ececec;
229
+ cursor: pointer;
230
  }
231
+
232
+ .wpel-page-link {
233
+ color: #b2b2b2;
234
  }
235
 
236
+ .wpel-page-button .wpel-page-button-toggle:before {
237
+ content: "\f345";
238
  }
239
+
240
+ .wpel-page-button.open .wpel-page-button-toggle:before {
241
+ content: "\f347";
242
  }
243
+
244
+ .wpel_good {
245
+ color: rgb(46, 207, 87);
246
  }
247
 
248
+ .wpel_bad {
249
+ color: rgb(207, 46, 46);
250
+ }
251
+
252
+ .wpel-redirect-code {
253
+ color: rgb(213 95 235);
254
+ font-weight: bold;
255
+ }
256
+
257
+ #lh_results {
258
+ margin-top: 10px;
259
+ display: none;
260
+ border-spacing: 0 10px;
261
+ border-collapse: separate;
262
+ width: 100%;
263
+ }
264
+
265
+ #lh_results a {
266
+ text-decoration: none;
267
+ }
268
+
269
+ #lh_results tr td {
270
+ border-bottom: 1px solid #eef2f4;
271
+ border-top: 1px solid #eef2f4;
272
+ padding: 20px 10px;
273
+ }
274
+
275
+ #lh_results tr td:first-child {
276
+ border-left: 1px solid #eef2f4;
277
+ padding-left: 20px;
278
+ border-top-left-radius: 4px;
279
+ border-bottom-left-radius: 4px;
280
+ }
281
+
282
+ #lh_results tr td:last-child {
283
+ border-right: 1px solid #eef2f4;
284
+ padding-right: 20px;
285
+ border-top-right-radius: 4px;
286
+ border-bottom-right-radius: 4px;
287
+ }
288
+
289
+ #lh_results a .dashicons-external {
290
+ font-size: 16px;
291
+ line-height: 20px;
292
+ }
293
+
294
+ .wpel-page-details table {
295
+ margin-top: 6px;
296
+ }
297
+
298
+ .wpel-loader {
299
+ vertical-align: text-top;
300
+ margin-right: 4px;
301
+ opacity: 0.5;
302
+ }
303
+
304
+ .lh_results_loader {
305
+ width: 100%;
306
+ text-align: center;
307
+ }
308
+
309
+ #lh_details {
310
+ width: 100%;
311
+ height: 100%;
312
+ position: fixed;
313
+ display: none;
314
+ top: 0px;
315
+ left: 0px;
316
+ background: #fff;
317
+ z-index: 100051;
318
+ padding: 40px;
319
+ box-sizing: border-box;
320
+ }
321
+
322
+ #lh_pro{
323
+ display: none;
324
+ margin: 20px 0;
325
+ font-size: 20px;
326
+ text-align: center;
327
+ line-height: 28px;
328
+ }
329
+
330
+ #lh_pro_count{
331
+ color: #31a3d9;
332
+ }
333
+
334
+ #lh_details{
335
+ overflow:auto;
336
+ }
337
+
338
+ #lh_page_details tr td{
339
+ word-break: break-all;
340
+ }
341
+
342
+ .wpel-link-locator{
343
+ text-decoration: none;
344
+ }
345
+
346
+ .wpel-link-locator .dashicons{
347
+ vertical-align: bottom;
348
+ font-size: 18px;
349
+ }
350
+
351
+ .body_lh_details_open{
352
+ overflow: hidden;
353
+ }
354
+
355
+ .lh-close {
356
+ position: absolute;
357
+ right: 32px;
358
+ top: 32px;
359
+ width: 32px;
360
+ height: 32px;
361
+ opacity: 0.3;
362
+ }
363
+ .lh-close:hover {
364
+ opacity: 1;
365
+ }
366
+ .lh-close:before,
367
+ .lh-close:after {
368
+ position: absolute;
369
+ left: 15px;
370
+ content: " ";
371
+ height: 33px;
372
+ width: 2px;
373
+ background-color: #333;
374
+ }
375
+ .lh-close:before {
376
+ transform: rotate(45deg);
377
+ }
378
+ .lh-close:after {
379
+ transform: rotate(-45deg);
380
+ }
381
+
382
+ #lh_details_title {
383
+ font-size: 20px;
384
+ margin: 20px 0;
385
+ }
386
+
387
+ #lh_pro_subscribe{
388
+ margin-top: 10px;
389
+ }
390
+
391
+ #lh_page_details {
392
+ border: 1px solid #eef2f4;
393
  }
394
 
395
+ #lh_page_details .odd {
396
+ background-color: #eef2f4;
397
+ }
398
+
399
+ #lh_page_details tbody th,
400
+ table.dataTable tbody td {
401
+ padding: 20px 10px !important;
402
+ }
403
+
404
+ #lh_page_details thead th,
405
+ table.dataTable thead td {
406
+ border: none !important;
407
+ }
408
+
409
+ #lh_subscribe_email{
410
+ padding: 6px 10px;
411
+ }
412
+
413
+ #lh_subscribe_message{
414
+ width: 400px;
415
+ margin: 0 auto;
416
+ display: none;
417
+ text-align: center;
418
+ font-size: 12px;
419
+ font-weight: 400;
420
+ padding: 10px;
421
+ border-radius: 4px;
422
+ margin-top: 8px;
423
+ }
424
+
425
+ #lh_subscribe_button_loader {
426
+ width: 20px;
427
+ padding-top: 8px;
428
+ display: inline-block;
429
+ vertical-align: middle;
430
+ }
431
+
432
+ .lh-subscribe-good{
433
+ border: 1px solid #0d853b;
434
+ background: #ecfff8;
435
+ }
436
+
437
+ .lh-subscribe-bad{
438
+ border: 1px solid #ff2222;
439
+ background: #ffecec;
440
+ }
441
+
442
+ .dataTables_length {
443
+ display: none;
444
+ }
445
+
446
+ .wpel-logo {
447
+ width: 100%;
448
+ }
449
+
450
+
451
+
452
+ .toplevel_page_wpel-settings-page .checkbox-container,
453
+ .toplevel_page_wpel-settings-page .radio-container {
454
  display: inline-block;
455
+ position: relative;
456
+ padding-left: 15px;
457
+ margin-bottom: 12px;
458
+ cursor: pointer;
459
+ font-size: 22px;
460
+ -webkit-user-select: none;
461
+ -moz-user-select: none;
462
+ -ms-user-select: none;
463
+ user-select: none;
464
+ width: 20px;
465
+ height: 16px;
466
+ vertical-align: middle;
467
+ }
468
+
469
+ .toplevel_page_wpel-settings-page .checkbox-container input,
470
+ .toplevel_page_wpel-settings-page .radio-container input {
471
+ position: absolute;
472
+ opacity: 0;
473
+ cursor: pointer;
474
+ height: 0;
475
+ width: 0;
476
+ }
477
+
478
+ .toplevel_page_wpel-settings-page .checkmark {
479
+ position: absolute;
480
+ top: 0;
481
+ left: 0;
482
+ height: 25px;
483
+ width: 25px;
484
+ background-color: #eef3f5;
485
+ }
486
+
487
+ .toplevel_page_wpel-settings-page .checkbox-container:hover input ~ .checkmark,
488
+ .toplevel_page_wpel-settings-page .radio-container:hover input ~ .radio {
489
+ background-color: #ccc;
490
+ }
491
+
492
+ .toplevel_page_wpel-settings-page .checkbox-container input:checked ~ .checkmark,
493
+ .toplevel_page_wpel-settings-page .radio-container input:checked ~ .radio {
494
+ background-color: #31a3d9;
495
+ }
496
+
497
+ .toplevel_page_wpel-settings-page .checkmark:after,
498
+ .toplevel_page_wpel-settings-page .radio:after {
499
+ content: "";
500
+ position: absolute;
501
+ display: none;
502
+ }
503
+
504
+ .toplevel_page_wpel-settings-page .checkbox-container input:checked ~ .checkmark:after,
505
+ .toplevel_page_wpel-settings-page .radio-container input:checked ~ .radio:after {
506
+ display: block;
507
+ }
508
+
509
+ .toplevel_page_wpel-settings-page .checkbox-container .checkmark:after {
510
+ left: 9px;
511
+ top: 6px;
512
+ width: 4px;
513
+ height: 8px;
514
+ border: solid white;
515
+ border-width: 0 2px 2px 0;
516
+ -webkit-transform: rotate(45deg);
517
+ -ms-transform: rotate(45deg);
518
+ transform: rotate(45deg);
519
+ }
520
+
521
+ .toplevel_page_wpel-settings-page .radio {
522
+ position: absolute;
523
+ top: 0;
524
+ left: 0;
525
+ height: 25px;
526
+ width: 25px;
527
+ background-color: #eee;
528
+ border-radius: 50%;
529
+ }
530
+
531
+ .toplevel_page_wpel-settings-page .radio-container .radio:after {
532
+ top: 9px;
533
+ left: 9px;
534
+ width: 8px;
535
+ height: 8px;
536
+ border-radius: 50%;
537
+ background: white;
538
+ }
539
+
540
+ .toplevel_page_wpel-settings-page input[type="text"],
541
+ .toplevel_page_wpel-settings-page select {
542
+ background-color: #eef3f5;
543
+ padding: 10px;
544
+ border: none;
545
+ width: 100%;
546
+ max-width: 400px;
547
+ }
548
+
549
+ .toplevel_page_wpel-settings-page textarea {
550
+ background-color: #eef3f5;
551
+ padding: 10px;
552
+ border: none;
553
+ width: 100%;
554
+ }
555
+
556
+ .wp-core-ui .button-primary {
557
+ background: #31a3d9;
558
+ border-color: #31a3d9;
559
+ color: #fff;
560
+ text-decoration: none;
561
+ text-shadow: none;
562
+ padding: 6px 40px;
563
+ font-size: 12px;
564
+ font-weight: 300;
565
+ }
566
+
567
+ code,
568
+ kbd {
569
+ background-color: #eef3f5;
570
+ }
571
+
572
+ .lh-results-loader td{
573
+ text-align: center;
574
+ }
575
+
576
+ .lh-results-stats{
577
+ width:100px;
578
+ }
579
+ .lh-results-stats span{
580
+ display: block;
581
+ }
582
+ .lh-results-links-total{
583
+ color: #31a3d9;
584
+ }
585
+ .lh-results-links-finished{
586
+ color: #92c360;
587
+ }
588
+ .lh-results-links-error{
589
+ color: #ee0b0b;
590
+ }
591
+
592
+ .lh-search-wrapper{
593
+ position: relative;
594
+ display: none;
595
+ margin-top: 20px;
596
+ width: 400px;
597
+ }
598
+
599
+ #lh_page_details_filter input[type="search"]{
600
+ width: 400px;
601
+ background-color: #eef3f5;
602
+ border: none;
603
+ }
604
+
605
+ #lh_page_details_filter:after,
606
+ .lh-search-wrapper::after {
607
+ content: "\f179";
608
+ font-family: dashicons;
609
+ display: inline-block;
610
+ line-height: 1;
611
+ font-weight: 400;
612
+ font-style: normal;
613
+ text-decoration: inherit;
614
+ text-transform: none;
615
+ text-rendering: auto;
616
+ -webkit-font-smoothing: antialiased;
617
+ -moz-osx-font-smoothing: grayscale;
618
+ width: 20px;
619
+ height: 20px;
620
+ font-size: 28px;
621
+ vertical-align: top;
622
+ text-align: center;
623
+ transition: color .1s ease-in;
624
+ position: absolute;
625
+ top: 10px;
626
+ right: 15px;
627
+ color: #899aa7;
628
+ }
629
+
630
+ #lh_page_details_filter:after{
631
+ top:6px;
632
+ }
633
+
634
+ #lh_page_details_filter{
635
+ margin-bottom: 10px;
636
+ }
637
+
638
+ #lh_support p {
639
+ font-size: 14px;
640
+ margin-top: 20px;
641
+ }
642
+
643
+ .dataTables_wrapper .dataTables_paginate .paginate_button.current,
644
+ .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{
645
+ background: none !important;
646
+ border: none !important;
647
+ }
648
+
649
+ .toplevel_page_wpel-settings-page .dataTables_wrapper .dataTables_paginate .paginate_button:hover {
650
+ color: #368cd3 !important;
651
+ background: transparent;
652
+ border-color: transparent;
653
+ }
654
+
655
+ .lh-redirect {
656
+ display: block;
657
+ width: 230px;
658
+ padding: 4px 0;
659
+ }
660
+
661
+ .lh-redirect span {
662
+ color: #de9900;
663
+ padding-right: 4px;
664
+ }
665
+
666
+ #wpel-external-link-settings-icon_dashicon,
667
+ #wpel-external-link-settings-icon_fontawesome,
668
+ #wpel-internal-link-settings-icon_dashicon,
669
+ #wpel-internal-link-settings-icon_fontawesome{
670
+ font-size: 20px;
671
+ width: 80px;
672
+ padding: 4px 10px;
673
+ color: #1d2327;
674
+ }
675
+
676
+ .dt-lh-title{
677
+ max-width: 400px;
678
+ }
679
+
680
+ #lh-progress-bar-wrapper{
681
+ display: none;
682
+ width:100%;
683
+ margin-top: 20px;
684
+ background:#eef3f5;
685
+ border-radius: 4px;
686
+ }
687
+
688
+ #lh-progress-bar{
689
+ width:1%;
690
+ background-color: #31a3d9;
691
+ display: block;
692
+ height: 4px;
693
+ border-radius: 4px;
694
+ }
695
+
696
+ .notice-box-error {
697
+ max-width: 700px;
698
+ padding: 10px 10px 10px 20px;
699
+ border: thin solid red;
700
+ border-left-width: 5px;
701
+ margin-bottom: 30px;
702
+ font-size: 14px;
703
+ }
704
+
705
+ .notice-box-info {
706
+ max-width: 700px;
707
+ padding: 10px 10px 10px 20px;
708
+ border: thin solid #31a3d9;
709
+ border-left-width: 5px;
710
+ margin-bottom: 30px;
711
+ font-size: 14px;
712
+ }
713
+
714
+ .notice-box-error p, .notice-box-info p {
715
+ font-size: 14px;
716
+ }
717
+
718
+ #wpel-checker-consent p {
719
+ font-size: 14px;
720
  }
public/images/logo.png ADDED
Binary file
public/js/jquery.dataTables.min.js ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ Copyright 2008-2021 SpryMedia Ltd.
3
+
4
+ This source file is free software, available under the following license:
5
+ MIT license - http://datatables.net/license
6
+
7
+ This source file is distributed in the hope that it will be useful, but
8
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
9
+ or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
10
+
11
+ For details please refer to: http://www.datatables.net
12
+ DataTables 1.10.25
13
+ ©2008-2021 SpryMedia Ltd - datatables.net/license
14
+ */
15
+ var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(k,y,z){k instanceof String&&(k=String(k));for(var q=k.length,G=0;G<q;G++){var O=k[G];if(y.call(z,O,G,k))return{i:G,v:O}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;
16
+ $jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(k,y,z){if(k==Array.prototype||k==Object.prototype)return k;k[y]=z.value;return k};$jscomp.getGlobal=function(k){k=["object"==typeof globalThis&&globalThis,k,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var y=0;y<k.length;++y){var z=k[y];if(z&&z.Math==Math)return z}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
17
+ $jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(k,y){var z=$jscomp.propertyToPolyfillSymbol[y];if(null==z)return k[y];z=k[z];return void 0!==z?z:k[y]};
18
+ $jscomp.polyfill=function(k,y,z,q){y&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(k,y,z,q):$jscomp.polyfillUnisolated(k,y,z,q))};$jscomp.polyfillUnisolated=function(k,y,z,q){z=$jscomp.global;k=k.split(".");for(q=0;q<k.length-1;q++){var G=k[q];if(!(G in z))return;z=z[G]}k=k[k.length-1];q=z[k];y=y(q);y!=q&&null!=y&&$jscomp.defineProperty(z,k,{configurable:!0,writable:!0,value:y})};
19
+ $jscomp.polyfillIsolated=function(k,y,z,q){var G=k.split(".");k=1===G.length;q=G[0];q=!k&&q in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var O=0;O<G.length-1;O++){var ma=G[O];if(!(ma in q))return;q=q[ma]}G=G[G.length-1];z=$jscomp.IS_SYMBOL_NATIVE&&"es6"===z?q[G]:null;y=y(z);null!=y&&(k?$jscomp.defineProperty($jscomp.polyfills,G,{configurable:!0,writable:!0,value:y}):y!==z&&($jscomp.propertyToPolyfillSymbol[G]=$jscomp.IS_SYMBOL_NATIVE?$jscomp.global.Symbol(G):$jscomp.POLYFILL_PREFIX+G,
20
+ G=$jscomp.propertyToPolyfillSymbol[G],$jscomp.defineProperty(q,G,{configurable:!0,writable:!0,value:y})))};$jscomp.polyfill("Array.prototype.find",function(k){return k?k:function(y,z){return $jscomp.findInternal(this,y,z).v}},"es6","es3");
21
+ (function(k){"function"===typeof define&&define.amd?define(["jquery"],function(y){return k(y,window,document)}):"object"===typeof exports?module.exports=function(y,z){y||(y=window);z||(z="undefined"!==typeof window?require("jquery"):require("jquery")(y));return k(z,y,y.document)}:k(jQuery,window,document)})(function(k,y,z,q){function G(a){var b,c,d={};k.each(a,function(e,f){(b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" ")&&(c=e.replace(b[0],b[2].toLowerCase()),
22
+ d[c]=e,"o"===b[1]&&G(a[e]))});a._hungarianMap=d}function O(a,b,c){a._hungarianMap||G(a);var d;k.each(b,function(e,f){d=a._hungarianMap[e];d===q||!c&&b[d]!==q||("o"===d.charAt(0)?(b[d]||(b[d]={}),k.extend(!0,b[d],b[e]),O(a[d],b[d],c)):b[d]=b[e])})}function ma(a){var b=u.defaults.oLanguage,c=b.sDecimal;c&&Wa(c);if(a){var d=a.sZeroRecords;!a.sEmptyTable&&d&&"No data available in table"===b.sEmptyTable&&V(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&d&&"Loading..."===b.sLoadingRecords&&V(a,a,
23
+ "sZeroRecords","sLoadingRecords");a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&c!==a&&Wa(a)}}function zb(a){R(a,"ordering","bSort");R(a,"orderMulti","bSortMulti");R(a,"orderClasses","bSortClasses");R(a,"orderCellsTop","bSortCellsTop");R(a,"order","aaSorting");R(a,"orderFixed","aaSortingFixed");R(a,"paging","bPaginate");R(a,"pagingType","sPaginationType");R(a,"pageLength","iDisplayLength");R(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":
24
+ "");"boolean"===typeof a.scrollX&&(a.scrollX=a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&O(u.models.oSearch,a[b])}function Ab(a){R(a,"orderable","bSortable");R(a,"orderData","aDataSort");R(a,"orderSequence","asSorting");R(a,"orderDataType","sortDataType");var b=a.aDataSort;"number"!==typeof b||Array.isArray(b)||(a.aDataSort=[b])}function Bb(a){if(!u.__browser){var b={};u.__browser=b;var c=k("<div/>").css({position:"fixed",top:0,left:-1*k(y).scrollLeft(),height:1,
25
+ width:1,overflow:"hidden"}).append(k("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(k("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}k.extend(a.oBrowser,u.__browser);a.oScroll.iBarWidth=u.__browser.barWidth}
26
+ function Cb(a,b,c,d,e,f){var g=!1;if(c!==q){var h=c;g=!0}for(;d!==e;)a.hasOwnProperty(d)&&(h=g?b(h,a[d],d,a):a[d],g=!0,d+=f);return h}function Xa(a,b){var c=u.defaults.column,d=a.aoColumns.length;c=k.extend({},u.models.oColumn,c,{nTh:b?b:z.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=k.extend({},u.models.oSearch,c[d]);Ea(a,d,k(b).data())}function Ea(a,b,c){b=a.aoColumns[b];
27
+ var d=a.oClasses,e=k(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var f=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==q&&null!==c&&(Ab(c),O(u.defaults.column,c,!0),c.mDataProp===q||c.mData||(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),k.extend(b,c),V(b,c,"sWidth","sWidthOrig"),c.iDataSort!==q&&(b.aDataSort=[c.iDataSort]),V(b,c,"aDataSort"));var g=b.mData,h=ia(g),
28
+ l=b.mRender?ia(b.mRender):null;c=function(n){return"string"===typeof n&&-1!==n.indexOf("@")};b._bAttrSrc=k.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(n,m,p){var t=h(n,m,q,p);return l&&m?l(t,m,n,p):t};b.fnSetData=function(n,m,p){return da(g)(n,m,p)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==k.inArray("asc",b.asSorting);c=-1!==k.inArray("desc",b.asSorting);b.bSortable&&(a||c)?a&&!c?
29
+ (b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI):(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI="")}function ra(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ya(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;""===b.sY&&""===b.sX||Fa(a);H(a,null,"column-sizing",[a])}function sa(a,b){a=Ga(a,"bVisible");
30
+ return"number"===typeof a[b]?a[b]:null}function ta(a,b){a=Ga(a,"bVisible");b=k.inArray(b,a);return-1!==b?b:null}function na(a){var b=0;k.each(a.aoColumns,function(c,d){d.bVisible&&"none"!==k(d.nTh).css("display")&&b++});return b}function Ga(a,b){var c=[];k.map(a.aoColumns,function(d,e){d[b]&&c.push(e)});return c}function Za(a){var b=a.aoColumns,c=a.aoData,d=u.ext.type.detect,e,f,g;var h=0;for(e=b.length;h<e;h++){var l=b[h];var n=[];if(!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){var m=
31
+ 0;for(f=d.length;m<f;m++){var p=0;for(g=c.length;p<g;p++){n[p]===q&&(n[p]=S(a,p,h,"type"));var t=d[m](n[p],a);if(!t&&m!==d.length-1)break;if("html"===t&&!Z(n[p]))break}if(t){l.sType=t;break}}l.sType||(l.sType="string")}}}function Db(a,b,c,d){var e,f,g,h=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){var l=b[e];var n=l.targets!==q?l.targets:l.aTargets;Array.isArray(n)||(n=[n]);var m=0;for(f=n.length;m<f;m++)if("number"===typeof n[m]&&0<=n[m]){for(;h.length<=n[m];)Xa(a);d(n[m],l)}else if("number"===typeof n[m]&&
32
+ 0>n[m])d(h.length+n[m],l);else if("string"===typeof n[m]){var p=0;for(g=h.length;p<g;p++)("_all"==n[m]||k(h[p].nTh).hasClass(n[m]))&&d(p,l)}}if(c)for(e=0,a=c.length;e<a;e++)d(e,c[e])}function ea(a,b,c,d){var e=a.aoData.length,f=k.extend(!0,{},u.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,h=0,l=g.length;h<l;h++)g[h].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==q&&(a.aIds[b]=f);!c&&a.oFeatures.bDeferRender||$a(a,e,c,d);return e}function Ha(a,
33
+ b){var c;b instanceof k||(b=k(b));return b.map(function(d,e){c=ab(a,e);return ea(a,c.data,e,c.cells)})}function S(a,b,c,d){var e=a.iDraw,f=a.aoColumns[c],g=a.aoData[b]._aData,h=f.sDefaultContent,l=f.fnGetData(g,d,{settings:a,row:b,col:c});if(l===q)return a.iDrawError!=e&&null===h&&(ca(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),h;if((l===g||null===l)&&null!==h&&d!==q)l=h;else if("function"===typeof l)return l.call(g);
34
+ return null===l&&"display"==d?"":l}function Eb(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}function bb(a){return k.map(a.match(/(\\.|[^\.])+/g)||[""],function(b){return b.replace(/\\\./g,".")})}function ia(a){if(k.isPlainObject(a)){var b={};k.each(a,function(d,e){e&&(b[d]=ia(e))});return function(d,e,f,g){var h=b[e]||b._;return h!==q?h(d,e,f,g):d}}if(null===a)return function(d){return d};if("function"===typeof a)return function(d,e,f,g){return a(d,e,f,g)};if("string"!==
35
+ typeof a||-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(d,e){return d[a]};var c=function(d,e,f){if(""!==f){var g=bb(f);for(var h=0,l=g.length;h<l;h++){f=g[h].match(ua);var n=g[h].match(oa);if(f){g[h]=g[h].replace(ua,"");""!==g[h]&&(d=d[g[h]]);n=[];g.splice(0,h+1);g=g.join(".");if(Array.isArray(d))for(h=0,l=d.length;h<l;h++)n.push(c(d[h],e,g));d=f[0].substring(1,f[0].length-1);d=""===d?n:n.join(d);break}else if(n){g[h]=g[h].replace(oa,"");d=d[g[h]]();continue}if(null===
36
+ d||d[g[h]]===q)return q;d=d[g[h]]}}return d};return function(d,e){return c(d,e,a)}}function da(a){if(k.isPlainObject(a))return da(a._);if(null===a)return function(){};if("function"===typeof a)return function(c,d,e){a(c,"set",d,e)};if("string"!==typeof a||-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(c,d){c[a]=d};var b=function(c,d,e){e=bb(e);var f=e[e.length-1];for(var g,h,l=0,n=e.length-1;l<n;l++){if("__proto__"===e[l]||"constructor"===e[l])throw Error("Cannot set prototype values");
37
+ g=e[l].match(ua);h=e[l].match(oa);if(g){e[l]=e[l].replace(ua,"");c[e[l]]=[];f=e.slice();f.splice(0,l+1);g=f.join(".");if(Array.isArray(d))for(h=0,n=d.length;h<n;h++)f={},b(f,d[h],g),c[e[l]].push(f);else c[e[l]]=d;return}h&&(e[l]=e[l].replace(oa,""),c=c[e[l]](d));if(null===c[e[l]]||c[e[l]]===q)c[e[l]]={};c=c[e[l]]}if(f.match(oa))c[f.replace(oa,"")](d);else c[f.replace(ua,"")]=d};return function(c,d){return b(c,d,a)}}function cb(a){return T(a.aoData,"_aData")}function Ia(a){a.aoData.length=0;a.aiDisplayMaster.length=
38
+ 0;a.aiDisplay.length=0;a.aIds={}}function Ja(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===q&&a.splice(d,1)}function va(a,b,c,d){var e=a.aoData[b],f,g=function(l,n){for(;l.childNodes.length;)l.removeChild(l.firstChild);l.innerHTML=S(a,b,n,"display")};if("dom"!==c&&(c&&"auto"!==c||"dom"!==e.src)){var h=e.anCells;if(h)if(d!==q)g(h[d],d);else for(c=0,f=h.length;c<f;c++)g(h[c],c)}else e._aData=ab(a,e,d,d===q?q:e._aData).data;e._aSortData=null;e._aFilterData=null;g=
39
+ a.aoColumns;if(d!==q)g[d].sType=null;else{c=0;for(f=g.length;c<f;c++)g[c].sType=null;db(a,e)}}function ab(a,b,c,d){var e=[],f=b.firstChild,g,h=0,l,n=a.aoColumns,m=a._rowReadObject;d=d!==q?d:m?{}:[];var p=function(x,r){if("string"===typeof x){var A=x.indexOf("@");-1!==A&&(A=x.substring(A+1),da(x)(d,r.getAttribute(A)))}},t=function(x){if(c===q||c===h)g=n[h],l=x.innerHTML.trim(),g&&g._bAttrSrc?(da(g.mData._)(d,l),p(g.mData.sort,x),p(g.mData.type,x),p(g.mData.filter,x)):m?(g._setter||(g._setter=da(g.mData)),
40
+ g._setter(d,l)):d[h]=l;h++};if(f)for(;f;){var v=f.nodeName.toUpperCase();if("TD"==v||"TH"==v)t(f),e.push(f);f=f.nextSibling}else for(e=b.anCells,f=0,v=e.length;f<v;f++)t(e[f]);(b=b.firstChild?b:b.nTr)&&(b=b.getAttribute("id"))&&da(a.rowId)(d,b);return{data:d,cells:e}}function $a(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],h,l;if(null===e.nTr){var n=c||z.createElement("tr");e.nTr=n;e.anCells=g;n._DT_RowIndex=b;db(a,e);var m=0;for(h=a.aoColumns.length;m<h;m++){var p=a.aoColumns[m];e=(l=c?!1:!0)?z.createElement(p.sCellType):
41
+ d[m];e._DT_CellIndex={row:b,column:m};g.push(e);if(l||!(!p.mRender&&p.mData===m||k.isPlainObject(p.mData)&&p.mData._===m+".display"))e.innerHTML=S(a,b,m,"display");p.sClass&&(e.className+=" "+p.sClass);p.bVisible&&!c?n.appendChild(e):!p.bVisible&&c&&e.parentNode.removeChild(e);p.fnCreatedCell&&p.fnCreatedCell.call(a.oInstance,e,S(a,b,m),f,b,m)}H(a,"aoRowCreatedCallback",null,[n,f,b,g])}}function db(a,b){var c=b.nTr,d=b._aData;if(c){if(a=a.rowIdFn(d))c.id=a;d.DT_RowClass&&(a=d.DT_RowClass.split(" "),
42
+ b.__rowc=b.__rowc?Ka(b.__rowc.concat(a)):a,k(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&k(c).attr(d.DT_RowAttr);d.DT_RowData&&k(c).data(d.DT_RowData)}}function Fb(a){var b,c,d=a.nTHead,e=a.nTFoot,f=0===k("th, td",d).length,g=a.oClasses,h=a.aoColumns;f&&(c=k("<tr/>").appendTo(d));var l=0;for(b=h.length;l<b;l++){var n=h[l];var m=k(n.nTh).addClass(n.sClass);f&&m.appendTo(c);a.oFeatures.bSort&&(m.addClass(n.sSortingClass),!1!==n.bSortable&&(m.attr("tabindex",a.iTabIndex).attr("aria-controls",
43
+ a.sTableId),eb(a,n.nTh,l)));n.sTitle!=m[0].innerHTML&&m.html(n.sTitle);fb(a,"header")(a,m,n,g)}f&&wa(a.aoHeader,d);k(d).children("tr").attr("role","row");k(d).children("tr").children("th, td").addClass(g.sHeaderTH);k(e).children("tr").children("th, td").addClass(g.sFooterTH);if(null!==e)for(a=a.aoFooter[0],l=0,b=a.length;l<b;l++)n=h[l],n.nTf=a[l].cell,n.sClass&&k(n.nTf).addClass(n.sClass)}function xa(a,b,c){var d,e,f=[],g=[],h=a.aoColumns.length;if(b){c===q&&(c=!1);var l=0;for(d=b.length;l<d;l++){f[l]=
44
+ b[l].slice();f[l].nTr=b[l].nTr;for(e=h-1;0<=e;e--)a.aoColumns[e].bVisible||c||f[l].splice(e,1);g.push([])}l=0;for(d=f.length;l<d;l++){if(a=f[l].nTr)for(;e=a.firstChild;)a.removeChild(e);e=0;for(b=f[l].length;e<b;e++){var n=h=1;if(g[l][e]===q){a.appendChild(f[l][e].cell);for(g[l][e]=1;f[l+h]!==q&&f[l][e].cell==f[l+h][e].cell;)g[l+h][e]=1,h++;for(;f[l][e+n]!==q&&f[l][e].cell==f[l][e+n].cell;){for(c=0;c<h;c++)g[l+c][e+n]=1;n++}k(f[l][e].cell).attr("rowspan",h).attr("colspan",n)}}}}}function fa(a,b){var c=
45
+ H(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==k.inArray(!1,c))U(a,!1);else{c=[];var d=0,e=a.asStripeClasses,f=e.length,g=a.oLanguage,h=a.iInitDisplayStart,l="ssp"==P(a),n=a.aiDisplay;a.bDrawing=!0;h!==q&&-1!==h&&(a._iDisplayStart=l?h:h>=a.fnRecordsDisplay()?0:h,a.iInitDisplayStart=-1);h=a._iDisplayStart;var m=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,U(a,!1);else if(!l)a.iDraw++;else if(!a.bDestroying&&!b){Gb(a);return}if(0!==n.length)for(b=l?a.aoData.length:m,g=l?0:h;g<b;g++){l=
46
+ n[g];var p=a.aoData[l];null===p.nTr&&$a(a,l);var t=p.nTr;if(0!==f){var v=e[d%f];p._sRowStripe!=v&&(k(t).removeClass(p._sRowStripe).addClass(v),p._sRowStripe=v)}H(a,"aoRowCallback",null,[t,p._aData,d,g,l]);c.push(t);d++}else d=g.sZeroRecords,1==a.iDraw&&"ajax"==P(a)?d=g.sLoadingRecords:g.sEmptyTable&&0===a.fnRecordsTotal()&&(d=g.sEmptyTable),c[0]=k("<tr/>",{"class":f?e[0]:""}).append(k("<td />",{valign:"top",colSpan:na(a),"class":a.oClasses.sRowEmpty}).html(d))[0];H(a,"aoHeaderCallback","header",[k(a.nTHead).children("tr")[0],
47
+ cb(a),h,m,n]);H(a,"aoFooterCallback","footer",[k(a.nTFoot).children("tr")[0],cb(a),h,m,n]);e=k(a.nTBody);e.children().detach();e.append(k(c));H(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function ja(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&Hb(a);d?ya(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;fa(a);a._drawHold=!1}function Ib(a){var b=a.oClasses,c=k(a.nTable);c=k("<div/>").insertBefore(c);var d=a.oFeatures,
48
+ e=k("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,h,l,n,m,p,t=0;t<f.length;t++){g=null;h=f[t];if("<"==h){l=k("<div/>")[0];n=f[t+1];if("'"==n||'"'==n){m="";for(p=2;f[t+p]!=n;)m+=f[t+p],p++;"H"==m?m=b.sJUIHeader:"F"==m&&(m=b.sJUIFooter);-1!=m.indexOf(".")?(n=m.split("."),l.id=n[0].substr(1,n[0].length-1),l.className=n[1]):"#"==m.charAt(0)?l.id=m.substr(1,
49
+ m.length-1):l.className=m;t+=p}e.append(l);e=k(l)}else if(">"==h)e=e.parent();else if("l"==h&&d.bPaginate&&d.bLengthChange)g=Jb(a);else if("f"==h&&d.bFilter)g=Kb(a);else if("r"==h&&d.bProcessing)g=Lb(a);else if("t"==h)g=Mb(a);else if("i"==h&&d.bInfo)g=Nb(a);else if("p"==h&&d.bPaginate)g=Ob(a);else if(0!==u.ext.feature.length)for(l=u.ext.feature,p=0,n=l.length;p<n;p++)if(h==l[p].cFeature){g=l[p].fnInit(a);break}g&&(l=a.aanFeatures,l[h]||(l[h]=[]),l[h].push(g),e.append(g))}c.replaceWith(e);a.nHolding=
50
+ null}function wa(a,b){b=k(b).children("tr");var c,d,e;a.splice(0,a.length);var f=0;for(e=b.length;f<e;f++)a.push([]);f=0;for(e=b.length;f<e;f++){var g=b[f];for(c=g.firstChild;c;){if("TD"==c.nodeName.toUpperCase()||"TH"==c.nodeName.toUpperCase()){var h=1*c.getAttribute("colspan");var l=1*c.getAttribute("rowspan");h=h&&0!==h&&1!==h?h:1;l=l&&0!==l&&1!==l?l:1;var n=0;for(d=a[f];d[n];)n++;var m=n;var p=1===h?!0:!1;for(d=0;d<h;d++)for(n=0;n<l;n++)a[f+n][m+d]={cell:c,unique:p},a[f+n].nTr=g}c=c.nextSibling}}}
51
+ function La(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],wa(c,b)));b=0;for(var e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)!c[b][f].unique||d[f]&&a.bSortCellsTop||(d[f]=c[b][f].cell);return d}function Ma(a,b,c){H(a,"aoServerParams","serverParams",[b]);if(b&&Array.isArray(b)){var d={},e=/(.*?)\[\]$/;k.each(b,function(m,p){(m=p.name.match(e))?(m=m[0],d[m]||(d[m]=[]),d[m].push(p.value)):d[p.name]=p.value});b=d}var f=a.ajax,g=a.oInstance,h=function(m){H(a,null,"xhr",[a,m,a.jqXHR]);c(m)};if(k.isPlainObject(f)&&
52
+ f.data){var l=f.data;var n="function"===typeof l?l(b,a):l;b="function"===typeof l&&n?n:k.extend(!0,b,n);delete f.data}n={data:b,success:function(m){var p=m.error||m.sError;p&&ca(a,0,p);a.json=m;h(m)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(m,p,t){t=H(a,null,"xhr",[a,null,a.jqXHR]);-1===k.inArray(!0,t)&&("parsererror"==p?ca(a,0,"Invalid JSON response",1):4===m.readyState&&ca(a,0,"Ajax error",7));U(a,!1)}};a.oAjaxData=b;H(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(g,
53
+ a.sAjaxSource,k.map(b,function(m,p){return{name:p,value:m}}),h,a):a.sAjaxSource||"string"===typeof f?a.jqXHR=k.ajax(k.extend(n,{url:f||a.sAjaxSource})):"function"===typeof f?a.jqXHR=f.call(g,b,h,a):(a.jqXHR=k.ajax(k.extend(n,f)),f.data=l)}function Gb(a){a.iDraw++;U(a,!0);Ma(a,Pb(a),function(b){Qb(a,b)})}function Pb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g=[],h=pa(a);var l=a._iDisplayStart;var n=!1!==d.bPaginate?a._iDisplayLength:-1;var m=function(x,r){g.push({name:x,
54
+ value:r})};m("sEcho",a.iDraw);m("iColumns",c);m("sColumns",T(b,"sName").join(","));m("iDisplayStart",l);m("iDisplayLength",n);var p={draw:a.iDraw,columns:[],order:[],start:l,length:n,search:{value:e.sSearch,regex:e.bRegex}};for(l=0;l<c;l++){var t=b[l];var v=f[l];n="function"==typeof t.mData?"function":t.mData;p.columns.push({data:n,name:t.sName,searchable:t.bSearchable,orderable:t.bSortable,search:{value:v.sSearch,regex:v.bRegex}});m("mDataProp_"+l,n);d.bFilter&&(m("sSearch_"+l,v.sSearch),m("bRegex_"+
55
+ l,v.bRegex),m("bSearchable_"+l,t.bSearchable));d.bSort&&m("bSortable_"+l,t.bSortable)}d.bFilter&&(m("sSearch",e.sSearch),m("bRegex",e.bRegex));d.bSort&&(k.each(h,function(x,r){p.order.push({column:r.col,dir:r.dir});m("iSortCol_"+x,r.col);m("sSortDir_"+x,r.dir)}),m("iSortingCols",h.length));b=u.ext.legacy.ajax;return null===b?a.sAjaxSource?g:p:b?g:p}function Qb(a,b){var c=function(g,h){return b[g]!==q?b[g]:b[h]},d=Na(a,b),e=c("sEcho","draw"),f=c("iTotalRecords","recordsTotal");c=c("iTotalDisplayRecords",
56
+ "recordsFiltered");if(e!==q){if(1*e<a.iDraw)return;a.iDraw=1*e}Ia(a);a._iRecordsTotal=parseInt(f,10);a._iRecordsDisplay=parseInt(c,10);e=0;for(f=d.length;e<f;e++)ea(a,d[e]);a.aiDisplay=a.aiDisplayMaster.slice();fa(a,!0);a._bInitComplete||Oa(a,b);U(a,!1)}function Na(a,b){a=k.isPlainObject(a.ajax)&&a.ajax.dataSrc!==q?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===a?b.aaData||b[a]:""!==a?ia(a)(b):b}function Kb(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,f=a.aanFeatures,g='<input type="search" class="'+
57
+ b.sFilterInput+'"/>',h=d.sSearch;h=h.match(/_INPUT_/)?h.replace("_INPUT_",g):h+g;b=k("<div/>",{id:f.f?null:c+"_filter","class":b.sFilter}).append(k("<label/>").append(h));var l=function(){var m=this.value?this.value:"";m!=e.sSearch&&(ya(a,{sSearch:m,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,fa(a))};f=null!==a.searchDelay?a.searchDelay:"ssp"===P(a)?400:0;var n=k("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",
58
+ f?gb(l,f):l).on("mouseup",function(m){setTimeout(function(){l.call(n[0])},10)}).on("keypress.DT",function(m){if(13==m.keyCode)return!1}).attr("aria-controls",c);k(a.nTable).on("search.dt.DT",function(m,p){if(a===p)try{n[0]!==z.activeElement&&n.val(e.sSearch)}catch(t){}});return b[0]}function ya(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(h){d.sSearch=h.sSearch;d.bRegex=h.bRegex;d.bSmart=h.bSmart;d.bCaseInsensitive=h.bCaseInsensitive},g=function(h){return h.bEscapeRegex!==q?!h.bEscapeRegex:
59
+ h.bRegex};Za(a);if("ssp"!=P(a)){Rb(a,b.sSearch,c,g(b),b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<e.length;b++)Sb(a,e[b].sSearch,b,g(e[b]),e[b].bSmart,e[b].bCaseInsensitive);Tb(a)}else f(b);a.bFiltered=!0;H(a,null,"search",[a])}function Tb(a){for(var b=u.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<g;f++){for(var h=[],l=0,n=c.length;l<n;l++)e=c[l],d=a.aoData[e],b[f](a,d._aFilterData,e,d._aData,l)&&h.push(e);c.length=0;k.merge(c,h)}}function Sb(a,b,c,d,e,f){if(""!==b){var g=[],h=a.aiDisplay;d=hb(b,
60
+ d,e,f);for(e=0;e<h.length;e++)b=a.aoData[h[e]]._aFilterData[c],d.test(b)&&g.push(h[e]);a.aiDisplay=g}}function Rb(a,b,c,d,e,f){e=hb(b,d,e,f);var g=a.oPreviousSearch.sSearch,h=a.aiDisplayMaster;f=[];0!==u.ext.search.length&&(c=!0);var l=Ub(a);if(0>=b.length)a.aiDisplay=h.slice();else{if(l||c||d||g.length>b.length||0!==b.indexOf(g)||a.bSorted)a.aiDisplay=h.slice();b=a.aiDisplay;for(c=0;c<b.length;c++)e.test(a.aoData[b[c]]._sFilterRow)&&f.push(b[c]);a.aiDisplay=f}}function hb(a,b,c,d){a=b?a:ib(a);c&&
61
+ (a="^(?=.*?"+k.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(e){if('"'===e.charAt(0)){var f=e.match(/^"(.*)"$/);e=f?f[1]:e}return e.replace('"',"")}).join(")(?=.*?")+").*$");return new RegExp(a,d?"i":"")}function Ub(a){var b=a.aoColumns,c,d,e=u.ext.type.search;var f=!1;var g=0;for(c=a.aoData.length;g<c;g++){var h=a.aoData[g];if(!h._aFilterData){var l=[];var n=0;for(d=b.length;n<d;n++){f=b[n];if(f.bSearchable){var m=S(a,g,n,"filter");e[f.sType]&&(m=e[f.sType](m));null===m&&(m="");"string"!==typeof m&&
62
+ m.toString&&(m=m.toString())}else m="";m.indexOf&&-1!==m.indexOf("&")&&(Pa.innerHTML=m,m=rc?Pa.textContent:Pa.innerText);m.replace&&(m=m.replace(/[\r\n\u2028]/g,""));l.push(m)}h._aFilterData=l;h._sFilterRow=l.join(" ");f=!0}}return f}function Vb(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}function Wb(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function Nb(a){var b=a.sTableId,c=a.aanFeatures.i,d=k("<div/>",
63
+ {"class":a.oClasses.sInfo,id:c?null:b+"_info"});c||(a.aoDrawCallback.push({fn:Xb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),k(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Xb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),h=g?c.sInfo:c.sInfoEmpty;g!==f&&(h+=" "+c.sInfoFiltered);h+=c.sInfoPostFix;h=Yb(a,h);c=c.fnInfoCallback;null!==c&&(h=c.call(a.oInstance,
64
+ a,d,e,f,g,h));k(b).html(h)}}function Yb(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/e)))}function za(a){var b=a.iInitDisplayStart,c=a.aoColumns;var d=a.oFeatures;var e=a.bDeferLoading;if(a.bInitialised){Ib(a);
65
+ Fb(a);xa(a,a.aoHeader);xa(a,a.aoFooter);U(a,!0);d.bAutoWidth&&Ya(a);var f=0;for(d=c.length;f<d;f++){var g=c[f];g.sWidth&&(g.nTh.style.width=K(g.sWidth))}H(a,null,"preInit",[a]);ja(a);c=P(a);if("ssp"!=c||e)"ajax"==c?Ma(a,[],function(h){var l=Na(a,h);for(f=0;f<l.length;f++)ea(a,l[f]);a.iInitDisplayStart=b;ja(a);U(a,!1);Oa(a,h)},a):(U(a,!1),Oa(a))}else setTimeout(function(){za(a)},200)}function Oa(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&ra(a);H(a,null,"plugin-init",[a,b]);H(a,"aoInitComplete",
66
+ "init",[a,b])}function jb(a,b){b=parseInt(b,10);a._iDisplayLength=b;kb(a);H(a,null,"length",[a,b])}function Jb(a){var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=Array.isArray(d[0]),f=e?d[0]:d;d=e?d[1]:d;e=k("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect});for(var g=0,h=f.length;g<h;g++)e[0][g]=new Option("number"===typeof d[g]?a.fnFormatNumber(d[g]):d[g],f[g]);var l=k("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(l[0].id=c+"_length");l.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",
67
+ e[0].outerHTML));k("select",l).val(a._iDisplayLength).on("change.DT",function(n){jb(a,k(this).val());fa(a)});k(a.nTable).on("length.dt.DT",function(n,m,p){a===m&&k("select",l).val(p)});return l[0]}function Ob(a){var b=a.sPaginationType,c=u.ext.pager[b],d="function"===typeof c,e=function(g){fa(g)};b=k("<div/>").addClass(a.oClasses.sPaging+b)[0];var f=a.aanFeatures;d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(g){if(d){var h=g._iDisplayStart,l=g._iDisplayLength,
68
+ n=g.fnRecordsDisplay(),m=-1===l;h=m?0:Math.ceil(h/l);l=m?1:Math.ceil(n/l);n=c(h,l);var p;m=0;for(p=f.p.length;m<p;m++)fb(g,"pageButton")(g,f.p[m],m,n,h,l)}else c.fnUpdate(g,e)},sName:"pagination"}));return b}function lb(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===e?d=0:"number"===typeof b?(d=b*e,d>f&&(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:ca(a,0,"Unknown paging action: "+b,5);
69
+ b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(H(a,null,"page",[a]),c&&fa(a));return b}function Lb(a){return k("<div/>",{id:a.aanFeatures.r?null:a.sTableId+"_processing","class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function U(a,b){a.oFeatures.bProcessing&&k(a.aanFeatures.r).css("display",b?"block":"none");H(a,null,"processing",[a,b])}function Mb(a){var b=k(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,
70
+ e=c.sY,f=a.oClasses,g=b.children("caption"),h=g.length?g[0]._captionSide:null,l=k(b[0].cloneNode(!1)),n=k(b[0].cloneNode(!1)),m=b.children("tfoot");m.length||(m=null);l=k("<div/>",{"class":f.sScrollWrapper}).append(k("<div/>",{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?d?K(d):null:"100%"}).append(k("<div/>",{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===h?
71
+ g:null).append(b.children("thead"))))).append(k("<div/>",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:d?K(d):null}).append(b));m&&l.append(k("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?d?K(d):null:"100%"}).append(k("<div/>",{"class":f.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",0).append("bottom"===h?g:null).append(b.children("tfoot")))));b=l.children();var p=b[0];f=b[1];var t=m?b[2]:null;if(d)k(f).on("scroll.DT",function(v){v=
72
+ this.scrollLeft;p.scrollLeft=v;m&&(t.scrollLeft=v)});k(f).css("max-height",e);c.bCollapse||k(f).css("height",e);a.nScrollHead=p;a.nScrollBody=f;a.nScrollFoot=t;a.aoDrawCallback.push({fn:Fa,sName:"scrolling"});return l[0]}function Fa(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY;b=b.iBarWidth;var f=k(a.nScrollHead),g=f[0].style,h=f.children("div"),l=h[0].style,n=h.children("table");h=a.nScrollBody;var m=k(h),p=h.style,t=k(a.nScrollFoot).children("div"),v=t.children("table"),x=k(a.nTHead),r=k(a.nTable),
73
+ A=r[0],D=A.style,I=a.nTFoot?k(a.nTFoot):null,W=a.oBrowser,M=W.bScrollOversize,B=T(a.aoColumns,"nTh"),E=[],aa=[],X=[],Aa=[],mb,Ba=function(F){F=F.style;F.paddingTop="0";F.paddingBottom="0";F.borderTopWidth="0";F.borderBottomWidth="0";F.height=0};var ha=h.scrollHeight>h.clientHeight;if(a.scrollBarVis!==ha&&a.scrollBarVis!==q)a.scrollBarVis=ha,ra(a);else{a.scrollBarVis=ha;r.children("thead, tfoot").remove();if(I){var ka=I.clone().prependTo(r);var la=I.find("tr");ka=ka.find("tr")}var nb=x.clone().prependTo(r);
74
+ x=x.find("tr");ha=nb.find("tr");nb.find("th, td").removeAttr("tabindex");c||(p.width="100%",f[0].style.width="100%");k.each(La(a,nb),function(F,Y){mb=sa(a,F);Y.style.width=a.aoColumns[mb].sWidth});I&&ba(function(F){F.style.width=""},ka);f=r.outerWidth();""===c?(D.width="100%",M&&(r.find("tbody").height()>h.offsetHeight||"scroll"==m.css("overflow-y"))&&(D.width=K(r.outerWidth()-b)),f=r.outerWidth()):""!==d&&(D.width=K(d),f=r.outerWidth());ba(Ba,ha);ba(function(F){X.push(F.innerHTML);E.push(K(k(F).css("width")))},
75
+ ha);ba(function(F,Y){-1!==k.inArray(F,B)&&(F.style.width=E[Y])},x);k(ha).height(0);I&&(ba(Ba,ka),ba(function(F){Aa.push(F.innerHTML);aa.push(K(k(F).css("width")))},ka),ba(function(F,Y){F.style.width=aa[Y]},la),k(ka).height(0));ba(function(F,Y){F.innerHTML='<div class="dataTables_sizing">'+X[Y]+"</div>";F.childNodes[0].style.height="0";F.childNodes[0].style.overflow="hidden";F.style.width=E[Y]},ha);I&&ba(function(F,Y){F.innerHTML='<div class="dataTables_sizing">'+Aa[Y]+"</div>";F.childNodes[0].style.height=
76
+ "0";F.childNodes[0].style.overflow="hidden";F.style.width=aa[Y]},ka);r.outerWidth()<f?(la=h.scrollHeight>h.offsetHeight||"scroll"==m.css("overflow-y")?f+b:f,M&&(h.scrollHeight>h.offsetHeight||"scroll"==m.css("overflow-y"))&&(D.width=K(la-b)),""!==c&&""===d||ca(a,1,"Possible column misalignment",6)):la="100%";p.width=K(la);g.width=K(la);I&&(a.nScrollFoot.style.width=K(la));!e&&M&&(p.height=K(A.offsetHeight+b));c=r.outerWidth();n[0].style.width=K(c);l.width=K(c);d=r.height()>h.clientHeight||"scroll"==
77
+ m.css("overflow-y");e="padding"+(W.bScrollbarLeft?"Left":"Right");l[e]=d?b+"px":"0px";I&&(v[0].style.width=K(c),t[0].style.width=K(c),t[0].style[e]=d?b+"px":"0px");r.children("colgroup").insertBefore(r.children("thead"));m.trigger("scroll");!a.bSorted&&!a.bFiltered||a._drawHold||(h.scrollTop=0)}}function ba(a,b,c){for(var d=0,e=0,f=b.length,g,h;e<f;){g=b[e].firstChild;for(h=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,h,d):a(g,d),d++),g=g.nextSibling,h=c?h.nextSibling:null;e++}}function Ya(a){var b=
78
+ a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,f=d.sX,g=d.sXInner,h=c.length,l=Ga(a,"bVisible"),n=k("th",a.nTHead),m=b.getAttribute("width"),p=b.parentNode,t=!1,v,x=a.oBrowser;d=x.bScrollOversize;(v=b.style.width)&&-1!==v.indexOf("%")&&(m=v);for(v=0;v<l.length;v++){var r=c[l[v]];null!==r.sWidth&&(r.sWidth=Zb(r.sWidthOrig,p),t=!0)}if(d||!t&&!f&&!e&&h==na(a)&&h==n.length)for(v=0;v<h;v++)l=sa(a,v),null!==l&&(c[l].sWidth=K(n.eq(v).width()));else{h=k(b).clone().css("visibility","hidden").removeAttr("id");h.find("tbody tr").remove();
79
+ var A=k("<tr/>").appendTo(h.find("tbody"));h.find("thead, tfoot").remove();h.append(k(a.nTHead).clone()).append(k(a.nTFoot).clone());h.find("tfoot th, tfoot td").css("width","");n=La(a,h.find("thead")[0]);for(v=0;v<l.length;v++)r=c[l[v]],n[v].style.width=null!==r.sWidthOrig&&""!==r.sWidthOrig?K(r.sWidthOrig):"",r.sWidthOrig&&f&&k(n[v]).append(k("<div/>").css({width:r.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(v=0;v<l.length;v++)t=l[v],r=c[t],k($b(a,t)).clone(!1).append(r.sContentPadding).appendTo(A);
80
+ k("[name]",h).removeAttr("name");r=k("<div/>").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(h).appendTo(p);f&&g?h.width(g):f?(h.css("width","auto"),h.removeAttr("width"),h.width()<p.clientWidth&&m&&h.width(p.clientWidth)):e?h.width(p.clientWidth):m&&h.width(m);for(v=e=0;v<l.length;v++)p=k(n[v]),g=p.outerWidth()-p.width(),p=x.bBounding?Math.ceil(n[v].getBoundingClientRect().width):p.outerWidth(),e+=p,c[l[v]].sWidth=K(p-g);b.style.width=K(e);r.remove()}m&&
81
+ (b.style.width=K(m));!m&&!f||a._reszEvt||(b=function(){k(y).on("resize.DT-"+a.sInstance,gb(function(){ra(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0)}function Zb(a,b){if(!a)return 0;a=k("<div/>").css("width",K(a)).appendTo(b||z.body);b=a[0].offsetWidth;a.remove();return b}function $b(a,b){var c=ac(a,b);if(0>c)return null;var d=a.aoData[c];return d.nTr?d.anCells[b]:k("<td/>").html(S(a,c,b,"display"))[0]}function ac(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=S(a,f,b,"display")+"",c=c.replace(sc,
82
+ ""),c=c.replace(/&nbsp;/g," "),c.length>d&&(d=c.length,e=f);return e}function K(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function pa(a){var b=[],c=a.aoColumns;var d=a.aaSortingFixed;var e=k.isPlainObject(d);var f=[];var g=function(m){m.length&&!Array.isArray(m[0])?f.push(m):k.merge(f,m)};Array.isArray(d)&&g(d);e&&d.pre&&g(d.pre);g(a.aaSorting);e&&d.post&&g(d.post);for(a=0;a<f.length;a++){var h=f[a][0];g=c[h].aDataSort;d=0;for(e=g.length;d<e;d++){var l=g[d];
83
+ var n=c[l].sType||"string";f[a]._idx===q&&(f[a]._idx=k.inArray(f[a][1],c[l].asSorting));b.push({src:h,col:l,dir:f[a][1],index:f[a]._idx,type:n,formatter:u.ext.type.order[n+"-pre"]})}}return b}function Hb(a){var b,c=[],d=u.ext.type.order,e=a.aoData,f=0,g=a.aiDisplayMaster;Za(a);var h=pa(a);var l=0;for(b=h.length;l<b;l++){var n=h[l];n.formatter&&f++;bc(a,n.col)}if("ssp"!=P(a)&&0!==h.length){l=0;for(b=g.length;l<b;l++)c[g[l]]=l;f===h.length?g.sort(function(m,p){var t,v=h.length,x=e[m]._aSortData,r=e[p]._aSortData;
84
+ for(t=0;t<v;t++){var A=h[t];var D=x[A.col];var I=r[A.col];D=D<I?-1:D>I?1:0;if(0!==D)return"asc"===A.dir?D:-D}D=c[m];I=c[p];return D<I?-1:D>I?1:0}):g.sort(function(m,p){var t,v=h.length,x=e[m]._aSortData,r=e[p]._aSortData;for(t=0;t<v;t++){var A=h[t];var D=x[A.col];var I=r[A.col];A=d[A.type+"-"+A.dir]||d["string-"+A.dir];D=A(D,I);if(0!==D)return D}D=c[m];I=c[p];return D<I?-1:D>I?1:0})}a.bSorted=!0}function cc(a){var b=a.aoColumns,c=pa(a);a=a.oLanguage.oAria;for(var d=0,e=b.length;d<e;d++){var f=b[d];
85
+ var g=f.asSorting;var h=f.ariaTitle||f.sTitle.replace(/<.*?>/g,"");var l=f.nTh;l.removeAttribute("aria-sort");f.bSortable&&(0<c.length&&c[0].col==d?(l.setAttribute("aria-sort","asc"==c[0].dir?"ascending":"descending"),f=g[c[0].index+1]||g[0]):f=g[0],h+="asc"===f?a.sSortAscending:a.sSortDescending);l.setAttribute("aria-label",h)}}function ob(a,b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,g=function(h,l){var n=h._idx;n===q&&(n=k.inArray(h[1],f));return n+1<f.length?n+1:l?null:0};"number"===typeof e[0]&&
86
+ (e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=k.inArray(b,T(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);ja(a);"function"==typeof d&&d(a)}function eb(a,b,c,d){var e=a.aoColumns[c];pb(b,{},function(f){!1!==e.bSortable&&(a.oFeatures.bProcessing?(U(a,!0),setTimeout(function(){ob(a,
87
+ c,f.shiftKey,d);"ssp"!==P(a)&&U(a,!1)},0)):ob(a,c,f.shiftKey,d))})}function Qa(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=pa(a),e=a.oFeatures,f;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++){var g=b[e].src;k(T(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3))}e=0;for(f=d.length;e<f;e++)g=d[e].src,k(T(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function bc(a,b){var c=a.aoColumns[b],d=u.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,ta(a,b)));for(var f,g=u.ext.type.order[c.sType+
88
+ "-pre"],h=0,l=a.aoData.length;h<l;h++)if(c=a.aoData[h],c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=d?e[h]:S(a,h,b,"sort"),c._aSortData[b]=g?g(f):f}function Ra(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:k.extend(!0,[],a.aaSorting),search:Vb(a.oPreviousSearch),columns:k.map(a.aoColumns,function(c,d){return{visible:c.bVisible,search:Vb(a.aoPreSearchCols[d])}})};H(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=
89
+ b;a.fnStateSaveCallback.call(a.oInstance,a,b)}}function dc(a,b,c){var d,e,f=a.aoColumns;b=function(h){if(h&&h.time){var l=H(a,"aoStateLoadParams","stateLoadParams",[a,h]);if(-1===k.inArray(!1,l)&&(l=a.iStateDuration,!(0<l&&h.time<+new Date-1E3*l||h.columns&&f.length!==h.columns.length))){a.oLoadedState=k.extend(!0,{},h);h.start!==q&&(a._iDisplayStart=h.start,a.iInitDisplayStart=h.start);h.length!==q&&(a._iDisplayLength=h.length);h.order!==q&&(a.aaSorting=[],k.each(h.order,function(n,m){a.aaSorting.push(m[0]>=
90
+ f.length?[0,m[1]]:m)}));h.search!==q&&k.extend(a.oPreviousSearch,Wb(h.search));if(h.columns)for(d=0,e=h.columns.length;d<e;d++)l=h.columns[d],l.visible!==q&&(f[d].bVisible=l.visible),l.search!==q&&k.extend(a.aoPreSearchCols[d],Wb(l.search));H(a,"aoStateLoaded","stateLoaded",[a,h])}}c()};if(a.oFeatures.bStateSave){var g=a.fnStateLoadCallback.call(a.oInstance,a,b);g!==q&&b(g)}else c()}function Sa(a){var b=u.settings;a=k.inArray(a,T(b,"nTable"));return-1!==a?b[a]:null}function ca(a,b,c,d){c="DataTables warning: "+
91
+ (a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+d);if(b)y.console&&console.log&&console.log(c);else if(b=u.ext,b=b.sErrMode||b.errMode,a&&H(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function V(a,b,c,d){Array.isArray(c)?k.each(c,function(e,f){Array.isArray(f)?V(a,b,f[0],f[1]):V(a,b,f)}):(d===q&&(d=c),b[c]!==q&&(a[d]=b[c]))}function qb(a,b,c){var d;for(d in b)if(b.hasOwnProperty(d)){var e=
92
+ b[d];k.isPlainObject(e)?(k.isPlainObject(a[d])||(a[d]={}),k.extend(!0,a[d],e)):c&&"data"!==d&&"aaData"!==d&&Array.isArray(e)?a[d]=e.slice():a[d]=e}return a}function pb(a,b,c){k(a).on("click.DT",b,function(d){k(a).trigger("blur");c(d)}).on("keypress.DT",b,function(d){13===d.which&&(d.preventDefault(),c(d))}).on("selectstart.DT",function(){return!1})}function Q(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function H(a,b,c,d){var e=[];b&&(e=k.map(a[b].slice().reverse(),function(f,g){return f.fn.apply(a.oInstance,
93
+ d)}));null!==c&&(b=k.Event(c+".dt"),k(a.nTable).trigger(b,d),e.push(b.result));return e}function kb(a){var b=a._iDisplayStart,c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function fb(a,b){a=a.renderer;var c=u.ext.renderer[b];return k.isPlainObject(a)&&a[b]?c[a[b]]||c._:"string"===typeof a?c[a]||c._:c._}function P(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function Ca(a,b){var c=ec.numbers_length,d=Math.floor(c/2);
94
+ b<=c?a=qa(0,b):a<=d?(a=qa(0,c-2),a.push("ellipsis"),a.push(b-1)):(a>=b-1-d?a=qa(b-(c-2),b):(a=qa(a-d+2,a+d-1),a.push("ellipsis"),a.push(b-1)),a.splice(0,0,"ellipsis"),a.splice(0,0,0));a.DT_el="span";return a}function Wa(a){k.each({num:function(b){return Ta(b,a)},"num-fmt":function(b){return Ta(b,a,rb)},"html-num":function(b){return Ta(b,a,Ua)},"html-num-fmt":function(b){return Ta(b,a,Ua,rb)}},function(b,c){L.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(L.type.search[b+a]=L.type.search.html)})}function fc(a){return function(){var b=
95
+ [Sa(this[u.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return u.ext.internal[a].apply(this,b)}}var u=function(a){this.$=function(f,g){return this.api(!0).$(f,g)};this._=function(f,g){return this.api(!0).rows(f,g).data()};this.api=function(f){return f?new C(Sa(this[L.iApiIndex])):new C(this)};this.fnAddData=function(f,g){var h=this.api(!0);f=Array.isArray(f)&&(Array.isArray(f[0])||k.isPlainObject(f[0]))?h.rows.add(f):h.row.add(f);(g===q||g)&&h.draw();return f.flatten().toArray()};
96
+ this.fnAdjustColumnSizing=function(f){var g=this.api(!0).columns.adjust(),h=g.settings()[0],l=h.oScroll;f===q||f?g.draw(!1):(""!==l.sX||""!==l.sY)&&Fa(h)};this.fnClearTable=function(f){var g=this.api(!0).clear();(f===q||f)&&g.draw()};this.fnClose=function(f){this.api(!0).row(f).child.hide()};this.fnDeleteRow=function(f,g,h){var l=this.api(!0);f=l.rows(f);var n=f.settings()[0],m=n.aoData[f[0][0]];f.remove();g&&g.call(this,n,m);(h===q||h)&&l.draw();return m};this.fnDestroy=function(f){this.api(!0).destroy(f)};
97
+ this.fnDraw=function(f){this.api(!0).draw(f)};this.fnFilter=function(f,g,h,l,n,m){n=this.api(!0);null===g||g===q?n.search(f,h,l,m):n.column(g).search(f,h,l,m);n.draw()};this.fnGetData=function(f,g){var h=this.api(!0);if(f!==q){var l=f.nodeName?f.nodeName.toLowerCase():"";return g!==q||"td"==l||"th"==l?h.cell(f,g).data():h.row(f).data()||null}return h.data().toArray()};this.fnGetNodes=function(f){var g=this.api(!0);return f!==q?g.row(f).node():g.rows().nodes().flatten().toArray()};this.fnGetPosition=
98
+ function(f){var g=this.api(!0),h=f.nodeName.toUpperCase();return"TR"==h?g.row(f).index():"TD"==h||"TH"==h?(f=g.cell(f).index(),[f.row,f.columnVisible,f.column]):null};this.fnIsOpen=function(f){return this.api(!0).row(f).child.isShown()};this.fnOpen=function(f,g,h){return this.api(!0).row(f).child(g,h).show().child()[0]};this.fnPageChange=function(f,g){f=this.api(!0).page(f);(g===q||g)&&f.draw(!1)};this.fnSetColumnVis=function(f,g,h){f=this.api(!0).column(f).visible(g);(h===q||h)&&f.columns.adjust().draw()};
99
+ this.fnSettings=function(){return Sa(this[L.iApiIndex])};this.fnSort=function(f){this.api(!0).order(f).draw()};this.fnSortListener=function(f,g,h){this.api(!0).order.listener(f,g,h)};this.fnUpdate=function(f,g,h,l,n){var m=this.api(!0);h===q||null===h?m.row(g).data(f):m.cell(g,h).data(f);(n===q||n)&&m.columns.adjust();(l===q||l)&&m.draw();return 0};this.fnVersionCheck=L.fnVersionCheck;var b=this,c=a===q,d=this.length;c&&(a={});this.oApi=this.internal=L.internal;for(var e in u.ext.internal)e&&(this[e]=
100
+ fc(e));this.each(function(){var f={},g=1<d?qb(f,a,!0):a,h=0,l;f=this.getAttribute("id");var n=!1,m=u.defaults,p=k(this);if("table"!=this.nodeName.toLowerCase())ca(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{zb(m);Ab(m.column);O(m,m,!0);O(m.column,m.column,!0);O(m,k.extend(g,p.data()),!0);var t=u.settings;h=0;for(l=t.length;h<l;h++){var v=t[h];if(v.nTable==this||v.nTHead&&v.nTHead.parentNode==this||v.nTFoot&&v.nTFoot.parentNode==this){var x=g.bRetrieve!==q?g.bRetrieve:m.bRetrieve;
101
+ if(c||x)return v.oInstance;if(g.bDestroy!==q?g.bDestroy:m.bDestroy){v.oInstance.fnDestroy();break}else{ca(v,0,"Cannot reinitialise DataTable",3);return}}if(v.sTableId==this.id){t.splice(h,1);break}}if(null===f||""===f)this.id=f="DataTables_Table_"+u.ext._unique++;var r=k.extend(!0,{},u.models.oSettings,{sDestroyWidth:p[0].style.width,sInstance:f,sTableId:f});r.nTable=this;r.oApi=b.internal;r.oInit=g;t.push(r);r.oInstance=1===b.length?b:p.dataTable();zb(g);ma(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&
102
+ (g.iDisplayLength=Array.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);g=qb(k.extend(!0,{},m),g);V(r.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));V(r,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback",
103
+ "fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]);V(r.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);V(r.oLanguage,g,"fnInfoCallback");Q(r,"aoDrawCallback",g.fnDrawCallback,"user");Q(r,"aoServerParams",g.fnServerParams,"user");Q(r,"aoStateSaveParams",g.fnStateSaveParams,"user");Q(r,"aoStateLoadParams",
104
+ g.fnStateLoadParams,"user");Q(r,"aoStateLoaded",g.fnStateLoaded,"user");Q(r,"aoRowCallback",g.fnRowCallback,"user");Q(r,"aoRowCreatedCallback",g.fnCreatedRow,"user");Q(r,"aoHeaderCallback",g.fnHeaderCallback,"user");Q(r,"aoFooterCallback",g.fnFooterCallback,"user");Q(r,"aoInitComplete",g.fnInitComplete,"user");Q(r,"aoPreDrawCallback",g.fnPreDrawCallback,"user");r.rowIdFn=ia(g.rowId);Bb(r);var A=r.oClasses;k.extend(A,u.ext.classes,g.oClasses);p.addClass(A.sTable);r.iInitDisplayStart===q&&(r.iInitDisplayStart=
105
+ g.iDisplayStart,r._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(r.bDeferLoading=!0,f=Array.isArray(g.iDeferLoading),r._iRecordsDisplay=f?g.iDeferLoading[0]:g.iDeferLoading,r._iRecordsTotal=f?g.iDeferLoading[1]:g.iDeferLoading);var D=r.oLanguage;k.extend(!0,D,g.oLanguage);D.sUrl?(k.ajax({dataType:"json",url:D.sUrl,success:function(B){ma(B);O(m.oLanguage,B);k.extend(!0,D,B);H(r,null,"i18n",[r]);za(r)},error:function(){za(r)}}),n=!0):H(r,null,"i18n",[r]);null===g.asStripeClasses&&(r.asStripeClasses=
106
+ [A.sStripeOdd,A.sStripeEven]);f=r.asStripeClasses;var I=p.children("tbody").find("tr").eq(0);-1!==k.inArray(!0,k.map(f,function(B,E){return I.hasClass(B)}))&&(k("tbody tr",this).removeClass(f.join(" ")),r.asDestroyStripes=f.slice());f=[];t=this.getElementsByTagName("thead");0!==t.length&&(wa(r.aoHeader,t[0]),f=La(r));if(null===g.aoColumns)for(t=[],h=0,l=f.length;h<l;h++)t.push(null);else t=g.aoColumns;h=0;for(l=t.length;h<l;h++)Xa(r,f?f[h]:null);Db(r,g.aoColumnDefs,t,function(B,E){Ea(r,B,E)});if(I.length){var W=
107
+ function(B,E){return null!==B.getAttribute("data-"+E)?E:null};k(I[0]).children("th, td").each(function(B,E){var aa=r.aoColumns[B];if(aa.mData===B){var X=W(E,"sort")||W(E,"order");E=W(E,"filter")||W(E,"search");if(null!==X||null!==E)aa.mData={_:B+".display",sort:null!==X?B+".@data-"+X:q,type:null!==X?B+".@data-"+X:q,filter:null!==E?B+".@data-"+E:q},Ea(r,B)}})}var M=r.oFeatures;f=function(){if(g.aaSorting===q){var B=r.aaSorting;h=0;for(l=B.length;h<l;h++)B[h][1]=r.aoColumns[h].asSorting[0]}Qa(r);M.bSort&&
108
+ Q(r,"aoDrawCallback",function(){if(r.bSorted){var X=pa(r),Aa={};k.each(X,function(mb,Ba){Aa[Ba.src]=Ba.dir});H(r,null,"order",[r,X,Aa]);cc(r)}});Q(r,"aoDrawCallback",function(){(r.bSorted||"ssp"===P(r)||M.bDeferRender)&&Qa(r)},"sc");B=p.children("caption").each(function(){this._captionSide=k(this).css("caption-side")});var E=p.children("thead");0===E.length&&(E=k("<thead/>").appendTo(p));r.nTHead=E[0];var aa=p.children("tbody");0===aa.length&&(aa=k("<tbody/>").insertAfter(E));r.nTBody=aa[0];E=p.children("tfoot");
109
+ 0===E.length&&0<B.length&&(""!==r.oScroll.sX||""!==r.oScroll.sY)&&(E=k("<tfoot/>").appendTo(p));0===E.length||0===E.children().length?p.addClass(A.sNoFooter):0<E.length&&(r.nTFoot=E[0],wa(r.aoFooter,r.nTFoot));if(g.aaData)for(h=0;h<g.aaData.length;h++)ea(r,g.aaData[h]);else(r.bDeferLoading||"dom"==P(r))&&Ha(r,k(r.nTBody).children("tr"));r.aiDisplay=r.aiDisplayMaster.slice();r.bInitialised=!0;!1===n&&za(r)};g.bStateSave?(M.bStateSave=!0,Q(r,"aoDrawCallback",Ra,"state_save"),dc(r,g,f)):f()}});b=null;
110
+ return this},L,w,J,sb={},gc=/[\r\n\u2028]/g,Ua=/<.*?>/g,tc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,uc=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\|\$|\^|\-)/g,rb=/['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,Z=function(a){return a&&!0!==a&&"-"!==a?!1:!0},hc=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},ic=function(a,b){sb[b]||(sb[b]=new RegExp(ib(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(sb[b],"."):
111
+ a},tb=function(a,b,c){var d="string"===typeof a;if(Z(a))return!0;b&&d&&(a=ic(a,b));c&&d&&(a=a.replace(rb,""));return!isNaN(parseFloat(a))&&isFinite(a)},jc=function(a,b,c){return Z(a)?!0:Z(a)||"string"===typeof a?tb(a.replace(Ua,""),b,c)?!0:null:null},T=function(a,b,c){var d=[],e=0,f=a.length;if(c!==q)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<f;e++)a[e]&&d.push(a[e][b]);return d},Da=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!==q)for(;f<g;f++)a[b[f]][c]&&e.push(a[b[f]][c][d]);else for(;f<
112
+ g;f++)e.push(a[b[f]][c]);return e},qa=function(a,b){var c=[];if(b===q){b=0;var d=a}else d=b,b=a;for(a=b;a<d;a++)c.push(a);return c},kc=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},Ka=function(a){a:{if(!(2>a.length)){var b=a.slice().sort();for(var c=b[0],d=1,e=b.length;d<e;d++){if(b[d]===c){b=!1;break a}c=b[d]}}b=!0}if(b)return a.slice();b=[];e=a.length;var f,g=0;d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b},lc=function(a,
113
+ b){if(Array.isArray(b))for(var c=0;c<b.length;c++)lc(a,b[c]);else a.push(b);return a};Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)});String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")});u.util={throttle:function(a,b){var c=b!==q?b:200,d,e;return function(){var f=this,g=+new Date,h=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d=q;a.apply(f,h)},c)):(d=g,a.apply(f,
114
+ h))}},escapeRegex:function(a){return a.replace(uc,"\\$1")}};var R=function(a,b,c){a[b]!==q&&(a[c]=a[b])},ua=/\[.*?\]$/,oa=/\(\)$/,ib=u.util.escapeRegex,Pa=k("<div>")[0],rc=Pa.textContent!==q,sc=/<.*?>/g,gb=u.util.throttle,mc=[],N=Array.prototype,vc=function(a){var b,c=u.settings,d=k.map(c,function(f,g){return f.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase()){var e=k.inArray(a,d);return-1!==e?[c[e]]:null}if(a&&"function"===typeof a.settings)return a.settings().toArray();
115
+ "string"===typeof a?b=k(a):a instanceof k&&(b=a)}else return[];if(b)return b.map(function(f){e=k.inArray(this,d);return-1!==e?c[e]:null}).toArray()};var C=function(a,b){if(!(this instanceof C))return new C(a,b);var c=[],d=function(g){(g=vc(g))&&c.push.apply(c,g)};if(Array.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]);else d(a);this.context=Ka(c);b&&k.merge(this,b);this.selector={rows:null,cols:null,opts:null};C.extend(this,this,mc)};u.Api=C;k.extend(C.prototype,{any:function(){return 0!==this.count()},
116
+ concat:N.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new C(b[a],this[a]):null},filter:function(a){var b=[];if(N.filter)b=N.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new C(this.context,b)},flatten:function(){var a=[];return new C(this.context,a.concat.apply(a,this.toArray()))},
117
+ join:N.join,indexOf:N.indexOf||function(a,b){b=b||0;for(var c=this.length;b<c;b++)if(this[b]===a)return b;return-1},iterator:function(a,b,c,d){var e=[],f,g,h=this.context,l,n=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);var m=0;for(f=h.length;m<f;m++){var p=new C(h[m]);if("table"===b){var t=c.call(p,h[m],m);t!==q&&e.push(t)}else if("columns"===b||"rows"===b)t=c.call(p,h[m],this[m],m),t!==q&&e.push(t);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){var v=this[m];"column-rows"===
118
+ b&&(l=Va(h[m],n.opts));var x=0;for(g=v.length;x<g;x++)t=v[x],t="cell"===b?c.call(p,h[m],t.row,t.column,m,x):c.call(p,h[m],t,m,x,l),t!==q&&e.push(t)}}return e.length||d?(a=new C(h,a?e.concat.apply([],e):e),b=a.selector,b.rows=n.rows,b.cols=n.cols,b.opts=n.opts,a):this},lastIndexOf:N.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(N.map)b=N.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],
119
+ c));return new C(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:N.pop,push:N.push,reduce:N.reduce||function(a,b){return Cb(this,a,b,0,this.length,1)},reduceRight:N.reduceRight||function(a,b){return Cb(this,a,b,this.length-1,-1,-1)},reverse:N.reverse,selector:null,shift:N.shift,slice:function(){return new C(this.context,this)},sort:N.sort,splice:N.splice,toArray:function(){return N.slice.call(this)},to$:function(){return k(this)},toJQuery:function(){return k(this)},
120
+ unique:function(){return new C(this.context,Ka(this))},unshift:N.unshift});C.extend=function(a,b,c){if(c.length&&b&&(b instanceof C||b.__dt_wrapper)){var d,e=function(h,l,n){return function(){var m=l.apply(h,arguments);C.extend(m,m,n.methodExt);return m}};var f=0;for(d=c.length;f<d;f++){var g=c[f];b[g.name]="function"===g.type?e(a,g.val,g):"object"===g.type?{}:g.val;b[g.name].__dt_wrapper=!0;C.extend(a,b[g.name],g.propExt)}}};C.register=w=function(a,b){if(Array.isArray(a))for(var c=0,d=a.length;c<
121
+ d;c++)C.register(a[c],b);else{d=a.split(".");var e=mc,f;a=0;for(c=d.length;a<c;a++){var g=(f=-1!==d[a].indexOf("()"))?d[a].replace("()",""):d[a];a:{var h=0;for(var l=e.length;h<l;h++)if(e[h].name===g){h=e[h];break a}h=null}h||(h={name:g,val:{},methodExt:[],propExt:[],type:"object"},e.push(h));a===c-1?(h.val=b,h.type="function"===typeof b?"function":k.isPlainObject(b)?"object":"other"):e=f?h.methodExt:h.propExt}}};C.registerPlural=J=function(a,b,c){C.register(a,c);C.register(b,function(){var d=c.apply(this,
122
+ arguments);return d===this?this:d instanceof C?d.length?Array.isArray(d[0])?new C(d.context,d[0]):d[0]:q:d})};var nc=function(a,b){if(Array.isArray(a))return k.map(a,function(d){return nc(d,b)});if("number"===typeof a)return[b[a]];var c=k.map(b,function(d,e){return d.nTable});return k(c).filter(a).map(function(d){d=k.inArray(this,c);return b[d]}).toArray()};w("tables()",function(a){return a!==q&&null!==a?new C(nc(a,this.context)):this});w("table()",function(a){a=this.tables(a);var b=a.context;return b.length?
123
+ new C(b[0]):a});J("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});J("tables().body()","table().body()",function(){return this.iterator("table",function(a){return a.nTBody},1)});J("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});J("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});J("tables().containers()","table().container()",
124
+ function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});w("draw()",function(a){return this.iterator("table",function(b){"page"===a?fa(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),ja(b,!1===a))})});w("page()",function(a){return a===q?this.page.info().page:this.iterator("table",function(b){lb(b,a)})});w("page.info()",function(a){if(0===this.context.length)return q;a=this.context[0];var b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),
125
+ e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,serverSide:"ssp"===P(a)}});w("page.len()",function(a){return a===q?0!==this.context.length?this.context[0]._iDisplayLength:q:this.iterator("table",function(b){jb(b,a)})});var oc=function(a,b,c){if(c){var d=new C(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==P(a))ja(a,b);else{U(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();Ma(a,[],function(f){Ia(a);
126
+ f=Na(a,f);for(var g=0,h=f.length;g<h;g++)ea(a,f[g]);ja(a,b);U(a,!1)})}};w("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});w("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});w("ajax.reload()",function(a,b){return this.iterator("table",function(c){oc(c,!1===b,a)})});w("ajax.url()",function(a){var b=this.context;if(a===q){if(0===b.length)return q;b=b[0];return b.ajax?k.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",
127
+ function(c){k.isPlainObject(c.ajax)?c.ajax.url=a:c.ajax=a})});w("ajax.url().load()",function(a,b){return this.iterator("table",function(c){oc(c,!1===b,a)})});var ub=function(a,b,c,d,e){var f=[],g,h,l;var n=typeof b;b&&"string"!==n&&"function"!==n&&b.length!==q||(b=[b]);n=0;for(h=b.length;n<h;n++){var m=b[n]&&b[n].split&&!b[n].match(/[\[\(:]/)?b[n].split(","):[b[n]];var p=0;for(l=m.length;p<l;p++)(g=c("string"===typeof m[p]?m[p].trim():m[p]))&&g.length&&(f=f.concat(g))}a=L.selector[a];if(a.length)for(n=
128
+ 0,h=a.length;n<h;n++)f=a[n](d,e,f);return Ka(f)},vb=function(a){a||(a={});a.filter&&a.search===q&&(a.search=a.filter);return k.extend({search:"none",order:"current",page:"all"},a)},wb=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Va=function(a,b){var c=[],d=a.aiDisplay;var e=a.aiDisplayMaster;var f=b.search;var g=b.order;b=b.page;if("ssp"==P(a))return"removed"===f?[]:qa(0,e.length);if("current"==
129
+ b)for(g=a._iDisplayStart,a=a.fnDisplayEnd();g<a;g++)c.push(d[g]);else if("current"==g||"applied"==g)if("none"==f)c=e.slice();else if("applied"==f)c=d.slice();else{if("removed"==f){var h={};g=0;for(a=d.length;g<a;g++)h[d[g]]=null;c=k.map(e,function(l){return h.hasOwnProperty(l)?null:l})}}else if("index"==g||"original"==g)for(g=0,a=a.aoData.length;g<a;g++)"none"==f?c.push(g):(e=k.inArray(g,d),(-1===e&&"removed"==f||0<=e&&"applied"==f)&&c.push(g));return c},wc=function(a,b,c){var d;return ub("row",b,
130
+ function(e){var f=hc(e),g=a.aoData;if(null!==f&&!c)return[f];d||(d=Va(a,c));if(null!==f&&-1!==k.inArray(f,d))return[f];if(null===e||e===q||""===e)return d;if("function"===typeof e)return k.map(d,function(l){var n=g[l];return e(l,n._aData,n.nTr)?l:null});if(e.nodeName){f=e._DT_RowIndex;var h=e._DT_CellIndex;if(f!==q)return g[f]&&g[f].nTr===e?[f]:[];if(h)return g[h.row]&&g[h.row].nTr===e.parentNode?[h.row]:[];f=k(e).closest("*[data-dt-row]");return f.length?[f.data("dt-row")]:[]}if("string"===typeof e&&
131
+ "#"===e.charAt(0)&&(f=a.aIds[e.replace(/^#/,"")],f!==q))return[f.idx];f=kc(Da(a.aoData,d,"nTr"));return k(f).filter(e).map(function(){return this._DT_RowIndex}).toArray()},a,c)};w("rows()",function(a,b){a===q?a="":k.isPlainObject(a)&&(b=a,a="");b=vb(b);var c=this.iterator("table",function(d){return wc(d,a,b)},1);c.selector.rows=a;c.selector.opts=b;return c});w("rows().nodes()",function(){return this.iterator("row",function(a,b){return a.aoData[b].nTr||q},1)});w("rows().data()",function(){return this.iterator(!0,
132
+ "rows",function(a,b){return Da(a.aoData,b,"_aData")},1)});J("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){b=b.aoData[c];return"search"===a?b._aFilterData:b._aSortData},1)});J("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){va(b,c,a)})});J("rows().indexes()","row().index()",function(){return this.iterator("row",function(a,b){return b},1)});J("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=
133
+ 0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var h=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+h)}return new C(c,b)});J("rows().remove()","row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,h;e.splice(c,1);var l=0;for(g=e.length;l<g;l++){var n=e[l];var m=n.anCells;null!==n.nTr&&(n.nTr._DT_RowIndex=l);if(null!==m)for(n=0,h=m.length;n<h;n++)m[n]._DT_CellIndex.row=l}Ja(b.aiDisplayMaster,c);Ja(b.aiDisplay,c);Ja(a[d],
134
+ c,!1);0<b._iRecordsDisplay&&b._iRecordsDisplay--;kb(b);c=b.rowIdFn(f._aData);c!==q&&delete b.aIds[c]});this.iterator("table",function(b){for(var c=0,d=b.aoData.length;c<d;c++)b.aoData[c].idx=c});return this});w("rows.add()",function(a){var b=this.iterator("table",function(d){var e,f=[];var g=0;for(e=a.length;g<e;g++){var h=a[g];h.nodeName&&"TR"===h.nodeName.toUpperCase()?f.push(Ha(d,h)[0]):f.push(ea(d,h))}return f},1),c=this.rows(-1);c.pop();k.merge(c,b);return c});w("row()",function(a,b){return wb(this.rows(a,
135
+ b))});w("row().data()",function(a){var b=this.context;if(a===q)return b.length&&this.length?b[0].aoData[this[0]]._aData:q;var c=b[0].aoData[this[0]];c._aData=a;Array.isArray(a)&&c.nTr&&c.nTr.id&&da(b[0].rowId)(a,c.nTr.id);va(b[0],this[0],"data");return this});w("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});w("row.add()",function(a){a instanceof k&&a.length&&(a=a[0]);var b=this.iterator("table",function(c){return a.nodeName&&"TR"===
136
+ a.nodeName.toUpperCase()?Ha(c,a)[0]:ea(c,a)});return this.row(b[0])});var xc=function(a,b,c,d){var e=[],f=function(g,h){if(Array.isArray(g)||g instanceof k)for(var l=0,n=g.length;l<n;l++)f(g[l],h);else g.nodeName&&"tr"===g.nodeName.toLowerCase()?e.push(g):(l=k("<tr><td></td></tr>").addClass(h),k("td",l).addClass(h).html(g)[0].colSpan=na(a),e.push(l[0]))};f(c,d);b._details&&b._details.detach();b._details=k(e);b._detailsShow&&b._details.insertAfter(b.nTr)},xb=function(a,b){var c=a.context;c.length&&
137
+ (a=c[0].aoData[b!==q?b:a[0]])&&a._details&&(a._details.remove(),a._detailsShow=q,a._details=q)},pc=function(a,b){var c=a.context;c.length&&a.length&&(a=c[0].aoData[a[0]],a._details&&((a._detailsShow=b)?a._details.insertAfter(a.nTr):a._details.detach(),yc(c[0])))},yc=function(a){var b=new C(a),c=a.aoData;b.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<T(c,"_details").length&&(b.on("draw.dt.DT_details",function(d,e){a===e&&b.rows({page:"current"}).eq(0).each(function(f){f=
138
+ c[f];f._detailsShow&&f._details.insertAfter(f.nTr)})}),b.on("column-visibility.dt.DT_details",function(d,e,f,g){if(a===e)for(e=na(e),f=0,g=c.length;f<g;f++)d=c[f],d._details&&d._details.children("td[colspan]").attr("colspan",e)}),b.on("destroy.dt.DT_details",function(d,e){if(a===e)for(d=0,e=c.length;d<e;d++)c[d]._details&&xb(b,d)}))};w("row().child()",function(a,b){var c=this.context;if(a===q)return c.length&&this.length?c[0].aoData[this[0]]._details:q;!0===a?this.child.show():!1===a?xb(this):c.length&&
139
+ this.length&&xc(c[0],c[0].aoData[this[0]],a,b);return this});w(["row().child.show()","row().child().show()"],function(a){pc(this,!0);return this});w(["row().child.hide()","row().child().hide()"],function(){pc(this,!1);return this});w(["row().child.remove()","row().child().remove()"],function(){xb(this);return this});w("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var zc=/^([^:]+):(name|visIdx|visible)$/,qc=function(a,
140
+ b,c,d,e){c=[];d=0;for(var f=e.length;d<f;d++)c.push(S(a,e[d],b));return c},Ac=function(a,b,c){var d=a.aoColumns,e=T(d,"sName"),f=T(d,"nTh");return ub("column",b,function(g){var h=hc(g);if(""===g)return qa(d.length);if(null!==h)return[0<=h?h:d.length+h];if("function"===typeof g){var l=Va(a,c);return k.map(d,function(p,t){return g(t,qc(a,t,0,0,l),f[t])?t:null})}var n="string"===typeof g?g.match(zc):"";if(n)switch(n[2]){case "visIdx":case "visible":h=parseInt(n[1],10);if(0>h){var m=k.map(d,function(p,
141
+ t){return p.bVisible?t:null});return[m[m.length+h]]}return[sa(a,h)];case "name":return k.map(e,function(p,t){return p===n[1]?t:null});default:return[]}if(g.nodeName&&g._DT_CellIndex)return[g._DT_CellIndex.column];h=k(f).filter(g).map(function(){return k.inArray(this,f)}).toArray();if(h.length||!g.nodeName)return h;h=k(g).closest("*[data-dt-column]");return h.length?[h.data("dt-column")]:[]},a,c)};w("columns()",function(a,b){a===q?a="":k.isPlainObject(a)&&(b=a,a="");b=vb(b);var c=this.iterator("table",
142
+ function(d){return Ac(d,a,b)},1);c.selector.cols=a;c.selector.opts=b;return c});J("columns().header()","column().header()",function(a,b){return this.iterator("column",function(c,d){return c.aoColumns[d].nTh},1)});J("columns().footer()","column().footer()",function(a,b){return this.iterator("column",function(c,d){return c.aoColumns[d].nTf},1)});J("columns().data()","column().data()",function(){return this.iterator("column-rows",qc,1)});J("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",
143
+ function(a,b){return a.aoColumns[b].mData},1)});J("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return Da(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});J("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return Da(a.aoData,e,"anCells",b)},1)});J("columns().visible()","column().visible()",function(a,b){var c=this,d=this.iterator("column",function(e,f){if(a===q)return e.aoColumns[f].bVisible;
144
+ var g=e.aoColumns,h=g[f],l=e.aoData,n;if(a!==q&&h.bVisible!==a){if(a){var m=k.inArray(!0,T(g,"bVisible"),f+1);g=0;for(n=l.length;g<n;g++){var p=l[g].nTr;e=l[g].anCells;p&&p.insertBefore(e[f],e[m]||null)}}else k(T(e.aoData,"anCells",f)).detach();h.bVisible=a}});a!==q&&this.iterator("table",function(e){xa(e,e.aoHeader);xa(e,e.aoFooter);e.aiDisplay.length||k(e.nTBody).find("td[colspan]").attr("colspan",na(e));Ra(e);c.iterator("column",function(f,g){H(f,null,"column-visibility",[f,g,a,b])});(b===q||b)&&
145
+ c.columns.adjust()});return d});J("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?ta(b,c):c},1)});w("columns.adjust()",function(){return this.iterator("table",function(a){ra(a)},1)});w("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return sa(c,b);if("fromData"===a||"toVisible"===a)return ta(c,b)}});w("column()",function(a,b){return wb(this.columns(a,b))});var Bc=
146
+ function(a,b,c){var d=a.aoData,e=Va(a,c),f=kc(Da(d,e,"anCells")),g=k(lc([],f)),h,l=a.aoColumns.length,n,m,p,t,v,x;return ub("cell",b,function(r){var A="function"===typeof r;if(null===r||r===q||A){n=[];m=0;for(p=e.length;m<p;m++)for(h=e[m],t=0;t<l;t++)v={row:h,column:t},A?(x=d[h],r(v,S(a,h,t),x.anCells?x.anCells[t]:null)&&n.push(v)):n.push(v);return n}if(k.isPlainObject(r))return r.column!==q&&r.row!==q&&-1!==k.inArray(r.row,e)?[r]:[];A=g.filter(r).map(function(D,I){return{row:I._DT_CellIndex.row,
147
+ column:I._DT_CellIndex.column}}).toArray();if(A.length||!r.nodeName)return A;x=k(r).closest("*[data-dt-row]");return x.length?[{row:x.data("dt-row"),column:x.data("dt-column")}]:[]},a,c)};w("cells()",function(a,b,c){k.isPlainObject(a)&&(a.row===q?(c=a,a=null):(c=b,b=null));k.isPlainObject(b)&&(c=b,b=null);if(null===b||b===q)return this.iterator("table",function(m){return Bc(m,a,vb(c))});var d=c?{page:c.page,order:c.order,search:c.search}:{},e=this.columns(b,d),f=this.rows(a,d),g,h,l,n;d=this.iterator("table",
148
+ function(m,p){m=[];g=0;for(h=f[p].length;g<h;g++)for(l=0,n=e[p].length;l<n;l++)m.push({row:f[p][g],column:e[p][l]});return m},1);d=c&&c.selected?this.cells(d,c):d;k.extend(d.selector,{cols:b,rows:a,opts:c});return d});J("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&a.anCells?a.anCells[c]:q},1)});w("cells().data()",function(){return this.iterator("cell",function(a,b,c){return S(a,b,c)},1)});J("cells().cache()","cell().cache()",function(a){a=
149
+ "search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});J("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return S(b,c,d,a)},1)});J("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,b,c){return{row:b,column:c,columnVisible:ta(a,c)}},1)});J("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){va(b,c,a,d)})});w("cell()",
150
+ function(a,b,c){return wb(this.cells(a,b,c))});w("cell().data()",function(a){var b=this.context,c=this[0];if(a===q)return b.length&&c.length?S(b[0],c[0].row,c[0].column):q;Eb(b[0],c[0].row,c[0].column,a);va(b[0],c[0].row,"data",c[0].column);return this});w("order()",function(a,b){var c=this.context;if(a===q)return 0!==c.length?c[0].aaSorting:q;"number"===typeof a?a=[[a,b]]:a.length&&!Array.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(d){d.aaSorting=
151
+ a.slice()})});w("order.listener()",function(a,b,c){return this.iterator("table",function(d){eb(d,a,b,c)})});w("order.fixed()",function(a){if(!a){var b=this.context;b=b.length?b[0].aaSortingFixed:q;return Array.isArray(b)?{pre:b}:b}return this.iterator("table",function(c){c.aaSortingFixed=k.extend(!0,{},a)})});w(["columns().order()","column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];k.each(b[d],function(f,g){e.push([g,a])});c.aaSorting=e})});w("search()",
152
+ function(a,b,c,d){var e=this.context;return a===q?0!==e.length?e[0].oPreviousSearch.sSearch:q:this.iterator("table",function(f){f.oFeatures.bFilter&&ya(f,k.extend({},f.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});J("columns().search()","column().search()",function(a,b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===q)return g[f].sSearch;e.oFeatures.bFilter&&(k.extend(g[f],{sSearch:a+"",bRegex:null===
153
+ b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),ya(e,e.oPreviousSearch,1))})});w("state()",function(){return this.context.length?this.context[0].oSavedState:null});w("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});w("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null});w("state.save()",function(){return this.iterator("table",function(a){Ra(a)})});u.versionCheck=u.fnVersionCheck=function(a){var b=
154
+ u.version.split(".");a=a.split(".");for(var c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};u.isDataTable=u.fnIsDataTable=function(a){var b=k(a).get(0),c=!1;if(a instanceof u.Api)return!0;k.each(u.settings,function(d,e){d=e.nScrollHead?k("table",e.nScrollHead)[0]:null;var f=e.nScrollFoot?k("table",e.nScrollFoot)[0]:null;if(e.nTable===b||d===b||f===b)c=!0});return c};u.tables=u.fnTables=function(a){var b=!1;k.isPlainObject(a)&&(b=a.api,a=a.visible);
155
+ var c=k.map(u.settings,function(d){if(!a||a&&k(d.nTable).is(":visible"))return d.nTable});return b?new C(c):c};u.camelToHungarian=O;w("$()",function(a,b){b=this.rows(b).nodes();b=k(b);return k([].concat(b.filter(a).toArray(),b.find(a).toArray()))});k.each(["on","one","off"],function(a,b){w(b+"()",function(){var c=Array.prototype.slice.call(arguments);c[0]=k.map(c[0].split(/\s/),function(e){return e.match(/\.dt\b/)?e:e+".dt"}).join(" ");var d=k(this.tables().nodes());d[b].apply(d,c);return this})});
156
+ w("clear()",function(){return this.iterator("table",function(a){Ia(a)})});w("settings()",function(){return new C(this.context,this.context)});w("init()",function(){var a=this.context;return a.length?a[0].oInit:null});w("data()",function(){return this.iterator("table",function(a){return T(a.aoData,"_aData")}).flatten()});w("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,h=b.nTFoot,l=k(e);f=k(f);
157
+ var n=k(b.nTableWrapper),m=k.map(b.aoData,function(t){return t.nTr}),p;b.bDestroying=!0;H(b,"aoDestroyCallback","destroy",[b]);a||(new C(b)).columns().visible(!0);n.off(".DT").find(":not(tbody *)").off(".DT");k(y).off(".DT-"+b.sInstance);e!=g.parentNode&&(l.children("thead").detach(),l.append(g));h&&e!=h.parentNode&&(l.children("tfoot").detach(),l.append(h));b.aaSorting=[];b.aaSortingFixed=[];Qa(b);k(m).removeClass(b.asStripeClasses.join(" "));k("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+
158
+ " "+d.sSortableDesc+" "+d.sSortableNone);f.children().detach();f.append(m);g=a?"remove":"detach";l[g]();n[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),l.css("width",b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&&f.children().each(function(t){k(this).addClass(b.asDestroyStripes[t%p])}));c=k.inArray(b,u.settings);-1!==c&&u.settings.splice(c,1)})});k.each(["column","row","cell"],function(a,b){w(b+"s().every()",function(c){var d=this.selector.opts,e=this;return this.iterator(b,
159
+ function(f,g,h,l,n){c.call(e[b](g,"cell"===b?h:d,"cell"===b?d:q),g,h,l,n)})})});w("i18n()",function(a,b,c){var d=this.context[0];a=ia(a)(d.oLanguage);a===q&&(a=b);c!==q&&k.isPlainObject(a)&&(a=a[c]!==q?a[c]:a._);return a.replace("%d",c)});u.version="1.10.25";u.settings=[];u.models={};u.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};u.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};u.models.oColumn=
160
+ {idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};u.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,
161
+ aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,
162
+ fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){return{}}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,
163
+ iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",
164
+ sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:k.extend({},u.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};G(u.defaults);u.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc",
165
+ "desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};G(u.defaults.column);u.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,
166
+ sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],
167
+ aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,jqXHR:null,json:q,oAjaxData:q,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,
168
+ iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==P(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==P(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;
169
+ return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};u.ext=L={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:u.fnVersionCheck,
170
+ iApiIndex:0,oJUIClasses:{},sVersion:u.version};k.extend(L,{afnFiltering:L.search,aTypes:L.type.detect,ofnSearch:L.type.search,oSort:L.type.order,afnSortData:L.order,aoFeatures:L.feature,oApi:L.internal,oStdClasses:L.classes,oPagination:L.pager});k.extend(u.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",
171
+ sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_desc_disabled",sSortableDesc:"sorting_asc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",
172
+ sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var ec=u.ext.pager;k.extend(ec,{simple:function(a,b){return["previous","next"]},full:function(a,b){return["first","previous","next","last"]},numbers:function(a,b){return[Ca(a,b)]},simple_numbers:function(a,b){return["previous",Ca(a,b),"next"]},
173
+ full_numbers:function(a,b){return["first","previous",Ca(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",Ca(a,b),"last"]},_numbers:Ca,numbers_length:7});k.extend(!0,u.ext.renderer,{pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,h=a.oLanguage.oPaginate,l=a.oLanguage.oAria.paginate||{},n,m,p=0,t=function(x,r){var A,D=g.sPageButtonDisabled,I=function(E){lb(a,E.data.action,!0)};var W=0;for(A=r.length;W<A;W++){var M=r[W];if(Array.isArray(M)){var B=k("<"+(M.DT_el||"div")+"/>").appendTo(x);
174
+ t(B,M)}else{n=null;m=M;B=a.iTabIndex;switch(M){case "ellipsis":x.append('<span class="ellipsis">&#x2026;</span>');break;case "first":n=h.sFirst;0===e&&(B=-1,m+=" "+D);break;case "previous":n=h.sPrevious;0===e&&(B=-1,m+=" "+D);break;case "next":n=h.sNext;if(0===f||e===f-1)B=-1,m+=" "+D;break;case "last":n=h.sLast;if(0===f||e===f-1)B=-1,m+=" "+D;break;default:n=a.fnFormatNumber(M+1),m=e===M?g.sPageButtonActive:""}null!==n&&(B=k("<a>",{"class":g.sPageButton+" "+m,"aria-controls":a.sTableId,"aria-label":l[M],
175
+ "data-dt-idx":p,tabindex:B,id:0===c&&"string"===typeof M?a.sTableId+"_"+M:null}).html(n).appendTo(x),pb(B,{action:M},I),p++)}}};try{var v=k(b).find(z.activeElement).data("dt-idx")}catch(x){}t(k(b).empty(),d);v!==q&&k(b).find("[data-dt-idx="+v+"]").trigger("focus")}}});k.extend(u.ext.type.detect,[function(a,b){b=b.oLanguage.sDecimal;return tb(a,b)?"num"+b:null},function(a,b){if(a&&!(a instanceof Date)&&!tc.test(a))return null;b=Date.parse(a);return null!==b&&!isNaN(b)||Z(a)?"date":null},function(a,
176
+ b){b=b.oLanguage.sDecimal;return tb(a,b,!0)?"num-fmt"+b:null},function(a,b){b=b.oLanguage.sDecimal;return jc(a,b)?"html-num"+b:null},function(a,b){b=b.oLanguage.sDecimal;return jc(a,b,!0)?"html-num-fmt"+b:null},function(a,b){return Z(a)||"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);k.extend(u.ext.type.search,{html:function(a){return Z(a)?a:"string"===typeof a?a.replace(gc," ").replace(Ua,""):""},string:function(a){return Z(a)?a:"string"===typeof a?a.replace(gc," "):a}});var Ta=function(a,
177
+ b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=ic(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};k.extend(L.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return Z(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return Z(a)?"":"string"===typeof a?a.toLowerCase():a.toString?a.toString():""},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,b){return a<
178
+ b?1:a>b?-1:0}});Wa("");k.extend(!0,u.ext.renderer,{header:{_:function(a,b,c,d){k(a.nTable).on("order.dt.DT",function(e,f,g,h){a===f&&(e=c.idx,b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass("asc"==h[e]?d.sSortAsc:"desc"==h[e]?d.sSortDesc:c.sSortingClass))})},jqueryui:function(a,b,c,d){k("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(k("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);k(a.nTable).on("order.dt.DT",function(e,f,g,h){a===f&&(e=c.idx,b.removeClass(d.sSortAsc+
179
+ " "+d.sSortDesc).addClass("asc"==h[e]?d.sSortAsc:"desc"==h[e]?d.sSortDesc:c.sSortingClass),b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass("asc"==h[e]?d.sSortJUIAsc:"desc"==h[e]?d.sSortJUIDesc:c.sSortingClassJUI))})}}});var yb=function(a){return"string"===typeof a?a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):a};u.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==
180
+ typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return yb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";0===h&&0===parseFloat(f)&&(g="");return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+f+(e||"")}}},text:function(){return{display:yb,filter:yb}}};k.extend(u.ext.internal,{_fnExternApiFunc:fc,_fnBuildAjax:Ma,_fnAjaxUpdate:Gb,_fnAjaxParameters:Pb,_fnAjaxUpdateDraw:Qb,_fnAjaxDataSrc:Na,_fnAddColumn:Xa,_fnColumnOptions:Ea,
181
+ _fnAdjustColumnSizing:ra,_fnVisibleToColumnIndex:sa,_fnColumnIndexToVisible:ta,_fnVisbleColumns:na,_fnGetColumns:Ga,_fnColumnTypes:Za,_fnApplyColumnDefs:Db,_fnHungarianMap:G,_fnCamelToHungarian:O,_fnLanguageCompat:ma,_fnBrowserDetect:Bb,_fnAddData:ea,_fnAddTr:Ha,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==q?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return k.inArray(c,a.aoData[b].anCells)},_fnGetCellData:S,_fnSetCellData:Eb,_fnSplitObjNotation:bb,_fnGetObjectDataFn:ia,
182
+ _fnSetObjectDataFn:da,_fnGetDataMaster:cb,_fnClearTable:Ia,_fnDeleteIndex:Ja,_fnInvalidate:va,_fnGetRowElements:ab,_fnCreateTr:$a,_fnBuildHead:Fb,_fnDrawHead:xa,_fnDraw:fa,_fnReDraw:ja,_fnAddOptionsHtml:Ib,_fnDetectHeader:wa,_fnGetUniqueThs:La,_fnFeatureHtmlFilter:Kb,_fnFilterComplete:ya,_fnFilterCustom:Tb,_fnFilterColumn:Sb,_fnFilter:Rb,_fnFilterCreateSearch:hb,_fnEscapeRegex:ib,_fnFilterData:Ub,_fnFeatureHtmlInfo:Nb,_fnUpdateInfo:Xb,_fnInfoMacros:Yb,_fnInitialise:za,_fnInitComplete:Oa,_fnLengthChange:jb,
183
+ _fnFeatureHtmlLength:Jb,_fnFeatureHtmlPaginate:Ob,_fnPageChange:lb,_fnFeatureHtmlProcessing:Lb,_fnProcessingDisplay:U,_fnFeatureHtmlTable:Mb,_fnScrollDraw:Fa,_fnApplyToChildren:ba,_fnCalculateColumnWidths:Ya,_fnThrottle:gb,_fnConvertToWidth:Zb,_fnGetWidestNode:$b,_fnGetMaxLenString:ac,_fnStringToCss:K,_fnSortFlatten:pa,_fnSort:Hb,_fnSortAria:cc,_fnSortListener:ob,_fnSortAttachListener:eb,_fnSortingClasses:Qa,_fnSortData:bc,_fnSaveState:Ra,_fnLoadState:dc,_fnSettingsFromNode:Sa,_fnLog:ca,_fnMap:V,
184
+ _fnBindAction:pb,_fnCallbackReg:Q,_fnCallbackFire:H,_fnLengthOverflow:kb,_fnRenderer:fb,_fnDataSource:P,_fnRowAttributes:db,_fnExtend:qb,_fnCalculateEnd:function(){}});k.fn.dataTable=u;u.$=k;k.fn.dataTableSettings=u.settings;k.fn.dataTableExt=u.ext;k.fn.DataTable=function(a){return k(this).dataTable(a).api()};k.each(u,function(a,b){k.fn.DataTable[a]=b});return k.fn.dataTable});
public/js/wpel-admin.js CHANGED
@@ -4,125 +4,372 @@
4
  */
5
  /*global jQuery, window*/
6
  jQuery(function ($) {
7
- 'use strict';
8
-
9
- // add custom jQuery show/hide function
10
- $.extend($.fn, {
11
- wpelShow: function () {
12
- var self = this;
13
- this.stop({ clearQueue: true, jumpToEnd: true });
14
- this.fadeIn({ duration: 500, queue: false, complete: function () {
15
- self.removeClass('wpel-hidden');
16
- }});
17
  },
18
- wpelHide: function () {
19
- var self = this;
20
- this.stop({ clearQueue: true, jumpToEnd: true });
21
- this.fadeOut({ duration: 500, queue: false, complete: function () {
22
- self.addClass('wpel-hidden');
23
- }});
24
- }
25
- });
 
 
 
 
 
 
26
 
27
- var $wrapper = $('.wpel-settings-page');
28
 
29
- /**
30
- * Apply Sections Settings
31
- */
32
- $wrapper.on('change', '.js-wpel-apply input', function () {
33
- var applyAll = $(this).is(':checked');
34
- var $items = $wrapper.find('.js-wpel-apply-child');
35
 
36
- if (applyAll) {
37
- $items.wpelHide();
38
- } else {
39
- $items.wpelShow();
40
- }
41
- });
42
 
43
- // trigger immediatly
44
- $wrapper.find('.js-wpel-apply input[type="checkbox"]').change();
45
-
46
- /**
47
- * Link Settings
48
- */
49
- $wrapper.on('change', '.js-icon-type select', function () {
50
- var iconType = $(this).val();
51
- var $itemsChild = $wrapper.find('.js-icon-type-child');
52
- var $itemsDepend = $wrapper.find('.js-icon-type-depend');
53
-
54
- $itemsChild.hide();
55
-
56
- if (iconType === 'image') {
57
- $itemsDepend.wpelShow();
58
- $itemsChild.filter('.js-icon-type-image').wpelShow();
59
- } else if (iconType === 'dashicon') {
60
- $itemsDepend.wpelShow();
61
- $itemsChild.filter('.js-icon-type-dashicon').wpelShow();
62
- } else if (iconType === 'fontawesome') {
63
- $itemsDepend.wpelShow();
64
- $itemsChild.filter('.js-icon-type-fontawesome').wpelShow();
65
- } else {
66
- $itemsDepend.wpelHide();
67
- }
68
- });
69
 
70
- $wrapper.on('change', '.js-apply-settings input[type="checkbox"]', function () {
71
- var $items = $wrapper.find('.form-table tr').not('.js-apply-settings');
 
 
 
 
 
72
 
73
- if ($(this).prop('checked')) {
74
- $items.wpelShow();
75
- $wrapper.find('.js-icon-type select').change();
76
- } else {
77
- $items.wpelHide();
78
- }
79
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
 
81
- // trigger immediatly
82
- $wrapper.find('.js-apply-settings input[type="checkbox"]').change();
83
 
 
 
 
 
84
 
85
- /**
86
- * Support
87
- * Copy to clipboard
88
- */
89
- $wrapper.on('click', '.js-wpel-copy', function (e) {
90
- e.preventDefault();
91
 
92
- var node = $wrapper.find('.js-wpel-copy-target').get(0);
93
- node.select();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
- var range = document.createRange();
96
- range.selectNode(node);
97
- window.getSelection().addRange(range);
 
 
 
 
 
 
 
 
98
 
99
- try {
100
- document.execCommand('copy');
101
- } catch(err) {
102
- console.log('Unable to copy');
 
 
 
 
103
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  });
105
 
106
- /**
107
- * Help documentation links/buttons
108
- */
109
- $wrapper.on('click', '[data-wpel-help]', function () {
110
- var helpKey = $(this).data('wpel-help');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
 
112
- if (helpKey) {
113
- // activate given tab
114
- $('#tab-link-'+ helpKey +' a').click();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  } else {
116
- // activate first tab
117
- $('.contextual-help-tabs li a').first().click();
118
  }
 
 
 
 
 
 
 
 
 
119
 
120
- $('#contextual-help-link[aria-expanded="false"]').click();
121
- });
 
 
 
 
 
 
122
 
123
- // show current tab
124
- $wrapper.find('form').wpelShow();
125
- // for network pages
126
- $('.wpel-network-page').find('form').wpelShow();
127
-
128
  });
4
  */
5
  /*global jQuery, window*/
6
  jQuery(function ($) {
7
+ // add custom jQuery show/hide function
8
+ $.extend($.fn, {
9
+ wpelShow: function () {
10
+ var self = this;
11
+ this.stop({ clearQueue: true, jumpToEnd: true });
12
+ this.fadeIn({
13
+ duration: 500,
14
+ queue: false,
15
+ complete: function () {
16
+ self.removeClass("wpel-hidden");
17
  },
18
+ });
19
+ },
20
+ wpelHide: function () {
21
+ var self = this;
22
+ this.stop({ clearQueue: true, jumpToEnd: true });
23
+ this.fadeOut({
24
+ duration: 500,
25
+ queue: false,
26
+ complete: function () {
27
+ self.addClass("wpel-hidden");
28
+ },
29
+ });
30
+ },
31
+ });
32
 
33
+ var $wrapper = $(".wpel-settings-page");
34
 
35
+ /**
36
+ * Apply Sections Settings
37
+ */
38
+ $wrapper.on("change", ".js-wpel-apply input", function () {
39
+ var applyAll = $(this).is(":checked");
40
+ var $items = $wrapper.find(".js-wpel-apply-child");
41
 
42
+ if (applyAll) {
43
+ $items.wpelHide();
44
+ } else {
45
+ $items.wpelShow();
46
+ }
47
+ });
48
 
49
+ // trigger immediatly
50
+ $wrapper.find('.js-wpel-apply input[type="checkbox"]').change();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
+ /**
53
+ * Link Settings
54
+ */
55
+ $wrapper.on("change", ".js-icon-type select", function () {
56
+ var iconType = $(this).val();
57
+ var $itemsChild = $wrapper.find(".js-icon-type-child");
58
+ var $itemsDepend = $wrapper.find(".js-icon-type-depend");
59
 
60
+ $itemsChild.hide();
61
+
62
+ if (iconType === "image") {
63
+ $itemsDepend.wpelShow();
64
+ $itemsChild.filter(".js-icon-type-image").wpelShow();
65
+ } else if (iconType === "dashicon") {
66
+ $itemsDepend.wpelShow();
67
+ $itemsChild.filter(".js-icon-type-dashicon").wpelShow();
68
+ } else if (iconType === "fontawesome") {
69
+ $itemsDepend.wpelShow();
70
+ $itemsChild.filter(".js-icon-type-fontawesome").wpelShow();
71
+ } else {
72
+ $itemsDepend.wpelHide();
73
+ }
74
+ });
75
+
76
+ $wrapper.on("change", '.js-apply-settings input[type="checkbox"]', function () {
77
+ var $items = $wrapper.find(".form-table tr").not(".js-apply-settings");
78
+
79
+ if ($(this).prop("checked")) {
80
+ $items.wpelShow();
81
+ $wrapper.find(".js-icon-type select").change();
82
+ } else {
83
+ $items.wpelHide();
84
+ }
85
+ });
86
+
87
+ // trigger immediatly
88
+ $wrapper.find('.js-apply-settings input[type="checkbox"]').change();
89
+
90
+ /**
91
+ * Support
92
+ * Copy to clipboard
93
+ */
94
+ $wrapper.on("click", ".js-wpel-copy", function (e) {
95
+ e.preventDefault();
96
+
97
+ var node = $wrapper.find(".js-wpel-copy-target").get(0);
98
+ node.select();
99
+
100
+ var range = document.createRange();
101
+ range.selectNode(node);
102
+ window.getSelection().addRange(range);
103
+
104
+ try {
105
+ document.execCommand("copy");
106
+ } catch (err) {
107
+ }
108
+ });
109
+
110
+ /**
111
+ * Help documentation links/buttons
112
+ */
113
+ $wrapper.on("click", "[data-wpel-help]", function () {
114
+ var helpKey = $(this).data("wpel-help");
115
+
116
+ if (helpKey) {
117
+ // activate given tab
118
+ $("#tab-link-" + helpKey + " a").click();
119
+ } else {
120
+ // activate first tab
121
+ $(".contextual-help-tabs li a").first().click();
122
+ }
123
 
124
+ $('#contextual-help-link[aria-expanded="false"]').click();
125
+ });
126
 
127
+ // show current tab
128
+ $wrapper.find("form").wpelShow();
129
+ // for network pages
130
+ $(".wpel-network-page").find("form").wpelShow();
131
 
132
+ let check_links_timeout;
 
 
 
 
 
133
 
134
+ $wrapper.on("click", ".check-links", function (e) {
135
+ e.preventDefault();
136
+
137
+ check_links($(this).data("force"));
138
+ if (!$(this).data("force")) {
139
+ $("#lh_results").html('<tr class="lh-results-loader"><td><img src=' + wpel.loader + " /><br />Generating list of pages</td></tr>");
140
+ }
141
+ });
142
+
143
+ const urlParams = new URLSearchParams(window.location.search);
144
+ const current_tab = decodeURI(urlParams.get("tab"));
145
+
146
+ if ((current_tab == 'null' || current_tab == null || current_tab == "link-checking") && wpel.link_checking_enabled) {
147
+ check_links();
148
+ }
149
+
150
+ function check_links(force) {
151
+ $("#lh_results").show();
152
+ let loader_html = '<img class="wpel-loader" src=' + wpel.loader + " />";
153
+ if (force) {
154
+ clearTimeout(check_links_timeout);
155
+ }
156
+ $.ajax({
157
+ url: ajaxurl,
158
+ method: "POST",
159
+ crossDomain: true,
160
+ dataType: "json",
161
+ timeout: 30000,
162
+ data: {
163
+ _ajax_nonce: wpel.nonce_ajax,
164
+ action: "wpel_run_tool",
165
+ force: force,
166
+ tool: "check_links",
167
+ },
168
+ })
169
+ .done(function (response) {
170
+ if (response.success == true) {
171
+ if (force == true) {
172
+ location.reload();
173
+ return;
174
+ }
175
+
176
+ if (response.data.status == "scan_pending" || response.data.status == "pending" || response.data.status == "finished") {
177
+ var total_pages = 0;
178
+ var total_pages_links = 0;
179
+ var total_links = 0;
180
+ var total_finished = 0;
181
+
182
+ for (page in response.data.pages) {
183
+ total_pages++;
184
+ var page_id = page.replace(/\/|\:|\./g, "");
185
+ var html = "";
186
+
187
+ html += '<td class="lh-page-href">';
188
+ if (response.data.pages[page].title && response.data.pages[page].title.length > 0) {
189
+ html += response.data.pages[page].title + " - ";
190
+ }
191
+ html += '<a href="' + page + '" target="_blank">' + page + '<span class="dashicons dashicons-external"></span></a>';
192
+ html += "</td>";
193
+
194
+ html += '<td class="lh-results-stats">';
195
+ html += '<span class="lh-results-links-total">' + response.data.pages[page].links_total + " links</span>";
196
+ html += '<span class="lh-results-links-finished">' + response.data.pages[page].links_finished + " scanned</span>";
197
+ if(response.data.pages[page].links_error > 0){
198
+ html += '<span class="lh-results-links-error">' + response.data.pages[page].links_error + " errors</span>";
199
+ }
200
+ html += "</td>";
201
+
202
+ html += "<td>";
203
+ //Show loader
204
+ total_links+=response.data.pages[page].links_total;
205
+ total_finished+=response.data.pages[page].links_error + response.data.pages[page].links_finished;
206
+ if(response.data.pages[page].links_total > 0){
207
+ total_pages_links++;
208
+ }
209
+ if (response.data.pages[page].links_total == 0 || response.data.pages[page].links_total > response.data.pages[page].links_error + response.data.pages[page].links_finished) {
210
+ html += loader_html;
211
+ } else {
212
+ html += '<div class="button button-primary lh-open-analysis">Open Details</div>';
213
+ }
214
+ html += "</td>";
215
+
216
+ if ($("#lh_results #wpel-page-" + page_id).length > 0) {
217
+ if ($("#wpel-page-" + page_id).text() != $("<div>").append(html).text()) {
218
+ $("#wpel-page-" + page_id).html(html);
219
+ }
220
+ } else {
221
+ $("#lh_results").append('<tr class="lh-page" id="wpel-page-' + page_id + '" data-page="' + page + '">' + html + "</tr>");
222
+ }
223
+ }
224
+
225
+ if (total_pages > 0) {
226
+ $(".lh-results-loader").remove();
227
+
228
+ var page_progress = total_pages_links/total_pages * 25;
229
+ var link_progress = total_finished/total_links * 75;
230
+
231
+ if(total_finished < total_links){
232
+ $('#lh-progress-bar-wrapper').show();
233
+ var progress = page_progress + link_progress;
234
+ $('#lh-progress-bar').css('width',progress+'%');
235
+ } else {
236
+ $('#lh-progress-bar-wrapper').hide();
237
+ }
238
 
239
+ $(".lh-search-wrapper").show();
240
+ if (response.data.total_pages > total_pages) {
241
+ var unscanned_pages = response.data.total_pages - total_pages;
242
+ $("#lh_pro_count").html(unscanned_pages);
243
+ $("#lh_pro").show();
244
+ } else {
245
+ $("#lh_pro").hide();
246
+ }
247
+ } else {
248
+ $(".lh-search-wrapper").hide();
249
+ }
250
 
251
+ if (response.data.status == "pending") {
252
+ check_links_timeout = setTimeout(function () {
253
+ check_links();
254
+ }, 2000);
255
+ }
256
+ }
257
+ } else {
258
+ alert(response.data);
259
  }
260
+ })
261
+ .fail(function (data) {
262
+ alert("An undocumented error occured checking the links");
263
+ });
264
+ } // check_links
265
+
266
+ var analysis_table = false;
267
+ $("#lh_results").on("click", ".lh-open-analysis", function () {
268
+ var page = $(this).parents(".lh-page").attr("data-page");
269
+ var title = $(this).parents(".lh-page").children(".lh-page-href").html();
270
+
271
+ $("#lh_details_title").html(title);
272
+
273
+ if (analysis_table != false) {
274
+ analysis_table.destroy();
275
+ analysis_table = false;
276
+ }
277
+
278
+ analysis_table = $("#lh_page_details").DataTable({
279
+ ajax: ajaxurl + "?action=wpel_run_tool&tool=link_details&link=" + page,
280
+ columnDefs: [
281
+ {
282
+ targets: [0],
283
+ className: "dt-body-center",
284
+ width: 100,
285
+ },
286
+ {
287
+ targets: [1, 2, 3],
288
+ className: "dt-body-left dt-head-center",
289
+ },
290
+ ],
291
+ fixedColumns: true,
292
  });
293
 
294
+ $("#lh_details").show();
295
+ $("body").addClass("body_lh_details_open");
296
+ });
297
+
298
+ $("#lh_details").on("click", ".lh-close", function () {
299
+ $("#lh_details").hide();
300
+ $("body").removeClass("body_lh_details_open");
301
+ });
302
+
303
+ $("#lh-search").on("change, keyup", function () {
304
+ var search_term = $(this).val();
305
+ var $rows = $("#lh_results tr");
306
+ $rows
307
+ .show()
308
+ .filter(function () {
309
+ var text = $(this).text().replace(/\s+/g, " ").toLowerCase();
310
+ return !~text.indexOf(search_term);
311
+ })
312
+ .hide();
313
+ });
314
 
315
+ $("#lh_subscribe_button").on("click", function () {
316
+ if($(this).hasClass('disabled')){
317
+ return false;
318
+ }
319
+ var email = $("#lh_subscribe_email").val();
320
+ $("#lh_subscribe_button_loader").html('<img class="lh-subscribe-loader" src=' + wpel.loader + ' />');
321
+ $('#lh_subscribe_button').addClass('disabled');
322
+ $.ajax({
323
+ url: wpel.lh_url,
324
+ method: "POST",
325
+ crossDomain: true,
326
+ dataType: "json",
327
+ timeout: 30000,
328
+ data: {
329
+ email: email,
330
+ },
331
+ })
332
+ .done(function (response) {
333
+ if (response.success == true) {
334
+ subscribe_message(true, "<b>Thank you!</b> We'll be in touch soon!");
335
+ $('#lh_subscribe_email').hide();
336
+ $('#lh_subscribe_button').hide();
337
+ $.ajax({
338
+ url: ajaxurl,
339
+ method: "POST",
340
+ crossDomain: true,
341
+ dataType: "json",
342
+ timeout: 30000,
343
+ data: {
344
+ _ajax_nonce: wpel.nonce_ajax,
345
+ action: "wpel_run_tool",
346
+ tool: "subscribed",
347
+ },
348
+ }).done(function (response) {
349
+ //
350
+ });
351
  } else {
352
+ subscribe_message(false, response.data);
 
353
  }
354
+ })
355
+ .fail(function (data) {
356
+ subscribe_message(false, "An undocumented error occured.");
357
+ })
358
+ .always(function (data) {
359
+ $(".lh-subscribe-loader").remove();
360
+ $('#lh_subscribe_button').removeClass('disabled');
361
+ });
362
+ });
363
 
364
+ function subscribe_message(success, message) {
365
+ if (success) {
366
+ $("#lh_subscribe_message").removeClass("lh-subscribe-bad");
367
+ $("#lh_subscribe_message").addClass("lh-subscribe-good");
368
+ } else {
369
+ $("#lh_subscribe_message").removeClass("lh-subscribe-good");
370
+ $("#lh_subscribe_message").addClass("lh-subscribe-bad");
371
+ }
372
 
373
+ $("#lh_subscribe_message").html(message).show();
374
+ }
 
 
 
375
  });
public/js/wpel-link-highlighter.js ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * WP External Links Plugin
3
+ * Admin
4
+ */
5
+ /*global jQuery, window*/
6
+ jQuery(function ($) {
7
+ const urlParams = new URLSearchParams(window.location.search);
8
+ let link_to_find = decodeURI(urlParams.get('wpel-link-highlight'));
9
+
10
+ if($('a[href="' + link_to_find + '"]').length == 0){
11
+ if(link_to_find.substr(-1) == '/'){
12
+ link_to_find = link_to_find.slice(0, - 1);
13
+ } else {
14
+ link_to_find = link_to_find + '/';
15
+ }
16
+ }
17
+
18
+ if($('a[href="' + link_to_find + '"]').length == 0){
19
+ link_to_find = link_to_find.replace(window.location.origin,'');
20
+ }
21
+
22
+ if($('a[href="' + link_to_find + '"]').length == 0){
23
+ if(link_to_find.substr(-1) == '/'){
24
+ link_to_find = link_to_find.slice(0, - 1);
25
+ } else {
26
+ link_to_find = link_to_find + '/';
27
+ }
28
+ }
29
+
30
+ if($('a[href="' + link_to_find + '"]').length == 0){
31
+ alert('Link not found ' + link_to_find);
32
+ } else {
33
+ $('a[href="' + link_to_find + '"]').css('border', '3px dashed #00a1ff').css('box-shadow','1px 1px 18px 4px #00a1ff').css('padding', '10px');
34
+ $([document.documentElement, document.body]).animate({
35
+ scrollTop: $('a[href="' + link_to_find + '"]').offset().top - 100
36
+ }, 100);
37
+ }
38
+ });
readme.txt CHANGED
@@ -1,14 +1,14 @@
1
  === External Links - nofollow, noopener & new window ===
2
  Contributors: WebFactory
3
- Tags: new window, new tab, external links, nofollow, noopener, ugc, sponsored, follow, dofollow, seo, noreferrer, internal links, target, links, link, internal link, external link
4
  Requires at least: 4.2
5
- Tested up to: 5.7
6
- Requires PHP: 5.3
7
- Stable tag: 2.48
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- Manage internal & external links: open in new window or tab, control nofollow, ugc, sponsored & noopener. SEO friendly.
12
 
13
  == Description ==
14
 
@@ -16,6 +16,9 @@ Manage internal & external links: open in new window or tab, control nofollow, u
16
 
17
  WP External Links plugin was completely rebuilt in v2 and has lots of new features, like noopener, ugc and sponsored values for rel; font icons, internal links options and full WPMU support.
18
 
 
 
 
19
  = Features =
20
  * Manage external and internal links
21
  * Open links in new window or tab
@@ -42,6 +45,8 @@ When deactivating the plugin, all contents will be the same as it was before.
42
 
43
  **Like the plugin?** [Rate it](http://wordpress.org/support/view/plugin-reviews/wp-external-links) to support the development.
44
 
 
 
45
  == Installation ==
46
 
47
  1. Go to **Plugins** in the Admin menu
@@ -172,9 +177,9 @@ Here are some suggestions on solving the problem:
172
 
173
  == Screenshots ==
174
 
175
- 1. Link Icons
176
- 2. Admin Settings Page
177
- 3. WPMU Network Settings Page
178
 
179
 
180
  == Documentation ==
@@ -242,6 +247,11 @@ See [FAQ](https://wordpress.org/plugins/wp-external-links/faq/) for more info.
242
 
243
  == Changelog ==
244
 
 
 
 
 
 
245
  = 2.48 =
246
  * 2021-01-30
247
  * added flyout menu
1
  === External Links - nofollow, noopener & new window ===
2
  Contributors: WebFactory
3
+ Tags: new window, new tab, external links, nofollow, noopener, ugc, sponsored, follow, dofollow, seo, noreferrer, internal links, target, links, link, internal link, external link, link scanner, link checker
4
  Requires at least: 4.2
5
+ Tested up to: 5.9
6
+ Requires PHP: 7.2
7
+ Stable tag: 2.50
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
+ Link scanner + internal & external links manager: open in new window or tab, control nofollow, ugc, sponsored & noopener. SEO friendly.
12
 
13
  == Description ==
14
 
16
 
17
  WP External Links plugin was completely rebuilt in v2 and has lots of new features, like noopener, ugc and sponsored values for rel; font icons, internal links options and full WPMU support.
18
 
19
+ = Link Scanner / Link Checker =
20
+ Check every single link on your site! See if it's broken or not, if it's redirected, what's the target and rel attribute and what page exactly it's linking to. This SaaS is currently in beta so bugs are possible :) If you run into any please contact support.
21
+
22
  = Features =
23
  * Manage external and internal links
24
  * Open links in new window or tab
45
 
46
  **Like the plugin?** [Rate it](http://wordpress.org/support/view/plugin-reviews/wp-external-links) to support the development.
47
 
48
+ If you're having **problems with SSL or HTTPS** try our free <a href="https://wordpress.org/plugins/wp-force-ssl/">WP Force SSL</a> plugin. It's a great way to enable SSL and fix SSL problems.
49
+
50
  == Installation ==
51
 
52
  1. Go to **Plugins** in the Admin menu
177
 
178
  == Screenshots ==
179
 
180
+ 1. Admin Settings Page
181
+ 2. Link Checker / Link Tester
182
+ 3. Link Icons
183
 
184
 
185
  == Documentation ==
247
 
248
  == Changelog ==
249
 
250
+ = 2.50 =
251
+ * 2021-07-09
252
+ * completely new GUI
253
+ * link scanner / link analyzer SaaS beta
254
+
255
  = 2.48 =
256
  * 2021-01-30
257
  * added flyout menu
templates/partials/nav-tabs.php CHANGED
@@ -30,7 +30,12 @@ if (false == get_option( 'wpel-notice-dismissed-rate', false ) && current_time(
30
  }
31
  ?>
32
  <h2 class="nav-tab-wrapper">
33
- <?php foreach ( $vars[ 'tabs' ] as $tab_key => $tab_values ): ?>
 
 
 
 
 
34
  <a class="nav-tab<?php $set_tab_active_class( $tab_key ); ?> nav-tab-<?php echo $tab_key; ?>" href="<?php echo $vars[ 'page_url' ]; ?>&tab=<?php echo $tab_key; ?>">
35
  <?php echo $tab_values[ 'icon' ]; ?> <?php echo $tab_values[ 'title' ]; ?>
36
  </a>
30
  }
31
  ?>
32
  <h2 class="nav-tab-wrapper">
33
+ <?php foreach ( $vars[ 'tabs' ] as $tab_key => $tab_values ):
34
+ if($tab_key == 'admin'){
35
+ continue;
36
+ }
37
+
38
+ ?>
39
  <a class="nav-tab<?php $set_tab_active_class( $tab_key ); ?> nav-tab-<?php echo $tab_key; ?>" href="<?php echo $vars[ 'page_url' ]; ?>&tab=<?php echo $tab_key; ?>">
40
  <?php echo $tab_values[ 'icon' ]; ?> <?php echo $tab_values[ 'title' ]; ?>
41
  </a>
templates/partials/tab-contents/link-checking.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Tab Support
4
+ *
5
+ * @package WPEL
6
+ * @category WordPress Plugin
7
+ * @version 2.3
8
+ * @link https://www.webfactoryltd.com/
9
+ * @license Dual licensed under the MIT and GPLv2+ licenses
10
+ *
11
+ * @var array $vars
12
+ * @option array "tabs"
13
+ */
14
+ ?>
15
+
16
+ <?php
17
+ if(WPEL_LinkHero::is_localhost()){
18
+ ?>
19
+ <div id="wpel-checker-consent">
20
+ <div class="notice-box-error">
21
+ The <b>Link Checking &amp; Analysis</b> is not available for websites running on localhost or on non-publicly accessible hosts.<br>This service is a SaaS and needs to be able to access your site in order to analyze links on it.
22
+ </div>
23
+
24
+ <p><b>We're in beta 🔥</b><br>
25
+ Before you continue reading, please note that this <b>service is in beta</b>. So all kind of problems are possible.<br>
26
+ But fear not! If anything is not working here's our <a href="mailto:support+wpel@webfactoryltd.com?subject=<?php echo rawurlencode(htmlspecialchars_decode('WPEL problems on ' . home_url())); ?>">direct support email</a> - ping us, please, so we can fix things.<br>
27
+ The service doesn't cost anything but the number of pages you can scan is limited while it's in beta.</p>
28
+
29
+ <p><b>What data am I sharing with you?</b><br>
30
+ Absolutely no data is taken directly from WP and shared with our service! No emails, no post lists, no post content, no links - nothing! We'll access your site just like any other visitor does and check links on every post. We'll only have access to thinks that are publically available - nothing else. Obviously, if you don't agree with this please don't use the service.</p>
31
+
32
+ <p><b>What are the benefits of using the Link Scanner?</b><br>
33
+ You can look at it as a broken link checker, but it's a lot more.<br>
34
+ After grabbing your sitemap the service will visit every page, post, product, and oder content listed on the sitemap and then check each link in that content. For each link it checks if it's alive, if it's redirect, what are its target and rel attributes. That way you can quickly check all the links on all of your pages in a matter of minutes and modify them.<br>
35
+ This is also a great way to check if the settings you applied in the plugin are working and properly applied on all links.</p>
36
+
37
+ <p><b>Will the Scanner slow down my site?</b><br>
38
+ It's designed not to. We carefully pace out all requests so that we don't create too much traffic/load on your site in a short period of time. While the scanner is not running it's not using any resources at all.</p>
39
+
40
+ <p><b>How long does a scan take?</b><br>
41
+ For a site with an average number of links - about two minutes. However that depends on the speed of your site, the speed of the sites you link to, and the total number of links on your site we need to check.</p>
42
+
43
+ </div>
44
+ <?php
45
+ } else {
46
+ $linkhero = get_option('wpel-linkhero', array('checker' => array(), 'enabled' => false));
47
+ if(!isset($linkhero['enabled']) || $linkhero['enabled'] != true){ ?>
48
+ <div id="wpel-checker-consent">
49
+ <div class="notice-box-info">
50
+ <p>The Link Checker service uses a 3rd party SaaS owned and operated by <a href="https://www.webfactoryltd.com/" target="_blank">WebFactory Ltd</a> to scan/crawl your website's pages and check/analyze all links. <b>Absolutely no private information from the website is shared or transferred to WebFactory.</b> Only publicly accessible content will be checked. Posts, pages and other content that's not published will not be analyzed.<br><br>
51
+ More details are available below. If you're not sure if you should anaylze links with this service or anything's not clear please contact us.</p>
52
+ </div>
53
+ </div>
54
+ <?php } ?>
55
+
56
+ <a href="#" class="button button-primary check-links">Check &amp; Analyze all site's Links</a>
57
+ <a href="#" class="button button-primary check-links" style="background: #F00; border: 1px solid #e30f0f; float:right;" data-force="true">Clear Results &amp; Cache</a>
58
+
59
+ <div class="lh-search-wrapper">
60
+ <input placeholder="Filter pages" type="text" id="lh-search" value="" />
61
+ </div>
62
+
63
+ <div id="lh-progress-bar-wrapper">
64
+ <div id="lh-progress-bar"></div>
65
+ </div>
66
+ <table id="lh_results"></table>
67
+
68
+
69
+ <div id="lh_pro">
70
+ <div id="lh_pro_message">There are another <span id="lh_pro_count">0</span> pages that were not scanned because we're in beta.<br>
71
+ Want to scan your entire site and check out other features? Leave your email and we'll get in touch soon 🚀</div>
72
+ <div id="lh_pro_subscribe">
73
+ <?php
74
+ $subscribed = get_option('wpel-linkhero-subscribed');
75
+ if($subscribed){
76
+ ?>
77
+ <div id="lh_subscribe_message" class="lh-subscribe-good" style="display:block;"><b>Thank you!</b> We'll be in touch soon!</div>
78
+ <?php
79
+ } else {
80
+ ?>
81
+ <input type="text" id="lh_subscribe_email" placeholder="Your very best email address" value="" />
82
+ <div id="lh_subscribe_button" class="button button-primary">Subscribe</div>
83
+ <div id="lh_subscribe_button_loader"></div>
84
+ <div id="lh_subscribe_message" class="lh-subscribe-good"></div>
85
+ <?php
86
+ }
87
+ ?>
88
+ </div>
89
+
90
+ </div>
91
+
92
+ <div id="lh_details">
93
+ <div class="lh-close"></div>
94
+ <div id="lh_details_title"></div>
95
+ <div id="lh_page_details_wrapper">
96
+ <table id="lh_page_details" style="width:100%">
97
+ <thead>
98
+ <th><span class="dashicons dashicons-admin-links"></span></th>
99
+ <th>Anchor text/url</th>
100
+ <th>Page title</th>
101
+ <th>Link type</th>
102
+ <th>Rel Attributes</th>
103
+ <th>Target</th>
104
+ <th>Redirected</th>
105
+ </thead>
106
+ <tbody>
107
+
108
+ </tbody>
109
+ </table>
110
+ </div>
111
+ </div>
112
+ <hr>
113
+ <div id="lh_support">
114
+ <p>If you encounter any issues using the Link Checker please contact our <a href="mailto:support+wpel@webfactoryltd.com?subject=<?php echo rawurlencode(htmlspecialchars_decode('WPEL problems on ' . home_url())); ?>">Support team</a>.</p>
115
+
116
+ <p><b>We're in beta 🔥</b><br>
117
+ Before you continue reading, please note that this <b>service is in beta</b>. So all kind of problems are possible.<br>
118
+ But fear not! If anything is not working here's our <a href="mailto:support+wpel@webfactoryltd.com?subject=<?php echo rawurlencode(htmlspecialchars_decode('WPEL problems on ' . home_url())); ?>">direct support email</a> - ping us, please, so we can fix things.<br>
119
+ The service doesn't cost anything but the number of pages you can scan is limited while it's in beta.</p>
120
+
121
+ <p><b>What data am I sharing with you?</b><br>
122
+ Absolutely no data is taken directly from WP and shared with our service! No emails, no post lists, no post content, no links - nothing! We'll access your site just like any other visitor does and check links on every post. We'll only have access to thinks that are publically available - nothing else. Obviously, if you don't agree with this please don't use the service.</p>
123
+
124
+ <p><b>What are the benefits of using the Link Scanner?</b><br>
125
+ You can look at it as a broken link checker, but it's a lot more.<br>
126
+ After grabbing your sitemap the service will visit every page, post, product, and oder content listed on the sitemap and then check each link in that content. For each link it checks if it's alive, if it's redirect, what are its target and rel attributes. That way you can quickly check all the links on all of your pages in a matter of minutes and modify them.<br>
127
+ This is also a great way to check if the settings you applied in the plugin are working and properly applied on all links.</p>
128
+
129
+ <p><b>Will the Scanner slow down my site?</b><br>
130
+ It's designed not to. We carefully pace out all requests so that we don't create too much traffic/load on your site in a short period of time. While the scanner is not running it's not using any resources at all.</p>
131
+
132
+ <p><b>How long does a scan take?</b><br>
133
+ For a site with an average number of links - about two minutes. However that depends on the speed of your site, the speed of the sites you link to, and the total number of links on your site we need to check.</p>
134
+ </div>
135
+ <?php
136
+ }
137
+ ?>
templates/partials/tab-contents/support.php CHANGED
@@ -12,8 +12,6 @@
12
  * @option array "tabs"
13
  */
14
  ?>
15
- <h2><?php _e( 'Support', 'wp-external-links' ); ?></h2>
16
-
17
  <h3><?php _e( 'Exclude or include by data-attribute', 'wp-external-links' ) ?></h3>
18
  <p>
19
  <?php _e( 'The <code>data-wpel-link</code> attribute can be set on links and forces the plugin to treat those links that way.', 'wp-external-links' ); ?>
12
  * @option array "tabs"
13
  */
14
  ?>
 
 
15
  <h3><?php _e( 'Exclude or include by data-attribute', 'wp-external-links' ) ?></h3>
16
  <p>
17
  <?php _e( 'The <code>data-wpel-link</code> attribute can be set on links and forces the plugin to treat those links that way.', 'wp-external-links' ); ?>
templates/settings-page/main.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Admin Settings
4
  *
@@ -16,34 +17,40 @@
16
  * @option string "own_admin_menu"
17
  */
18
  ?>
19
- <div class="wrap wpel-settings-page wpel-settings-page-<?php echo $vars[ 'current_tab' ]; ?>">
20
- <h1><?php echo get_admin_page_title(); ?></h1>
21
- <?php
22
- if ( $vars[ 'own_admin_menu' ] ):
 
 
 
 
23
  settings_errors();
24
  endif;
25
 
26
  // nav tabs
27
- $nav_tabs_template = WPEL_Plugin::get_plugin_dir( '/templates/partials/nav-tabs.php' );
28
- WPEL_Plugin::show_template( $nav_tabs_template, $vars );
29
- ?>
30
 
31
- <form method="post" action="options.php" class="wpel-hidden">
32
- <?php
33
- $content_tab_template = __DIR__ .'/tab-contents/'. $vars[ 'current_tab' ] .'.php';
34
- $default_tab_template = WPEL_Plugin::get_plugin_dir( '/templates/partials/tab-contents/'. $vars[ 'current_tab' ] .'.php' );
35
 
36
- if ( is_readable( $content_tab_template ) ):
37
- WPEL_Plugin::show_template( $content_tab_template, $vars );
38
- elseif ( is_readable( $default_tab_template ) ):
39
- WPEL_Plugin::show_template( $default_tab_template, $vars );
40
- else:
41
- $content_tab_template = WPEL_Plugin::get_plugin_dir( '/templates/partials/tab-contents/fields-default.php' );
42
 
43
- if ( is_readable( $content_tab_template ) ):
44
- WPEL_Plugin::show_template( $content_tab_template, $vars );
45
  endif;
46
  endif;
47
- ?>
48
- </form>
49
- </div>
 
 
1
  <?php
2
+
3
  /**
4
  * Admin Settings
5
  *
17
  * @option string "own_admin_menu"
18
  */
19
  ?>
20
+ <div class="wrap wpel-settings-page wpel-settings-page-<?php echo $vars['current_tab']; ?>">
21
+ <h1 class="wpel-logo-wrapper">
22
+ <span class="wpel-logo"><img src="<?php echo plugins_url('/public/images/logo.png', WPEL_Plugin::get_plugin_file()); ?>" /></span>
23
+ </h1>
24
+
25
+ <div class="wpel-body-wrap">
26
+ <?php
27
+ if ($vars['own_admin_menu']) :
28
  settings_errors();
29
  endif;
30
 
31
  // nav tabs
32
+ $nav_tabs_template = WPEL_Plugin::get_plugin_dir('/templates/partials/nav-tabs.php');
33
+ WPEL_Plugin::show_template($nav_tabs_template, $vars);
34
+ ?>
35
 
36
+ <form method="post" action="options.php" class="wpel-hidden">
37
+ <?php
38
+ $content_tab_template = __DIR__ . '/tab-contents/' . $vars['current_tab'] . '.php';
39
+ $default_tab_template = WPEL_Plugin::get_plugin_dir('/templates/partials/tab-contents/' . $vars['current_tab'] . '.php');
40
 
41
+ if (is_readable($content_tab_template)) :
42
+ WPEL_Plugin::show_template($content_tab_template, $vars);
43
+ elseif (is_readable($default_tab_template)) :
44
+ WPEL_Plugin::show_template($default_tab_template, $vars);
45
+ else :
46
+ $content_tab_template = WPEL_Plugin::get_plugin_dir('/templates/partials/tab-contents/fields-default.php');
47
 
48
+ if (is_readable($content_tab_template)) :
49
+ WPEL_Plugin::show_template($content_tab_template, $vars);
50
  endif;
51
  endif;
52
+ ?>
53
+ </form>
54
+
55
+ </div>
56
+ </div>
templates/settings-page/tab-contents/exceptions.php CHANGED
@@ -17,6 +17,8 @@ $default_fields_file = WPEL_Plugin::get_plugin_dir( '/templates/partials/tab-con
17
  WPEL_Plugin::show_template( $default_fields_file, $vars );
18
  ?>
19
 
20
- <p class="description"><?php _e( 'The data-attribute <a href="#" data-wpel-help="data-attributes"><code>data-wpel-link</code></a> can be set on individual links to treat them as internal, external or excluded, or to completely ignore links form being processed by this plugin.' ); ?></p>
 
 
21
 
22
  <?php submit_button(); ?>
17
  WPEL_Plugin::show_template( $default_fields_file, $vars );
18
  ?>
19
 
20
+ <p class="description"><?php
21
+ printf( __('The data-attribute <a href="%s"><code>data-wpel-link</code></a> can be set on individual links to treat them as internal, external or excluded, or to completely ignore links form being processed by this plugin.', 'wp-external-links' ), admin_url('options-general.php?page=wpel-settings-page&tab=support') );
22
+ ?></p>
23
 
24
  <?php submit_button(); ?>
wf-flyout/config.php CHANGED
@@ -4,7 +4,7 @@ $config = array();
4
  $config['plugin_screen'] = 'toplevel_page_wpel-settings-page';
5
  $config['icon_border'] = 'none';
6
  $config['icon_right'] = '35px';
7
- $config['icon_bottom'] = '35px';
8
  $config['icon_image'] = 'wpel.png';
9
  $config['icon_padding'] = '0';
10
  $config['icon_size'] = '55px';
4
  $config['plugin_screen'] = 'toplevel_page_wpel-settings-page';
5
  $config['icon_border'] = 'none';
6
  $config['icon_right'] = '35px';
7
+ $config['icon_bottom'] = '60px';
8
  $config['icon_image'] = 'wpel.png';
9
  $config['icon_padding'] = '0';
10
  $config['icon_size'] = '55px';
wf-flyout/wf-flyout.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Universal fly-out menu for WebFactory plugins
5
  * (c) WebFactory Ltd, 2021
@@ -95,21 +94,21 @@ if (false == class_exists('wf_flyout')) {
95
 
96
  $out = '<style type="text/css">';
97
  $out .= '#wf-flyout {
98
- right: ' . $this->config['icon_right'] . ';
99
- bottom: ' . $this->config['icon_bottom'] . ';
100
  }';
101
  $out .= '#wf-flyout #wff-image-wrapper {
102
- border: ' . $this->config['icon_border'] . ';
103
  }';
104
  $out .= '#wf-flyout #wff-button img {
105
- padding: ' . $this->config['icon_padding'] . ';
106
- width: ' . $this->config['icon_size'] . ';
107
- height: ' . $this->config['icon_size'] . ';
108
  }';
109
  $out .= '#wf-flyout .wff-menu-item.accent {
110
- background: ' . $this->config['menu_accent_color'] . ';
111
  }';
112
- $out .= $this->config['custom_css'];
113
  $out .= '</style>';
114
 
115
  echo $out;
@@ -124,7 +123,7 @@ if (false == class_exists('wf_flyout')) {
124
 
125
  $out = '';
126
  $icons_url = plugin_dir_url($this->plugin_file) . 'wf-flyout/icons/';
127
- $default_link_item = array('class' => '', 'href' => '#', 'target' => '_blank', 'label' => '', 'icon' => '');
128
 
129
  $out .= '<div id="wff-overlay"></div>';
130
 
@@ -133,7 +132,7 @@ if (false == class_exists('wf_flyout')) {
133
  $out .= '<a href="#" id="wff-button">';
134
  $out .= '<span class="wff-label">Open Quick Links</span>';
135
  $out .= '<span id="wff-image-wrapper">';
136
- $out .= '<img src="' . $icons_url . $this->config['icon_image'] . '" alt="Open Quick Links" title="Open Quick Links">';
137
  $out .= '</span>';
138
  $out .= '</a>';
139
 
@@ -148,12 +147,12 @@ if (false == class_exists('wf_flyout')) {
148
  $item['class'] = trim($item['class']);
149
  }
150
 
151
- $out .= '<a href="' . $item['href'] . '" class="wff-menu-item wff-menu-item-' . $i . ' ' . $item['class'] . '" target="_blank">';
152
- $out .= '<span class="wff-label visible">' . $item['label'] . '</span>';
153
  if (substr($item['icon'], 0, 9) == 'dashicons') {
154
- $out .= '<span class="dashicons ' . $item['icon'] . '"></span>';
155
  } elseif (!empty($item['icon'])) {
156
- $out .= '<span class="wff-icon"><img src="' . $icons_url . $item['icon'] . '"></span>';
157
  }
158
  $out .= '</a>';
159
  } // foreach
1
  <?php
 
2
  /**
3
  * Universal fly-out menu for WebFactory plugins
4
  * (c) WebFactory Ltd, 2021
94
 
95
  $out = '<style type="text/css">';
96
  $out .= '#wf-flyout {
97
+ right: ' . sanitize_text_field($this->config['icon_right']) . ';
98
+ bottom: ' . sanitize_text_field($this->config['icon_bottom']) . ';
99
  }';
100
  $out .= '#wf-flyout #wff-image-wrapper {
101
+ border: ' . sanitize_text_field($this->config['icon_border']) . ';
102
  }';
103
  $out .= '#wf-flyout #wff-button img {
104
+ padding: ' . sanitize_text_field($this->config['icon_padding']) . ';
105
+ width: ' . sanitize_text_field($this->config['icon_size']) . ';
106
+ height: ' . sanitize_text_field($this->config['icon_size']) . ';
107
  }';
108
  $out .= '#wf-flyout .wff-menu-item.accent {
109
+ background: ' . sanitize_text_field($this->config['menu_accent_color']) . ';
110
  }';
111
+ $out .= sanitize_text_field($this->config['custom_css']);
112
  $out .= '</style>';
113
 
114
  echo $out;
123
 
124
  $out = '';
125
  $icons_url = plugin_dir_url($this->plugin_file) . 'wf-flyout/icons/';
126
+ $default_link_item = array('class' => '', 'href' => '#', 'target' => '_blank', 'label' => '', 'icon' => '', 'data' => '');
127
 
128
  $out .= '<div id="wff-overlay"></div>';
129
 
132
  $out .= '<a href="#" id="wff-button">';
133
  $out .= '<span class="wff-label">Open Quick Links</span>';
134
  $out .= '<span id="wff-image-wrapper">';
135
+ $out .= '<img src="' . esc_url($icons_url . $this->config['icon_image']) . '" alt="Open Quick Links" title="Open Quick Links">';
136
  $out .= '</span>';
137
  $out .= '</a>';
138
 
147
  $item['class'] = trim($item['class']);
148
  }
149
 
150
+ $out .= '<a href="' . esc_url($item['href']) . '" class="wff-menu-item wff-menu-item-' . $i . ' ' . esc_attr($item['class']) . '" target="_blank">';
151
+ $out .= '<span class="wff-label visible">' . esc_html($item['label']) . '</span>';
152
  if (substr($item['icon'], 0, 9) == 'dashicons') {
153
+ $out .= '<span class="dashicons ' . sanitize_text_field($item['icon']) . '"></span>';
154
  } elseif (!empty($item['icon'])) {
155
+ $out .= '<span class="wff-icon"><img src="' . esc_url($icons_url . $item['icon']) . '"></span>';
156
  }
157
  $out .= '</a>';
158
  } // foreach
wp-external-links.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
2
  /**
3
  * Plugin Name: WP External Links
4
- * Version: 2.48
5
  * Plugin URI: https://wordpress.org/plugins/wp-external-links/
6
- * Description: Open external links in a new tab or window, control "nofollow" and "noopener", set font icon; SEO friendly.
7
  * Author: WebFactory Ltd
8
  * Author URI: https://www.webfactoryltd.com/
9
  * License: Dual licensed under the MIT and GPLv2+ licenses
@@ -55,6 +55,7 @@ if ( ! function_exists( 'wpel_init' ) ):
55
  $autoloader->add_path( $plugin_dir . '/libs/', true );
56
  $autoloader->add_path( $plugin_dir . '/includes/', true );
57
 
 
58
  /**
59
  * Load debugger
60
  */
@@ -76,6 +77,8 @@ if ( ! function_exists( 'wpel_init' ) ):
76
  */
77
  WPEL_Plugin::create( $plugin_file, $plugin_dir );
78
 
 
 
79
  }
80
 
81
  wpel_init();
1
  <?php
2
  /**
3
  * Plugin Name: WP External Links
4
+ * Version: 2.50
5
  * Plugin URI: https://wordpress.org/plugins/wp-external-links/
6
+ * Description: Check & scan all links + open external links in a new tab or window, control "nofollow" and "noopener", set font icon; SEO friendly.
7
  * Author: WebFactory Ltd
8
  * Author URI: https://www.webfactoryltd.com/
9
  * License: Dual licensed under the MIT and GPLv2+ licenses
55
  $autoloader->add_path( $plugin_dir . '/libs/', true );
56
  $autoloader->add_path( $plugin_dir . '/includes/', true );
57
 
58
+
59
  /**
60
  * Load debugger
61
  */
77
  */
78
  WPEL_Plugin::create( $plugin_file, $plugin_dir );
79
 
80
+ WPEL_LinkHero::create( $plugin_file, $plugin_dir );
81
+
82
  }
83
 
84
  wpel_init();