xref: /plugin/mikioplugin/syntax/box.php (revision 3a0ad8d394ede994db68f1ed17eff796c659fc4a)
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?>