| 1 |
<?php |
| 2 |
|
| 3 |
// If this file is called directly, abort. |
| 4 |
if ( ! defined( 'WPINC' ) ) { |
| 5 |
die; |
| 6 |
} |
| 7 |
|
| 8 |
|
| 9 |
/** |
| 10 |
* Print CSS and JS script for wpLingua nav menu option |
| 11 |
* |
| 12 |
* @param string $hook |
| 13 |
* @return void |
| 14 |
*/ |
| 15 |
function wplng_switcher_nav_menu_inline_scripts( $hook ) { |
| 16 |
|
| 17 |
if ( ! is_admin() |
| 18 |
|| $hook !== 'nav-menus.php' |
| 19 |
|| empty( wplng_get_api_key() ) |
| 20 |
) { |
| 21 |
return; |
| 22 |
} |
| 23 |
|
| 24 |
?> |
| 25 |
<style id="wplng-nav-menu-style"> |
| 26 |
|
| 27 |
#tabs-panel-wplingua-endpoints.tabs-panel { |
| 28 |
max-height: unset; |
| 29 |
} |
| 30 |
|
| 31 |
#wplng_switcher_nav_menu .accordion-section-content .wplng-menu-header, |
| 32 |
#wplng_switcher_nav_menu .accordion-section-content .inside { |
| 33 |
margin-top: 0; |
| 34 |
} |
| 35 |
|
| 36 |
#tabs-panel-wplingua-endpoints label { |
| 37 |
font-size: 14px; |
| 38 |
margin-bottom: 6px; |
| 39 |
display: block; |
| 40 |
} |
| 41 |
|
| 42 |
#tabs-panel-wplingua-endpoints select { |
| 43 |
width: 100%; |
| 44 |
max-width: 100%; |
| 45 |
} |
| 46 |
|
| 47 |
.menu-item:has(.wplng-menu-item-settings-switcher) p.field-url, |
| 48 |
.menu-item:has(.wplng-menu-item-settings-switcher) p.description { |
| 49 |
display: none; |
| 50 |
} |
| 51 |
|
| 52 |
.menu-item:has(.wplng-menu-item-settings-switcher) span.item-type { |
| 53 |
display: none; |
| 54 |
} |
| 55 |
|
| 56 |
.menu-item:has(.wplng-menu-item-settings-switcher) span.item-controls::before { |
| 57 |
content: "wpLingua"; |
| 58 |
display: inline-block; |
| 59 |
padding: 12px 16px; |
| 60 |
color: #646970; |
| 61 |
font-size: 12px; |
| 62 |
line-height: 1.5; |
| 63 |
} |
| 64 |
|
| 65 |
.wplng-menu-item-settings-switcher select { |
| 66 |
width: 100%; |
| 67 |
max-width: 100%; |
| 68 |
margin: 10px 0; |
| 69 |
} |
| 70 |
</style> |
| 71 |
<script id="wplng-nav-menu-script"> |
| 72 |
window.onload = function() { |
| 73 |
|
| 74 |
/** |
| 75 |
* wpLingua: Add new nav menu switcher |
| 76 |
*/ |
| 77 |
|
| 78 |
// Infinite nav menu switcher |
| 79 |
// Update the edit fields event listen |
| 80 |
|
| 81 |
let wplngNewValidate = document.getElementById('submit-posttype-wplingua-endpoints'); |
| 82 |
wplngNewValidate.addEventListener('click', wplngAlwaysValidate); |
| 83 |
|
| 84 |
function wplngAlwaysValidate() { |
| 85 |
wplngUpdateEditField(); |
| 86 |
setTimeout(() => { |
| 87 |
document.getElementById('wplng-validate-id').checked = true; |
| 88 |
}, 1500) |
| 89 |
} |
| 90 |
|
| 91 |
// Make link from option |
| 92 |
|
| 93 |
let wplngNewNameFormat = document.getElementById('wplng-menu-name-format') |
| 94 |
let wplngNewFlag = document.getElementById('wplng-menu-flag') |
| 95 |
let wplngNewLayout = document.getElementById('wplng-menu-layout') |
| 96 |
|
| 97 |
wplngNewNameFormat.addEventListener('change', wplngUpdateMenuSwitcherUrl); |
| 98 |
wplngNewFlag.addEventListener('change', wplngUpdateMenuSwitcherUrl); |
| 99 |
wplngNewLayout.addEventListener('change', wplngUpdateMenuSwitcherUrl); |
| 100 |
|
| 101 |
function wplngUpdateMenuSwitcherUrl() { |
| 102 |
|
| 103 |
let url = "#wplng"; |
| 104 |
url += "-n" + wplngNewNameFormat.value; |
| 105 |
url += "-f" + wplngNewFlag.value; |
| 106 |
url += "-l" + wplngNewLayout.value; |
| 107 |
|
| 108 |
document.getElementById('wplng-menu-switcher-url').value = url; |
| 109 |
} |
| 110 |
|
| 111 |
wplngUpdateMenuSwitcherUrl(); |
| 112 |
|
| 113 |
/** |
| 114 |
* wpLingua: Edit nav menu switcher |
| 115 |
*/ |
| 116 |
|
| 117 |
function wplngUpdateEditField() { |
| 118 |
|
| 119 |
let wplngEditNameFormat = document.getElementsByClassName('wplng-menu-name-format-edit') |
| 120 |
let wplngEditFlag = document.getElementsByClassName('wplng-menu-flag-edit') |
| 121 |
let wplngEditLayout = document.getElementsByClassName('wplng-menu-layout-edit') |
| 122 |
|
| 123 |
for (var i = 0; i < wplngEditNameFormat.length; i++) { |
| 124 |
wplngEditNameFormat[i].addEventListener('change', wplngEditMenuSwitcherUrl); |
| 125 |
} |
| 126 |
|
| 127 |
for (var i = 0; i < wplngEditFlag.length; i++) { |
| 128 |
wplngEditFlag[i].addEventListener('change', wplngEditMenuSwitcherUrl); |
| 129 |
} |
| 130 |
|
| 131 |
for (var i = 0; i < wplngEditLayout.length; i++) { |
| 132 |
wplngEditLayout[i].addEventListener('change', wplngEditMenuSwitcherUrl); |
| 133 |
} |
| 134 |
} |
| 135 |
|
| 136 |
function wplngEditMenuSwitcherUrl() { |
| 137 |
|
| 138 |
let item = this.getAttribute("item"); |
| 139 |
|
| 140 |
let nameFormat = document.getElementById('wplng-menu-name-format-' + item).value; |
| 141 |
let flag = document.getElementById('wplng-menu-flag-' + item).value; |
| 142 |
let layout = document.getElementById('wplng-menu-layout-' + item).value; |
| 143 |
|
| 144 |
let url = "#wplng"; |
| 145 |
url += "-n" + nameFormat; |
| 146 |
url += "-f" + flag; |
| 147 |
url += "-l" + layout; |
| 148 |
|
| 149 |
document.getElementById('edit-menu-item-url-' + item).value = url; |
| 150 |
} |
| 151 |
|
| 152 |
wplngUpdateEditField(); |
| 153 |
} |
| 154 |
</script> |
| 155 |
<?php |
| 156 |
} |
| 157 |
|
| 158 |
|
| 159 |
/** |
| 160 |
* Add wpLingua nav menu option meta ox |
| 161 |
* |
| 162 |
* @return void |
| 163 |
*/ |
| 164 |
function wp_nav_menu_switcher_box_add_register() { |
| 165 |
add_meta_box( |
| 166 |
'wplng_switcher_nav_menu', |
| 167 |
__( 'wpLingua', 'wplingua' ), |
| 168 |
'wp_nav_menu_switcher_box_add', |
| 169 |
'nav-menus', |
| 170 |
'side', |
| 171 |
'default' |
| 172 |
); |
| 173 |
} |
| 174 |
|
| 175 |
|
| 176 |
/** |
| 177 |
* Print the HTML of the meta box used to add a language switcher in nav menu |
| 178 |
* |
| 179 |
* @return void |
| 180 |
*/ |
| 181 |
function wp_nav_menu_switcher_box_add() { |
| 182 |
|
| 183 |
$valid_name_format = wplng_data_switcher_nav_menu_valid_name_format(); |
| 184 |
$valid_flags_style = wplng_data_switcher_nav_menu_valid_flags_style(); |
| 185 |
$valid_layout = wplng_data_switcher_nav_menu_valid_layout(); |
| 186 |
|
| 187 |
?> |
| 188 |
<div id="posttype-wplingua-endpoints" class="posttypediv"> |
| 189 |
|
| 190 |
<p class="wplng-menu-header"><?php esc_html_e( 'These options are used to add a language switcher in a menu. This language switcher automatically uses the menu design.', 'wplingua' ); ?></p> |
| 191 |
|
| 192 |
<div id="tabs-panel-wplingua-endpoints" class="tabs-panel tabs-panel-active"> |
| 193 |
<ul class="categorychecklist form-no-clear"> |
| 194 |
|
| 195 |
<li> |
| 196 |
<label for="wplng-menu-name-format"> |
| 197 |
<?php esc_html_e( 'Displayed names: ', 'wplingua' ); ?> |
| 198 |
</label> |
| 199 |
<select id="wplng-menu-name-format" name="wplng-menu-name-format"> |
| 200 |
<?php |
| 201 |
foreach ( $valid_name_format as $key => $value ) { |
| 202 |
echo '<option value="' . esc_attr( $key ) . '">'; |
| 203 |
echo esc_html( $value ); |
| 204 |
echo '</option>'; |
| 205 |
} |
| 206 |
?> |
| 207 |
</select> |
| 208 |
<hr> |
| 209 |
</li> |
| 210 |
|
| 211 |
<li> |
| 212 |
<label for="wplng-menu-flag"> |
| 213 |
<?php esc_html_e( 'Displayed flag: ', 'wplingua' ); ?> |
| 214 |
</label> |
| 215 |
<select id="wplng-menu-flag" name="wplng-menu-flag"> |
| 216 |
<?php |
| 217 |
foreach ( $valid_flags_style as $key => $value ) { |
| 218 |
echo '<option value="' . esc_attr( $key ) . '">'; |
| 219 |
echo esc_html( $value ); |
| 220 |
echo '</option>'; |
| 221 |
} |
| 222 |
?> |
| 223 |
</select> |
| 224 |
<hr> |
| 225 |
</li> |
| 226 |
|
| 227 |
<li> |
| 228 |
<label for="wplng-menu-layout"> |
| 229 |
<?php esc_html_e( 'Layout: ', 'wplingua' ); ?> |
| 230 |
</label> |
| 231 |
<select id="wplng-menu-layout" name="wplng-menu-layout"> |
| 232 |
<?php |
| 233 |
foreach ( $valid_layout as $key => $value ) { |
| 234 |
echo '<option value="' . esc_attr( $key ) . '">'; |
| 235 |
echo esc_html( $value ); |
| 236 |
echo '</option>'; |
| 237 |
} |
| 238 |
?> |
| 239 |
</select> |
| 240 |
</li> |
| 241 |
|
| 242 |
<li style="display: none;"> |
| 243 |
|
| 244 |
<input type="checkbox" class="menu-item-checkbox" id="wplng-validate-id" name="menu-item[1][menu-item-validate]" value="1" onchange="alert('ok');" checked/> |
| 245 |
|
| 246 |
<input type="hidden" class="menu-item-object-id" name="menu-item[1][menu-item-object-id]" value="wplingua" /> |
| 247 |
<input type="hidden" class="menu-item-object" name="menu-item[1][menu-item-object]" value="wplingua" /> |
| 248 |
<input type="hidden" class="menu-item-type" name="menu-item[1][menu-item-type]" value="custom" /> |
| 249 |
<input type="hidden" class="menu-item-title" name="menu-item[1][menu-item-title]" value="<?php esc_attr_e( 'Language switcher', 'wplingua' ); ?>" /> |
| 250 |
<input type="hidden" class="menu-item-classes" name="menu-item[1][menu-item-classes]" value="wplingua-menu-switcher-untreated"/> |
| 251 |
<input type="hidden" class="menu-item-url" name="menu-item[1][menu-item-url]" value="" id="wplng-menu-switcher-url"/> |
| 252 |
</li> |
| 253 |
|
| 254 |
</ul> |
| 255 |
</div> |
| 256 |
|
| 257 |
<p class="button-controls" data-items-type="posttype-wplingua-endpoints"> |
| 258 |
<span class="add-to-menu"> |
| 259 |
<input type="submit" class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e( 'Add to menu', 'wplingua' ); ?>" name="add-post-type-menu-item" id="submit-posttype-wplingua-endpoints"> |
| 260 |
<span class="spinner"></span> |
| 261 |
</span> |
| 262 |
</p> |
| 263 |
|
| 264 |
</div> |
| 265 |
<?php |
| 266 |
} |
| 267 |
|
| 268 |
|
| 269 |
/** |
| 270 |
* Print option in wpLingua nav menu |
| 271 |
* |
| 272 |
* @param string $item_id |
| 273 |
* @param WP_Post $menu_item |
| 274 |
* @return void |
| 275 |
*/ |
| 276 |
function wp_nav_menu_switcher_box_edit( $item_id, $menu_item ) { |
| 277 |
|
| 278 |
if ( ! is_array( $menu_item->classes ) |
| 279 |
|| ! in_array( 'wplingua-menu-switcher-untreated', $menu_item->classes, true ) |
| 280 |
|| empty( $menu_item->url ) |
| 281 |
) { |
| 282 |
return; |
| 283 |
} |
| 284 |
|
| 285 |
$args = wplng_switcher_nav_menu_args_from_href( $menu_item->url ); |
| 286 |
|
| 287 |
if ( false === $args ) { |
| 288 |
return; |
| 289 |
} |
| 290 |
|
| 291 |
$valid_name_format = wplng_data_switcher_nav_menu_valid_name_format(); |
| 292 |
$valid_flags_style = wplng_data_switcher_nav_menu_valid_flags_style(); |
| 293 |
$valid_layout = wplng_data_switcher_nav_menu_valid_layout(); |
| 294 |
|
| 295 |
?> |
| 296 |
<div class="wplng-menu-item-settings-switcher"> |
| 297 |
<label for="wplng-menu-name-format-<?php echo esc_attr( $item_id ); ?>"> |
| 298 |
<?php esc_html_e( 'Displayed names: ', 'wplingua' ); ?> |
| 299 |
</label> |
| 300 |
<select |
| 301 |
class="wplng-menu-name-format-edit" |
| 302 |
id="wplng-menu-name-format-<?php echo esc_attr( $item_id ); ?>" |
| 303 |
name="wplng-menu-name-format-<?php echo esc_attr( $item_id ); ?>" |
| 304 |
item="<?php echo esc_attr( $item_id ); ?>" |
| 305 |
> |
| 306 |
<?php |
| 307 |
foreach ( $valid_name_format as $key => $value ) { |
| 308 |
if ( $key === $args['name_format']['value'] ) { |
| 309 |
echo '<option value="' . esc_attr( $key ) . '" selected>'; |
| 310 |
} else { |
| 311 |
echo '<option value="' . esc_attr( $key ) . '">'; |
| 312 |
} |
| 313 |
echo esc_html( $value ); |
| 314 |
echo '</option>'; |
| 315 |
} |
| 316 |
?> |
| 317 |
</select> |
| 318 |
<hr> |
| 319 |
<label for="wplng-menu-flag-<?php echo esc_attr( $item_id ); ?>"> |
| 320 |
<?php esc_html_e( 'Displayed flag: ', 'wplingua' ); ?> |
| 321 |
</label> |
| 322 |
<select |
| 323 |
class="wplng-menu-flag-edit" |
| 324 |
id="wplng-menu-flag-<?php echo esc_attr( $item_id ); ?>" |
| 325 |
name="wplng-menu-flag-<?php echo esc_attr( $item_id ); ?>" |
| 326 |
item="<?php echo esc_attr( $item_id ); ?>" |
| 327 |
> |
| 328 |
<?php |
| 329 |
foreach ( $valid_flags_style as $key => $value ) { |
| 330 |
if ( $key === $args['flags_style']['value'] ) { |
| 331 |
echo '<option value="' . esc_attr( $key ) . '" selected>'; |
| 332 |
} else { |
| 333 |
echo '<option value="' . esc_attr( $key ) . '">'; |
| 334 |
} |
| 335 |
echo esc_html( $value ); |
| 336 |
echo '</option>'; |
| 337 |
} |
| 338 |
?> |
| 339 |
</select> |
| 340 |
<hr> |
| 341 |
<label for="wplng-menu-layout-<?php echo esc_attr( $item_id ); ?>"> |
| 342 |
<?php esc_html_e( 'Layout: ', 'wplingua' ); ?> |
| 343 |
</label> |
| 344 |
<select |
| 345 |
class="wplng-menu-layout-edit" |
| 346 |
id="wplng-menu-layout-<?php echo esc_attr( $item_id ); ?>" |
| 347 |
name="wplng-menu-layout-<?php echo esc_attr( $item_id ); ?>" |
| 348 |
item="<?php echo esc_attr( $item_id ); ?>" |
| 349 |
> |
| 350 |
<?php |
| 351 |
foreach ( $valid_layout as $key => $value ) { |
| 352 |
if ( $key === $args['layout']['value'] ) { |
| 353 |
echo '<option value="' . esc_attr( $key ) . '" selected>'; |
| 354 |
} else { |
| 355 |
echo '<option value="' . esc_attr( $key ) . '">'; |
| 356 |
} |
| 357 |
echo esc_html( $value ); |
| 358 |
echo '</option>'; |
| 359 |
} |
| 360 |
?> |
| 361 |
</select> |
| 362 |
<hr> |
| 363 |
</div> |
| 364 |
<?php |
| 365 |
} |
| 366 |
|