public function testComplexNestedTag() { $jade = <<<JADE div nav ul li a li a li a nav ul li a li a li a nav ul li a li a li a JADE; $this->assertEquals('<div><nav><ul><li><a></a></li><li><a></a></li><li><a></a></li></ul></nav><nav><ul><li><a></a></li><li><a></a></li><li><a></a></li></ul></nav><nav><ul><li><a></a></li><li><a></a></li><li><a></a></li></ul></nav></div>', $this->_compiler->compile($jade)); }
public function testComplexTagIdCombination() { $jade = <<<JADE #testContainer nav#testNav1 ul#testMenu1 li#testItem1 a#testLink1 li#testItem2 a#testLink2 li#testItem3 a#testLink3 nav#testNav2 ul#testMenu2 li#testItem4 a#testLink4 li#testItem5 a#testLink5 li#testItem6 a#testLink6 nav#testNav3 ul#testMenu3 li#testItem7 a#testLink7 li#testItem8 a#testLink8 li#testItem9 a#testLink9 JADE; $this->assertEquals('<div id="testContainer"><nav id="testNav1"><ul id="testMenu1"><li id="testItem1"><a id="testLink1"></a></li><li id="testItem2"><a id="testLink2"></a></li><li id="testItem3"><a id="testLink3"></a></li></ul></nav><nav id="testNav2"><ul id="testMenu2"><li id="testItem4"><a id="testLink4"></a></li><li id="testItem5"><a id="testLink5"></a></li><li id="testItem6"><a id="testLink6"></a></li></ul></nav><nav id="testNav3"><ul id="testMenu3"><li id="testItem7"><a id="testLink7"></a></li><li id="testItem8"><a id="testLink8"></a></li><li id="testItem9"><a id="testLink9"></a></li></ul></nav></div>', $this->_compiler->compile($jade)); }
public function testComplexTagClassCombination() { $jade = <<<JADE .test-container nav.test-nav ul.test-menu li.test-item a.test-link li.test-item a.test-link li.test-item a.test-link nav.test-nav ul.test-menu li.test-item a.test-link li.test-item a.test-link li.test-item a.test-link nav.test-nav ul.test-menu li.test-item a.test-link li.test-item a.test-link li.test-item a.test-link JADE; $this->assertEquals('<div class="test-container"><nav class="test-nav"><ul class="test-menu"><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li></ul></nav><nav class="test-nav"><ul class="test-menu"><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li></ul></nav><nav class="test-nav"><ul class="test-menu"><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li></ul></nav></div>', $this->_compiler->compile($jade)); }
public function testMultiLineCssFilter() { $jade = <<<JADE :css body, html { can-you: imagine; that: this; works: perfectly; } JADE; $this->assertEquals('<style>body, html { can-you: imagine; that: this; works: perfectly; }</style>', $this->_compiler->compile($jade)); }
public function tesComplexExpansion() { $jade = <<<JADE a: b: c d: .e: #f a: b: c(aa='bb'): d d: e: f: g: h d: e f: g: h JADE; $this->assertEquals("<input value=\"Line 1\rLine 2\">", $this->_compiler->compile($jade)); }
public function testComplexExpansion() { $jade = <<<JADE a: b: c d: .e: #f a: b: c(aa='bb'): d d: e f: g: h d: e f: g: h JADE; $this->assertEquals('<a><b><c><d><div class="e"><div id="f"></div></div></d></c></b></a><a><b><c aa="bb"><d><d><e><f><g><h></h></g></f></e></d><d><e><f><g><h></h></g></f></e></d></d></c></b></a>', $this->compiler->compile($jade)); }
public function convert($inputPath) { $this->prependOptions(['paths' => []]); $parser = new Parser(file_get_contents($inputPath), ['filename' => $inputPath, 'includes' => $this->getOption('paths')]); $compiler = new Compiler(!$this->getManager()->getOption('minify')); return $compiler->compile($parser->parse()); }
public function testDoWhileWithWhileChildren() { $this->setExpectedException(Compiler\Exception::class); $this->compiler->compile("do\n\tp Something\nwhile \$something\n\tp Anything"); }
$id = uniqid(); $path = SAVE_PATH . '/' . implode('/', str_split($id)) . '.jade'; } while (file_exists($path)); $dir = dirname($path); if (!is_dir($dir)) { mkdir($dir, 0755, true); } file_put_contents($path, $jade); echo json_encode(['success' => true, 'id' => $id]); exit; case 'compile': $compilerOptions = ['pretty' => isset($_POST['pretty']) ? $_POST['pretty'] === 'true' : false, 'standAlone' => isset($_POST['standAlone']) ? $_POST['standAlone'] === 'true' : false, 'allowImports' => false]; $compiler = new Compiler($compilerOptions); $result = null; try { $result = $compiler->compile($jade); } catch (\Exception $e) { echo json_encode(['success' => false, 'message' => "\n" . get_class($e) . "\n\n" . $e->getMessage()]); exit; } echo json_encode(['success' => true, 'output' => $result]); exit; case 'lex': $lexer = new Lexer(); $result = null; try { ob_start(); $lexer->dump($jade); $result = ob_get_clean(); } catch (\Exception $e) { echo json_encode(['success' => false, 'message' => "\n" . get_class($e) . "\n\n" . $e->getMessage()]);
public function testClassNestedExpansion() { $this->assertEquals('<div class="a b"><div class="c d">Hello, World!</div></div>', $this->compiler->compile(".a.b: .c.d\n\t| Hello, World!")); }
<?php include '../../vendor/autoload.php'; ini_set('display_errors', 1); ini_set('display_startup_errors', 1); ini_set('error_reporting', E_ALL | E_NOTICE); use Tale\Jade\Compiler; use Tale\Jade\Renderer; $minify = isset($_GET['minify']) ? true : false; $handleErrors = isset($_GET['withErrorHandler']) ? true : false; if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') { $compiler = new Compiler(['pretty' => !$minify, 'handleErrors' => $handleErrors, 'allowImports' => false]); $jade = isset($_POST['jade']) ? $_POST['jade'] : ''; header('Content-Type: text/plain; encoding=utf-8'); try { echo json_encode($compiler->compile(str_replace("\t", ' ', $jade))); } catch (Exception $e) { echo json_encode($e->getMessage()); } exit; } $renderer = new Renderer(['compiler' => ['pretty' => true], 'adapter' => 'file', 'adapterOptions' => ['lifeTime' => 0]]); $example = isset($_GET['example']) ? $_GET['example'] : 'welcome'; $exampleJade = ''; $example = preg_replace('/[^a-z0-9\\-]+/i', '', $example); if (file_exists(__DIR__ . '/examples/' . $example . '.jade')) { $exampleJade = file_get_contents(__DIR__ . '/examples/' . $example . '.jade'); } $action = isset($_GET['page']) ? preg_replace('/^[a-z0-9\\-]+$/i', '', $_GET['example']) : 'index'; $exampleJade = json_encode($exampleJade); $url = $_SERVER['PHP_SELF'];
public function testCarriageReturnEscaping() { $this->assertEquals("<input value=\"Line 1\rLine 2\">", $this->_compiler->compile('input(value="Line 1\\rLine 2")')); }
public function testStyleRepeation() { $this->assertEquals('<a style="first: first-value; second: second-value"></a>', $this->_compiler->compile('a(style="first: first-value", style=\'second: second-value\')')); }
/** * Compiles a Jade-string to PHTML. * * The result can then be evaluated, the best method is * a simple PHP include * * Use ->render() to get this done for you * * Before evaluating you should set a $__args variables * that will be passed through mixins. * It like a global scope. * * If you give it a path, the directory of that path will be used * for relative includes. * * @param string $input the jade input string * @param string|null $path the path for relative includes * * @return mixed|string A PHTML string containing HTML and PHP */ public function compile($input, $path = null) { return $this->_compiler->compile($input, $path); }
public function testIssue21() { $this->assertEquals('<?=$view->render(\'_search\', [\'model\' => $searchModel])?>', $this->_compiler->compile('!=$view->render(\'_search\', [\'model\' => $searchModel])')); }
public function testFileNotFound() { $this->setExpectedException(Compiler\Exception::class); $this->_renderer->compile('include non-existent-file'); $this->_renderer->compile('extends non-existent-file'); }
public function testUnclosedAttributeBlockOnMixinCall() { $this->setExpectedException(Lexer\Exception::class); $this->_compiler->compile('+some-mixin(abc, def'); }