xref: /plugin/mikioplugin/syntax/box.php (revision 1766d43cf4685e267cea351d5a11d3dc7672fcf1) !
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/');
11581a9aa1SJames Collinsrequire_once(dirname(__FILE__).'/core.php');
12581a9aa1SJames Collins
13581a9aa1SJames Collinsclass syntax_plugin_mikioplugin_box extends syntax_plugin_mikioplugin_core {
14581a9aa1SJames Collins    public $tag                 = 'box';
157935713eSJames Collins    public $hasEndTag           = true;
167935713eSJames Collins    public $options             = array(
17*1766d43cSJames Collins        'attr'          => array('type'     => 'text'),
187935713eSJames Collins        'round'         => array('type'     => 'size',  'default'   => '0'),
197935713eSJames Collins        'border-color'  => array('type'     => 'color', 'default'   => ''),
20*1766d43cSJames Collins        'border-width'  => array('type'     => 'multisize',  'default'   => ''),
217935713eSJames Collins        'reveal'        => array('type'     => 'boolean', 'default' => 'false'),
227935713eSJames Collins        'reveal-text'   => array('type'     => 'text',  'default'   => 'Reveal'),
23*1766d43cSJames Collins        'url'           => array('type'     => 'url',       'default'   => ''),
24*1766d43cSJames Collins        'color'         => array('type'    => 'color',    'default' => ''),
25*1766d43cSJames Collins        'padding'       => array('type'     => 'multisize',  'default'   => ''),
26*1766d43cSJames Collins        'margin'       => array('type'     => 'multisize',  'default'   => ''),
27*1766d43cSJames Collins        'grid-row'          => array('type' => 'text'),
28*1766d43cSJames Collins        'grid-row-start'    => array('type' => 'number'),
29*1766d43cSJames Collins        'grid-row-end'      => array('type' => 'number'),
30*1766d43cSJames Collins        'grid-row-span'     => array('type' => 'number'),
31*1766d43cSJames Collins        'grid-col'          => array('type' => 'text'),
32*1766d43cSJames Collins        'grid-col-start'    => array('type' => 'number'),
33*1766d43cSJames Collins        'grid-col-end'      => array('type' => 'number'),
34*1766d43cSJames Collins        'grid-col-span'     => array('type' => 'number'),
357935713eSJames Collins    );
367935713eSJames Collins
377935713eSJames Collins    public function __construct() {
38*1766d43cSJames Collins        $this->addCommonOptions('width height type shadow text-align links-match');
397935713eSJames Collins    }
40581a9aa1SJames Collins
41581a9aa1SJames Collins    public function render_lexer_enter(Doku_Renderer $renderer, $data) {
42*1766d43cSJames Collins        if($data['attr'] != '') {
43*1766d43cSJames Collins            $data = array_merge($data, $this->callMikioTag('setattr', $data['attr']));
44*1766d43cSJames Collins            // echo '#' . $this->callMikioTag('setattr', $data['attr']) . '#';
45*1766d43cSJames Collins        }
46581a9aa1SJames Collins
47*1766d43cSJames Collins        $tag = 'div';
48*1766d43cSJames Collins        if($data['url'] != '') $tag = 'a';
49*1766d43cSJames Collins
50*1766d43cSJames Collins        if($data['grid-row-span'] != '') $data['grid-row-end'] = 'span ' . $data['grid-row-span'];
51*1766d43cSJames Collins        if($data['grid-col-span'] != '') $data['grid-col-end'] = 'span ' . $data['grid-col-span'];
52*1766d43cSJames Collins
53*1766d43cSJames Collins        if($data['grid-row'] != '') {
54*1766d43cSJames Collins            $parts = explode(' ', $data['grid-row']);
55*1766d43cSJames Collins            $i = count($parts);
56*1766d43cSJames Collins            if($i == 2 || $i == 3) {
57*1766d43cSJames Collins                $data['grid-row-start'] = filter_var($parts[0], FILTER_VALIDATE_INT);
58*1766d43cSJames Collins            }
59*1766d43cSJames Collins
60*1766d43cSJames Collins            if($i == 2) {
61*1766d43cSJames Collins                $data['grid-row-end'] = filter_var($parts[1], FILTER_VALIDATE_INT);
62*1766d43cSJames Collins            } else {
63*1766d43cSJames Collins                $data['grid-row-end'] = strtolower($parts[1]) . ' ' . filter_var($parts[2], FILTER_VALIDATE_INT);
64*1766d43cSJames Collins            }
65*1766d43cSJames Collins        }
66*1766d43cSJames Collins
67*1766d43cSJames Collins        if($data['grid-col'] != '') {
68*1766d43cSJames Collins            $parts = explode(' ', $data['grid-col']);
69*1766d43cSJames Collins            $i = count($parts);
70*1766d43cSJames Collins            if($i == 2 || $i == 3) {
71*1766d43cSJames Collins                $data['grid-col-start'] = filter_var($parts[0], FILTER_VALIDATE_INT);
72*1766d43cSJames Collins            }
73*1766d43cSJames Collins
74*1766d43cSJames Collins            if($i == 2) {
75*1766d43cSJames Collins                $data['grid-col-end'] = filter_var($parts[1], FILTER_VALIDATE_INT);
76*1766d43cSJames Collins            } else {
77*1766d43cSJames Collins                $data['grid-col-end'] = strtolower($parts[1]) . ' ' . filter_var($parts[2], FILTER_VALIDATE_INT);
78*1766d43cSJames Collins            }
79*1766d43cSJames Collins        }
80*1766d43cSJames Collins
81*1766d43cSJames Collins        $classes = $this->buildClass($data);
82*1766d43cSJames Collins        $styles = $this->buildStyle(array(
83*1766d43cSJames Collins            'width'         => $data['width'],
84*1766d43cSJames Collins            'height'        => $data['height'],
85*1766d43cSJames Collins            'border-radius' => $data['round'],
86*1766d43cSJames Collins            'border-color'  => $data['border-color'],
87*1766d43cSJames Collins            'border-width'  => $data['border-width'],
88*1766d43cSJames Collins            'color'         => $data['color'],
89*1766d43cSJames Collins            'padding'       => $data['padding'],
90*1766d43cSJames Collins            'margin'        => $data['margin'],
91*1766d43cSJames Collins            'grid-row-start'    => $data['grid-row-start'],
92*1766d43cSJames Collins            'grid-row-end'      => $data['grid-row-end'],
93*1766d43cSJames Collins            'grid-col-start'    => $data['grid-col-start'],
94*1766d43cSJames Collins            'grid-col-end'      => $data['grid-col-end'],
95*1766d43cSJames Collins
96*1766d43cSJames Collins        ), TRUE);
97*1766d43cSJames Collins
98*1766d43cSJames Collins        $renderer->doc .= '<' . $tag . ($data['url'] != '' ? ' href="' . $data['url'] . '"' : '') . ' class="' . $this->elemClass . ' ' . $this->classPrefix . 'box'. $classes .'"' . $styles. '>';
997935713eSJames Collins        if($data['reveal']) $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'reveal">' . $data['reveal-text'] . '</div>';
100581a9aa1SJames Collins    }
101581a9aa1SJames Collins
102581a9aa1SJames Collins
103581a9aa1SJames Collins    public function render_lexer_exit(Doku_Renderer $renderer, $data) {
104*1766d43cSJames Collins        $tag = 'div';
105*1766d43cSJames Collins        if($data['url'] != '') $tag = 'a';
106*1766d43cSJames Collins
107*1766d43cSJames Collins        $renderer->doc .= '</' . $tag . '>';
108581a9aa1SJames Collins    }
109581a9aa1SJames Collins}
110581a9aa1SJames Collins?>