summaryrefslogtreecommitdiff
path: root/lib/phptal/PHPTAL/Php/Attribute/TAL/Replace.php
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2016-10-31 21:58:33 +0100
committeremkael <emkael@tlen.pl>2016-10-31 21:59:22 +0100
commitd216b3147bc3f37cf2337acab5767c6a4f74aa2e (patch)
tree6090989e5071db101a1112131e2b075a02dccbc4 /lib/phptal/PHPTAL/Php/Attribute/TAL/Replace.php
parentb23bfbb17d1d5f6852a1690f246a84c2d38ae969 (diff)
* PHPTAL library
Diffstat (limited to 'lib/phptal/PHPTAL/Php/Attribute/TAL/Replace.php')
-rw-r--r--lib/phptal/PHPTAL/Php/Attribute/TAL/Replace.php117
1 files changed, 117 insertions, 0 deletions
diff --git a/lib/phptal/PHPTAL/Php/Attribute/TAL/Replace.php b/lib/phptal/PHPTAL/Php/Attribute/TAL/Replace.php
new file mode 100644
index 0000000..b72cafa
--- /dev/null
+++ b/lib/phptal/PHPTAL/Php/Attribute/TAL/Replace.php
@@ -0,0 +1,117 @@
+<?php
+/**
+ * PHPTAL templating engine
+ *
+ * PHP Version 5
+ *
+ * @category HTML
+ * @package PHPTAL
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ * @author Kornel LesiƄski <kornel@aardvarkmedia.co.uk>
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License
+ * @version SVN: $Id$
+ * @link http://phptal.org/
+ */
+/**
+ * TAL Specifications 1.4
+ *
+ * argument ::= (['text'] | 'structure') expression
+ *
+ * Default behaviour : text
+ *
+ * <span tal:replace="template/title">Title</span>
+ * <span tal:replace="text template/title">Title</span>
+ * <span tal:replace="structure table" />
+ * <span tal:replace="nothing">This element is a comment.</span>
+ *
+ *
+ *
+ * @package PHPTAL
+ * @subpackage Php.attribute.tal
+ * @author Laurent Bedubourg <lbedubourg@motion-twin.com>
+ */
+class PHPTAL_Php_Attribute_TAL_Replace
+extends PHPTAL_Php_Attribute
+implements PHPTAL_Php_TalesChainReader
+{
+ public function before(PHPTAL_Php_CodeWriter $codewriter)
+ {
+ // tal:replace="" => do nothing and ignore node
+ if (trim($this->expression) == "") {
+ return;
+ }
+
+ $expression = $this->extractEchoType($this->expression);
+ $code = $codewriter->evaluateExpression($expression);
+
+ // chained expression
+ if (is_array($code)) {
+ return $this->replaceByChainedExpression($codewriter, $code);
+ }
+
+ // nothing do nothing
+ if ($code == PHPTAL_Php_TalesInternal::NOTHING_KEYWORD) {
+ return;
+ }
+
+ // default generate default tag content
+ if ($code == PHPTAL_Php_TalesInternal::DEFAULT_KEYWORD) {
+ return $this->generateDefault($codewriter);
+ }
+
+ // replace tag with result of expression
+ $this->doEchoAttribute($codewriter, $code);
+ }
+
+ public function after(PHPTAL_Php_CodeWriter $codewriter)
+ {
+ }
+
+ /**
+ * support expressions like "foo | bar"
+ */
+ private function replaceByChainedExpression(PHPTAL_Php_CodeWriter $codewriter, $expArray)
+ {
+ $executor = new PHPTAL_Php_TalesChainExecutor(
+ $codewriter, $expArray, $this
+ );
+ }
+
+ public function talesChainNothingKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+ {
+ $executor->continueChain();
+ }
+
+ public function talesChainDefaultKeyword(PHPTAL_Php_TalesChainExecutor $executor)
+ {
+ $executor->doElse();
+ $this->generateDefault($executor->getCodeWriter());
+ $executor->breakChain();
+ }
+
+ public function talesChainPart(PHPTAL_Php_TalesChainExecutor $executor, $exp, $islast)
+ {
+ if (!$islast) {
+ $var = $executor->getCodeWriter()->createTempVariable();
+ $executor->doIf('!phptal_isempty('.$var.' = '.$exp.')');
+ $this->doEchoAttribute($executor->getCodeWriter(), $var);
+ $executor->getCodeWriter()->recycleTempVariable($var);
+ } else {
+ $executor->doElse();
+ $this->doEchoAttribute($executor->getCodeWriter(), $exp);
+ }
+ }
+
+ /**
+ * don't replace - re-generate default content
+ */
+ private function generateDefault(PHPTAL_Php_CodeWriter $codewriter)
+ {
+ $this->phpelement->generateSurroundHead($codewriter);
+ $this->phpelement->generateHead($codewriter);
+ $this->phpelement->generateContent($codewriter);
+ $this->phpelement->generateFoot($codewriter);
+ $this->phpelement->generateSurroundFoot($codewriter);
+ }
+}
+