/** * Get the markup for an * svg sprite icon * * @param string $icon * @param array $options * * @return string */ public static function get_icon($icon, $options = array()) { if (is_array($icon) && isset($icon['icon'])) { $icon = $icon['icon']; } $attrs = array_merge(array('role' => 'img', 'class' => 'icon'), $options); $svg_use = MOZ_Html::get_element('use', array('xmlns:xlink' => 'http://www.w3.org/1999/xlink', 'xlink:href' => "#icon-{$icon}")); return MOZ_Html::get_element('svg', $attrs, $svg_use); }
/** * Returns pagination HTML * for the currently * active loop * * @param array|string $args * * @return string */ public static function get_pagination($args = array()) { $args = wp_parse_args($args, array('prev_next' => false)); $pagination_items = array_filter(self::get_pagination_arr($args), function ($item) { return false !== $item['text']; }); if (empty($pagination_items)) { return ''; } ob_start(); ?> <nav class="pagination"> <ul class="pagination__list"> <?php foreach ($pagination_items as $item) { ?> <li class="pagination__list-item"> <?php $classes = 'pagination__item'; if ('page' === $item['type']) { $classes .= " pagination__item--{$item['type']}"; } $tag = 'span'; $attrs = array('class' => $classes); if (false !== $item['link'] && '#' !== $item['link']) { $tag = 'a'; $attrs['href'] = $item['link']; } MOZ_Html::element($tag, $attrs, $item['text']); ?> </li> <?php } ?> </ul> </nav> <?php return ob_get_clean(); }
/** * Return the breadcrumbs HTML * based on the given menu * location * * @param string $theme_location * @param array $options * * @return string */ public static function get_breadcrumbs($theme_location = 'primary', $options = array()) { $breadcrumbs_items = self::get_breadcrumbs_arr($theme_location, $options); if (!$breadcrumbs_items || empty($breadcrumbs_items)) { return ''; } ob_start(); ?> <nav class="breadcrumbs"> <ul class="breadcrumbs__list"> <?php foreach ($breadcrumbs_items as $item) { ?> <li class="breadcrumbs__list-item"> <?php $classes = 'breadcrumbs__item'; if ($item['current']) { $classes .= ' breadcrumbs__item--current'; } $tag = 'span'; $attrs = array('class' => $classes); if (false !== $item['link'] && '#' !== $item['link']) { $tag = 'a'; $attrs['href'] = $item['link']; } MOZ_Html::element($tag, $attrs, $item['text']); ?> </li> <?php } ?> </ul> </nav> <?php return ob_get_clean(); }
/** * Get the markup for an image * using srcset and sizes * * @param int $image * @param array $sources * @param array $sizes * @param array|null $attrs * @param array|null $flags * * @returns string */ public static function get_image($image, $sources, $sizes, $attrs = array(), $flags = array()) { if (!wp_attachment_is_image($image)) { return false; } $srcset = array(); foreach ($sources as $size) { if ($src = wp_get_attachment_image_src($image, $size, false)) { $srcset[] = "{$src[0]} {$src[1]}w {$src[2]}h"; } } if (empty($srcset)) { return false; } $img_attrs = self::maybe_lazify($flags, array_merge(array('srcset' => implode(', ', $srcset), 'sizes' => implode(', ', $sizes), 'alt' => self::get_img_alt($image)), (array) $attrs)); return MOZ_Html::get_sc_element('img', $img_attrs); }
/** * Get an anchor tag * * @param array $data * @param array $attrs * @param string $content * * @return string */ public static function get_link($data = null, $attrs = array(), $content = '') { if (!empty($data) && ($href = self::get_link_href($data))) { $attrs['href'] = $href; } return MOZ_Html::get_element('a', self::add_link_target($attrs), $content); }
/** * Start the element output. * * @see Walker_Nav_Menu::start_el() * * @since 1.0 * * @param string $output Passed by reference. Used to append additional content. * @param object $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param object|array $args An array of arguments. @see wp_nav_menu() * @param int $id Current item ID. */ public function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { /// Menu Item Opening $item_classes = array('__item'); // add classes to current/parent/ancestor items if (isset($item->current) && $item->current) { $item_classes[] = '__item--current'; } if (isset($item->current_item_ancestor) && $item->current_item_ancestor) { $item_classes[] = '__item--ancestor'; } if (isset($item->current_item_parent) && $item->current_item_parent) { $item_classes[] = '__item--parent'; } if (isset($item->has_children) && $item->has_children) { $item_classes[] = '__item--has-children'; } // BEM-ify the given sub classes $item_classes_str = MOZ_BEM::get_bem($args->menu_class, $item_classes); if (isset($item->classes[0]) && !empty($item->classes[0])) { // the first item in the 'classes' array is the user-set class // the rest of the classes are superfluous $item_classes_str .= " {$item->classes[0]}"; } $output .= "<li class=\"{$item_classes_str}\">"; /// Menu Link $attrs = array_filter(array('title' => $item->attr_title, 'target' => $item->target, 'rel' => $item->xfn, 'href' => !empty($item->url) && '#' !== $item->url ? $item->url : '', 'class' => "{$args->menu_class}__link"), function ($attr) { // filter out the empty // attributes return !empty($attr); }); $tag = isset($attrs['href']) ? 'a' : 'span'; $link_content = $args->link_before . apply_filters('the_title', $item->title, $item->ID) . $args->link_after; $output .= $args->before; $output .= MOZ_Html::get_element($tag, $attrs, $link_content); $output .= $args->after; }