完成3个核心的控件EpsContentEditor & EpsEditorPager,EpsLoadingInfo

这3个组件都是用纯dojo widget模式实现的,注册的名字空间是eps.widget,因此可以复用到以后的任何项目中。

EpsEditorPager
这是一个分页的组件,可以实现分页的编辑器。通过该组件,可以让普通的TextArea和input都能够支持分页。
目前实现的性能:

  • 为普通的TextArea/Input以及EpsContentEditor提供页切换
  • 支持添加/删除分页
  • 自动绑定外部数据,可以将pager内部存储的分页内容绑定到其他的text/textarea或者hidden field,一旦pager相关的内容发生变化,会自动更新绑定对象的value
  • EpsEditorPager.png

    EpsContentEdito
    这是一个Richtext和纯文本编辑组件,通过集成fckeditor提供所见所得的编辑器,
    目前实现的性能:

  • 集成FckEditor
  • 支持内容分页(集成EpsEditorPager)
  • 自动绑定外部数据,通过EpsEditorPager
  • 支持纯文本(Textarea)和所见所得编辑器(fckEditor)
  • TODO:

  • 运行期自动切换文本和Fckeditor
  • 为文本编辑器提供快速的HtmlTag标签工具栏
  • More:

  • 实现BBCode等编辑器plugin
  • EpsContentEditor

    EpsLoadingInfo
    一个类似“正在加载…”的指示条,具有普通,成功,错误3个状态(不同的样式),延迟关闭。

    Object Hierarchy and Inheritance in JavaScript

    这篇文章Object Hierarchy and Inheritance in JavaScript讲述了Javascript对象模型,非常详细,解决了一些困扰我的疑问,记录下来。

    内容管理UI

    调试了一天,在firefox下面好好的,在IE6下面总是报错,最后才发现是因为某些tag的嵌套在IE下面有问题,虽然显示正常,但是在js中无法得到正确的dom节点的css属性,还好最后还是找出来了。
    DW8太占内存了,虽然我的T41是1G内存,但是开了Zend和Eclipse,Firefox后,再跑Dw8就有点吃劲了,另外DW8的code fold功能还是偏弱些,不太直观,于是今天换了notepad++,还是不错的,比较满意,而且是GPL的。

    2个js相关的项目

    javaeye的这个帖子引出2个有趣的项目,和js相关的:
    http://jsvm.org/

    http://j2s.sourceforge.net/

    2个项目的作者都是国人,而且都具有java和js的多年经验,很不错的。

    相对而言,我对后者颇有兴趣,不过暂时不会在eps中使用。jsvm看起来也不错,已经把yahoo ui库移植进去了,但是目前dojo已经足够我们使用了,也不会考虑的。即便如此,如果做快速的东西,可以考虑jsvm版本的yahoo ui.

    S1被S3替换

    原S1服务器停止使用,S1上的论坛服务转移至S3。原S3的www负载均衡停止,目前暂时由S5一台提供www服务。

    PHP decodeURIComponent实现

    在使用dojo bind提交的时候,在php服务端接受的代码都是&#xxxx形式,这是因为dojo.bind使用xmlhttp提交的时候,使用encodeURIComponent对提交的内容进行了encoding,在服务端接收的时候需要将其还原。对于Php5.1似乎可以使用html_entity_decode直接指定charset为utf-8来进行还原,但是对于php4则无法实现。Googling了半天,发现没有人解决,dojo的mailinglist有人提出过,但是没有解决,可能是php开发人员很少用dojo或者xmlhttp吧。没有办法,自己写了一个函数,虽然需要使用mb_string,但是也算是解决了这个问题,我在httprequest的consturctur中判断,如果content_type为application/x-www-form-urlencoded则进行decoding。本来是打算写一个filter或者interceptor的,但后来一想没有必要,直接交由httprequest处理得了。

    /**
    * Hacking for decoding encodeURIComponent() && DOJO_encodeAscii
    *
    * NOTE:This function need Mb_string extension
    *
    * @param string $body
    * @return string
    */
    function decodeURIComponent($uri) {
    //decode decimal HTML entities added by web browser
    $uri = preg_replace(‘/&#\d{2,5};/ue’, “utf8_entity_decode(‘$0′)”, $uri );
    //decode hex HTML entities added by web browser
    //$uri = preg_replace(‘/&#x([a-fA-F0-7]{2,8});/ue’, “utf8_entity_decode(‘&#’.hexdec(‘$1′).’;')”, $uri );
    return mb_convert_encoding($uri,’GBK’,'UTF-8′);
    }
    /**
    * callback function for the decodeURIComponent
    *
    * Use Mb_string extension to decode utf-8 numericenties
    *
    * @param string $entity
    * @return string
    */
    function utf8_entity_decode($entity){
    $convmap = array(0×0, 0×2FFFF, 0, 0xFFFF);
    return mb_decode_numericentity($entity, $convmap,’utf-8′);
    }