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

Version Description

  • 2022-07-09
    • fixed current_screen() bug
    • fixed "icon_type" cannot be found bug
    • introduction of the PRO version
    • removed link scanner beta
Download this release

Release Info

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

Code changes from version 2.51 to 2.55

Files changed (37) hide show
  1. includes/admin/class-wpel-network-page.php +4 -4
  2. includes/admin/class-wpel-settings-page.php +38 -13
  3. includes/admin/settings-fields/class-wpel-exit-confirmation-fields.php +257 -0
  4. includes/class-wpel-front.php +0 -12
  5. includes/class-wpel-linkhero.php +0 -297
  6. includes/class-wpel-plugin.php +28 -0
  7. includes/class-wpel-register-scripts.php +19 -20
  8. includes/register-hooks/class-wpel-deactivate.php +41 -0
  9. includes/register-hooks/class-wpel-uninstall.php +1 -0
  10. libs/fwp/class-fwp-html-fields.php +30 -0
  11. public/css/jquery.dataTables.min.css +0 -1
  12. public/css/wpel-admin-global.css +0 -32
  13. public/css/wpel-admin.css +222 -358
  14. public/images/icon-small.png +0 -0
  15. public/images/icon.png +0 -0
  16. public/images/link-checker.png +0 -0
  17. public/images/link-rules-new.png +0 -0
  18. public/images/link-rules.png +0 -0
  19. public/images/logo.png +0 -0
  20. public/js/jquery.dataTables.min.js +0 -184
  21. public/js/wpel-admin.js +145 -222
  22. public/js/wpel-link-highlighter.js +0 -38
  23. public/js/wpel-pointers.js +32 -0
  24. readme.txt +16 -6
  25. templates/partials/nav-tabs.php +5 -4
  26. templates/partials/tab-contents/link-checking.php +15 -109
  27. templates/partials/tab-contents/link-rules.php +26 -0
  28. templates/settings-page/main.php +108 -1
  29. templates/settings-page/tab-contents/exit-confirmation.php +23 -0
  30. wf-flyout/config.php +2 -0
  31. wf-flyout/icons/301-logo.png +0 -0
  32. wf-flyout/icons/wp-ssl.png +0 -0
  33. wf-flyout/icons/wpel.png +0 -0
  34. wf-flyout/wf-flyout.css +1 -1
  35. wf-flyout/wf-flyout.js +1 -1
  36. wf-flyout/wf-flyout.php +1 -1
  37. wp-external-links.php +6 -6
includes/admin/class-wpel-network-page.php CHANGED
@@ -99,18 +99,18 @@ final class WPEL_Network_Page extends WPRun_Base_1x0x0
99
  if ( '1' === $own_admin_menu ) {
100
  $this->page_hook = add_menu_page(
101
  __( 'WP External Links' , 'wp-external-links' ) // page title
102
- , __( 'External Links' , 'wp-external-links' ) // menu title
103
  , 'manage_network' // capability
104
  , $this->menu_slug // menu slug
105
  , $this->get_callback( 'show_network_page' ) // callback
106
- , 'none' // icon
107
  , null // position
108
  );
109
  } else {
110
  $this->page_hook = add_submenu_page(
111
  'settings.php' // parent slug
112
  , __( 'WP External Links' , 'wp-external-links' ) // page title
113
- , __( 'External Links' , 'wp-external-links' ) // menu title
114
  , 'manage_options' // capability
115
  , $this->menu_slug // menu slug
116
  , $this->get_callback( 'show_network_page' ) // callback
@@ -132,7 +132,7 @@ final class WPEL_Network_Page extends WPRun_Base_1x0x0
132
  wp_enqueue_style( 'wpel-admin-style' );
133
  wp_enqueue_script( 'wpel-admin-script' );
134
  }
135
-
136
  wp_enqueue_style( 'wpel-admin-global-style' );
137
  }
138
 
99
  if ( '1' === $own_admin_menu ) {
100
  $this->page_hook = add_menu_page(
101
  __( 'WP External Links' , 'wp-external-links' ) // page title
102
+ , __( 'WP External Links' , 'wp-external-links' ) // menu title
103
  , 'manage_network' // capability
104
  , $this->menu_slug // menu slug
105
  , $this->get_callback( 'show_network_page' ) // callback
106
+ , WPEL_PLUGIN_URL . '/public/images/icon-small.png' // icon // icon
107
  , null // position
108
  );
109
  } else {
110
  $this->page_hook = add_submenu_page(
111
  'settings.php' // parent slug
112
  , __( 'WP External Links' , 'wp-external-links' ) // page title
113
+ , __( 'WP External Links' , 'wp-external-links' ) // menu title
114
  , 'manage_options' // capability
115
  , $this->menu_slug // menu slug
116
  , $this->get_callback( 'show_network_page' ) // callback
132
  wp_enqueue_style( 'wpel-admin-style' );
133
  wp_enqueue_script( 'wpel-admin-script' );
134
  }
135
+
136
  wp_enqueue_style( 'wpel-admin-global-style' );
137
  }
138
 
includes/admin/class-wpel-settings-page.php CHANGED
@@ -40,10 +40,6 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
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,
@@ -64,11 +60,24 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
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,
@@ -105,8 +114,9 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
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
 
@@ -121,8 +131,10 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
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;
@@ -137,6 +149,10 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
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'])) {
@@ -172,7 +188,7 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
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
  ,
@@ -180,7 +196,7 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
180
  ,
181
  $this->get_callback('show_admin_page') // callback
182
  ,
183
- 'none' // icon
184
  ,
185
  null // position
186
  );
@@ -188,7 +204,7 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
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
  ,
@@ -230,9 +246,18 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
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('wpel-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
  }
40
  $this->network_page = $network_page;
41
 
42
  $this->tabs = array(
 
 
 
 
43
  'external-links' => array(
44
  'title' => __('External Links', 'wp-external-links'),
45
  'icon' => false,
60
  'icon' => false,
61
  'fields' => $fields_objects['exceptions'],
62
  ),
63
+ 'link-rules' => array(
64
+ 'title' => '<span class="dashicons dashicons-star-filled"></span>' . __('Link Rules', 'wp-external-links'),
65
+ 'icon' => false,
66
+ ),
67
+
68
+ 'exit-confirmation' => array(
69
+ 'title' => '<span class="dashicons dashicons-star-filled"></span>' . __('Exit Confirmation', 'wp-external-links'),
70
+ 'icon' => false,
71
+ 'fields' => $fields_objects['exit-confirmation'],
72
+ ),
73
+ 'link-checking' => array(
74
+ 'title' => '<span class="dashicons dashicons-star-filled"></span>' . __('Link Checker', 'wp-external-links'),
75
  'icon' => false,
76
+ ),
77
+ 'pro' => array(
78
+ 'title' => __('PRO', 'wp-external-links'),
79
+ 'icon' => false,
80
+ ),
81
  'support' => array(
82
  'title' => __('Support', 'wp-external-links'),
83
  'icon' => false,
114
  $current_screen = get_current_screen();
115
  if (!empty($current_screen) && $current_screen->id == 'toplevel_page_wpel-settings-page') {
116
  $plugin_version = get_option('wpel-version');
117
+ $text = '<i>WP External Links v' . $plugin_version . ' by <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 🙌</i>';
118
  }
119
+
120
  return $text;
121
  } // admin_footer_text
122
 
131
  */
132
  function plugin_action_links($links)
133
  {
134
+ $settings_link = '<a href="' . admin_url('admin.php?page=wpel-settings-page') . '" title="Open WP External Links Settings">Configure</a>';
135
+ $pro_link = '<a href="' . admin_url('admin.php?page=wpel-settings-page#open-pro-dialog') . '" title="Get PRO version"><b>Get PRO</b></a>';
136
 
137
+ array_unshift($links, $pro_link);
138
  array_unshift($links, $settings_link);
139
 
140
  return $links;
149
  */
150
  public function get_option_value($key, $type = null)
151
  {
152
+ if ('own_admin_menu' == $key) {
153
+ return '1';
154
+ }
155
+
156
  if (null === $type) {
157
  foreach ($this->tabs as $tab_key => $values) {
158
  if (!isset($values['fields'])) {
188
  $this->page_hook = add_menu_page(
189
  __('WP External Links', 'wp-external-links') // page title
190
  ,
191
+ __('WP External Links', 'wp-external-links') // menu title
192
  ,
193
  $capability // capability
194
  ,
196
  ,
197
  $this->get_callback('show_admin_page') // callback
198
  ,
199
+ WPEL_PLUGIN_URL . 'public/images/icon-small.png' // icon
200
  ,
201
  null // position
202
  );
204
  $this->page_hook = add_options_page(
205
  __('WP External Links', 'wp-external-links') // page title
206
  ,
207
+ __('WP External Links', 'wp-external-links') // menu title
208
  ,
209
  $capability // capability
210
  ,
246
  if ($current_screen->id == 'toplevel_page_wpel-settings-page' || $current_screen->id == 'settings_page_wpel-settings-page') {
247
  wp_enqueue_script('jquery-ui-core');
248
  wp_enqueue_script('jquery-ui-accordion');
249
+
250
+ wp_enqueue_style('wp-jquery-ui-dialog');
251
+ wp_enqueue_script('jquery-ui-position');
252
+ wp_enqueue_script('jquery-ui-dialog');
253
+
254
  wp_enqueue_style('wpel-font-awesome');
255
  wp_enqueue_style('wpel-admin-style');
256
  wp_enqueue_script('wpel-admin-script');
257
+
258
+ wp_enqueue_style('wp-color-picker');
259
+ wp_enqueue_script('wp-color-picker');
260
+
261
  wp_enqueue_style('jquery-ui-smoothness', 'https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css', false, null);
262
  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');
263
  }
includes/admin/settings-fields/class-wpel-exit-confirmation-fields.php ADDED
@@ -0,0 +1,257 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class WPEL_Exit_Confirmation_Fields
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
+ final class WPEL_Exit_Confirmation_Fields extends WPEL_Link_Fields_Base
12
+ {
13
+
14
+ /**
15
+ * Initialize
16
+ */
17
+ protected function init()
18
+ {
19
+ $this->set_settings( array(
20
+ 'section_id' => 'wpel-exit-confirmation-fields',
21
+ 'page_id' => 'wpel-exit-confirmation-fields',
22
+ 'option_name' => 'wpel-exit-confirmation-settings',
23
+ 'option_group' => 'wpel-exit-confirmation-settings',
24
+ 'title' => __( 'Exit Confirmation', 'wp-links' ),
25
+ 'fields' => array(
26
+ 'exit_preview' => array(
27
+ 'label' => __( 'Exit Confirmation Preview', 'wp-links' ),
28
+ 'default_value' => ''
29
+
30
+ ),
31
+ 'background' => array(
32
+ 'label' => __( 'Popup Background Color:', 'wp-links' ),
33
+ 'default_value' => '#FFFFFF'
34
+
35
+ ),
36
+ 'title' => array(
37
+ 'label' => __( 'Title:', 'wp-links' ),
38
+ 'default_value' => __( 'You are leaving our website', 'wp-links' ),
39
+ ),
40
+ 'title_color' => array(
41
+ 'label' => __( 'Title Text Color:', 'wp-links' ),
42
+ 'default_value' => '#FFF'
43
+
44
+ ),
45
+ 'title_background' => array(
46
+ 'label' => __( 'Title Background Color:', 'wp-links' ),
47
+ 'default_value' => '#999'
48
+
49
+ ),
50
+ 'title_size' => array(
51
+ 'label' => __( 'Title Size:', 'wp-links' ),
52
+ 'default_value' => '18'
53
+ ),
54
+ 'text' => array(
55
+ 'label' => __( 'Text:', 'wp-links' ),
56
+ 'default_value' => 'This link leads outside our website and we are not responsible for its content. If you still want to visit the link, click here:'
57
+ ),
58
+ 'text_color' => array(
59
+ 'label' => __( 'Text Color:', 'wp-links' ),
60
+ 'default_value' => '#444'
61
+ ),
62
+ 'text_size' => array(
63
+ 'label' => __( 'Text Size:', 'wp-links' ),
64
+ 'default_value' => '14'
65
+ ),
66
+ 'popup_width' => array(
67
+ 'label' => __( 'Popup Width:', 'wp-links' ),
68
+ 'default_value' => '400'
69
+ ),
70
+ 'popup_height' => array(
71
+ 'label' => __( 'Popup Height:', 'wp-links' ),
72
+ 'default_value' => '200'
73
+ ),
74
+ 'overlay' => array(
75
+ 'label' => __( 'Show overlay:', 'wp-links' ),
76
+ 'class' => 'js-wpel-apply',
77
+ 'default_value' => '1',
78
+ ),
79
+ 'overlay_color' => array(
80
+ 'label' => __( 'Overlay Color:', 'wp-links' ),
81
+ 'default_value' => '#000'
82
+ ),
83
+ 'button_text' => array(
84
+ 'label' => __( 'Button Text:', 'wp-links' ),
85
+ 'default_value' => 'Stay on the site'
86
+ ),
87
+ 'button_size' => array(
88
+ 'label' => __( 'Button Text Size:', 'wp-links' ),
89
+ 'default_value' => '14'
90
+ ),
91
+ 'button_color' => array(
92
+ 'label' => __( 'Button Text Color:', 'wp-links' ),
93
+ 'default_value' => '#FFF'
94
+ ),
95
+ 'button_background' => array(
96
+ 'label' => __( 'Button Background:', 'wp-links' ),
97
+ 'default_value' => '#1e73be'
98
+ ),
99
+ ),
100
+ ) );
101
+
102
+ parent::init();
103
+ }
104
+
105
+ /**
106
+ * Show field methods
107
+ */
108
+ protected function show_exit_preview( array $args )
109
+ {
110
+ echo '<div id="exit-confirmation-preview"></div>Click <a href="#" class="wpel-exit-confirmation">this link</a> to view a preview of the popup';
111
+ }
112
+
113
+
114
+ protected function show_title( array $args )
115
+ {
116
+ $this->get_html_fields()->text( $args[ 'key' ], array(
117
+ 'class' => 'regular-text',
118
+ ) );
119
+
120
+ echo '<p class="description">'
121
+ . __( 'Title of the Exit Confirmation popup. Leave empty for no title.', 'wp-links' )
122
+ .'</p>';
123
+ }
124
+
125
+ protected function show_text( array $args )
126
+ {
127
+ $this->get_html_fields()->text_area( $args[ 'key' ], array(
128
+ 'class' => 'large-text',
129
+ 'rows' => 4,
130
+ 'placeholder' => __( '', 'wp-links' ),
131
+ ) );
132
+
133
+ echo '<p class="description">' . __( 'Text of the Exit Confirmation popup. Leave empty for no text.', 'wp-links' ) .'</p>';
134
+ }
135
+
136
+ protected function show_text_color( array $args )
137
+ {
138
+ $this->get_html_fields()->color( $args[ 'key' ], array() );
139
+
140
+ echo '<p class="description">' . __( 'Color of the Exit Confirmation popup text.', 'wp-links' ) .'</p>';
141
+ }
142
+
143
+ protected function show_title_color( array $args )
144
+ {
145
+ $this->get_html_fields()->color( $args[ 'key' ], array() );
146
+
147
+ echo '<p class="description">' . __( 'Color of the Exit Confirmation popup title.', 'wp-links' ) .'</p>';
148
+ }
149
+
150
+ protected function show_title_size( array $args )
151
+ {
152
+ $this->get_html_fields()->number( $args[ 'key' ], array('class' => 'wpel-field-number', 'unit' => 'px') );
153
+
154
+ echo '<p class="description">' . __( 'Text size of the Exit Confirmation popup title.', 'wp-links' ) .'</p>';
155
+ }
156
+
157
+ protected function show_text_size( array $args )
158
+ {
159
+ $this->get_html_fields()->number( $args[ 'key' ], array('class' => 'wpel-field-number', 'unit' => 'px') );
160
+
161
+ echo '<p class="description">' . __( 'Text size of the Exit Confirmation popup text.', 'wp-links' ) .'</p>';
162
+ }
163
+
164
+ protected function show_popup_width( array $args )
165
+ {
166
+ $this->get_html_fields()->number( $args[ 'key' ], array('class' => 'wpel-field-number', 'unit' => 'px') );
167
+
168
+ echo '<p class="description">' . __( 'Width of the Exit Confirmation popup.', 'wp-links' ) .'</p>';
169
+ }
170
+
171
+ protected function show_popup_height( array $args )
172
+ {
173
+ $this->get_html_fields()->number( $args[ 'key' ], array('class' => 'wpel-field-number', 'unit' => 'px') );
174
+
175
+ echo '<p class="description">' . __( 'Height of the Exit Confirmation popup. Leave empty for auto.', 'wp-links' ) .'</p>';
176
+ }
177
+
178
+ protected function show_overlay( array $args )
179
+ {
180
+ $this->get_html_fields()->check_with_label(
181
+ $args[ 'key' ]
182
+ , __( 'Show transparent overlay behind popup', 'wp-links' )
183
+ , '1'
184
+ , ''
185
+ );
186
+ }
187
+
188
+ protected function show_background( array $args )
189
+ {
190
+ $this->get_html_fields()->color( $args[ 'key' ], array() );
191
+
192
+ echo '<p class="description">' . __( 'Background color of the Exit Confirmation popup.', 'wp-links' ) .'</p>';
193
+ }
194
+
195
+ protected function show_title_background( array $args )
196
+ {
197
+ $this->get_html_fields()->color( $args[ 'key' ], array() );
198
+
199
+ echo '<p class="description">' . __( 'Background color of the Exit Confirmation popup title.', 'wp-links' ) .'</p>';
200
+ }
201
+
202
+
203
+ protected function show_overlay_color( array $args )
204
+ {
205
+ $this->get_html_fields()->color( $args[ 'key' ], array() );
206
+ }
207
+
208
+ protected function show_button_color( array $args )
209
+ {
210
+ $this->get_html_fields()->color( $args[ 'key' ], array() );
211
+ }
212
+
213
+ protected function show_button_background( array $args )
214
+ {
215
+ $this->get_html_fields()->color( $args[ 'key' ], array() );
216
+ }
217
+
218
+ protected function show_button_text( array $args )
219
+ {
220
+ $this->get_html_fields()->text( $args[ 'key' ], array(
221
+ 'class' => 'regular-text',
222
+ ) );
223
+
224
+ echo '<p class="description">' . __( 'Text of the button that will cancel leaving website.', 'wp-links' ) .'</p>';
225
+ }
226
+
227
+ protected function show_button_size( array $args )
228
+ {
229
+ $this->get_html_fields()->number( $args[ 'key' ], array('class' => 'wpel-field-number', 'unit' => 'px') );
230
+
231
+ echo '<p class="description">' . __( 'Text size of the Exit Confirmation popup button.', 'wp-links' ) .'</p>';
232
+ }
233
+
234
+ /**
235
+ * Validate and sanitize user input before saving to databse
236
+ * @param array $new_values
237
+ * @param array $old_values
238
+ * @return array
239
+ */
240
+ protected function before_update( array $new_values, array $old_values )
241
+ {
242
+ $update_values = $new_values;
243
+ $is_valid = true;
244
+
245
+
246
+ if ( false === $is_valid ) {
247
+ // error when user input is not valid conform the UI, probably tried to "hack"
248
+ $this->add_error( __( 'Something went wrong. One or more values were invalid.', 'wp-links' ) );
249
+ return $old_values;
250
+ }
251
+
252
+ return $update_values;
253
+ }
254
+
255
+ }
256
+
257
+ /*?>*/
includes/class-wpel-front.php CHANGED
@@ -105,18 +105,6 @@ final class WPEL_Front extends WPRun_Base_1x0x0
105
  if ( $this->opt( 'icon_type', 'excluded-links' ) || $this->opt( 'icon_type', 'external-links' ) || $this->opt( 'icon_type', 'internal-links' ) ) {
106
  wp_enqueue_style( 'wpel-style' );
107
  }
108
-
109
- wp_register_script(
110
- 'wpel-link-highlighter',
111
- plugins_url('/public/js/wpel-link-highlighter.js', WPEL_Plugin::get_plugin_file()),
112
- array('jquery'),
113
- false,
114
- true
115
- );
116
-
117
- if(isset($_GET['wpel-link-highlight'])){
118
- wp_enqueue_script( 'wpel-link-highlighter' );
119
- }
120
  }
121
 
122
  /**
105
  if ( $this->opt( 'icon_type', 'excluded-links' ) || $this->opt( 'icon_type', 'external-links' ) || $this->opt( 'icon_type', 'internal-links' ) ) {
106
  wp_enqueue_style( 'wpel-style' );
107
  }
 
 
 
 
 
 
 
 
 
 
 
 
108
  }
109
 
110
  /**
includes/class-wpel-linkhero.php DELETED
@@ -1,297 +0,0 @@
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
@@ -21,8 +21,35 @@ final class WPEL_Plugin extends FWP_Plugin_Base_1x0x0
21
  {
22
  parent::init($plugin_file, $plugin_dir);
23
  $this->create_components();
 
24
  }
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  /**
27
  * Create components
28
  */
@@ -43,6 +70,7 @@ final class WPEL_Plugin extends FWP_Plugin_Base_1x0x0
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
21
  {
22
  parent::init($plugin_file, $plugin_dir);
23
  $this->create_components();
24
+ add_action('wp_ajax_wpel_dismiss_notice', array($this, 'ajax_dismiss_notice'));
25
  }
26
 
27
+ /**
28
+ * Dismiss notice via AJAX call
29
+ *
30
+ * @return null
31
+ */
32
+ function ajax_dismiss_notice()
33
+ {
34
+ check_ajax_referer('wpel_dismiss_notice');
35
+
36
+ if (!current_user_can('administrator')) {
37
+ wp_send_json_error('You are not allowed to run this action.');
38
+ }
39
+
40
+ $notice_name = trim(sanitize_text_field(@$_GET['notice_name']));
41
+ $pointers = get_option('wpel-pointers', array());
42
+
43
+ if ($notice_name != 'welcome') {
44
+ wp_send_json_error('Unknown notice');
45
+ } else {
46
+ $pointers['hide_welcome_pointer'] = true;
47
+ update_option('wpel-pointers', $pointers);
48
+ wp_send_json_success();
49
+ }
50
+ } // ajax_dismiss_notice
51
+
52
+
53
  /**
54
  * Create components
55
  */
70
  'excluded-links' => WPEL_Excluded_Link_Fields::create(),
71
  'admin' => WPEL_Admin_Fields::create(),
72
  'exceptions' => WPEL_Exceptions_Fields::create(),
73
+ 'exit-confirmation' => WPEL_Exit_Confirmation_Fields::create(),
74
  ));
75
 
76
  // front site
includes/class-wpel-register-scripts.php CHANGED
@@ -34,6 +34,24 @@ final class WPEL_Register_Scripts extends WPRun_Base_1x0x0
34
  protected function register_scripts()
35
  {
36
  $plugin_version = get_option('wpel-version');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
  // set style font awesome icons
39
  wp_register_style(
@@ -59,30 +77,11 @@ final class WPEL_Register_Scripts extends WPRun_Base_1x0x0
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',
34
  protected function register_scripts()
35
  {
36
  $plugin_version = get_option('wpel-version');
37
+ $pointers = get_option('wpel-pointers', array());
38
+
39
+ if(function_exists('get_current_screen')){
40
+ $current_screen = get_current_screen();
41
+ }
42
+
43
+ if (isset($current_screen) && $current_screen->id != 'toplevel_page_wpel-settings-page' && $current_screen->id != 'settings_page_wpel-settings-page') {
44
+ if (empty($pointers['hide_welcome_pointer']) && current_user_can('administrator')) {
45
+ $pointers['_nonce_dismiss_pointer'] = wp_create_nonce('wpel_dismiss_notice');
46
+ $pointers['welcome'] = array('target' => '#toplevel_page_wpel-settings-page', 'edge' => 'left', 'align' => 'right', 'content' => 'Thank you for installing the <b style="font-weight: 800;">WP External Links</b> plugin!<br>Open <a href="' . admin_url('admin.php?page=wpel-settings-page') . '">WP External Links</a> to manage your links, and configure settings.');
47
+
48
+ wp_enqueue_style('wp-pointer');
49
+
50
+ wp_enqueue_script('wpel-pointers', plugins_url('/public/js/wpel-pointers.js', WPEL_Plugin::get_plugin_file()), array('jquery'), get_option('wpel-version'), true);
51
+ wp_enqueue_script('wp-pointer');
52
+ wp_localize_script('wp-pointer', 'wpel_pointers', $pointers);
53
+ }
54
+ }
55
 
56
  // set style font awesome icons
57
  wp_register_style(
77
  $plugin_version
78
  );
79
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  $wpel_js = array(
81
  'nonce_ajax' => wp_create_nonce('wpel_run_tool'),
82
+ 'loader' => admin_url('/images/spinner.gif')
 
83
  );
84
 
 
 
 
 
 
 
85
  // set wpel admin script
86
  wp_register_script(
87
  'wpel-admin-script',
includes/register-hooks/class-wpel-deactivate.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class WPEL_Deactivate
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
+ final class WPEL_Deactivate extends FWP_Register_Hook_Base_1x0x0
12
+ {
13
+
14
+ /**
15
+ * @var string
16
+ */
17
+ protected $hook_type = 'deactivation';
18
+
19
+ /**
20
+ * Activate network
21
+ * @return void
22
+ */
23
+ protected function network_procedure()
24
+ {
25
+ // network settings
26
+ delete_site_option( 'wpel-pointers' );
27
+ }
28
+
29
+ /**
30
+ * Activate site
31
+ * @return void
32
+ */
33
+ protected function site_procedure()
34
+ {
35
+ // delete options
36
+ delete_option( 'wpel-pointers' );
37
+ }
38
+
39
+ }
40
+
41
+ /*?>*/
includes/register-hooks/class-wpel-uninstall.php CHANGED
@@ -42,6 +42,7 @@ final class WPEL_Uninstall extends FWP_Register_Hook_Base_1x0x0
42
 
43
  delete_option( 'wpel-version' );
44
  delete_option( 'wpel-show-notice' );
 
45
  }
46
 
47
  }
42
 
43
  delete_option( 'wpel-version' );
44
  delete_option( 'wpel-show-notice' );
45
+ delete_option( 'wpel-pointers' );
46
  }
47
 
48
  }
libs/fwp/class-fwp-html-fields.php CHANGED
@@ -257,6 +257,36 @@ class FWP_HTML_Fields_1x0x0
257
  return ( $this->get_value( $key ) == $checked_value ) ? ' checked' : '';
258
  }
259
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260
  }
261
 
262
  /*?>*/
257
  return ( $this->get_value( $key ) == $checked_value ) ? ' checked' : '';
258
  }
259
 
260
+ /**
261
+ * Show text input field
262
+ * @param string $key
263
+ * @param array $atts Optional
264
+ */
265
+ public function number( $key, array $atts = array() )
266
+ {
267
+ echo '<input type="number"
268
+ id="' . $this->get_field_id( $key ) . '"
269
+ name="' . $this->get_field_name( $key ) . '"
270
+ value="' . esc_attr( $this->get_value( $key ) ) . '"
271
+ ' . $this->get_html_atts( $atts ) . '
272
+ > ' . $atts['unit'];
273
+ }
274
+
275
+ /**
276
+ * Show text input field
277
+ * @param string $key
278
+ * @param array $atts Optional
279
+ */
280
+ public function color( $key, array $atts = array() )
281
+ {
282
+ echo '<input type="text" class="wpel-colorpicker"
283
+ id="' . $this->get_field_id( $key ) . '"
284
+ name="' . $this->get_field_name( $key ) . '"
285
+ value="' . esc_attr( $this->get_value( $key ) ) . '"
286
+ ' . $this->get_html_atts( $atts ) . '
287
+ >';
288
+ }
289
+
290
  }
291
 
292
  /*?>*/
public/css/jquery.dataTables.min.css DELETED
@@ -1 +0,0 @@
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-global.css DELETED
@@ -1,32 +0,0 @@
1
- @font-face {
2
- font-family: 'external-links';
3
- src: url('font/external-links.eot?25257834');
4
- src: url('font/external-links.eot?25257834#iefix') format('embedded-opentype'),
5
- url('font/external-links.woff2?25257834') format('woff2'),
6
- url('font/external-links.woff?25257834') format('woff'),
7
- url('font/external-links.ttf?25257834') format('truetype'),
8
- url('font/external-links.svg?25257834#external-links') format('svg');
9
- font-weight: normal;
10
- font-style: normal;
11
- }
12
-
13
-
14
- a.toplevel_page_wpel-settings-page .wp-menu-image:before,
15
- a.toplevel_page_wpel-network-settings-page .wp-menu-image:before{
16
- font-family: "external-links";
17
- font-style: normal;
18
- font-weight: normal;
19
- speak: none;
20
- display: inline-block;
21
- text-decoration: inherit;
22
- width: 1em;
23
- margin-right: .2em;
24
- text-align: center;
25
- font-variant: normal;
26
- text-transform: none;
27
- line-height: 1em;
28
- margin-left: .2em;
29
- -webkit-font-smoothing: antialiased;
30
- -moz-osx-font-smoothing: grayscale;
31
- content: '\f14c';
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
public/css/wpel-admin.css CHANGED
@@ -14,13 +14,82 @@
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 {
@@ -47,7 +116,7 @@
47
  }
48
 
49
  .nav-tab .dashicons {
50
- color: #31a3d9;
51
  font-size: 18px;
52
  margin-right: 4px;
53
  line-height: 24px;
@@ -98,9 +167,16 @@
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,
@@ -152,7 +228,7 @@
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;
@@ -161,8 +237,8 @@
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;
@@ -203,7 +279,7 @@ h1.nav-tab-wrapper {
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;
@@ -214,241 +290,10 @@ h1.nav-tab-wrapper {
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;
@@ -491,7 +336,7 @@ table.dataTable thead td {
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,
@@ -554,8 +399,8 @@ table.dataTable thead td {
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;
@@ -569,152 +414,171 @@ 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
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  padding: 0px;
15
  }
16
 
17
+ p {
18
+ font-size: 14px;
19
+ }
20
+
21
  .wpel-body-wrap {
22
  background-color: #fff;
23
  padding: 40px 60px;
24
  max-width: 1200px;
25
  width: 100%;
26
+ margin: 0 20px;
27
  box-sizing: border-box;
28
+ float: left;
29
+ }
30
+
31
+ .wpel-container-right {
32
+ max-width: calc(35% - 40px);
33
+ float: left;
34
+ }
35
+
36
+ .sidebar-box {
37
+ box-shadow: 0 1px 1px rgb(0 0 0 / 4%);
38
+ background: white;
39
+ padding: 15px;
40
+ font-size: 14px;
41
+ line-height: 1.5;
42
+ max-width: 450px;
43
+ }
44
+
45
+ .sidebar-box.pro-ad-box {
46
+ border: 2px solid #1775a7;
47
+ }
48
+
49
+ a.button.button-buy {
50
+ padding: 11px 40px;
51
+ color: white;
52
+ background: #1775a7;
53
+ font-weight: 600;
54
+ border: none;
55
+ line-height: 1.5;
56
+ height: auto;
57
+ margin-bottom: 10px;
58
+ }
59
+
60
+ a.button.button-buy:hover,
61
+ a.button.button-buy:active,
62
+ a.button.button-buy:focus {
63
+ box-shadow: 0px 0px 10px 0px rgb(50 138 210 / 52%);
64
+ background: #1775a7;
65
+ color: white;
66
+ border: none;
67
+ }
68
+
69
+ .text-center {
70
+ text-align: center;
71
+ }
72
+
73
+ .plain-list {
74
+ margin-top: 5px;
75
+ list-style-type: circle;
76
+ list-style-position: inside;
77
+ }
78
+
79
+ .plain-list li {
80
+ text-indent: -18px;
81
+ padding-left: 23px;
82
+ line-height: 23px;
83
+ margin: 0;
84
+ }
85
+
86
+ .pro-ad-box p b {
87
+ border-bottom: 3px solid #1775a7;
88
+ }
89
+
90
+ .pro-ad-box img {
91
+ max-height: 50px;
92
+ padding: 0 0 10px 0;
93
  }
94
 
95
  .toplevel_page_wpel-settings-page #wpcontent {
116
  }
117
 
118
  .nav-tab .dashicons {
119
+ color: #1775a7;
120
  font-size: 18px;
121
  margin-right: 4px;
122
  line-height: 24px;
167
  margin-right: 5px;
168
  }
169
 
170
+ .wpel-settings-page .nav-tab-pro,
171
+ .wpel-network-page .nav-tab-pro {
172
+ background-color: #1775a7;
173
+ color: #fff;
174
+ }
175
+
176
+ .wpel-settings-page .nav-tab-pro:hover,
177
+ .wpel-network-page .nav-tab-pro:hover {
178
+ background-color: #1775a7;
179
+ color: #fff;
180
  }
181
 
182
  .wpel-settings-page form,
228
  margin-bottom: -3px;
229
  border-bottom: 3px solid #eef3f5;
230
  font-weight: 400;
231
+ padding: 10px 15px;
232
  outline: none;
233
  box-shadow: none;
234
  font-weight: 500;
237
  .nav-tab-active,
238
  .nav-tab-active:hover,
239
  .nav-tab:hover {
240
+ color: #1775a7;
241
+ border-bottom: 3px solid #1775a7;
242
  background: none;
243
  margin-right: 0;
244
  margin-left: 0;
279
  #rating-notice, .notice {
280
  display: block;
281
  width: 1200px;
282
+ margin: 10px 20px !important;
283
  box-sizing: border-box;
284
  border-right: none;
285
  border-top: none;
290
  padding: 15px;
291
  }
292
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
293
  .wpel-logo {
294
  width: 100%;
295
  }
296
 
 
 
297
  .toplevel_page_wpel-settings-page .checkbox-container,
298
  .toplevel_page_wpel-settings-page .radio-container {
299
  display: inline-block;
336
 
337
  .toplevel_page_wpel-settings-page .checkbox-container input:checked ~ .checkmark,
338
  .toplevel_page_wpel-settings-page .radio-container input:checked ~ .radio {
339
+ background-color: #1775a7;
340
  }
341
 
342
  .toplevel_page_wpel-settings-page .checkmark:after,
399
  }
400
 
401
  .wp-core-ui .button-primary {
402
+ background: #1775a7;
403
+ border-color: #1775a7;
404
  color: #fff;
405
  text-decoration: none;
406
  text-shadow: none;
414
  background-color: #eef3f5;
415
  }
416
 
417
+ #wpel-external-link-settings-icon_dashicon,
418
+ #wpel-external-link-settings-icon_fontawesome,
419
+ #wpel-internal-link-settings-icon_dashicon,
420
+ #wpel-internal-link-settings-icon_fontawesome{
421
+ font-size: 20px;
422
+ width: 80px;
423
+ padding: 4px 10px;
424
+ color: #1d2327;
425
  }
426
 
427
+ .notice-box-error {
428
+ max-width: 700px;
429
+ padding: 10px 10px 10px 20px;
430
+ border: thin solid red;
431
+ border-left-width: 5px;
432
+ margin-bottom: 30px;
433
+ font-size: 14px;
434
+ line-height: 1.5;
435
  }
436
+
437
+ .notice-box-info {
438
+ padding: 10px 10px 10px 20px;
439
+ border: thin solid #1775a7;
440
+ border-left-width: 5px;
441
+ margin-bottom: 30px;
442
+ font-size: 14px;
443
+ line-height: 1.5;
444
  }
445
+
446
+ .notice-box-error p, .notice-box-info p {
447
+ font-size: 14px;
448
+ }
449
+
450
+ /* pro dialog */
451
+ .ui-dialog-titlebar {
452
+ display: none;
453
  }
454
+
455
+ .wpel-pro-dialog .logo img {
456
+ max-height: 55px;
457
  }
458
+
459
+ .wpel-pro-dialog .logo {
460
+ text-align: center;
461
+ background: #f8f8f8;
462
+ margin: -16px -16px 0 -16px;
463
+ padding: 15px;
464
  }
465
 
466
+ .wpel-pro-dialog .footer {
467
+ text-align: center;
468
+ background: #f8f8f8;
469
+ margin: 0 -16px -16px -16px;
470
+ padding: 15px;
471
+ }
472
+
473
+ .wpel-pro-dialog .logo span {
474
+ display: block;
475
+ font-size: 18px;
476
+ margin: 10px;
477
+ }
478
+
479
+ .wpel-pro-dialog .logo span b {
480
+ border-bottom: 3px solid #1775a7;
481
+ }
482
+
483
+ #wpel-pro-table {
484
+ width: 100%;
485
+ margin: 10px auto 10px auto;
486
+ border-collapse: collapse;
487
+ }
488
+
489
+ #wpel-pro-table td {
490
+ padding: 4px 10px 4px 34px;
491
+ border: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
492
  font-size: 14px;
 
493
  }
494
 
495
+ #wpel-pro-table tr:last-child td {
496
+ text-align: center;
 
 
497
  }
498
 
499
+ #wpel-pro-table td:nth-child(2) {
500
+ background-color: rgb(23 117 167 / 8%);
 
 
501
  }
502
 
503
+ #wpel-pro-table .dashicons-yes {
504
+ color: #1775a7;
 
 
505
  }
506
 
507
+ #wpel-pro-table .dashicons {
508
+ padding-right: 8px;
509
+ margin-left: -27px;
510
  }
511
 
512
+ .center {
513
+ text-align: center;
 
 
 
 
 
 
514
  }
515
 
516
+ .prices del {
517
+ color: #00000099;
518
  }
519
 
520
+ .prices span {
521
+ font-weight: 700;
522
+ font-size: 40px;
523
+ color: #1775a7;
524
+ line-height: 1;
525
+ display: inline-block;
526
+ padding-bottom: 15px;
527
  }
528
 
529
+ #wpel-pro-table tr:first-child td {
530
+ color: #000;
531
+ font-size: 18px;
532
+ font-weight: 800 !important;
533
+ padding: 10px 0;
534
+ text-align: center;
535
  }
536
 
537
+ .pro-ad-box p b {
538
+ border-bottom: 3px solid #1775a7;
 
 
 
 
 
539
  }
540
 
541
+ .pro-ad-box img {
542
+ max-height: 50px;
543
+ padding: 0 0 10px 0;
 
 
 
 
544
  }
545
 
546
+ #wpel-pro-table tr:last-child td {
547
+ padding: 20px 0 20px 0;
548
+ vertical-align: top;
549
  }
550
 
551
+ #wpel-pro-table tr:last-child td span {
552
+ display: block;
553
+ padding: 0 0 5px 0;
554
  }
555
+
556
+ #wpel-features {
557
+ width: 100%;
558
+ padding: 20px 0 0 0;
559
+ }
560
+
561
+ #wpel-features td {
562
+ padding: 10px 20px;
563
+ }
564
+
565
+ .wp-dialog.ui-widget-content {
566
+ background: #fff !important;
567
+ }
568
+
569
+ #wpel-pro-dialog {
570
+ overflow: hidden;
571
+ }
572
+
573
+ .pro-feature {
574
+ vertical-align: super;
575
+ color: #1775a7;
576
+ font-weight: 600;
577
+ font-size: 12px;
578
+ margin-left: 4px;
579
+ font-style: italic;
580
+ }
581
+
582
+ .wpel-field-number {
583
+ width: 80px;
584
+ }
public/images/icon-small.png ADDED
Binary file
public/images/icon.png ADDED
Binary file
public/images/link-checker.png ADDED
Binary file
public/images/link-rules-new.png ADDED
Binary file
public/images/link-rules.png ADDED
Binary file
public/images/logo.png CHANGED
Binary file
public/js/jquery.dataTables.min.js DELETED
@@ -1,184 +0,0 @@
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
@@ -2,6 +2,7 @@
2
  * WP External Links Plugin
3
  * Admin
4
  */
 
5
  /*global jQuery, window*/
6
  jQuery(function ($) {
7
  // add custom jQuery show/hide function
@@ -129,247 +130,169 @@ jQuery(function ($) {
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
  });
 
 
 
 
 
 
2
  * WP External Links Plugin
3
  * Admin
4
  */
5
+
6
  /*global jQuery, window*/
7
  jQuery(function ($) {
8
  // add custom jQuery show/hide function
130
  // for network pages
131
  $(".wpel-network-page").find("form").wpelShow();
132
 
133
+ // pro dialog
134
+ $('a.nav-tab-pro').on('click', function (e) {
135
+ e.preventDefault();
136
+
137
+ open_upsell('tab');
138
+
139
+ return false;
140
+ });
141
 
142
+ $('#wpwrap').on('click', '.open-pro-dialog', function (e) {
143
  e.preventDefault();
144
+ $(this).blur();
145
+
146
+ pro_feature = $(this).data('pro-feature');
147
+ if (!pro_feature) {
148
+ pro_feature = $(this).parent('label').attr('for');
149
  }
150
+ open_upsell(pro_feature);
151
+
152
+ return false;
153
  });
154
 
155
+ $('#wpel-pro-dialog').dialog({
156
+ dialogClass: 'wp-dialog wpel-pro-dialog',
157
+ modal: true,
158
+ resizable: false,
159
+ width: 850,
160
+ height: 'auto',
161
+ show: 'fade',
162
+ hide: 'fade',
163
+ close: function (event, ui) {},
164
+ open: function (event, ui) {
165
+ $(this).siblings().find('span.ui-dialog-title').html('WP Links PRO is here!');
166
+ wpel_fix_dialog_close(event, ui);
167
+ },
168
+ autoOpen: false,
169
+ closeOnEscape: true,
170
+ });
171
 
172
+ function clean_feature(feature) {
173
+ feature = feature || 'free-plugin-unknown';
174
+ feature = feature.toLowerCase();
175
+ feature = feature.replace(' ', '-');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
 
177
+ return feature;
178
+ }
 
 
179
 
180
+ function open_upsell(feature) {
181
+ feature = clean_feature(feature);
182
 
183
+ $('#wpel-pro-dialog').dialog('open');
 
 
 
184
 
185
+ $('#wpel-pro-table .button-buy').each(function (ind, el) {
186
+ tmp = $(el).data('href-org');
187
+ tmp = tmp.replace('pricing-table', feature);
188
+ $(el).attr('href', tmp);
 
 
 
 
 
 
 
 
 
 
189
  });
190
+ } // open_upsell
191
 
192
+ if (window.localStorage.getItem('wpel_upsell_shown') != 'true') {
193
+ open_upsell('welcome');
 
194
 
195
+ window.localStorage.setItem('wpel_upsell_shown', 'true');
196
+ window.localStorage.setItem('wpel_upsell_shown_timestamp', new Date().getTime());
197
+ }
198
+
199
+ if (window.location.hash == '#open-pro-dialog') {
200
+ open_upsell('url-hash');
201
+ window.location.hash = '';
202
+ }
203
+
204
+ $("a.show-link-rules").click(function() {
205
+ $('#link-rules-new').dialog({ height:'auto',
206
+ width:'auto',
207
+ closeOnEscape: true,
208
+ dialogClass: 'wp-dialog',
209
+ modal: true,
210
+ open: function (event, ui) {
211
+ wpel_fix_dialog_close(event, ui);
212
+ },});
213
+ });
214
+
215
+ jQuery(document).ready(function($){
216
+ $('.wpel-colorpicker').wpColorPicker();
217
  });
218
 
219
+
220
+ $('.wpel-exit-confirmation').on('click', function(event){
221
+ event.stopPropagation();
222
+ refresh_exit_confirmaiton_preview();
 
 
 
 
 
 
223
  });
224
 
225
+ function refresh_exit_confirmaiton_preview(){
226
+ wp_external_links = {};
227
+ wp_external_links.background = $('#wpel-exit-confirmation-settings-background').val();
228
+ wp_external_links.title = $('#wpel-exit-confirmation-settings-title').val();
229
+ wp_external_links.title_color = $('#wpel-exit-confirmation-settings-title_color').val();
230
+ wp_external_links.title_background = $('#wpel-exit-confirmation-settings-title_background').val();
231
+ wp_external_links.title_size = $('#wpel-exit-confirmation-settings-title_size').val();
232
+ wp_external_links.text = $('#wpel-exit-confirmation-settings-text').val().replace('{siteurl}', wpel.home_url);
233
+ wp_external_links.text_color = $('#wpel-exit-confirmation-settings-text_color').val();
234
+ wp_external_links.text_size = $('#wpel-exit-confirmation-settings-text_size').val();
235
+ wp_external_links.popup_width = $('#wpel-exit-confirmation-settings-popup_width').val();
236
+ wp_external_links.popup_height = $('#wpel-exit-confirmation-settings-popup_height').val();
237
+ wp_external_links.overlay = $('#wpel-exit-confirmation-settings-overlay').val();
238
+ wp_external_links.overlay_color = $('#wpel-exit-confirmation-settings-overlay_color').val();
239
+ wp_external_links.button_text = $('#wpel-exit-confirmation-settings-button_text').val();
240
+ wp_external_links.button_size = $('#wpel-exit-confirmation-settings-button_size').val();
241
+ wp_external_links.button_color = $('#wpel-exit-confirmation-settings-button_color').val();
242
+ wp_external_links.button_background = $('#wpel-exit-confirmation-settings-button_background').val();
243
+ wp_external_links.title = $('#wpel-exit-confirmation-settings-title').val();
244
+
245
+ wp_external_links.href = 'https://www.google.com';
246
+
247
+ exit_confirmation_html = '';
248
+ if(wp_external_links.overlay == '1'){
249
+ exit_confirmation_html += '<div id="wpel_exit_confirmation_overlay"></div>';
250
  }
251
+ exit_confirmation_html += '<div id="wpel_exit_confirmation">';
252
+ if(wp_external_links.title.length>0){
253
+ exit_confirmation_html += '<div id="wpel_exit_confirmation_title">'+wp_external_links.title+'</div>';
254
+ }
255
+ exit_confirmation_html += '<div id="wpel_exit_confirmation_link">'+wp_external_links.text+'<br /><a target="'+ wp_external_links.href +'" href="'+wp_external_links.href+'">'+wp_external_links.href+'</a></div>';
256
+ exit_confirmation_html += '<div id="wpel_exit_confirmation_button_wrapper">';
257
+ exit_confirmation_html += '<div id="wpel_exit_confirmation_cancel" onMouseOver="this.style.opacity=\'0.8\'" onMouseOut="this.style.opacity=\'1\'">' + wp_external_links.button_text + '</a></div>';
258
+ exit_confirmation_html += '</div>';
259
+ exit_confirmation_html += '</div>';
260
+
261
+ exit_confirmation_html += '<style>';
262
+ exit_confirmation_html += '#wpel_exit_confirmation_overlay{width:100%;height:100%;position:fixed;top:0px;left:0px;opacity:0.2;z-index:100000;background:'+wp_external_links.overlay_color+';}';
263
+ exit_confirmation_html += '#wpel_exit_confirmation{z-index:100001;border-radius:4px;padding-bottom:40px;position:fixed;top:0px;left:0px;top:50%;left:50%;margin-top:-'+(wp_external_links.popup_height/2)+'px;margin-left:-'+(wp_external_links.popup_width/2)+'px;width:'+wp_external_links.popup_width+'px;height:'+wp_external_links.popup_height+'px;background:'+wp_external_links.background+';}';
264
+ exit_confirmation_html += '#wpel_exit_confirmation_title{width:100%;padding:6px 10px; text-align:center; box-sizing: border-box; background:'+wp_external_links.title_background+';font-size:'+wp_external_links.title_size+'px; color:'+wp_external_links.title_color+';}';
265
+ exit_confirmation_html += '#wpel_exit_confirmation_link{width:100%;padding:10px 20px; line-height: 1.5; box-sizing: border-box;font-size:'+wp_external_links.text_size+'px; color:'+wp_external_links.text_color+';}';
266
+ exit_confirmation_html += '#wpel_exit_confirmation_button_wrapper{width:100%; text-align:center; position:absolute; bottom:10px;}';
267
+ exit_confirmation_html += '#wpel_exit_confirmation_cancel{cursor:pointer;border-radius:4px;padding:10px 15px;display:inline-block;font-size:'+wp_external_links.button_size+'px;color:'+wp_external_links.button_color+'; background:'+wp_external_links.button_background+';}';
268
+
269
+ exit_confirmation_html += '@media only screen and (max-width: 900px) {';
270
+ exit_confirmation_html += '#wpel_exit_confirmation{ width: 90%; margin: 0 auto; padding-bottom: 40px; top: 20%; position: fixed; left: auto; height: auto; height:'+wp_external_links.popup_height+'px; display: block; margin-left: 5%;}';
271
+ exit_confirmation_html += '}';
272
+ exit_confirmation_html += '</style>';
273
+
274
+ $('#exit-confirmation-preview').html(exit_confirmation_html);
275
+ }
276
+
277
+ $('body').on('click', '#wpel_exit_confirmation_cancel', function(e){
278
+ $('#wpel_exit_confirmation_overlay').remove();
279
+ $('#wpel_exit_confirmation').remove();
280
+ });
281
+
282
+ $('body').click(function() {
283
+ $('#wpel_exit_confirmation_overlay').remove();
284
+ $('#wpel_exit_confirmation').remove();
285
+ });
286
+
287
+ $('#wpel_exit_confirmation').click(function(event){
288
+ event.stopPropagation();
 
 
 
 
 
289
  });
290
 
 
 
 
 
 
 
 
 
291
 
 
 
292
  });
293
+
294
+ function wpel_fix_dialog_close(event, ui) {
295
+ jQuery('.ui-widget-overlay').bind('click', function () {
296
+ jQuery('#' + event.target.id).dialog('close');
297
+ });
298
+ } // wpel_fix_dialog_close
public/js/wpel-link-highlighter.js DELETED
@@ -1,38 +0,0 @@
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
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
public/js/wpel-pointers.js ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * WP External Links
3
+ * Backend GUI pointers
4
+ * (c) WebFactory Ltd, 2017 - 2022
5
+ */
6
+
7
+ jQuery(document).ready(function($){
8
+ if (typeof wpel_pointers == 'undefined') {
9
+ return;
10
+ }
11
+
12
+ $.each(wpel_pointers, function(index, pointer) {
13
+ if (index.charAt(0) == '_') {
14
+ return true;
15
+ }
16
+ $(pointer.target).pointer({
17
+ content: '<h3>WP External Links</h3><p>' + pointer.content + '</p>',
18
+ pointerWidth: 380,
19
+ position: {
20
+ edge: pointer.edge,
21
+ align: pointer.align
22
+ },
23
+ close: function() {
24
+ $.get(ajaxurl, {
25
+ notice_name: index,
26
+ _ajax_nonce: wpel_pointers._nonce_dismiss_pointer,
27
+ action: 'wpel_dismiss_notice'
28
+ });
29
+ }
30
+ }).pointer('open');
31
+ });
32
+ });
readme.txt CHANGED
@@ -2,22 +2,22 @@
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: 6.0
6
  Requires PHP: 7.2
7
- Stable tag: 2.51
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
 
15
  **Manage all external & internal links on your site**. Control icons, nofollow, noopener, ugc (User Generated Content), sponsored and if links open in new window or new tab.
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
@@ -29,6 +29,9 @@ Check every single link on your site! See if it's broken or not, if it's redirec
29
  * Set other attributes like title and CSS classes
30
  * Scan complete page (or just posts, comments, widgets)
31
  * SEO friendly
 
 
 
32
 
33
  = And more... =
34
  * Network Settings (WPMU support)
@@ -247,6 +250,13 @@ See [FAQ](https://wordpress.org/plugins/wp-external-links/faq/) for more info.
247
 
248
  == Changelog ==
249
 
 
 
 
 
 
 
 
250
  = 2.51 =
251
  * 2022-01-28
252
  * fixed icons for excluded external links
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: 6.1
6
  Requires PHP: 7.2
7
+ Stable tag: 2.55
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
+ Internal links & external links manager: open in new window or tab, control nofollow, ugc, sponsored & noopener. SEO friendly.
12
 
13
  == Description ==
14
 
15
  **Manage all external & internal links on your site**. Control icons, nofollow, noopener, ugc (User Generated Content), sponsored and if links open in new window or new tab.
16
 
17
+ <a href="https://getwplinks.com/">WP Links</a> 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 - PRO feature =
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 feature is a part of the <a href="https://getwplinks.com/">WP Links PRO</a> plugin.
21
 
22
  = Features =
23
  * Manage external and internal links
29
  * Set other attributes like title and CSS classes
30
  * Scan complete page (or just posts, comments, widgets)
31
  * SEO friendly
32
+ * Link Scanner - check all links on your site - PRO feature
33
+ * Exit Confirmation - protect visitors and traffic when external links are clicked - PRO feature
34
+ * Link Rules - create advanced link rules for choosen link groups - PRO feature
35
 
36
  = And more... =
37
  * Network Settings (WPMU support)
250
 
251
  == Changelog ==
252
 
253
+ = 2.55 =
254
+ * 2022-07-09
255
+ * fixed current_screen() bug
256
+ * fixed "icon_type" cannot be found bug
257
+ * introduction of the PRO version
258
+ * removed link scanner beta
259
+
260
  = 2.51 =
261
  * 2022-01-28
262
  * fixed icons for excluded external links
templates/partials/nav-tabs.php CHANGED
@@ -19,22 +19,23 @@ $set_tab_active_class = function ( $tab ) use ( $vars ) {
19
  }
20
  };
21
 
 
22
  $first_install = get_option( 'wpel-first-install' );
23
  $dismiss_url = add_query_arg(array('action' => 'wpel_dismiss_notice', 'notice' => 'rate', 'redirect' => urlencode($_SERVER['REQUEST_URI'])), admin_url('admin.php'));
24
 
25
- if (false == get_option( 'wpel-notice-dismissed-rate', false ) && current_time( 'timestamp' ) - $first_install > ( HOUR_IN_SECONDS / 4 ) ) {
26
- echo '<div id="rating-notice" class="notice notice-info">
27
  <p><strong>Help us keep External Links <u>free &amp; maintained</u></strong><br>By taking a minute to rate the plugin you\'ll help us keep it free &amp; maintained. Thank you 👋</p>
28
  <p><a href="https://wordpress.org/support/plugin/wp-external-links/reviews/#new-post" target="_blank" class="button button-primary">Rate the plugin 👍</a> &nbsp;&nbsp; <a href="' . $dismiss_url . '">I\'ve already rated it</a></p>
29
  </div>';
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' ]; ?>
19
  }
20
  };
21
 
22
+ // disabled
23
  $first_install = get_option( 'wpel-first-install' );
24
  $dismiss_url = add_query_arg(array('action' => 'wpel_dismiss_notice', 'notice' => 'rate', 'redirect' => urlencode($_SERVER['REQUEST_URI'])), admin_url('admin.php'));
25
 
26
+ if (false && false == get_option( 'wpel-notice-dismissed-rate', false ) && current_time( 'timestamp' ) - $first_install > ( HOUR_IN_SECONDS / 4 ) ) {
27
+ echo '<div id="rating-notice" class="notice notice-info">
28
  <p><strong>Help us keep External Links <u>free &amp; maintained</u></strong><br>By taking a minute to rate the plugin you\'ll help us keep it free &amp; maintained. Thank you 👋</p>
29
  <p><a href="https://wordpress.org/support/plugin/wp-external-links/reviews/#new-post" target="_blank" class="button button-primary">Rate the plugin 👍</a> &nbsp;&nbsp; <a href="' . $dismiss_url . '">I\'ve already rated it</a></p>
30
  </div>';
31
  }
32
  ?>
33
  <h2 class="nav-tab-wrapper">
34
+ <?php foreach ( $vars[ 'tabs' ] as $tab_key => $tab_values ):
35
  if($tab_key == 'admin'){
36
  continue;
37
  }
38
+
39
  ?>
40
  <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; ?>">
41
  <?php echo $tab_values[ 'icon' ]; ?> <?php echo $tab_values[ 'title' ]; ?>
templates/partials/tab-contents/link-checking.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Tab Support
4
  *
5
  * @package WPEL
6
  * @category WordPress Plugin
@@ -13,125 +13,31 @@
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
- ?>
1
  <?php
2
  /**
3
+ * Tab Link Scanner
4
  *
5
  * @package WPEL
6
  * @category WordPress Plugin
13
  */
14
  ?>
15
 
16
+ <div id="wpel-link-rules">
17
+ <div class="notice-box-info">
18
+ <b>Link Checker (a PRO feature) scans your website's pages &amp; analyzes all links.</b> It not only checks if links are valid, but also checks their details such as REL attributes (nofollow, dofollow, noopener, sponsored, ...) and checks if they are pointing to bad domains. Linking to domains that contain pornography, illegal downloads or that contain malware can hurt your site's SEO. Link Scanner will help you get rid of those links in minutes, regardless of your site size. <a href="#" class="open-pro-dialog" data-pro-feature="link-checker-banner">Get PRO now</a> to use the Link Checker.
 
 
 
19
  </div>
20
 
21
+ <p><a href="#" class="open-pro-dialog" data-pro-feature="link-checker"><img style="max-width: 100%;" src="<?php echo plugins_url('/public/images/link-checker.png', WPEL_Plugin::get_plugin_file()); ?>" alt="Link checker" title="Link checker"></a></p>
22
+
23
+ <p><b>Will the Scanner help my SEO score?</b><br>
24
+ The Scanner is a reporting tool, so it doesn't modify any links on its own. However, it'll show you a list of broken and bad links that you have on your site. By removing those you can improve your SEO score.</p>
25
 
26
+ <p><b>Does the Scanner use my server's resources?</b><br>
27
+ No. It's a SaaS so the majority of work is done on our servers. The resources used are the same as if a visitor opened every page on your site.</p>
28
 
29
  <p><b>What are the benefits of using the Link Scanner?</b><br>
30
  You can look at it as a broken link checker, but it's a lot more.<br>
31
+ After grabbing your sitemap the scanner will visit every page, post, product, and other 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 as well as the site it links too. That way you can quickly check all the links on all of your pages and modify them if necessary.<br>
32
  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>
33
 
34
  <p><b>Will the Scanner slow down my site?</b><br>
35
  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>
36
 
37
  <p><b>How long does a scan take?</b><br>
38
+ 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 Link Checker has to check.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
 
40
+ <p><b>Wasn't this tool free before?</b><br>
41
+ It was free for a limited number of pages while it was in public beta.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
templates/partials/tab-contents/link-rules.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ <div id="wpel-link-rules">
16
+ <div class="notice-box-info">
17
+ <b>Link rules (a PRO feature) provide unlimited flexibility</b> in creating rules based on link URL (href) values. Each rule defines how selected links are threated, what their target, rel, icon and other properties will be - <a href="#" class="show-link-rules">see how each rule is defined</a>. For complex sites, with a lot of different rules and exceptions this is a powerful tool that enables full control and modifications of any number of links. <a href="#" class="open-pro-dialog" data-pro-feature="link-rules-banner">Get PRO now</a> to use link rules.
18
+ </div>
19
+
20
+ <div id="link-rules-new" style="display: none;">
21
+ <img style="width: 900px;" src="<?php echo plugins_url('/public/images/link-rules-new.png', WPEL_Plugin::get_plugin_file()); ?>" alt="New link rule example" title="New link rule example">
22
+ </div>
23
+
24
+ <p><a href="#" class="open-pro-dialog" data-pro-feature="link-rules"><img style="max-width: 100%;" src="<?php echo plugins_url('/public/images/link-rules.png', WPEL_Plugin::get_plugin_file()); ?>" alt="Link rules example" title="Link rules example"></a></p>
25
+
26
+ </div>
templates/settings-page/main.php CHANGED
@@ -51,6 +51,113 @@
51
  endif;
52
  ?>
53
  </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
 
 
 
55
  </div>
56
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  endif;
52
  ?>
53
  </form>
54
+ </div>
55
+ <div class="wpel-container-right">
56
+ <div class="sidebar-box pro-ad-box">
57
+ <p class="text-center"><a href="#" data-pro-feature="sidebar-box-logo" class="open-pro-dialog">
58
+ <img src="<?php echo plugins_url('/public/images/logo.png', WPEL_Plugin::get_plugin_file()); ?>" alt="WP Links PRO" title="WP Links PRO"></a><br>PRO version is here! Grab the launch discount.<br><b>All prices are LIFETIME!</b></p>
59
+ <ul class="plain-list">
60
+ <li>Complete control over all links</li>
61
+ <li>Exit Confirmation for traffic &amp; links protection</li>
62
+ <li>Scan &amp; test all links with one click using our SaaS</li>
63
+ <li>Unlimited custom link rules for any group of links</li>
64
+ <li>Licenses &amp; Sites Manager (remote SaaS dashboard)</li>
65
+ <li>White-label Mode</li>
66
+ <li>Complete Codeless Plugin Rebranding</li>
67
+ <li>Email support from plugin developers</li>
68
+ </ul>
69
+
70
+ <p class="text-center"><a href="#" class="open-pro-dialog button button-buy" data-pro-feature="sidebar-box">Get PRO Now</a></p>
71
+ </div>
72
 
73
+ <div class="sidebar-box" style="margin-top: 35px;">
74
+ <p>Please <a href="https://wordpress.org/support/plugin/wp-external-links/reviews/#new-post" target="_blank">rate the plugin ★★★★★</a> to <b>keep it up-to-date &amp; maintained</b>. It only takes a second to rate. Thank you! 👋</p>
75
+ </div>
76
  </div>
77
+ </div>
78
+
79
+ <div id="wpel-pro-dialog" style="display: none;" title="WP Links PRO is here!"><span class="ui-helper-hidden-accessible"><input type="text"/></span>
80
+
81
+ <div class="center logo"><a href="https://getwplinks.com/?ref=wpel-free-pricing-table" target="_blank"><img src="<?php echo plugins_url('/public/images/logo.png', WPEL_Plugin::get_plugin_file()); ?>" alt="WP Links PRO" title="WP Links PRO"></a><br>
82
+
83
+ <span>Limited PRO Launch Discount - <b>all prices are LIFETIME</b>! Pay once &amp; use forever!</span>
84
+ </div>
85
+
86
+ <table id="wpel-pro-table">
87
+ <tr>
88
+ <td class="center">Lifetime Personal License</td>
89
+ <td class="center">Lifetime Team License</td>
90
+ <td class="center">Lifetime Agency License</td>
91
+ </tr>
92
+
93
+ <tr class="prices">
94
+ <td class="center"><del>$79 /year</del><br><span>$59</span> <b>/lifetime</b></td>
95
+ <td class="center"><del>$159 /year</del><br><span>$69</span> <b>/lifetime</b></td>
96
+ <td class="center"><del>$299 /year</del><br><span>$119</span> <b>/lifetime</b></td>
97
+ </tr>
98
+
99
+ <tr>
100
+ <td><span class="dashicons dashicons-yes"></span><b>1 Site License</b></td>
101
+ <td><span class="dashicons dashicons-yes"></span><b>5 Sites License</b></td>
102
+ <td><span class="dashicons dashicons-yes"></span><b>100 Sites License</b></td>
103
+ </tr>
104
+
105
+ <tr>
106
+ <td><span class="dashicons dashicons-yes"></span>All Plugin Features</td>
107
+ <td><span class="dashicons dashicons-yes"></span>All Plugin Features</td>
108
+ <td><span class="dashicons dashicons-yes"></span>All Plugin Features</td>
109
+ </tr>
110
+
111
+ <tr>
112
+ <td><span class="dashicons dashicons-yes"></span>Lifetime Updates &amp; Support</td>
113
+ <td><span class="dashicons dashicons-yes"></span>Lifetime Updates &amp; Support</td>
114
+ <td><span class="dashicons dashicons-yes"></span>Lifetime Updates &amp; Support</td>
115
+ </tr>
116
+
117
+ <tr>
118
+ <td><span class="dashicons dashicons-yes"></span>Link Scanner (300 scan credits)</td>
119
+ <td><span class="dashicons dashicons-yes"></span>Link Scanner (2,000 scan credits)</td>
120
+ <td><span class="dashicons dashicons-yes"></span>Link Scanner (6,000 scan credits)</td>
121
+ </tr>
122
+
123
+ <tr>
124
+ <td><span class="dashicons dashicons-yes"></span>Custom Link Rules</td>
125
+ <td><span class="dashicons dashicons-yes"></span>Custom Link Rules</td>
126
+ <td><span class="dashicons dashicons-yes"></span>Custom Link Rules</td>
127
+ </tr>
128
+
129
+ <tr>
130
+ <td><span class="dashicons dashicons-yes"></span>Exit Confirmation Links Protection</td>
131
+ <td><span class="dashicons dashicons-yes"></span>Exit Confirmation Links Protection</td>
132
+ <td><span class="dashicons dashicons-yes"></span>Exit Confirmation Links Protection</td>
133
+ </tr>
134
+
135
+ <tr>
136
+ <td><span class="dashicons dashicons-no"></span>Licenses &amp; Sites Manager</td>
137
+ <td><span class="dashicons dashicons-yes"></span>Licenses &amp; Sites Manager</td>
138
+ <td><span class="dashicons dashicons-yes"></span>Licenses &amp; Sites Manager</td>
139
+ </tr>
140
+
141
+ <tr>
142
+ <td><span class="dashicons dashicons-no"></span>White-label Mode</td>
143
+ <td><span class="dashicons dashicons-yes"></span>White-label Mode</td>
144
+ <td><span class="dashicons dashicons-yes"></span>White-label Mode</td>
145
+ </tr>
146
+
147
+ <tr>
148
+ <td><span class="dashicons dashicons-no"></span>Full Plugin Rebranding</td>
149
+ <td><span class="dashicons dashicons-no"></span>Full Plugin Rebranding</td>
150
+ <td><span class="dashicons dashicons-yes"></span>Full Plugin Rebranding</td>
151
+ </tr>
152
+
153
+ <tr>
154
+ <td><a class="button button-buy" data-href-org="https://getwplinks.com/buy/?product=personal-launch&ref=pricing-table" href="https://getwplinks.com/buy/?product=personal-launch&ref=pricing-table" target="_blank">Lifetime License<br>$59 -&gt; BUY NOW</a>
155
+ <br>or <a class="button-buy" data-href-org="https://getwplinks.com/buy/?product=personal-monthly&ref=pricing-table" href="https://getwplinks.com/buy/?product=personal-monthly&ref=pricing-table" target="_blank">only $8.99 <small>/month</small></a></td>
156
+ <td><a class="button button-buy" data-href-org="https://getwplinks.com/buy/?product=team-launch&ref=pricing-table" href="https://getwplinks.com/buy/?product=team-launch&ref=pricing-table" target="_blank">Lifetime License<br>$69 -&gt; BUY NOW</a></td>
157
+ <td><a class="button button-buy" data-href-org="https://getwplinks.com/buy/?product=agency-launch&ref=pricing-table" href="https://getwplinks.com/buy/?product=agency-launch&ref=pricing-table" target="_blank">Lifetime License<br>$119 -&gt; BUY NOW</a></td>
158
+ </tr>
159
+
160
+ </table>
161
+
162
+ <div class="center footer"><b>100% No-Risk Money Back Guarantee!</b> If you don\'t like the plugin over the next 7 days, we will happily refund 100% of your money. No questions asked! Payments are processed by our merchant of records - <a href="https://paddle.com/" target="_blank">Paddle</a>.</div>
163
+ </div>
templates/settings-page/tab-contents/exit-confirmation.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Tab Exit Confirmation Links
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
+ * @option string "current_tab"
14
+ */
15
+
16
+ echo '<div class="notice-box-info">
17
+ <b>Exit Confirmation (a PRO feature) protects your traffic &amp; visitors</b> by alerting them when they\'re about to leave your site. Since you don\'t control content on 3rd party sites it\'s a good practice to warn visitors they\'re leaving the safety of your site. Doing that will also bring you more traffic as visitors will spend more time on your site. <a href="#" class="open-pro-dialog" data-pro-feature="exit-confirmation-banner">Get PRO now</a> to use the Exit Confirmation feature.
18
+ </div>';
19
+
20
+ $default_fields_file = WPEL_Plugin::get_plugin_dir( '/templates/partials/tab-contents/fields-default.php' );
21
+ WPEL_Plugin::show_template( $default_fields_file, $vars );
22
+
23
+ echo '<br><a href="#" class="open-pro-dialog button button-primary" data-pro-feature="exit-confirmation">Save Changes</a>';
wf-flyout/config.php CHANGED
@@ -12,6 +12,8 @@ $config['menu_accent_color'] = '#dd3036';
12
  $config['custom_css'] = '#wf-flyout .wff-menu-item .dashicons.dashicons-universal-access { font-size: 30px; padding: 0px 10px 0px 0; } #wf-flyout .ucp-icon .wff-icon img { max-width: 70%; } #wf-flyout .ucp-icon .wff-icon { line-height: 57px; }';
13
 
14
  $config['menu_items'] = array(
 
 
15
  array('href' => 'https://wpreset.com/?ref=wff-wpel', 'target' => '_blank', 'label' => 'Get WP Reset PRO with 50% off', 'icon' => 'wp-reset.png'),
16
  array('href' => 'https://underconstructionpage.com/?ref=wff-wpel&coupon=welcome', 'target' => '_blank', 'label' => 'Create the perfect Under Construction Page', 'icon' => 'ucp.png', 'class' => 'ucp-icon'),
17
  array('href' => 'https://wpsticky.com/?ref=wff-wpel', 'target' => '_blank', 'label' => 'Make a menu sticky with WP Sticky', 'icon' => 'dashicons-admin-post'),
12
  $config['custom_css'] = '#wf-flyout .wff-menu-item .dashicons.dashicons-universal-access { font-size: 30px; padding: 0px 10px 0px 0; } #wf-flyout .ucp-icon .wff-icon img { max-width: 70%; } #wf-flyout .ucp-icon .wff-icon { line-height: 57px; }';
13
 
14
  $config['menu_items'] = array(
15
+ array('href' => 'https://wpforcessl.com/?ref=wff-wpel', 'label' => 'Fix all SSL problems &amp; monitor site in real-time', 'icon' => 'wp-ssl.png', 'class' => 'wpfssl-icon'),
16
+ array('href' => 'https://wp301redirects.com/?ref=wff-wpel&coupon=50off', 'label' => 'Get WP 301 Redirects PRO with 50% off', 'icon' => '301-logo.png', 'class' => 'wp301-icon'),
17
  array('href' => 'https://wpreset.com/?ref=wff-wpel', 'target' => '_blank', 'label' => 'Get WP Reset PRO with 50% off', 'icon' => 'wp-reset.png'),
18
  array('href' => 'https://underconstructionpage.com/?ref=wff-wpel&coupon=welcome', 'target' => '_blank', 'label' => 'Create the perfect Under Construction Page', 'icon' => 'ucp.png', 'class' => 'ucp-icon'),
19
  array('href' => 'https://wpsticky.com/?ref=wff-wpel', 'target' => '_blank', 'label' => 'Make a menu sticky with WP Sticky', 'icon' => 'dashicons-admin-post'),
wf-flyout/icons/301-logo.png ADDED
Binary file
wf-flyout/icons/wp-ssl.png ADDED
Binary file
wf-flyout/icons/wpel.png CHANGED
Binary file
wf-flyout/wf-flyout.css CHANGED
@@ -1,6 +1,6 @@
1
  /**
2
  * Universal fly-out menu for WebFactory plugins
3
- * (c) WebFactory Ltd, 2021
4
  */
5
 
6
  #wf-flyout {
1
  /**
2
  * Universal fly-out menu for WebFactory plugins
3
+ * (c) WebFactory Ltd, 2022
4
  */
5
 
6
  #wf-flyout {
wf-flyout/wf-flyout.js CHANGED
@@ -1,6 +1,6 @@
1
  /**
2
  * Universal fly-out menu for WebFactory plugins
3
- * (c) WebFactory Ltd, 2021
4
  */
5
 
6
  jQuery(document).ready(function ($) {
1
  /**
2
  * Universal fly-out menu for WebFactory plugins
3
+ * (c) WebFactory Ltd, 2022
4
  */
5
 
6
  jQuery(document).ready(function ($) {
wf-flyout/wf-flyout.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /**
3
  * Universal fly-out menu for WebFactory plugins
4
- * (c) WebFactory Ltd, 2021
5
  */
6
 
7
 
1
  <?php
2
  /**
3
  * Universal fly-out menu for WebFactory plugins
4
+ * (c) WebFactory Ltd, 2022
5
  */
6
 
7
 
wp-external-links.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
2
  /**
3
  * Plugin Name: WP External Links
4
- * Version: 2.51
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
@@ -22,7 +22,9 @@ if ( ! function_exists( 'wpel_init' ) ):
22
  die();
23
  }
24
 
25
- define( 'TEST_WPEL_PLUGIN_FILE', __FILE__ );
 
 
26
 
27
  $plugin_file = defined( 'TEST_WPEL_PLUGIN_FILE' ) ? TEST_WPEL_PLUGIN_FILE : __FILE__;
28
  $plugin_dir = dirname( __FILE__ );
@@ -70,15 +72,13 @@ if ( ! function_exists( 'wpel_init' ) ):
70
  */
71
  global $wpdb;
72
  WPEL_Activation::create( $plugin_file, $wpdb );
 
73
  WPEL_Uninstall::create( $plugin_file, $wpdb );
74
 
75
  /**
76
  * Set plugin vars
77
  */
78
  WPEL_Plugin::create( $plugin_file, $plugin_dir );
79
-
80
- WPEL_LinkHero::create( $plugin_file, $plugin_dir );
81
-
82
  }
83
 
84
  wpel_init();
1
  <?php
2
  /**
3
  * Plugin Name: WP External Links
4
+ * Version: 2.55
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
22
  die();
23
  }
24
 
25
+ define('TEST_WPEL_PLUGIN_FILE', __FILE__);
26
+ define('WPEL_PLUGIN_DIR', plugin_dir_path(__FILE__));
27
+ define('WPEL_PLUGIN_URL', plugin_dir_url(__FILE__));
28
 
29
  $plugin_file = defined( 'TEST_WPEL_PLUGIN_FILE' ) ? TEST_WPEL_PLUGIN_FILE : __FILE__;
30
  $plugin_dir = dirname( __FILE__ );
72
  */
73
  global $wpdb;
74
  WPEL_Activation::create( $plugin_file, $wpdb );
75
+ WPEL_Deactivate::create( $plugin_file, $wpdb );
76
  WPEL_Uninstall::create( $plugin_file, $wpdb );
77
 
78
  /**
79
  * Set plugin vars
80
  */
81
  WPEL_Plugin::create( $plugin_file, $plugin_dir );
 
 
 
82
  }
83
 
84
  wpel_init();