1581a9aa1SJames Collins<?php 2581a9aa1SJames Collins/** 37935713eSJames Collins * Mikio Syntax Plugin: Box 4581a9aa1SJames Collins * 57935713eSJames Collins * @link http://github.com/nomadjimbob/mikioplugin 6581a9aa1SJames Collins * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 7581a9aa1SJames Collins * @author James Collins <james.collins@outlook.com.au> 8581a9aa1SJames Collins */ 9581a9aa1SJames Collinsif (!defined('DOKU_INC')) die(); 10581a9aa1SJames Collinsif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 11*3a0ad8d3SJames Collinsrequire_once(__DIR__.'/core.php'); 12581a9aa1SJames Collins 13581a9aa1SJames Collinsclass syntax_plugin_mikioplugin_box extends syntax_plugin_mikioplugin_core { 14581a9aa1SJames Collins public $tag = 'box'; 1543f781e0SJames Collins public $requires_tag = 'grid'; 167935713eSJames Collins public $hasEndTag = true; 177935713eSJames Collins public $options = array( 181766d43cSJames Collins 'attr' => array('type' => 'text'), 197935713eSJames Collins 'round' => array('type' => 'size', 'default' => '0'), 207935713eSJames Collins 'border-color' => array('type' => 'color', 'default' => ''), 211766d43cSJames Collins 'border-width' => array('type' => 'multisize', 'default' => ''), 227935713eSJames Collins 'reveal' => array('type' => 'boolean', 'default' => 'false'), 237935713eSJames Collins 'reveal-text' => array('type' => 'text', 'default' => 'Reveal'), 241766d43cSJames Collins 'url' => array('type' => 'url', 'default' => ''), 251766d43cSJames Collins 'color' => array('type' => 'color', 'default' => ''), 261766d43cSJames Collins 'padding' => array('type' => 'multisize', 'default' => ''), 271766d43cSJames Collins 'margin' => array('type' => 'multisize', 'default' => ''), 288127a956SJames Collins 'grid-row' => array('type' => 'text', 'default' => ''), 298127a956SJames Collins 'grid-row-start' => array('type' => 'number', 'default' => ''), 308127a956SJames Collins 'grid-row-end' => array('type' => 'number', 'default' => ''), 318127a956SJames Collins 'grid-row-span' => array('type' => 'number', 'default' => ''), 328127a956SJames Collins 'grid-col' => array('type' => 'text', 'default' => ''), 338127a956SJames Collins 'grid-col-start' => array('type' => 'number', 'default' => ''), 348127a956SJames Collins 'grid-col-end' => array('type' => 'number', 'default' => ''), 358127a956SJames Collins 'grid-col-span' => array('type' => 'number', 'default' => ''), 367935713eSJames Collins ); 377935713eSJames Collins 387935713eSJames Collins public function __construct() { 39c63a940aSJames Collins $this->addCommonOptions('width height type shadow text-align links-match vertical-align'); 407935713eSJames Collins } 41581a9aa1SJames Collins 42c63a940aSJames Collins public function getPType() { return 'normal'; } 43c63a940aSJames Collins 44581a9aa1SJames Collins public function render_lexer_enter(Doku_Renderer $renderer, $data) { 458127a956SJames Collins if(!empty($data['attr'])) { 461766d43cSJames Collins $data = array_merge($data, $this->callMikioTag('setattr', $data['attr'])); 471766d43cSJames Collins } 48581a9aa1SJames Collins 491766d43cSJames Collins $tag = 'div'; 508127a956SJames Collins if(!empty($data['url'])) $tag = 'a'; 511766d43cSJames Collins 528127a956SJames Collins if(!empty($data['grid-row-span'])) $data['grid-row-end'] = 'span ' . $data['grid-row-span']; 538127a956SJames Collins if(!empty($data['grid-col-span'])) $data['grid-col-end'] = 'span ' . $data['grid-col-span']; 541766d43cSJames Collins 558127a956SJames Collins if(!empty($data['grid-row'])) { 561766d43cSJames Collins $parts = explode(' ', $data['grid-row']); 571766d43cSJames Collins $i = count($parts); 581766d43cSJames Collins if($i == 2 || $i == 3) { 591766d43cSJames Collins $data['grid-row-start'] = filter_var($parts[0], FILTER_VALIDATE_INT); 601766d43cSJames Collins } 611766d43cSJames Collins 621766d43cSJames Collins if($i == 2) { 631766d43cSJames Collins $data['grid-row-end'] = filter_var($parts[1], FILTER_VALIDATE_INT); 641766d43cSJames Collins } else { 651766d43cSJames Collins $data['grid-row-end'] = strtolower($parts[1]) . ' ' . filter_var($parts[2], FILTER_VALIDATE_INT); 661766d43cSJames Collins } 671766d43cSJames Collins } 681766d43cSJames Collins 698127a956SJames Collins if(!empty($data['grid-col'])) { 701766d43cSJames Collins $parts = explode(' ', $data['grid-col']); 711766d43cSJames Collins $i = count($parts); 721766d43cSJames Collins if($i == 2 || $i == 3) { 731766d43cSJames Collins $data['grid-col-start'] = filter_var($parts[0], FILTER_VALIDATE_INT); 741766d43cSJames Collins } 751766d43cSJames Collins 761766d43cSJames Collins if($i == 2) { 771766d43cSJames Collins $data['grid-col-end'] = filter_var($parts[1], FILTER_VALIDATE_INT); 781766d43cSJames Collins } else { 791766d43cSJames Collins $data['grid-col-end'] = strtolower($parts[1]) . ' ' . filter_var($parts[2], FILTER_VALIDATE_INT); 801766d43cSJames Collins } 811766d43cSJames Collins } 821766d43cSJames Collins 831766d43cSJames Collins $classes = $this->buildClass($data); 841766d43cSJames Collins $styles = $this->buildStyle(array( 858127a956SJames Collins 'width' => $data['width'] ?? '', 868127a956SJames Collins 'height' => $data['height'] ?? '', 878127a956SJames Collins 'border-radius' => $data['round'] ?? '', 888127a956SJames Collins 'border-color' => $data['border-color'] ?? '', 898127a956SJames Collins 'border-width' => $data['border-width'] ?? '', 908127a956SJames Collins 'color' => $data['color'] ?? '', 918127a956SJames Collins 'padding' => $data['padding'] ?? '', 928127a956SJames Collins 'margin' => $data['margin'] ?? '', 938127a956SJames Collins 'grid-row-start' => $data['grid-row-start'] ?? '', 948127a956SJames Collins 'grid-row-end' => $data['grid-row-end'] ?? '', 958127a956SJames Collins 'grid-column-start' => $data['grid-col-start'] ?? '', 968127a956SJames Collins 'grid-column-end' => $data['grid-col-end'] ?? '', 971766d43cSJames Collins 981766d43cSJames Collins ), TRUE); 991766d43cSJames Collins 1001766d43cSJames Collins $renderer->doc .= '<' . $tag . ($data['url'] != '' ? ' href="' . $data['url'] . '"' : '') . ' class="' . $this->elemClass . ' ' . $this->classPrefix . 'box'. $classes .'"' . $styles. '>'; 1017935713eSJames Collins if($data['reveal']) $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'reveal">' . $data['reveal-text'] . '</div>'; 102581a9aa1SJames Collins } 103581a9aa1SJames Collins 104581a9aa1SJames Collins 105581a9aa1SJames Collins public function render_lexer_exit(Doku_Renderer $renderer, $data) { 1061766d43cSJames Collins $tag = 'div'; 1078127a956SJames Collins if(!empty($data['url'])) $tag = 'a'; 1081766d43cSJames Collins 1091766d43cSJames Collins $renderer->doc .= '</' . $tag . '>'; 110581a9aa1SJames Collins } 111581a9aa1SJames Collins} 112581a9aa1SJames Collins?>