Эх сурвалжийг харах

增加后台富文本编辑框

jason 10 сар өмнө
parent
commit
6d1765a89c

+ 0 - 1
.gitignore

@@ -2,7 +2,6 @@
 /thinkphp/
 /vendor/
 /runtime/
-/addons/*
 #/public/assets/libs/
 /public/uploads/*
 .idea

+ 1 - 0
addons/summernote/.addonrc

@@ -0,0 +1 @@
+{"files":["public\\assets\\addons\\summernote\\css\\summernote.css","public\\assets\\addons\\summernote\\css\\summernote.min.css","public\\assets\\addons\\summernote\\font\\summernote.eot","public\\assets\\addons\\summernote\\font\\summernote.ttf","public\\assets\\addons\\summernote\\font\\summernote.woff","public\\assets\\addons\\summernote\\font\\summernote.woff2","public\\assets\\addons\\summernote\\js\\summernote.js","public\\assets\\addons\\summernote\\js\\summernote.min.js","public\\assets\\addons\\summernote\\lang\\summernote-zh-CN.js","public\\assets\\addons\\summernote\\lang\\summernote-zh-CN.min.js","public\\assets\\addons\\summernote\\lang\\summernote-zh-TW.js","public\\assets\\addons\\summernote\\lang\\summernote-zh-TW.min.js"],"license":"regular","licenseto":"42709","licensekey":"9MmQAOo4JF1Z5xjT 2pe6Eu8Ar2MHKyuKfS3LvU30gkgVSDIH+feWeKNb8Vk=","domains":["tms.cc"],"licensecodes":[],"validations":["0e0bb8ceebce2acec941e7767b5e2153"]}

+ 48 - 0
addons/summernote/Summernote.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace addons\summernote;
+
+use think\Addons;
+
+/**
+ * Summernote富文本编辑器
+ */
+class Summernote extends Addons
+{
+
+    /**
+     * 插件安装方法
+     * @return bool
+     */
+    public function install()
+    {
+        return true;
+    }
+
+    /**
+     * 插件卸载方法
+     * @return bool
+     */
+    public function uninstall()
+    {
+        return true;
+    }
+
+    /**
+     * @param $params
+     */
+    public function configInit(&$params)
+    {
+        $config = $this->getConfig();
+        $params['summernote'] = [
+            'classname'        => $config['classname'] ?? '.editor',
+            'height'           => $config['height'] ?? 250,
+            'minHeight'        => $config['minHeight'] ?? 250,
+            'placeholder'      => $config['placeholder'] ?? '',
+            'followingToolbar' => $config['followingToolbar'] ?? 0,
+            'airMode'          => $config['airMode'] ?? 0,
+            'toolbar'          => (array)json_decode($config['toolbar'] ?? '', true),
+        ];
+    }
+
+}

+ 111 - 0
addons/summernote/bootstrap.js

@@ -0,0 +1,111 @@
+require.config({
+    paths: {
+        'summernote': '../addons/summernote/lang/summernote-zh-CN.min'
+    },
+    shim: {
+        'summernote': ['../addons/summernote/js/summernote.min', 'css!../addons/summernote/css/summernote.min.css'],
+    }
+});
+require(['form', 'upload'], function (Form, Upload) {
+    var _bindevent = Form.events.bindevent;
+    Form.events.bindevent = function (form) {
+        _bindevent.apply(this, [form]);
+        try {
+            //绑定summernote事件
+            if ($(Config.summernote.classname || '.editor', form).length > 0) {
+                var selectUrl = typeof Config !== 'undefined' && Config.modulename === 'index' ? 'user/attachment' : 'general/attachment/select';
+                require(['summernote'], function () {
+                    var imageButton = function (context) {
+                        var ui = $.summernote.ui;
+                        var button = ui.button({
+                            contents: '<i class="fa fa-file-image-o"/>',
+                            tooltip: __('Choose'),
+                            click: function () {
+                                parent.Fast.api.open(selectUrl + "?element_id=&multiple=true&mimetype=image/", __('Choose'), {
+                                    callback: function (data) {
+                                        var urlArr = data.url.split(/\,/);
+                                        $.each(urlArr, function () {
+                                            var url = Fast.api.cdnurl(this, true);
+                                            context.invoke('editor.insertImage', url);
+                                        });
+                                    }
+                                });
+                                return false;
+                            }
+                        });
+                        return button.render();
+                    };
+                    var attachmentButton = function (context) {
+                        var ui = $.summernote.ui;
+                        var button = ui.button({
+                            contents: '<i class="fa fa-file"/>',
+                            tooltip: __('Choose'),
+                            click: function () {
+                                parent.Fast.api.open(selectUrl + "?element_id=&multiple=true&mimetype=*", __('Choose'), {
+                                    callback: function (data) {
+                                        var urlArr = data.url.split(/\,/);
+                                        $.each(urlArr, function () {
+                                            var url = Fast.api.cdnurl(this, true);
+                                            var node = $("<a href='" + url + "'>" + url + "</a>");
+                                            context.invoke('insertNode', node[0]);
+                                        });
+                                    }
+                                });
+                                return false;
+                            }
+                        });
+                        return button.render();
+                    };
+
+                    $(Config.summernote.classname || '.editor', form).each(function () {
+                        $(this).summernote($.extend(true, {}, {
+                            height: isNaN(Config.summernote.height) ? null : parseInt(Config.summernote.height),
+                            minHeight: parseInt(Config.summernote.minHeight || 250),
+                            toolbar: Config.summernote.toolbar,
+                            followingToolbar: parseInt(Config.summernote.followingToolbar),
+                            placeholder: Config.summernote.placeholder || '',
+                            airMode: parseInt(Config.summernote.airMode) || false,
+                            lang: 'zh-CN',
+                            fontNames: [
+                                'Arial', 'Arial Black', 'Serif', 'Sans', 'Courier',
+                                'Courier New', 'Comic Sans MS', 'Helvetica', 'Impact', 'Lucida Grande',
+                                "Open Sans", "Hiragino Sans GB", "Microsoft YaHei",
+                                '微软雅黑', '宋体', '黑体', '仿宋', '楷体', '幼圆',
+                            ],
+                            fontNamesIgnoreCheck: [
+                                "Open Sans", "Microsoft YaHei",
+                                '微软雅黑', '宋体', '黑体', '仿宋', '楷体', '幼圆'
+                            ],
+                            buttons: {
+                                image: imageButton,
+                                attachment: attachmentButton,
+                            },
+                            dialogsInBody: true,
+                            callbacks: {
+                                onChange: function (contents) {
+                                    $(this).val(contents);
+                                    $(this).trigger('change');
+                                },
+                                onInit: function () {
+                                },
+                                onImageUpload: function (files) {
+                                    var that = this;
+                                    //依次上传图片
+                                    for (var i = 0; i < files.length; i++) {
+                                        Upload.api.send(files[i], function (data) {
+                                            var url = Fast.api.cdnurl(data.url, true);
+                                            $(that).summernote("insertImage", url, 'filename');
+                                        });
+                                    }
+                                }
+                            }
+                        }, $(this).data("summernote-options") || {}));
+                    });
+                });
+            }
+        } catch (e) {
+
+        }
+
+    };
+});

+ 115 - 0
addons/summernote/config.php

@@ -0,0 +1,115 @@
+<?php
+
+return [
+    [
+        'name'    => 'classname',
+        'title'   => '渲染文本框元素',
+        'type'    => 'string',
+        'content' => [],
+        'value'   => '.editor',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '用于对指定的元素渲染,一般情况下无需修改',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'height',
+        'title'   => '默认高度',
+        'type'    => 'string',
+        'content' => [],
+        'value'   => '250',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '编辑器默认高度,auto表示自适应高度',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'minHeight',
+        'title'   => '默认高度',
+        'type'    => 'number',
+        'content' => [],
+        'value'   => '250',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '编辑器最低高度',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'followingToolbar',
+        'title'   => '是否浮动工具栏',
+        'type'    => 'radio',
+        'content' => [
+            1 => '是',
+            0 => '否',
+        ],
+        'value'   => '0',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '是否浮动工具栏,通常配置自适应高度时使用',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'airMode',
+        'title'   => '内嵌模式',
+        'type'    => 'radio',
+        'content' => [
+            1 => '是',
+            0 => '否',
+        ],
+        'value'   => '0',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '启用内嵌模式后将禁用工具栏',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => 'toolbar',
+        'title'   => '默认工具栏配置',
+        'type'    => 'text',
+        'content' => [],
+        'value'   => '[' . "\r\n"
+            . '	["style", ["style", "undo", "redo"]],' . "\r\n"
+            . '	["font", ["bold", "underline", "strikethrough", "clear"]],' . "\r\n"
+            . '	["fontname", ["color", "fontname", "fontsize"]],' . "\r\n"
+            . '	["para", ["ul", "ol", "paragraph", "height"]],' . "\r\n"
+            . '	["table", ["table", "hr"]],' . "\r\n"
+            . '	["insert", ["link", "picture", "video"]],' . "\r\n"
+            . '	["select", ["image", "attachment"]],' . "\r\n"
+            . '	["view", ["fullscreen", "codeview", "help"]]' . "\r\n"
+            . ']',
+        'rule'    => 'required',
+        'msg'     => '',
+        'tip'     => '',
+        'ok'      => '',
+        'extend'  => 'rows=10',
+    ],
+    [
+        'name'    => 'placeholder',
+        'title'   => '默认占位文字',
+        'type'    => 'string',
+        'content' => [],
+        'value'   => '',
+        'rule'    => '',
+        'msg'     => '',
+        'tip'     => '',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+    [
+        'name'    => '__tips__',
+        'title'   => '温馨提示',
+        'type'    => 'string',
+        'content' => [],
+        'value'   => '工具栏配置请参考文档:https://summernote.org/deep-dive/',
+        'rule'    => '',
+        'msg'     => '',
+        'tip'     => '',
+        'ok'      => '',
+        'extend'  => '',
+    ],
+];

+ 16 - 0
addons/summernote/controller/Index.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace addons\summernote\controller;
+
+use think\addons\Controller;
+
+class Index extends Controller
+{
+
+    public function index()
+    {
+        $this->error("当前插件暂无前台页面");
+    }
+
+}
+

+ 10 - 0
addons/summernote/info.ini

@@ -0,0 +1,10 @@
+name = summernote
+title = Summernote富文本编辑器
+intro = 一款简单的富文本编辑器
+author = FastAdmin
+website = http://www.fastadmin.net
+version = 1.1.2
+url = /addons/summernote
+state = 1
+license = regular
+licenseto = 42709