/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, 'br'); $element->setInline(); $element->staticChildren[] = $this->renderedChildren; return $element->render(); }
/** * @param WikiLingo\Expression\Plugin $plugin * @param string $body * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return string */ public function render(WikiLingo\Expression\Plugin &$plugin, &$body = '', &$renderer, &$parser) { $plugin->allowLineAfter = false; $id = $plugin->id(); $parser->scripts->addScript(<<<JS \$(function() { \tvar tabs = \$('#{$id}'); \ttabs.tabs(); }); JS ); if (!empty($plugin->privateAttributes['titles'])) { $ul = $renderer->helper('ul'); foreach ($plugin->privateAttributes['titles'] as $tabId => $title) { $a = $renderer->helper('a'); $a->attributes['href'] = '#' . $tabId; $a->staticChildren[] = $title; $li = $renderer->helper('li'); $li->children[] = $a; $ul->children[] = $li; } $body = $ul->render() . $body; } $tabs = parent::render($plugin, $body, $renderer, $parser); return $tabs; }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, 'div'); $element->classes[] = 'title'; $element->staticChildren[] = $this->renderedChildren; return $element->render(); }
/** * @param WikiLingo\Expression\Plugin $plugin * @param string $body * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return string */ public function render(WikiLingo\Expression\Plugin &$plugin, &$body, &$renderer, &$parser) { $header = $renderer->helper('h3'); $header->staticChildren[] = $plugin->parameter('title'); $accordion = parent::render($plugin, $body, $renderer, $parser); return $header->render() . $accordion; }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, 'span'); $element->attributes['style'] = 'color:' . $this->color . ';'; $element->staticChildren[] = $this->renderedChildren; return $element->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, "tr"); foreach ($this->columns as $column) { $element->staticChildren[] = $column->render($renderer, $parser); } return $element->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return string */ public function render($renderer, $parser) { $elementTerm = $renderer->element(__CLASS__, 'dt'); $elementTerm->staticChildren[] = $this->term; $elementDescription = $renderer->element(__CLASS__, 'dd'); $elementDescription->staticChildren[] = $this->description; return $elementTerm->render() . $elementDescription->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, "td"); $element->classes[] = 'table-cell'; $parser->scripts->addCss('td.table-cell{min-width:50px;}'); $element->staticChildren[] = $this->renderedChildren; return $element->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $tableParser = new ExpressionParser\Table(); $element = $renderer->element(__CLASS__, 'table'); $table = $tableParser->parse($this->renderedChildren); $element->staticChildren[] = $table->render($renderer, $parser); $result = $element->render(); return $result; }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { if ($parser->wysiwyg) { $element = $renderer->element(__CLASS__, 'span'); $element->staticChildren[] = $this->parsed->text; return $element->render(); } return $this->parsed->text; }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = Type::Element($renderer->element(__CLASS__, 'div')); $parser->scripts->addCss('.center {text-align: center ! important;}'); $element->classes[] = 'center'; $element->staticChildren[] = $this->renderedChildren; $rendered = $element->render(); return $rendered; }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $id = $this->id(); $element = $renderer->element(__CLASS__, 'textarea'); $element->attributes['id'] = $id; $element->classes[] = 'Code'; $code = $this->parsed->text; $modeIsWikiLingo = false; $mode = null; $element->attributes['disabled'] = 'true'; if ($code[0] !== ' ') { $pattern = '/^(?P<mode>[a-zA-Z0-9]+)/'; preg_match($pattern, $code, $matches); if (!empty($matches['mode'])) { //if the mode is not set, normalize it to lower-case $possibleMode = strtolower($matches['mode']); if ($possibleMode == 'wikilingo') { $modeIsWikiLingo = true; $mode = (object) array("mode" => "wikiLingo"); } else { if (!empty(self::$modes[$possibleMode])) { $mode = self::$modes[$possibleMode]; } } } } if ($mode != null) { $modeName = $mode->mode; $code = substr($code, strlen($modeName) + 1); $element->detailedAttributes['data-mode'] = $modeName; $parser->scripts->addScriptLocation("~codemirror/codemirror/lib/codemirror.js")->addCssLocation("~codemirror/codemirror/lib/codemirror.css")->addCss(<<<CSS .CodeMirror { height: auto; } .CodeMirror-scroll { overflow-y: hidden; overflow-x: auto; } CSS )->addScript(<<<JS var editor = CodeMirror.fromTextArea(document.getElementById('{$id}'), { mode:'{$modeName}', lineNumbers: false, readOnly: true }); JS ); if ($modeIsWikiLingo) { $parser->scripts->addCssLocation("~wikilingo/codemirror/wikiLingo.css")->addScriptLocation("~wikilingo/codemirror/wikiLingo.js"); } else { $parser->scripts->addScriptLocation("~codemirror/codemirror/mode/{$modeName}/{$modeName}.js"); } } $element->staticChildren[] = $code; return $element->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { if ($this->allowed) { return $this->parsed->text; } else { if (isset($parser->wysiwyg)) { $element = $renderer->element(__CLASS__, "code"); $element->staticChildren[] = htmlspecialchars($this->parsed->text); $parser->events->triggerExpressionTagRender($element, $this); return $element->render(); } return htmlspecialchars($this->parsed->text); } }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return string */ public function render($renderer, $parser) { $tagType = 'h' . $this->count; $children = ''; foreach ($this->parsed->children as $child) { $children .= $parser->renderer->render($child); } if ($this->pointer) { $tagType = 'a'; $children = strip_tags($children); } $element = Type::Element($renderer->element(__CLASS__, $tagType)); $element->staticChildren[] = $children; if (isset($this->modifier)) { $element->detailedAttributes['data-modifier'] = $this->modifier; //TODO: add in js to make expandable switch ($this->modifier) { case 'toggle': $helper = Type::Helper($renderer->helper('a')); $helper->staticChildren[] = '[+]'; $helper->attributes['href'] = '#'; $element->staticChildren[] = $helper->render(); break; case 'hidden': $helper = Type::Helper($renderer->helper('a')); $helper->staticChildren[] = '[-]'; $helper->attributes['href'] = '#'; $element->staticChildren[] = $helper->render(); break; } } if ($this->id == null || $this->block->variableContext != null) { $id = trim(preg_replace("/[^0-9a-zA-Z_]+/", "-", trim(strip_tags($children))), '-'); $id = $parser->events->triggerExpressionBlockTypeHeaderIdLookup($id, $this); $this->id = $id; if (!isset(self::$ids[$id])) { self::$ids[$id] = 1; } else { $this->id .= self::$ids[$id]; self::$ids[$id]++; } } if ($this->pointer) { $element->attributes['href'] = '#' . urlencode($this->id); } else { $element->attributes['id'] = $this->id; } $header = $element->render(); return $header; }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, 'a'); $sides = explode("|", $this->renderedChildren); if (isset($sides[1])) { $element->detailedAttributes['data-href'] = $href = array_shift($sides); $text = implode('|', $sides); } else { $href = $this->renderedChildren; $text = $this->renderedChildren; } $element->staticChildren[] = $text; $element->attributes['href'] = $href; return $element->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, 'a'); $sides = explode("|", $this->renderedChildren); if (isset($sides[1])) { $text = $sides[1]; $href = $sides[0]; } else { $text = $this->renderedChildren; $href = $this->renderedChildren; } $element->staticChildren[] = $text; $element->attributes['href'] = $href; $element->detailedAttributes['data-wiki-link-type'] = $this->type; $parser->events->triggerExpressionWikiLinkTypeRender($element, $this); return $element->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $scripts = $parser->scripts; $allowWhiteSpace = true; if ($parent = $this->parent()) { $parentExpression = $parent->expression; $allowWhiteSpace = $parentExpression->allowWhiteSpace; } $scripts->addCss("span.whitespace {white-space: pre;}"); $element = $renderer->element(__CLASS__, 'span'); if ($allowWhiteSpace == false) { $parser->scripts->addCss("span.hidden {display: none;content: ''}"); $element->classes[] = 'hidden'; } $element->classes[] = 'whitespace'; $element->staticChildren[] = $this->parsed->text; return $element->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, 'span'); $key = $element->detailedAttributes["key"] = substr($this->parsed->text, 1, -1); $set = false; if (empty($this->variableContext)) { $parser->events->triggerExpressionVariableLookup($key, $element, $this); $set = true; } else { $i = $parser->variableContextStack->last()->i; if (isset($this->variableContext[$i]) && isset($this->variableContext[$i][$key])) { $element->staticChildren[] = $this->variableContext[$i][$key]; $set = true; } } if ($set === false) { $element->staticChildren[] = $key; } return $element->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { if (!$parser->wysiwyg) { self::$renderedCount++; //FIRST //Bind initial render so that PastLink::$ui is set, this is only done once per parser render if (self::$renderedCount == 1) { $parser->events->bind(new Event\PostRender(function ($rendered) { PastLink::$ui = new FLP\UI($rendered); PastLink::$ui->setContextAsFuture(); })); } //EVERY //each child needs to be sent as a phrase to the ui $children = $this->renderedChildren; $parser->events->bind(new Event\PostRender(function ($rendered) use($children) { PastLink::$ui->addPhrase(new Phraser\Phrase($children)); })); $value = new FLP\Metadata(); $value->text = $children; FLP\Events::triggerMetadataLookup('', $value); $pair = new FLP\Pair($this->past, $value); FLP\Pairs::add($pair); $assembled = new FLP\PairAssembler(); $assembled->futureText = new Phraser\Phrase($children); $assembled->pastText = new Phraser\Phrase($pair->past->text); $assembled->pair = $pair; $assembled->increment(); self::$pairs[] = $assembled; //LAST //if this is the last item in the count, then setup the post-render, reset the counters if (self::$existingCount == self::$renderedCount) { $parser->events->bind(new Event\PostRender(function ($rendered) use($parser) { $rendered = PastLink::$ui->render(); $pairs = self::$pairs; $pairsJson = json_encode($pairs); $counts = json_encode(FLP\PairAssembler::$counts); //use an actual length, when more than 1, php turns from array to associative array, so there is no length $length = self::$existingCount; $parser->scripts->addScriptLocation("~flp/flp/scripts/flp.js")->addScriptLocation("~flp/flp/scripts/flp.Link.js")->addScript(<<<JS (function() { var counts = {$counts}, length = {$length}, flpData = {$pairsJson}, phrases = \$('span.phrases'), phrasesLookupTable = {}; for(var x = 0; x < length; x++){ if(!phrasesLookupTable[flpData[x].futureText.sanitized]){ phrasesLookupTable[flpData[x].futureText.sanitized] = []; } phrasesLookupTable[flpData[x].futureText.sanitized].push(flpData[x]); } for (var i = 0; i < {$length}; i++) { var pastLink = new flp.Link({ beginning: phrases.filter('span.pastlink-beginning' + i), middle: phrases.filter('span.pastlink' + i), end: phrases.filter('span.pastlink-end' + i), to: 'past', count: counts[flpData[i].futureText.sanitized], pairs: phrasesLookupTable[flpData[i].futureText.sanitized] }); flp.addPastLink(pastLink); } })(); JS ); })); FLP\SendToPast::send(); } } $element = $renderer->element(__CLASS__, 'span'); $element->staticChildren[] = $this->renderedChildren; $element->detailedAttributes['data-past'] = $this->past; $rendered = $element->render(); return $rendered; }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, "a"); $parser->events->triggerExpressionWordLinkRender($element, $this); return $element->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, 'pre'); $element->staticChildren[] = $this->parsed->text; return $element->render(); }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = Type::Element($renderer->element(__CLASS__, 'hr')); $element->setInline(); return $element->render(); }
/** * @param WikiLingo\Expression\Plugin $plugin * @param string $body * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return string */ public function render(WikiLingo\Expression\Plugin &$plugin, &$body = '', &$renderer, &$parser) { $plugin->allowLineAfter = false; $id = $plugin->id(); $anchors = array(); if (!$parser->wysiwyg) { if (!empty($plugin->privateAttributes['titles'])) { //menu $ul = Type::Helper($renderer->helper('ul')); $ul->attributes['id'] = $id . '-menu'; $i = 1; //anchors for sections foreach ($plugin->privateAttributes['titles'] as $sectionId => $title) { $link = Type::Helper($renderer->helper('span')); $link->attributes['href'] = $sectionId; $link->attributes['onclick'] = <<<JS \$.fn.fullpage.moveTo({$i}); return false; JS; $i++; //$anchors[] = $a->attributes['data-index'] = $i++; //$a->attributes['id'] = $sectionId . '-anchor'; $link->staticChildren[] = $title; $li = Type::Helper($renderer->helper('li')); $li->children[] = $link; $ul->children[] = $li; } $body .= $ul->render(); $anchorsJson = json_encode($anchors); Type::Scripts($parser->scripts)->addScriptLocation('~/bower_components/fullPage.js/jquery.fullPage.js')->addCssLocation('~/bower_components/fullPage.js/jquery.fullPage.css')->addScript(<<<JS \$(function() { \$.fn.fullpage({ anchors: {$anchorsJson}, easing: 'easeInOutQuad', scrollSpeed: 1100, menu: '#{$id}-menu' }); }); JS )->addCss(<<<CSS #{$id}-menu { height: 40px; left: 0; margin: 0; padding: 0; position: fixed; top: 0; width: 100%; list-style: none outside none; } #{$id}-menu li { background-color: rgba(255, 255, 255, 0.5); color: #000000; border-radius: 10px; display: inline-block; margin: 10px; } #{$id}-menu li.active { background-color: rgba(0, 0, 0, 0.5); color: #FFFFFF; } #{$id}-menu li span { display: block; padding: 9px 18px; text-decoration: none; color: inherit; cursor: pointer; } CSS ); } } $tabs = parent::render($plugin, $body, $renderer, $parser); return $tabs; }
/** * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return mixed|string */ public function render($renderer, $parser) { $element = $renderer->element(__CLASS__, 'span'); $element->staticChildren[] = htmlspecialchars($this->parsed->text); return $element->render(); }
/** * @param WikiLingo\Expression\Plugin $plugin * @param string $body * @param WikiLingo\Renderer $renderer * @param WikiLingo\Parser $parser * @return string */ public function render(WikiLingo\Expression\Plugin &$plugin, &$body = '', &$renderer, &$parser) { $elementName = $parser->wysiwyg && !empty($this->wysiwygTagType) ? $this->wysiwygTagType : $this->htmlTagType; $element = $renderer->element($this->expressionType, $elementName); $element->classes[] = (!empty($this->attributes['class']) ? $this->attributes['class'] . ' ' : '') . $plugin->type; $element->attributes['id'] = $id = $plugin->id(); $parser->plugins[] = $id; $style = $this->stylize($plugin->parametersRaw); if (!empty($style)) { $element->attributes['style'] = $style; } $this->attributeDefaults($plugin->attributes); foreach ($plugin->attributes as $attribute => $value) { $element->attributes[$attribute] = $value; } if ($parser->wysiwyg) { $parser->scripts->addScript(""); } $element->detailedAttributes += $this->detailedAttributes; $element->detailedAttributes['data-plugin-type'] = $plugin->type; $element->detailedAttributes['data-draggable'] = $this->draggable ? 'true' : 'false'; $element->detailedAttributes['data-plugin-parameters'] = empty($plugin->parametersRaw) ? null : urlencode(json_encode($plugin->parametersRaw)); $element->detailedAttributes['data-in-line'] = $plugin->inLine ? 'true' : 'false'; if ($plugin->inLine) { $element->detailedAttributes['contenteditable'] = 'false'; if ($this->hasHtmlBody == false && !$this->bodyIsAutoGenerated) { $element->setInline(); } } if (!empty($body)) { $element->staticChildren[] = $body; } $renderedPluginElement = $element->render(); return $renderedPluginElement; }