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

Version Description

  • 2020-10-05
    • added settings link to plugins table
    • added promo for WP 301 Redirects PRO
Download this release

Release Info

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

Code changes from version 2.46 to 2.47

includes/admin/class-wpel-settings-page.php CHANGED
@@ -84,9 +84,27 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
84
  $this->current_tab = key( $this->tabs );
85
  }
86
 
 
87
  add_filter('install_plugins_table_api_args_featured', array($this, 'featured_plugins_tab'));
88
  }
89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  /**
91
  * Helper function for adding plugins to featured list
92
  *
@@ -248,8 +266,8 @@ final class WPEL_Settings_Page extends WPRun_Base_1x0x0
248
  wp_enqueue_style( 'font-awesome' );
249
  wp_enqueue_style( 'wpel-admin-style' );
250
  wp_enqueue_script( 'wpel-admin-script' );
251
- }
252
-
253
  wp_enqueue_style( 'wpel-admin-global-style' );
254
  }
255
 
84
  $this->current_tab = key( $this->tabs );
85
  }
86
 
87
+ add_filter('plugin_action_links_' . plugin_basename(TEST_WPEL_PLUGIN_FILE), array($this, 'plugin_action_links'));
88
  add_filter('install_plugins_table_api_args_featured', array($this, 'featured_plugins_tab'));
89
  }
90
 
91
+ /**
92
+ * Add "Configure Settings" action link to plugins table, left part
93
+ *
94
+ * @param array $links Initial list of links.
95
+ *
96
+ * @return array
97
+ */
98
+ function plugin_action_links($links)
99
+ {
100
+ $settings_link = '<a href="' . admin_url('admin.php?page=wpel-settings-page') . '" title="Open WP External Links Settings">Configure Settings</a>';
101
+
102
+ array_unshift($links, $settings_link);
103
+
104
+ return $links;
105
+ }
106
+
107
+
108
  /**
109
  * Helper function for adding plugins to featured list
110
  *
266
  wp_enqueue_style( 'font-awesome' );
267
  wp_enqueue_style( 'wpel-admin-style' );
268
  wp_enqueue_script( 'wpel-admin-script' );
269
+ }
270
+
271
  wp_enqueue_style( 'wpel-admin-global-style' );
272
  }
273
 
includes/class-wpel-update.php CHANGED
@@ -59,7 +59,7 @@ final class WPEL_Update extends WPRun_Base_1x0x0
59
  if ( $site_already_set ) {
60
  return;
61
  }
62
-
63
  // get default values
64
  $external_link_values = WPEL_External_Link_Fields::get_instance()->get_default_values();
65
  $internal_link_values = WPEL_Internal_Link_Fields::get_instance()->get_default_values();
@@ -114,9 +114,11 @@ final class WPEL_Update extends WPRun_Base_1x0x0
114
  $external_link_values[ 'class' ] = $val( $old_style, 'class_name' );
115
  $external_link_values[ 'no_icon_for_img' ] = $val( $old_style, 'image_no_icon' );
116
  }
 
117
  if ( ! empty( $old_extra ) ) {
118
  // nothing
119
  }
 
120
  if ( ! empty( $old_screen ) ) {
121
  $admin_link_values[ 'own_admin_menu' ] = ( 'admin.php' == $val( $old_screen, 'menu_position' ) ) ? '1' : '';
122
  }
59
  if ( $site_already_set ) {
60
  return;
61
  }
62
+
63
  // get default values
64
  $external_link_values = WPEL_External_Link_Fields::get_instance()->get_default_values();
65
  $internal_link_values = WPEL_Internal_Link_Fields::get_instance()->get_default_values();
114
  $external_link_values[ 'class' ] = $val( $old_style, 'class_name' );
115
  $external_link_values[ 'no_icon_for_img' ] = $val( $old_style, 'image_no_icon' );
116
  }
117
+ /*
118
  if ( ! empty( $old_extra ) ) {
119
  // nothing
120
  }
121
+ */
122
  if ( ! empty( $old_screen ) ) {
123
  $admin_link_values[ 'own_admin_menu' ] = ( 'admin.php' == $val( $old_screen, 'menu_position' ) ) ? '1' : '';
124
  }
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === External Links - nofollow, noopener & new window ===
2
- Contributors: WebFactory, UnderConstructionPage, googlemapswidget, wpreset
3
  Tags: new window, new tab, external links, nofollow, noopener, ugc, sponsored, follow, dofollow, seo, noreferrer, internal links, target, links, link, internal link, external link
4
  Requires at least: 4.2
5
- Tested up to: 5.4
6
  Requires PHP: 5.3
7
- Stable tag: 2.46
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -17,7 +17,7 @@ Manage internal & external links: open in new window or tab, control nofollow, u
17
  WP External Links plugin was completely rebuilt in v2 and has lots of new features, like noopener, ugc and sponsored values for rel; font icons, internal links options and full WPMU support.
18
 
19
  = Features =
20
- * Manage external and internal links
21
  * Open links in new window or tab
22
  * Add follow or nofollow (for SEO)
23
  * Add noopener and noreferrer (for security)
@@ -42,6 +42,7 @@ When deactivating the plugin, all contents will be the same as it was before.
42
 
43
  **Like the plugin?** [Rate it](http://wordpress.org/support/view/plugin-reviews/wp-external-links) to support the development.
44
 
 
45
 
46
  == Installation ==
47
 
@@ -243,11 +244,16 @@ See [FAQ](https://wordpress.org/plugins/wp-external-links/faq/) for more info.
243
 
244
  == Changelog ==
245
 
 
 
 
 
 
246
  = 2.46 =
247
  * 2020-05-09
248
  * fixed "unable to save post" when using Gutenberg
249
  * sorry for two updated in two days :(
250
-
251
  = 2.45 =
252
  * 2020-05-08
253
  * fixed compatibility issue with Site Kit by Google
@@ -255,12 +261,12 @@ See [FAQ](https://wordpress.org/plugins/wp-external-links/faq/) for more info.
255
  = 2.43 =
256
  * 2019-12-27
257
  * improved link detection regex
258
-
259
  = 2.42 =
260
  * 2019-12-18
261
  * fixed various undefined variable notices
262
  * fixed an issue when there’s no href attribute set in an A element
263
-
264
  = 2.40 =
265
  * 2019-11-20
266
  * no longer loads CSS and FontAwesome globally on admin pages
@@ -271,7 +277,7 @@ See [FAQ](https://wordpress.org/plugins/wp-external-links/faq/) for more info.
271
  * FontAwesome updated to 4.7 with 41 new icons
272
  * bug fix: ship anchor URLs (#anchor)
273
  * bug fix: don't match domain if the name is contained in the URL
274
-
275
  = 2.32 =
276
  * 2019-07-09
277
  * security fixes
1
  === External Links - nofollow, noopener & new window ===
2
+ Contributors: WebFactory
3
  Tags: new window, new tab, external links, nofollow, noopener, ugc, sponsored, follow, dofollow, seo, noreferrer, internal links, target, links, link, internal link, external link
4
  Requires at least: 4.2
5
+ Tested up to: 5.6
6
  Requires PHP: 5.3
7
+ Stable tag: 2.47
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
17
  WP External Links plugin was completely rebuilt in v2 and has lots of new features, like noopener, ugc and sponsored values for rel; font icons, internal links options and full WPMU support.
18
 
19
  = Features =
20
+ * Manage external and internal links
21
  * Open links in new window or tab
22
  * Add follow or nofollow (for SEO)
23
  * Add noopener and noreferrer (for security)
42
 
43
  **Like the plugin?** [Rate it](http://wordpress.org/support/view/plugin-reviews/wp-external-links) to support the development.
44
 
45
+ [](http://coderisk.com/wp/plugin/wp-external-links/RIPS-6c7cnI_6Et)
46
 
47
  == Installation ==
48
 
244
 
245
  == Changelog ==
246
 
247
+ = 2.47 =
248
+ * 2020-10-05
249
+ * added settings link to plugins table
250
+ * added promo for WP 301 Redirects PRO
251
+
252
  = 2.46 =
253
  * 2020-05-09
254
  * fixed "unable to save post" when using Gutenberg
255
  * sorry for two updated in two days :(
256
+
257
  = 2.45 =
258
  * 2020-05-08
259
  * fixed compatibility issue with Site Kit by Google
261
  = 2.43 =
262
  * 2019-12-27
263
  * improved link detection regex
264
+
265
  = 2.42 =
266
  * 2019-12-18
267
  * fixed various undefined variable notices
268
  * fixed an issue when there’s no href attribute set in an A element
269
+
270
  = 2.40 =
271
  * 2019-11-20
272
  * no longer loads CSS and FontAwesome globally on admin pages
277
  * FontAwesome updated to 4.7 with 41 new icons
278
  * bug fix: ship anchor URLs (#anchor)
279
  * bug fix: don't match domain if the name is contained in the URL
280
+
281
  = 2.32 =
282
  * 2019-07-09
283
  * security fixes
wp-external-links.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /**
3
  * Plugin Name: WP External Links
4
- * Version: 2.46
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
@@ -9,8 +9,10 @@
9
  * License: Dual licensed under the MIT and GPLv2+ licenses
10
  * Text Domain: wp-external-links
11
  */
12
-
13
-
 
 
14
  if ( ! function_exists( 'wpel_init' ) ):
15
 
16
  function wpel_init()
@@ -20,6 +22,8 @@ if ( ! function_exists( 'wpel_init' ) ):
20
  die();
21
  }
22
 
 
 
23
  $plugin_file = defined( 'TEST_WPEL_PLUGIN_FILE' ) ? TEST_WPEL_PLUGIN_FILE : __FILE__;
24
  $plugin_dir = dirname( __FILE__ );
25
 
1
  <?php
2
  /**
3
  * Plugin Name: WP External Links
4
+ * Version: 2.47
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
9
  * License: Dual licensed under the MIT and GPLv2+ licenses
10
  * Text Domain: wp-external-links
11
  */
12
+
13
+ require_once 'wp301/wp301.php';
14
+ new wf_wp301(__FILE__, 'toplevel_page_wpel-settings-page');
15
+
16
  if ( ! function_exists( 'wpel_init' ) ):
17
 
18
  function 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__ );
29
 
wp301/wp301-logo.png ADDED
Binary file
wp301/wp301.js ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Campaign for WP 301 Redirects PRO
3
+ * (c) WebFactory Ltd, 2020
4
+ */
5
+
6
+ jQuery(document).ready(function ($) {
7
+ $('#wp301promo_dismiss').on('click', function (e) {
8
+ e.preventDefault();
9
+
10
+ var slug = $(this).data('plugin-slug');
11
+
12
+ $.get({
13
+ url: ajaxurl,
14
+ data: {
15
+ action: 'wp301_promo_dismiss',
16
+ slug: slug,
17
+ _ajax_nonce: wp301_promo.nonce_wp301_promo_dismiss,
18
+ },
19
+ })
20
+ .always(function (data) {})
21
+ .done(function (data) {
22
+ if (data.success) {
23
+ if (slug == 'dashboard') {
24
+ $('#wp301promo_widget').hide();
25
+ } else {
26
+ $('#wp301-dialog').dialog('close');
27
+ }
28
+ } else {
29
+ alert('Sorry, something is not right. Please reload the page and try again.');
30
+ }
31
+ })
32
+ .fail(function (data) {
33
+ alert('Sorry, something is not right. Please reload the page and try again.');
34
+ });
35
+ }); // dismiss
36
+
37
+
38
+ $('#wp301promo_submit').on('click', function (e) {
39
+ e.preventDefault();
40
+
41
+ var btn = $('#wp301promo_submit');
42
+ var name = $('#wp301promo_name').val();
43
+ var email = $('#wp301promo_email').val();
44
+ var plugin = $('#wp301promo_plugin').val();
45
+ var position = $('#wp301promo_position').val();
46
+ var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
47
+
48
+ if (name.length < 2 || name.length > 128) {
49
+ $('#wp301promo_name').focus();
50
+ alert('Please enter your name. Thank you 👍');
51
+ return false;
52
+ }
53
+ if (!regex.test(email) || email.lenght > 128) {
54
+ $('#wp301promo_email').focus();
55
+ alert('Please enter a valid email address. Thank you 👍');
56
+ return false;
57
+ }
58
+
59
+ $(btn).addClass('disabled');
60
+ $.get({
61
+ url: ajaxurl,
62
+ data: {
63
+ action: 'wp301_promo_submit',
64
+ _ajax_nonce: wp301_promo.nonce_wp301_promo_submit,
65
+ name: name,
66
+ email: email,
67
+ position: position,
68
+ plugin: plugin,
69
+ },
70
+ })
71
+ .always(function (data) {
72
+ $(btn).removeClass('disabled');
73
+ })
74
+ .done(function (data) {
75
+ if (data.success) {
76
+ alert(data.data);
77
+
78
+ if (position == 'dashboard') {
79
+ $('#wp301promo_widget').hide();
80
+ } else {
81
+ $('#wp301-dialog').dialog('close');
82
+ }
83
+ } else {
84
+ alert(data.data);
85
+ }
86
+ })
87
+ .fail(function (data) {
88
+ alert('Sorry, something is not right. Please reload the page and try again.');
89
+ });
90
+ });
91
+
92
+
93
+ $('#wp301promo_name, #wp301promo_email').on('keypress', function (e) {
94
+ if (e.which == 13) {
95
+ $('#wp301promo_submit').trigger('click');
96
+ }
97
+ }); // on enter
98
+
99
+
100
+ if (wp301_promo.open_popup && $('#wp301-dialog').length == 1) {
101
+ $('#wp301-dialog').dialog({
102
+ dialogClass: 'wp-dialog wp301-dialog',
103
+ modal: true,
104
+ resizable: false,
105
+ width: 550,
106
+ height: 'auto',
107
+ show: 'fade',
108
+ hide: 'fade',
109
+ close: function (event, ui) {},
110
+ open: function (event, ui) {
111
+ $(this)
112
+ .siblings()
113
+ .find('span.ui-dialog-title')
114
+ .html('Get a WP 301 Redirects PRO license for FREE <del>$158</del>');
115
+ wp301_fix_dialog_close(event, ui);
116
+ },
117
+ autoOpen: true,
118
+ closeOnEscape: false,
119
+ });
120
+ } // open dialog
121
+ }); // jQuery ready
122
+
123
+
124
+ function wp301_fix_dialog_close(event, ui) {
125
+ jQuery('.ui-widget-overlay').bind('click', function () {
126
+ jQuery('#' + event.target.id).dialog('close');
127
+ });
128
+ } // wp301_fix_dialog_close
wp301/wp301.php ADDED
@@ -0,0 +1,295 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Campaign for WP 301 Redirects PRO
5
+ * (c) WebFactory Ltd, 2020
6
+ */
7
+
8
+
9
+ if (false == class_exists('wf_wp301')) {
10
+ class wf_wp301
11
+ {
12
+ var $plugin_file = '';
13
+ var $plugin_slug = '';
14
+ var $plugin_screen = '';
15
+ var $options = '';
16
+ var $disable_dashboard = false;
17
+
18
+
19
+ function __construct($plugin_file, $plugin_screen)
20
+ {
21
+ $this->plugin_file = $plugin_file;
22
+ $this->plugin_slug = basename(dirname($plugin_file));
23
+ $this->plugin_screen = $plugin_screen;
24
+ $this->options = get_option('wp301promo', array());
25
+
26
+ if (!is_admin() || !empty($this->options['email_submitted']) || date('Y-m-d') > '2020-11-05') {
27
+ return;
28
+ } else {
29
+ add_action('admin_init', array($this, 'init'));
30
+ }
31
+ } // __construct
32
+
33
+
34
+ function init()
35
+ {
36
+ add_action('wp_dashboard_setup', array($this, 'add_widget'));
37
+ add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'));
38
+ add_action('wp_ajax_wp301_promo_submit', array($this, 'ajax_submit'));
39
+ add_action('wp_ajax_wp301_promo_dismiss', array($this, 'ajax_dismiss'));
40
+ add_action('admin_footer', array($this, 'admin_footer'));
41
+ } // init
42
+
43
+
44
+ function admin_enqueue_scripts()
45
+ {
46
+ $screen = get_current_screen();
47
+
48
+ if ($screen->base != 'dashboard' && $screen->id != $this->plugin_screen) {
49
+ return;
50
+ }
51
+
52
+ if ($screen->base == 'dashboard' && (!empty($this->options['popup_dismissed_dashboard']) || !empty($this->disable_dashboard))) {
53
+ return;
54
+ }
55
+
56
+ if ($screen->id == $this->plugin_screen) {
57
+ wp_enqueue_style('wp-jquery-ui-dialog');
58
+ wp_enqueue_script('jquery-ui-dialog');
59
+ }
60
+
61
+ wp_enqueue_script('wp301_promo', plugin_dir_url($this->plugin_file) . 'wp301/wp301.js');
62
+
63
+ $js_vars = array(
64
+ 'nonce_wp301_promo_submit' => wp_create_nonce('wp301_submit'),
65
+ 'nonce_wp301_promo_dismiss' => wp_create_nonce('wp301_dismiss'),
66
+ );
67
+
68
+ if (empty($this->options['popup_dismissed_' . $this->plugin_slug])) {
69
+ $js_vars['open_popup'] = true;
70
+ }
71
+
72
+ wp_localize_script('wp301_promo', 'wp301_promo', $js_vars);
73
+ } // admin_enqueue_scripts
74
+
75
+
76
+ function ajax_dismiss()
77
+ {
78
+ if (!wp_verify_nonce(@$_GET['_ajax_nonce'], 'wp301_dismiss')) {
79
+ wp_send_json_error('Something is not right. Please reload the page and try again.');
80
+ }
81
+
82
+ $slug = substr(strip_tags(trim(@$_GET['slug'])), 0, 64);
83
+
84
+ $this->options['popup_dismissed_' . $slug] = true;
85
+ $tmp = update_option('wp301promo', $this->options);
86
+
87
+ if ($tmp) {
88
+ wp_send_json_success();
89
+ } else {
90
+ wp_send_json_error();
91
+ }
92
+ } // ajax_dismiss
93
+
94
+
95
+ function ajax_submit()
96
+ {
97
+ if (!wp_verify_nonce(@$_GET['_ajax_nonce'], 'wp301_submit')) {
98
+ wp_send_json_error('Something is not right. Please reload the page and try again.');
99
+ }
100
+
101
+ $email = strip_tags(trim(@$_GET['email']));
102
+ $name = strip_tags(trim(@$_GET['name']));
103
+ $plugin = strip_tags(trim(@$_GET['plugin'])) . '-' . strip_tags(trim(@$_GET['position']));
104
+
105
+ if (!is_email($email)) {
106
+ wp_send_json_error('Please enter a valid email address.');
107
+ }
108
+
109
+ $url = add_query_arg(array('name' => $name, 'email' => $email, 'plugin' => $plugin), 'https://wp301redirects.com/subscribe/');
110
+
111
+ $response = wp_remote_get($url, array('timeout' => 25));
112
+
113
+ if (is_wp_error($response)) {
114
+ wp_send_json_error('Something is not right. Please reload the page and try again.');
115
+ }
116
+
117
+ $body = @json_decode(wp_remote_retrieve_body($response), true);
118
+ if (empty($body['success'])) {
119
+ wp_send_json_error('Something is not right. Please reload the page and try again.');
120
+ }
121
+
122
+ $this->options['email_submitted'] = true;
123
+ update_option('wp301promo', $this->options);
124
+ wp_send_json_success('Thank you for trusting us with your email! You\'ll hear from us soon 🚀');
125
+ } // ajax_submit
126
+
127
+
128
+ function add_widget()
129
+ {
130
+ if (!empty($this->options['popup_dismissed_dashboard']) || !empty($this->disable_dashboard)) {
131
+ return;
132
+ }
133
+
134
+ add_meta_box('wp301promo_widget', 'Get a WP 301 Redirects PRO license for FREE <del>$158</del>', array($this, 'widget_content'), 'dashboard', 'side', 'high');
135
+ } // add_widget
136
+
137
+
138
+ function widget_content()
139
+ {
140
+ $out = '';
141
+
142
+ $out .= '<style>';
143
+ $out .= '#wp301promo_widget .disabled { pointer-events: none; }';
144
+ $out .= '#wp301promo_widget label { font-weight: normal; display: inline-block; width: 15%; margin-bottom: 10px; }';
145
+ $out .= '#wp301promo_widget input { width: 74%; margin-bottom: 10px; }';
146
+ $out .= '#wp301promo_widget .button-primary { padding: 14px 28px; text-decoration: none; line-height: 1; }';
147
+ $out .= '#wp301promo_dismiss { font-style: italic; display: inline-block; color: #444; text-decoration: none; margin: 8px 0 0 0; }';
148
+ $out .= '#wp301promo_dismiss:hover { text-decoration: underline; }';
149
+ $out .= '#wp301promo_widget, #wp301promo_widget p { font-size: 14px; }';
150
+ $out .= '#wp301promo_widget .title301 { font-weight: 600; margin: 10px 0 -10px 0; }';
151
+ $out .= '#wp301promo_widget img { max-width: 50%; max-height: 80px; }';
152
+ $out .= '#wp301promo_widget .center { text-align: center; }';
153
+ $out .= '#wp301promo_email { margin-bottom: 0 !important; }';
154
+ $out .= '#wp301promo_widget { background-color: #fafafa; }';
155
+ $out .= '#wp301promo_widget li a { text-decoration: underline; }';
156
+ $out .= '#wp301promo_widget .wp301inside { padding: 25px 12px 0px 12px; position: relative; }';
157
+ $out .= '#wp301promo_widget p { margin-top: 14px; line-height: 1.5; }';
158
+ $out .= '#wp301promo_widget small { margin-left: 17%; }';
159
+ $out .= '#wp301promo_widget ul { font-size: 14px; margin: 0 0 20px 0; list-style-type: disc; list-style-position: inside; }';
160
+ $out .= '#wp301promo_widget li { margin-bottom: 3px; }';
161
+ $out .= '#wp301promo_submit span { display: none; text-decoration: none; margin-right: 10px; animation: wf-spin-animation 1.5s infinite linear; }';
162
+ $out .= '#wp301promo_submit.disabled span { display: inline-block; }';
163
+ $out .= '@keyframes wf-spin-animation {
164
+ from { transform: rotate(0deg); }
165
+ to { transform: rotate(360deg); }
166
+ }';
167
+ $out .= '#wp301promo_widget .inside { overflow: hidden; margin: 0; }
168
+ #wp301promo_widget .ribbon { margin: 0; padding: 11px 20px 10px 20px; background: #007cba; color: #FFF; font-weight: 800; position: absolute; top: -17px; right: -17px; transform: translateX(30%) translateY(0%) rotate(45deg); transform-origin: top left; letter-spacing: 1px; }
169
+ #wp301promo_widget .ribbon:before, #wp301promo_widget .ribbon:after { content: ""; position: absolute; top:0; margin: 0 -1px; width: 100%; height: 100%; background: #007cba; }
170
+ #wp301promo_widget .ribbon:before { right:100%; }
171
+ #wp301promo_widget .ribbon:after { left:100%; }';
172
+ $out .= '</style>';
173
+
174
+ $plugin_url = plugin_dir_url($this->plugin_file);
175
+
176
+ $out .= '<div class="ribbon">FREE</div>';
177
+ $out .= '<div class="wp301inside">';
178
+
179
+ $out .= '<div class="center"><a href="https://wp301redirects.com/free-license/?ref=free-' . $this->plugin_slug . '-dashboard" target="_blank"><img src="' . $plugin_url . 'wp301/wp301-logo.png' . '" alt="WP 301 Redirects PRO" title="WP 301 Redirects PRO"></a></div>';
180
+
181
+ $out .= '<p>On November 6th <a href="https://www.webfactoryltd.com/" target="_blank">WebFactory Ltd</a> will give away a limited number of lifetime WP 301 Redirect PRO licenses, <b>each for 10 sites</b>. A $158 retail value! 🚀 Leave your email, we\'ll send you a link &amp; download your copy.</p><p style="margin-bottom: 0;"><b>What do I get?</b></p>';
182
+
183
+ $out .= '<ul>';
184
+ $out .= '<li>Automatically fix 404 errors &amp; URL typos</li>';
185
+ $out .= '<li>Create advanced redirect rules &amp; control affiliate links</li>';
186
+ $out .= '<li>Detailed log of all redirects &amp; 404s</li>';
187
+ $out .= '<li>Manage all sites\' licenses from a central Dashboard</li>';
188
+ $out .= '<li>Lifetime license for 10 sites. <a href="https://wp301redirects.com/free-license/?ref=free-' . $this->plugin_slug . '-dashboard" target="_blank">See all features</a></li>';
189
+ $out .= '</ul>';
190
+
191
+ $out .= '
192
+ <div>
193
+ <label for="wp301promo_name">Name:</label>
194
+ <input type="text" name="wp301promo_name" id="wp301promo_name" placeholder="How shall we call you?"><br>
195
+ <label for="wp301promo_email">Email:</label>
196
+ <input type="text" name="wp301promo_email" id="wp301promo_email" placeholder="Your best email address to get the plugin"><br>
197
+ <small>We hate spam as much as you do and never send it!</small>
198
+ <input type="hidden" id="wp301promo_plugin" value="' . $this->plugin_slug . '">
199
+ <input type="hidden" id="wp301promo_position" value="dashboard">
200
+ </div>
201
+
202
+ <p class="center">
203
+ <a id="wp301promo_submit" class="button button-primary" href="#"><span class="dashicons dashicons-update"></span>I Want My FREE License <del>$158</del></a><br>
204
+ <a id="wp301promo_dismiss" class="" href="#" data-plugin-slug="dashboard">I don\'t want a free license; don\'t show this again</a>
205
+ </p>
206
+ </div>';
207
+
208
+ echo $out;
209
+ } // widget_content
210
+
211
+
212
+ function admin_footer()
213
+ {
214
+ $screen = get_current_screen();
215
+ if ($screen->id != $this->plugin_screen) {
216
+ return;
217
+ }
218
+
219
+ $out = '';
220
+
221
+ $out .= '<style>';
222
+ $out .= '#wp301promo_widget .disabled { pointer-events: none; }';
223
+ $out .= '.wp301-dialog .ui-dialog-titlebar-close { visibility: hidden; }';
224
+ $out .= '#wp301-dialog label { font-weight: normal; display: inline-block; width: 15%; margin-bottom: 10px; }';
225
+ $out .= '#wp301-dialog input { width: 74%; margin-bottom: 10px; }';
226
+ $out .= '#wp301-dialog .button-primary { padding: 14px 28px; text-decoration: none; line-height: 1; }';
227
+ $out .= '#wp301-dialog, #wp301-dialog p { font-size: 14px; }';
228
+ $out .= '#wp301-dialog .title301 { font-size: 1.3em; font-weight: 600; margin: 10px 0 -10px 0; }';
229
+ $out .= '#wp301-dialog img { max-width: 60%; }';
230
+ $out .= '#wp301-dialog li a { text-decoration: underline; }';
231
+ $out .= '#wp301-dialog small { margin-left: 16%; }';
232
+ $out .= '#wp301-dialog .center { text-align: center; }';
233
+ $out .= '#wp301-dialog, .wp301-dialog .ui-dialog-titlebar { background-color: #fafafa; }';
234
+ $out .= '#wp301-dialog .wp301inside { padding: 12px 12px 0px 12px; }';
235
+ $out .= '#wp301-dialog p { margin-top: 14px; line-height: 1.5; }';
236
+ $out .= '#wp301-dialog ul { margin: 0 0 20px 0; list-style-type: disc; list-style-position: inside; }';
237
+ $out .= '#wp301-dialog li { margin-bottom: 3px; }';
238
+ $out .= '#wp301promo_dismiss { display: inline-block; color: #444; text-decoration: none; margin: 8px 0 0 0; }';
239
+ $out .= '#wp301promo_dismiss:hover { text-decoration: underline; }';
240
+ $out .= '#wp301promo_submit span { display: none; text-decoration: none; margin-right: 10px; animation: wf-spin-animation 1.5s infinite linear; }';
241
+ $out .= '#wp301promo_submit.disabled span { display: inline-block; }';
242
+ $out .= '@keyframes wf-spin-animation {
243
+ from { transform: rotate(0deg); }
244
+ to { transform: rotate(360deg); }
245
+ }';
246
+ $out .= '#wp301-dialog .inside { overflow: hidden; margin: 0; }
247
+ #wp301-dialog .ribbon { margin: 0; padding: 11px 20px 10px 20px; background: #007cba; color: #FFF; font-weight: 800; position: absolute; top: -17px; right: -17px; transform: translateX(30%) translateY(0%) rotate(45deg); transform-origin: top left; letter-spacing: 1px; }
248
+ #wp301-dialog .ribbon:before, #wp301-dialog .ribbon:after { content: ""; position: absolute; top:0; margin: 0 -1px; width: 100%; height: 100%; background: #007cba; }
249
+ #wp301-dialog .ribbon:before { right:100%; }
250
+ #wp301-dialog .ribbon:after { left:100%; }';
251
+ $out .= '</style>';
252
+
253
+ $out .= '<div id="wp301-dialog" style="display: none;" title="Get a WP 301 Redirects PRO license for FREE"><span class="ui-helper-hidden-accessible"><input type="text"/></span>';
254
+
255
+ $plugin_url = plugin_dir_url($this->plugin_file);
256
+
257
+ $out .= '<div class="wp301inside">';
258
+ $out .= '<div class="ribbon">FREE</div>';
259
+
260
+ $out .= '<div class="center"><a href="https://wp301redirects.com/free-license/?ref=free-' . $this->plugin_slug . '-popup" target="_blank"><img src="' . $plugin_url . 'wp301/wp301-logo.png' . '" alt="WP 301 Redirects PRO" title="WP 301 Redirects PRO"></a></div>';
261
+
262
+ $out .= '<p>On November 6th <a href="https://www.webfactoryltd.com/" target="_blank">WebFactory Ltd</a> will give away a limited number of lifetime WP 301 Redirect PRO licenses, <b>each for 10 sites</b>. A $158 retail value! 🚀 Leave your email, we\'ll send you a link &amp; download your copy.</p><p style="margin-bottom: 0;"><b>What do I get?</b></p>';
263
+
264
+ $out .= '<ul>';
265
+ $out .= '<li>Automatically fix 404 errors &amp; URL typos</li>';
266
+ $out .= '<li>Create advanced redirect rules &amp; control affiliate links</li>';
267
+ $out .= '<li>Detailed log of all redirects &amp; 404s</li>';
268
+ $out .= '<li>Manage all sites\' licenses from a central Dashboard</li>';
269
+ $out .= '<li>Lifetime license for 10 sites. <a href="https://wp301redirects.com/free-license/?ref=free-' . $this->plugin_slug . '-dashboard" target="_blank">See all features</a></li>';
270
+ $out .= '</ul>';
271
+
272
+ $out .= '
273
+ <div>
274
+ <label for="wp301promo_name">Name:</label>
275
+ <input type="text" name="wp301promo_name" id="wp301promo_name" placeholder="How shall we call you?"><br>
276
+ <label for="wp301promo_email">Email:</label>
277
+ <input type="text" name="wp301promo_email" id="wp301promo_email" placeholder="Your best email address to get the plugin"><br>
278
+ <small>We hate spam as much as you do and never send it!</small>
279
+ <input type="hidden" id="wp301promo_plugin" value="' . $this->plugin_slug . '">
280
+ <input type="hidden" id="wp301promo_position" value="popup">
281
+ </div>
282
+
283
+ <p class="center">
284
+ <a id="wp301promo_submit" class="button button-primary" href="#"><span class="dashicons dashicons-update"></span>I Want My FREE License <del>$158</del></a><br>
285
+ <a id="wp301promo_dismiss" class="" href="#" data-plugin-slug="' . $this->plugin_slug . '">I don\'t want a free license; don\'t show this again</a>
286
+ </p>
287
+
288
+ </div>';
289
+
290
+ $out .= '</div>';
291
+
292
+ echo $out;
293
+ } // wp_footer
294
+ } // wf_wp301
295
+ }