Sin descripción

Handlebars.php 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace MailPoet\Twig;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoetVendor\Twig\Extension\AbstractExtension;
  5. use MailPoetVendor\Twig\TwigFunction;
  6. class Handlebars extends AbstractExtension {
  7. public function getFunctions() {
  8. return [
  9. new TwigFunction(
  10. 'partial',
  11. [
  12. $this,
  13. 'generatePartial',
  14. ],
  15. [
  16. 'needs_environment' => true,
  17. 'needs_context' => true,
  18. 'is_safe' => ['all'],
  19. ]
  20. ),
  21. ];
  22. }
  23. public function generatePartial($env, $context) {
  24. // get arguments (minus env & $context)
  25. $args = array_slice(func_get_args(), 2);
  26. $argsCount = count($args);
  27. // default values
  28. $alias = null;
  29. switch ($argsCount) {
  30. case 2:
  31. list($id, $file) = $args;
  32. break;
  33. case 3:
  34. list($id, $file, $alias) = $args;
  35. break;
  36. default:
  37. return;
  38. }
  39. $renderedTemplate = \MailPoetVendor\twig_include($env, $context, $file);
  40. $output = <<<EOL
  41. <script id="$id" type="text/x-handlebars-template">
  42. $renderedTemplate
  43. </script>
  44. EOL;
  45. if ($alias !== null) {
  46. $output .= <<<EOL
  47. <script type="text/javascript">
  48. jQuery(function($) {
  49. $(function() {
  50. Handlebars.registerPartial(
  51. '$alias',
  52. jQuery('#$id').html()
  53. );
  54. });
  55. });
  56. </script>
  57. EOL;
  58. }
  59. return $output;
  60. }
  61. }