| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 | <?php if(!defined('__TYPECHO_ADMIN__')) exit; ?><?php $content = !empty($post) ? $post : $page; if ($options->markdown): ?><script src="<?php $options->adminStaticUrl('js', 'hyperdown.js'); ?>"></script><script src="<?php $options->adminStaticUrl('js', 'pagedown.js'); ?>"></script><script src="<?php $options->adminStaticUrl('js', 'paste.js'); ?>"></script><script src="<?php $options->adminStaticUrl('js', 'purify.js'); ?>"></script><script>$(document).ready(function () {    var textarea = $('#text'),        isFullScreen = false,        toolbar = $('<div class="editor" id="wmd-button-bar" />').insertBefore(textarea.parent()),        preview = $('<div id="wmd-preview" class="wmd-hidetab" />').insertAfter('.editor');    var options = {}, isMarkdown = <?php echo intval($content->isMarkdown || !$content->have()); ?>;    options.strings = {        bold: '<?php _e('加粗'); ?> <strong> Ctrl+B',        boldexample: '<?php _e('加粗文字'); ?>',                    italic: '<?php _e('斜体'); ?> <em> Ctrl+I',        italicexample: '<?php _e('斜体文字'); ?>',        link: '<?php _e('链接'); ?> <a> Ctrl+L',        linkdescription: '<?php _e('请输入链接描述'); ?>',        quote:  '<?php _e('引用'); ?> <blockquote> Ctrl+Q',        quoteexample: '<?php _e('引用文字'); ?>',        code: '<?php _e('代码'); ?> <pre><code> Ctrl+K',        codeexample: '<?php _e('请输入代码'); ?>',        image: '<?php _e('图片'); ?> <img> Ctrl+G',        imagedescription: '<?php _e('请输入图片描述'); ?>',        olist: '<?php _e('数字列表'); ?> <ol> Ctrl+O',        ulist: '<?php _e('普通列表'); ?> <ul> Ctrl+U',        litem: '<?php _e('列表项目'); ?>',        heading: '<?php _e('标题'); ?> <h1>/<h2> Ctrl+H',        headingexample: '<?php _e('标题文字'); ?>',        hr: '<?php _e('分割线'); ?> <hr> Ctrl+R',        more: '<?php _e('摘要分割线'); ?> <!--more--> Ctrl+M',        undo: '<?php _e('撤销'); ?> - Ctrl+Z',        redo: '<?php _e('重做'); ?> - Ctrl+Y',        redomac: '<?php _e('重做'); ?> - Ctrl+Shift+Z',        fullscreen: '<?php _e('全屏'); ?> - Ctrl+J',        exitFullscreen: '<?php _e('退出全屏'); ?> - Ctrl+E',        fullscreenUnsupport: '<?php _e('此浏览器不支持全屏操作'); ?>',        imagedialog: '<p><b><?php _e('插入图片'); ?></b></p><p><?php _e('请在下方的输入框内输入要插入的远程图片地址'); ?></p><p><?php _e('您也可以使用附件功能插入上传的本地图片'); ?></p>',        linkdialog: '<p><b><?php _e('插入链接'); ?></b></p><p><?php _e('请在下方的输入框内输入要插入的链接地址'); ?></p>',        ok: '<?php _e('确定'); ?>',        cancel: '<?php _e('取消'); ?>',        help: '<?php _e('Markdown语法帮助'); ?>'    };    var converter = new HyperDown(),        editor = new Markdown.Editor(converter, '', options);    // 自动跟随    converter.enableHtml(true);    converter.enableLine(true);    reloadScroll = scrollableEditor(textarea, preview);    // 修正白名单    converter.hook('makeHtml', function (html) {        html = html.replace('<p><!--more--></p>', '<!--more-->');                if (html.indexOf('<!--more-->') > 0) {            var parts = html.split(/\s*<\!\-\-more\-\->\s*/),                summary = parts.shift(),                details = parts.join('');            html = '<div class="summary">' + summary + '</div>'                + '<div class="details">' + details + '</div>';        }        // 替换block        html = html.replace(/<(iframe|embed)\s+([^>]*)>/ig, function (all, tag, src) {            if (src[src.length - 1] == '/') {                src = src.substring(0, src.length - 1);            }            return '<div class="embed"><strong>'                + tag + '</strong> : ' + $.trim(src) + '</div>';        });        return DOMPurify.sanitize(html, {USE_PROFILES: {html: true}});    });    editor.hooks.chain('onPreviewRefresh', function () {        var images = $('img', preview), count = images.length;        if (count == 0) {            reloadScroll(true);        } else {            images.bind('load error', function () {                count --;                if (count == 0) {                    reloadScroll(true);                }            });        }    });    <?php \Typecho\Plugin::factory('admin/editor-js.php')->markdownEditor($content); ?>    var th = textarea.height(), ph = preview.height(),        uploadBtn = $('<button type="button" id="btn-fullscreen-upload" class="btn btn-link">'            + '<i class="i-upload"><?php _e('附件'); ?></i></button>')            .prependTo('.submit .right')            .click(function() {                $('a', $('.typecho-option-tabs li').not('.active')).trigger('click');                return false;            });    $('.typecho-option-tabs li').click(function () {        uploadBtn.find('i').toggleClass('i-upload-active',            $('#tab-files-btn', this).length > 0);    });    editor.hooks.chain('enterFakeFullScreen', function () {        th = textarea.height();        ph = preview.height();        $(document.body).addClass('fullscreen');        var h = $(window).height() - toolbar.outerHeight();                textarea.css('height', h);        preview.css('height', h);        isFullScreen = true;    });    editor.hooks.chain('enterFullScreen', function () {        $(document.body).addClass('fullscreen');                var h = window.screen.height - toolbar.outerHeight();        textarea.css('height', h);        preview.css('height', h);        isFullScreen = true;    });    editor.hooks.chain('exitFullScreen', function () {        $(document.body).removeClass('fullscreen');        textarea.height(th);        preview.height(ph);        isFullScreen = false;    });    editor.hooks.chain('commandExecuted', function () {        textarea.trigger('input');    });    function initMarkdown() {        editor.run();        var imageButton = $('#wmd-image-button'),            linkButton = $('#wmd-link-button');        Typecho.insertFileToEditor = function (file, url, isImage) {            var button = isImage ? imageButton : linkButton;            options.strings[isImage ? 'imagename' : 'linkname'] = file;            button.trigger('click');            var checkDialog = setInterval(function () {                if ($('.wmd-prompt-dialog').length > 0) {                    $('.wmd-prompt-dialog input').val(url).select();                    clearInterval(checkDialog);                    checkDialog = null;                }            }, 10);        };        Typecho.uploadComplete = function (file) {            Typecho.insertFileToEditor(file.title, file.url, file.isImage);        };        // 编辑预览切换        var edittab = $('.editor').prepend('<div class="wmd-edittab"><a href="#wmd-editarea" class="active"><?php _e('撰写'); ?></a><a href="#wmd-preview"><?php _e('预览'); ?></a></div>'),            editarea = $(textarea.parent()).attr("id", "wmd-editarea");        $(".wmd-edittab a").click(function() {            $(".wmd-edittab a").removeClass('active');            $(this).addClass("active");            $("#wmd-editarea, #wmd-preview").addClass("wmd-hidetab");                    var selected_tab = $(this).attr("href"),                selected_el = $(selected_tab).removeClass("wmd-hidetab");            // 预览时隐藏编辑器按钮            if (selected_tab == "#wmd-preview") {                $("#wmd-button-row").addClass("wmd-visualhide");            } else {                $("#wmd-button-row").removeClass("wmd-visualhide");            }            // 预览和编辑窗口高度一致            $("#wmd-preview").outerHeight($("#wmd-editarea").innerHeight());            return false;        });        // 剪贴板复制图片        textarea.pastableTextarea().on('pasteImage', function (e, data) {            var name = data.name ? data.name.replace(/[\(\)\[\]\*#!]/g, '') : (new Date()).toISOString().replace(/\..+$/, '');            if (!name.match(/\.[a-z0-9]{2,}$/i)) {                var ext = data.blob.type.split('/').pop();                name += '.' + ext;            }            Typecho.uploadFile(new File([data.blob], name), name);        });    }    if (isMarkdown) {        initMarkdown();    } else {        var notice = $('<div class="message notice"><?php _e('这篇文章不是由Markdown语法创建的, 继续使用Markdown编辑它吗?'); ?> '            + '<button class="btn btn-xs primary yes"><?php _e('是'); ?></button> '             + '<button class="btn btn-xs no"><?php _e('否'); ?></button></div>')            .hide().insertBefore(textarea).slideDown();        $('.yes', notice).click(function () {            notice.remove();            $('<input type="hidden" name="markdown" value="1" />').appendTo('.submit');            initMarkdown();        });        $('.no', notice).click(function () {            notice.remove();        });    }});</script><?php endif; ?>
 |