PluginProbe ʕ •ᴥ•ʔ
External Links – nofollow, noopener & new window / 2.66
External Links – nofollow, noopener & new window v2.66
2.66 0.31 0.32 0.33 0.34 0.35 1.01 1.02 1.03 1.10 1.20 1.21 1.30 1.31 1.40 1.41 1.50 1.51 1.52 1.53 1.54 1.55 1.56 1.60 1.61 1.62 1.70 1.80 1.81 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.1.0 2.1.1 2.1.2 2.1.3 2.2.0 2.3 2.32 2.35 2.40 2.42 2.43 2.45 2.46 2.47 2.48 2.50 2.51 2.55 2.56 2.57 2.58 2.59 2.60 2.61 2.62 2.63 2.64 2.65 trunk 0.10 0.11 0.12 0.20 0.21 0.30
wp-external-links / wf-flyout / wf-flyout.php
wp-external-links / wf-flyout Last commit date
icons 4 years ago config.php 4 years ago index.php 3 years ago wf-flyout.css 4 years ago wf-flyout.js 4 years ago wf-flyout.php 3 years ago
wf-flyout.php
168 lines
1 <?php
2
3 /**
4 * Universal fly-out menu for WebFactory plugins
5 * (c) WebFactory Ltd, 2022
6 */
7
8
9 if (false == class_exists('wf_flyout')) {
10 class wf_flyout
11 {
12 var $ver = 1.0;
13 var $plugin_file = '';
14 var $plugin_slug = '';
15 var $config = array();
16
17
18 function __construct($plugin_file)
19 {
20 $this->plugin_file = $plugin_file;
21 $this->plugin_slug = basename(dirname($plugin_file));
22 $this->load_config();
23
24 if (!is_admin()) {
25 return;
26 } else {
27 add_action('admin_init', array($this, 'init'));
28 }
29 } // __construct
30
31
32 function load_config()
33 {
34 $config = array();
35 require_once plugin_dir_path($this->plugin_file) . 'wf-flyout/config.php';
36
37 $defaults = array(
38 'plugin_screen' => '',
39 'icon_border' => '#0000ff',
40 'icon_right' => '40px',
41 'icon_bottom' => '40px',
42 'icon_image' => '',
43 'icon_padding' => '2px',
44 'icon_size' => '55px',
45 'menu_accent_color' => '#ca4a1f',
46 'custom_css' => '',
47 'menu_items' => array(),
48 );
49
50 $config = array_merge($defaults, $config);
51 if (!is_array($config['plugin_screen'])) {
52 $config['plugin_screen'] = array($config['plugin_screen']);
53 }
54
55 $this->config = $config;
56 } // load_config
57
58
59 function is_plugin_screen()
60 {
61 $screen = get_current_screen();
62
63 if (in_array($screen->id, $this->config['plugin_screen'])) {
64 return true;
65 } else {
66 return false;
67 }
68 } // is_plugin_screen
69
70
71 function init()
72 {
73 add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'));
74 add_action('admin_head', array($this, 'admin_head'));
75 add_action('admin_footer', array($this, 'admin_footer'));
76 } // init
77
78
79 function admin_enqueue_scripts()
80 {
81 if (false === $this->is_plugin_screen()) {
82 return;
83 }
84
85 wp_enqueue_style('wf_flyout', plugin_dir_url($this->plugin_file) . 'wf-flyout/wf-flyout.css', array(), $this->ver);
86 wp_enqueue_script('wf_flyout', plugin_dir_url($this->plugin_file) . 'wf-flyout/wf-flyout.js', array(), $this->ver, true);;
87 } // admin_enqueue_scripts
88
89
90 function admin_head()
91 {
92 if (false === $this->is_plugin_screen()) {
93 return;
94 }
95
96 $out = '<style type="text/css">';
97 $out .= '#wf-flyout {
98 right: ' . sanitize_text_field($this->config['icon_right']) . ';
99 bottom: ' . sanitize_text_field($this->config['icon_bottom']) . ';
100 }';
101 $out .= '#wf-flyout #wff-image-wrapper {
102 border: ' . sanitize_text_field($this->config['icon_border']) . ';
103 }';
104 $out .= '#wf-flyout #wff-button img {
105 padding: ' . sanitize_text_field($this->config['icon_padding']) . ';
106 width: ' . sanitize_text_field($this->config['icon_size']) . ';
107 height: ' . sanitize_text_field($this->config['icon_size']) . ';
108 }';
109 $out .= '#wf-flyout .wff-menu-item.accent {
110 background: ' . sanitize_text_field($this->config['menu_accent_color']) . ';
111 }';
112 $out .= sanitize_text_field($this->config['custom_css']);
113 $out .= '</style>';
114
115 WPEL_Plugin::wp_kses_wf($out);
116 } // admin_head
117
118
119 function admin_footer()
120 {
121 if (false === $this->is_plugin_screen()) {
122 return;
123 }
124
125 $out = '';
126 $icons_url = plugin_dir_url($this->plugin_file) . 'wf-flyout/icons/';
127 $default_link_item = array('class' => '', 'href' => '#', 'target' => '_blank', 'label' => '', 'icon' => '', 'data' => '');
128
129 $out .= '<div id="wff-overlay"></div>';
130
131 $out .= '<div id="wf-flyout">';
132
133 $out .= '<a href="#" id="wff-button">';
134 $out .= '<span class="wff-label">Open Quick Links</span>';
135 $out .= '<span id="wff-image-wrapper">';
136 $out .= '<img src="' . esc_url($icons_url . $this->config['icon_image']) . '" alt="Open Quick Links" title="Open Quick Links">';
137 $out .= '</span>';
138 $out .= '</a>';
139
140 $out .= '<div id="wff-menu">';
141 $i = 0;
142 foreach (array_reverse($this->config['menu_items']) as $item) {
143 $i++;
144 $item = array_merge($default_link_item, $item);
145
146 if (!empty($item['icon']) && substr($item['icon'], 0, 9) != 'dashicons') {
147 $item['class'] .= ' wff-custom-icon';
148 $item['class'] = trim($item['class']);
149 }
150
151 $out .= '<a href="' . esc_url($item['href']) . '" class="wff-menu-item wff-menu-item-' . $i . ' ' . esc_attr($item['class']) . '" target="_blank">';
152 $out .= '<span class="wff-label visible">' . esc_html($item['label']) . '</span>';
153 if (substr($item['icon'], 0, 9) == 'dashicons') {
154 $out .= '<span class="dashicons ' . sanitize_text_field($item['icon']) . '"></span>';
155 } elseif (!empty($item['icon'])) {
156 $out .= '<span class="wff-icon"><img src="' . esc_url($icons_url . $item['icon']) . '"></span>';
157 }
158 $out .= '</a>';
159 } // foreach
160 $out .= '</div>'; // #wff-menu
161
162 $out .= '</div>'; // #wf-flyout
163
164 WPEL_Plugin::wp_kses_wf($out);
165 } // admin_footer
166 } // wf_flyout
167 } // if class exists
168