xref: /plugin/mikioplugin/syntax/card.php (revision 3a0ad8d394ede994db68f1ed17eff796c659fc4a)
117e6d639SJames Collins<?php
217e6d639SJames Collins/**
317e6d639SJames Collins * Mikio Syntax Plugin: Card
417e6d639SJames Collins *
57935713eSJames Collins * @link    http://github.com/nomadjimbob/mikioplugin
617e6d639SJames Collins * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
717e6d639SJames Collins * @author  James Collins <james.collins@outlook.com.au>
817e6d639SJames Collins */
9edb48470SJames Collinsif (!defined('DOKU_INC')) { die();
10edb48470SJames Collins}
11edb48470SJames Collinsif (!defined('DOKU_PLUGIN')) { define('DOKU_PLUGIN', DOKU_INC.'lib/plugins/');
12edb48470SJames Collins}
13*3a0ad8d3SJames Collinsrequire_once __DIR__.'/core.php';
1417e6d639SJames Collins
15edb48470SJames Collinsclass syntax_plugin_mikioplugin_card extends syntax_plugin_mikioplugin_core
16edb48470SJames Collins{
1717e6d639SJames Collins    public $tag                 = 'card';
187935713eSJames Collins    public $hasEndTag           = true;
197935713eSJames Collins    public $options             = array(
207935713eSJames Collins        'image'                         => array('type' => 'media',     'default'   => ''),
21062e2726SJames Collins        'image-cover'                   => array('type' => 'boolean',   'default'   => 'false'),
228dd6c7b1SJames Collins        'image-height'                  => array('type' => 'size',      'default'   => ''),
237935713eSJames Collins        'overlay'                       => array('type' => 'boolean',   'default'   => 'false'),
247935713eSJames Collins        'title'                         => array('type' => 'text',      'default'   => ''),
259f216153SJames Collins        'title-text-align'              => array('type' => 'choice',    'data'      => array(
269f216153SJames Collins            'left' => array('text-left'), 'center' => array('text-center'), 'right' => array('text-right')
279f216153SJames Collins        )),
289f216153SJames Collins        'title-text-color'              => array('type' => 'text',      'default'   => ''),
297935713eSJames Collins        'subtitle'                      => array('type' => 'text',      'default'   => ''),
309f216153SJames Collins        'subtitle-text-align'           => array('type' => 'choice',    'data'      => array(
319f216153SJames Collins            'left' => array('text-left'), 'center' => array('text-center'), 'right' => array('text-right')
329f216153SJames Collins        )),
339f216153SJames Collins        'subtitle-text-color'           => array('type' => 'text',      'default'   => ''),
347935713eSJames Collins        'no-body'                       => array('type' => 'boolean',   'default'   => 'false'),
357935713eSJames Collins        'header'                        => array('type' => 'text',      'default'   => ''),
369f216153SJames Collins        'header-text-align'             => array('type' => 'choice',    'data'      => array(
379f216153SJames Collins            'left' => array('text-left'), 'center' => array('text-center'), 'right' => array('text-right')
389f216153SJames Collins        )),
399f216153SJames Collins        'header-text-color'             => array('type' => 'text',      'default'   => ''),
407935713eSJames Collins        'footer'                        => array('type' => 'text',      'default'   => ''),
419f216153SJames Collins        'footer-text-align'             => array('type' => 'choice',    'data'      => array(
429f216153SJames Collins            'left' => array('text-left'), 'center' => array('text-center'), 'right' => array('text-right')
439f216153SJames Collins        )),
449f216153SJames Collins        'footer-text-color'             => array('type' => 'text',      'default'   => ''),
457935713eSJames Collins        'placeholder-text'              => array('type' => 'text',      'default'   => ''),
467935713eSJames Collins        'placeholder-color'             => array('type' => 'text',      'default'   => ''),
477935713eSJames Collins        'placeholder-text-color'        => array('type' => 'text',      'default'   => ''),
488dd6c7b1SJames Collins        'placeholder-height'            => array('type' => 'size',      'default'   => ''),
497935713eSJames Collins        'footer-image'                  => array('type' => 'media',     'default'   => ''),
50062e2726SJames Collins        'footer-image-cover'            => array('type' => 'boolean',   'default'   => 'false'),
517935713eSJames Collins        'footer-placeholder-text'       => array('type' => 'text',      'default'   => ''),
527935713eSJames Collins        'footer-placeholder-color'      => array('type' => 'text',      'default'   => ''),
537935713eSJames Collins        'footer-placeholder-text-color' => array('type' => 'text',      'default'   => ''),
547935713eSJames Collins        'horizontal'                    => array('type' => 'boolean',   'default'   => 'false'),
557935713eSJames Collins        'footer-small'                  => array('type' => 'boolean',   'default'   => 'false'),
567935713eSJames Collins    );
5717e6d639SJames Collins
5817e6d639SJames Collins
59edb48470SJames Collins    public function __construct()
60edb48470SJames Collins    {
6116df152eSJames Collins        $this->addCommonOptions('type shadow width height text-align vertical-align text-color align');
627935713eSJames Collins    }
637935713eSJames Collins
64edb48470SJames Collins    public function getAllowedTypes()
65edb48470SJames Collins    {
66edb48470SJames Collins        return array('formatting', 'substition', 'disabled', 'container', 'protected');
67edb48470SJames Collins    }
68edb48470SJames Collins    public function getPType()
69edb48470SJames Collins    {
70edb48470SJames Collins        return 'normal';
71edb48470SJames Collins    }
724f3848fdSJames Collins
73edb48470SJames Collins    public function render_lexer_enter(Doku_Renderer $renderer, $data)
74edb48470SJames Collins    {
757935713eSJames Collins        $classes = $this->buildClass($data, array('overlay', 'horizontal'));
768127a956SJames Collins        $styles = $this->buildStyle(array('height' => $data['height'] ?? '', 'width' => $data['width'] ?? ''), true);
7717e6d639SJames Collins
787935713eSJames Collins        $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'card' . $classes . '"' . $styles . '>';
79f4aa5cdcSJames Collins
80edb48470SJames Collins        if($data['horizontal']) { $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'card-horizontal-image">';
81edb48470SJames Collins        }
828127a956SJames Collins        if(!empty($data['placeholder-text'])) {
838127a956SJames Collins            $this->syntaxRender($renderer, 'placeholder', '', $this->arrayRemoveEmpties(array('text' => $data['placeholder-text'] ?? '', 'color' => $data['placeholder-color'] ?? '', 'text-color' => $data['placeholder-text-color'] ?? '', 'height' => $data['placeholder-height'] ?? '')));
848127a956SJames Collins        } elseif(!empty($data['image'])) {
858dd6c7b1SJames Collins            $style = '';
868127a956SJames Collins            if(!empty($data['image-height'])) {
878dd6c7b1SJames Collins                $style = 'height:' . $data['image-height'] . ';';
888dd6c7b1SJames Collins            }
898dd6c7b1SJames Collins            $renderer->doc .= '<img src="' . $data['image'] . '" class="' . $this->elemClass . ' ' . $this->classPrefix . 'card-image' . ($data['image-cover'] ? ' ' . $this->classPrefix . 'image-cover' : '') . '" style="' . $style . '">';
90939c483cSJames Collins        }
91edb48470SJames Collins        if($data['horizontal']) { $renderer->doc .= '</div><div class="' . $this->elemClass . ' ' . $this->classPrefix . 'card-horizontal-body">';
92edb48470SJames Collins        }
9317e6d639SJames Collins
948127a956SJames Collins        if(!empty($data['header'])) {
958127a956SJames Collins            $this->syntaxRender($renderer, 'cardheader', $data['header'], $this->arrayRemoveEmpties(array('text-align' => $data['header-text-align'] ?? '', 'text-color' => $data['header-text-color'] ?? '')));
96edb48470SJames Collins        }
971e2e4602SJames Collins
988127a956SJames Collins        if($data['no-body'] == false) { $this->syntaxRender($renderer, 'cardbody', '', $this->arrayRemoveEmpties(array('vertical-align' => $data['vertical-align'] ?? '', 'text-color' => $data['text-color'] ?? '')), MIKIO_LEXER_ENTER);
99edb48470SJames Collins        }
10017e6d639SJames Collins
1018127a956SJames Collins        if(!empty($data['title'])) {
1028127a956SJames Collins            $this->syntaxRender($renderer, 'cardtitle', $data['title'], $this->arrayRemoveEmpties(array('text-align' => $data['title-text-align'] ?? '', 'text-color' => $data['title-text-color'] ?? '')));
103edb48470SJames Collins        }
1049f216153SJames Collins
1058127a956SJames Collins        if(!empty($data['subtitle'])) {
1068127a956SJames Collins            $this->syntaxRender($renderer, 'cardsubtitle', $data['subtitle'], $this->arrayRemoveEmpties(array('text-align' => $data['subtitle-text-align'] ?? '', 'text-color' => $data['subtitle-text-color'] ?? '')));
107edb48470SJames Collins        }
10817e6d639SJames Collins    }
10917e6d639SJames Collins
11017e6d639SJames Collins
111edb48470SJames Collins    public function render_lexer_exit(Doku_Renderer $renderer, $data)
112edb48470SJames Collins    {
113edb48470SJames Collins        if($data['no-body'] == false) { $this->syntaxRender($renderer, 'cardbody', '', null, MIKIO_LEXER_EXIT);
114edb48470SJames Collins        }
115f4aa5cdcSJames Collins
1168127a956SJames Collins        if(!empty($data['footer'])) {
1178127a956SJames Collins            $this->syntaxRender($renderer, 'cardfooter', $data['footer'], $this->arrayRemoveEmpties(array('small' => $data['footer-small'] ?? '', 'text-align' => $data['footer-text-align'] ?? '', 'text-color' => $data['footer-text-color'] ?? '')));
11817e6d639SJames Collins        }
11917e6d639SJames Collins
1208127a956SJames Collins        if(!empty($data['footer-placeholder-text'])) {
1218127a956SJames Collins            $this->syntaxRender($renderer, 'placeholder', '', $this->arrayRemoveEmpties(array('text' => $data['footer-placeholder-text'] ?? '', 'color' => $data['footer-placeholder-color'] ?? '', 'text-color' => $data['footer-placeholder-text-color'] ?? '')));
1228127a956SJames Collins        } elseif(!empty($data['footer-image'])) {
123062e2726SJames Collins            $renderer->doc .= '<img src="' . $data['footer-image'] . '" class="' . $this->elemClass . ' ' . $this->classPrefix . 'card-image' . ($data['footer-image-cover'] ? ' ' . $this->classPrefix . 'image-cover' : '') .'">';
1241e2e4602SJames Collins        }
1251e2e4602SJames Collins
126edb48470SJames Collins        if($data['horizontal']) { $renderer->doc .= '</div>';
127edb48470SJames Collins        }
12817e6d639SJames Collins        $renderer->doc .= '</div>';
12917e6d639SJames Collins    }
13017e6d639SJames Collins}
13117e6d639SJames Collins?>