<?php
/**
 * @brief dcLegacyEditor, a plugin for Dotclear 2
 *
 * @package Dotclear
 * @subpackage Plugins
 *
 * @copyright Olivier Meunier & Association Dotclear
 * @copyright GPL-2.0-only
 */

class dcLegacyEditorBehaviors
{
    protected static $p_url = 'index.php?pf=dcLegacyEditor';

    /**
     * adminPostEditor add javascript to the DOM to load ckeditor depending on context
     *
     * @param editor   <b>string</b> wanted editor
     * @param context  <b>string</b> page context (post,page,comment,event,...)
     * @param tags     <b>array</b>  array of ids to inject editor
     * @param syntax   <b>string</b> wanted syntax (wiki,markdown,...)
     */
    public static function adminPostEditor($editor = '', $context = '', array $tags = [], $syntax = '')
    {
        if (empty($editor) || $editor != 'dcLegacyEditor') {return;}

        $js = [
            'legacy_editor_context' => $context,
            'legacy_editor_syntax' => $syntax,
            'legacy_editor_tags_context' => [$context => $tags]
        ];

        return
        self::jsToolBar() .
        dcPage::jsJson('legacy_editor_ctx', $js) .
        dcPage::jsLoad(dcPage::getPF('dcLegacyEditor/js/_post_editor.js'));
    }

    public static function adminPopupMedia($editor = '')
    {
        if (empty($editor) || $editor != 'dcLegacyEditor') {return;}

        return dcPage::jsLoad(dcPage::getPF('dcLegacyEditor/js/jsToolBar/popup_media.js'));
    }

    public static function adminPopupLink($editor = '')
    {
        if (empty($editor) || $editor != 'dcLegacyEditor') {return;}

        return dcPage::jsLoad(dcPage::getPF('dcLegacyEditor/js/jsToolBar/popup_link.js'));
    }

    public static function adminPopupPosts($editor = '')
    {
        if (empty($editor) || $editor != 'dcLegacyEditor') {return;}

        return dcPage::jsLoad(dcPage::getPF('dcLegacyEditor/js/jsToolBar/popup_posts.js'));
    }

    protected static function jsToolBar()
    {
        $rtl = l10n::getTextDirection($GLOBALS['_lang']) == 'rtl' ? 'direction: rtl;' : '';
        $css = <<<EOT
body {
    color: #000;
    background: #f9f9f9;
    margin: 0;
    padding: 2px;
    border: none;
    $rtl
}
code {
    color: #666;
    font-weight: bold;
}
body > p:first-child {
    margin-top: 0;
}
EOT;
        $js = [
            'dialog_url'            => 'popup.php',
            'iframe_css'            => $css,
            'base_url'              => $GLOBALS['core']->blog->host,
            'switcher_visual_title' => __('visual'),
            'switcher_source_title' => __('source'),
            'legend_msg'            => __('You can use the following shortcuts to format your text.'),
            'elements'              => [
                    'blocks' => ['options' => [
                        'none' => __('-- none --'),
                        'nonebis' => __('-- block format --'),
                        'p' => __('Paragraph'),
                        'h1' => __('Level 1 header'),
                        'h2' => __('Level 2 header'),
                        'h3' => __('Level 3 header'),
                        'h4' => __('Level 4 header'),
                        'h5' => __('Level 5 header'),
                        'h6' => __('Level 6 header'),
                    ]],

                    'strong' => ['title' => __('Strong emphasis')],
                    'em' => ['title' => __('Emphasis')],
                    'ins' => ['title' => __('Inserted')],
                    'del' => ['title' => __('Deleted')],
                    'quote' => ['title' => __('Inline quote')],
                    'code' => ['title' => __('Code')],
                    'mark' => ['title' => __('Mark')],
                    'br' => ['title' => __('Line break')],
                    'blockquote' => ['title' => __('Blockquote')],
                    'pre' => ['title' => __('Preformated text')],
                    'ul' => ['title' => __('Unordered list')],
                    'ol' => ['title' => __('Ordered list')],

                    'link' => [
                        'title' => __('Link'),
                        'accesskey' => __('l'),
                        'href_prompt' => __('URL?'),
                        'hreflang_prompt' => __('Language?')
                    ],

                    'img' => [
                        'title' => __('External image'),
                        'src_prompt' => __('URL?')
                    ],

                    'img_select' => [
                        'title' => __('Media chooser'),
                        'accesskey' => __('m')
                    ],

                    'post_link' => ['title' => __('Link to an entry')],
                    'removeFormat' => ['title' => __('Remove text formating')]
            ],
            'toolbar_bottom' => (boolean) isset($GLOBALS['core']->auth) && $GLOBALS['core']->auth->getOption('toolbar_bottom')
        ];
        if (!$GLOBALS['core']->auth->check('media,media_admin', $GLOBALS['core']->blog->id)) {
            $js['elements']['img_select']['disabled'] = true;
        }

        $res =
        dcPage::jsJson('legacy_editor', $js) .
        dcPage::cssLoad(dcPage::getPF('dcLegacyEditor/css/jsToolBar/jsToolBar.css')) .
        dcPage::jsLoad(dcPage::getPF('dcLegacyEditor/js/jsToolBar/jsToolBar.js'));

        if (isset($GLOBALS['core']->auth) && $GLOBALS['core']->auth->getOption('enable_wysiwyg')) {
            $res .= dcPage::jsLoad(dcPage::getPF('dcLegacyEditor/js/jsToolBar/jsToolBar.wysiwyg.js'));
        }

        $res .=
        dcPage::jsLoad(dcPage::getPF('dcLegacyEditor/js/jsToolBar/jsToolBar.dotclear.js')) .
        dcPage::jsLoad(dcPage::getPF('dcLegacyEditor/js/jsToolBar/jsToolBar.config.js'));

        return $res;
    }
}
