• 头像
    C
    版主组
    2023-06-13 22:15
  • 头像
    C
    版主组
    2023-04-29 10:58
    求助 如何让编辑器可以一个按钮一键出设置好的html标签
    heyzero 他的意思我明白了,就是那个tinymce添加一个功能,点击弹出一个输入框,然后在输入框里输入的内容带[ttlogin]前后标签。同时他安装了对应的插件。通过插件来判断内容的权限。 正好我也想问一下, ...

    官方插件的话把插件放进plugins目录然后加载就行。

    非官方插件的话不能这么设置,要有一整套流程,得看文档:

    https://www.tiny.cloud/docs/tinymce/6/

    非常多,不太建议个人DIY。

  • 头像
    C
    版主组
    2023-03-11 03:23
    修改旧版本fuck、c_tinymce插件的表名称,平滑迁移到tiny新版本编辑器插件
    2732708273 这个编辑器复制视频站的网址就可以自动匹配成播放地址的这个功能能不能独立出来呀,这个功能很强应该很多人需要 B站 https://www.bilibili.com/video/BV1TA411H7D ...

    写的几行正则表达式,不算啥功能:

    let ixigua = val.match(/^https?:\/\/(?:www|m)\.ixigua\.com\/(?:video\/)?(\d+)/i);
    if (ixigua) { val = 'https://www.ixigua.com/iframe/' + ixigua[1]; };
    let douyin = val.match(/^https?:\/\/(?:www|m)\.(?:ies)?douyin\.com\/(?:share\/)?video\/(\d+)/i);
    if (douyin) { val = 'https://www.douyin.com/light/' + douyin[1]; };
    let acfun = val.match(/^https?:\/\/www\.acfun\.cn\/v\/ac(\d+)/i);
    if (acfun) { val = 'https://www.acfun.cn/player/ac' + acfun[1]; };
    let acfun_m = val.match(/^https?:\/\/m\.acfun\.cn\/v\/\?ac=(\d+)/i);
    if (acfun_m) { val = 'https://www.acfun.cn/player/ac' + acfun_m[1]; };
    let bv = val.match(/^BV(\w+)/i);
    if (bv) { val = 'https://player.bilibili.com/player.html?bvid=BV' + bv[1]; };
    let bilibili = val.match(/^https?:\/\/(?:www|m)\.bilibili\.com\/video\/BV(\w+)/i);
    if (bilibili) { val = 'https://player.bilibili.com/player.html?bvid=BV' + bilibili[1]; };
    let bilibili_av = val.match(/^https?:\/\/(?:www|m)\.bilibili\.com\/video\/av(\w+)/i);
    if (bilibili_av) { val = 'https://player.bilibili.com/player.html?aid=' + bilibili_av[1]; };
    let youku = val.match(/^https?:\/\/(?:v|m)\.youku\.com\/(?:v_show|video)\/id_([\w\-\=]+)/i);
    if (youku) { val = 'https://player.youku.com/embed/' + youku[1]; };
    let sohu = val.match(/^https?:\/\/tv\.sohu\.com\/v\/([\w\-\=]+)\.html(?:\?vid=(\d+))?/i);
    if (sohu) {
        let bid = atob(sohu[1]).match(/^us\/\d+\/(\d+)/i);
        if (bid) { val = 'https://tv.sohu.com/s/sohuplayer/iplay.html?bid=' + bid[1]; }
        else if (sohu[2]) { val = 'https://tv.sohu.com/s/sohuplayer/iplay.html?vid=' + sohu[2]; }
    };
    let sohu_m = val.match(/^https?:\/\/m\.tv\.sohu\.com\/u\/vw\/([\d]+)/i);
    if (sohu_m) { val = 'https://tv.sohu.com/s/sohuplayer/iplay.html?bid=' + sohu_m[1]; };
    let qq = val.match(/^https?:\/\/v\.qq\.com\/x\/(?:cover|page)\/.*?(\w+)\.html/i);
    if (qq) { val = 'https://v.qq.com/txp/iframe/player.html?vid=' + qq[1]; };
    let qq_m = val.match(/^https?:\/\/m\.v\.qq\.com\/.*?vid=(\w+)/i);
    if (qq_m) { val = 'https://v.qq.com/txp/iframe/player.html?vid=' + qq_m[1]; };
    let music163_0 = val.match(/^https?:\/\/(?:y\.)?music\.163\.com\/(?:m|\#)\/playlist\?id=(\d+)/i);
    if (music163_0) { val = 'https://music.163.com/outchain/player?type=0&id=' + music163_0[1]; };
    let music163_1 = val.match(/^https?:\/\/(?:y\.)?music\.163\.com\/(?:m|\#)\/album\?id=(\d+)/i);
    if (music163_1) { val = 'https://music.163.com/outchain/player?type=1&id=' + music163_1[1]; };
    let music163_2 = val.match(/^https?:\/\/(?:y\.)?music\.163\.com\/(?:m|\#)\/song\?id=(\d+)/i);
    if (music163_2) { val = 'https://music.163.com/outchain/player?type=2&id=' + music163_2[1]; };
  • 头像
    C
    版主组
    2022-12-31 23:59
    求助 如何让编辑器可以一个按钮一键出设置好的html标签

    他这就不是html源代码,是bbcode,在xiuno前台模板转义时格式化。

    回复可见、登录可见这种,用html可实现不了,只能配合插件使用。

  • 头像
    C
    版主组
    2022-12-28 17:10
    Xiuno·TinyMCE(2023.10.29)
    cpda 图片上传w后缀显示错误,必须后台改代码

    设置里有扩展名,加进去就行了。

    如果是图片的话,是可以作为图片上传的,常用扩展名都写进数组了。

    w后缀是啥?

  • 头像
    C
    版主组
    2022-12-23 12:13
    Xiuno·TinyMCE(2023.10.29)
    tuerxuan 我想白嫖…

    WTFPL开源的

  • 头像
    C
    版主组
    2022-12-23 12:03
    Xiuno·TinyMCE(2023.10.29)
    cpda 问题挺大的

    细说

  • 头像
    C
    版主组
    2022-12-23 12:02
    Xiuno·TinyMCE(2023.10.29)
    9981 不能上传qq截图

    先配置好可上传的附件类型,以及各用户组权限,才会显示上传按钮。

    QQ截图你看看什么扩展名的,加进去

  • 头像
    C
    版主组
    2022-12-23 12:02
    Xiuno·TinyMCE(2023.10.29)
    分格 怎么上传本地的图片呢

    先配置好可上传的附件类型,以及各用户组权限,才会显示上传按钮。

  • 头像
    C
    版主组
    2022-11-25 20:33
    xiuno编辑器插件Tiny修改版,加强的自定义功能(2023.10.29)

    TinyMCE和我插件都更新了 = =

    不过还好改动不大,604帖子回复里有说明。

  • 头像
    C
    版主组
    2022-11-25 20:11
  • 头像
    C
    版主组
    2022-11-25 20:10
    Xiuno·TinyMCE(2023.10.29)
    CF 翻译文件是不是不对劲?

    更新了,

    /core 文件夹替换为TinyMCE6.3.0,直接覆盖即可。

    /hook 文件夹修复一处BUG,index_route_case_end.php:12行修改为:

    $tiny_file['type']=strtolower(substr(strrchr($_FILES['file']['name'],'.'),1));

    加了个上传文件扩展名转小写,否则文件扩展名大写时即便允许也会报错。

  • 头像
    C
    版主组
    2022-11-09 17:22
    Xiuno·TinyMCE(2023.10.29)
    CF 那你看看我这个站的,F12还有报错

    没问题了,官方的插件语言名是zh-CN,我之前用的民间版是cn,后面改了以后tiny.js里面的配置也要改。

    目前你网站有个报错是paste插件没有引入,因为那个core目录我给精简过,所以没有paste插件。

  • 头像
    C
    版主组
    2022-11-09 17:09
    Xiuno·TinyMCE(2023.10.29)
    CF 翻译文件是不是不对劲?

    翻译没错,tiny.js也得一块更新

  • 头像
    C
    版主组
    2022-11-08 11:59
    Xiuno·TinyMCE(2023.10.29)

    不想改代码文件的话,直接把底下这一大坨贴进插件配置里面:(理论上tiny.js所有配置都可以覆写)

    setup: function (editor) {
        editor.on('drop', (e) => {
            e.preventDefault();
            e.stopPropagation();
        });
        editor.on('input', () => {
            editor.save();
        });
        editor.on('change', () => {
            editor.save();
        });
        editor.on('paste', (e) => {
            if (!e.clipboardData.files || !e.clipboardData.files.length) { return; };
            e.preventDefault();
            e.stopPropagation();
            tiny_recv(e.clipboardData.files);
        });
        editor.on('keydown', (e) => {
            if (!e.ctrlKey || e.keyCode != 13) { return; };
            e.preventDefault();
            e.stopPropagation();
            document.getElementById('submit').click();
        });
        editor.on('load', () => {
            document.querySelector('input[name="doctype"]').value = 0;
            if (!document.querySelector('#tiny_info')) {
                document.querySelector('.tox-statusbar__text-container').insertAdjacentHTML('afterbegin', '<span id="tiny_info" style="display:flex;flex:1 1 auto;"><a href="javascript:;" onclick="document.querySelector(\'#tiny_list\').style.display=(document.querySelector(\'#tiny_list\').style.display==\'none\')?\'\':\'none\';"><span id="tiny_info_rest" style="color:blue;">0</span>&nbsp;/&nbsp;<span id="tiny_info_done" style="color:green;">0</span>&nbsp;/&nbsp;<span id="tiny_info_fail" style="color:red;">0</span></a>&nbsp;&nbsp;<a id="tiny_proc" href="javascript:;" style="color:darkorange;"></a></span><span style="display:flex;flex:0 0 auto;"><a href="javascript:;" onclick="tinymce.activeEditor.undoManager.undo();" style="text-decoration:none">&nbsp;&nbsp;&#x276E;&#xFE0E;&nbsp;&nbsp;</a><a href="javascript:;" onclick="tinymce.activeEditor.undoManager.redo();" style="text-decoration:none">&nbsp;&nbsp;&#x276F;&#xFE0E;&nbsp;&nbsp;</a>');
            };
            if (!document.querySelector('#tiny_list')) {
                document.querySelector('.tox-tinymce').insertAdjacentHTML('afterend', '<div id="tiny_list" style="margin-top:-1px;padding:2px 8px;border:1px solid #ccc;background:#FFF;color:rgba(34,47,62,.7);font-size:12px;max-height:112px;overflow-y:scroll;display:none;"></div>');
            }
        });
        editor.on('ExecCommand', (e) => {
            if (e.command === 'mceMedia') {
                var ibox = document.querySelector('.tox-textfield');
                ibox.focus();
                ibox.addEventListener('paste', function (e) {
                    var val = e.clipboardData.getData("text");
                    e.preventDefault();
                    e.stopPropagation();
                    var ixigua = val.match(/^https?:\/\/(?:www|m)\.ixigua\.com\/(?:video\/)?(\d+)/i);
                    if (ixigua) { val = 'https://www.ixigua.com/iframe/' + ixigua[1]; };
                    var douyin = val.match(/^https?:\/\/(?:www|m)\.(?:ies)?douyin\.com\/(?:share\/)?video\/(\d+)/i);
                    if (douyin) { val = 'https://www.douyin.com/light/' + douyin[1]; };
                    var acfun = val.match(/^https?:\/\/www\.acfun\.cn\/v\/ac(\d+)/i);
                    if (acfun) { val = 'https://www.acfun.cn/player/ac' + acfun[1]; };
                    var acfun_m = val.match(/^https?:\/\/m\.acfun\.cn\/v\/\?ac=(\d+)/i);
                    if (acfun_m) { val = 'https://www.acfun.cn/player/ac' + acfun_m[1]; };
                    var bilibili = val.match(/^https?:\/\/(?:www|m)\.bilibili\.com\/video\/BV(\w+)/i);
                    if (bilibili) { val = 'https://player.bilibili.com/player.html?bvid=BV' + bilibili[1]; };
                    var bilibili_av = val.match(/^https?:\/\/(?:www|m)\.bilibili\.com\/video\/av(\w+)/i);
                    if (bilibili_av) { val = 'https://player.bilibili.com/player.html?aid=' + bilibili_av[1]; };
                    var youku = val.match(/^https?:\/\/(?:v|m)\.youku\.com\/(?:v_show|video)\/id_([\w\-\=]+)/i);
                    if (youku) { val = 'https://player.youku.com/embed/' + youku[1]; };
                    var sohu = val.match(/^https?:\/\/tv\.sohu\.com\/v\/([\w\-\=]+)\.html(?:\?vid=(\d+))?/i);
                    if (sohu) {
                        var bid = atob(sohu[1]).match(/^us\/\d+\/(\d+)/i);
                        if (bid) { val = 'https://tv.sohu.com/s/sohuplayer/iplay.html?bid=' + bid[1]; }
                        else if (sohu[2]) { val = 'https://tv.sohu.com/s/sohuplayer/iplay.html?vid=' + sohu[2]; }
                    };
                    var sohu_m = val.match(/^https?:\/\/m\.tv\.sohu\.com\/u\/vw\/([\d]+)/i);
                    if (sohu_m) { val = 'https://tv.sohu.com/s/sohuplayer/iplay.html?bid=' + sohu_m[1]; };
                    var qq = val.match(/^https?:\/\/v\.qq\.com\/x\/(?:cover|page)\/.*?(\w+)\.html/i);
                    if (qq) { val = 'https://v.qq.com/txp/iframe/player.html?vid=' + qq[1]; };
                    var qq_m = val.match(/^https?:\/\/m\.v\.qq\.com\/.*?vid=(\w+)/i);
                    if (qq_m) { val = 'https://v.qq.com/txp/iframe/player.html?vid=' + qq_m[1]; };
                    var music163_0 = val.match(/^https?:\/\/(?:y\.)?music\.163\.com\/(?:m|\#)\/playlist\?id=(\d+)/i);
                    if (music163_0) { val = 'https://music.163.com/outchain/player?type=0&id=' + music163_0[1]; };
                    var music163_1 = val.match(/^https?:\/\/(?:y\.)?music\.163\.com\/(?:m|\#)\/album\?id=(\d+)/i);
                    if (music163_1) { val = 'https://music.163.com/outchain/player?type=1&id=' + music163_1[1]; };
                    var music163_2 = val.match(/^https?:\/\/(?:y\.)?music\.163\.com\/(?:m|\#)\/song\?id=(\d+)/i);
                    if (music163_2) { val = 'https://music.163.com/outchain/player?type=2&id=' + music163_2[1]; };
                    ibox.value = val;
                });
            };
        });
    }
  • 头像
    C
    版主组
    2022-11-08 11:53
    Xiuno·TinyMCE(2023.10.29)
    CF 跟【修罗中国】投票插件有冲突,不知道是哪边问题。 &nbsp; 视频上传按钮还是加上嵌入比较好,一般人不知道发视频的步骤

    投票插件发这里来看看?我没账号下载不了

    嵌入那个把tiny.js:328行注释掉就行了

    document.querySelector('.tox-dialog__body-nav').style.display = 'none';

    不过感觉意义不大,现在这样更美观简洁,使用步骤上也方便。

    我遇见过不下10次了,都是问怎么粘贴播放页地址进去没法出现播放页面。

    一般小白的话根本不知道嵌入那玩意怎么个用法,都是直接把页面地址往里面贴……

    而且xiuno的过滤机制是只有管理员能发iframe,其它用户的iframe必须改系统过滤。

    所以对于普通用户来说,也就只能用这几家的iframe,那还不如直接贴页面地址方便。

  • 头像
    C
    版主组
    2022-11-08 10:59
    Xiuno·TinyMCE(2023.10.29)
    CF 我测试可以啊,你需要上传头像解锁上传权限

    提示所在用户组权限不足,应该是顶楼超过编辑时间了。

  • 头像
    C
    版主组
    2022-11-08 00:27
    Xiuno·TinyMCE(2023.10.29)

    这里有个刚刚修改版的,把底部撤销按钮的图标优化了一下,手机上更方便。

    附件已删除

    最后于 2022-11-08 13:00 被C编辑 ,原因:
  • 头像
    C
    版主组
    2022-11-08 00:26
    Xiuno·TinyMCE(2023.10.29)
    CF 我也更换成新编辑器了,哈哈 #include &lt;stdio.h&gt; int main() { printf("Hello 哈哈哈"); ...

    直接贴B站播放页地址

    话说我附件更新不了,权限不足

  • 头像
    C
    版主组
    2022-11-07 23:14
    Xiuno·TinyMCE(2023.10.29)
    CF 语言文件是精简了吗?

    没有啊,那个翻译我忘了什么时候搞的了,一直就没换过