<?php

class backendTypograph extends cmsBackend {

    private $html_tags = [
        'p', 'br', 'span', 'div',
        'a', 'img', 'input', 'label',
        'b', 'i', 'u', 's', 'del', 'em', 'strong', 'sup', 'sub', 'hr', 'font', 'abbr', 'strike',
        'ul', 'ol', 'li', 'dl', 'dt', 'dd',
        'table', 'tbody', 'thead', 'tfoot', 'tr', 'td', 'th', 'caption',
        'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
        'pre', 'code', 'blockquote', 'picture', 'button',
        'video', 'source', 'audio', 'youtube', 'facebook', 'figure', 'figcaption',
        'iframe', 'spoiler', 'cite', 'footer', 'address'
    ];

    public function getHtmlTags() {
        return cmsEventsManager::hook('typograph_html_tags_list', $this->html_tags);
    }

    public function getTagsForm($tags) {

        $form = new cmsForm();

        foreach ($tags as $tag) {

            $fieldset_id = $form->addFieldset(sprintf(LANG_TYP_ATTR_TAG, $tag), 'tag-attr-'.$tag, ['is_collapsed' => true]);

            $form->addField($fieldset_id, new fieldString('options:callback:'.$tag, [
                'title' => LANG_TYP_TAG_CALLBACK,
                'hint'  => LANG_TYP_TAG_CALLBACK_HINT,
                'rules' => [
                    ['regexp', '#^([a-z]+[a-z0-9_\|]+)$#ui'],
                ]
            ]));

            $form->addField($fieldset_id, new fieldFieldsgroup('options:tags:'.$tag, [
                'add_title' => LANG_TYP_ADD_ATTR,
                'is_sortable' => false,
                'childs' => [
                    new fieldList('type', [
                        'title' => LANG_TYP_ATTR_TYPE,
                        'native_tag' => true,
                        'items' => [
                            '#text'   => LANG_PARSER_TEXT,
                            '#int'    => LANG_PARSER_NUMBER,
                            '#link'   => LANG_PARSER_URL,
                            '#domain' => LANG_TYP_DOMAINS,
                            '#array'  => LANG_TYP_ARRAY,
                            '#image'  => LANG_TYP_PATH
                        ],
                        'rules' => [
                            ['required']
                        ]
                    ]),
                    new fieldString('name', [
                        'title' => LANG_TYP_ATTR_NAME,
                        'rules' => [
                            ['required'],
                            ['regexp', '#^(?!on)([a-z0-9\-]*[a-z]+[a-z0-9\-]*)$#ui']
                        ]
                    ]),
                    new fieldText('params', [
                        'attributes' => ['placeholder' => LANG_TYP_ATTR_PARAMS],
                        'css_class' => 'col-sm-12 mt-2'
                    ])
                ]
            ]));

        }

        return $form;
    }

}
