主题: 试用一天后的一些建议,改动,和疑似Bug
作者: 真红, 发布日期: 2009-09-15 22:57:53, 浏览数: 5924

本人今天刚接触KE,觉得架构的非常好,有一个清晰健壮且易扩展的底层支持,相信KE以后一定会有大作为。
以下是今天试用一天下来的一些想法,个人雏议,说错请不必在意。

另外,似乎没有上传附件功能哦, 本来还想把今天改动这些代码都打包发上来的。

建议 1:
增加dialog的init事件
插件窗口在载入的时候做一些事情,但是并没有接口。click事件里处理,不太对吧?
简单说,比如about插件,想要在dialog载入的时候,读取KE.version写入,目前好像没有好的实现方案。

建议 2:
建议作者在代码缩入的时候,试用tab ^_^
今天我只是把所有的缩入替换成tab,发现竟然可以节省10多kb  - -!

修改 1:
很多编辑器,都把flash,音频等分开处理,个人总觉得有点多余 (^_^@)
今天尝试了一下KE的插件机制,做了点小改动。

删除flash插件, 将flash,mp3,flv,其它音频视频合并起来,集中到多媒体中。增加了一个flv播放器(vcastr的)用于播放flv,一个flash的mp3播放器(google的,因为个人不喜欢M$的MP,老实打不开,而且不同系统下界面不一样,ff支持又不是很好)用于播放mp3。
这个改动修改了plugin/media.html, 和 kindeditor.js - KE.plugin['media'] - privew, exec

扩展 1:
为image插件增加了一个referMethod属性,并可以通过KE.config配置。增加的目的是这样。
项目中可能有多个功能使用KE, 如果都需要上传图片, 每个功能上传的图片我是要做不同处理的,比如缩略图,比如存放位置和文件命名规则各自不同。
referMethod在KE的引用页面指定,用于指定当前功能标示,上传图片时此会传递给后台图片上传程序(通过Request.Form["referMethod"]获取),然后根据各自的规则处理。
这个改动修改了plugin/image.html, 和 kindeditor.js - KE.plugin['image'] - exec。


疑似Bug 1:
在火狐下,加入flash后,编辑界面似乎不会显示flash? 连占位符都没有
在IE下正常,不知道是否我浏览器问题。


疑似Bug 2:
相对路径的转换,可能有点小问题。
添加图片, 选择远程, 输入一个本域的图片。 比如我的域名是 www.a.com, 添加图片功能中选择远程,输入 http://www.a.com/images/1.jpg,
插入后,浏览器会自动将我的src属性转换成相对路径 "images/1.jpg",可以确认这是浏览器做的,不是KE做的。这个转换后的路径,不是以 "/" 开头的,这个就太相对了。
假如我把这些数据存储起来,而我的文章显示页面是位于 http://www.a.com/module/article.aspx,那么很显然图片会无法显示。

同理,flash也会遇到这样的问题。


疑似Bug3:
js文件872行-874行对相对路径做了处理。
但是似乎没有考虑到自定义属性? 如果我的自定义属性确实需要有定义一个绝对路径的值呢?
个人以为,相对路径处理可能只需要针对src属性即可,并且只处理头部为 "http://" 的,并不需要对 val 进行全局判断, 不知是否有疏漏之处。


疑似Bug 4:
js文件878行,判断val如果没有被引号括起来,则修正。
但是在858行,val = val.substr(1, val.length - 2);
这里显然是想当然的认为val已经被引号括起来了?  这个处理顺序是否倒了呢?

综合以上问题,我自己做了些处理,如下:
// javascript code
// 以下代码替换854 - 878 行
// 刚发现一个会导致引用外部绝对地址,前面多一个 '/' 的问题,已修正。

                                        // if the val has '"', remove it temporarily
                    // to get the true-value
                    if (val.charAt(0) === '"') val = val.substr(1, val.length - 2);
                    // if the true-value is not empty
                    if (val !== '') {
                        if (key === "style") {
                            val = val.replace(/\s*([^\s]+?)\s*:(.*?)(;|$)/g, function($0, $1, $2) {
                                var k = $1.toLowerCase();
                                if (isFilter) {
                                    if (typeof htmlTagHash[tagName]['.' + k] == "undefined") return '';
                                }
                                var v = KE.util.trim($2.toLowerCase());
                                v = KE.util.rgbToHex(v);
                                return k + ':' + v + ';';
                            });
                            val = KE.util.trim(val);
                            if (val === '') return '';
                            val = '"' + val + '"';
                        }
                        if (key === "src" || key === "href")
                        {
                            // just for the values with 'http://' at beginning ?
                            if(val.substr(0, 7) === 'http://')
                            {
                                // at the same domain, set to relative path
                                if(val.substr(7, domain.length) === domain) val = val.substr(domain.length + 7);
                            }
                            else
                            {
                                // for relative path, confirm with a '/' lead
                                if (val.charAt(0) !== '/') val = '/' + val;
                            }
                        }
                    }
                    // add a '"' with the val
                    return ' ' + key + '="' + val + '" ';

// javascript code end

作者: Roddy, 发布日期: 2009-09-16 12:49:50
建议 1:
增加dialog的init事件
插件窗口在载入的时候做一些事情,但是并没有接口。click事件里处理,不太对吧?
简单说,比如about插件,想要在dialog载入的时候,读取KE.version写入,目前好像没有好的实现方案。

> 不错的建议,dialog确实需要加强了。

建议 2:
建议作者在代码缩入的时候,试用tab ^_^
今天我只是把所有的缩入替换成tab,发现竟然可以节省10多kb  - -!

> 用空格可以在各种开发工具上保持一致的缩进,下载js时一般有gzip压缩,性能不是问题。

修改 1:
很多编辑器,都把flash,音频等分开处理,个人总觉得有点多余 (^_^@)

> 程序上逻辑相同,但一般用户可能以为没有插入Flash的功能,这是用户体验的问题,有待于观察。

扩展 1:
为image插件增加了一个referMethod属性,并可以通过KE.config配置。增加的目的是这样。
项目中可能有多个功能使用KE, 如果都需要上传图片, 每个功能上传的图片我是要做不同处理的,比如缩略图,比如存放位置和文件命名规则各自不同。
referMethod在KE的引用页面指定,用于指定当前功能标示,上传图片时此会传递给后台图片上传程序(通过Request.Form["referMethod"]获取),然后根据各自的规则处理。
这个改动修改了plugin/image.html, 和 kindeditor.js - KE.plugin['image'] - exec。

> 目前插件机制没有配置功能,比如碰到你说的情况只能改程序,写插件时动态添加配置属性可能是比较好的解决方法。比如你的程序包含aaa插件,那你执行KE.show时可以用参数配置aaa插件。

疑似Bug 1:
在火狐下,加入flash后,编辑界面似乎不会显示flash? 连占位符都没有
在IE下正常,不知道是否我浏览器问题。

> 这应该算是Firefox的问题,要解决的话只能用图片替换Flash,最后输出时再转换。

疑似Bug 2:
相对路径的转换,可能有点小问题。
添加图片, 选择远程, 输入一个本域的图片。 比如我的域名是 www.a.com, 添加图片功能中选择远程,输入 http://www.a.com/images/1.jpg, 
插入后,浏览器会自动将我的src属性转换成相对路径 "images/1.jpg",可以确认这是浏览器做的,不是KE做的。这个转换后的路径,不是以 "/" 开头的,这个就太相对了。
假如我把这些数据存储起来,而我的文章显示页面是位于 http://www.a.com/module/article.aspx,那么很显然图片会无法显示。

同理,flash也会遇到这样的问题。

> 路径处理每个浏览器都不一致,你说的情况应该在Firefox出现。

疑似Bug3:
js文件872行-874行对相对路径做了处理。
但是似乎没有考虑到自定义属性? 如果我的自定义属性确实需要有定义一个绝对路径的值呢?
个人以为,相对路径处理可能只需要针对src属性即可,并且只处理头部为 "http://" 的,并不需要对 val 进行全局判断, 不知是否有疏漏之处。

> 目前路径处理确实不太好,但只针对src也不行,还有href。

疑似Bug 4:
js文件878行,判断val如果没有被引号括起来,则修正。
但是在858行,val = val.substr(1, val.length - 2);
这里显然是想当然的认为val已经被引号括起来了?  这个处理顺序是否倒了呢?

> 这部分处理的HTML是innerHTML返回的HTML,所以key === "style" 时肯定有双引号,如果没有双引号的情况请指出。
回复
作者: 阿辛, 发布日期: 2009-09-23 15:06:02

强啊,牛人层出不穷啊

回复
发表新帖 发表回复