| 1 |
<?php |
| 2 |
|
| 3 |
namespace ResponsiveMenu\View; |
| 4 |
|
| 5 |
use ResponsiveMenu\Factories\CssFactory; |
| 6 |
use ResponsiveMenu\Factories\JsFactory; |
| 7 |
use ResponsiveMenu\Collections\OptionsCollection; |
| 8 |
use ResponsiveMenu\ViewModels\Menu; |
| 9 |
use ResponsiveMenu\ViewModels\Button; |
| 10 |
|
| 11 |
class FrontView implements View { |
| 12 |
|
| 13 |
public function __construct(JsFactory $js, CssFactory $css) { |
| 14 |
$this->js = $js; |
| 15 |
$this->css = $css; |
| 16 |
} |
| 17 |
|
| 18 |
public function render($location, $l = []) { |
| 19 |
add_action('wp_footer', function() use ($location, $l) { |
| 20 |
include dirname(dirname(dirname(__FILE__))) . '/views/' . $location . '.phtml'; |
| 21 |
}); |
| 22 |
} |
| 23 |
|
| 24 |
public function make($location, $l = []) { |
| 25 |
ob_start(); |
| 26 |
include dirname(dirname(dirname(__FILE__))) . '/views/' . $location . '.phtml'; |
| 27 |
$output = ob_get_contents(); |
| 28 |
ob_end_clean(); |
| 29 |
return $output; |
| 30 |
} |
| 31 |
|
| 32 |
public function echoOrIncludeScripts(OptionsCollection $options) { |
| 33 |
|
| 34 |
$css = $this->css->build($options); |
| 35 |
$js = $this->js->build($options); |
| 36 |
|
| 37 |
add_filter('body_class', function($classes) use($options) { |
| 38 |
$classes[] = 'responsive-menu-' . $options['animation_type'] . '-' . $options['menu_appear_from']; |
| 39 |
return $classes; |
| 40 |
}); |
| 41 |
|
| 42 |
wp_enqueue_script('jquery'); |
| 43 |
|
| 44 |
if($options['external_files'] == 'on') : |
| 45 |
$data_folder_dir = plugins_url(). '/responsive-menu-data'; |
| 46 |
$css_file = $data_folder_dir . '/css/responsive-menu-' . get_current_blog_id() . '.css'; |
| 47 |
$js_file = $data_folder_dir . '/js/responsive-menu-' . get_current_blog_id() . '.js'; |
| 48 |
wp_enqueue_style('responsive-menu', $css_file, null, false); |
| 49 |
wp_enqueue_script('responsive-menu', $js_file, ['jquery'], false, $options['scripts_in_footer'] == 'on' ? true : false); |
| 50 |
else : |
| 51 |
add_action('wp_head', function() use ($css) { |
| 52 |
echo '<style>' . $css . '</style>'; |
| 53 |
}, 100); |
| 54 |
add_action($options['scripts_in_footer'] == 'on' ? 'wp_footer' : 'wp_head', function() use ($js) { |
| 55 |
echo '<script>' . $js . '</script>'; |
| 56 |
}, 100); |
| 57 |
endif; |
| 58 |
} |
| 59 |
|
| 60 |
public function addShortcode($options, Button $button, Menu $menu) { |
| 61 |
add_shortcode('responsive_menu', function($atts) use($options, $button, $menu) { |
| 62 |
|
| 63 |
if($atts) |
| 64 |
array_walk($atts, function($a, $b) use ($options) { $options[$b]->setValue($a); }); |
| 65 |
|
| 66 |
$html = $this->make('button', ['options' => $options, 'button' => $button->getHtml($options)]); |
| 67 |
|
| 68 |
return $html . $this->make('menu', ['options' => $options, 'menu' => $menu->getHtml($options)]); |
| 69 |
|
| 70 |
}); |
| 71 |
} |
| 72 |
|
| 73 |
} |
| 74 |
|