061534ff by Jeremy Groot

Merge branch 'master' of git.gotenzing.com:msf/msf-climate-hub

2 parents 0dff92f0 d4fbe8b5
Showing 40 changed files with 2159 additions and 1494 deletions
1 /* This is based on jQuery UI */
2 #regenerate-thumbnails-app .ui-progressbar {
3 height: 2em;
4 text-align: center;
5 overflow: hidden;
6 }
7 #regenerate-thumbnails-app .ui-progressbar .ui-progressbar-value {
8 margin: -1px;
9 height: 100%;
10 transition-duration: 0.5s;
11 }
12 #regenerate-thumbnails-app .ui-widget.ui-widget-content {
13 border: 1px solid #c5dbec;
14 }
15 #regenerate-thumbnails-app .ui-widget-content {
16 border: 1px solid #a6c9e2;
17 background: #fcfdfd url("images/ui-bg_inset-hard_100_fcfdfd_1x100.png") 50% bottom repeat-x;
18 color: #222222;
19 }
20 #regenerate-thumbnails-app .ui-widget-header {
21 border: 1px solid #4297d7;
22 background: #5c9ccc url("images/ui-bg_gloss-wave_55_5c9ccc_500x100.png") 50% 50% repeat-x;
23 color: #ffffff;
24 font-weight: bold;
25 }
26 #regenerate-thumbnails-app .ui-corner-all {
27 border-radius: 5px;
28 }
29 #regenerate-thumbnails-app .ui-corner-left {
30 border-top-left-radius: 5px;
31 border-bottom-left-radius: 5px;
32 }
This diff could not be displayed because it is too large.
1 /*!
2 * Vue.js v2.6.11
3 * (c) 2014-2019 Evan You
4 * Released under the MIT License.
5 */
1 <?php
2 /**
3 * Regenerate Thumbnails: Attachment regenerator class
4 *
5 * @package RegenerateThumbnails
6 * @since 3.0.0
7 */
8
9 /**
10 * Regenerates the thumbnails for a given attachment.
11 *
12 * @since 3.0.0
13 */
14 class RegenerateThumbnails_Regenerator {
15
16 /**
17 * The WP_Post object for the attachment that is being operated on.
18 *
19 * @since 3.0.0
20 *
21 * @var WP_Post
22 */
23 public $attachment;
24
25 /**
26 * The full path to the original image so that it can be passed between methods.
27 *
28 * @since 3.0.0
29 *
30 * @var string
31 */
32 public $fullsizepath;
33
34 /**
35 * An array of thumbnail size(s) that were skipped during regeneration due to already existing.
36 * A class variable is used so that the data can later be used to merge the size(s) back in.
37 *
38 * @since 3.0.0
39 *
40 * @var array
41 */
42 public $skipped_thumbnails = array();
43
44 /**
45 * The metadata for the attachment before the regeneration process starts.
46 *
47 * @since 3.1.6
48 *
49 * @var array
50 */
51 private $old_metadata = array();
52
53 /**
54 * Generates an instance of this class after doing some setup.
55 *
56 * MIME type is purposefully not validated in order to be more future proof and
57 * to avoid duplicating a ton of logic that already exists in WordPress core.
58 *
59 * @since 3.0.0
60 *
61 * @param int $attachment_id Attachment ID to process.
62 *
63 * @return RegenerateThumbnails_Regenerator|WP_Error A new instance of RegenerateThumbnails_Regenerator on success, or WP_Error on error.
64 */
65 public static function get_instance( $attachment_id ) {
66 $attachment = get_post( $attachment_id );
67
68 if ( ! $attachment ) {
69 return new WP_Error(
70 'regenerate_thumbnails_regenerator_attachment_doesnt_exist',
71 __( 'No attachment exists with that ID.', 'regenerate-thumbnails' ),
72 array(
73 'status' => 404,
74 )
75 );
76 }
77
78 // We can only regenerate thumbnails for attachments.
79 if ( 'attachment' !== get_post_type( $attachment ) ) {
80 return new WP_Error(
81 'regenerate_thumbnails_regenerator_not_attachment',
82 __( 'This item is not an attachment.', 'regenerate-thumbnails' ),
83 array(
84 'status' => 400,
85 )
86 );
87 }
88
89 // Don't touch any attachments that are being used as a site icon. Their thumbnails are usually custom cropped.
90 if ( self::is_site_icon( $attachment ) ) {
91 return new WP_Error(
92 'regenerate_thumbnails_regenerator_is_site_icon',
93 __( "This attachment is a site icon and therefore the thumbnails shouldn't be touched.", 'regenerate-thumbnails' ),
94 array(
95 'status' => 415,
96 'attachment' => $attachment,
97 )
98 );
99 }
100
101 return new RegenerateThumbnails_Regenerator( $attachment );
102 }
103
104 /**
105 * The constructor for this class. Don't call this directly, see get_instance() instead.
106 * This is done so that WP_Error objects can be returned during class initiation.
107 *
108 * @since 3.0.0
109 *
110 * @param WP_Post $attachment The WP_Post object for the attachment that is being operated on.
111 */
112 private function __construct( WP_Post $attachment ) {
113 $this->attachment = $attachment;
114 }
115
116 /**
117 * Returns whether the attachment is or was a site icon.
118 *
119 * @since 3.0.0
120 *
121 * @param WP_Post $attachment The WP_Post object for the attachment that is being operated on.
122 *
123 * @return bool Whether the attachment is or was a site icon.
124 */
125 public static function is_site_icon( WP_Post $attachment ) {
126 return ( 'site-icon' === get_post_meta( $attachment->ID, '_wp_attachment_context', true ) );
127 }
128
129 /**
130 * Get the path to the fullsize attachment.
131 *
132 * @return string|WP_Error The path to the fullsize attachment, or a WP_Error object on error.
133 */
134 public function get_fullsizepath() {
135 if ( $this->fullsizepath ) {
136 return $this->fullsizepath;
137 }
138
139 if ( function_exists( 'wp_get_original_image_path' ) ) {
140 $this->fullsizepath = wp_get_original_image_path( $this->attachment->ID );
141 } else {
142 $this->fullsizepath = get_attached_file( $this->attachment->ID );
143 }
144
145 if ( false === $this->fullsizepath || ! file_exists( $this->fullsizepath ) ) {
146 $error = new WP_Error(
147 'regenerate_thumbnails_regenerator_file_not_found',
148 sprintf(
149 /* translators: The relative upload path to the attachment. */
150 __( "The fullsize image file cannot be found in your uploads directory at <code>%s</code>. Without it, new thumbnail images can't be generated.", 'regenerate-thumbnails' ),
151 _wp_relative_upload_path( $this->fullsizepath )
152 ),
153 array(
154 'status' => 404,
155 'fullsizepath' => _wp_relative_upload_path( $this->fullsizepath ),
156 'attachment' => $this->attachment,
157 )
158 );
159
160 $this->fullsizepath = $error;
161 }
162
163 return $this->fullsizepath;
164 }
165
166 /**
167 * Regenerate the thumbnails for this instance's attachment.
168 *
169 * @since 3.0.0
170 *
171 * @param array|string $args {
172 * Optional. Array or string of arguments for thumbnail regeneration.
173 *
174 * @type bool $only_regenerate_missing_thumbnails Skip regenerating existing thumbnail files. Default true.
175 * @type bool $delete_unregistered_thumbnail_files Delete any thumbnail sizes that are no longer registered. Default false.
176 * }
177 *
178 * @return mixed|WP_Error Metadata for attachment (see wp_generate_attachment_metadata()), or WP_Error on error.
179 */
180 public function regenerate( $args = array() ) {
181 global $wpdb;
182
183 $args = wp_parse_args( $args, array(
184 'only_regenerate_missing_thumbnails' => true,
185 'delete_unregistered_thumbnail_files' => false,
186 ) );
187
188 $fullsizepath = $this->get_fullsizepath();
189 if ( is_wp_error( $fullsizepath ) ) {
190 $fullsizepath->add_data( array( 'attachment' => $this->attachment ) );
191
192 return $fullsizepath;
193 }
194
195 $this->old_metadata = wp_get_attachment_metadata( $this->attachment->ID );
196
197 if ( $args['only_regenerate_missing_thumbnails'] ) {
198 add_filter( 'intermediate_image_sizes_advanced', array( $this, 'filter_image_sizes_to_only_missing_thumbnails' ), 10, 2 );
199 }
200
201 require_once( ABSPATH . 'wp-admin/includes/admin.php' );
202 $new_metadata = wp_generate_attachment_metadata( $this->attachment->ID, $fullsizepath );
203
204 if ( $args['only_regenerate_missing_thumbnails'] ) {
205 // Thumbnail sizes that existed were removed and need to be added back to the metadata.
206 foreach ( $this->skipped_thumbnails as $skipped_thumbnail ) {
207 if ( ! empty( $this->old_metadata['sizes'][ $skipped_thumbnail ] ) ) {
208 $new_metadata['sizes'][ $skipped_thumbnail ] = $this->old_metadata['sizes'][ $skipped_thumbnail ];
209 }
210 }
211 $this->skipped_thumbnails = array();
212
213 remove_filter( 'intermediate_image_sizes_advanced', array( $this, 'filter_image_sizes_to_only_missing_thumbnails' ), 10 );
214 }
215
216 $wp_upload_dir = dirname( $fullsizepath ) . DIRECTORY_SEPARATOR;
217
218 if ( $args['delete_unregistered_thumbnail_files'] ) {
219 // Delete old sizes that are still in the metadata.
220 $intermediate_image_sizes = get_intermediate_image_sizes();
221 foreach ( $this->old_metadata['sizes'] as $old_size => $old_size_data ) {
222 if ( in_array( $old_size, $intermediate_image_sizes ) ) {
223 continue;
224 }
225
226 wp_delete_file( $wp_upload_dir . $old_size_data['file'] );
227
228 unset( $new_metadata['sizes'][ $old_size ] );
229 }
230
231 $relative_path = dirname( $new_metadata['file'] ) . DIRECTORY_SEPARATOR;
232
233 // It's possible to upload an image with a filename like image-123x456.jpg and it shouldn't be deleted.
234 $whitelist = $wpdb->get_col( $wpdb->prepare( "
235 SELECT
236 meta_value
237 FROM
238 {$wpdb->postmeta}
239 WHERE
240 meta_key = '_wp_attached_file'
241 AND meta_value REGEXP %s
242 /* Regenerate Thumbnails */
243 ",
244 '^' . preg_quote( $relative_path ) . '[^' . preg_quote( DIRECTORY_SEPARATOR ) . ']+-[0-9]+x[0-9]+\.'
245 ) );
246 $whitelist = array_map( 'basename', $whitelist );
247
248 $filelist = array();
249 foreach ( scandir( $wp_upload_dir ) as $file ) {
250 if ( '.' == $file || '..' == $file || ! is_file( $wp_upload_dir . $file ) ) {
251 continue;
252 }
253
254 $filelist[] = $file;
255 }
256
257 $registered_thumbnails = array();
258 foreach ( $new_metadata['sizes'] as $size ) {
259 $registered_thumbnails[] = $size['file'];
260 }
261
262 $fullsize_parts = pathinfo( $fullsizepath );
263
264 foreach ( $filelist as $file ) {
265 if ( in_array( $file, $whitelist ) || in_array( $file, $registered_thumbnails ) ) {
266 continue;
267 }
268
269 if ( ! preg_match( '#^' . preg_quote( $fullsize_parts['filename'], '#' ) . '-[0-9]+x[0-9]+\.' . preg_quote( $fullsize_parts['extension'], '#' ) . '$#', $file ) ) {
270 continue;
271 }
272
273 wp_delete_file( $wp_upload_dir . $file );
274 }
275 } elseif ( ! empty( $this->old_metadata ) && ! empty( $this->old_metadata['sizes'] ) && is_array( $this->old_metadata['sizes'] ) ) {
276 // If not deleting, rename any size conflicts to avoid them being lost if the file still exists.
277 foreach ( $this->old_metadata['sizes'] as $old_size => $old_size_data ) {
278 if ( empty( $new_metadata['sizes'][ $old_size ] ) ) {
279 $new_metadata['sizes'][ $old_size ] = $this->old_metadata['sizes'][ $old_size ];
280 continue;
281 }
282
283 $new_size_data = $new_metadata['sizes'][ $old_size ];
284
285 if (
286 $new_size_data['width'] !== $old_size_data['width']
287 && $new_size_data['height'] !== $old_size_data['height']
288 && file_exists( $wp_upload_dir . $old_size_data['file'] )
289 ) {
290 $new_metadata['sizes'][ $old_size . '_old_' . $old_size_data['width'] . 'x' . $old_size_data['height'] ] = $old_size_data;
291 }
292 }
293 }
294
295 wp_update_attachment_metadata( $this->attachment->ID, $new_metadata );
296
297 return $new_metadata;
298 }
299
300 /**
301 * Filters the list of thumbnail sizes to only include those which have missing files.
302 *
303 * @since 3.0.0
304 *
305 * @param array $sizes An associative array of registered thumbnail image sizes.
306 * @param array $fullsize_metadata An associative array of fullsize image metadata: width, height, file.
307 *
308 * @return array An associative array of image sizes.
309 */
310 public function filter_image_sizes_to_only_missing_thumbnails( $sizes, $fullsize_metadata ) {
311 if ( ! $sizes ) {
312 return $sizes;
313 }
314
315 $fullsizepath = $this->get_fullsizepath();
316 if ( is_wp_error( $fullsizepath ) ) {
317 return $sizes;
318 }
319
320 $editor = wp_get_image_editor( $fullsizepath );
321 if ( is_wp_error( $editor ) ) {
322 return $sizes;
323 }
324
325 $metadata = $this->old_metadata;
326
327 // This is based on WP_Image_Editor_GD::multi_resize() and others.
328 foreach ( $sizes as $size => $size_data ) {
329 if ( empty( $metadata['sizes'][ $size ] ) ) {
330 continue;
331 }
332
333 if ( ! isset( $size_data['width'] ) && ! isset( $size_data['height'] ) ) {
334 continue;
335 }
336
337 if ( ! isset( $size_data['width'] ) ) {
338 $size_data['width'] = null;
339 }
340 if ( ! isset( $size_data['height'] ) ) {
341 $size_data['height'] = null;
342 }
343
344 if ( ! isset( $size_data['crop'] ) ) {
345 $size_data['crop'] = false;
346 }
347
348 $thumbnail = $this->get_thumbnail(
349 $editor,
350 $fullsize_metadata['width'],
351 $fullsize_metadata['height'],
352 $size_data['width'],
353 $size_data['height'],
354 $size_data['crop']
355 );
356
357
358 // The false check filters out thumbnails that would be larger than the fullsize image.
359 // The size comparison makes sure that the size is also correct.
360 if (
361 false === $thumbnail
362 || (
363 $thumbnail['width'] === $metadata['sizes'][ $size ]['width']
364 && $thumbnail['height'] === $metadata['sizes'][ $size ]['height']
365 && file_exists( $thumbnail['filename'] )
366 )
367 ) {
368 $this->skipped_thumbnails[] = $size;
369 unset( $sizes[ $size ] );
370 }
371 }
372
373 /**
374 * Filters the list of missing thumbnail sizes if you want to add/remove any.
375 *
376 * @since 3.1.0
377 *
378 * @param array $sizes An associative array of image sizes that are missing.
379 * @param array $fullsize_metadata An associative array of fullsize image metadata: width, height, file.
380 * @param object $this The current instance of this class.
381 *
382 * @return array An associative array of image sizes.
383 */
384 return apply_filters( 'regenerate_thumbnails_missing_thumbnails', $sizes, $fullsize_metadata, $this );
385 }
386
387 /**
388 * Generate the thumbnail filename and dimensions for a given set of constraint dimensions.
389 *
390 * @since 3.0.0
391 *
392 * @param WP_Image_Editor|WP_Error $editor An instance of WP_Image_Editor, as returned by wp_get_image_editor().
393 * @param int $fullsize_width The width of the fullsize image.
394 * @param int $fullsize_height The height of the fullsize image.
395 * @param int $thumbnail_width The width of the thumbnail.
396 * @param int $thumbnail_height The height of the thumbnail.
397 * @param bool $crop Whether to crop or not.
398 *
399 * @return array|false An array of the filename, thumbnail width, and thumbnail height,
400 * or false on failure to resize such as the thumbnail being larger than the fullsize image.
401 */
402 public function get_thumbnail( $editor, $fullsize_width, $fullsize_height, $thumbnail_width, $thumbnail_height, $crop ) {
403 $dims = image_resize_dimensions( $fullsize_width, $fullsize_height, $thumbnail_width, $thumbnail_height, $crop );
404
405 if ( ! $dims ) {
406 return false;
407 }
408
409 list( , , , , $dst_w, $dst_h ) = $dims;
410
411 $suffix = "{$dst_w}x{$dst_h}";
412 $file_ext = strtolower( pathinfo( $this->get_fullsizepath(), PATHINFO_EXTENSION ) );
413
414 return array(
415 'filename' => $editor->generate_filename( $suffix, null, $file_ext ),
416 'width' => $dst_w,
417 'height' => $dst_h,
418 );
419 }
420
421 /**
422 * Update the post content of any public post types (posts and pages by default)
423 * that make use of this attachment.
424 *
425 * @since 3.0.0
426 *
427 * @param array|string $args {
428 * Optional. Array or string of arguments for controlling the updating.
429 *
430 * @type array $post_type The post types to update. Defaults to public post types (posts and pages by default).
431 * @type array $post_ids Specific post IDs to update as opposed to any that uses the attachment.
432 * @type int $posts_per_loop How many posts to query at a time to keep memory usage down. You shouldn't need to modify this.
433 * }
434 *
435 * @return array|WP_Error List of post IDs that were modified. The key is the post ID and the value is either the post ID again or a WP_Error object if wp_update_post() failed.
436 */
437 public function update_usages_in_posts( $args = array() ) {
438 // Temporarily disabled until it can be even better tested for edge cases
439 return array();
440
441 $args = wp_parse_args( $args, array(
442 'post_type' => array(),
443 'post_ids' => array(),
444 'posts_per_loop' => 10,
445 ) );
446
447 if ( empty( $args['post_type'] ) ) {
448 $args['post_type'] = array_values( get_post_types( array( 'public' => true ) ) );
449 unset( $args['post_type']['attachment'] );
450 }
451
452 $offset = 0;
453 $posts_updated = array();
454
455 while ( true ) {
456 $posts = get_posts( array(
457 'numberposts' => $args['posts_per_loop'],
458 'offset' => $offset,
459 'orderby' => 'ID',
460 'order' => 'ASC',
461 'include' => $args['post_ids'],
462 'post_type' => $args['post_type'],
463 's' => 'wp-image-' . $this->attachment->ID,
464
465 // For faster queries.
466 'update_post_meta_cache' => false,
467 'update_post_term_cache' => false,
468 ) );
469
470 if ( ! $posts ) {
471 break;
472 }
473
474 $offset += $args['posts_per_loop'];
475
476 foreach ( $posts as $post ) {
477 $content = $post->post_content;
478 $search = array();
479 $replace = array();
480
481 // Find all <img> tags for this attachment and update them.
482 preg_match_all(
483 '#<img [^>]+wp-image-' . $this->attachment->ID . '[^>]+/>#i',
484 $content,
485 $matches,
486 PREG_SET_ORDER
487 );
488 if ( $matches ) {
489 foreach ( $matches as $img_tag ) {
490 preg_match( '# class="([^"]+)?size-([^" ]+)#i', $img_tag[0], $thumbnail_size );
491
492 if ( $thumbnail_size ) {
493 $thumbnail = image_downsize( $this->attachment->ID, $thumbnail_size[2] );
494
495 if ( ! $thumbnail ) {
496 continue;
497 }
498
499 $search[] = $img_tag[0];
500
501 $img_tag[0] = preg_replace( '# src="[^"]+"#i', ' src="' . esc_url( $thumbnail[0] ) . '"', $img_tag[0] );
502 $img_tag[0] = preg_replace(
503 '# width="[^"]+" height="[^"]+"#i',
504 ' width="' . esc_attr( $thumbnail[1] ) . '" height="' . esc_attr( $thumbnail[2] ) . '"',
505 $img_tag[0]
506 );
507
508 $replace[] = $img_tag[0];
509 }
510 }
511 }
512 $content = str_replace( $search, $replace, $content );
513 $search = array();
514 $replace = array();
515
516 // Update the width in any [caption] shortcodes.
517 preg_match_all(
518 '#\[caption id="attachment_' . $this->attachment->ID . '"([^\]]+)? width="[^"]+"\]([^\[]+)size-([^" ]+)([^\[]+)\[\/caption\]#i',
519 $content,
520 $matches,
521 PREG_SET_ORDER
522 );
523 if ( $matches ) {
524 foreach ( $matches as $match ) {
525 $thumbnail = image_downsize( $this->attachment->ID, $match[3] );
526
527 if ( ! $thumbnail ) {
528 continue;
529 }
530
531 $search[] = $match[0];
532 $replace[] = '[caption id="attachment_' . $this->attachment->ID . '"' . $match[1] . ' width="' . esc_attr( $thumbnail[1] ) . '"]' . $match[2] . 'size-' . $match[3] . $match[4] . '[/caption]';
533 }
534 }
535 $content = str_replace( $search, $replace, $content );
536
537 $updated_post_object = (object) array(
538 'ID' => $post->ID,
539 'post_content' => $content,
540 );
541
542 $posts_updated[ $post->ID ] = wp_update_post( $updated_post_object, true );
543 }
544 }
545
546 return $posts_updated;
547 }
548
549 /**
550 * Returns information about the current attachment for use in the REST API.
551 *
552 * @since 3.0.0
553 *
554 * @return array|WP_Error The attachment name, fullsize URL, registered thumbnail size status, and any unregistered sizes, or WP_Error on error.
555 */
556 public function get_attachment_info() {
557 $fullsizepath = $this->get_fullsizepath();
558 if ( is_wp_error( $fullsizepath ) ) {
559 $fullsizepath->add_data( array( 'attachment' => $this->attachment ) );
560
561 return $fullsizepath;
562 }
563
564 $editor = wp_get_image_editor( $fullsizepath );
565 if ( is_wp_error( $editor ) ) {
566 // Display a more helpful error message.
567 if ( 'image_no_editor' === $editor->get_error_code() ) {
568 $editor = new WP_Error( 'image_no_editor', __( 'The current image editor cannot process this file type.', 'regenerate-thumbnails' ) );
569 }
570
571 $editor->add_data( array(
572 'attachment' => $this->attachment,
573 'status' => 415,
574 ) );
575
576 return $editor;
577 }
578
579 $metadata = wp_get_attachment_metadata( $this->attachment->ID );
580
581 if ( false === $metadata || ! is_array( $metadata ) ) {
582 return new WP_Error(
583 'regenerate_thumbnails_regenerator_no_metadata',
584 __( 'Unable to load the metadata for this attachment.', 'regenerate-thumbnails' ),
585 array(
586 'status' => 404,
587 'attachment' => $this->attachment,
588 )
589 );
590 }
591
592 if ( ! isset( $metadata['sizes'] ) ) {
593 $metadata['sizes'] = array();
594 }
595
596 // PDFs don't have width/height set.
597 $width = ( isset( $metadata['width'] ) ) ? $metadata['width'] : null;
598 $height = ( isset( $metadata['height'] ) ) ? $metadata['height'] : null;
599
600 require_once( ABSPATH . '/wp-admin/includes/image.php' );
601
602 $preview = false;
603 if ( file_is_displayable_image( $fullsizepath ) ) {
604 $preview = wp_get_attachment_url( $this->attachment->ID );
605 } elseif (
606 is_array( $metadata['sizes'] ) &&
607 is_array( $metadata['sizes']['full'] ) &&
608 ! empty( $metadata['sizes']['full']['file'] )
609 ) {
610 $preview = str_replace(
611 wp_basename( $fullsizepath ),
612 $metadata['sizes']['full']['file'],
613 wp_get_attachment_url( $this->attachment->ID )
614 );
615
616 if ( ! file_exists( $preview ) ) {
617 $preview = false;
618 }
619 }
620
621 $response = array(
622 'name' => ( $this->attachment->post_title ) ? $this->attachment->post_title : sprintf( __( 'Attachment %d', 'regenerate-thumbnails' ), $this->attachment->ID ),
623 'preview' => $preview,
624 'relative_path' => _wp_get_attachment_relative_path( $fullsizepath ) . DIRECTORY_SEPARATOR . wp_basename( $fullsizepath ),
625 'edit_url' => get_edit_post_link( $this->attachment->ID, 'raw' ),
626 'width' => $width,
627 'height' => $height,
628 'registered_sizes' => array(),
629 'unregistered_sizes' => array(),
630 );
631
632 $wp_upload_dir = dirname( $fullsizepath ) . DIRECTORY_SEPARATOR;
633
634 $registered_sizes = RegenerateThumbnails()->get_thumbnail_sizes();
635
636 if ( 'application/pdf' === get_post_mime_type( $this->attachment ) ) {
637 $registered_sizes = array_intersect_key(
638 $registered_sizes,
639 array(
640 'thumbnail' => true,
641 'medium' => true,
642 'large' => true,
643 )
644 );
645 }
646
647 // Check the status of all currently registered sizes.
648 foreach ( $registered_sizes as $size ) {
649 // Width and height are needed to generate the thumbnail filename.
650 if ( $width && $height ) {
651 $thumbnail = $this->get_thumbnail( $editor, $width, $height, $size['width'], $size['height'], $size['crop'] );
652
653 if ( $thumbnail ) {
654 $size['filename'] = wp_basename( $thumbnail['filename'] );
655 $size['fileexists'] = file_exists( $thumbnail['filename'] );
656 } else {
657 $size['filename'] = false;
658 $size['fileexists'] = false;
659 }
660 } elseif ( ! empty( $metadata['sizes'][ $size['label'] ]['file'] ) ) {
661 $size['filename'] = wp_basename( $metadata['sizes'][ $size['label'] ]['file'] );
662 $size['fileexists'] = file_exists( $wp_upload_dir . $metadata['sizes'][ $size['label'] ]['file'] );
663 } else {
664 $size['filename'] = false;
665 $size['fileexists'] = false;
666 }
667
668 $response['registered_sizes'][] = $size;
669 }
670
671 if ( ! $width && ! $height && is_array( $metadata['sizes']['full'] ) ) {
672 $response['registered_sizes'][] = array(
673 'label' => 'full',
674 'width' => $metadata['sizes']['full']['width'],
675 'height' => $metadata['sizes']['full']['height'],
676 'filename' => $metadata['sizes']['full']['file'],
677 'fileexists' => file_exists( $wp_upload_dir . $metadata['sizes']['full']['file'] ),
678 );
679 }
680
681 // Look at the attachment metadata and see if we have any extra files from sizes that are no longer registered.
682 foreach ( $metadata['sizes'] as $label => $size ) {
683 if ( ! file_exists( $wp_upload_dir . $size['file'] ) ) {
684 continue;
685 }
686
687 // An unregistered size could match a registered size's dimensions. Ignore these.
688 foreach ( $response['registered_sizes'] as $registered_size ) {
689 if ( $size['file'] === $registered_size['filename'] ) {
690 continue 2;
691 }
692 }
693
694 if ( ! empty( $registered_sizes[ $label ] ) ) {
695 /* translators: Used for listing old sizes of currently registered thumbnails */
696 $label = sprintf( __( '%s (old)', 'regenerate-thumbnails' ), $label );
697 }
698
699 $response['unregistered_sizes'][] = array(
700 'label' => $label,
701 'width' => $size['width'],
702 'height' => $size['height'],
703 'filename' => $size['file'],
704 'fileexists' => true,
705 );
706 }
707
708 return $response;
709 }
710 }
1 <?php
2 /**
3 * Regenerate Thumbnails: REST API controller class
4 *
5 * @package RegenerateThumbnails
6 * @since 3.0.0
7 */
8
9 /**
10 * Registers new REST API endpoints.
11 *
12 * @since 3.0.0
13 */
14 class RegenerateThumbnails_REST_Controller extends WP_REST_Controller {
15 /**
16 * The namespace for the REST API routes.
17 *
18 * @since 3.0.0
19 *
20 * @var string
21 */
22 public $namespace = 'regenerate-thumbnails/v1';
23
24 /**
25 * Register the new routes and endpoints.
26 *
27 * @since 3.0.0
28 */
29 public function register_routes() {
30 register_rest_route( $this->namespace, '/regenerate/(?P<id>[\d]+)', array(
31 array(
32 'methods' => WP_REST_Server::ALLMETHODS,
33 'callback' => array( $this, 'regenerate_item' ),
34 'permission_callback' => array( $this, 'permissions_check' ),
35 'args' => array(
36 'only_regenerate_missing_thumbnails' => array(
37 'description' => __( "Whether to only regenerate missing thumbnails. It's faster with this enabled.", 'regenerate-thumbnails' ),
38 'type' => 'boolean',
39 'default' => true,
40 ),
41 'delete_unregistered_thumbnail_files' => array(
42 'description' => __( 'Whether to delete any old, now unregistered thumbnail files.', 'regenerate-thumbnails' ),
43 'type' => 'boolean',
44 'default' => false,
45 ),
46 'update_usages_in_posts' => array(
47 'description' => __( 'Whether to update the image tags in any posts that make use of this attachment.', 'regenerate-thumbnails' ),
48 'type' => 'boolean',
49 'default' => true,
50 ),
51 'update_usages_in_posts_post_type' => array(
52 'description' => __( 'The types of posts to update. Defaults to all public post types.', 'regenerate-thumbnails' ),
53 'type' => 'array',
54 'default' => array(),
55 'validate_callback' => array( $this, 'is_array' ),
56 ),
57 'update_usages_in_posts_post_ids' => array(
58 'description' => __( 'Specific post IDs to update rather than any posts that use this attachment.', 'regenerate-thumbnails' ),
59 'type' => 'array',
60 'default' => array(),
61 'validate_callback' => array( $this, 'is_array' ),
62 ),
63 'update_usages_in_posts_posts_per_loop' => array(
64 'description' => __( "Posts to process per loop. This is to control memory usage and you likely don't need to adjust this.", 'regenerate-thumbnails' ),
65 'type' => 'integer',
66 'default' => 10,
67 'sanitize_callback' => 'absint',
68 ),
69 ),
70 ),
71 ) );
72
73 register_rest_route( $this->namespace, '/attachmentinfo/(?P<id>[\d]+)', array(
74 array(
75 'methods' => WP_REST_Server::READABLE,
76 'callback' => array( $this, 'attachment_info' ),
77 'permission_callback' => array( $this, 'permissions_check' ),
78 ),
79 ) );
80
81 register_rest_route( $this->namespace, '/featuredimages', array(
82 array(
83 'methods' => WP_REST_Server::READABLE,
84 'callback' => array( $this, 'featured_images' ),
85 'permission_callback' => array( $this, 'permissions_check' ),
86 'args' => $this->get_paging_collection_params(),
87 ),
88 ) );
89 }
90
91 /**
92 * Register a filter to allow excluding site icons via a query parameter.
93 *
94 * @since 3.0.0
95 */
96 public function register_filters() {
97 add_filter( 'rest_attachment_query', array( $this, 'maybe_filter_out_site_icons' ), 10, 2 );
98 add_filter( 'rest_attachment_query', array( $this, 'maybe_filter_mimes_types' ), 10, 2 );
99 }
100
101 /**
102 * If the exclude_site_icons parameter is set on a media (attachment) request,
103 * filter out any attachments that are or were being used as a site icon.
104 *
105 * @param array $args Key value array of query var to query value.
106 * @param WP_REST_Request $request The request used.
107 *
108 * @return array Key value array of query var to query value.
109 */
110 public function maybe_filter_out_site_icons( $args, $request ) {
111 if ( empty( $request['exclude_site_icons'] ) ) {
112 return $args;
113 }
114
115 if ( ! isset( $args['meta_query'] ) ) {
116 $args['meta_query'] = array();
117 }
118
119 $args['meta_query'][] = array(
120 'key' => '_wp_attachment_context',
121 'value' => 'site-icon',
122 'compare' => 'NOT EXISTS',
123 );
124
125 return $args;
126 }
127
128 /**
129 * If the is_regeneratable parameter is set on a media (attachment) request,
130 * filter results to only include images and PDFs.
131 *
132 * @param array $args Key value array of query var to query value.
133 * @param WP_REST_Request $request The request used.
134 *
135 * @return array Key value array of query var to query value.
136 */
137 public function maybe_filter_mimes_types( $args, $request ) {
138 if ( empty( $request['is_regeneratable'] ) ) {
139 return $args;
140 }
141
142 $args['post_mime_type'] = array();
143 foreach ( get_allowed_mime_types() as $mime_type ) {
144 if ( 'image/svg+xml' === $mime_type ) {
145 continue;
146 }
147
148 if ( 'application/pdf' == $mime_type || 'image/' == substr( $mime_type, 0, 6 ) ) {
149 $args['post_mime_type'][] = $mime_type;
150 }
151 }
152
153 return $args;
154 }
155
156 /**
157 * Retrieves the paging query params for the collections.
158 *
159 * @since 3.0.0
160 *
161 * @return array Query parameters for the collection.
162 */
163 public function get_paging_collection_params() {
164 return array_intersect_key(
165 parent::get_collection_params(),
166 array_flip( array( 'page', 'per_page' ) )
167 );
168 }
169
170 /**
171 * Regenerate the thumbnails for a specific media item.
172 *
173 * @since 3.0.0
174 *
175 * @param WP_REST_Request $request Full data about the request.
176 *
177 * @return true|WP_Error True on success, otherwise a WP_Error object.
178 */
179 public function regenerate_item( $request ) {
180 $regenerator = RegenerateThumbnails_Regenerator::get_instance( $request->get_param( 'id' ) );
181
182 if ( is_wp_error( $regenerator ) ) {
183 return $regenerator;
184 }
185
186 $result = $regenerator->regenerate( array(
187 'only_regenerate_missing_thumbnails' => $request->get_param( 'only_regenerate_missing_thumbnails' ),
188 'delete_unregistered_thumbnail_files' => $request->get_param( 'delete_unregistered_thumbnail_files' ),
189 ) );
190
191 if ( is_wp_error( $result ) ) {
192 return $result;
193 }
194
195 if ( $request->get_param( 'update_usages_in_posts' ) ) {
196 $posts_updated = $regenerator->update_usages_in_posts( array(
197 'post_type' => $request->get_param( 'update_usages_in_posts_post_type' ),
198 'post_ids' => $request->get_param( 'update_usages_in_posts_post_ids' ),
199 'posts_per_loop' => $request->get_param( 'update_usages_in_posts_posts_per_loop' ),
200 ) );
201
202 // If wp_update_post() failed for any posts, return that error.
203 foreach ( $posts_updated as $post_updated_result ) {
204 if ( is_wp_error( $post_updated_result ) ) {
205 return $post_updated_result;
206 }
207 }
208 }
209
210 return $this->attachment_info( $request );
211 }
212
213 /**
214 * Return a bunch of information about the current attachment for use in the UI
215 * including details about the thumbnails.
216 *
217 * @since 3.0.0
218 *
219 * @param WP_REST_Request $request Full data about the request.
220 *
221 * @return array|WP_Error The data array or a WP_Error object on error.
222 */
223 public function attachment_info( $request ) {
224 $regenerator = RegenerateThumbnails_Regenerator::get_instance( $request->get_param( 'id' ) );
225
226 if ( is_wp_error( $regenerator ) ) {
227 return $regenerator;
228 }
229
230 return $regenerator->get_attachment_info();
231 }
232
233 /**
234 * Return attachment IDs that are being used as featured images.
235 *
236 * @since 3.0.0
237 *
238 * @param WP_REST_Request $request Full data about the request.
239 *
240 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
241 */
242 public function featured_images( $request ) {
243 global $wpdb;
244
245 $page = $request->get_param( 'page' );
246 $per_page = $request->get_param( 'per_page' );
247
248 if ( 0 == $per_page ) {
249 $per_page = 10;
250 }
251
252 $featured_image_ids = $wpdb->get_results( $wpdb->prepare(
253 "SELECT SQL_CALC_FOUND_ROWS meta_value AS id FROM {$wpdb->postmeta} WHERE meta_key = '_thumbnail_id' GROUP BY meta_value ORDER BY MIN(meta_id) LIMIT %d OFFSET %d",
254 $per_page,
255 ( $per_page * $page ) - $per_page
256 ) );
257
258 $total = $wpdb->get_var( "SELECT FOUND_ROWS()" );
259 $max_pages = ceil( $total / $per_page );
260
261 if ( $page > $max_pages && $total > 0 ) {
262 return new WP_Error( 'rest_post_invalid_page_number', __( 'The page number requested is larger than the number of pages available.' ), array( 'status' => 400 ) );
263 }
264
265 $response = rest_ensure_response( $featured_image_ids );
266
267 $response->header( 'X-WP-Total', (int) $total );
268 $response->header( 'X-WP-TotalPages', (int) $max_pages );
269
270 $request_params = $request->get_query_params();
271 $base = add_query_arg( $request_params, rest_url( $this->namespace . '/featuredimages' ) );
272
273 if ( $page > 1 ) {
274 $prev_page = $page - 1;
275
276 if ( $prev_page > $max_pages ) {
277 $prev_page = $max_pages;
278 }
279
280 $prev_link = add_query_arg( 'page', $prev_page, $base );
281 $response->link_header( 'prev', $prev_link );
282 }
283
284 if ( $max_pages > $page ) {
285 $next_page = $page + 1;
286 $next_link = add_query_arg( 'page', $next_page, $base );
287
288 $response->link_header( 'next', $next_link );
289 }
290
291 return $response;
292 }
293
294 /**
295 * Check to see if the current user is allowed to use this endpoint.
296 *
297 * @since 3.0.0
298 *
299 * @param WP_REST_Request $request Full data about the request.
300 *
301 * @return bool Whether the current user has permission to regenerate thumbnails.
302 */
303 public function permissions_check( $request ) {
304 return current_user_can( RegenerateThumbnails()->capability );
305 }
306
307 /**
308 * Returns whether a variable is an array or not. This is needed because 3 arguments are
309 * passed to validation callbacks but is_array() only accepts one argument.
310 *
311 * @since 3.0.0
312 *
313 * @see https://core.trac.wordpress.org/ticket/34659
314 *
315 * @param mixed $param The parameter value to validate.
316 * @param WP_REST_Request $request The REST request.
317 * @param string $key The parameter name.
318 *
319 * @return bool Whether the parameter is an array or not.
320 */
321 public function is_array( $param, $request, $key ) {
322 return is_array( $param );
323 }
324 }
1 !function(a){function b(a){return a=b.buildAjaxOptions(a),b.transport(a)}var c=window.wpApiSettings;b.buildAjaxOptions=function(b){var d,e,f,g,h,i=b.url,j=b.path;if("string"==typeof b.namespace&&"string"==typeof b.endpoint&&(d=b.namespace.replace(/^\/|\/$/g,""),e=b.endpoint.replace(/^\//,""),j=e?d+"/"+e:d),"string"==typeof j&&(i=c.root+j.replace(/^\//,"")),g=!(b.data&&b.data._wpnonce),f=b.headers||{},g)for(h in f)if(f.hasOwnProperty(h)&&"x-wp-nonce"===h.toLowerCase()){g=!1;break}return g&&(f=a.extend({"X-WP-Nonce":c.nonce},f)),b=a.extend({},b,{headers:f,url:i}),delete b.path,delete b.namespace,delete b.endpoint,b},b.transport=a.ajax,window.wp=window.wp||{},window.wp.apiRequest=b}(jQuery);
...\ No newline at end of file ...\ No newline at end of file
1 === Regenerate Thumbnails ===
2 Contributors: Viper007Bond
3 Tags: thumbnail, thumbnails, post thumbnail, post thumbnails
4 Requires at least: 4.7
5 Tested up to: 6.3
6 Requires PHP: 5.2.4
7 Stable tag: 3.1.6
8 License: GPLv2 or later
9 License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
11 Regenerate the thumbnails for one or more of your image uploads. Useful when changing their sizes or your theme.
12
13 == Description ==
14
15 Regenerate Thumbnails allows you to regenerate all thumbnail sizes for one or more images that have been uploaded to your Media Library.
16
17 This is useful for situations such as:
18
19 * A new thumbnail size has been added and you want past uploads to have a thumbnail in that size.
20 * You've changed the dimensions of an existing thumbnail size, for example via Settings → Media.
21 * You've switched to a new WordPress theme that uses featured images of a different size.
22
23 It also offers the ability to delete old, unused thumbnails in order to free up server space.
24
25 = In Memory of Alex Mills =
26
27 In February 2019 Alex Mills, the author of this plugin, [passed away](https://alex.blog/2019/02/27/from-alexs-family/). He leaves behind a number of plugins which will be maintained by Automattic and members of the WordPress community. If this plugin is useful to you please consider donating to the Oregon Health and Science University. You can find more information [here](https://alex.blog/2019/03/13/in-memory-of-alex-donation-link-update/).
28
29 = Alternatives =
30
31 **WP-CLI**
32
33 If you have command line access to your server, I highly recommend using [WP-CLI](https://wp-cli.org/) instead of this plugin as it's faster (no HTTP requests overhead) and can be run inside of a `screen` for those with many thumbnails. For details, see the documentation of its [`media regenerate` command](https://developer.wordpress.org/cli/commands/media/regenerate/).
34
35 **Jetpack's Photon Module**
36
37 [Jetpack](https://jetpack.com/) is a plugin by Automattic, makers of WordPress.com. It gives your self-hosted WordPress site some of the functionality that is available to WordPress.com-hosted sites.
38
39 [The Photon module](https://jetpack.com/support/photon/) makes the images on your site be served from WordPress.com's global content delivery network (CDN) which should speed up the loading of images. Importantly though it can create thumbnails on the fly which means you'll never need to use this plugin.
40
41 I personally use Photon on my own website.
42
43 *Disclaimer: I work for Automattic but I would recommend Photon even if I didn't.*
44
45 = Need Help? Found A Bug? Want To Contribute Code? =
46
47 Support for this plugin is provided via the [WordPress.org forums](https://wordpress.org/support/plugin/regenerate-thumbnails).
48
49 The source code for this plugin is available on [GitHub](https://github.com/automattic/regenerate-thumbnails).
50
51 == Installation ==
52
53 1. Go to your admin area and select Plugins → Add New from the menu.
54 2. Search for "Regenerate Thumbnails".
55 3. Click install.
56 4. Click activate.
57 5. Navigate to Tools → Regenerate Thumbnails.
58
59 == Frequently Asked Questions ==
60
61 = Is this plugin [GDPR](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation) compliant? =
62
63 This plugin does not log nor transmit any user data. Infact it doesn't even do anything on the user-facing part of your website, only in the admin area. This means it should be compliant but I'm not a lawyer.
64
65 == Screenshots ==
66
67 1. The main plugin interface.
68 2. Regenerating in progress.
69 3. Interface for regenerating a single attachment.
70 4. Individual images can be regenerated from the media library in list view.
71 5. They can also be regenerated from the edit attachment screen.
72
73 == ChangeLog ==
74
75 = Version 3.1.6 =
76
77 * Fix: Respect "Skip regenerating existing correctly sized thumbnails" setting.
78 * Fix: Don't delete all thumbnails when deleting old unregistered thumbnails size.
79
80 = Version 3.1.5 =
81
82 * Fix: Don't overwrite 'All X Attachment' button label with featured images count.
83 * Tested successfully with PHP 8.1.
84 * Tested successfully with PHP 8.2.
85
86 = Version 3.1.4 =
87
88 * Fix: Don't attempt to regenerate SVG's.
89 * Bump tested version.
90 * Update dependencies.
91
92 = Version 3.1.3 =
93
94 * Update plugin dependencies to the latest version.
95
96 = Version 3.1.2 =
97 * Use wp_get_original_image_path() in WordPress 5.3
98
99 = Version 3.1.1 =
100
101 * Minor fix to avoid a divide by zero error when displaying thumbnail filenames.
102
103 = Version 3.1.0 =
104
105 * Bring back the ability to delete old, unregistered thumbnail sizes. Support for updating post contents is still disabled (too buggy).
106 * Various code improvements including string localization disambiguation.
107
108 = Version 3.0.2 =
109
110 * Fix slowdown in certain cases in the media library.
111 * Fix not being able to regenerate existing thumbnails for single images. Props @idofri.
112 * Fix JavaScript error that could occur if the REST API response was unexpected (empty or PHP error).
113 * Fix bug related to multibyte filenames.
114 * If an image is used as the featured image on multiple posts, only regenerate it once instead of once per post.
115
116 = Version 3.0.1 =
117
118 * Temporarily disable the update post functionality. I tested it a lot but it seems there's still some bugs.
119 * Temporarily disable the delete old thumbnails functionality. It seems to work fine but without the update post functionality, it's not as useful.
120 * Try to more gracefully handle cases where there's missing metadata for attachments.
121 * Wait until `init` to initialize the plugin so themes can filter the plugin's capability. `plugins_loaded` is too early.
122 * Fix a JavaScript error that would cause the whole regeneration process to stop if an individual image returned non-JSON, such as a 500 error code.
123 * Accept GET requests for the regenerate REST API endpoint instead of just POSTs. For some reasons some people's sites are using GET despite the code saying use POST.
124 * Make the attachment ID clickable in error messages.
125 * Fetch 25 attachments at a time instead of 5. I was using 5 for testing.
126 * PHP notice fixes.
127
128 = Version 3.0.0 =
129
130 * Complete rewrite from scratch using Vue.js and the WordPress REST API.
131
132 = Version 2.2.4 =
133
134 * Better AJAX response error handling in the JavaScript. This should fix a long-standing bug in this plugin. Props Hew Sutton.
135
136 = Version 2.2.3 =
137
138 * Make the capability required to use this plugin filterable so themes and other plugins can change it. Props [Jackson Whelan](http://jacksonwhelan.com/).
139
140 = Version 2.2.2 =
141
142 * Don't check the nonce until we're sure that the action called was for this plugin. Fixes lots of "Are you sure you want to do this?" error messages.
143
144 = Version 2.2.1 =
145
146 * Fix the bottom bulk action dropdown. Thanks Stefan for pointing out the issue!
147
148 = Version 2.2.0 =
149
150 * Changes to the Bulk Action functionality were made shortly before the release of WordPress 3.1 which broke the way I implemented the specific multiple image regeneration feature. This version adds to the Bulk Action menu using Javascript as that's the only way to do it currently.
151
152 = Version 2.1.3 =
153
154 * Move the `error_reporting()` call in the AJAX handler to the beginning so that we're more sure that no PHP errors are outputted. Some hosts disable usage of `set_time_limit()` and calling it was causing a PHP warning to be outputted.
155
156 = Version 2.1.2 =
157
158 * When regenerating all images, newest images are done first rather than the oldest.
159 * Fixed a bug with regeneration error reporting in some browsers. Thanks to pete-sch for reporting the error.
160 * Supress PHP errors in the AJAX handler to avoid sending an invalid JSON response. Thanks to pete-sch for reporting the error.
161 * Better and more detailed error reporting for when `wp_generate_attachment_metadata()` fails.
162
163 = Version 2.1.1 =
164
165 * Clean up the wording a bit to better match the new features and just be easier to understand.
166 * Updated screenshots.
167
168 = Version 2.1.0 =
169
170 Lots of new features!
171
172 * Thanks to a lot of jQuery help from [Boris Schapira](http://borisschapira.com/), a failed image regeneration will no longer stop the whole process.
173 * The results of each image regeneration is now outputted. You can easily see which images were successfully regenerated and which failed. Was inspired by a concept by Boris.
174 * There is now a button on the regeneration page that will allow you to abort resizing images for any reason. Based on code by Boris.
175 * You can now regenerate single images from the Media page. The link to do so will show up in the actions list when you hover over the row.
176 * You can now bulk regenerate multiple from the Media page. Check the boxes and then select "Regenerate Thumbnails" form the "Bulk Actions" dropdown. WordPress 3.1+ only.
177 * The total time that the regeneration process took is now displayed in the final status message.
178 * jQuery UI Progressbar version upgraded.
179
180 = Version 2.0.3 =
181
182 * Switch out deprecated function call.
183
184 = Version 2.0.2 =
185
186 * Directly query the database to only fetch what the plugin needs (the attachment ID). This will reduce the memory required as it's not storing the whole row for each attachment.
187
188 = Version 2.0.1 =
189
190 * I accidentally left a `check_admin_referer()` (nonce check) commented out.
191
192 = Version 2.0.0 =
193
194 * Recoded from scratch. Now uses an AJAX request per attachment to do the resizing. No more PHP maximum execution time errors or anything like that. Also features a pretty progress bar to let the user know how it's going.
195
196 = Version 1.1.0 =
197
198 * WordPress 2.7 updates -- code + UI. Thanks to jdub and Patrick F.
199
200 = Version 1.0.0 =
201
202 * Initial release.
203
204 = Upgrade Notice =
205 Support for WordPress 5.3
1 <?php /*
2
3 **************************************************************************
4
5 Plugin Name: Regenerate Thumbnails
6 Description: Regenerate the thumbnails for one or more of your image uploads. Useful when changing their sizes or your theme.
7 Plugin URI: https://alex.blog/wordpress-plugins/regenerate-thumbnails/
8 Version: 3.1.6
9 Author: Alex Mills (Viper007Bond)
10 Author URI: https://alex.blog/
11 Text Domain: regenerate-thumbnails
12 License: GPL2
13 License URI: https://www.gnu.org/licenses/gpl-2.0.html
14
15 **************************************************************************
16
17 Regenerate Thumbnails is free software: you can redistribute it and/or modify
18 it under the terms of the GNU General Public License as published by
19 the Free Software Foundation, either version 2 of the License, or
20 any later version.
21
22 Regenerate Thumbnails is distributed in the hope that it will be useful,
23 but WITHOUT ANY WARRANTY; without even the implied warranty of
24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 GNU General Public License for more details.
26
27 You should have received a copy of the GNU General Public License
28 along with Regenerate Thumbnails. If not, see https://www.gnu.org/licenses/gpl-2.0.html.
29
30 **************************************************************************/
31
32 /**
33 * Main plugin class.
34 *
35 * @since 1.0.0
36 */
37 class RegenerateThumbnails {
38 /**
39 * This plugin's version number. Used for busting caches.
40 *
41 * @var string
42 */
43 public $version = '3.1.6';
44
45 /**
46 * The menu ID of this plugin, as returned by add_management_page().
47 *
48 * @var string
49 */
50 public $menu_id;
51
52 /**
53 * The capability required to use this plugin.
54 * Please don't change this directly. Use the "regenerate_thumbs_cap" filter instead.
55 *
56 * @var string
57 */
58 public $capability = 'manage_options';
59
60 /**
61 * The instance of the REST API controller class used to extend the REST API.
62 *
63 * @var RegenerateThumbnails_REST_Controller
64 */
65 public $rest_api;
66
67 /**
68 * The single instance of this plugin.
69 *
70 * @see RegenerateThumbnails()
71 *
72 * @access private
73 * @var RegenerateThumbnails
74 */
75 private static $instance;
76
77 /**
78 * Constructor. Doesn't actually do anything as instance() creates the class instance.
79 */
80 private function __construct() {}
81
82 /**
83 * Prevents the class from being cloned.
84 */
85 public function __clone() {
86 wp_die( "Please don't clone RegenerateThumbnails" );
87 }
88
89 /**
90 * Prints the class from being unserialized and woken up.
91 */
92 public function __wakeup() {
93 wp_die( "Please don't unserialize/wakeup RegenerateThumbnails" );
94 }
95
96 /**
97 * Creates a new instance of this class if one hasn't already been made
98 * and then returns the single instance of this class.
99 *
100 * @return RegenerateThumbnails
101 */
102 public static function instance() {
103 if ( ! isset( self::$instance ) ) {
104 self::$instance = new RegenerateThumbnails;
105 self::$instance->setup();
106 }
107
108 return self::$instance;
109 }
110
111 /**
112 * Register all of the needed hooks and actions.
113 */
114 public function setup() {
115 // Prevent fatals on old versions of WordPress
116 if ( ! class_exists( 'WP_REST_Controller' ) ) {
117 return;
118 }
119
120 require dirname( __FILE__ ) . '/includes/class-regeneratethumbnails-regenerator.php';
121 require dirname( __FILE__ ) . '/includes/class-regeneratethumbnails-rest-controller.php';
122
123 // Allow people to change what capability is required to use this plugin.
124 $this->capability = apply_filters( 'regenerate_thumbs_cap', $this->capability );
125
126 // Initialize the REST API routes.
127 add_action( 'rest_api_init', array( $this, 'rest_api_init' ) );
128
129 // Add a new item to the Tools menu in the admin menu.
130 add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
131
132 // Load the required JavaScript and CSS.
133 add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueues' ) );
134
135 // For the bulk action dropdowns.
136 add_action( 'admin_head-upload.php', array( $this, 'add_bulk_actions_via_javascript' ) );
137 add_action( 'admin_action_bulk_regenerate_thumbnails', array( $this, 'bulk_action_handler' ) ); // Top drowndown.
138 add_action( 'admin_action_-1', array( $this, 'bulk_action_handler' ) ); // Bottom dropdown.
139
140 // Add a regenerate button to the non-modal edit media page.
141 add_action( 'attachment_submitbox_misc_actions', array( $this, 'add_button_to_media_edit_page' ), 99 );
142
143 // Add a regenerate button to the list of fields in the edit media modal.
144 // Ideally this would with the action links but I'm not good enough with JavaScript to do it.
145 add_filter( 'attachment_fields_to_edit', array( $this, 'add_button_to_edit_media_modal_fields_area' ), 99, 2 );
146
147 // Add a regenerate link to actions list in the media list view.
148 add_filter( 'media_row_actions', array( $this, 'add_regenerate_link_to_media_list_view' ), 10, 2 );
149 }
150
151 /**
152 * Initialize the REST API routes.
153 */
154 public function rest_api_init() {
155 $this->rest_api = new RegenerateThumbnails_REST_Controller();
156 $this->rest_api->register_routes();
157 $this->rest_api->register_filters();
158 }
159
160 /**
161 * Adds a the new item to the admin menu.
162 */
163 public function add_admin_menu() {
164 $this->menu_id = add_management_page(
165 _x( 'Regenerate Thumbnails', 'admin page title', 'regenerate-thumbnails' ),
166 _x( 'Regenerate Thumbnails', 'admin menu entry title', 'regenerate-thumbnails' ),
167 $this->capability,
168 'regenerate-thumbnails',
169 array( $this, 'regenerate_interface' )
170 );
171
172 add_action( 'admin_head-' . $this->menu_id, array( $this, 'add_admin_notice_if_resizing_not_supported' ) );
173 }
174
175 /**
176 * Enqueues the requires JavaScript file and stylesheet on the plugin's admin page.
177 *
178 * @param string $hook_suffix The current page's hook suffix as provided by admin-header.php.
179 */
180 public function admin_enqueues( $hook_suffix ) {
181 if ( $hook_suffix != $this->menu_id ) {
182 return;
183 }
184
185 // Pre-4.9 compatibility.
186 if ( ! wp_script_is( 'wp-api-request', 'registered' ) ) {
187 wp_register_script(
188 'wp-api-request',
189 plugins_url( 'js/api-request.min.js', __FILE__ ),
190 array( 'jquery' ),
191 '4.9',
192 true
193 );
194
195 wp_localize_script( 'wp-api-request', 'wpApiSettings', array(
196 'root' => esc_url_raw( get_rest_url() ),
197 'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
198 'versionString' => 'wp/v2/',
199 ) );
200 }
201
202 wp_enqueue_script(
203 'regenerate-thumbnails',
204 plugins_url( 'dist/build.js', __FILE__ ),
205 array( 'wp-api-request' ),
206 ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? filemtime( dirname( __FILE__ ) . '/dist/build.js' ) : $this->version,
207 true
208 );
209
210 // phpcs:disable WordPress.Arrays.MultipleStatementAlignment
211 $script_data = array(
212 'data' => array(
213 'thumbnailSizes' => $this->get_thumbnail_sizes(),
214 'genericEditURL' => admin_url( 'post.php?action=edit&post=' ),
215 ),
216 'options' => array(
217 'onlyMissingThumbnails' => apply_filters( 'regenerate_thumbnails_options_onlymissingthumbnails', true ),
218 'updatePostContents' => apply_filters( 'regenerate_thumbnails_options_updatepostcontents', false ),
219 'deleteOldThumbnails' => apply_filters( 'regenerate_thumbnails_options_deleteoldthumbnails', false ),
220 ),
221 'l10n' => array(
222 'common' => array(
223 'loading' => __( 'Loading…', 'regenerate-thumbnails' ),
224 'onlyRegenerateMissingThumbnails' => __( 'Skip regenerating existing correctly sized thumbnails (faster).', 'regenerate-thumbnails' ),
225 'deleteOldThumbnails' => __( "Delete thumbnail files for old unregistered sizes in order to free up server space. This may result in broken images in your posts and pages.", 'regenerate-thumbnails' ),
226 'thumbnailSizeItemWithCropMethodNoFilename' => __( '<strong>{label}:</strong> {width}×{height} pixels ({cropMethod})', 'regenerate-thumbnails' ),
227 'thumbnailSizeItemWithCropMethod' => __( '<strong>{label}:</strong> {width}×{height} pixels ({cropMethod}) <code>{filename}</code>', 'regenerate-thumbnails' ),
228 'thumbnailSizeItemWithoutCropMethod' => __( '<strong>{label}:</strong> {width}×{height} pixels <code>{filename}</code>', 'regenerate-thumbnails' ),
229 'thumbnailSizeBiggerThanOriginal' => __( '<strong>{label}:</strong> {width}×{height} pixels (thumbnail would be larger than original)', 'regenerate-thumbnails' ),
230 'thumbnailSizeItemIsCropped' => __( 'cropped to fit', 'regenerate-thumbnails' ),
231 'thumbnailSizeItemIsProportional' => __( 'proportionally resized to fit inside dimensions', 'regenerate-thumbnails' ),
232 ),
233 'Home' => array(
234 'intro1' => sprintf(
235 /* translators: %s: Media options URL */
236 __( 'When you change WordPress themes or change the sizes of your thumbnails at <a href="%s">Settings → Media</a>, images that you have previously uploaded to you media library will be missing thumbnail files for those new image sizes. This tool will allow you to create those missing thumbnail files for all images.', 'regenerate-thumbnails' ),
237 esc_url( admin_url( 'options-media.php' ) )
238 ),
239 'intro2' => sprintf(
240 /* translators: %s: Media library URL */
241 __( 'To process a specific image, visit your media library and click the &quot;Regenerate Thumbnails&quot; link or button. To process multiple specific images, make sure you\'re in the <a href="%s">list view</a> and then use the Bulk Actions dropdown after selecting one or more images.', 'regenerate-thumbnails' ),
242 esc_url( admin_url( 'upload.php?mode=list' ) )
243 ),
244 'updatePostContents' => __( 'Update the content of posts to use the new sizes.', 'regenerate-thumbnails' ),
245 'RegenerateThumbnailsForAllAttachments' => __( 'Regenerate Thumbnails For All Attachments', 'regenerate-thumbnails' ),
246 'RegenerateThumbnailsForAllXAttachments' => __( 'Regenerate Thumbnails For All {attachmentCount} Attachments', 'regenerate-thumbnails' ),
247 'RegenerateThumbnailsForFeaturedImagesOnly' => __( 'Regenerate Thumbnails For Featured Images Only', 'regenerate-thumbnails' ),
248 'RegenerateThumbnailsForXFeaturedImagesOnly' => __( 'Regenerate Thumbnails For The {attachmentCount} Featured Images Only', 'regenerate-thumbnails' ),
249 'thumbnailSizes' => __( 'Thumbnail Sizes', 'regenerate-thumbnails' ),
250 'thumbnailSizesDescription' => __( 'These are all of the thumbnail sizes that are currently registered:', 'regenerate-thumbnails' ),
251 'alternatives' => __( 'Alternatives', 'regenerate-thumbnails' ),
252 'alternativesText1' => __( 'If you have <a href="{url-cli}">command-line</a> access to your site\'s server, consider using <a href="{url-wpcli}">WP-CLI</a> instead of this tool. It has a built-in <a href="{url-wpcli-regenerate}">regenerate command</a> that works similarly to this tool but should be significantly faster since it has the advantage of being a command-line tool.', 'regenerate-thumbnails' ),
253 'alternativesText2' => __( 'Another alternative is to use the <a href="{url-photon}">Photon</a> functionality that comes with the <a href="{url-jetpack}">Jetpack</a> plugin. It generates thumbnails on-demand using WordPress.com\'s infrastructure. <em>Disclaimer: The author of this plugin, Regenerate Thumbnails, is an employee of the company behind WordPress.com and Jetpack but I would recommend it even if I wasn\'t.</em>', 'regenerate-thumbnails' ),
254 ),
255 'RegenerateSingle' => array(
256 'regenerateThumbnails' => _x( 'Regenerate Thumbnails', 'action for a single image', 'regenerate-thumbnails' ),
257 /* translators: single image sdmin page title */
258 'title' => __( 'Regenerate Thumbnails: {name} — WordPress', 'regenerate-thumbnails' ),
259 'errorWithMessage' => __( '<strong>ERROR:</strong> {error}', 'regenerate-thumbnails' ),
260 'filenameAndDimensions' => __( '<code>{filename}</code> {width}×{height} pixels', 'regenerate-thumbnails' ),
261 'preview' => __( 'Preview', 'regenerate-thumbnails' ),
262 'updatePostContents' => __( 'Update the content of posts that use this attachment to use the new sizes.', 'regenerate-thumbnails' ),
263 'regenerating' => __( 'Regenerating…', 'regenerate-thumbnails' ),
264 'done' => __( 'Done! Click here to go back.', 'regenerate-thumbnails' ),
265 'errorRegenerating' => __( 'Error Regenerating', 'regenerate-thumbnails' ),
266 'errorRegeneratingMessage' => __( 'There was an error regenerating this attachment. The error was: <em>{message}</em>', 'regenerate-thumbnails' ),
267 'registeredSizes' => __( 'These are the currently registered thumbnail sizes, whether they exist for this attachment, and their filenames:', 'regenerate-thumbnails' ),
268 'unregisteredSizes' => __( 'The attachment says it also has these thumbnail sizes but they are no longer in use by WordPress. You can probably safely have this plugin delete them, especially if you have this plugin update any posts that make use of this attachment.', 'regenerate-thumbnails' ),
269 ),
270 'RegenerateMultiple' => array(
271 'errorsEncountered' => __( 'Errors Encountered', 'regenerate-thumbnails' ),
272 'regenerationLog' => __( 'Regeneration Log', 'regenerate-thumbnails' ),
273 'pause' => __( 'Pause', 'regenerate-thumbnails' ),
274 'resume' => __( 'Resume', 'regenerate-thumbnails' ),
275 'logRegeneratedItem' => __( 'Regenerated {name}', 'regenerate-thumbnails' ),
276 'logSkippedItem' => __( 'Skipped Attachment ID {id} ({name}): {reason}', 'regenerate-thumbnails' ),
277 'logSkippedItemNoName' => __( 'Skipped Attachment ID {id}: {reason}', 'regenerate-thumbnails' ),
278 'duration' => __( 'All done in {duration}.', 'regenerate-thumbnails' ),
279 'hours' => __( '{count} hours', 'regenerate-thumbnails' ),
280 'minutes' => __( '{count} minutes', 'regenerate-thumbnails' ),
281 'seconds' => __( '{count} seconds', 'regenerate-thumbnails' ),
282 'error' => __( "Unable to fetch a list of attachment IDs to process from the WordPress REST API. You can check your browser's console for details.", 'regenerate-thumbnails' ),
283 ),
284 ),
285 );
286 // phpcs:enable
287
288 // Bulk regeneration
289 // phpcs:disable WordPress.Security.NonceVerification
290 if ( ! empty( $_GET['ids'] ) ) {
291 $script_data['data']['thumbnailIDs'] = array_map( 'intval', explode( ',', $_GET['ids'] ) );
292
293 $script_data['l10n']['Home']['RegenerateThumbnailsForXAttachments'] = sprintf(
294 __( 'Regenerate Thumbnails For The %d Selected Attachments', 'regenerate-thumbnails' ),
295 count( $script_data['data']['thumbnailIDs'] )
296 );
297 }
298 // phpcs:enable
299
300 wp_localize_script( 'regenerate-thumbnails', 'regenerateThumbnails', $script_data );
301
302 wp_enqueue_style(
303 'regenerate-thumbnails-progressbar',
304 plugins_url( 'css/progressbar.css', __FILE__ ),
305 array(),
306 ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? filemtime( dirname( __FILE__ ) . '/css/progressbar.css' ) : $this->version
307 );
308 }
309
310 /**
311 * The main Regenerate Thumbnails interface, as displayed at Tools → Regenerate Thumbnails.
312 */
313 public function regenerate_interface() {
314 global $wp_version;
315
316 echo '<div class="wrap">';
317 echo '<h1>' . esc_html_x( 'Regenerate Thumbnails', 'admin page title', 'regenerate-thumbnails' ) . '</h1>';
318
319 if ( version_compare( $wp_version, '4.7', '<' ) ) {
320 echo '<p>' . sprintf(
321 __( 'This plugin requires WordPress 4.7 or newer. You are on version %1$s. Please <a href="%2$s">upgrade</a>.', 'regenerate-thumbnails' ),
322 esc_html( $wp_version ),
323 esc_url( admin_url( 'update-core.php' ) )
324 ) . '</p>';
325 } else {
326
327 ?>
328
329 <div id="regenerate-thumbnails-app">
330 <div class="notice notice-error hide-if-js">
331 <p><strong><?php esc_html_e( 'This tool requires that JavaScript be enabled to work.', 'regenerate-thumbnails' ); ?></strong></p>
332 </div>
333
334 <router-view><p class="hide-if-no-js"><?php esc_html_e( 'Loading…', 'regenerate-thumbnails' ); ?></p></router-view>
335 </div>
336
337 <?php
338
339 } // version_compare()
340
341 echo '</div>';
342 }
343
344 /**
345 * If the image editor doesn't support image resizing (thumbnailing), then add an admin notice
346 * warning the user of this.
347 */
348 public function add_admin_notice_if_resizing_not_supported() {
349 if ( ! wp_image_editor_supports( array( 'methods' => array( 'resize' ) ) ) ) {
350 add_action( 'admin_notices', array( $this, 'admin_notices_resizing_not_supported' ) );
351 }
352 }
353
354 /**
355 * Outputs an admin notice stating that image resizing (thumbnailing) is not supported.
356 */
357 public function admin_notices_resizing_not_supported() {
358 ?>
359 <div class="notice notice-error">
360 <p><strong><?php esc_html_e( "This tool won't be able to do anything because your server doesn't support image editing which means that WordPress can't create thumbnail images. Please ask your host to install the Imagick or GD PHP extensions.", 'regenerate-thumbnails' ); ?></strong></p>
361 </div>
362 <?php
363 }
364
365 /**
366 * Helper function to create a URL to regenerate a single image.
367 *
368 * @param int $id The attachment ID that should be regenerated.
369 *
370 * @return string The URL to the admin page.
371 */
372 public function create_page_url( $id ) {
373 return add_query_arg( 'page', 'regenerate-thumbnails', admin_url( 'tools.php' ) ) . '#/regenerate/' . $id;
374 }
375
376 /**
377 * Determines whether an attachment can have its thumbnails regenerated.
378 *
379 * This includes checking to see if non-images, such as PDFs, are supported
380 * by the current image editor.
381 *
382 * @param WP_Post $post An attachment's post object.
383 *
384 * @return bool Whether the given attachment can have its thumbnails regenerated.
385 */
386 public function is_regeneratable( $post ) {
387 if ( 'site-icon' === get_post_meta( $post->ID, '_wp_attachment_context', true ) ) {
388 return false;
389 }
390
391 if ( wp_attachment_is_image( $post ) ) {
392 return true;
393 }
394
395 if ( function_exists( 'wp_get_original_image_path' ) ) {
396 $fullsize = wp_get_original_image_path( $post->ID );
397 } else {
398 $fullsize = get_attached_file( $post->ID );
399 }
400
401 if ( ! $fullsize || ! file_exists( $fullsize ) ) {
402 return false;
403 }
404
405 $image_editor_args = array(
406 'path' => $fullsize,
407 'methods' => array( 'resize' )
408 );
409
410 $file_info = wp_check_filetype( $image_editor_args['path'] );
411 // If $file_info['type'] is false, then we let the editor attempt to
412 // figure out the file type, rather than forcing a failure based on extension.
413 if ( isset( $file_info ) && $file_info['type'] ) {
414 $image_editor_args['mime_type'] = $file_info['type'];
415 }
416
417 return (bool) _wp_image_editor_choose( $image_editor_args );
418 }
419
420 /**
421 * Adds "Regenerate Thumbnails" below each image in the media library list view.
422 *
423 * @param array $actions An array of current actions.
424 * @param WP_Post $post The current attachment's post object.
425 *
426 * @return array The new list of actions.
427 */
428 public function add_regenerate_link_to_media_list_view( $actions, $post ) {
429 if ( ! current_user_can( $this->capability ) || ! $this->is_regeneratable( $post ) ) {
430 return $actions;
431 }
432
433 $actions['regenerate_thumbnails'] = '<a href="' . esc_url( $this->create_page_url( $post->ID ) ) . '" title="' . esc_attr( __( 'Regenerate the thumbnails for this single image', 'regenerate-thumbnails' ) ) . '">' . _x( 'Regenerate Thumbnails', 'action for a single image', 'regenerate-thumbnails' ) . '</a>';
434
435 return $actions;
436 }
437
438 /**
439 * Add a "Regenerate Thumbnails" button to the submit box on the non-modal "Edit Media" screen for an image attachment.
440 */
441 public function add_button_to_media_edit_page() {
442 global $post;
443
444 if ( ! current_user_can( $this->capability ) || ! $this->is_regeneratable( $post ) ) {
445 return;
446 }
447
448 echo '<div class="misc-pub-section misc-pub-regenerate-thumbnails">';
449 echo '<a href="' . esc_url( $this->create_page_url( $post->ID ) ) . '" class="button-secondary button-large" title="' . esc_attr( __( 'Regenerate the thumbnails for this single image', 'regenerate-thumbnails' ) ) . '">' . _x( 'Regenerate Thumbnails', 'action for a single image', 'regenerate-thumbnails' ) . '</a>';
450 echo '</div>';
451 }
452
453 /**
454 * Adds a "Regenerate Thumbnails" button to the edit media modal view.
455 *
456 * Ideally it would be down with the actions but I'm not good enough at JavaScript
457 * in order to be able to do it, so instead I'm adding it to the bottom of the list
458 * of media fields. Pull requests to improve this are welcome!
459 *
460 * @param array $form_fields An array of existing form fields.
461 * @param WP_Post $post The current media item, as a post object.
462 *
463 * @return array The new array of form fields.
464 */
465 public function add_button_to_edit_media_modal_fields_area( $form_fields, $post ) {
466 if ( ! current_user_can( $this->capability ) || ! $this->is_regeneratable( $post ) ) {
467 return $form_fields;
468 }
469
470 $form_fields['regenerate_thumbnails'] = array(
471 'label' => '',
472 'input' => 'html',
473 'html' => '<a href="' . esc_url( $this->create_page_url( $post->ID ) ) . '" class="button-secondary button-large" title="' . esc_attr( __( 'Regenerate the thumbnails for this single image', 'regenerate-thumbnails' ) ) . '">' . _x( 'Regenerate Thumbnails', 'action for a single image', 'regenerate-thumbnails' ) . '</a>',
474 'show_in_modal' => true,
475 'show_in_edit' => false,
476 );
477
478 return $form_fields;
479 }
480
481 /**
482 * Add "Regenerate Thumbnails" to the bulk actions dropdown on the media list using Javascript.
483 */
484 public function add_bulk_actions_via_javascript() {
485 if ( ! current_user_can( $this->capability ) ) {
486 return;
487 }
488
489 ?>
490 <script type="text/javascript">
491 jQuery(document).ready(function ($) {
492 $('select[name^="action"] option:last-child').before(
493 $('<option/>')
494 .attr('value', 'bulk_regenerate_thumbnails')
495 .text('<?php echo esc_js( _x( 'Regenerate Thumbnails', 'bulk actions dropdown', 'regenerate-thumbnails' ) ); ?>')
496 );
497 });
498 </script>
499 <?php
500 }
501
502 /**
503 * Handles the submission of the new bulk actions entry and redirects to the admin page with the selected attachment IDs.
504 */
505 public function bulk_action_handler() {
506 if (
507 empty( $_REQUEST['action'] ) ||
508 empty( $_REQUEST['action2'] ) ||
509 ( 'bulk_regenerate_thumbnails' != $_REQUEST['action'] && 'bulk_regenerate_thumbnails' != $_REQUEST['action2'] ) ||
510 empty( $_REQUEST['media'] ) ||
511 ! is_array( $_REQUEST['media'] )
512 ) {
513 return;
514 }
515
516 check_admin_referer( 'bulk-media' );
517
518 wp_safe_redirect(
519 add_query_arg(
520 array(
521 'page' => 'regenerate-thumbnails',
522 'ids' => rawurlencode( implode( ',', array_map( 'intval', $_REQUEST['media'] ) ) ),
523 ),
524 admin_url( 'tools.php' )
525 )
526 );
527
528 exit();
529 }
530
531 /**
532 * Returns an array of all thumbnail sizes, including their label, size, and crop setting.
533 *
534 * @return array An array, with the thumbnail label as the key and an array of thumbnail properties (width, height, crop).
535 */
536 public function get_thumbnail_sizes() {
537 global $_wp_additional_image_sizes;
538
539 $thumbnail_sizes = array();
540
541 foreach ( get_intermediate_image_sizes() as $size ) {
542 $thumbnail_sizes[ $size ]['label'] = $size;
543 if ( in_array( $size, array( 'thumbnail', 'medium', 'medium_large', 'large' ) ) ) {
544 $thumbnail_sizes[ $size ]['width'] = (int) get_option( $size . '_size_w' );
545 $thumbnail_sizes[ $size ]['height'] = (int) get_option( $size . '_size_h' );
546 $thumbnail_sizes[ $size ]['crop'] = ( 'thumbnail' == $size ) ? (bool) get_option( 'thumbnail_crop' ) : false;
547 } elseif ( ! empty( $_wp_additional_image_sizes ) && ! empty( $_wp_additional_image_sizes[ $size ] ) ) {
548 $thumbnail_sizes[ $size ]['width'] = (int) $_wp_additional_image_sizes[ $size ]['width'];
549 $thumbnail_sizes[ $size ]['height'] = (int) $_wp_additional_image_sizes[ $size ]['height'];
550 $thumbnail_sizes[ $size ]['crop'] = (bool) $_wp_additional_image_sizes[ $size ]['crop'];
551 }
552 }
553
554 return $thumbnail_sizes;
555 }
556 }
557
558 /**
559 * Returns the single instance of this plugin, creating one if needed.
560 *
561 * @return RegenerateThumbnails
562 */
563 function RegenerateThumbnails() {
564 return RegenerateThumbnails::instance();
565 }
566
567 /**
568 * Initialize this plugin once all other plugins have finished loading.
569 */
570 add_action( 'init', 'RegenerateThumbnails' );
...@@ -14996,1449 +14996,6 @@ body { ...@@ -14996,1449 +14996,6 @@ body {
14996 padding-left: 0px; 14996 padding-left: 0px;
14997 } 14997 }
14998 14998
14999 /** Wednesday 26th July 2023 02:16:49 UTC (core) **/
15000 /** THIS FILE IS AUTOMATICALLY GENERATED - DO NOT MAKE MANUAL EDITS! **/
15001 /** Custom CSS should be added to Mega Menu > Menu Themes > Custom Styling **/
15002 .mega-menu-last-modified-1690337809 {
15003 content: "Wednesday 26th July 2023 02:16:49 UTC";
15004 }
15005
15006 #mega-menu-wrap-primary, #mega-menu-wrap-primary #mega-menu-primary, #mega-menu-wrap-primary #mega-menu-primary ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-row, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-column, #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary span.mega-menu-badge {
15007 transition: none;
15008 border-radius: 0;
15009 box-shadow: none;
15010 background: none;
15011 border: 0;
15012 bottom: auto;
15013 box-sizing: border-box;
15014 clip: auto;
15015 color: #666;
15016 display: block;
15017 float: none;
15018 font-family: inherit;
15019 font-size: 0.875rem;
15020 height: auto;
15021 left: auto;
15022 line-height: 1.7;
15023 list-style-type: none;
15024 margin: 0;
15025 min-height: auto;
15026 max-height: none;
15027 min-width: auto;
15028 max-width: none;
15029 opacity: 1;
15030 outline: none;
15031 overflow: visible;
15032 padding: 0;
15033 position: relative;
15034 pointer-events: auto;
15035 right: auto;
15036 text-align: left;
15037 text-decoration: none;
15038 text-indent: 0;
15039 text-transform: none;
15040 transform: none;
15041 top: auto;
15042 vertical-align: baseline;
15043 visibility: inherit;
15044 width: auto;
15045 word-wrap: break-word;
15046 white-space: normal;
15047 }
15048
15049 #mega-menu-wrap-primary:before, #mega-menu-wrap-primary #mega-menu-primary:before, #mega-menu-wrap-primary #mega-menu-primary ul.mega-sub-menu:before, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item:before, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-row:before, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-column:before, #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link:before, #mega-menu-wrap-primary #mega-menu-primary span.mega-menu-badge:before, #mega-menu-wrap-primary:after, #mega-menu-wrap-primary #mega-menu-primary:after, #mega-menu-wrap-primary #mega-menu-primary ul.mega-sub-menu:after, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item:after, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-row:after, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-column:after, #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link:after, #mega-menu-wrap-primary #mega-menu-primary span.mega-menu-badge:after {
15050 display: none;
15051 }
15052
15053 #mega-menu-wrap-primary {
15054 border-radius: 0;
15055 }
15056
15057 @media only screen and (min-width: 62.5625rem) {
15058 #mega-menu-wrap-primary {
15059 background: rgba(0, 0, 0, 0);
15060 }
15061 }
15062 #mega-menu-wrap-primary.mega-keyboard-navigation .mega-menu-toggle:focus, #mega-menu-wrap-primary.mega-keyboard-navigation .mega-toggle-block:focus, #mega-menu-wrap-primary.mega-keyboard-navigation .mega-toggle-block a:focus, #mega-menu-wrap-primary.mega-keyboard-navigation .mega-toggle-block .mega-search input[type=text]:focus, #mega-menu-wrap-primary.mega-keyboard-navigation .mega-toggle-block button.mega-toggle-animated:focus, #mega-menu-wrap-primary.mega-keyboard-navigation #mega-menu-primary a:focus, #mega-menu-wrap-primary.mega-keyboard-navigation #mega-menu-primary span:focus, #mega-menu-wrap-primary.mega-keyboard-navigation #mega-menu-primary input:focus, #mega-menu-wrap-primary.mega-keyboard-navigation #mega-menu-primary li.mega-menu-item a.mega-menu-link:focus {
15063 outline: 0.1875rem solid #109cde;
15064 outline-offset: -0.1875rem;
15065 }
15066
15067 #mega-menu-wrap-primary.mega-keyboard-navigation .mega-toggle-block button.mega-toggle-animated:focus {
15068 outline-offset: 0.125rem;
15069 }
15070
15071 #mega-menu-wrap-primary.mega-keyboard-navigation > li.mega-menu-item > a.mega-menu-link:focus {
15072 background: #e00;
15073 color: #fff;
15074 font-weight: normal;
15075 text-decoration: none;
15076 border-color: #fff;
15077 }
15078
15079 @media only screen and (max-width: 62.5rem) {
15080 #mega-menu-wrap-primary.mega-keyboard-navigation > li.mega-menu-item > a.mega-menu-link:focus {
15081 color: #fff;
15082 background: #333;
15083 }
15084 }
15085 #mega-menu-wrap-primary #mega-menu-primary {
15086 visibility: visible;
15087 text-align: center;
15088 padding: 1.25rem 0rem 0rem 0rem;
15089 }
15090
15091 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link {
15092 cursor: pointer;
15093 display: inline;
15094 }
15095
15096 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group {
15097 vertical-align: middle;
15098 display: inline-block;
15099 transition: none;
15100 }
15101
15102 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-title, #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-description {
15103 transition: none;
15104 line-height: 1.5;
15105 display: block;
15106 }
15107
15108 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-description {
15109 font-style: italic;
15110 font-size: 0.8em;
15111 text-transform: none;
15112 font-weight: normal;
15113 }
15114
15115 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu li.mega-menu-item.mega-icon-left.mega-has-description.mega-has-icon > a.mega-menu-link {
15116 display: flex;
15117 align-items: center;
15118 }
15119
15120 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu li.mega-menu-item.mega-icon-left.mega-has-description.mega-has-icon > a.mega-menu-link:before {
15121 flex: 0 0 auto;
15122 align-self: flex-start;
15123 }
15124
15125 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-tabbed.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item.mega-icon-left.mega-has-description.mega-has-icon > a.mega-menu-link {
15126 display: block;
15127 }
15128
15129 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-icon-top > a.mega-menu-link {
15130 display: table-cell;
15131 vertical-align: middle;
15132 line-height: initial;
15133 }
15134
15135 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-icon-top > a.mega-menu-link:before {
15136 display: block;
15137 margin: 0 0 0.375rem 0;
15138 text-align: center;
15139 }
15140
15141 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-icon-top > a.mega-menu-link > span.mega-title-below {
15142 display: inline-block;
15143 transition: none;
15144 }
15145
15146 @media only screen and (max-width: 62.5rem) {
15147 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-icon-top > a.mega-menu-link {
15148 display: block;
15149 line-height: 2.5rem;
15150 }
15151 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-icon-top > a.mega-menu-link:before {
15152 display: inline-block;
15153 margin: 0 0.375rem 0 0;
15154 text-align: left;
15155 }
15156 }
15157 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-icon-right > a.mega-menu-link:before {
15158 float: right;
15159 margin: 0 0 0 0.375rem;
15160 }
15161
15162 #mega-menu-wrap-primary #mega-menu-primary > li.mega-animating > ul.mega-sub-menu {
15163 pointer-events: none;
15164 }
15165
15166 #mega-menu-wrap-primary #mega-menu-primary li.mega-disable-link > a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu li.mega-disable-link > a.mega-menu-link {
15167 cursor: inherit;
15168 }
15169
15170 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item-has-children.mega-disable-link > a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > li.mega-menu-item-has-children.mega-disable-link > a.mega-menu-link {
15171 cursor: pointer;
15172 }
15173
15174 #mega-menu-wrap-primary #mega-menu-primary p {
15175 margin-bottom: 0.625rem;
15176 }
15177
15178 #mega-menu-wrap-primary #mega-menu-primary input, #mega-menu-wrap-primary #mega-menu-primary img {
15179 max-width: 100%;
15180 }
15181
15182 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item > ul.mega-sub-menu {
15183 display: block;
15184 visibility: hidden;
15185 opacity: 1;
15186 pointer-events: auto;
15187 }
15188
15189 @media only screen and (max-width: 62.5rem) {
15190 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item > ul.mega-sub-menu {
15191 display: none;
15192 visibility: visible;
15193 opacity: 1;
15194 }
15195 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu.mega-menu-item.mega-toggle-on ul.mega-sub-menu {
15196 display: block;
15197 }
15198 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu.mega-menu-item.mega-toggle-on li.mega-hide-sub-menu-on-mobile > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary li.mega-hide-sub-menu-on-mobile > ul.mega-sub-menu {
15199 display: none;
15200 }
15201 }
15202 @media only screen and (min-width: 62.5625rem) {
15203 #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade] li.mega-menu-item > ul.mega-sub-menu {
15204 opacity: 0;
15205 transition: opacity 200ms ease-in, visibility 200ms ease-in;
15206 }
15207 #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade].mega-no-js li.mega-menu-item:hover > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade].mega-no-js li.mega-menu-item:focus > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade] li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade] li.mega-menu-item.mega-menu-megamenu.mega-toggle-on ul.mega-sub-menu {
15208 opacity: 1;
15209 }
15210 #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade_up] li.mega-menu-item.mega-menu-megamenu > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade_up] li.mega-menu-item.mega-menu-flyout ul.mega-sub-menu {
15211 opacity: 0;
15212 transform: translate(0, 0.625rem);
15213 transition: opacity 200ms ease-in, transform 200ms ease-in, visibility 200ms ease-in;
15214 }
15215 #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade_up].mega-no-js li.mega-menu-item:hover > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade_up].mega-no-js li.mega-menu-item:focus > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade_up] li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=fade_up] li.mega-menu-item.mega-menu-megamenu.mega-toggle-on ul.mega-sub-menu {
15216 opacity: 1;
15217 transform: translate(0, 0);
15218 }
15219 #mega-menu-wrap-primary #mega-menu-primary[data-effect=slide_up] li.mega-menu-item.mega-menu-megamenu > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=slide_up] li.mega-menu-item.mega-menu-flyout ul.mega-sub-menu {
15220 transform: translate(0, 0.625rem);
15221 transition: transform 200ms ease-in, visibility 200ms ease-in;
15222 }
15223 #mega-menu-wrap-primary #mega-menu-primary[data-effect=slide_up].mega-no-js li.mega-menu-item:hover > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=slide_up].mega-no-js li.mega-menu-item:focus > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=slide_up] li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary[data-effect=slide_up] li.mega-menu-item.mega-menu-megamenu.mega-toggle-on ul.mega-sub-menu {
15224 transform: translate(0, 0);
15225 }
15226 }
15227 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-collapse-children > ul.mega-sub-menu {
15228 display: none;
15229 }
15230
15231 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-collapse-children.mega-toggle-on > ul.mega-sub-menu {
15232 display: block;
15233 }
15234
15235 #mega-menu-wrap-primary #mega-menu-primary.mega-no-js li.mega-menu-item:hover > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary.mega-no-js li.mega-menu-item:focus > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu {
15236 visibility: visible;
15237 }
15238
15239 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu ul.mega-sub-menu {
15240 visibility: inherit;
15241 opacity: 1;
15242 display: block;
15243 }
15244
15245 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-1-columns > ul.mega-sub-menu > li.mega-menu-item {
15246 float: left;
15247 width: 100%;
15248 }
15249
15250 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-2-columns > ul.mega-sub-menu > li.mega-menu-item {
15251 float: left;
15252 width: 50%;
15253 }
15254
15255 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-3-columns > ul.mega-sub-menu > li.mega-menu-item {
15256 float: left;
15257 width: 33.33333%;
15258 }
15259
15260 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-4-columns > ul.mega-sub-menu > li.mega-menu-item {
15261 float: left;
15262 width: 25%;
15263 }
15264
15265 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-5-columns > ul.mega-sub-menu > li.mega-menu-item {
15266 float: left;
15267 width: 20%;
15268 }
15269
15270 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-6-columns > ul.mega-sub-menu > li.mega-menu-item {
15271 float: left;
15272 width: 16.66667%;
15273 }
15274
15275 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item a[class^=dashicons]:before {
15276 font-family: dashicons;
15277 }
15278
15279 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item a.mega-menu-link:before {
15280 display: inline-block;
15281 font: inherit;
15282 font-family: dashicons;
15283 position: static;
15284 margin: 0 0.375rem 0 0rem;
15285 vertical-align: top;
15286 -webkit-font-smoothing: antialiased;
15287 -moz-osx-font-smoothing: grayscale;
15288 color: inherit;
15289 background: transparent;
15290 height: auto;
15291 width: auto;
15292 top: auto;
15293 }
15294
15295 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-hide-text a.mega-menu-link:before {
15296 margin: 0;
15297 }
15298
15299 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-hide-text li.mega-menu-item a.mega-menu-link:before {
15300 margin: 0 0.375rem 0 0;
15301 }
15302
15303 #mega-menu-wrap-primary #mega-menu-primary li.mega-align-bottom-left.mega-toggle-on > a.mega-menu-link {
15304 border-radius: 1.5625rem 1.5625rem 0rem 0rem;
15305 }
15306
15307 #mega-menu-wrap-primary #mega-menu-primary li.mega-align-bottom-right > ul.mega-sub-menu {
15308 right: 0;
15309 }
15310
15311 #mega-menu-wrap-primary #mega-menu-primary li.mega-align-bottom-right.mega-toggle-on > a.mega-menu-link {
15312 border-radius: 1.5625rem 1.5625rem 0rem 0rem;
15313 }
15314
15315 @media only screen and (min-width: 62.5625rem) {
15316 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu.mega-menu-item {
15317 position: static;
15318 }
15319 }
15320 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item {
15321 margin: 0 0rem 0 0;
15322 display: inline-block;
15323 height: auto;
15324 vertical-align: middle;
15325 }
15326
15327 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-item-align-right {
15328 float: right;
15329 }
15330
15331 @media only screen and (min-width: 62.5625rem) {
15332 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-item-align-right {
15333 margin: 0 0 0 0rem;
15334 }
15335 }
15336 @media only screen and (min-width: 62.5625rem) {
15337 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-item-align-float-left {
15338 float: left;
15339 }
15340 }
15341 @media only screen and (min-width: 62.5625rem) {
15342 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item > a.mega-menu-link:focus {
15343 background: #e00;
15344 color: #fff;
15345 font-weight: normal;
15346 text-decoration: none;
15347 border-color: #fff;
15348 }
15349 }
15350 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-toggle-on > a.mega-menu-link {
15351 background: #e00;
15352 color: #fff;
15353 font-weight: normal;
15354 text-decoration: none;
15355 border-color: #fff;
15356 }
15357
15358 @media only screen and (max-width: 62.5rem) {
15359 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-toggle-on > a.mega-menu-link {
15360 color: #fff;
15361 background: #333;
15362 }
15363 }
15364 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-current-menu-item > a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-current-menu-ancestor > a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-current-page-ancestor > a.mega-menu-link {
15365 background: #e00;
15366 color: #fff;
15367 font-weight: normal;
15368 text-decoration: none;
15369 border-color: #fff;
15370 }
15371
15372 @media only screen and (max-width: 62.5rem) {
15373 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-current-menu-item > a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-current-menu-ancestor > a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-current-page-ancestor > a.mega-menu-link {
15374 color: #fff;
15375 background: #333;
15376 }
15377 }
15378 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item > a.mega-menu-link {
15379 line-height: 2.5rem;
15380 height: 2.5rem;
15381 padding: 0rem 0.625rem 0rem 0.625rem;
15382 vertical-align: baseline;
15383 width: auto;
15384 display: block;
15385 color: #fff;
15386 text-transform: none;
15387 text-decoration: none;
15388 text-align: left;
15389 background: #e00;
15390 border: 0;
15391 border-radius: 1.5625rem 1.5625rem 1.5625rem 1.5625rem;
15392 font-family: inherit;
15393 font-size: 0.875rem;
15394 font-weight: normal;
15395 outline: none;
15396 }
15397
15398 @media only screen and (min-width: 62.5625rem) {
15399 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-multi-line > a.mega-menu-link {
15400 line-height: inherit;
15401 display: table-cell;
15402 vertical-align: middle;
15403 }
15404 }
15405 @media only screen and (max-width: 62.5rem) {
15406 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-multi-line > a.mega-menu-link br {
15407 display: none;
15408 }
15409 }
15410 @media only screen and (max-width: 62.5rem) {
15411 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item {
15412 display: list-item;
15413 margin: 0;
15414 clear: both;
15415 border: 0;
15416 }
15417 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item.mega-item-align-right {
15418 float: none;
15419 }
15420 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-item > a.mega-menu-link {
15421 border-radius: 0;
15422 border: 0;
15423 margin: 0;
15424 line-height: 2.5rem;
15425 height: 2.5rem;
15426 padding: 0 0.625rem;
15427 background: transparent;
15428 text-align: left;
15429 color: #fff;
15430 font-size: 0.875rem;
15431 }
15432 }
15433 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row {
15434 width: 100%;
15435 float: left;
15436 }
15437
15438 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row .mega-menu-column {
15439 float: left;
15440 min-height: 0.0625rem;
15441 }
15442
15443 @media only screen and (min-width: 62.5625rem) {
15444 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-1 {
15445 width: 100%;
15446 }
15447 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-2 {
15448 width: 50%;
15449 }
15450 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-2 {
15451 width: 100%;
15452 }
15453 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-3 {
15454 width: 33.33333%;
15455 }
15456 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-3 {
15457 width: 66.66667%;
15458 }
15459 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-3 {
15460 width: 100%;
15461 }
15462 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-4 {
15463 width: 25%;
15464 }
15465 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-4 {
15466 width: 50%;
15467 }
15468 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-4 {
15469 width: 75%;
15470 }
15471 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-4 {
15472 width: 100%;
15473 }
15474 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-5 {
15475 width: 20%;
15476 }
15477 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-5 {
15478 width: 40%;
15479 }
15480 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-5 {
15481 width: 60%;
15482 }
15483 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-5 {
15484 width: 80%;
15485 }
15486 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-5 {
15487 width: 100%;
15488 }
15489 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-6 {
15490 width: 16.66667%;
15491 }
15492 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-6 {
15493 width: 33.33333%;
15494 }
15495 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-6 {
15496 width: 50%;
15497 }
15498 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-6 {
15499 width: 66.66667%;
15500 }
15501 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-6 {
15502 width: 83.33333%;
15503 }
15504 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-6 {
15505 width: 100%;
15506 }
15507 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-7 {
15508 width: 14.28571%;
15509 }
15510 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-7 {
15511 width: 28.57143%;
15512 }
15513 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-7 {
15514 width: 42.85714%;
15515 }
15516 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-7 {
15517 width: 57.14286%;
15518 }
15519 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-7 {
15520 width: 71.42857%;
15521 }
15522 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-7 {
15523 width: 85.71429%;
15524 }
15525 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-7 {
15526 width: 100%;
15527 }
15528 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-8 {
15529 width: 12.5%;
15530 }
15531 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-8 {
15532 width: 25%;
15533 }
15534 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-8 {
15535 width: 37.5%;
15536 }
15537 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-8 {
15538 width: 50%;
15539 }
15540 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-8 {
15541 width: 62.5%;
15542 }
15543 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-8 {
15544 width: 75%;
15545 }
15546 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-8 {
15547 width: 87.5%;
15548 }
15549 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-8-of-8 {
15550 width: 100%;
15551 }
15552 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-9 {
15553 width: 11.11111%;
15554 }
15555 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-9 {
15556 width: 22.22222%;
15557 }
15558 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-9 {
15559 width: 33.33333%;
15560 }
15561 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-9 {
15562 width: 44.44444%;
15563 }
15564 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-9 {
15565 width: 55.55556%;
15566 }
15567 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-9 {
15568 width: 66.66667%;
15569 }
15570 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-9 {
15571 width: 77.77778%;
15572 }
15573 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-8-of-9 {
15574 width: 88.88889%;
15575 }
15576 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-9-of-9 {
15577 width: 100%;
15578 }
15579 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-10 {
15580 width: 10%;
15581 }
15582 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-10 {
15583 width: 20%;
15584 }
15585 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-10 {
15586 width: 30%;
15587 }
15588 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-10 {
15589 width: 40%;
15590 }
15591 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-10 {
15592 width: 50%;
15593 }
15594 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-10 {
15595 width: 60%;
15596 }
15597 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-10 {
15598 width: 70%;
15599 }
15600 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-8-of-10 {
15601 width: 80%;
15602 }
15603 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-9-of-10 {
15604 width: 90%;
15605 }
15606 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-10-of-10 {
15607 width: 100%;
15608 }
15609 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-11 {
15610 width: 9.09091%;
15611 }
15612 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-11 {
15613 width: 18.18182%;
15614 }
15615 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-11 {
15616 width: 27.27273%;
15617 }
15618 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-11 {
15619 width: 36.36364%;
15620 }
15621 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-11 {
15622 width: 45.45455%;
15623 }
15624 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-11 {
15625 width: 54.54545%;
15626 }
15627 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-11 {
15628 width: 63.63636%;
15629 }
15630 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-8-of-11 {
15631 width: 72.72727%;
15632 }
15633 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-9-of-11 {
15634 width: 81.81818%;
15635 }
15636 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-10-of-11 {
15637 width: 90.90909%;
15638 }
15639 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-11-of-11 {
15640 width: 100%;
15641 }
15642 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-12 {
15643 width: 8.33333%;
15644 }
15645 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-12 {
15646 width: 16.66667%;
15647 }
15648 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-12 {
15649 width: 25%;
15650 }
15651 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-12 {
15652 width: 33.33333%;
15653 }
15654 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-12 {
15655 width: 41.66667%;
15656 }
15657 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-12 {
15658 width: 50%;
15659 }
15660 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-12 {
15661 width: 58.33333%;
15662 }
15663 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-8-of-12 {
15664 width: 66.66667%;
15665 }
15666 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-9-of-12 {
15667 width: 75%;
15668 }
15669 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-10-of-12 {
15670 width: 83.33333%;
15671 }
15672 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-11-of-12 {
15673 width: 91.66667%;
15674 }
15675 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-12-of-12 {
15676 width: 100%;
15677 }
15678 }
15679 @media only screen and (max-width: 62.5rem) {
15680 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-column {
15681 width: 100%;
15682 clear: both;
15683 }
15684 }
15685 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row .mega-menu-column > ul.mega-sub-menu > li.mega-menu-item {
15686 padding: 0.9375rem 0.9375rem 0.9375rem 0.9375rem;
15687 width: 100%;
15688 }
15689
15690 @media only screen and (max-width: 62.5rem) {
15691 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row .mega-menu-column > ul.mega-sub-menu > li.mega-menu-item {
15692 padding: 0px 0px 14px 28px;
15693 margin-top: 0px !important;
15694 }
15695 }
15696 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu {
15697 z-index: 999;
15698 border-radius: 0;
15699 background: #f1f1f1;
15700 border: 0;
15701 padding: 0rem 0rem 0rem 0rem;
15702 position: absolute;
15703 width: 100%;
15704 max-width: none;
15705 left: 0;
15706 }
15707
15708 @media only screen and (max-width: 62.5rem) {
15709 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu {
15710 float: left;
15711 position: static;
15712 width: 100%;
15713 }
15714 }
15715 @media only screen and (min-width: 62.5625rem) {
15716 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-1 {
15717 width: 100%;
15718 }
15719 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-2 {
15720 width: 50%;
15721 }
15722 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-2 {
15723 width: 100%;
15724 }
15725 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-3 {
15726 width: 33.33333%;
15727 }
15728 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-3 {
15729 width: 66.66667%;
15730 }
15731 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-3 {
15732 width: 100%;
15733 }
15734 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-4 {
15735 width: 25%;
15736 }
15737 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-4 {
15738 width: 50%;
15739 }
15740 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-4 {
15741 width: 75%;
15742 }
15743 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-4 {
15744 width: 100%;
15745 }
15746 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-5 {
15747 width: 20%;
15748 }
15749 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-5 {
15750 width: 40%;
15751 }
15752 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-5 {
15753 width: 60%;
15754 }
15755 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-5 {
15756 width: 80%;
15757 }
15758 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-5 {
15759 width: 100%;
15760 }
15761 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-6 {
15762 width: 16.66667%;
15763 }
15764 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-6 {
15765 width: 33.33333%;
15766 }
15767 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-6 {
15768 width: 50%;
15769 }
15770 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-6 {
15771 width: 66.66667%;
15772 }
15773 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-6 {
15774 width: 83.33333%;
15775 }
15776 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-6 {
15777 width: 100%;
15778 }
15779 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-7 {
15780 width: 14.28571%;
15781 }
15782 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-7 {
15783 width: 28.57143%;
15784 }
15785 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-7 {
15786 width: 42.85714%;
15787 }
15788 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-7 {
15789 width: 57.14286%;
15790 }
15791 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-7 {
15792 width: 71.42857%;
15793 }
15794 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-7 {
15795 width: 85.71429%;
15796 }
15797 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-7 {
15798 width: 100%;
15799 }
15800 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-8 {
15801 width: 12.5%;
15802 }
15803 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-8 {
15804 width: 25%;
15805 }
15806 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-8 {
15807 width: 37.5%;
15808 }
15809 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-8 {
15810 width: 50%;
15811 }
15812 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-8 {
15813 width: 62.5%;
15814 }
15815 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-8 {
15816 width: 75%;
15817 }
15818 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-8 {
15819 width: 87.5%;
15820 }
15821 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-8-of-8 {
15822 width: 100%;
15823 }
15824 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-9 {
15825 width: 11.11111%;
15826 }
15827 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-9 {
15828 width: 22.22222%;
15829 }
15830 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-9 {
15831 width: 33.33333%;
15832 }
15833 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-9 {
15834 width: 44.44444%;
15835 }
15836 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-9 {
15837 width: 55.55556%;
15838 }
15839 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-9 {
15840 width: 66.66667%;
15841 }
15842 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-9 {
15843 width: 77.77778%;
15844 }
15845 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-8-of-9 {
15846 width: 88.88889%;
15847 }
15848 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-9-of-9 {
15849 width: 100%;
15850 }
15851 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-10 {
15852 width: 10%;
15853 }
15854 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-10 {
15855 width: 20%;
15856 }
15857 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-10 {
15858 width: 30%;
15859 }
15860 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-10 {
15861 width: 40%;
15862 }
15863 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-10 {
15864 width: 50%;
15865 }
15866 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-10 {
15867 width: 60%;
15868 }
15869 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-10 {
15870 width: 70%;
15871 }
15872 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-8-of-10 {
15873 width: 80%;
15874 }
15875 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-9-of-10 {
15876 width: 90%;
15877 }
15878 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-10-of-10 {
15879 width: 100%;
15880 }
15881 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-11 {
15882 width: 9.09091%;
15883 }
15884 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-11 {
15885 width: 18.18182%;
15886 }
15887 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-11 {
15888 width: 27.27273%;
15889 }
15890 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-11 {
15891 width: 36.36364%;
15892 }
15893 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-11 {
15894 width: 45.45455%;
15895 }
15896 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-11 {
15897 width: 54.54545%;
15898 }
15899 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-11 {
15900 width: 63.63636%;
15901 }
15902 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-8-of-11 {
15903 width: 72.72727%;
15904 }
15905 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-9-of-11 {
15906 width: 81.81818%;
15907 }
15908 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-10-of-11 {
15909 width: 90.90909%;
15910 }
15911 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-11-of-11 {
15912 width: 100%;
15913 }
15914 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-12 {
15915 width: 8.33333%;
15916 }
15917 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-12 {
15918 width: 16.66667%;
15919 }
15920 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-12 {
15921 width: 25%;
15922 }
15923 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-12 {
15924 width: 33.33333%;
15925 }
15926 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-12 {
15927 width: 41.66667%;
15928 }
15929 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-12 {
15930 width: 50%;
15931 }
15932 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-12 {
15933 width: 58.33333%;
15934 }
15935 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-8-of-12 {
15936 width: 66.66667%;
15937 }
15938 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-9-of-12 {
15939 width: 75%;
15940 }
15941 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-10-of-12 {
15942 width: 83.33333%;
15943 }
15944 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-11-of-12 {
15945 width: 91.66667%;
15946 }
15947 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-12-of-12 {
15948 width: 100%;
15949 }
15950 }
15951 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu .mega-description-group .mega-menu-description {
15952 margin: 0.3125rem 0;
15953 }
15954
15955 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item ul.mega-sub-menu {
15956 clear: both;
15957 }
15958
15959 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu {
15960 margin-left: 0.625rem;
15961 }
15962
15963 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu ul.mega-sub-menu ul.mega-sub-menu {
15964 margin-left: 0.625rem;
15965 }
15966
15967 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item {
15968 color: #666;
15969 font-family: inherit;
15970 font-size: 0.875rem;
15971 display: block;
15972 float: left;
15973 clear: none;
15974 padding: 0.9375rem 0.9375rem 0.9375rem 0.9375rem;
15975 vertical-align: top;
15976 }
15977
15978 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item.mega-menu-clear, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item.mega-menu-clear {
15979 clear: left;
15980 }
15981
15982 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item h4.mega-block-title, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item .mega-block-title.h4, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item:not(.break-here) h4.mega-block-title, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item:not(.break-here) .mega-block-title.h4 {
15983 color: #555;
15984 font-family: inherit;
15985 font-size: 1rem;
15986 text-transform: none !important;
15987 text-decoration: none;
15988 font-weight: bold;
15989 text-align: left;
15990 margin: 0rem 0rem 0rem 0rem;
15991 padding: 0rem 0rem 0.3125rem 0rem;
15992 vertical-align: top;
15993 display: block;
15994 visibility: inherit;
15995 border: 0;
15996 }
15997
15998 .break-here a {
15999 text-transform: uppercase !important;
16000 }
16001
16002 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item h4.mega-block-title:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item .mega-block-title.h4:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item h4.mega-block-title:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item .mega-block-title.h4:hover {
16003 border-color: rgba(0, 0, 0, 0);
16004 }
16005
16006 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link {
16007 /* Mega Menu > Menu Themes > Mega Menus > Second Level Menu Items */
16008 color: #555;
16009 font-family: inherit;
16010 font-size: 1rem;
16011 text-decoration: none;
16012 font-weight: bold;
16013 text-align: left;
16014 margin: 0rem 0rem 0rem 0rem;
16015 padding: 0rem 0rem 0rem 0rem;
16016 vertical-align: top;
16017 display: block;
16018 border: 0;
16019 }
16020
16021 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover {
16022 border-color: rgba(0, 0, 0, 0);
16023 }
16024
16025 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus {
16026 /* Mega Menu > Menu Themes > Mega Menus > Second Level Menu Items (Hover) */
16027 color: #555;
16028 font-weight: bold;
16029 text-decoration: none;
16030 background: rgba(0, 0, 0, 0);
16031 }
16032
16033 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover > span.mega-title-below, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover > span.mega-title-below, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus > span.mega-title-below, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus > span.mega-title-below {
16034 text-decoration: none;
16035 }
16036
16037 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link {
16038 /* Mega Menu > Menu Themes > Mega Menus > Third Level Menu Items */
16039 color: #666;
16040 font-family: inherit;
16041 font-size: 0.875rem;
16042 text-transform: none;
16043 text-decoration: none;
16044 font-weight: normal;
16045 text-align: left;
16046 margin: 0rem 0rem 0rem 0rem;
16047 padding: 0rem 0rem 0rem 0rem;
16048 vertical-align: top;
16049 display: block;
16050 border: 0;
16051 }
16052
16053 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:hover {
16054 border-color: rgba(0, 0, 0, 0);
16055 }
16056
16057 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item.mega-icon-left.mega-has-description.mega-has-icon > a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item.mega-icon-left.mega-has-description.mega-has-icon > a.mega-menu-link {
16058 display: flex;
16059 }
16060
16061 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:focus, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:focus {
16062 /* Mega Menu > Menu Themes > Mega Menus > Third Level Menu Items (Hover) */
16063 color: #666;
16064 font-weight: normal;
16065 text-decoration: none;
16066 background: rgba(0, 0, 0, 0);
16067 }
16068
16069 @media only screen and (max-width: 62.5rem) {
16070 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu {
16071 border: 0;
16072 padding: 0.625rem;
16073 border-radius: 0;
16074 }
16075 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item {
16076 width: 100%;
16077 clear: both;
16078 }
16079 }
16080 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link {
16081 color: #666;
16082 font-family: inherit;
16083 font-size: 0.875rem;
16084 text-transform: none;
16085 text-decoration: none;
16086 font-weight: normal;
16087 margin: 0;
16088 border: 0;
16089 padding: 0rem 0rem 0rem 0rem;
16090 vertical-align: top;
16091 display: block;
16092 }
16093
16094 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus {
16095 color: #666;
16096 font-weight: normal;
16097 text-decoration: none;
16098 background: rgba(0, 0, 0, 0);
16099 }
16100
16101 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu {
16102 z-index: 999;
16103 position: absolute;
16104 width: 15.625rem;
16105 max-width: none;
16106 padding: 0rem 0rem 0rem 0rem;
16107 border: 0;
16108 background: #f1f1f1;
16109 border-radius: 0;
16110 }
16111
16112 @media only screen and (max-width: 62.5rem) {
16113 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu {
16114 float: left;
16115 position: static;
16116 width: 100%;
16117 padding: 0;
16118 border: 0;
16119 border-radius: 0;
16120 }
16121 }
16122 @media only screen and (max-width: 62.5rem) {
16123 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item {
16124 clear: both;
16125 }
16126 }
16127 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item a.mega-menu-link {
16128 display: block;
16129 background: #f1f1f1;
16130 color: #666;
16131 font-family: inherit;
16132 font-size: 0.875rem;
16133 font-weight: normal;
16134 padding: 0rem 0.625rem 0rem 0.625rem;
16135 line-height: 2.1875rem;
16136 text-decoration: none;
16137 text-transform: none;
16138 vertical-align: baseline;
16139 }
16140
16141 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item:first-child > a.mega-menu-link {
16142 border-top-left-radius: 0rem;
16143 border-top-right-radius: 0rem;
16144 }
16145
16146 @media only screen and (max-width: 62.5rem) {
16147 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item:first-child > a.mega-menu-link {
16148 border-top-left-radius: 0;
16149 border-top-right-radius: 0;
16150 }
16151 }
16152 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item:last-child > a.mega-menu-link {
16153 border-bottom-right-radius: 0rem;
16154 border-bottom-left-radius: 0rem;
16155 }
16156
16157 @media only screen and (max-width: 62.5rem) {
16158 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item:last-child > a.mega-menu-link {
16159 border-bottom-right-radius: 0;
16160 border-bottom-left-radius: 0;
16161 }
16162 }
16163 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item a.mega-menu-link:hover, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item a.mega-menu-link:focus {
16164 background: #ddd;
16165 font-weight: normal;
16166 text-decoration: none;
16167 color: #666;
16168 }
16169
16170 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu {
16171 position: absolute;
16172 left: 100%;
16173 top: 0;
16174 }
16175
16176 @media only screen and (max-width: 62.5rem) {
16177 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu {
16178 position: static;
16179 left: 0;
16180 width: 100%;
16181 }
16182 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu a.mega-menu-link {
16183 padding-left: 1.25rem;
16184 }
16185 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu ul.mega-sub-menu a.mega-menu-link {
16186 padding-left: 1.875rem;
16187 }
16188 }
16189 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item-has-children > a.mega-menu-link > span.mega-indicator {
16190 display: inline-block;
16191 width: auto;
16192 background: transparent;
16193 position: relative;
16194 pointer-events: auto;
16195 left: auto;
16196 min-width: auto;
16197 font-size: inherit;
16198 padding: 0;
16199 margin: 0 0 0 0.375rem;
16200 height: auto;
16201 line-height: inherit;
16202 color: inherit;
16203 }
16204
16205 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item-has-children > a.mega-menu-link > span.mega-indicator:after {
16206 content: "\f347";
16207 font-family: dashicons;
16208 font-weight: normal;
16209 display: inline-block;
16210 margin: 0;
16211 vertical-align: top;
16212 -webkit-font-smoothing: antialiased;
16213 -moz-osx-font-smoothing: grayscale;
16214 transform: rotate(0);
16215 color: inherit;
16216 position: relative;
16217 background: transparent;
16218 height: auto;
16219 width: auto;
16220 right: auto;
16221 line-height: inherit;
16222 }
16223
16224 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item-has-children li.mega-menu-item-has-children > a.mega-menu-link > span.mega-indicator {
16225 float: right;
16226 }
16227
16228 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item-has-children.mega-collapse-children.mega-toggle-on > a.mega-menu-link > span.mega-indicator:after {
16229 content: "\f343";
16230 }
16231
16232 @media only screen and (max-width: 62.5rem) {
16233 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item-has-children > a.mega-menu-link > span.mega-indicator {
16234 float: right;
16235 }
16236 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item-has-children.mega-toggle-on > a.mega-menu-link > span.mega-indicator:after {
16237 content: "\f343";
16238 }
16239 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item-has-children.mega-hide-sub-menu-on-mobile > a.mega-menu-link > span.mega-indicator {
16240 display: none;
16241 }
16242 }
16243 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu:not(.mega-menu-tabbed) li.mega-menu-item-has-children:not(.mega-collapse-children) > a.mega-menu-link > span.mega-indicator, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item-has-children.mega-hide-arrow > a.mega-menu-link > span.mega-indicator {
16244 display: none;
16245 }
16246
16247 @media only screen and (min-width: 62.5625rem) {
16248 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-flyout li.mega-menu-item a.mega-menu-link > span.mega-indicator:after {
16249 content: "\f139";
16250 }
16251 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-flyout.mega-align-bottom-right li.mega-menu-item a.mega-menu-link {
16252 text-align: right;
16253 }
16254 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-flyout.mega-align-bottom-right li.mega-menu-item a.mega-menu-link > span.mega-indicator {
16255 float: left;
16256 }
16257 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-flyout.mega-align-bottom-right li.mega-menu-item a.mega-menu-link > span.mega-indicator:after {
16258 content: "\f141";
16259 margin: 0 0.375rem 0 0;
16260 }
16261 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-flyout.mega-align-bottom-right li.mega-menu-item a.mega-menu-link:before {
16262 float: right;
16263 margin: 0 0 0 0.375rem;
16264 }
16265 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-flyout.mega-align-bottom-right ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu {
16266 left: -100%;
16267 top: 0;
16268 }
16269 }
16270 #mega-menu-wrap-primary #mega-menu-primary li[class^=mega-lang-item] > a.mega-menu-link > img {
16271 display: inline;
16272 }
16273
16274 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link > img.wpml-ls-flag, #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link > img.iclflag {
16275 display: inline;
16276 margin-right: 0.5rem;
16277 }
16278
16279 @media only screen and (max-width: 62.5rem) {
16280 #mega-menu-wrap-primary #mega-menu-primary li.mega-hide-on-mobile, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-hide-on-mobile, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item.mega-hide-on-mobile {
16281 display: none;
16282 }
16283 }
16284 @media only screen and (min-width: 62.5625rem) {
16285 #mega-menu-wrap-primary #mega-menu-primary li.mega-hide-on-desktop, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-hide-on-desktop, #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item.mega-hide-on-desktop {
16286 display: none;
16287 }
16288 }
16289 @media only screen and (max-width: 62.5rem) {
16290 #mega-menu-wrap-primary:after {
16291 content: "";
16292 display: table;
16293 clear: both;
16294 }
16295 }
16296 #mega-menu-wrap-primary .mega-menu-toggle {
16297 display: none;
16298 z-index: 1;
16299 cursor: pointer;
16300 background: #fff;
16301 border-radius: 0.125rem 0.125rem 0.125rem 0.125rem;
16302 line-height: 2.5rem;
16303 height: 2.5rem;
16304 text-align: left;
16305 -webkit-user-select: none;
16306 -moz-user-select: none;
16307 user-select: none;
16308 -webkit-tap-highlight-color: transparent;
16309 outline: none;
16310 white-space: nowrap;
16311 }
16312
16313 #mega-menu-wrap-primary .mega-menu-toggle img {
16314 max-width: 100%;
16315 padding: 0;
16316 }
16317
16318 @media only screen and (max-width: 62.5rem) {
16319 #mega-menu-wrap-primary .mega-menu-toggle {
16320 display: flex;
16321 }
16322 }
16323 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-left, #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-center, #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-right {
16324 display: flex;
16325 flex-basis: 33.33%;
16326 }
16327
16328 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-left {
16329 flex: 1;
16330 justify-content: flex-start;
16331 }
16332
16333 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-left .mega-toggle-block {
16334 margin-left: 0.375rem;
16335 }
16336
16337 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-left .mega-toggle-block:only-child {
16338 margin-right: 0.375rem;
16339 }
16340
16341 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-center {
16342 justify-content: center;
16343 }
16344
16345 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-center .mega-toggle-block {
16346 margin-left: 0.1875rem;
16347 margin-right: 0.1875rem;
16348 }
16349
16350 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-right {
16351 flex: 1;
16352 justify-content: flex-end;
16353 z-index: 9999999999;
16354 position: relative;
16355 }
16356
16357 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-right .mega-toggle-block {
16358 margin-right: 0.375rem;
16359 }
16360
16361 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-right .mega-toggle-block:only-child {
16362 margin-left: 0.375rem;
16363 }
16364
16365 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-block {
16366 display: flex;
16367 height: 100%;
16368 outline: 0;
16369 align-self: center;
16370 flex-shrink: 0;
16371 }
16372
16373 html.mega-menu-primary-off-canvas-open {
16374 overflow: hidden;
16375 height: auto;
16376 }
16377
16378 html.mega-menu-primary-off-canvas-open body {
16379 overflow: hidden;
16380 height: auto;
16381 }
16382
16383 html.mega-menu-primary-off-canvas-open #wpadminbar {
16384 z-index: 0;
16385 }
16386
16387 #mega-menu-wrap-primary .mega-menu-toggle {
16388 /** Push menu onto new line **/
16389 }
16390
16391 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-block-3 {
16392 cursor: pointer;
16393 }
16394
16395 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-block-3:after {
16396 content: "\f333";
16397 font-family: "dashicons";
16398 font-size: 1.5rem;
16399 color: #ddd;
16400 margin: 0 0 0 0.3125rem;
16401 }
16402
16403 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-block-3 .mega-toggle-label {
16404 color: #ddd;
16405 font-size: 0.875rem;
16406 }
16407
16408 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-block-3 .mega-toggle-label .mega-toggle-label-open {
16409 display: none;
16410 }
16411
16412 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-block-3 .mega-toggle-label .mega-toggle-label-closed {
16413 display: inline;
16414 }
16415
16416 #mega-menu-wrap-primary .mega-menu-toggle.mega-menu-open .mega-toggle-block-3:after {
16417 content: "\f153";
16418 }
16419
16420 #mega-menu-wrap-primary .mega-menu-toggle.mega-menu-open .mega-toggle-block-3 .mega-toggle-label-open {
16421 display: inline;
16422 }
16423
16424 #mega-menu-wrap-primary .mega-menu-toggle.mega-menu-open .mega-toggle-block-3 .mega-toggle-label-closed {
16425 display: none;
16426 }
16427
16428 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-block-1 {
16429 width: 100%;
16430 margin: 0;
16431 }
16432
16433 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-block-2 {
16434 width: 100%;
16435 margin: 0;
16436 }
16437
16438 #mega-menu-wrap-primary {
16439 clear: both;
16440 }
16441
16442 @media only screen and (min-width: 62.5rem) { 14999 @media only screen and (min-width: 62.5rem) {
16443 #main-nav { 15000 #main-nav {
16444 padding-bottom: 1px; 15001 padding-bottom: 1px;
...@@ -16509,12 +15066,13 @@ html.mega-menu-primary-off-canvas-open #wpadminbar { ...@@ -16509,12 +15066,13 @@ html.mega-menu-primary-off-canvas-open #wpadminbar {
16509 .mega-sub-menu:has(.mega-menu-columns-4-of-12) { 15066 .mega-sub-menu:has(.mega-menu-columns-4-of-12) {
16510 width: 80% !important; 15067 width: 80% !important;
16511 } 15068 }
16512 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu:nth-child(4) > ul.mega-sub-menu { 15069 .mega-sub-menu:has(.mega-menu-columns-6-of-12) {
15070 width: 53% !important;
15071 }
15072 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu:nth-child(3) > ul.mega-sub-menu {
16513 left: unset !important; 15073 left: unset !important;
16514 right: 0rem !important;
16515 } 15074 }
16516 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu:nth-child(5) > ul.mega-sub-menu { 15075 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu:nth-child(5) > ul.mega-sub-menu {
16517 width: 80% !important;
16518 left: unset !important; 15076 left: unset !important;
16519 right: 0rem !important; 15077 right: 0rem !important;
16520 } 15078 }
...@@ -16531,22 +15089,37 @@ html.mega-menu-primary-off-canvas-open #wpadminbar { ...@@ -16531,22 +15089,37 @@ html.mega-menu-primary-off-canvas-open #wpadminbar {
16531 color: #000; 15089 color: #000;
16532 text-decoration: none; 15090 text-decoration: none;
16533 white-space: break-spaces; 15091 white-space: break-spaces;
16534 font-size: 18px; 15092 font-size: 18px !important;
15093 line-height: 24px !important;
16535 font-weight: 400; 15094 font-weight: 400;
16536 font-family: "PT Sans", sans-serif; 15095 font-family: "PT Sans", sans-serif;
16537 font-weight: bold; 15096 font-weight: bold;
16538 } 15097 }
15098 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu .mega-description-group .mega-menu-description {
15099 margin-top: 3px !important;
15100 }
15101 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-title,
15102 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-title,
15103 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link .mega-menu-title {
15104 font-size: 18px !important;
15105 line-height: 24px !important;
15106 }
16539 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover .mega-menu-title { 15107 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover .mega-menu-title {
16540 text-decoration: underline; 15108 text-decoration: underline;
16541 font-weight: bold; 15109 font-weight: bold;
16542 color: #000; 15110 color: #000;
15111 font-size: 18px !important;
15112 line-height: 24px !important;
16543 } 15113 }
16544 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover .mega-menu-description { 15114 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover .mega-menu-description {
16545 color: #000; 15115 color: #000;
15116 margin-top: 3px;
16546 } 15117 }
16547 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item.break-here > a.mega-menu-link { 15118 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item.break-here > a.mega-menu-link {
16548 font-size: 18px; 15119 font-size: 18px;
15120 line-height: 21px;
16549 font-family: "PT Sans", sans-serif; 15121 font-family: "PT Sans", sans-serif;
15122 text-transform: uppercase;
16550 } 15123 }
16551 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-description { 15124 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-description {
16552 font-style: normal; 15125 font-style: normal;
...@@ -16680,6 +15253,10 @@ html.mega-menu-primary-off-canvas-open #wpadminbar { ...@@ -16680,6 +15253,10 @@ html.mega-menu-primary-off-canvas-open #wpadminbar {
16680 #mega-menu-wrap-primary .mega-menu-toggle { 15253 #mega-menu-wrap-primary .mega-menu-toggle {
16681 background: transparent; 15254 background: transparent;
16682 } 15255 }
15256 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-right {
15257 z-index: 9999;
15258 position: relative;
15259 }
16683 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-right .mega-toggle-block:only-child { 15260 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-right .mega-toggle-block:only-child {
16684 background-color: #EE0000; 15261 background-color: #EE0000;
16685 border-radius: 50%; 15262 border-radius: 50%;
...@@ -16778,7 +15355,7 @@ html.mega-menu-primary-off-canvas-open #wpadminbar { ...@@ -16778,7 +15355,7 @@ html.mega-menu-primary-off-canvas-open #wpadminbar {
16778 font-size: 1.8rem; 15355 font-size: 1.8rem;
16779 font-weight: 700; 15356 font-weight: 700;
16780 color: #fff; 15357 color: #fff;
16781 margin: 0 0 0 0.6rem; 15358 margin: 0 0 0 0.58rem;
16782 line-height: 1.3625rem; 15359 line-height: 1.3625rem;
16783 } 15360 }
16784 15361
...@@ -16811,6 +15388,17 @@ html.mega-menu-primary-off-canvas-open #wpadminbar { ...@@ -16811,6 +15388,17 @@ html.mega-menu-primary-off-canvas-open #wpadminbar {
16811 } 15388 }
16812 .break-here .mega-menu-title { 15389 .break-here .mega-menu-title {
16813 font-size: 20px !important; 15390 font-size: 20px !important;
15391 text-transform: uppercase;
15392 }
15393 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row .mega-menu-column > ul.mega-sub-menu > li.mega-menu-item {
15394 padding: 0px 15px;
15395 }
15396 }
15397 @media only screen and (max-width: 1000px) {
15398 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu.mega-menu-item.mega-toggle-on ul.mega-sub-menu {
15399 display: block;
15400 margin-bottom: 10px !important;
15401 padding-top: 0px !important;
16814 } 15402 }
16815 } 15403 }
16816 .admin-bar .back-one-level { 15404 .admin-bar .back-one-level {
...@@ -17737,6 +16325,7 @@ p { ...@@ -17737,6 +16325,7 @@ p {
17737 font-size: 28px; 16325 font-size: 28px;
17738 line-height: 35px; 16326 line-height: 35px;
17739 color: #000; 16327 color: #000;
16328 margin-top: 32px;
17740 } 16329 }
17741 @media only screen and (max-width: 48.875rem) { 16330 @media only screen and (max-width: 48.875rem) {
17742 .entry-content h2, .entry-content .h2 { 16331 .entry-content h2, .entry-content .h2 {
...@@ -17782,6 +16371,13 @@ p { ...@@ -17782,6 +16371,13 @@ p {
17782 .entry-content ul:not(.side-menu):not(.children) li { 16371 .entry-content ul:not(.side-menu):not(.children) li {
17783 margin-top: 0.313rem; 16372 margin-top: 0.313rem;
17784 } 16373 }
16374 .entry-content ul:not(.side-menu):not(.children) li a {
16375 text-decoration: none !important;
16376 font-weight: bold !important;
16377 }
16378 .entry-content ul:not(.side-menu):not(.children) li a:hover {
16379 text-decoration: underline !important;
16380 }
17785 .entry-content ul:not(.side-menu):not(.children) li ul:not(.side-menu):not(.children) { 16381 .entry-content ul:not(.side-menu):not(.children) li ul:not(.side-menu):not(.children) {
17786 list-style: none; 16382 list-style: none;
17787 margin-top: 0.313rem; 16383 margin-top: 0.313rem;
...@@ -17793,6 +16389,13 @@ p { ...@@ -17793,6 +16389,13 @@ p {
17793 width: 1.5em; 16389 width: 1.5em;
17794 margin-left: -1.5em; 16390 margin-left: -1.5em;
17795 } 16391 }
16392 .entry-content ul:not(.side-menu):not(.children) li ul:not(.side-menu):not(.children) li a {
16393 text-decoration: none !important;
16394 font-weight: bold !important;
16395 }
16396 .entry-content ul:not(.side-menu):not(.children) li ul:not(.side-menu):not(.children) li a:hover {
16397 text-decoration: underline !important;
16398 }
17796 .entry-content ol { 16399 .entry-content ol {
17797 padding-left: 2rem; 16400 padding-left: 2rem;
17798 } 16401 }
...@@ -18053,6 +16656,20 @@ table:not(.ui-datepicker-calendar):not(#relevant-resources) thead th:first-child ...@@ -18053,6 +16656,20 @@ table:not(.ui-datepicker-calendar):not(#relevant-resources) thead th:first-child
18053 border-left: none; 16656 border-left: none;
18054 } 16657 }
18055 16658
16659 a[target=_blank]:after {
16660 content: "";
16661 width: 12px;
16662 height: 12px;
16663 background-repeat: no-repeat;
16664 background-size: contain;
16665 background-image: url('data:image/svg+xml,<svg id="Group_1310" data-name="Group 1310" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="17.758" height="17.741" viewBox="0 0 17.758 17.741"><defs><clipPath id="clip-path"><rect id="Rectangle_151" data-name="Rectangle 151" width="17.758" height="17.741"/></clipPath></defs><path id="Path_1277" data-name="Path 1277" d="M0,0V17.741H17.757V8.281H15.586v7.3H2.189V2.135H9.3V0Z" transform="translate(0 0)"/><g id="Group_1023" data-name="Group 1023" transform="translate(0 0)"><g id="Group_1022" data-name="Group 1022" clip-path="url(%23clip-path)"><path id="Path_1278" data-name="Path 1278" d="M17.986,11.548,16.363,9.931l7.791-7.756H21.989V.016h5.864V5.867H25.7V3.8l-7.717,7.748" transform="translate(-10.096 -0.01)"/></g></g></svg>');
16666 display: inline-block;
16667 position: relative;
16668 top: 0.1rem;
16669 right: -0.3rem;
16670 margin-right: 0.3125rem;
16671 }
16672
18056 #search-sidebar { 16673 #search-sidebar {
18057 min-width: 20rem; 16674 min-width: 20rem;
18058 } 16675 }
...@@ -18204,6 +16821,8 @@ table:not(.ui-datepicker-calendar):not(#relevant-resources) thead th:first-child ...@@ -18204,6 +16821,8 @@ table:not(.ui-datepicker-calendar):not(#relevant-resources) thead th:first-child
18204 #search-wrapper #search-sidebar .select2-selection__rendered { 16821 #search-wrapper #search-sidebar .select2-selection__rendered {
18205 background-color: #fff; 16822 background-color: #fff;
18206 border: 1px solid #fff; 16823 border: 1px solid #fff;
16824 padding: 0px 0px 0px 0px;
16825 margin: 0px;
18207 } 16826 }
18208 #search-wrapper #search-sidebar .select2-container--default.select2-container--focus .select2-selection--multiple { 16827 #search-wrapper #search-sidebar .select2-container--default.select2-container--focus .select2-selection--multiple {
18209 border: 1px solid #fff; 16828 border: 1px solid #fff;
...@@ -18526,6 +17145,7 @@ ul.sf_date_field .sf-datepicker { ...@@ -18526,6 +17145,7 @@ ul.sf_date_field .sf-datepicker {
18526 #advance-search-modal .select2-selection__rendered { 17145 #advance-search-modal .select2-selection__rendered {
18527 margin-right: 0px; 17146 margin-right: 0px;
18528 padding-right: 0px; 17147 padding-right: 0px;
17148 padding-left: 0px;
18529 } 17149 }
18530 #advance-search-modal .select2-container--default .select2-selection--multiple, 17150 #advance-search-modal .select2-container--default .select2-selection--multiple,
18531 #advance-search-modal .select2-selection__rendered { 17151 #advance-search-modal .select2-selection__rendered {
...@@ -18537,11 +17157,17 @@ ul.sf_date_field .sf-datepicker { ...@@ -18537,11 +17157,17 @@ ul.sf_date_field .sf-datepicker {
18537 } 17157 }
18538 #advance-search-modal .select2-search.select2-search--inline, 17158 #advance-search-modal .select2-search.select2-search--inline,
18539 #advance-search-modal .select2-container { 17159 #advance-search-modal .select2-container {
18540 width: 100% !important; 17160 width: 101% !important;
18541 margin-top: 0px; 17161 margin-top: 0px;
18542 padding-top: 0px; 17162 padding-top: 0px;
18543 padding-bottom: 0px; 17163 padding-bottom: 0px;
18544 } 17164 }
17165 @media screen and (max-width: 56.25rem) {
17166 #advance-search-modal .select2-search.select2-search--inline,
17167 #advance-search-modal .select2-container {
17168 width: 100% !important;
17169 }
17170 }
18545 #advance-search-modal .select2-selection__choice { 17171 #advance-search-modal .select2-selection__choice {
18546 width: auto !important; 17172 width: auto !important;
18547 margin-top: 0px; 17173 margin-top: 0px;
...@@ -19017,6 +17643,21 @@ ul.sf_date_field .sf-datepicker { ...@@ -19017,6 +17643,21 @@ ul.sf_date_field .sf-datepicker {
19017 display: none !important; 17643 display: none !important;
19018 } 17644 }
19019 17645
17646 @media screen and (max-width: 1067px) {
17647 #search-wrapper .container {
17648 margin: 0rem 1.875rem 0 1.875rem;
17649 }
17650 }
17651 @media screen and (max-width: 48.875rem) {
17652 #search-wrapper .container {
17653 margin: 0rem;
17654 }
17655 }
17656
17657 .admin-bar .select2-container--open .select2-dropdown {
17658 top: 32px;
17659 }
17660
19020 .search-results .search-field { 17661 .search-results .search-field {
19021 border: 0; 17662 border: 0;
19022 border-bottom: 0.0625rem solid #707070; 17663 border-bottom: 0.0625rem solid #707070;
...@@ -19102,6 +17743,9 @@ ul.sf_date_field .sf-datepicker { ...@@ -19102,6 +17743,9 @@ ul.sf_date_field .sf-datepicker {
19102 text-decoration: underline; 17743 text-decoration: underline;
19103 font-size: 16px; 17744 font-size: 16px;
19104 } 17745 }
17746 #search-wrapper #main > article a[target=_blank]:after {
17747 display: none;
17748 }
19105 #search-wrapper #main > article h2.PDF:before, #search-wrapper #main > article .PDF.h2:before { 17749 #search-wrapper #main > article h2.PDF:before, #search-wrapper #main > article .PDF.h2:before {
19106 content: ""; 17750 content: "";
19107 width: 1.313rem; 17751 width: 1.313rem;
...@@ -19510,7 +18154,7 @@ ul.sf_date_field .sf-datepicker { ...@@ -19510,7 +18154,7 @@ ul.sf_date_field .sf-datepicker {
19510 } 18154 }
19511 } 18155 }
19512 .full-black .wp-block-columns { 18156 .full-black .wp-block-columns {
19513 gap: 0em; 18157 gap: 25px;
19514 } 18158 }
19515 .full-black h2, .full-black .h2 { 18159 .full-black h2, .full-black .h2 {
19516 color: #fff; 18160 color: #fff;
...@@ -20045,12 +18689,12 @@ ul.sf_date_field .sf-datepicker { ...@@ -20045,12 +18689,12 @@ ul.sf_date_field .sf-datepicker {
20045 font-size: 16px; 18689 font-size: 16px;
20046 line-height: 12px; 18690 line-height: 12px;
20047 font-weight: 400; 18691 font-weight: 400;
20048 text-decoration: underline;
20049 text-decoration: none; 18692 text-decoration: none;
20050 } 18693 }
20051 #menu-footer-french li a:hover, 18694 #menu-footer-french li a:hover,
20052 #menu-footer li a:hover { 18695 #menu-footer li a:hover {
20053 color: #000; 18696 color: #000;
18697 text-decoration: underline;
20054 } 18698 }
20055 #menu-footer-french li::after, 18699 #menu-footer-french li::after,
20056 #menu-footer li::after { 18700 #menu-footer li::after {
...@@ -20212,6 +18856,8 @@ ul.sf_date_field .sf-datepicker { ...@@ -20212,6 +18856,8 @@ ul.sf_date_field .sf-datepicker {
20212 .call-out-block h2, .call-out-block .h2 { 18856 .call-out-block h2, .call-out-block .h2 {
20213 padding-top: 32px; 18857 padding-top: 32px;
20214 color: #fff; 18858 color: #fff;
18859 font-family: "PT Sans", sans-serif;
18860 font-weight: 700;
20215 } 18861 }
20216 @media screen and (max-width: 48rem) { 18862 @media screen and (max-width: 48rem) {
20217 .call-out-block h2, .call-out-block .h2 { 18863 .call-out-block h2, .call-out-block .h2 {
...@@ -20273,7 +18919,7 @@ ul.sf_date_field .sf-datepicker { ...@@ -20273,7 +18919,7 @@ ul.sf_date_field .sf-datepicker {
20273 .wpml-ls-statics-shortcode_actions.wpml-ls.wpml-ls-legacy-list-horizontal { 18919 .wpml-ls-statics-shortcode_actions.wpml-ls.wpml-ls-legacy-list-horizontal {
20274 position: absolute; 18920 position: absolute;
20275 right: 0px; 18921 right: 0px;
20276 top: -12px; 18922 top: -10px;
20277 } 18923 }
20278 } 18924 }
20279 .wpml-ls-statics-shortcode_actions.wpml-ls.wpml-ls-legacy-list-horizontal a { 18925 .wpml-ls-statics-shortcode_actions.wpml-ls.wpml-ls-legacy-list-horizontal a {
...@@ -20289,6 +18935,11 @@ ul.sf_date_field .sf-datepicker { ...@@ -20289,6 +18935,11 @@ ul.sf_date_field .sf-datepicker {
20289 .admin-bar .wpml-ls-statics-shortcode_actions.wpml-ls.wpml-ls-legacy-list-horizontal { 18935 .admin-bar .wpml-ls-statics-shortcode_actions.wpml-ls.wpml-ls-legacy-list-horizontal {
20290 margin-top: -10px; 18936 margin-top: -10px;
20291 } 18937 }
18938 @media only screen and (max-width: 48.875rem) {
18939 .admin-bar .wpml-ls-statics-shortcode_actions.wpml-ls.wpml-ls-legacy-list-horizontal {
18940 margin-top: -7px;
18941 }
18942 }
20292 18943
20293 .promo-area { 18944 .promo-area {
20294 width: 100%; 18945 width: 100%;
...@@ -21259,6 +19910,9 @@ ul.sf_date_field .sf-datepicker { ...@@ -21259,6 +19910,9 @@ ul.sf_date_field .sf-datepicker {
21259 left: -0.2rem; 19910 left: -0.2rem;
21260 margin-right: 0.3125rem; 19911 margin-right: 0.3125rem;
21261 } 19912 }
19913 .relevant-resources #relevant-resources td a[target=_blank]:after {
19914 display: none;
19915 }
21262 .relevant-resources #relevant-resources .photo { 19916 .relevant-resources #relevant-resources .photo {
21263 position: relative; 19917 position: relative;
21264 } 19918 }
...@@ -21380,7 +20034,7 @@ ul.sf_date_field .sf-datepicker { ...@@ -21380,7 +20034,7 @@ ul.sf_date_field .sf-datepicker {
21380 list-style: none; 20034 list-style: none;
21381 padding: 0; 20035 padding: 0;
21382 margin: 0; 20036 margin: 0;
21383 gap: 12px; 20037 gap: 24px;
21384 } 20038 }
21385 @media only screen and (max-width: 67.063rem) { 20039 @media only screen and (max-width: 67.063rem) {
21386 .news-and-stories-block ul { 20040 .news-and-stories-block ul {
...@@ -21421,12 +20075,20 @@ ul.sf_date_field .sf-datepicker { ...@@ -21421,12 +20075,20 @@ ul.sf_date_field .sf-datepicker {
21421 max-height: 291px; 20075 max-height: 291px;
21422 overflow: hidden; 20076 overflow: hidden;
21423 position: relative; 20077 position: relative;
20078 display: flex;
20079 justify-content: center;
20080 align-items: center;
20081 overflow: hidden;
21424 } 20082 }
21425 .news-and-stories-block ul .article-card.lg img { 20083 .news-and-stories-block ul .article-card.lg img {
21426 height: 100%; 20084 -o-object-fit: contain;
21427 width: 100%; 20085 object-fit: contain;
21428 -o-object-fit: cover; 20086 min-width: 100%;
21429 object-fit: cover; 20087 min-height: 100%;
20088 width: auto;
20089 height: auto;
20090 max-width: 100%;
20091 max-height: 100%;
21430 transition: all 0.5s ease-in-out; 20092 transition: all 0.5s ease-in-out;
21431 } 20093 }
21432 .news-and-stories-block ul .article-card.lg a { 20094 .news-and-stories-block ul .article-card.lg a {
...@@ -21462,10 +20124,8 @@ ul.sf_date_field .sf-datepicker { ...@@ -21462,10 +20124,8 @@ ul.sf_date_field .sf-datepicker {
21462 } 20124 }
21463 20125
21464 .article-card { 20126 .article-card {
21465 max-width: 31rem;
21466 min-width: 31rem;
21467 min-height: 8.438rem; 20127 min-height: 8.438rem;
21468 margin-right: 12px; 20128 margin-right: 24px;
21469 } 20129 }
21470 .article-card a { 20130 .article-card a {
21471 color: white; 20131 color: white;
...@@ -21505,7 +20165,7 @@ ul.sf_date_field .sf-datepicker { ...@@ -21505,7 +20165,7 @@ ul.sf_date_field .sf-datepicker {
21505 font-weight: bold; 20165 font-weight: bold;
21506 margin: 0; 20166 margin: 0;
21507 font-size: 22px; 20167 font-size: 22px;
21508 margin-bottom: 10px; 20168 margin-bottom: 0px;
21509 line-height: 28px !important; 20169 line-height: 28px !important;
21510 max-height: 5rem; 20170 max-height: 5rem;
21511 overflow: hidden; 20171 overflow: hidden;
...@@ -21681,6 +20341,11 @@ ul.sf_date_field .sf-datepicker { ...@@ -21681,6 +20341,11 @@ ul.sf_date_field .sf-datepicker {
21681 .news-search { 20341 .news-search {
21682 margin-top: 0px !important; 20342 margin-top: 0px !important;
21683 } 20343 }
20344 @media only screen and (max-width: 48.875rem) {
20345 .news-search {
20346 margin-top: 20px !important;
20347 }
20348 }
21684 .news-search h1, .news-search .h1 { 20349 .news-search h1, .news-search .h1 {
21685 font-size: 40px; 20350 font-size: 40px;
21686 line-height: 45px; 20351 line-height: 45px;
......
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
...@@ -109,13 +109,24 @@ function megamenu_override_default_theme($value) { ...@@ -109,13 +109,24 @@ function megamenu_override_default_theme($value) {
109 109
110 function fixUlisting() { 110 function fixUlisting() {
111 $the_theme = wp_get_theme(); 111 $the_theme = wp_get_theme();
112 wp_deregister_script( 'megamenu' ); 112 // wp_deregister_script( 'megamenu' );
113 wp_dequeue_script( 'megamenu' ); 113 // wp_dequeue_script( 'megamenu' );
114 114 // wp_enqueue_script( 'megamenu', get_stylesheet_directory_uri().'/js/maxmegamenu.js', array(), $the_theme->get( 'Version' ), true );
115 wp_enqueue_script( 'megamenu', get_stylesheet_directory_uri().'/js/maxmegamenu.js', array(), $the_theme->get( 'Version' ), true ); 115
116 wp_deregister_script( 'search-filter-plugin-build' );
117 wp_dequeue_script( 'search-filter-plugin-build' );
118
119 wp_register_script( 'search-filter-plugin-build', get_stylesheet_directory_uri().'/js/search-filter-build.js', array('jquery'), $the_theme->get( 'Version' ), true );
116 120
121 $js_data = array(
122 'ajax_url' => admin_url( 'admin-ajax.php' ),
123 'home_url' => home_url( '/' ),
124 'extensions' => apply_filters( 'search_filter_extensions', array() ),
125 );
126 wp_localize_script( 'search-filter-plugin-build', 'SF_LDATA', $js_data );
127 wp_enqueue_script('search-filter-plugin-build');
117 } 128 }
118 //add_action( 'wp_enqueue_scripts', 'fixUlisting', 100 ); 129 add_action( 'wp_enqueue_scripts', 'fixUlisting', 100 );
119 130
120 131
121 // add_filter( 'get_custom_logo_image_attributes', function( 132 // add_filter( 'get_custom_logo_image_attributes', function(
...@@ -141,4 +152,5 @@ function getName() { ...@@ -141,4 +152,5 @@ function getName() {
141 } 152 }
142 153
143 return $randomString; 154 return $randomString;
144 }
...\ No newline at end of file ...\ No newline at end of file
155 }
156
......
...@@ -8,7 +8,9 @@ ...@@ -8,7 +8,9 @@
8 8
9 function get_breadcrumb() { 9 function get_breadcrumb() {
10 global $post; 10 global $post;
11 echo '<a href="'.home_url().'" rel="nofollow">Home</a>'; 11 echo '<a href="'.home_url().'" rel="nofollow">';
12 _e('Home','msf');
13 echo '</a>';
12 echo '<span> / </span>'; 14 echo '<span> / </span>';
13 if (is_category() || is_single()) { 15 if (is_category() || is_single()) {
14 the_category(' / '); 16 the_category(' / ');
......
...@@ -104,7 +104,7 @@ function delete_exclude_from_search() ...@@ -104,7 +104,7 @@ function delete_exclude_from_search()
104 foreach ( $pages as $page ){ 104 foreach ( $pages as $page ){
105 $exclude_from_search = get_post_meta($page->ID, 'exclude_from_search', true); 105 $exclude_from_search = get_post_meta($page->ID, 'exclude_from_search', true);
106 if($exclude_from_search == '0'){ 106 if($exclude_from_search == '0'){
107 wp_delete_attachment( $page->ID, true ); 107 wp_update_post(get_post( $page->ID) );
108 //error_log($page->ID); 108 //error_log($page->ID);
109 } 109 }
110 } 110 }
......
...@@ -20690,11 +20690,18 @@ ...@@ -20690,11 +20690,18 @@
20690 $(document).on("click", ".search-filter-reset-custom", function (e) { 20690 $(document).on("click", ".search-filter-reset-custom", function (e) {
20691 e.preventDefault(); 20691 e.preventDefault();
20692 $(this).closest('.searchandfilter')[0].reset(); 20692 $(this).closest('.searchandfilter')[0].reset();
20693 $('#top-search').val();
20693 return false; 20694 return false;
20694 }); 20695 });
20696
20697 //$('.search-filter-reset').unbind('click');
20698
20695 $(document).on("click", ".search-filter-reset", function (e) { 20699 $(document).on("click", ".search-filter-reset", function (e) {
20696 e.preventDefault(); 20700 e.preventDefault();
20697 $('.searchandfilter')[0].reset(); 20701 console.log('reset');
20702 const search = new URLSearchParams();
20703 search.set('_sf_s', $('#top-search').val());
20704 location.search = search.toString();
20698 return false; 20705 return false;
20699 }); 20706 });
20700 $(document).on("click", ".top-go", function (e) { 20707 $(document).on("click", ".top-go", function (e) {
...@@ -21001,7 +21008,7 @@ ...@@ -21001,7 +21008,7 @@
21001 if (img_width != '0') { 21008 if (img_width != '0') {
21002 var _bottom = jQuery(this).find('figcaption').innerHeight(); 21009 var _bottom = jQuery(this).find('figcaption').innerHeight();
21003 jQuery(this).find('figcaption').css('bottom', -_bottom); 21010 jQuery(this).find('figcaption').css('bottom', -_bottom);
21004 if ($('.post-template-default.single').length == 0) { 21011 if ($('.post-template-default.page').length == 0) {
21005 jQuery(this).find('.cap-wrapper').css('width', img_width); 21012 jQuery(this).find('.cap-wrapper').css('width', img_width);
21006 } 21013 }
21007 jQuery(this).addClass('captionized'); 21014 jQuery(this).addClass('captionized');
......
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
...@@ -89,6 +89,6 @@ if ($thumbnail_image && isset($thumbnail_image[0])) { ...@@ -89,6 +89,6 @@ if ($thumbnail_image && isset($thumbnail_image[0])) {
89 </div><!-- #content --> 89 </div><!-- #content -->
90 90
91 </div><!-- #full-width-page-wrapper --> 91 </div><!-- #full-width-page-wrapper -->
92 92 <?php the_field('pre_footer', 'option'); ?>
93 <?php 93 <?php
94 get_footer(); 94 get_footer();
......
...@@ -8,7 +8,7 @@ jQuery(function($) { ...@@ -8,7 +8,7 @@ jQuery(function($) {
8 if(img_width != '0') { 8 if(img_width != '0') {
9 var _bottom = jQuery(this).find('figcaption').innerHeight(); 9 var _bottom = jQuery(this).find('figcaption').innerHeight();
10 jQuery(this).find('figcaption').css('bottom', -_bottom); 10 jQuery(this).find('figcaption').css('bottom', -_bottom);
11 if($('.post-template-default.single').length == 0) { 11 if($('.post-template-default.page').length == 0) {
12 jQuery(this).find('.cap-wrapper').css('width', img_width); 12 jQuery(this).find('.cap-wrapper').css('width', img_width);
13 } 13 }
14 jQuery(this).addClass('captionized'); 14 jQuery(this).addClass('captionized');
......
...@@ -39,12 +39,18 @@ var Search = (function($) { ...@@ -39,12 +39,18 @@ var Search = (function($) {
39 $(document).on("click", ".search-filter-reset-custom", function(e){ 39 $(document).on("click", ".search-filter-reset-custom", function(e){
40 e.preventDefault(); 40 e.preventDefault();
41 $(this).closest('.searchandfilter')[0].reset(); 41 $(this).closest('.searchandfilter')[0].reset();
42 $('#top-search').val();
42 return false; 43 return false;
43 }); 44 });
44 45
46 //$('.search-filter-reset').unbind('click');
47
45 $(document).on("click", ".search-filter-reset", function(e){ 48 $(document).on("click", ".search-filter-reset", function(e){
46 e.preventDefault(); 49 e.preventDefault();
47 $('.searchandfilter')[0].reset(); 50 console.log('reset');
51 const search = new URLSearchParams();
52 search.set('_sf_s', $('#top-search').val());
53 location.search = search.toString();
48 return false; 54 return false;
49 }); 55 });
50 56
......
...@@ -34,6 +34,7 @@ window.tz_checkVisible = function(elm, evalType , offset, heightBuffer) { ...@@ -34,6 +34,7 @@ window.tz_checkVisible = function(elm, evalType , offset, heightBuffer) {
34 if (evalType === "above") return ((y < (vpH + st))); 34 if (evalType === "above") return ((y < (vpH + st)));
35 }; 35 };
36 36
37
37 jQuery(document).ready(function($) { 38 jQuery(document).ready(function($) {
38 39
39 40
...@@ -162,5 +163,7 @@ function onClassChange(element, callback) { ...@@ -162,5 +163,7 @@ function onClassChange(element, callback) {
162 // } 163 // }
163 // }); 164 // });
164 165
166
167
165 }); 168 });
166 }(jQuery)); 169 }(jQuery));
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
20 h2{ 20 h2{
21 padding-top: 32px; 21 padding-top: 32px;
22 color: #fff; 22 color: #fff;
23 font-family: "PT Sans",sans-serif;
24 font-weight: 700;
23 @media screen and (max-width: 48rem) { 25 @media screen and (max-width: 48rem) {
24 font-size: 22px; 26 font-size: 22px;
25 line-height: 25px; 27 line-height: 25px;
......
...@@ -12,7 +12,7 @@ body{ ...@@ -12,7 +12,7 @@ body{
12 // margin: 0.625rem 1.875rem 0 1.875rem; 12 // margin: 0.625rem 1.875rem 0 1.875rem;
13 } 13 }
14 14
15 @import "mega_menu"; 15 //@import "mega_menu";
16 @import "menu"; 16 @import "menu";
17 @import "header"; 17 @import "header";
18 @import "custom_select"; 18 @import "custom_select";
......
...@@ -47,6 +47,7 @@ h2{ ...@@ -47,6 +47,7 @@ h2{
47 font-size: 28px; 47 font-size: 28px;
48 line-height: 35px; 48 line-height: 35px;
49 color:#000; 49 color:#000;
50 margin-top: 32px;
50 @media only screen and (max-width: 48.875rem) { 51 @media only screen and (max-width: 48.875rem) {
51 font-size: 29px; 52 font-size: 29px;
52 line-height: 36px; 53 line-height: 36px;
...@@ -91,7 +92,13 @@ p{ ...@@ -91,7 +92,13 @@ p{
91 ul:not(.side-menu):not(.children){ 92 ul:not(.side-menu):not(.children){
92 padding-left: 2rem; 93 padding-left: 2rem;
93 li{ 94 li{
94 95 a{
96 text-decoration: none !important;
97 font-weight: bold !important;
98 }
99 a:hover{
100 text-decoration: underline !important;
101 }
95 margin-top: 0.313rem; 102 margin-top: 0.313rem;
96 ul:not(.side-menu):not(.children){ 103 ul:not(.side-menu):not(.children){
97 list-style: none; 104 list-style: none;
...@@ -103,6 +110,15 @@ ul:not(.side-menu):not(.children){ ...@@ -103,6 +110,15 @@ ul:not(.side-menu):not(.children){
103 display: inline-block; 110 display: inline-block;
104 width: 1.5em; 111 width: 1.5em;
105 margin-left: -1.5em; 112 margin-left: -1.5em;
113 }
114 li{
115 a{
116 text-decoration: none !important;
117 font-weight: bold !important;
118 }
119 a:hover{
120 text-decoration: underline !important;
121 }
106 } 122 }
107 } 123 }
108 } 124 }
...@@ -378,4 +394,22 @@ table:not(.ui-datepicker-calendar):not(#relevant-resources) { ...@@ -378,4 +394,22 @@ table:not(.ui-datepicker-calendar):not(#relevant-resources) {
378 } 394 }
379 395
380 396
397 }
398
399 a[target=_blank]{
400 &:after {
401 content: "";
402 width: 12px;
403 height: 12px;
404 background-repeat: no-repeat;
405 background-size: contain;
406 background-image: url('data:image/svg+xml,<svg id="Group_1310" data-name="Group 1310" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="17.758" height="17.741" viewBox="0 0 17.758 17.741"><defs><clipPath id="clip-path"><rect id="Rectangle_151" data-name="Rectangle 151" width="17.758" height="17.741"/></clipPath></defs><path id="Path_1277" data-name="Path 1277" d="M0,0V17.741H17.757V8.281H15.586v7.3H2.189V2.135H9.3V0Z" transform="translate(0 0)"/><g id="Group_1023" data-name="Group 1023" transform="translate(0 0)"><g id="Group_1022" data-name="Group 1022" clip-path="url(%23clip-path)"><path id="Path_1278" data-name="Path 1278" d="M17.986,11.548,16.363,9.931l7.791-7.756H21.989V.016h5.864V5.867H25.7V3.8l-7.717,7.748" transform="translate(-10.096 -0.01)"/></g></g></svg>');
407 display: inline-block;
408 position: relative;
409 top: 0.1rem;
410 right: -0.3rem;
411 margin-right: 0.3125rem;
412 }
413
414
381 } 415 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -47,10 +47,11 @@ ...@@ -47,10 +47,11 @@
47 font-size: 16px; 47 font-size: 16px;
48 line-height:12px; 48 line-height:12px;
49 font-weight: 400; 49 font-weight: 400;
50 text-decoration: underline; 50
51 text-decoration: none; 51 text-decoration: none;
52 &:hover{ 52 &:hover{
53 color: #000; 53 color: #000;
54 text-decoration: underline;
54 55
55 } 56 }
56 } 57 }
......
...@@ -195,7 +195,7 @@ ...@@ -195,7 +195,7 @@
195 width: calc(100vw + 50px); 195 width: calc(100vw + 50px);
196 } 196 }
197 .wp-block-columns{ 197 .wp-block-columns{
198 gap: 0em; 198 gap: 25px;
199 } 199 }
200 h2{ 200 h2{
201 color:#fff; 201 color:#fff;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
5 @media only screen and (max-width: 48.875rem) { 5 @media only screen and (max-width: 48.875rem) {
6 position: absolute; 6 position: absolute;
7 right: 0px; 7 right: 0px;
8 top:-12px; 8 top:-10px;
9 } 9 }
10 a{ 10 a{
11 color: #EE0000; 11 color: #EE0000;
...@@ -24,4 +24,7 @@ ...@@ -24,4 +24,7 @@
24 24
25 .admin-bar .wpml-ls-statics-shortcode_actions.wpml-ls.wpml-ls-legacy-list-horizontal{ 25 .admin-bar .wpml-ls-statics-shortcode_actions.wpml-ls.wpml-ls-legacy-list-horizontal{
26 margin-top: -10px; 26 margin-top: -10px;
27 @media only screen and (max-width: 48.875rem) {
28 margin-top: -7px;
29 }
27 } 30 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -74,13 +74,22 @@ ...@@ -74,13 +74,22 @@
74 width: 80% !important; 74 width: 80% !important;
75 75
76 } 76 }
77 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu:nth-child(4) > ul.mega-sub-menu{ 77 .mega-sub-menu:has(.mega-menu-columns-6-of-12){
78 width: 53% !important;
79
80 }
81 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu:nth-child(2) > ul.mega-sub-menu{
82
83 }
84 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu:nth-child(3) > ul.mega-sub-menu{
78 left: unset !important; 85 left: unset !important;
79 right: 0rem !important; 86 }
87 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu:nth-child(4) > ul.mega-sub-menu{
88 // left: unset !important;
89 //right: 0rem !important;
80 } 90 }
81 91
82 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu:nth-child(5) > ul.mega-sub-menu{ 92 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu:nth-child(5) > ul.mega-sub-menu{
83 width: 80% !important;
84 left: unset !important; 93 left: unset !important;
85 right: 0rem !important; 94 right: 0rem !important;
86 } 95 }
...@@ -102,23 +111,39 @@ ...@@ -102,23 +111,39 @@
102 color:#000; 111 color:#000;
103 text-decoration: none; 112 text-decoration: none;
104 white-space: break-spaces; 113 white-space: break-spaces;
105 font-size: 18px; 114 font-size: 18px !important;
115 line-height: 24px !important;
106 font-weight: 400; 116 font-weight: 400;
107 font-family: "PT Sans",sans-serif; 117 font-family: "PT Sans",sans-serif;
108 font-weight:bold 118 font-weight:bold
109 } 119 }
120 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu .mega-description-group .mega-menu-description{
121 margin-top: 3px !important;
122 }
123 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-title,
124 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-title,
125 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link .mega-menu-title {
126 font-size: 18px !important;
127 line-height: 24px !important;
128
129 }
110 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover .mega-menu-title { 130 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover .mega-menu-title {
111 text-decoration: underline; 131 text-decoration: underline;
112 font-weight:bold; 132 font-weight:bold;
113 color:#000; 133 color:#000;
134 font-size: 18px !important;
135 line-height: 24px !important;
114 } 136 }
115 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover .mega-menu-description { 137 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover .mega-menu-description {
116 color:#000; 138 color:#000;
139 margin-top: 3px;
117 } 140 }
118 141
119 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item.break-here > a.mega-menu-link { 142 #mega-menu-wrap-primary #mega-menu-primary > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item.break-here > a.mega-menu-link {
120 font-size:18px; 143 font-size:18px;
144 line-height: 21px;
121 font-family: "PT Sans",sans-serif; 145 font-family: "PT Sans",sans-serif;
146 text-transform: uppercase;
122 } 147 }
123 148
124 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-description{ 149 #mega-menu-wrap-primary #mega-menu-primary a.mega-menu-link .mega-description-group .mega-menu-description{
...@@ -275,9 +300,14 @@ ...@@ -275,9 +300,14 @@
275 right: 0rem; 300 right: 0rem;
276 position:absolute; 301 position:absolute;
277 background: transparent; 302 background: transparent;
303
278 } 304 }
279 #mega-menu-wrap-primary .mega-menu-toggle{ 305 #mega-menu-wrap-primary .mega-menu-toggle{
280 background: transparent; 306 background: transparent;
307
308 }#mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-right{
309 z-index: 9999;
310 position: relative;
281 } 311 }
282 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-right .mega-toggle-block:only-child{ 312 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-blocks-right .mega-toggle-block:only-child{
283 background-color: #EE0000; 313 background-color: #EE0000;
...@@ -389,7 +419,7 @@ ...@@ -389,7 +419,7 @@
389 font-size: 1.8rem; 419 font-size: 1.8rem;
390 font-weight: 700; 420 font-weight: 700;
391 color: #fff; 421 color: #fff;
392 margin: 0 0 0 0.6rem; 422 margin: 0 0 0 0.58rem;
393 line-height: 1.3625rem; 423 line-height: 1.3625rem;
394 } 424 }
395 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-block-3:after { 425 #mega-menu-wrap-primary .mega-menu-toggle .mega-toggle-block-3:after {
...@@ -421,8 +451,20 @@ ...@@ -421,8 +451,20 @@
421 .break-here{ 451 .break-here{
422 .mega-menu-title{ 452 .mega-menu-title{
423 font-size: 20px !important; 453 font-size: 20px !important;
454 text-transform: uppercase;
424 } 455 }
425 } 456 }
457 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row .mega-menu-column > ul.mega-sub-menu > li.mega-menu-item{
458 padding: 0px 15px;
459 }
460 }
461
462 @media only screen and (max-width: 1000px){
463 #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu, #mega-menu-wrap-primary #mega-menu-primary li.mega-menu-megamenu.mega-menu-item.mega-toggle-on ul.mega-sub-menu {
464 display: block;
465 margin-bottom: 10px !important;
466 padding-top: 0px !important;
467 }
426 } 468 }
427 .admin-bar{ 469 .admin-bar{
428 .back-one-level{ 470 .back-one-level{
......
...@@ -58,6 +58,8 @@ ...@@ -58,6 +58,8 @@
58 } 58 }
59 } 59 }
60 } 60 }
61
62
61 .search-box:hover, 63 .search-box:hover,
62 .search-box:focus-within{ 64 .search-box:focus-within{
63 width: 100%; 65 width: 100%;
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
27 list-style: none; 27 list-style: none;
28 padding:0; 28 padding:0;
29 margin:0; 29 margin:0;
30 gap: 12px; 30 gap: 24px;
31 @media only screen and (max-width: 67.063rem) { 31 @media only screen and (max-width: 67.063rem) {
32 flex-direction: row; 32 flex-direction: row;
33 padding-left: 0px !important; 33 padding-left: 0px !important;
...@@ -65,11 +65,19 @@ ...@@ -65,11 +65,19 @@
65 max-height: 291px; 65 max-height: 291px;
66 overflow: hidden; 66 overflow: hidden;
67 position: relative; 67 position: relative;
68 display: flex;
69 justify-content: center;
70 align-items: center;
71 overflow: hidden
68 } 72 }
69 img { 73 img {
70 height: 100%; 74 object-fit: contain;
71 width: 100%; 75 min-width: 100%;
72 object-fit: cover; 76 min-height: 100%;
77 width: auto;
78 height: auto;
79 max-width: 100%;
80 max-height: 100%;
73 transition: all 0.5s ease-in-out; 81 transition: all 0.5s ease-in-out;
74 } 82 }
75 a { 83 a {
...@@ -119,10 +127,10 @@ ...@@ -119,10 +127,10 @@
119 127
120 128
121 .article-card { 129 .article-card {
122 max-width: 31rem; 130 //max-width: 31rem;
123 min-width: 31rem; 131 // min-width: 31rem;
124 min-height: 8.438rem; 132 min-height: 8.438rem;
125 margin-right: 12px; 133 margin-right: 24px;
126 a { 134 a {
127 color:white; 135 color:white;
128 gap: 1.625rem; 136 gap: 1.625rem;
...@@ -170,7 +178,7 @@ ...@@ -170,7 +178,7 @@
170 font-weight: bold; 178 font-weight: bold;
171 margin:0; 179 margin:0;
172 font-size: 22px; 180 font-size: 22px;
173 margin-bottom:10px; 181 margin-bottom:0px;
174 line-height: 28px !important; 182 line-height: 28px !important;
175 max-height: 5rem; 183 max-height: 5rem;
176 overflow: hidden; 184 overflow: hidden;
......
...@@ -161,6 +161,9 @@ ...@@ -161,6 +161,9 @@
161 } 161 }
162 } 162 }
163 } 163 }
164 a[target=_blank]:after{
165 display: none;
166 }
164 } 167 }
165 168
166 .photo{ 169 .photo{
......
...@@ -167,6 +167,8 @@ ...@@ -167,6 +167,8 @@
167 .select2-selection__rendered{ 167 .select2-selection__rendered{
168 background-color: #fff; 168 background-color: #fff;
169 border: 1px solid #fff; 169 border: 1px solid #fff;
170 padding: 0px 0px 0px 0px;
171 margin: 0px;
170 } 172 }
171 173
172 .select2-container--default.select2-container--focus .select2-selection--multiple{ 174 .select2-container--default.select2-container--focus .select2-selection--multiple{
...@@ -190,6 +192,7 @@ ...@@ -190,6 +192,7 @@
190 .select2-selection__rendered{ 192 .select2-selection__rendered{
191 margin-right: 0px; 193 margin-right: 0px;
192 padding-right: 0px; 194 padding-right: 0px;
195
193 } 196 }
194 197
195 .select2-container--default .select2-search--inline .select2-search__field{ 198 .select2-container--default .select2-search--inline .select2-search__field{
...@@ -515,6 +518,7 @@ ul.sf_date_field { ...@@ -515,6 +518,7 @@ ul.sf_date_field {
515 .select2-selection__rendered{ 518 .select2-selection__rendered{
516 margin-right: 0px; 519 margin-right: 0px;
517 padding-right: 0px; 520 padding-right: 0px;
521 padding-left: 0px;
518 } 522 }
519 .select2-container--default .select2-selection--multiple, 523 .select2-container--default .select2-selection--multiple,
520 .select2-selection__rendered{ 524 .select2-selection__rendered{
...@@ -528,10 +532,13 @@ ul.sf_date_field { ...@@ -528,10 +532,13 @@ ul.sf_date_field {
528 } 532 }
529 .select2-search.select2-search--inline, 533 .select2-search.select2-search--inline,
530 .select2-container{ 534 .select2-container{
531 width: 100% !important; 535 width: 101% !important;
532 margin-top: 0px; 536 margin-top: 0px;
533 padding-top: 0px; 537 padding-top: 0px;
534 padding-bottom: 0px; 538 padding-bottom: 0px;
539 @media screen and (max-width: 56.25rem) {
540 width: 100% !important;
541 }
535 } 542 }
536 .select2-selection__choice{ 543 .select2-selection__choice{
537 width: auto !important; 544 width: auto !important;
...@@ -1063,4 +1070,19 @@ ul.sf_date_field { ...@@ -1063,4 +1070,19 @@ ul.sf_date_field {
1063 1070
1064 .otgs-development-site-front-end{ 1071 .otgs-development-site-front-end{
1065 display: none !important; 1072 display: none !important;
1073 }
1074
1075 #search-wrapper{
1076 .container{
1077 @media screen and (max-width: 1067px) {
1078 margin: 0rem 1.875rem 0 1.875rem;
1079 }
1080 @media screen and (max-width:48.875rem) {
1081 margin: 0rem;
1082 }
1083 }
1084 }
1085
1086 .admin-bar .select2-container--open .select2-dropdown{
1087 top:32px;
1066 } 1088 }
...\ No newline at end of file ...\ No newline at end of file
......
1 .news-search{ 1 .news-search{
2 margin-top: 0px !important; 2 margin-top: 0px !important;
3 @media only screen and (max-width: 48.875rem) {
4 margin-top: 20px !important;
5 }
3 6
4 7
5 h1{ 8 h1{
......
...@@ -84,6 +84,9 @@ ...@@ -84,6 +84,9 @@
84 } 84 }
85 } 85 }
86 } 86 }
87 a[target=_blank]:after{
88 display: none;
89 }
87 90
88 h2.PDF{ 91 h2.PDF{
89 &:before { 92 &:before {
......
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
2 Theme Name: MSF CA Child 2 Theme Name: MSF CA Child
3 Author: Tenzing Communications 3 Author: Tenzing Communications
4 Template: msf-ca 4 Template: msf-ca
5 Version: 1.0.5307 5 Version: 1.0.5
6 */ 6 */
...\ No newline at end of file ...\ No newline at end of file
......