IE中float的问题

在UI设计中,我们经常需要做一些浮动面板,点击后能够隐藏/显示,同时右侧/左侧的区域能够自动延伸。一般来说,我们可以固定浮动的面板width,
然后非浮动区域的padding-left或者padding-right为浮动面板的宽度,这样,只要隐藏的时候将padding-left设置为0即可,而且非浮动区域可以在不同的
分辨率下自适应。不过,该死的IE,如果你设置了非浮动区域的width为100%或者其他的值,那么浮动将无法实现,因此,不能显示声明非浮动区域的width,
及时它实际是100%。FUck IE,I love Firefox!

encoding惹的祸

由于page使用的gbk,但是ajax需要使用utf8,虽然一直凑合,但终究出现了问题。下了狠心,将encoding统一为utf8,包括mysql,smarty html模版,发现效率大大增强。首先由于mysql数据已经是utf8,所以使用json就无需再encoding了。此外,dojo.io发送上的数据,php可以直接识别,不用手动解析。我前篇post中说的那种情况就不复存在(因为都是utf8),当然这里有个附加选项,所有dojo.io.bind,需要强制encoding:utf-8。否则dojo使用自己的encodeAsicii就坏事了。还好,现在解决了我一直担心的问题。

完成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个状态(不同的样式),延迟关闭。

    内容管理UI

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


    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′);
    }