From 83c11e2cba2cb56597b5b61352d02e19567edf88 Mon Sep 17 00:00:00 2001 From: hafeyang Date: Tue, 25 Oct 2011 09:45:30 +0800 Subject: [PATCH 1/3] =?UTF-8?q?tangramgrid=E5=88=9D=E5=A7=8B=E5=AF=BC?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tangramgrid/.project | 11 + src/tangramgrid/demos/columnfreeze.html | 50 + src/tangramgrid/demos/editable.html | 529 + src/tangramgrid/demos/groupheader.html | 56 + src/tangramgrid/demos/groupsummary.html | 192 + src/tangramgrid/demos/index.html | 135 + src/tangramgrid/demos/noahdata.json | 21 + src/tangramgrid/demos/pagesort.html | 52 + src/tangramgrid/demos/row-sortable.html | 62 + src/tangramgrid/demos/rowexpand.html | 57 + src/tangramgrid/demos/treegrid.html | 134 + src/tangramgrid/docs/index.html | 1080 ++ src/tangramgrid/docs/shared.css | 359 + .../docs/syntaxhighlighter/shBrushJScript.js | 52 + .../docs/syntaxhighlighter/shBrushXml.js | 69 + .../docs/syntaxhighlighter/shCore.js | 17 + .../docs/syntaxhighlighter/shCoreDefault.css | 328 + src/tangramgrid/docs/todo.txt | 68 + src/tangramgrid/index.html | 25 + src/tangramgrid/resources/tangram.grid.css | 66 + src/tangramgrid/tangram/min.bat | 11 + src/tangramgrid/tangram/tangram-1.3.9.js | 8 + .../tangram/tangram-1.3.9.source.js | 11753 ++++++++++++++++ src/tangramgrid/tangram/tangram-datepicker.js | 1600 +++ src/tangramgrid/tangram/tangram.baseUI.js | 2 + .../tangram/tangram.baseUI.source.js | 771 + .../tangram/tangram.grid.columndragsort.js | 197 + .../tangram/tangram.grid.columnfreeze.js | 73 + .../tangram/tangram.grid.editable.js | 281 + .../tangram/tangram.grid.groupsummary.js | 269 + src/tangramgrid/tangram/tangram.grid.js | 1280 ++ .../tangram/tangram.grid.keyboard.js | 185 + .../tangram/tangram.grid.pagesort.js | 24 + .../tangram/tangram.grid.rowexpand.js | 71 + .../tangram/tangram.grid.rowsortable.js | 98 + .../tangram/tangram.grid.treegrid.js | 278 + .../tangram/yuicompressor-2.4.6.jar | Bin 0 -> 852834 bytes 37 files changed, 20264 insertions(+) create mode 100644 src/tangramgrid/.project create mode 100644 src/tangramgrid/demos/columnfreeze.html create mode 100644 src/tangramgrid/demos/editable.html create mode 100644 src/tangramgrid/demos/groupheader.html create mode 100644 src/tangramgrid/demos/groupsummary.html create mode 100644 src/tangramgrid/demos/index.html create mode 100644 src/tangramgrid/demos/noahdata.json create mode 100644 src/tangramgrid/demos/pagesort.html create mode 100644 src/tangramgrid/demos/row-sortable.html create mode 100644 src/tangramgrid/demos/rowexpand.html create mode 100644 src/tangramgrid/demos/treegrid.html create mode 100644 src/tangramgrid/docs/index.html create mode 100644 src/tangramgrid/docs/shared.css create mode 100644 src/tangramgrid/docs/syntaxhighlighter/shBrushJScript.js create mode 100644 src/tangramgrid/docs/syntaxhighlighter/shBrushXml.js create mode 100644 src/tangramgrid/docs/syntaxhighlighter/shCore.js create mode 100644 src/tangramgrid/docs/syntaxhighlighter/shCoreDefault.css create mode 100644 src/tangramgrid/docs/todo.txt create mode 100644 src/tangramgrid/index.html create mode 100644 src/tangramgrid/resources/tangram.grid.css create mode 100644 src/tangramgrid/tangram/min.bat create mode 100644 src/tangramgrid/tangram/tangram-1.3.9.js create mode 100644 src/tangramgrid/tangram/tangram-1.3.9.source.js create mode 100644 src/tangramgrid/tangram/tangram-datepicker.js create mode 100644 src/tangramgrid/tangram/tangram.baseUI.js create mode 100644 src/tangramgrid/tangram/tangram.baseUI.source.js create mode 100644 src/tangramgrid/tangram/tangram.grid.columndragsort.js create mode 100644 src/tangramgrid/tangram/tangram.grid.columnfreeze.js create mode 100644 src/tangramgrid/tangram/tangram.grid.editable.js create mode 100644 src/tangramgrid/tangram/tangram.grid.groupsummary.js create mode 100644 src/tangramgrid/tangram/tangram.grid.js create mode 100644 src/tangramgrid/tangram/tangram.grid.keyboard.js create mode 100644 src/tangramgrid/tangram/tangram.grid.pagesort.js create mode 100644 src/tangramgrid/tangram/tangram.grid.rowexpand.js create mode 100644 src/tangramgrid/tangram/tangram.grid.rowsortable.js create mode 100644 src/tangramgrid/tangram/tangram.grid.treegrid.js create mode 100644 src/tangramgrid/tangram/yuicompressor-2.4.6.jar diff --git a/src/tangramgrid/.project b/src/tangramgrid/.project new file mode 100644 index 0000000..bf62259 --- /dev/null +++ b/src/tangramgrid/.project @@ -0,0 +1,11 @@ + + + tangramgrid + + + + + + + + diff --git a/src/tangramgrid/demos/columnfreeze.html b/src/tangramgrid/demos/columnfreeze.html new file mode 100644 index 0000000..ee3f892 --- /dev/null +++ b/src/tangramgrid/demos/columnfreeze.html @@ -0,0 +1,50 @@ + + + + + Tangram Grid Column Freeze + + + + + + + +

列冻结

+ +
+ + + + + + + diff --git a/src/tangramgrid/demos/editable.html b/src/tangramgrid/demos/editable.html new file mode 100644 index 0000000..e7c19bf --- /dev/null +++ b/src/tangramgrid/demos/editable.html @@ -0,0 +1,529 @@ + + + + + Tangram Grid Editable + + + + + + + + + + + + +

可编辑表格

+

方式一:全部编辑

+ +
+ + + + +

方式二:逐行编辑

+
+ + + + +

方式三:逐单元格编辑(点击编辑)tab键切换至下一个单元格

+
+ + + + diff --git a/src/tangramgrid/demos/groupheader.html b/src/tangramgrid/demos/groupheader.html new file mode 100644 index 0000000..7b1ad08 --- /dev/null +++ b/src/tangramgrid/demos/groupheader.html @@ -0,0 +1,56 @@ + + + + + Tangram-Grid-Grouped-Header + + + + + + + + +

列头分组 & 列头拖动排序

+
+ + + + + + + + diff --git a/src/tangramgrid/demos/groupsummary.html b/src/tangramgrid/demos/groupsummary.html new file mode 100644 index 0000000..7a88c0a --- /dev/null +++ b/src/tangramgrid/demos/groupsummary.html @@ -0,0 +1,192 @@ + + + + + 表格数据分组统计 + + + + + + + + +

2011全球100强企业

+
+ + + diff --git a/src/tangramgrid/demos/index.html b/src/tangramgrid/demos/index.html new file mode 100644 index 0000000..f57b1f3 --- /dev/null +++ b/src/tangramgrid/demos/index.html @@ -0,0 +1,135 @@ + + + + + Tangram-Grid + + + + + + + + +
+ + + + + + + + + + + diff --git a/src/tangramgrid/demos/noahdata.json b/src/tangramgrid/demos/noahdata.json new file mode 100644 index 0000000..4a78eb2 --- /dev/null +++ b/src/tangramgrid/demos/noahdata.json @@ -0,0 +1,21 @@ +{ + "success":true, + "message":"ok", + "data":{ + "page":{ + "total":"52" + }, + "list":[ + {"id":"42","nodeId":"1","name":"z0614_ui_sample_all","sysId":"3","creator":"yhf","createTime":"2011-06-14 14:58:37","lastVersion":"\u6682\u65e0","dataKey":"\/data\/82471ffb83615a57b9ab64826dd98061","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU","status":"0"}, + {"id":"41","nodeId":"1","name":"z0614_bws_sample","sysId":"3","creator":"yhf","createTime":"2011-06-14 14:55:22","lastVersion":"\u6682\u65e0","dataKey":"\/data\/645307039c1307733346d2f74e990bb2","publisher":"","publishTime":"","canAddVersion":0,"nodeName":"BAIDU","nodePath":"BAIDU","status":0}, + {"id":"40","nodeId":"1","name":"z0614_ui_sample","sysId":"3","creator":"yhf","createTime":"2011-06-14 11:51:43","lastVersion":"\u6682\u65e0","dataKey":"\/data\/e80a106b9e02175e161edcccca00ff8a","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU","status":"0"}, + {"id":"39","nodeId":"1","name":"yzjtest061300","sysId":"3","creator":"yhf","createTime":"2011-06-13 17:33:56","lastVersion":"\u6682\u65e0","dataKey":"\/data\/d264625a61e7b9b772437ccbd0b39822","publisher":"","publishTime":"","canAddVersion":0,"nodeName":"BAIDU","nodePath":"BAIDU","status":0}, + {"id":"38","nodeId":"1","name":"cuijie_test","sysId":"3","creator":"yhf","createTime":"2011-06-13 15:05:56","lastVersion":"\u6682\u65e0","dataKey":"\/data\/107ffcb12c5c83c7db299624fd6f17ae","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU","status":0}, + {"id":"37","nodeId":"1","name":"test_da_reload","sysId":"3","creator":"yhf","createTime":"2011-06-09 15:10:34","lastVersion":"\u6682\u65e0","dataKey":"\/data\/d7c7da05c6a6a371ecb6ad809c60e0e9","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU","status":0}, + {"id":"36","nodeId":"1","name":"test_da","sysId":"3","creator":"yhf","createTime":"2011-06-09 15:09:39","lastVersion":"\u6682\u65e0","dataKey":"\/data\/a5ee0dac201f21956d7c94834b2dc407","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU","status":"1"}, + {"id":"35","nodeId":"1","name":"ui_single","sysId":"3","creator":"xyz","createTime":"2011-06-07 19:58:16","lastVersion":"\u6682\u65e0","dataKey":"\/data\/91e54f5ff3e195265c16f73b868b6122","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU","status":1}, + {"id":"34","nodeId":"1","name":"yanzhijietest060791","sysId":"3","creator":0,"createTime":"2011-06-07 10:54:16","lastVersion":"\u6682\u65e0","dataKey":"\/data\/8ec675a0c09417a21a68f3ecae52cc24","publisher":"","publishTime":"","canAddVersion":0,"nodeName":"BAIDU","nodePath":"BAIDU","status":0}, + {"id":"33","nodeId":"1","name":"z_bws_back","sysId":"3","creator":"yhf","createTime":"2011-06-03 19:15:17","lastVersion":"\u6682\u65e0","dataKey":"\/data\/6bf9c48c5ddd25bbf9df36b66ac22566","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU","status":"0"} + ] + } +} \ No newline at end of file diff --git a/src/tangramgrid/demos/pagesort.html b/src/tangramgrid/demos/pagesort.html new file mode 100644 index 0000000..87631d8 --- /dev/null +++ b/src/tangramgrid/demos/pagesort.html @@ -0,0 +1,52 @@ + + + + + Tangram-Grid-Pagesort 页内排序 + + + + + + + +

页内排序

+
+ + + diff --git a/src/tangramgrid/demos/row-sortable.html b/src/tangramgrid/demos/row-sortable.html new file mode 100644 index 0000000..df0b911 --- /dev/null +++ b/src/tangramgrid/demos/row-sortable.html @@ -0,0 +1,62 @@ + + + + + Tangram-Grid-Row-Sortable + + + + + + + +

行拖动

+
+ + + + + + diff --git a/src/tangramgrid/demos/rowexpand.html b/src/tangramgrid/demos/rowexpand.html new file mode 100644 index 0000000..dc0ebd6 --- /dev/null +++ b/src/tangramgrid/demos/rowexpand.html @@ -0,0 +1,57 @@ + + + + + Tangram Grid Row Expand + + + + + + + +

行数据展开

+
+ + + diff --git a/src/tangramgrid/demos/treegrid.html b/src/tangramgrid/demos/treegrid.html new file mode 100644 index 0000000..700811f --- /dev/null +++ b/src/tangramgrid/demos/treegrid.html @@ -0,0 +1,134 @@ + + + + + Tangram-Grid-TreeGrid + + + + + + + + + +

TreeGrid

+
+
+ + + +
+ + + diff --git a/src/tangramgrid/docs/index.html b/src/tangramgrid/docs/index.html new file mode 100644 index 0000000..eba40a7 --- /dev/null +++ b/src/tangramgrid/docs/index.html @@ -0,0 +1,1080 @@ + + + + + Tangram Grid Docs + + + + + + + + + +

Tangram Grid 使用说明

+
+

目录

+
+

概述

+
+ +

+ Tangrid Grid是基于Tangram 的一个Grid的控件,它易于使用,功能可拔插,非常方便的扩展出功能,性能优异。能兼容IE6。 +

+

功能列表

+ +
+
已经实现的功能
+
+
    +
  • 基本的表格数据展现,提供方法将json数据加载到grid中
  • +
  • 宽度自适应,设置表格宽度/高度 高度自适应高度,自动拉伸,也可以设置最小高度
  • +
  • ajax请求数据数据,分页,支持集成自定义分页控件,能适应不同的ajax请求数据
  • +
  • 表格单元格格式自定义,转换器,支持checkbox列
  • +
  • Ajax请求时支持遮罩,也可以自定义遮罩
  • +
  • 点击列头字段排序
  • +
  • 基本事件绑定,行选择,hover ,点击
  • +
  • 新增行/修改行/删除行
  • +
  • 列宽可以拖动
  • +
  • 列头分组
  • +
+
+
扩展功能(插件实现)
+
+
    +
  • 行可以通过拖放改变顺序(使用说明)
  • +
  • 列可以通过拖放改变顺序(使用说明)
  • +
  • 可编辑表格,支持常见的编辑类型,文本框,下拉框等,支持自定义编辑。(使用说明)
  • +
  • 子表格,点击某单元格出现一块区域显示子数据,可以是表格,也可以是自定义内容(使用说明)
  • +
  • 冻结列,列比较多的时候出现横向滚动条,可以冻结左边的n列,这些列不随横向滚动条滚动 (使用说明)
  • +
  • 数据显示的分组,统计,以及扩展机制,主要是扩展统计方法,支持从ajax请求结果读取统计数据,也支持javascript做简单统计。(使用说明)
  • +
  • Treegrid,将表格的某个列显示成树形结构,并支持延迟加载使用说明
  • +
  • 大数据量解决方案,延迟呈现,或者延迟加载
  • +
  • 键盘事件支持,支持键盘事件,光标操作等使用说明
  • +
  • 页内排序使用说明
  • +
+
+
+

一些约定

+ +
+
基本使用,方法,配置参数,事件,事件参数
+
+
    +
  • 基本使用: +

    控件的实例化统一用下面格式:

    +
    +
    +								var gridInstance = new baidu.ui.Grid({
    +									element:"firsttangramgrid" // other options
    +								});
    +								
    + +
  • +
  • 方法: +

    方法是指Grid实例的方法,调用方式统一为:

    +
    +								gridInstance.fn(parameter);
    +								
    +
  • +
  • 配置参数: +

    配置参数是指Grid实例化时参数中的配置,Grid实例化参数为一个json,该json的可以约定为配置参数,没有特别指出,参数均可默认:

    +

    配置参数中onXXXX为配置事件监听:

    +
    +								var gridInstance = new baidu.ui.Grid({
    +									element:"gridid",
    +									onSelect:function(e,data){//在ajax请求时触发
    +										//e为event对象
    +										//data 为事件参数,参见该select事件
    +									},
    +									onBeforeRequest:function(e,data){
    +										//onBeforeXXX事件中,可以读写事件参数data
    +										//return false; //如果在onBeforeXXX方法中返回false,将会阻止事件的触发
    +									}
    +								});
    +								
    +
  • +
  • 事件,事件参数: +

    事件是指Grid本身触发的事件,事件通过监听的方式:

    +
    +								gridInstance.addEventListener("select",function(e,data){//在行选择时触发
    +									//e 是event对象
    +									//data 是事件参数,在事件处理中可以读/写事件参数,参数格式应事件类型而异
    +								});
    +

    事件的命名约定:beforeXXX事件通常在事件真正执行事件前触发。

    +
    +								gridInstance.addEventListener("beforerequest",function(e,data){//在ajax请求前触发
    +									//e 是event对象
    +									//data 是事件参数,在事件处理中可以读/写事件参数,参数格式应事件类型而异
    +									//e.returnValue=false;//如果在事件监听中将event.returnValue=false。事件的默认动作将会阻止
    +								});
    +
  • +
  • 事件的执行顺序 +

    事件约定的执行顺序是:beforeXXX事件监听->配置参数中的onBeforeXXXX方法->事件本身动作->事件XXX监听动作->配置参数中的onXXXX方法

    +

    beforeXXX事件监听,配置参数中的onBeforeXXXX方法中阻止了默认动作的触发,后面的事件将不会执行

    +

    beforeXXX事件以及配置参数是否存在以文档的配置参数事件为准

    +
  • +
  • this的指向 +

    非特别说明,方法中的this均指向Grid的实例

    +
  • +
  • 其他 +

    使用Grid控件时不支持直接访问控件内部DOM

    +
  • +
+
+
+
+

配置参数

+ +
+

element

+

必选参数,DOM的id,确保DOM id在实例化Grid前已经存在

+

height

+

必选参数,数字。表格的高度

+ +

autoHeight

+

自动计算高度,默认为false。一旦设置为自动高度,height将最为Grid的最小高度。当表格数据小于height时,Grid将使用最小高度,否则将根据数据高度自动适应。

+

docktop

+

可以在表格顶部添加自定义html,例如表格标题,html的内容(不是绝对定位)将于表格一起计算高度和宽度

+
+				var gridInstance = new baidu.ui.Grid({
+					docktop:"

自定义表格标题

" //other options + }); +
+

columns

+ +

必选参数,数组,定义列模型

+
+				//不分组列头
+				var gridInstance = new baidu.ui.Grid({
+					columns:[
+						{field:'id',width:30,renderer:'checkbox'},
+						{field:'name',header:"机器名称",fix:true},
+						{field:'creator',header:"创建人",width:200},
+						{field:'dataKey',header:"dataKey",width:400,align:"right",renderer:function(data){return data.cellvalue+"-formated";}},
+						{field:'lastVersion',header:"lastVersion",width:200},
+						{field:'createTime',header:"创建时间",width:180}
+					]// other options
+				});
+				
+
+				//分组列头
+				var gridInstance = new baidu.ui.Grid({
+					columns:[
+						{field:'id',width:30,renderer:'checkbox',disableBy:function(){return Math.random()>0.5;}},
+						{field:'name',header:"机器名称",width:200,fix:true},
+						{header:"机器信息",columns:[
+							{field:'creator',header:"创建人",width:100},
+							{field:'dataKey',header:"dataKey",width:400,align:"right",renderer:function(data){return data.cellvalue+"-formated";}},
+							{field:'lastVersion',header:"lastVersion",width:200}
+						]},
+						{field:'createTime',header:"创建时间",width:180,resizable:false,sortable:false}
+					]// other options
+				});
+				
+

列配置属性

+
    +
  • field:字段名,对于列头分组的组头,field无需定义
  • +
  • width:列宽度,默认为 200。如果设置了fix=true,列宽由grid自动计算
  • +
  • + renderer:呈现方式,有两种配置方式: +

    字符串:读取baidu.ui.Grid.ext.coltype类型,如在baidu.ui.Grid.ext.coltype中定义了

    +
    +						baidu.ui.Grid.ext.coltype.checkbox={
    +							headerformat:function (header,colopt,colIndex){//列头内容计算方法
    +								//this为grid对象
    +								colopt.resizable=false;
    +								colopt.sortable=false;
    +								return (this.selectMode==2)?"":" ";
    +							},
    +							format:function(data){//单元格计算方法
    +								if(!this.selectMode){return "";}
    +								//{cellvalue:celltext,colopts:col,rowdata:row,rowIndex:i}
    +								var f = data.colopts.field||"",v = data.rowdata[f]||"";
    +								//是否禁用checkbox
    +								var d=((typeof(data.colopts.disableBy)=="function") && data.colopts.disableBy(data)===false)?" disabled='disabled' ":"";
    +								return "";
    +							},
    +							init:function(){//初始话行为(在Grid初始化时执行,类似Grid的插件)
    +								var g= this;
    +								g.addEventListener("select",function(e,data){
    +									var cb = baidu.dom.query("[rowindex="+data.rowIndex+"] .tg-cb",g.ref.gbody)[0];
    +									cb.checked=true;
    +								});
    +								//...
    +							}
    +						};
    +						
    +

    这样,在renderer中只需要指定renderer="checkbox"即可使用自定义呈现列。

    +

    renderer也可以直接定义成一个function:该函数返回单元格中显示内容,函数接受参数格式为:

    +
    +							{
    +								cellvalue:celltext,//单元格的数据
    +								colopts:col,//列配置对象
    +								rowdata:row,//该行数据
    +								select:true/false,//是否选中
    +								rowIndex:i//行下标,从0开始
    +							}
    +						
    + +
  • +
  • fix:是否自适应列宽,默认为false,只有一个列能设置该属性。 + 如果设置fix=true。该列的列宽将是表格控件容器的宽度减去其他列的宽度。 +
    + 如果在多个列中设置了该属性,只有第一个列起作用。 +
    + 分组列头的子列不支持该属性。 +
  • +
  • sortable:是否可以点击列头排序,默认为true
  • +
  • resizable:是否可以拖拽改变列宽,默认为true
  • +
  • columns:数组,如果定义了该属性,该列将作为列头分组的组头。
  • +
+

selectMode

+

行选择类型:0-为不选择,1-单选,2-多选,默认为0

+

selectBy

+

selectBy 初始选中是否选中字段或者判断函数,如果是字段名,则判断该字段是否为true/1/"1",如果是函数,函数接收参数{rowdata:rowdata,rowIndex:rowIndex}。 +
仅在selectMode!=0时作用,初始选中行不会触发select事件 +
selectMode==1时,最多只需选中一行 +

+

clickToSelect

+

点击行任何内容选中行,默认为true,如果设置为false,只有点击checkbox才能选中行

+

hoverhighlight

+

鼠标滑过行是否高亮,默认为true

+

strip

+

是否隔行变色,默认为true

+

page

+ +

分页配置,有三种配置方式:

+
    +
  • false: 不分页,分页条也不显示
  • +
  • Object:使用Grid自带分页条,默认page属性使用该项。默认配置信息为: +
    +
    +							page:{
    +								perPage:10,//初始每页记录条数
    +								pagenumbers:[10,20,50,100],//每页记录条数下拉框选项
    +								curPage:1,//初始的当前页,从1开始 
    +								total:0,//初始显示在分页条中总记录数
    +								tools:"显示在分页条中的扩展html"
    +							}
    +						
    +
  • +
  • 字符串:自定义分页条html,该html会参与表格高度计算 +
    +
    +							page:"
    这是一个简单的分页
    ",//... +
    +
    +
    +							//自定义分页条实现:模拟分页控件中的最后一页请求
    +							baidu.event.on(baidu.dom.g("btnLastPage"),"click",function(){
    +								var total = parseInt(griddemo.getData().data.page.total,10);
    +								var pages= parseInt((total+1)/10,10)+1;
    +								gridInstance.request({curPage:pages,perPage:10});
    +							});
    +						
    +
    + 当然,更好的建议是直接使用Tangram UI 中的插件扩展方式 +
  • + +
+

url

+

ajax请求的url

+ +

ajaxOption

+

直接作为tangram 中baidu.ajax.request(url,[options])的第二个参数,onsuccess定义无效。 + data参数只作为ajax请求的默认参数,可以被request方法参数替换

+

orderBy

+

初始的排序字段序号,格式形如"1":第二列 。"2-1":第三列的第二个子列(第三列必须是组头)

+

order

+

初始的排序类型 desc / asc

+

loadMask

+

ajax请求时遮罩控件区域,默认为false

+

loadMessage

+

ajax请求时遮罩提示,默认为"正在加载..."

+

onRowClick

+

行点击时触发,事件参数为:

+ +
+					{
+						rowIndex:rowIndex,//行序号
+						row:rowdata,//行数据
+						ref:{
+							cell:cell,//触发事件的单元格(td标签)
+							row:row,//触发事件的行(tr标签)
+							table:table,//触发事件的table标签DOM
+							src:src//触发事件的源对象
+						}
+					};
+				
+

onRowDblClick

+

行双击时触发,事件参数为:

+ +
+					{
+						rowIndex:rowIndex,//行序号
+						row:rowdata,//行数据
+						ref:{
+							cell:cell,//触发事件的单元格(td标签)
+							row:row,//触发事件的行(tr标签)
+							table:table,//触发事件的table标签DOM
+							src:src//触发事件的源对象
+						}
+					};
+				
+

onCellClick

+

单元格点击时触发,事件参数为:

+ +
+					{
+						columnIndex:columnIndex,//在table中是第几列 从0开始
+						refIndex:refIndex,//refIndex 在grid.optoins.columns中的下标,分组子列格式形如"1-0"
+						rowIndex:rowIndex,//行序号
+						column:column,//列配置信息
+						ref:{
+							cell:cell,//触发事件的单元格(td标签)
+							row:row,/触发行(tr标签)
+							table:table,//事件的table标签DOM
+							src:src//触发事件的源对象
+						}
+					}
+				
+

onSelect

+

行选中时触发,点击行将会选中/取消选中行,也可以调用selectRow方法选中行:事件参数与rowclick事件参数一致。 +
+ 如果时调用selectRow方法选中行,事件有关的参数为空

+

onUnSelect

+

取消行选中时触发,点击行将会选中/取消选中行,也可以调用unSelectRow方法取消选中行:事件参数与rowclick事件参数一致。 +
+ 如果时调用unSelectRow方法选中行,事件有关的参数为空

+

onBeforeRequest

+

ajax请求前调用方法,事件参数为ajaxOption

+ +

onBeforeLoad

+

ajax请求回调时触发,或者调用loadData时触发,事件参数为表格参数

+

onAfterLoad

+

数据加载完毕后触发,或者调用loadData后触发,事件参数为表格参数

+

onBeforeSort

+

排序前触发方法:事件参数为 + +
+

+						{
+							orderBy:col.field,//排序字段
+							order:order//排序类型 desc asc
+						}
+					
+

+
+

方法

+ +
+ +

resize

+

重新调整表格大小,通常在表格容器大小发生变化时调用。 +
参数({width:w,height:h}),width可以是数字,也可以是"auto",height必须是数字。 +
+ 如果设置autoHeight=true,height只是设置最小高度 +

+

request

+

ajax请求加载表格数据,参数为(data),data为ajaxOption中的data属性。data将会覆盖默认属性。 +
+ Grid默认的请求参数为: + +

+					{
+						orderBy:"排序字段",
+						order:"asc/desc",
+						curPage:"当前页数",
+						perPage:"每页记录条数"
+					}
+				
+

+

loadData

+

手动加载表格数据,参数为(data) +
+ 表格数据格式为: + +

+					{
+						"data":{
+							"page":{
+								"total":"52"//total属性如果缺省,自动取上次请求时的值,没有上次请求值,total是list.length
+							},
+							"list":[
+								{"id":"42","name":"z0614_ui_sample_all"},
+								{"id":"41","name":"z0614_bws_sample"},
+								//...
+							]
+						}
+					}
+				
+
+ 如果表格数据不是上述约定格式,可以通过onBeforeLoad方法或者beforeload事件解析成该格式。 +

+

getData

+

获取表格数据,格式形如表格数据格式

+ +

selectRow

+

选择行,参数为(rowIndex)

+ +

unSelectRow

+

选择行,参数为(rowIndex)

+ +

toggleSelectRow

+

选择行/取消选择行,参数为(rowIndex)

+ +

getSelected

+

获取选中行的第一行数据,如果没有选择行,返回null,可以指定参数列,返回指定列值,如getSelected("id"),只返回选中行id值,如getSelected(["id","name"]),只返回选中行{id:id,name:name}

+ +

getSelections

+

获取选中行数据,返回数组,可以指定参数列,返回指定列值,getSelections("id"),只返回选中行id值的数组,,getSelections(["id","name"]),返回选中行{id:id,name:name}的数组

+ +

reOrder

+

按字段排序,参数为(colIndex,order) colIndex格式形如"1","1-1"。order:asc/desc

+ +

hideColumn

+

隐藏列,参数为(colIndex)colIndex格式形如"1","1-1"。

+ +

showColumn

+

显示列,参数为(colIndex)colIndex格式形如"1","1-1"。

+ +

addRow

+

添加数据行,参数为(row[,rowIndex])row是新行数据,rowIndex:在第rowIndex行前新增,rowIndex如果不指定,行数据追加到表格最后。rowIndex从0开始,rowIndex如果为0,则在最上方添加行。addRow与addDOMRow区别

+ +

updateRow

+

添加数据行,参数为(row,rowIndex)row是新行数据,rowIndex:行序号,从0开始

+ +

deleteRow

+

删除数据行,参数为(rowIndex)rowIndex:行序号,从0开始。会删除表格数据

+

addDOMRow

+

添加DOM行,参数为(row[,rowIndex])row是新行数据,rowIndex:在第rowIndex行钱新增,rowIndex如果不指定,行数据追加到表格最后。rowIndex从0开始,rowIndex如果为0,则在最上方添加行。函数返回新行的rowIndex +
+ +

addRow与addDOMRow区别,addRow是在表格数据上添加一行,然后重新加载一次数据,数据加载完后会触发afterload事件,addDOMRow则是在表格上找到rowIndex行,利用DOM操作直接添加行,不会触发afterload事件

+

+

updateDOMRow

+

更新DOM行,参数为(row,rowIndex)row是行数据,rowIndex:行序号,从0开始

+

deleteDOMRow

+

删除DOM行,参数为(rowIndex),删除DOM row。不删除表格数据。

+

cellIterator

+

单元格遍历,参数为遍历函数,函数参数为:
+ +

+					{
+						column:colopts,//列选项
+						cell:cell,//单元格td
+						row:row,//单元格所在tr
+						colIndex:refcol,//列序号
+						rowIndex:rowIndex,//行序号
+						rowdata:rowdata//行数据
+					}
+					
+

+

showMask

+

显示遮罩层

+

hideMask

+

隐藏遮罩层

+
+

事件

+ +
+ +

resize

+

调用resize方法是触发,事件参数为{}

+ +

beforerequest

+

ajax请求前触发该方法,事件参数为ajaxOption

+

datafilter

+

ajax请求成功触发该方法,可以利用该事件将服务端返回数据解析成表格所需的数据,事件参数为ajax返回的json对象。

+ +

beforeload

+

数据加载前触发事件,在loadData方法中触发,参数为表格数据格式

+ +

afterload

+

数据加载后触发事件,参数为表格数据格式

+ +

unselect

+

取消行选择触发事件,参数为行点击参数格式

+ +

select

+

行选择触发事件,参数为行点击参数格式

+ +

beforesort

+

排序前触发事件,参数为{orderBy:orderfiled,order:"asc/desc"}

+ +

hidecolumn

+

隐藏列触发事件,参数为{colIndex:colIndex}

+ +

showcolumn

+

显示列触发事件,参数为{colIndex:colIndex}

+ +

addrow

+

添加数据行触发事件,参数为{row:row,rowIndex:rowIndex}

+ +

updaterow

+

更新数据行触发事件,参数为{row:row,rowIndex:rowIndex}

+ +

deleterow

+

删除数据行触发事件,参数为deleterow

+

adddomrow

+

添加DOM row触发,调用addDOMRow方法时触发参数{rowIndex:rowIndex,newRowIndex:newRowIndex,rowdata:rowdata}

+

updatedomrow

+

更新DOM row触发,调用updateDOMRow方法时触发,参数{rowIndex:rowIndex,rowdata:rowdata}

+

deletedomrow

+

删除DOM row触发,调用deleteDOMRow方法时触发,参数{rowIndex:rowIndex}

+ +

cellclick

+

单元格触发事件,参数为单元格点击事件参数

+ +

rowclick

+

表格行点击触发事件,参数为表格行点击事件参数

+

rowdblclick

+

表格行双击触发事件,参数为表格行点击事件参数

+ +

headercellclick

+

列头单元格点击触发事件,参数为{ref:{table:table,row:row,cell:cell,src:src}}

+

columnresize

+

列宽发生变化时,参数为{column:columnopts}

+ +

initialized

+

初始化完毕触发事件,参数为{}

+

beginrowjoin

+

拼接表格html字符串,在每行循环开始时,可以利用该事件添加数据行前面的html代码(比如在分组时需要在每组的第一行前面添加分组行) +
参数为: +
+

+						{
+							realColumnsLength:realColumnsLength,//实际table中row的列数(td个数)
+							rowdata:row,//该行的数据
+							rowIndex:i,//行号,从0开始
+							joinedArray:arr//已经拼接的字符串数组,如果需要添加html,可以使用joinedArray.push("the html before <tr>");
+						}
+					
+

+

endrowjoin

+

拼接表格html字符串,在每行循环结束时,可以利用该事件添加每数据行后面的html代码 +
参数为: +
+

+						{
+							realColumnsLength:realColumnsLength,//实际table中row的列数(td个数)
+							rowdata:row,//该行的数据
+							rowIndex:i,//行号,从0开始
+							joinedArray:arr//已经拼接的字符串数组,如果需要添加html,可以使用joinedArray.push("the html after </tr>");
+						}
+					
+

+

endrowsjoin

+

在最后一行数据行循环完执行,可以在表格最下方添加tr。如合计。 +
参数为: +
+

+						{
+							joinedArray:arr//已经拼接的字符串数组,如果需要添加html,可以使用joinedArray.push("the html after </tr>");
+						}
+					
+

+
+ +

插件功能文档

+
+ +

行扩展,数据展开/收缩

+ +

需引入tangram.grid.rowexpand.js

+
    +
  • 定义列类型:rowexpand,使用方法为: +
    +
    +					var griddemo = new baidu.ui.Grid({
    +						element:"gridwidthsub",
    +						columns:[
    +							{
    +								field:'id',
    +								width:30,
    +								align:"center",
    +								renderer:"rowexpand",//列类型rowexpand
    +								title:"点击查看/收起详细信息",// +/-提示信息
    +								onExpand:function(param){
    +									//param: {expandedrow:expandedrow,expandedcell:expandedcell,data:cellclickdata}
    +									param.expandedcell.innerHTML=baidu.string.format("
    机器#{name}详细信息
    ",this.getData().data.list[param.data.rowIndex]); + }, + onUnExpand:function(param){ + //param: {expandedrow:expandedrow,expandedcell:expandedcell,data:cellclickdata} + console.log("onunexpand"); + } + }, + //.. +
    +
  • +
  • + 将列renderer值设置为"rowexpand",其他属性: +
      +
    • title:是展开/收缩按钮的提示
    • +
    • onExpand:展开时执行的方法:接收参数{expandedrow:展开的tr标签,expandedcell:展开的td标签,data:单元格点击数据}
    • +
    • onUnExpand:收缩执行的方法:接收参数{expandedrow:收缩的tr标签,expandedcell:收缩的td标签,data:单元格点击数据}
    • +
    +
  • +
+ +

行可以拖动改变顺序

+

需引入tangram.grid.rowsortable.js

+
    +
  • 配置属性rowsortable,当该属性为true时,启用该功能
  • +
  • 定义方法: +
      +
    • serializeRows:返回当前行顺序,格式为[{当前第一行数据,rowIndex:原行序号},{当前第二行数据,rowIndex:原行序号},..]
    • +
    • getSerializedSelections:返回当前选择行顺序,格式为[{当前选中第一行数据,rowIndex:原行序号},{当前选中第二行数据,rowIndex:原行序号},..]
    • +
    +
  • +
  • 增加事件:拖放开始事件rowsortable-dragstart,拖放时触发事件rowsortable-draggging,拖放结束事件rowsortable-dragend,事件参数均为{}
  • +
+ +

列冻结

+

需引入tangram.grid.columnfreeze.js

+
    +
  • 配置属性freeze,冻结列数 +
    +
    +						var griddemo = new baidu.ui.Grid({
    +							element:"freezecolgrid",
    +							freeze:3,//冻结前三列
    +							columns:[
    +								{field:'id',width:30,renderer:"checkbox"},
    +								{field:'name',header:"机器名称",width:300},
    +								{field:'creator',header:"创建人",width:200},
    +								{field:'dataKey',header:"dataKey",width:400,align:"right",renderer:function(data){return data.cellvalue+"-formated";}},
    +								{field:'lastVersion',header:"lastVersion",width:200},
    +								{field:'canAddVersion',header:"是否可以添加版本",width:200,renderer:function(data){return data.cellvalue=="1"?"是":"否"}},
    +								{field:'createTime',header:"创建时间",width:180}
    +							],
    +						//...
    +						
    +
  • +
+ +

可编辑表格

+

需引入tangram.grid.editable.js

+
    +
  • 配置属性editMode,editMode=1时为逐行编辑,需要调用beginEditRow方法激活行编辑功能,editMode=2是为全部编辑,数据处于编辑状态,使用方式如下: +
    +
    +						var grid1 = new baidu.ui.Grid({
    +							element:"editablegrid1",
    +							editMode:2,//editMode:0-不编辑,1-单行编辑,2-多行编辑,3-逐单元格编辑
    +							columns:[{
    +									field:'name',
    +									header:"机器名称",
    +									width:200,
    +									editable:true,//可以编辑
    +									editOption:{
    +										editRenderer:function(param){//编辑时字段呈现
    +											return "";
    +										},
    +										onBeginEdit:function(param){//字段激活编辑时触发事件,可以为编辑控件添加行为
    +											var t= baidu.dom.query("[name=name]",param.cell)[0];
    +											t.onblur=function(){
    +												if(this.value==""){
    +													this.style.backgroundColor="yellow";
    +												}else{
    +													this.style.backgroundColor="";
    +												}
    +											}
    +											t.onfocus=function(){
    +												this.style.backgroundColor="";
    +											}
    +										},
    +										validate:function(param){//校验数据触发
    +											if(param.fieldValue==""){
    +												alert("机器名称不能为空!");
    +												baidu.dom.query("[name=name]",param.cell)[0].focus();
    +												return false;//return false 后面的字段不再校验
    +											}
    +											if(param.fieldValue=="abc"){
    +												//返回错误信息将继续校验后面的字段
    +												baidu.dom.query("[name=name]",param.cell)[0].style.backgroundColor="yellow";
    +												return "第"+(parseInt(param.rowIndex,10)+1)+"行机器名称不能为abc";
    +											}
    +											
    +										},
    +										getFieldValue:function(param){
    +											return baidu.dom.query("[name=name]",param.cell)[0].value;
    +										}
    +									}
    +								},//其他列
    +						
    +
  • +
  • 列定义中新增两属性:editable:是否可以编辑,默认是false,editOption编辑选项,可以定义四个方法。这四个方法参数均为cellIterator方法参数: +
      +
    • editRenderer:编辑单元格时单元格内的html,改方法必须返回单元格内的html,必须定义
    • +
    • onBeginEdit:激活单元格编辑时触发,用于初始化单元格编辑控件编辑行为,可空
    • +
    • validate:在调用表格控件的validate方法时触发的方法,用于数据校验,如果返回false,校验停止,如果返回字符串,认为是错误信息,校验会继续,校验错误信息可以通过getValidateErrors方法获取。
    • +
    • getFieldValue:声明从单元格编辑控件中取回字段值的方法,该方法必须放回字段的值。可以不定义,默认的取字段值的方法是查找单元格内name=字段名的表单控件值,如果是checkbox,取值是选中的checkbox的value用","的连接结果
    • +
    +
  • +
  • 单元格编辑方式(editMode==3)时,可以配置方法onEndEdit,在结束单元格编辑时触发,如果该方法返回false,该单元格不会结束编辑状态。增加endedit事件
    +

    该方法接受参数:

    +
    +							{
    +								columnIndex:columnIndex,//列序号
    +								refIndex:refIndex,//td的下标
    +								rowIndex:rowIndex,//行号
    +								column:column,//列配置信息
    +								cell:editingcell,//td DOM节点
    +								fieldValue:fieldValue//字段值
    +							}
    +						
    +

    逐单元格编辑的例子:

    +
    +							var grid3 = new baidu.ui.Grid({
    +								element:"editablegrid3",
    +								editMode:3,//editMode:0-不编辑,1-单行编辑,2-多行编辑,3-逐单元格编辑
    +								onEndEdit:function(e,data){
    +									var validateResult = this.validate();
    +									if(!validateResult){
    +										var errors = this.getValidateErrors();
    +										if(errors.length) alert(errors.join("\n"));
    +									}
    +									return validateResult;
    +								},
    +								columns:[{//...
    +						
    + +
  • +
  • 与可编辑表格相关的方法:

    +
      +
    • validate(rowIndex):校验数据,参数rowIndex是需要校验行的序号。 +
      rowIndex可以为空,为空时校验所有行数据,可以是数字,校验单行,可以是数组形如[0,1,2],校验多行数据。 +
      方法返回true/false,是否校验通过,校验返回错误信息也认为是校验不通过。
    • +
    • getValidateErrors():获取最近一次校验错误信息数组,每调用validate方法,错误信息数组会清空。
    • +
    • getCurrentData([fields[,rowsIndexes]]):获取当前编辑结果数据。返回数组,数组中为每行的数据。fields,rowsIndexes参数为需要获取的字段和行序号。
      +
      + fields :可以是单个字段名,也可以是字段名数组,如果为空,则获取获取所有字段
      + rowsIndexes :可以是单个行序号,获取一行的数据,也可以是行序号数组,获取多行数据,如果为空,则获取获取行数据
      +
      + getCurrentData(["id","name"],[0,1]) : 获取第1,2行的id,name字段值,返回格式为[{id:1,name:'name1'},[id:2,name:'name2']]
      + getCurrentData(null,[0,1]) : 获取第1,2行的所有字段值
      + getCurrentData() : 获取所有编辑行的所有字段值
      + getCurrentData("name") : 获取所有编辑行的所有name字段值,返回格式为[{name:"name1"},{name:"name2"}...]
      + getCurrentData("name",2) : 获取第3行的name字段值,返回格式为[{name:"name in row 3"}]
      +
      +
    • +
    • getEditingRowIndexes():获取正在编辑行的序号数组:返回值格式形如:[0,1,2...],仅在editMode=1逐行编辑时有效
    • +
    • beginEditRow(rowIndex):激活行编辑,rowIndex为需要激活编辑的行序号,数字,激活一行,数组,激活多行,为空的话,不激活任何行,仅在editMode=1逐行编辑时有效
    • +
    • endEditRow(rowIndex):结束行编辑,rowIndex需要结束编辑的行序号,数字,激活一行,数组,激活多行,为空的话,不结束编辑任何行,仅在editMode=1逐行编辑时有效
    • + +
    +
  • +
+ +

分组统计功能

+

需引入tangram.grid.groupsummary.js

+

分组统计功能用数据分组显示,以及简单的统计,统计数据可以来源于ajax请求,也可以来源于javascript简单统计。 +
+ Grid本身支持简单的统计类型,比如,count:计个数,sum:求和,avg:平均值,max:最大字符串值,min:最小字符串值,minnumber:最小数字,maxnumber:最大数字。并支持扩展 +
+ + 自定义统计类型myaverage如: +
+

+						baidu.ui.Grid.ext.summarytype.myaverage = function(previousValue,currentvalue,seqIndex,sequenceLength){
+							//previousvalue 同一个统计序列中上一次调用mysummary该方法的返回值
+							//currentvalue 当前值
+							//seqIndex:当前序号,统计数据组中的序号,从0开始
+							//sequenceLength:统计数据组的长度
+							if(seqIndex==0){
+								return parseFloat(currentvalue);
+							}else{
+								var v = previousValue;
+								v+=parseFloat(currentvalue);
+								if(seqIndex=sequenceLength-1){//最后一条求平均值
+									return v/sequenceLength;
+								}else{
+									return v;//不是最后一条,求和
+								}
+							}
+						}
+					
+

+

分组统计功能使用示例:

+
+					var griddemo = new baidu.ui.Grid({
+						element:"gridwidthgroupsummary",
+						groupBy:"country",//分组字段
+						groupHeader:function(param){//分组行显示内容
+							//{groupValue:groupValue,groupData:{}}
+							return param.groupValue+" 共"+(param.groupData[param.groupValue].rows.length)+"公司";
+						},
+						groupSummary:true,//显示分组合计
+						summary:true,//显示总合计
+						columns:[{
+								field:'rank',
+								header:"2011排名",
+								width:80,
+								sortable:false,
+								summaryFormat:"合计:",//合计行单元格显示内容
+								groupSummaryFormat:"小计:"//小计行单元格显示内容
+							},{
+								field:'name',
+								header:"公司名称(中英文)",
+								width:400,
+								sortable:false,
+								groupSummary:"count",//分组合计类型,使用javascript统计
+								groupSummaryFormat:"共#{groupSummaryValue}家",
+								summay:"count",//总合计类型
+								summaryFormat:"共#{summaryValue}家"
+							},{
+								field:'income',
+								header:"营业收入(百万美元)",
+								width:140,
+								align:"right",
+								sortable:false,
+								groupSummary:"maxnumber",
+								groupSummaryFormat:"最高:#{groupSummaryValue}",
+								summay:"maxnumber",
+								summaryFormat:"最高:#{summaryValue}"
+							},{
+								field:'profit',
+								header:"利润(百万美元)",
+								width:140,
+								align:"right",
+								sortable:false,
+								groupSummary:"avg",
+								groupSummaryFormat:function(data){//groupSummaryFormat也可以是一个方法
+									//可以直接通过this.getData()获取ajax表格数据,this指向表格实例
+									return "平均:"+data.groupSummaryValue.toFixed(2);
+								},
+								summay:"avg",
+								summaryFormat:function(data){
+									return  "平均:"+data.summaryValue.toFixed(2);
+								}
+							},{
+								field:'country',
+								header:"国家",
+								width:120,
+								sortable:false
+							}
+						],//other grid options
+				
+

添加的配置:

+
    +
  • groupBy:分组字段,表格数据会根据该字段值分组
  • +
  • groupHeader:分组行显示内容,函数返回分组行中的内容,参数格式为: +
    +
    +							{
    +								groupValue:groupValue,//分组字段值
    +								groupData:{//groupData 是表格实例的属性,可以通过gridInstance.groupData获取
    +									[分组字段值]:{
    +										rows:[0,1..],//该组的数据行序号下标
    +										summary:{}每组小计字段统计值
    +									}
    +								}
    +							}
    +						
    +
  • +
  • groupSummary:是否显示分组合计行,默认不显示
  • +
  • summary:是否显示总计行,默认不显示
  • +
+

列定义添加的配置:

+
    +
  • groupSummary:分组合计类型,"min"等
  • +
  • groupSummaryFormat:分组合计行单元格显示内容。 +
    如果是字符串,该字符串将被baidu.string.format(col.groupSummaryFormat,{groupSummaryValue:groupSummaryValue})处理 +
    如果是函数,该函数返回单元格显示内容,接收参数{groupSummaryValue:groupSummaryValue} +
  • +
  • summay:字段总合计类型
  • +
  • summaryFormat:总计行单元格显示内容。 +
    如果是字符串,该字符串将被baidu.string.format(col.summaryFormat,{summaryValue:summaryValue})处理 +
    如果是函数,该函数返回单元格显示内容,接收参数{summaryValue:summaryValue} +
  • +
+

TreeGrid

+

需引入tangram.grid.treegrid.js

+

使用TreeGrid可以将某一列显示为树形,该列能够展开/收缩节点。TreeGrid对表格请求数据没有特别格式要求,只需要指定id字段和parentid字段即可。

+

+

+						var griddemo = new baidu.ui.Grid({
+							element:"treegrid",
+							columns:[
+								{field:'name',header:"名称",width:400,
+									renderer:'tree',//树形列
+									idfield:'id',//主键字段名称,节点行的唯一标识
+									parentfield:'parentid',//父节点字段名称
+									expandBy:function(data){//可以展开特定的节点
+										return data.cellvalue=="EditPlus 3";//初始展开特定节点
+										//return true;//展开所有节点
+									}
+								},
+								{field:'createtime',header:"创建时间",width:100},
+								{field:'readonly',header:"只读",width:100,renderer:function(data){return data.cellvalue=="false"?"否":"是"}},
+								{header:"类型",width:100,renderer:function(data){
+									var id = data.rowdata.id;
+									if(data.rowdata.name.indexOf(".")!=-1){
+										return (data.rowdata.name.substr(data.rowdata.name.lastIndexOf(".")+1)+"文件");
+									}
+									if(this.treedata[id].children.length>0){//treedata是解析出来的属性数据
+										return "文件夹";
+									}
+									return "文件";
+								}}
+							],//...
+					
+
+						//加载树形数据
+						//需要提供idfield,parentfield字段值
+						griddemo.loadData({
+							data:{
+								list:[
+									{id:"1",parentid:"",name:"C:\\",readonly:"false",createtime:"2011-07-30"},
+									{id:"18",parentid:"15",name:"htpasswd",readonly:"false",createtime:"2011-07-30"},
+									{id:"19",parentid:"15",name:"server.pid",readonly:"false",createtime:"2011-07-30"},
+									{id:"14",parentid:"",name:"D:\\",readonly:"false",createtime:"2011-07-30"},//...
+					
+

+

+ TreeGrid在呈现数据前会将Grid请求数据解析,解析将会改变data.list的数据, + (可以通过getOriginList()方法获取原始的表格请求数据), + 同时会生成treedata,treedata的格式为:
+

+						{
+							[idvalue]:{//key 为id字段值,如果为跟节点,idvalue为"root"
+								rowIndex:rowIndex,//该行数据在表格原始请求数据中的rowIndex,从0开始
+								parent:parentfieldvalue,//节点的父节点id值
+								children:[0,1..]该节点的子节点的rowIndex数据,rowIndex是原始数据的rowIndex
+							}
+						}
+					
+

+

通过treedata的originList就可以方便的实现Tree的遍历

+

+ TreeGrid中的同级节点的排序是以原始list顺序为准的,比如,A与B是同级节点,在原始list中A在B的后面,显示在Grid中的顺序也是A在B的后面。这样原有的表格排序将会变成同级节点的排序。 +

+

Tree列的定义:

+
    +
  • renderer:设置为"tree"
  • +
  • idfield:主键字段名称,节点行的唯一标识,必须设置
  • +
  • parentfield:父节点字段名称,必须设置
  • +
  • expandBy:定义数据加载后需要展开的节点,默认的只显示一级节点,如果需要展开更深的节点,可以通过定义该方法,如果该方法返回tree,该节点将会展开。方法接收参数data同renderer函数中参数一致
  • +
+

TreeGrid相关方法:

+
    +
  • getOriginList() :获取表格原始数据,返回数据形如[{},{}]
  • +
  • getNodeDeep(idvalue) :获取指定节点深度,参数idvalue为id字段值,返回深度从1开始
  • +
  • toggleNode(idvalue) :展开/收缩指定节点,参数idvalue为id字段值
  • +
  • expandNode(idvalue) :展开指定节点,参数idvalue为id字段值
  • +
  • unExpandNode(idvalue) :收缩指定节点,参数idvalue为id字段值
  • +
  • addNode(nodes) :添加节点,nodes可以是数组:[{行1},{行2}],也可以单独行{}
  • +
  • deleteNode(idvalue) :删除节点,idvalue为id字段值,删除节点将会递归删除其所有的子节点
  • +
+

如果需要修改指定节点行的字段值,可以使用updateDOMRow方法

+ +

键盘事件

+

需引入tangram.grid.keyboard.js

+

增加配置属性keyboard当keyboard:true才可以激活键盘事件,配置属性keysrc为监听事件的DOM对象,默认是document.body

+

增加方法focus/blur用于表格控件聚焦/失去焦点。只有表格在聚焦状态下才能监听键盘事件。默认点击表格控件将会聚焦

+

可支持的键盘事件:

+
    +
  • 表格单选(selectMode=1)是可以通过↓ ↑ 选中下一行 ,上一行
  • +
  • 表格单选(selectMode=1)是可以通过回车触发选择行双击事件
  • +
  • 使用表格自带分页控件,可以使用PageDown/PageUp/Ctrl+PageDown/Ctrl+PageUp下一页,上一页,最后一页,第一页
  • +
  • ← → 在分页时可以分页,作用与PageDown,PageUp一致,treegrid时用于展开/收缩节点
  • +
  • 可编辑表格单元格编辑(editMode=3)时可以使用tab/shift+tab切换编辑单元格
  • +
+

页内排序

+

需引入tangram.grid.pagesort.js

+

对于没有分页而且没有url属性的表格,可以对指定field属性而且指定sortable为true(默认为true)的列进行页内排序。

+

列可以通过拖放改变顺序

+

需引入tangram.grid.columndragsort.js

+

配置属性columndraggable设置为true可是打开该功能。列拖动后顺序会发生改变,可以通过 getOriginColumns()方法获取原始列定义数组

+
+ +

扩展

+
+ +

列类型扩展

+

参考列定义

+ +

自定义分页控件

+

参考分页定义

+

自定义统计类型

+

参考自定义统计类型

+
+ +

已知的Bug

+
+ +

WebKit浏览器下出现列对不齐的情况

+

webkit的table-layout:fixed bug引起,参见这里

+
+

对Grid有兴趣?

+

Tangarm Grid代码目前托管在github 上:https://github.com/hafeyang/tangramgrid

+

git地址:git://github.com/hafeyang/tangramgrid.git

+

也可以用svn地址:http://svn.github.com/hafeyang/tangramgrid

+ +
+
+
Tangram Grid is the Grid you need!
+ + diff --git a/src/tangramgrid/docs/shared.css b/src/tangramgrid/docs/shared.css new file mode 100644 index 0000000..a1b453d --- /dev/null +++ b/src/tangramgrid/docs/shared.css @@ -0,0 +1,359 @@ +body { + font-family: Verdana, sans-serif; + background-repeat: repeat-x; + padding-left: 0px; + padding-right: 0px; + margin: 0px; + font-size:14px; + line-height:130%; +} + +a { + color: #5E83C1; + text-decoration: none; +} + +a:visited { + color: #5E83C1; + text-decoration: none; +} + +a:hover { + color: #B7D4F3; + text-decoration: underline; +} + +img { + border:0px; +} + +h1 { + font-weight: bold; + font-size: 130%; + color: #FFFFFF; + background-color: #636D84; + padding: 10px; + padding-left: 20px; + margin-top: 0px; +} + +h1 a { color: #FFFFFF; } + +h1 a:visited { color: #FFFFFF; } + +pre { + font-size: 120%; + color: #1C1D1F; + background: #f3f3f3; + padding: 1em 2em; + border-left: 3px solid #ccc; + margin-left: 15px; +} + +.content { + padding-left: 20px; + padding-right: 20px; +} + +.content h2 { + font-weight: bold; + font-size: 120%; + color: #959DAF; + margin-bottom: .5em; + border-bottom: 1px dotted #aaaaaa; + padding-top: 6px; +} + +/* content for the examples */ +.content h3 { + font-weight: bold; + font-size: 120%; + color: #959DAF; + margin-bottom: .5em; + padding-left: 10px; + padding-top: 6px; +} + +.content p { + margin-left: 15px; +} + +.content dd { + margin-left: 15px; + padding-bottom: 5px; +} + +.content dt { + margin-left: 10px; + padding-bottom: 5px; +} + +.content table { + border: 1px solid #ECECEA; +} + +.content th { + font-size: 60%; + font-weight: bold; + color: #FFFFFF; + background-color: #959DAF; + text-align: left; + padding-left: 10px; + padding-right: 10px; + padding-top: 6px; + padding-bottom: 6px; +} + +.content td { + font-size: 60%; + padding-left: 10px; + padding-right: 10px; + padding-top: 6px; + padding-bottom: 6px; +} + +/* Lists are top-level lists for each class, i.e. constructors, methods, etc. */ +.list { + margin-left: 20px; +} + +.list h3 { + font-weight: bold; + padding-top: 10px; + padding-left: 0px; + padding-bottom: 4px; +} + +.list dd { + margin-left: 0px; +} + +.list dt { + margin-left: 14px; +} + +.details dt { + font-weight: bold; + font-size: 1.2em; + color: #000000; + padding-top: 12px; + padding-left: 0px; + padding-bottom:0px; + margin-bottom: 0px; + margin-left: 15px; +} + +.details dd { + padding-left: 15px; + margin: 0px; +} + +.details dd p +{ + margin:0px; + padding:0px; + padding-top:10px; +} + +/* from the example documentation */ +.details h3 { + font-weight: bold; + font-size: 1.2em; + color: #000000; + padding-left: 0px; + margin-bottom: 0px; + margin-left: 14px; + padding-bottom: 0px; + background-image: none; +} + +.parameters dt { + font-weight: bold; + font-size: 1em; + color: #000000; + margin-left: 15px; +} + +.padded { + margin-top: 4px; + margin-left: 10px; + margin-bottom: 6px; +} + +.parameter-table { + background-color: #F9F9F9; +} + +.parameters dd { + margin-left: 15px; + margin-bottom: 10px; +} + +.navigator { + padding-top: 10px; + font-weight: bold; + font-size: 80%; + padding-bottom: 10px; +} + +.classDescription { + font-size: 1.4em; + padding-bottom:10px; +} + +DIV#catlinks { + CLEAR: both; BORDER-RIGHT: #bbb 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #bbb 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 0.9em; BACKGROUND: #eee; PADDING-BOTTOM: 0px; MARGIN: 40px 0px 0px; BORDER-LEFT: #bbb 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #bbb 1px solid +} + +DIV#catlinks P { + PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 0px; PADDING-TOP: 0px +} + +.catlink-table { + WIDTH: 100% +} + +.catlink-table TD { + PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; PADDING-TOP: 8px +} + +.catlink-table TD H4 { + PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 1em; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: #bbb 1px solid +} + +.catlink-table UL { + PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 5px 0px; PADDING-TOP: 0px +} + +.catlink-table LI { + MARGIN: 0px 0px 0px 2em; LINE-HEIGHT: 1.45em +} + +#updatedContent { + margin-left: 20px; + margin-right: 20px; + padding:10px; + border:1px solid #CCCCCC; + background-color:#FFFFE1; +} + +ol { list-style-type: decimal; } +ol ol { list-style-type: lower-alpha; } +ol ol ol { list-style-type: lower-roman; } +ol ol ol ol { list-style-type: decimal; } +ol ol ol ol ol { list-style-type: lower-alpha; } +ol ol ol ol ol ol { list-style-type: lower-roman; } +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: square; } +ul ul ul ul ul { list-style-type: disc; } +ul ul ul ul ul ul { list-style-type: circle; } + + +/* COMPATIBILITY TABLES */ + +tr.compheader { +} + +tr.compheader th { + font-weight: normal; + font-size: 80%; + text-align:center; +} + +td.header { + background-color: #F2F3EF; + padding: 0.3em; +} + +td.header h3,td.header h4 { + margin-top: 0.5em; + text-align: center; +} + +td.declaration { + background-color: #F2F3EF; + text-align: left; + vertical-align: top; + padding-right: 10px; + color: #666666; +} + +td.declaration a { + text-decoration: none; +} + +div.name { + font-weight: bold; + margin-bottom: 2em; + margin-top: 1em; + font-size:110%; +} + +b.warning { + display: block; + margin: 0.5em 0; +} + +td.comparison { + font-family: verdana,sans-serif; + font-size: 80%; + text-transform: lowercase; + text-align: center; + height: 3em; + border: 1px solid; + width:8%; + border-collapse:separate; +} + +td.yes { + background-color: #00882D; + color: #ffffff; +} + +td.almost { + color: #00882D; + border-width: 3px; +} + +td.incomplete { + color: #00882D; + border-color: #00882D; +} + +td.alternative { + color: #006699; +} + +td.untestable { + color: #006699; + border: none; +} + +td.minimal { + color: #CB000F; +} + +td.incorrect { + color: #CB000F; + border-width: 2px; +} + +td.buggy { + color: #CB000F; + border-color: #CB000F; + border-width: 3px; +} + +td.no { + background-color: #CB000F; + color: #ffffff; +} + +td.crash { + background-color: #535353; + font-weight: bold; + text-transform: uppercase; + color: #ffffff; +} \ No newline at end of file diff --git a/src/tangramgrid/docs/syntaxhighlighter/shBrushJScript.js b/src/tangramgrid/docs/syntaxhighlighter/shBrushJScript.js new file mode 100644 index 0000000..ff98dab --- /dev/null +++ b/src/tangramgrid/docs/syntaxhighlighter/shBrushJScript.js @@ -0,0 +1,52 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'break case catch continue ' + + 'default delete do else false ' + + 'for function if in instanceof ' + + 'new null return super switch ' + + 'this throw true try typeof var while with' + ; + + var r = SyntaxHighlighter.regexLib; + + this.regexList = [ + { regex: r.multiLineDoubleQuotedString, css: 'string' }, // double quoted strings + { regex: r.multiLineSingleQuotedString, css: 'string' }, // single quoted strings + { regex: r.singleLineCComments, css: 'comments' }, // one line comments + { regex: r.multiLineCComments, css: 'comments' }, // multiline comments + { regex: /\s*#.*/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // keywords + ]; + + this.forHtmlScript(r.scriptScriptTags); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['js', 'jscript', 'javascript']; + + SyntaxHighlighter.brushes.JScript = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/src/tangramgrid/docs/syntaxhighlighter/shBrushXml.js b/src/tangramgrid/docs/syntaxhighlighter/shBrushXml.js new file mode 100644 index 0000000..69d9fd0 --- /dev/null +++ b/src/tangramgrid/docs/syntaxhighlighter/shBrushXml.js @@ -0,0 +1,69 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + function process(match, regexInfo) + { + var constructor = SyntaxHighlighter.Match, + code = match[0], + tag = new XRegExp('(<|<)[\\s\\/\\?]*(?[:\\w-\\.]+)', 'xg').exec(code), + result = [] + ; + + if (match.attributes != null) + { + var attributes, + regex = new XRegExp('(? [\\w:\\-\\.]+)' + + '\\s*=\\s*' + + '(? ".*?"|\'.*?\'|\\w+)', + 'xg'); + + while ((attributes = regex.exec(code)) != null) + { + result.push(new constructor(attributes.name, match.index + attributes.index, 'color1')); + result.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string')); + } + } + + if (tag != null) + result.push( + new constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword') + ); + + return result; + } + + this.regexList = [ + { regex: new XRegExp('(\\<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\>|>)', 'gm'), css: 'color2' }, // + { regex: SyntaxHighlighter.regexLib.xmlComments, css: 'comments' }, // + { regex: new XRegExp('(<|<)[\\s\\/\\?]*(\\w+)(?.*?)[\\s\\/\\?]*(>|>)', 'sg'), func: process } + ]; + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['xml', 'xhtml', 'xslt', 'html']; + + SyntaxHighlighter.brushes.Xml = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); diff --git a/src/tangramgrid/docs/syntaxhighlighter/shCore.js b/src/tangramgrid/docs/syntaxhighlighter/shCore.js new file mode 100644 index 0000000..b47b645 --- /dev/null +++ b/src/tangramgrid/docs/syntaxhighlighter/shCore.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) diff --git a/src/tangramgrid/docs/syntaxhighlighter/shCoreDefault.css b/src/tangramgrid/docs/syntaxhighlighter/shCoreDefault.css new file mode 100644 index 0000000..08f9e10 --- /dev/null +++ b/src/tangramgrid/docs/syntaxhighlighter/shCoreDefault.css @@ -0,0 +1,328 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +.syntaxhighlighter a, +.syntaxhighlighter div, +.syntaxhighlighter code, +.syntaxhighlighter table, +.syntaxhighlighter table td, +.syntaxhighlighter table tr, +.syntaxhighlighter table tbody, +.syntaxhighlighter table thead, +.syntaxhighlighter table caption, +.syntaxhighlighter textarea { + -moz-border-radius: 0 0 0 0 !important; + -webkit-border-radius: 0 0 0 0 !important; + background: none !important; + border: 0 !important; + bottom: auto !important; + float: none !important; + height: auto !important; + left: auto !important; + line-height: 1.1em !important; + margin: 0 !important; + outline: 0 !important; + overflow: visible !important; + padding: 0 !important; + position: static !important; + right: auto !important; + text-align: left !important; + top: auto !important; + vertical-align: baseline !important; + width: auto !important; + box-sizing: content-box !important; + font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; + font-weight: normal !important; + font-style: normal !important; + font-size: 1em !important; + min-height: inherit !important; + min-height: auto !important; +} + +.syntaxhighlighter { + width: 100% !important; + margin: 1em 0 1em 0 !important; + position: relative !important; + overflow: auto !important; + font-size: 1em !important; +} +.syntaxhighlighter.source { + overflow: hidden !important; +} +.syntaxhighlighter .bold { + font-weight: bold !important; +} +.syntaxhighlighter .italic { + font-style: italic !important; +} +.syntaxhighlighter .line { + white-space: pre !important; +} +.syntaxhighlighter table { + width: 100% !important; +} +.syntaxhighlighter table caption { + text-align: left !important; + padding: .5em 0 0.5em 1em !important; +} +.syntaxhighlighter table td.code { + width: 100% !important; +} +.syntaxhighlighter table td.code .container { + position: relative !important; +} +.syntaxhighlighter table td.code .container textarea { + box-sizing: border-box !important; + position: absolute !important; + left: 0 !important; + top: 0 !important; + width: 100% !important; + height: 100% !important; + border: none !important; + background: white !important; + padding-left: 1em !important; + overflow: hidden !important; + white-space: pre !important; +} +.syntaxhighlighter table td.gutter .line { + text-align: right !important; + padding: 0 0.5em 0 1em !important; +} +.syntaxhighlighter table td.code .line { + padding: 0 1em !important; +} +.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line { + padding-left: 0em !important; +} +.syntaxhighlighter.show { + display: block !important; +} +.syntaxhighlighter.collapsed table { + display: none !important; +} +.syntaxhighlighter.collapsed .toolbar { + padding: 0.1em 0.8em 0em 0.8em !important; + font-size: 1em !important; + position: static !important; + width: auto !important; + height: auto !important; +} +.syntaxhighlighter.collapsed .toolbar span { + display: inline !important; + margin-right: 1em !important; +} +.syntaxhighlighter.collapsed .toolbar span a { + padding: 0 !important; + display: none !important; +} +.syntaxhighlighter.collapsed .toolbar span a.expandSource { + display: inline !important; +} +.syntaxhighlighter .toolbar { + position: absolute !important; + right: 1px !important; + top: 1px !important; + width: 11px !important; + height: 11px !important; + font-size: 10px !important; + z-index: 10 !important; +} +.syntaxhighlighter .toolbar span.title { + display: inline !important; +} +.syntaxhighlighter .toolbar a { + display: block !important; + text-align: center !important; + text-decoration: none !important; + padding-top: 1px !important; +} +.syntaxhighlighter .toolbar a.expandSource { + display: none !important; +} +.syntaxhighlighter.ie { + font-size: .9em !important; + padding: 1px 0 1px 0 !important; +} +.syntaxhighlighter.ie .toolbar { + line-height: 8px !important; +} +.syntaxhighlighter.ie .toolbar a { + padding-top: 0px !important; +} +.syntaxhighlighter.printing .line.alt1 .content, +.syntaxhighlighter.printing .line.alt2 .content, +.syntaxhighlighter.printing .line.highlighted .number, +.syntaxhighlighter.printing .line.highlighted.alt1 .content, +.syntaxhighlighter.printing .line.highlighted.alt2 .content { + background: none !important; +} +.syntaxhighlighter.printing .line .number { + color: #bbbbbb !important; +} +.syntaxhighlighter.printing .line .content { + color: black !important; +} +.syntaxhighlighter.printing .toolbar { + display: none !important; +} +.syntaxhighlighter.printing a { + text-decoration: none !important; +} +.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a { + color: black !important; +} +.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a { + color: #008200 !important; +} +.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a { + color: blue !important; +} +.syntaxhighlighter.printing .keyword { + color: #006699 !important; + font-weight: bold !important; +} +.syntaxhighlighter.printing .preprocessor { + color: gray !important; +} +.syntaxhighlighter.printing .variable { + color: #aa7700 !important; +} +.syntaxhighlighter.printing .value { + color: #009900 !important; +} +.syntaxhighlighter.printing .functions { + color: #ff1493 !important; +} +.syntaxhighlighter.printing .constants { + color: #0066cc !important; +} +.syntaxhighlighter.printing .script { + font-weight: bold !important; +} +.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a { + color: gray !important; +} +.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a { + color: #ff1493 !important; +} +.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a { + color: red !important; +} +.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a { + color: black !important; +} + +.syntaxhighlighter { + background-color: white !important; +} +.syntaxhighlighter .line.alt1 { + background-color: white !important; +} +.syntaxhighlighter .line.alt2 { + background-color: white !important; +} +.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 { + background-color: #e0e0e0 !important; +} +.syntaxhighlighter .line.highlighted.number { + color: black !important; +} +.syntaxhighlighter table caption { + color: black !important; +} +.syntaxhighlighter .gutter { + color: #afafaf !important; +} +.syntaxhighlighter .gutter .line { + border-right: 3px solid #6ce26c !important; +} +.syntaxhighlighter .gutter .line.highlighted { + background-color: #6ce26c !important; + color: white !important; +} +.syntaxhighlighter.printing .line .content { + border: none !important; +} +.syntaxhighlighter.collapsed { + overflow: visible !important; +} +.syntaxhighlighter.collapsed .toolbar { + color: blue !important; + background: white !important; + border: 1px solid #6ce26c !important; +} +.syntaxhighlighter.collapsed .toolbar a { + color: blue !important; +} +.syntaxhighlighter.collapsed .toolbar a:hover { + color: red !important; +} +.syntaxhighlighter .toolbar { + color: white !important; + background: #6ce26c !important; + border: none !important; +} +.syntaxhighlighter .toolbar a { + color: white !important; +} +.syntaxhighlighter .toolbar a:hover { + color: black !important; +} +.syntaxhighlighter .plain, .syntaxhighlighter .plain a { + color: black !important; +} +.syntaxhighlighter .comments, .syntaxhighlighter .comments a { + color: #008200 !important; +} +.syntaxhighlighter .string, .syntaxhighlighter .string a { + color: blue !important; +} +.syntaxhighlighter .keyword { + color: #006699 !important; +} +.syntaxhighlighter .preprocessor { + color: gray !important; +} +.syntaxhighlighter .variable { + color: #aa7700 !important; +} +.syntaxhighlighter .value { + color: #009900 !important; +} +.syntaxhighlighter .functions { + color: #ff1493 !important; +} +.syntaxhighlighter .constants { + color: #0066cc !important; +} +.syntaxhighlighter .script { + font-weight: bold !important; + color: #006699 !important; + background-color: none !important; +} +.syntaxhighlighter .color1, .syntaxhighlighter .color1 a { + color: gray !important; +} +.syntaxhighlighter .color2, .syntaxhighlighter .color2 a { + color: #ff1493 !important; +} +.syntaxhighlighter .color3, .syntaxhighlighter .color3 a { + color: red !important; +} + +.syntaxhighlighter .keyword { + font-weight: bold !important; +} diff --git a/src/tangramgrid/docs/todo.txt b/src/tangramgrid/docs/todo.txt new file mode 100644 index 0000000..12acafa --- /dev/null +++ b/src/tangramgrid/docs/todo.txt @@ -0,0 +1,68 @@ +============================================功能点========================================================== +基本的表格数据展现,提供方法将json数据加载到grid中(完成) + +宽度自适应,设置表格宽度/高度 高度自适应高度,自动拉伸,也可以设置最大高度(完成) + +ajax请求数据数据,分页 +可以使用自带分页组件,也可以集成其他分页组件 +ajax请求数据格式默认为noah 后台返回数据,发送的参数默认也是现在分页的参数 +支持自带参数做ajax请求 +参数: +curPage 2 当前页数下标从1开始 +order desc/asc +orderBy id 排序字段 +perPage 10 每页记录条数 +返回数据格式: +{"success":true,"message":"ok","data":{"page":{"total":"52","perPage":"10","curPage":"2"},"config":"m1","list":[{"id":"42","nodeId":"1","name":"z0614_ui_sample_all","sysId":"3","creator":"yanxiao","createTime":"2011-06-14 14:58:37","lastVersion":"\u6682\u65e0","dataKey":"\/data\/82471ffb83615a57b9ab64826dd98061","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU"},{"id":"41","nodeId":"1","name":"z0614_bws_sample","sysId":"3","creator":"yanxiao","createTime":"2011-06-14 14:55:22","lastVersion":"\u6682\u65e0","dataKey":"\/data\/645307039c1307733346d2f74e990bb2","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU"},{"id":"40","nodeId":"1","name":"z0614_ui_sample","sysId":"3","creator":"yanxiao","createTime":"2011-06-14 11:51:43","lastVersion":"\u6682\u65e0","dataKey":"\/data\/e80a106b9e02175e161edcccca00ff8a","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU"},{"id":"39","nodeId":"1","name":"yzjtest061300","sysId":"3","creator":"yanxiao","createTime":"2011-06-13 17:33:56","lastVersion":"\u6682\u65e0","dataKey":"\/data\/d264625a61e7b9b772437ccbd0b39822","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU"},{"id":"38","nodeId":"1","name":"cuijie_test","sysId":"3","creator":"yanxiao","createTime":"2011-06-13 15:05:56","lastVersion":"\u6682\u65e0","dataKey":"\/data\/107ffcb12c5c83c7db299624fd6f17ae","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU"},{"id":"37","nodeId":"1","name":"test_da_reload","sysId":"3","creator":"yanxiao","createTime":"2011-06-09 15:10:34","lastVersion":"\u6682\u65e0","dataKey":"\/data\/d7c7da05c6a6a371ecb6ad809c60e0e9","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU"},{"id":"36","nodeId":"1","name":"test_da","sysId":"3","creator":"yanxiao","createTime":"2011-06-09 15:09:39","lastVersion":"\u6682\u65e0","dataKey":"\/data\/a5ee0dac201f21956d7c94834b2dc407","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU"},{"id":"35","nodeId":"1","name":"ui_single","sysId":"3","creator":"yanxiao","createTime":"2011-06-07 19:58:16","lastVersion":"\u6682\u65e0","dataKey":"\/data\/91e54f5ff3e195265c16f73b868b6122","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU"},{"id":"34","nodeId":"1","name":"yanzhijietest060791","sysId":"3","creator":"yanxiao","createTime":"2011-06-07 10:54:16","lastVersion":"\u6682\u65e0","dataKey":"\/data\/8ec675a0c09417a21a68f3ecae52cc24","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU"},{"id":"33","nodeId":"1","name":"z_bws_back","sysId":"3","creator":"yanxiao","createTime":"2011-06-03 19:15:17","lastVersion":"\u6682\u65e0","dataKey":"\/data\/6bf9c48c5ddd25bbf9df36b66ac22566","publisher":"","publishTime":"","canAddVersion":1,"nodeName":"BAIDU","nodePath":"BAIDU"}]}} +(完成) + +表格单元格格式自定义,转换器,支持checkbox列(完成) + +Ajax请求时支持遮罩,也可以自定义遮罩(完成) + +ajax数据返回时 触发一个事件,使可以处理返回json数据 表格数据加载完毕后 的事件,用于后续处理(完成) + +点击列头字段排序(完成) + +基本事件绑定,行选择,hover ,点击(完成) + +新增行/修改行/删除行(完成) + +列宽可以拖动(完成) + +列头分组(完成) + +=======================================(以下是扩展功能)========================================================= +行可以通过拖放改变顺序(完成) +子表格,点击某单元格出现一块区域显示子数据,可以是表格,也可以是自定义内容(完成) + + +冻结列,列比较多的时候出现横向滚动条,可以冻结左边的n列,这些列不随横向滚动条滚动(完成) + +可编辑表格,支持常见的编辑类型,文本框,下拉框等,支持自定义编辑。(完成) + + +数据显示的分组,统计,以及扩展机制,主要是扩展统计方法,支持从ajax请求结果读取统计数据,也支持javascript做简单统计。(完成) + +Treegrid,将表格的某个列显示成树形结构,并支持延迟加载(完成) + +大数据量解决方案,延迟呈现,或者延迟加载 + +键盘事件支持,支持键盘事件,光标操作(完成) +列可以通过拖放改变顺序(完成) +本页排序(完成) +右键菜单 + + +=======================================已知的问题========================================================= +□显示/隐藏列 1px偏差 in webkit +□点击当前页文本框再点击下一页出现两次ajax请求,当前页显示不正确。 + +• 树载入数据时出错的处理 +• 自定义页码blur(点击下一页按钮)数据不变时的刷新bug +• column全为fix的bug? +• 页码不要切边? + +一些组合: +treegrid+ rowsortable?? +treegrid+ editable?? diff --git a/src/tangramgrid/index.html b/src/tangramgrid/index.html new file mode 100644 index 0000000..cf85f21 --- /dev/null +++ b/src/tangramgrid/index.html @@ -0,0 +1,25 @@ + + + + + Tangram Grid + + +

Tangram Grid

+

使用说明

+

Demos

+ +
+
Tangram Grid is the Grid you need!
+ + diff --git a/src/tangramgrid/resources/tangram.grid.css b/src/tangramgrid/resources/tangram.grid.css new file mode 100644 index 0000000..6357bdd --- /dev/null +++ b/src/tangramgrid/resources/tangram.grid.css @@ -0,0 +1,66 @@ +.tangramgrid,.tangramgrid table tbody td,.tangramgrid .gridheader,.tangramgrid .tgpager,.tangramgrid .gridheader .columndragproxy{border:1px solid #aed0ea;} +.tangramgrid{font-size:12px; position:relative; background-color:#fff;} +/* for overflow:hidden container*/ +.tangramgrid .tangramgridcontainer{position:relative;overflow:hidden;width:100%; height:100%; overflow:hidden; z-index:1;} + +.tangramgrid table tbody td{text-align:left;overflow:hidden;padding:0px;margin:0px;} +.tangramgrid table,.tangramgrid table tbody{padding:0px; margin:0px;border-width:0px;table-layout:fixed;border-collapse:collapse; border-spacing:0px;empty-cells:hide;} +.tangramgrid .gridheader table{*table-layout:auto;} +.tangramgrid .gridheader{ background-color:#e3f1fa; border-width:0px 0px 1px 0px;width:9999px;position:relative; z-index:3;} +.tangramgrid .gridheader .fixedheadertable{position:absolute; top:0px;left:0px; z-index:4; background-color:#E3F1FA;} +.tangramgrid .gridheader .headercol { border-width:0px 1px 0px 0px;color:#2779aa;text-align:center; padding:2px 0px;height:25px;margin:0px; -moz-user-select:none;} + +.tangramgrid .gridheader .header-col{ position:relative; z-index:2;} +.tangramgrid .gridheader .columndragproxy{ position:absolute; z-index:4; background-color:#F1F1F2; height:52px; width:200px;top:0px;left:0px; text-align:center; color:#2779AA;display:none;opacity:0.7;filter:alpha(opacity=70);} +.tangramgrid .gridheader .columndragproxy .headercoltext{position:relative; top:50%; margin-top:-7px; display:block;} +.tangramgrid .tangramgridcontainer .grid-resizer-proxy{position:absolute; z-index:3; top:0px;bottom:0px;width:2px; background-color:#1a60a3; display:none;} +.tangramgrid .gridheader .header-col-resizer{ position:absolute; right:-3px; top:-4px; bottom:-4px; width:6px; z-index:4; cursor:col-resize;} +.tangramgrid .gridheader .header-rowspan2{height:54px;} +.tangramgrid .gridheader .header-rowspan2 .header-col-resizer{ top:-16px; bottom:-16px;} +.tangramgrid .gridheader .headercol .headercoltext{} +.tangramgrid .gridheader .header-colspan{ border-bottom-width:1px;} +.tangramgrid .gridheader .header-sortable-col .headercoltext{cursor:pointer;} +.tangramgrid .gridheader .sorter{font-family:"Arial";font-size:10px; margin-left:4px;padding-bottom:4px; color:#8c8c8c;} +.tangramgrid .gridbody { overflow:hidden; position:relative;z-index:3;} +.tangramgrid .gridbody .fixedbodytable{position:absolute;z-index:4;left:0px;top:0px; background-color:#fff;} + +/*grid-tablecontainer有足够大的空间用于放置table*/ +.tangramgrid .grid-tablecontainer {width:9999px;} +.tangramgrid .gridbody table td{border-width:0px 1px 1px 0px; color:#000;white-space:nowrap;overflow:hidden; height:25px;} +.tangramgrid .gridbody table td .cellcontent{display:block;padding:4px;margin:0px;} +.tangramgrid-editable .gridbody table td .cellcontent{padding:1px;} +.tangramgrid .gridbody table td .cellcontent .grid-expand{border:1px solid #99BCE8; background-color:#F5F5F6;color:#99BCE8;cursor:pointer;font-size:10px; font-family:"Arial"; padding:0px 1px; font-weight:bolder;} +.tangramgrid .gridbody table .even td {background-color:#fff9f9;} +.tangramgrid .gridbody table .odd td {} +.tangramgrid .gridbody table .hover td {background-color:#e6f2fb;} +.tangramgrid .gridbody table .selected td {background-color:#edf6fc;} +.tangramgrid .gridbody table .row-dragging td {background-color:#ffff80;;cursor:move;} +.tangramgrid .gridbody table tr .grid-expandedcell{border-bottom:1px solid #fff; background-color:#fff;} + +.tangramgrid .grid-xscroller {position:absolute; z-index:5;left:0px; bottom:0px; height:17px; width:0px; overflow:auto;display:none;overflow:auto;overflow-y:hidden; overflow-x:scroll;} +.tangramgrid .grid-yscroller {position:absolute; z-index:5; right:0px; bottom:0px;width:17px; height:0px; overflow:auto;display:none;overflow:auto;overflow-x:hidden;overflow-y:scroll;} +.tangramgrid .grid-x-strecher {height:1px;} +.tangramgrid .grid-y-strecher {width:1px;} +.tangramgrid .grid-rb-corner {position:absolute; z-index:5;right:0px; bottom:0px; height:17px; width:17px; background-color:#fff; display:none;} + +.tangramgrid .tgpager{border-width:0px; border-top-width:1px;height:22px; background-color:#e3f1fa; overflow:hidden;color:#2779aa;} +.tangramgrid .tgpager .tgpager-pagenumbers{width:50px;} +.tangramgrid .tgpager .tgpager-curPage{width:30px;} +.tangramgrid .tgpager .tgpager-info{float:right; margin-top:3px;} +.tangramgrid .tgpager .tgpager-sep{padding-left:1px; border-left:1px solid #fff; border-right:1px solid #aec8f7; margin:0px 2px;} +.tangramgrid .tgpager .tgpager-first,.tangramgrid .tgpager .tgpager-prev,.tangramgrid .tgpager .tgpager-next,.tangramgrid .tgpager .tgpager-last{height:20px;border:0px solid #7F9DB9;background-color:transparent; width:30px;margin:0px 2px;padding:0px; font-family:"Times New Roman";} + +.tangramgrid .gridloadmask{position:absolute;top:0px; right:0px; bottom:0px;left:0px;width:100%;height:100%; background-color:#000;opacity:0.2;filter:alpha(opacity=20); z-index:3; display:none;} +.tangramgrid .gridloadmessge{position:absolute;left:50%;top:50%; width:100px;height:20px; line-height:20px; border:5px solid #999; background-color:#eee; margin-left:-55px;margin-top:-15px; z-index:4; text-align:center;display:none;} + +.tangramgrid .gridbody table .groupheaderrow td{cursor:pointer; font-weight:bolder;color:#3764A0; border-bottom-width:3px; padding-top:6px; padding-bottom:6px;} +.tangramgrid .gridbody table .groupheaderrow td .groupheadertoggler{border:1px solid #99BCE8; background-color:#F5F5F6;color:#99BCE8;cursor:pointer;font-size:8px; font-family:"Arial"; padding:0px 1px; font-weight:bolder;position:relative; top:-2px; margin:0px 4px;} +.tangramgrid .gridbody table .groupsummaryrow td {font-weight:bold; background-color:#f8f8f8;} +.tangramgrid .gridbody table .summaryrow td {font-weight:bold;} + +.tangramgrid .gridbody table td .nodecontent{padding-left:4px;} +.tangramgrid .gridbody table td .spacing{padding-left:16px;} +.tangramgrid .gridbody table td .expander{border:1px solid #99BCE8; background-color:#F5F5F6;color:#99BCE8;cursor:pointer;font-size:8px; font-family:"Arial"; padding:0px 1px;margin:3px 2px;} + +.tangram-focused{outline:dotted 1px #ccc;} + diff --git a/src/tangramgrid/tangram/min.bat b/src/tangramgrid/tangram/min.bat new file mode 100644 index 0000000..4600040 --- /dev/null +++ b/src/tangramgrid/tangram/min.bat @@ -0,0 +1,11 @@ +echo minify tangram.grid*.js to folder min.... +@echo off +set CURRENT_DIR=%cd% +set mindir=%CURRENT_DIR%\min +if exist %mindir% rd /s /q min +mkdir %mindir% +for %%i in (tangram.grid*.js) do java -jar %cd%\yuicompressor-2.4.6.jar --type js -o %cd%\min\%%~ni.min.js %%i +@echo on +echo done! +pause +exit \ No newline at end of file diff --git a/src/tangramgrid/tangram/tangram-1.3.9.js b/src/tangramgrid/tangram/tangram-1.3.9.js new file mode 100644 index 0000000..7b9e058 --- /dev/null +++ b/src/tangramgrid/tangram/tangram-1.3.9.js @@ -0,0 +1,8 @@ +var T,baidu=T=baidu||{version:"1.3.9"};baidu.guid="$BAIDU$";window[baidu.guid]=window[baidu.guid]||{};baidu.ajax=baidu.ajax||{};baidu.fn=baidu.fn||{};baidu.fn.blank=function(){};baidu.ajax.request=function(g,k){var d=k||{},r=d.data||"",h=!(d.async===false),f=d.username||"",a=d.password||"",c=(d.method||"GET").toUpperCase(),b=d.headers||{},j=d.timeout||0,l={},o,s,i;function n(){if(i.readyState==4){try{var u=i.status}catch(t){q("failure");return}q(u);if((u>=200&&u<300)||u==304||u==1223){q("success")}else{q("failure")}window.setTimeout(function(){i.onreadystatechange=baidu.fn.blank;if(h){i=null}},0)}}function m(){if(window.ActiveXObject){try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(t){try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}}if(window.XMLHttpRequest){return new XMLHttpRequest()}}function q(v){v="on"+v;var u=l[v],w=baidu.ajax[v];if(u){if(o){clearTimeout(o)}if(v!="onsuccess"){u(i)}else{try{i.responseText}catch(t){return u(i)}u(i,i.responseText)}}else{if(w){if(v=="onsuccess"){return}w(i)}}}for(s in d){l[s]=d[s]}b["X-Requested-With"]="XMLHttpRequest";try{i=m();if(c=="GET"){if(r){g+=(g.indexOf("?")>=0?"&":"?")+r;r=null}if(d.noCache){g+=(g.indexOf("?")>=0?"&":"?")+"b"+(+new Date)+"=1"}}if(f){i.open(c,g,h,f,a)}else{i.open(c,g,h)}if(h){i.onreadystatechange=n}if(c=="POST"){i.setRequestHeader("Content-Type",(b["Content-Type"]||"application/x-www-form-urlencoded"))}for(s in b){if(b.hasOwnProperty(s)){i.setRequestHeader(s,b[s])}}q("beforerequest");if(j){o=setTimeout(function(){i.onreadystatechange=baidu.fn.blank;i.abort();q("timeout")},j)}i.send(r);if(!h){n()}}catch(p){q("failure")}return i};baidu.ajax.form=function(a,c){c=c||{};var g=a.elements,o=g.length,b=a.getAttribute("method"),f=a.getAttribute("action"),u=c.replacer||function(v,i){return v},r={},t=[],m,q,s,n,d,h,j,l,k;function p(i,v){t.push(i+"="+v)}for(m in c){if(c.hasOwnProperty(m)){r[m]=c[m]}}for(m=0;m=0)};baidu.each=baidu.array.forEach=baidu.array.each=function(h,f,b){var d,g,c,a=h.length;if("function"==typeof f){for(c=0;cc)?b[c]:true}return g};baidu.array.lastIndexOf=function(d,b,c){var a=d.length;c=c|0;if(!c||c>=a){c=a-1}if(c<0){c+=a}for(;c>=0;c--){if(c in d&&d[c]===b){return c}}return -1};baidu.array.map=function(g,f,b){var d=[],c=0,a=g.length;for(;c0){c=a[b];d=b;while(d--){if(g(c,a[d])){a.splice(b,1);break}}}return a};baidu.browser=baidu.browser||{};if(/chrome\/(\d+\.\d)/i.test(navigator.userAgent)){baidu.browser.chrome=+RegExp["\x241"]}if(/firefox\/(\d+\.\d)/i.test(navigator.userAgent)){baidu.browser.firefox=+RegExp["\x241"]}if(/msie (\d+\.\d)/i.test(navigator.userAgent)){baidu.browser.ie=baidu.ie=document.documentMode||+RegExp["\x241"]}baidu.browser.isGecko=/gecko/i.test(navigator.userAgent)&&!/like gecko/i.test(navigator.userAgent);baidu.browser.isStrict=document.compatMode=="CSS1Compat";baidu.browser.isWebkit=/webkit/i.test(navigator.userAgent);try{if(/(\d+\.\d)/.test(external.max_version)){baidu.browser.maxthon=+RegExp["\x241"]}}catch(e){}if(/opera\/(\d+\.\d)/i.test(navigator.userAgent)){baidu.browser.opera=+RegExp["\x241"]}(function(){var a=navigator.userAgent;if(/(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(a)&&!/chrome/i.test(a)){baidu.browser.safari=+(RegExp["\x241"]||RegExp["\x242"])}})();baidu.cookie=baidu.cookie||{};baidu.cookie._isValidKey=function(a){return(new RegExp('^[^\\x00-\\x20\\x7f\\(\\)<>@,;:\\\\\\"\\[\\]\\?=\\{\\}\\/\\u0080-\\uffff]+\x24')).test(a)};baidu.cookie.getRaw=function(b){if(baidu.cookie._isValidKey(b)){var c=new RegExp("(^| )"+b+"=([^;]*)(;|\x24)"),a=c.exec(document.cookie);if(a){return a[2]||null}}return null};baidu.cookie.get=function(a){var b=baidu.cookie.getRaw(a);if("string"==typeof b){b=decodeURIComponent(b);return b}return null};baidu.cookie.setRaw=function(c,d,b){if(!baidu.cookie._isValidKey(c)){return}b=b||{};var a=b.expires;if("number"==typeof b.expires){a=new Date();a.setTime(a.getTime()+b.expires)}document.cookie=c+"="+d+(b.path?"; path="+b.path:"")+(a?"; expires="+a.toGMTString():"")+(b.domain?"; domain="+b.domain:"")+(b.secure?"; secure":"")};baidu.cookie.remove=function(b,a){a=a||{};a.expires=new Date(0);baidu.cookie.setRaw(b,"",a)};baidu.cookie.set=function(b,c,a){baidu.cookie.setRaw(b,encodeURIComponent(c),a)};baidu.date=baidu.date||{};baidu.number=baidu.number||{};baidu.number.pad=function(d,c){var f="",b=(d<0),a=String(Math.abs(d));if(a.length1?g[1].split(/[^\d]/):[0,0,0],f=g[0].split(/[^\d]/);return new Date(f[0]-0,f[1]-1,f[2]-0,b[0]-0,b[1]-0,b[2]-0)}else{return new Date(c)}}return new Date()};baidu.dom=baidu.dom||{};baidu.dom._NAME_ATTRS=(function(){var a={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",rowspan:"rowSpan",valign:"vAlign",usemap:"useMap",frameborder:"frameBorder"};if(baidu.browser.ie<8){a["for"]="htmlFor";a["class"]="className"}else{a.htmlFor="for";a.className="class"}return a})();baidu.lang=baidu.lang||{};baidu.lang.isString=function(a){return"[object String]"==Object.prototype.toString.call(a)};baidu.isString=baidu.lang.isString;baidu.dom._g=function(a){if(baidu.lang.isString(a)){return document.getElementById(a)}return a};baidu._g=baidu.dom._g;baidu.dom.g=function(a){if("string"==typeof a||a instanceof String){return document.getElementById(a)}else{if(a&&a.nodeName&&(a.nodeType==1||a.nodeType==9)){return a}}return null};baidu.g=baidu.G=baidu.dom.g;baidu.dom._matchNode=function(a,c,d){a=baidu.dom.g(a);for(var b=a[d];b;b=b[c]){if(b.nodeType==1){return b}}return null};baidu.dom._styleFilter=baidu.dom._styleFilter||[];baidu.dom._styleFilter[baidu.dom._styleFilter.length]={get:function(c,d){if(/color/i.test(c)&&d.indexOf("rgb(")!=-1){var f=d.split(",");d="#";for(var b=0,a;a=f[b];b++){a=parseInt(a.replace(/[^\d]/gi,""),10).toString(16);d+=a.length==1?"0"+a:a}d=d.toUpperCase()}return d}};baidu.dom._styleFilter.filter=function(b,f,g){for(var a=0,d=baidu.dom._styleFilter,c;c=d[a];a++){if(c=c[g]){f=c(b,f)}}return f};baidu.dom._styleFilter[baidu.dom._styleFilter.length]={set:function(a,b){if(b.constructor==Number&&!/zIndex|fontWeight|opacity|zoom|lineHeight/i.test(a)){b=b+"px"}return b}};baidu.dom._styleFixer=baidu.dom._styleFixer||{};baidu.dom._styleFixer.display=baidu.browser.ie&&baidu.browser.ie<8?{set:function(a,b){a=a.style;if(b=="inline-block"){a.display="inline";a.zoom=1}else{a.display=b}}}:baidu.browser.firefox&&baidu.browser.firefox<3?{set:function(a,b){a.style.display=b=="inline-block"?"-moz-inline-box":b}}:null;baidu.dom._styleFixer["float"]=baidu.browser.ie?"styleFloat":"cssFloat";baidu.dom._styleFixer.opacity=baidu.browser.ie?{get:function(a){var b=a.style.filter;return b&&b.indexOf("opacity=")>=0?(parseFloat(b.match(/opacity=([^)]*)/)[1])/100)+"":"1"},set:function(a,c){var b=a.style;b.filter=(b.filter||"").replace(/alpha\([^\)]*\)/gi,"")+(c==1?"":"alpha(opacity="+c*100+")");b.zoom=1}}:null;baidu.dom.getDocument=function(a){a=baidu.dom.g(a);return a.nodeType==9?a:a.ownerDocument||a.document};baidu.dom.getComputedStyle=function(b,a){b=baidu.dom._g(b);var d=baidu.dom.getDocument(b),c;if(d.defaultView&&d.defaultView.getComputedStyle){c=d.defaultView.getComputedStyle(b,null);if(c){return c[a]||c.getPropertyValue(a)}}return""};baidu.string=baidu.string||{};baidu.string.toCamelCase=function(a){if(a.indexOf("-")<0&&a.indexOf("_")<0){return a}return a.replace(/[-_][^-_]/g,function(b){return b.charAt(1).toUpperCase()})};baidu.dom.getStyle=function(c,b){var f=baidu.dom;c=f.g(c);b=baidu.string.toCamelCase(b);var d=c.style[b]||(c.currentStyle?c.currentStyle[b]:"")||f.getComputedStyle(c,b);if(!d){var a=f._styleFixer[b];if(a){d=a.get?a.get(c):baidu.dom.getStyle(c,a)}}if(a=f._styleFilter){d=a.filter(b,d,"get")}return d};baidu.getStyle=baidu.dom.getStyle;baidu.dom._styleFixer.textOverflow=(function(){var b={};function a(f){var g=f.length;if(g>0){g=f[g-1];f.length--}else{g=null}return g}function c(f,g){f[baidu.browser.firefox?"textContent":"innerText"]=g}function d(n,j,t){var l=baidu.browser.ie?n.currentStyle||n.style:getComputedStyle(n,null),s=l.fontWeight,r="font-family:"+l.fontFamily+";font-size:"+l.fontSize+";word-spacing:"+l.wordSpacing+";font-weight:"+((parseInt(s)||0)==401?700:s)+";font-style:"+l.fontStyle+";font-variant:"+l.fontVariant,f=b[r];if(!f){l=n.appendChild(document.createElement("div"));l.style.cssText="float:left;"+r;f=b[r]=[];for(var p=0;p<256;p++){p==32?(l.innerHTML=" "):c(l,String.fromCharCode(p));f[p]=l.offsetWidth}c(l,"\u4e00");f[256]=l.offsetWidth;c(l,"\u4e00\u4e00");f[257]=l.offsetWidth-f[256]*2;f[258]=f[".".charCodeAt(0)]*3+f[257]*3;n.removeChild(l)}for(var m=n.firstChild,q=f[256],h=f[257],g=f[258],v=[],t=t?g:0;m;m=m.nextSibling){if(j=g){m.nodeValue=m.nodeValue.substring(0,l)+"...";return true}else{if(!l){n.removeChild(m)}}}else{if(d(m,j,true)){return true}else{n.removeChild(m)}}}n.innerHTML=""}}return{get:function(h){var g=baidu.browser,f=dom.getStyle;return(g.opera?f("OTextOverflow"):g.firefox?h._baiduOverflow:f("textOverflow"))||"clip"},set:function(g,i){var f=baidu.browser;if(g.tagName=="TD"||g.tagName=="TH"||f.firefox){g._baiduHTML&&(g.innerHTML=g._baiduHTML);if(i=="ellipsis"){g._baiduHTML=g.innerHTML;var j=document.createElement("div"),h=g.appendChild(j).offsetWidth;g.removeChild(j);d(g,h)}else{g._baiduHTML=""}}j=g.style;f.opera?(j.OTextOverflow=i):f.firefox?(g._baiduOverflow=i):(j.textOverflow=i)}}})();(function(){var a=new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+\x24)","g");baidu.string.trim=function(b){return String(b).replace(a,"")}})();baidu.trim=baidu.string.trim;baidu.dom.addClass=function(g,h){g=baidu.dom.g(g);var b=h.split(/\s+/),a=g.className,f=" "+a+" ",d=0,c=b.length;for(;d0&&k.getBoxObjectFor&&h(a,"position")=="absolute"&&(a.style.top===""||a.style.left===""),i={left:0,top:0},g=(d.ie&&!d.isStrict)?k.body:k.documentElement,l,b;if(a==g){return i}if(a.getBoundingClientRect){b=a.getBoundingClientRect();i.left=Math.floor(b.left)+Math.max(k.documentElement.scrollLeft,k.body.scrollLeft);i.top=Math.floor(b.top)+Math.max(k.documentElement.scrollTop,k.body.scrollTop);i.left-=k.documentElement.clientLeft;i.top-=k.documentElement.clientTop;var j=k.body,m=parseInt(h(j,"borderLeftWidth")),f=parseInt(h(j,"borderTopWidth"));if(d.ie&&!d.isStrict){i.left-=isNaN(m)?2:m;i.top-=isNaN(f)?2:f}}else{l=a;do{i.left+=l.offsetLeft;i.top+=l.offsetTop;if(d.isWebkit>0&&h(l,"position")=="fixed"){i.left+=k.body.scrollLeft;i.top+=k.body.scrollTop;break}l=l.offsetParent}while(l&&l!=a);if(d.opera>0||(d.isWebkit>0&&h(a,"position")=="absolute")){i.top-=k.body.offsetTop}l=a.offsetParent;while(l&&l!=k.body){i.left-=l.scrollLeft;if(!d.opera||l.tagName!="TR"){i.top-=l.scrollTop}l=l.offsetParent}}return i};(function(){var n,m,h,f,q,i,r,a,p,g=baidu.lang.isFunction,d,k,c;baidu.dom.drag=function(t,s){p=a=null;if(!(n=baidu.dom.g(t))){return false}m=baidu.object.extend({autoStop:true,capture:true,interval:20},s);k=baidu.dom.getPosition(n.offsetParent);c=baidu.dom.getPosition(n);if(baidu.getStyle(n,"position")=="absolute"){q=c.top-(n.offsetParent==document.body?0:k.top);i=c.left-(n.offsetParent==document.body?0:k.left)}else{q=parseFloat(baidu.getStyle(n,"top"))||-parseFloat(baidu.getStyle(n,"bottom"))||0;i=parseFloat(baidu.getStyle(n,"left"))||-parseFloat(baidu.getStyle(n,"right"))||0}if(m.mouseEvent){h=baidu.page.getScrollLeft()+m.mouseEvent.clientX;f=baidu.page.getScrollTop()+m.mouseEvent.clientY}else{var u=baidu.page.getMousePosition();h=u.x;f=u.y}d=setInterval(b,m.interval);m.autoStop&&baidu.event.on(document,"mouseup",o);baidu.event.on(document.body,"selectstart",j);if(m.capture&&n.setCapture){n.setCapture()}else{if(m.capture&&window.captureEvents){window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP)}}r=document.body.style.MozUserSelect;document.body.style.MozUserSelect="none";if(g(m.ondragstart)){m.ondragstart(n,m)}return{stop:o,update:l}};function l(s){baidu.extend(m,s)}function o(){clearTimeout(d);if(m.capture&&n.releaseCapture){n.releaseCapture()}else{if(m.capture&&window.releaseEvents){window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP)}}document.body.style.MozUserSelect=r;baidu.event.un(document.body,"selectstart",j);m.autoStop&&baidu.event.un(document,"mouseup",o);if(g(m.ondragend)){m.ondragend(n,m)}}function b(w){var s=m.range,v=baidu.page.getMousePosition(),t=i+v.x-h,u=q+v.y-f;if(typeof s=="object"&&s&&s.length==4){t=Math.max(s[3],t);t=Math.min(s[1]-n.offsetWidth,t);u=Math.max(s[0],u);u=Math.min(s[2]-n.offsetHeight,u)}n.style.top=u+"px";n.style.left=t+"px";if((a!==t||p!==u)&&(a!==null||p!==null)){if(g(m.ondrag)){m.ondrag(n,m)}}a=t;p=u}function j(s){return baidu.event.preventDefault(s,false)}})();baidu.dom.setStyle=function(c,b,d){var f=baidu.dom,a;c=f.g(c);b=baidu.string.toCamelCase(b);if(a=f._styleFilter){d=a.filter(b,d,"set")}a=f._styleFixer[b];(a&&a.set)?a.set(c,d):(c.style[a||b]=d);return c};baidu.setStyle=baidu.dom.setStyle;baidu.dom.draggable=function(b,l){l=baidu.object.extend({toggle:function(){return true}},l||{});l.autoStop=true;b=baidu.dom.g(b);l.handler=l.handler||b;var a,j=["ondragstart","ondrag","ondragend"],c=j.length-1,d,k,g={dispose:function(){k&&k.stop();baidu.event.un(l.handler,"onmousedown",h);baidu.lang.Class.prototype.dispose.call(g)}},f=this;if(a=baidu.dom.ddManager){for(;c>=0;c--){d=j[c];l[d]=(function(i){var m=l[i];return function(){baidu.lang.isFunction(m)&&m.apply(f,arguments);a.dispatchEvent(i,{DOM:b})}})(d)}}if(b){function h(m){var i=l.mouseEvent=window.event||m;if(i.button>1||(baidu.lang.isFunction(l.toggle)&&!l.toggle())){return}if(baidu.dom.getStyle(b,"position")=="static"){baidu.dom.setStyle(b,"position","relative")}if(baidu.lang.isFunction(l.onbeforedragstart)){l.onbeforedragstart(b)}k=baidu.dom.drag(b,l);g.stop=k.stop;g.update=k.update;baidu.event.preventDefault(i)}baidu.event.on(l.handler,"onmousedown",h)}return{cancel:function(){g.dispose()}}};baidu.dom.intersect=function(j,i){var h=baidu.dom.g,f=baidu.dom.getPosition,a=Math.max,c=Math.min;j=h(j);i=h(i);var d=f(j),b=f(i);return a(d.left,b.left)<=c(d.left+j.offsetWidth,b.left+i.offsetWidth)&&a(d.top,b.top)<=c(d.top+j.offsetHeight,b.top+i.offsetHeight)};baidu.dom.droppable=function(f,c){c=c||{};var d=baidu.dom.ddManager,h=baidu.dom.g(f),b=baidu.lang.guid(),g=function(k){var j=d._targetsDroppingOver,i={trigger:k.DOM,reciever:h};if(baidu.dom.intersect(h,k.DOM)){if(!j[b]){(typeof c.ondropover=="function")&&c.ondropover.call(h,i);d.dispatchEvent("ondropover",i);j[b]=true}}else{if(j[b]){(typeof c.ondropout=="function")&&c.ondropout.call(h,i);d.dispatchEvent("ondropout",i)}delete j[b]}},a=function(j){var i={trigger:j.DOM,reciever:h};if(baidu.dom.intersect(h,j.DOM)){typeof c.ondrop=="function"&&c.ondrop.call(h,i);d.dispatchEvent("ondrop",i)}delete d._targetsDroppingOver[b]};d.addEventListener("ondrag",g);d.addEventListener("ondragend",a);return{cancel:function(){d.removeEventListener("ondrag",g);d.removeEventListener("ondragend",a)}}};baidu.dom.empty=function(a){a=baidu.dom.g(a);while(a.firstChild){a.removeChild(a.firstChild)}return a};baidu.dom.first=function(a){return baidu.dom._matchNode(a,"nextSibling","firstChild")};baidu.dom.getAncestorBy=function(a,b){a=baidu.dom.g(a);while((a=a.parentNode)&&a.nodeType==1){if(b(a)){return a}}return null};baidu.dom.getAncestorByClass=function(a,b){a=baidu.dom.g(a);b=new RegExp("(^|\\s)"+baidu.string.trim(b)+"(\\s|\x24)");while((a=a.parentNode)&&a.nodeType==1){if(b.test(a.className)){return a}}return null};baidu.dom.getAncestorByTag=function(b,a){b=baidu.dom.g(b);a=a.toUpperCase();while((b=b.parentNode)&&b.nodeType==1){if(b.tagName==a){return b}}return null};baidu.dom.getAttr=function(b,a){b=baidu.dom.g(b);if("style"==a){return b.style.cssText}a=baidu.dom._NAME_ATTRS[a]||a;return b.getAttribute(a)};baidu.getAttr=baidu.dom.getAttr;baidu.dom.getParent=function(a){a=baidu.dom._g(a);return a.parentElement||a.parentNode||null};baidu.dom.getText=function(d){var b="",f,c=0,a;d=baidu._g(d);if(d.nodeType===3||d.nodeType===4){b+=d.nodeValue}else{if(d.nodeType!==8){f=d.childNodes;for(a=f.length;c+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,p=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(x,s,A,B){A=A||[];s=s||document;var D=s;if(s.nodeType!==1&&s.nodeType!==9){return[]}if(!x||typeof x!=="string"){return A}var u,F,I,t,E,H,G,z,w=true,v=b.isXML(s),y=[],C=x;do{q.exec("");u=q.exec(C);if(u){C=u[3];y.push(u[1]);if(u[2]){t=u[3];break}}}while(u);if(y.length>1&&k.exec(x)){if(y.length===2&&f.relative[y[0]]){F=h(y[0]+y[1],s)}else{F=f.relative[y[0]]?[s]:b(y.shift(),s);while(y.length){x=y.shift();if(f.relative[x]){x+=y.shift()}F=h(x,F)}}}else{if(!B&&y.length>1&&s.nodeType===9&&!v&&f.match.ID.test(y[0])&&!f.match.ID.test(y[y.length-1])){E=b.find(y.shift(),s,v);s=E.expr?b.filter(E.expr,E.set)[0]:E.set[0]}if(s){E=B?{expr:y.pop(),set:a(B)}:b.find(y.pop(),y.length===1&&(y[0]==="~"||y[0]==="+")&&s.parentNode?s.parentNode:s,v);F=E.expr?b.filter(E.expr,E.set):E.set;if(y.length>0){I=a(F)}else{w=false}while(y.length){H=y.pop();G=H;if(!f.relative[H]){H=""}else{G=y.pop()}if(G==null){G=s}f.relative[H](I,G,v)}}else{I=y=[]}}if(!I){I=F}if(!I){b.error(H||x)}if(d.call(I)==="[object Array]"){if(!w){A.push.apply(A,I)}else{if(s&&s.nodeType===1){for(z=0;I[z]!=null;z++){if(I[z]&&(I[z]===true||I[z].nodeType===1&&b.contains(s,I[z]))){A.push(F[z])}}}else{for(z=0;I[z]!=null;z++){if(I[z]&&I[z].nodeType===1){A.push(F[z])}}}}}else{a(I,A)}if(t){b(t,D,A,B);b.uniqueSort(A)}return A};b.uniqueSort=function(t){if(c){p=i;t.sort(c);if(p){for(var s=1;s0};b.find=function(z,s,A){var y;if(!z){return[]}for(var v=0,u=f.order.length;v":function(y,t){var x,w=typeof t==="string",u=0,s=y.length;if(w&&!/\W/.test(t)){t=t.toLowerCase();for(;u=0)){if(!u){s.push(x)}}else{if(u){t[w]=false}}}}return false},ID:function(s){return s[1].replace(/\\/g,"")},TAG:function(t,s){return t[1].toLowerCase()},CHILD:function(s){if(s[1]==="nth"){if(!s[2]){b.error(s[0])}s[2]=s[2].replace(/^\+|\s*/g,"");var t=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(s[2]==="even"&&"2n"||s[2]==="odd"&&"2n+1"||!/\D/.test(s[2])&&"0n+"+s[2]||s[2]);s[2]=(t[1]+(t[2]||1))-0;s[3]=t[3]-0}else{if(s[2]){b.error(s[0])}}s[0]=j++;return s},ATTR:function(w,t,u,s,x,y){var v=w[1].replace(/\\/g,"");if(!y&&f.attrMap[v]){w[1]=f.attrMap[v]}if(w[2]==="~="){w[4]=" "+w[4]+" "}return w},PSEUDO:function(w,t,u,s,x){if(w[1]==="not"){if((q.exec(w[3])||"").length>1||/^\w/.test(w[3])){w[3]=b(w[3],null,null,t)}else{var v=b.filter(w[3],t,u,true^x);if(!u){s.push.apply(s,v)}return false}}else{if(f.match.POS.test(w[0])||f.match.CHILD.test(w[0])){return true}}return w},POS:function(s){s.unshift(true);return s}},filters:{enabled:function(s){return s.disabled===false&&s.type!=="hidden"},disabled:function(s){return s.disabled===true},checked:function(s){return s.checked===true},selected:function(s){s.parentNode.selectedIndex;return s.selected===true},parent:function(s){return !!s.firstChild},empty:function(s){return !s.firstChild},has:function(u,t,s){return !!b(s[3],u).length},header:function(s){return(/h\d/i).test(s.nodeName)},text:function(s){return"text"===s.type},radio:function(s){return"radio"===s.type},checkbox:function(s){return"checkbox"===s.type},file:function(s){return"file"===s.type},password:function(s){return"password"===s.type},submit:function(s){return"submit"===s.type},image:function(s){return"image"===s.type},reset:function(s){return"reset"===s.type},button:function(s){return"button"===s.type||s.nodeName.toLowerCase()==="button"},input:function(s){return(/input|select|textarea|button/i).test(s.nodeName)}},setFilters:{first:function(t,s){return s===0},last:function(u,t,s,v){return t===v.length-1},even:function(t,s){return s%2===0},odd:function(t,s){return s%2===1},lt:function(u,t,s){return ts[3]-0},nth:function(u,t,s){return s[3]-0===t},eq:function(u,t,s){return s[3]-0===t}},filter:{PSEUDO:function(u,z,y,A){var s=z[1],t=f.filters[s];if(t){return t(u,y,z,A)}else{if(s==="contains"){return(u.textContent||u.innerText||b.getText([u])||"").indexOf(z[3])>=0}else{if(s==="not"){var v=z[3];for(var x=0,w=v.length;x=0)}}},ID:function(t,s){return t.nodeType===1&&t.getAttribute("id")===s},TAG:function(t,s){return(s==="*"&&t.nodeType===1)||t.nodeName.toLowerCase()===s},CLASS:function(t,s){return(" "+(t.className||t.getAttribute("class"))+" ").indexOf(s)>-1},ATTR:function(x,v){var u=v[1],s=f.attrHandle[u]?f.attrHandle[u](x):x[u]!=null?x[u]:x.getAttribute(u),y=s+"",w=v[2],t=v[4];return s==null?w==="!=":w==="="?y===t:w==="*="?y.indexOf(t)>=0:w==="~="?(" "+y+" ").indexOf(t)>=0:!t?y&&s!==false:w==="!="?y!==t:w==="^="?y.indexOf(t)===0:w==="$="?y.substr(y.length-t.length)===t:w==="|="?y===t||y.substr(0,t.length+1)===t+"-":false},POS:function(w,t,u,x){var s=t[2],v=f.setFilters[s];if(v){return v(w,u,t,x)}}}};var k=f.match.POS,g=function(t,s){return"\\"+(s-0+1)};for(var n in f.match){f.match[n]=new RegExp(f.match[n].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[n]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[n].source.replace(/\\(\d+)/g,g))}var a=function(t,s){t=Array.prototype.slice.call(t,0);if(s){s.push.apply(s,t);return s}return t};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(w,v){var u=0,t=v||[];if(d.call(w)==="[object Array]"){Array.prototype.push.apply(t,w)}else{if(typeof w.length==="number"){for(var s=w.length;u";s.insertBefore(t,s.firstChild);if(document.getElementById(u)){f.find.ID=function(w,x,y){if(typeof x.getElementById!=="undefined"&&!y){var v=x.getElementById(w[1]);return v?v.id===w[1]||typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id").nodeValue===w[1]?[v]:undefined:[]}};f.filter.ID=function(x,v){var w=typeof x.getAttributeNode!=="undefined"&&x.getAttributeNode("id");return x.nodeType===1&&w&&w.nodeValue===v}}s.removeChild(t);s=t=null})();(function(){var t=document.createElement("div");try{t.appendChild(document.createComment(""))}catch(s){}if(t.getElementsByTagName("*").length>0){f.find.TAG=function(u,y){var x=y.getElementsByTagName(u[1]);if(u[1]==="*"){var w=[];for(var v=0;x[v];v++){if(x[v].nodeType===1){w.push(x[v])}}x=w}return x}}t.innerHTML="";if(t.firstChild&&typeof t.firstChild.getAttribute!=="undefined"&&t.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(u){return u.getAttribute("href",2)}}t=null})();if(document.querySelectorAll){(function(){var s=b,v=document.createElement("div"),u="__sizzle__";v.innerHTML="

";if(v.querySelectorAll&&v.querySelectorAll(".TEST").length===0){return}b=function(D,x,z,C){x=x||document;D=D.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!C&&!b.isXML(x)){if(x.nodeType===9){try{return a(x.querySelectorAll(D),z)}catch(A){}}else{if(x.nodeType===1&&x.nodeName.toLowerCase()!=="object"){var y=x.getAttribute("id"),w=y||u,F=x.parentNode,E=/^\s*[+~]/.test(D);if(!y){x.setAttribute("id",w)}else{w=w.replace(/'/g,"\\$&")}if(E&&F){x=x.parentNode}try{if(!E||F){return a(x.querySelectorAll("[id='"+w+"'] "+D),z)}}catch(B){}finally{if(!y){x.removeAttribute("id")}}}}}return s(D,x,z,C)};for(var t in s){b[t]=s[t]}v=null})()}(function(){var s=document.documentElement,u=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.msMatchesSelector,t=false;try{u.call(document.documentElement,"[test!='']:sizzle")}catch(v){t=true}if(u){b.matchesSelector=function(w,y){y=y.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!b.isXML(w)){try{if(t||!f.match.PSEUDO.test(y)&&!/!=/.test(y)){return u.call(w,y)}}catch(x){}}return b(y,null,null,[w]).length>0}}})();(function(){var s=document.createElement("div");s.innerHTML="
";if(!s.getElementsByClassName||s.getElementsByClassName("e").length===0){return}s.lastChild.className="e";if(s.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(t,u,v){if(typeof u.getElementsByClassName!=="undefined"&&!v){return u.getElementsByClassName(t[1])}};s=null})();function o(t,y,x,B,z,A){for(var v=0,u=B.length;v0){w=s;break}}}s=s[t]}B[v]=w}}}if(document.documentElement.contains){b.contains=function(t,s){return t!==s&&(t.contains?t.contains(s):true)}}else{if(document.documentElement.compareDocumentPosition){b.contains=function(t,s){return !!(t.compareDocumentPosition(s)&16)}}else{b.contains=function(){return false}}}b.isXML=function(s){var t=(s?s.ownerDocument||s:0).documentElement;return t?t.nodeName!=="HTML":false};var h=function(s,z){var x,v=[],w="",u=z.nodeType?[z]:z;while((x=f.match.PSEUDO.exec(s))){w+=x[0];s=s.replace(f.match.PSEUDO,"")}s=f.relative[s]?s+"*":s;for(var y=0,t=u.length;y=0){C=Math.max(G.x-H.x+a.width,r[0]);C=Math.min(C,r[1])}else{if(B.indexOf("w")>=0){C=Math.max(H.x-G.x+a.width,r[0]);C=Math.min(C,r[1]);E-=C-a.width}}if(B.indexOf("s")>=0){A=Math.max(G.y-H.y+a.height,r[2]);A=Math.min(A,r[3])}else{if(B.indexOf("n")>=0){A=Math.max(H.y-G.y+a.height,r[2]);A=Math.min(A,r[3]);F-=A-a.height}}D={width:C,height:A,top:F,left:E};baidu.dom.setOuterHeight(z,A);baidu.dom.setOuterWidth(z,C);baidu.setStyles(z,{top:F,left:E});j.n&&baidu.setStyle(j.n,"width",C);j.s&&baidu.setStyle(j.s,"width",C);j.e&&baidu.setStyle(j.e,"height",A);j.w&&baidu.setStyle(j.w,"height",A);baidu.lang.isFunction(m.onresize)&&m.onresize({current:D,original:a})}function p(A){return baidu.event.preventDefault(A,false)}function q(){var A=baidu.dom.getPosition(z.offsetParent),B=baidu.dom.getPosition(z),D,C;if(n=="absolute"){D=B.top-(z.offsetParent==document.body?0:A.top);C=B.left-(z.offsetParent==document.body?0:A.left)}else{D=parseFloat(baidu.getStyle(z,"top"))||-parseFloat(baidu.getStyle(z,"bottom"))||0;C=parseFloat(baidu.getStyle(z,"left"))||-parseFloat(baidu.getStyle(z,"right"))||0}baidu.setStyles(z,{top:D,left:C});return{width:z.offsetWidth,height:z.offsetHeight,top:D,left:C}}return{cancel:g,update:l,enable:y}};baidu.dom.setPosition=function(b,a){return baidu.dom.setStyles(b,{left:a.left-(parseFloat(baidu.dom.getStyle(b,"margin-left"))||0),top:a.top-(parseFloat(baidu.dom.getStyle(b,"margin-top"))||0)})};baidu.dom.show=function(a){a=baidu.dom.g(a);a.style.display="";return a};baidu.show=baidu.dom.show;baidu.dom.toggle=function(a){a=baidu.dom.g(a);a.style.display=a.style.display=="none"?"":"none";return a};baidu.dom.toggleClass=function(a,b){if(baidu.dom.hasClass(a,b)){baidu.dom.removeClass(a,b)}else{baidu.dom.addClass(a,b)}};baidu.page.getViewHeight=function(){var b=document,a=b.compatMode=="BackCompat"?b.body:b.documentElement;return a.clientHeight};baidu.page.getViewWidth=function(){var b=document,a=b.compatMode=="BackCompat"?b.body:b.documentElement;return a.clientWidth};baidu.dom.fixable=function(a,b){var u=baidu.g(a),p=baidu.browser.ie&&baidu.browser.ie<=7?true:false,k=b.vertival||"top",s=b.horizontal||"left",r=typeof b.autofix!="undefined"?b.autofix:true,j,d,i=false,m=b.onrender||new Function(),c=b.onupdate||new Function(),l=b.onrelease||new Function();if(!u){return}j=h();d={y:p?(j.position=="static"?baidu.dom.getPosition(u).top:baidu.dom.getPosition(u).top-baidu.dom.getPosition(u.parentNode).top):u.offsetTop,x:p?(j.position=="static"?baidu.dom.getPosition(u).left:baidu.dom.getPosition(u).left-baidu.dom.getPosition(u.parentNode).left):u.offsetLeft};baidu.extend(d,b.offset||{});r&&t();function q(){return{top:k=="top"?d.y:baidu.page.getViewHeight()-d.y-j.height,left:s=="left"?d.x:baidu.page.getViewWidth()-d.x-j.width}}function n(){var v=q();u.style.setExpression("left","eval((document.body.scrollLeft || document.documentElement.scrollLeft) + "+v.left+") + 'px'");u.style.setExpression("top","eval((document.body.scrollTop || document.documentElement.scrollTop) + "+v.top+") + 'px'")}function h(){var v={position:baidu.getStyle(u,"position"),height:function(){var w=baidu.getStyle(u,"height");return(w!="auto")?(/\d+/.exec(w)[0]):u.offsetHeight}(),width:function(){var x=baidu.getStyle(u,"width");return(x!="auto")?(/\d+/.exec(x)[0]):u.offsetWidth}()};f("top",v);f("left",v);f("bottom",v);f("right",v);return v}function f(w,x){var v;if(x.position=="static"){x[w]=""}else{v=baidu.getStyle(u,w);if(v=="auto"||v=="0px"){x[w]=""}else{x[w]=v}}}function t(){if(i){return}baidu.setStyles(u,{top:"",left:"",bottom:"",right:""});if(!p){var v={position:"fixed"};v[k=="top"?"top":"bottom"]=d.y+"px";v[s=="left"?"left":"right"]=d.x+"px";baidu.setStyles(u,v)}else{baidu.setStyle(u,"position","absolute");n()}m();i=true}function o(){if(!i){return}var v={position:j.position,left:j.left==""?"auto":j.left,top:j.top==""?"auto":j.top,bottom:j.bottom==""?"auto":j.bottom,right:j.right==""?"auto":j.right};if(p){u.style.removeExpression("left");u.style.removeExpression("top")}baidu.setStyles(u,v);l();i=false}function g(v){if(!v){return}m=v.onrender||m;c=v.onupdate||c;l=v.onrelease||l;k=v.vertival||"top";s=v.horizontal||"left";baidu.extend(d,v.offset||{});c()}return{render:t,update:g,release:o}};baidu.lang.isArray=function(a){return"[object Array]"==Object.prototype.toString.call(a)};baidu.lang.toArray=function(b){if(b===null||b===undefined){return[]}if(baidu.lang.isArray(b)){return b}if(typeof b.length!=="number"||typeof b==="string"||baidu.lang.isFunction(b)){return[b]}if(b.item){var a=b.length,c=new Array(a);while(a--){c[a]=b[a]}return c}return[].slice.call(b)};baidu.fn.methodize=function(b,a){return function(){return b.apply(this,[(a?this[a]:this)].concat([].slice.call(arguments)))}};baidu.fn.wrapReturnValue=function(a,c,b){b=b|0;return function(){var d=a.apply(this,arguments);if(b>0){return new c(arguments[b-1])}if(!b){return new c(d)}return d}};baidu.fn.multize=function(d,b,a){var c=function(){var m=arguments[0],j=b?c:d,g=[],l=[].slice.call(arguments,0),h=0,f,k;if(m instanceof Array){for(f=m.length;h2?[].slice.call(arguments,2):null;return function(){var f=baidu.lang.isString(b)?a[b]:b,d=(c)?c.concat([].slice.call(arguments,0)):arguments;return f.apply(a||f,d)}};baidu.event._eventFilter.mouseenter=window.attachEvent?null:function(a,b,c){return{type:"mouseover",listener:baidu.fn.bind(baidu.event._eventFilter._crossElementBoundary,this,c)}};baidu.event._eventFilter.mouseleave=window.attachEvent?null:function(a,b,c){return{type:"mouseout",listener:baidu.fn.bind(baidu.event._eventFilter._crossElementBoundary,this,c)}};baidu.event._unload=function(){var c=baidu.event._listeners,a=c.length,b=!!window.removeEventListener,f,d;while(a--){f=c[a];if(f[1]=="unload"){continue}if(!(d=f[0])){continue}if(d.removeEventListener){d.removeEventListener(f[1],f[3],false)}else{if(d.detachEvent){d.detachEvent("on"+f[1],f[3])}}}if(b){window.removeEventListener("unload",baidu.event._unload,false)}else{window.detachEvent("onunload",baidu.event._unload)}};if(window.attachEvent){window.attachEvent("onunload",baidu.event._unload)}else{window.addEventListener("unload",baidu.event._unload,false)}baidu.object.values=function(d){var a=[],c=0,b;for(b in d){if(d.hasOwnProperty(b)){a[c++]=d[b]}}return a};(function(){var d=baidu.browser,l={keydown:1,keyup:1,keypress:1},a={click:1,dblclick:1,mousedown:1,mousemove:1,mouseup:1,mouseover:1,mouseout:1},i={abort:1,blur:1,change:1,error:1,focus:1,load:d.ie?0:1,reset:1,resize:1,scroll:1,select:1,submit:1,unload:d.ie?0:1},g={scroll:1,resize:1,reset:1,submit:1,change:1,select:1,error:1,abort:1},k={KeyEvents:["bubbles","cancelable","view","ctrlKey","altKey","shiftKey","metaKey","keyCode","charCode"],MouseEvents:["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget"],HTMLEvents:["bubbles","cancelable"],UIEvents:["bubbles","cancelable","view","detail"],Events:["bubbles","cancelable"]};baidu.object.extend(g,l);baidu.object.extend(g,a);function c(r,p){var o=0,n=r.length,q={};for(;o0?n.charCode:n.keyCode;r=b(n)}return r}function m(o,n){n=c(k.MouseEvents,n);var p;if(document.createEvent){p=f(o,"MouseEvents",n);if(n.relatedTarget&&!p.relatedTarget){if("mouseout"==o.toLowerCase()){p.toElement=n.relatedTarget}else{if("mouseover"==o.toLowerCase()){p.fromElement=n.relatedTarget}}}}else{n.button=n.button==0?1:n.button==1?4:baidu.lang.isNumber(n.button)?n.button:0;p=b(n)}return p}function j(p,n){n.bubbles=g.hasOwnProperty(p);n=c(k.HTMLEvents,n);var r;if(document.createEvent){try{r=f(p,"HTMLEvents",n)}catch(q){try{r=f(p,"UIEvents",n)}catch(o){r=f(p,"Events",n)}}}else{r=b(n)}return r}baidu.event.fire=function(o,p,n){var q;p=p.replace(/^on/i,"");o=baidu.dom._g(o);n=baidu.object.extend({bubbles:true,cancelable:true,view:window,detail:1,screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false,keyCode:0,charCode:0,button:0,relatedTarget:null},n);if(l[p]){q=h(p,n)}else{if(a[p]){q=m(p,n)}else{if(i[p]){q=j(p,n)}else{throw (new Error(p+" is not support!"))}}}if(q){if(o.dispatchEvent){o.dispatchEvent(q)}else{if(o.fireEvent){o.fireEvent("on"+p,q)}}}}})();baidu.event.get=function(a,b){return new baidu.event.EventArg(a,b)};baidu.event.getKeyCode=function(a){return a.which||a.keyCode};baidu.event.getPageX=function(b){var a=b.pageX,c=document;if(!a&&a!==0){a=(b.clientX||0)+(c.documentElement.scrollLeft||c.body.scrollLeft)}return a};baidu.event.getPageY=function(b){var a=b.pageY,c=document;if(!a&&a!==0){a=(b.clientY||0)+(c.documentElement.scrollTop||c.body.scrollTop)}return a};baidu.event.once=function(a,b,c){a=baidu.dom._g(a);function d(f){c.call(a,f);baidu.event.un(a,b,d)}baidu.event.on(a,b,d);return a};baidu.event.stopPropagation=function(a){if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}};baidu.event.stop=function(a){var b=baidu.event;b.stopPropagation(a);b.preventDefault(a)};baidu.fn.abstractMethod=function(){throw Error("unimplemented abstract method")};baidu.json=baidu.json||{};baidu.json.parse=function(a){return(new Function("return ("+a+")"))()};baidu.json.decode=baidu.json.parse;baidu.json.stringify=(function(){var b={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function a(g){if(/["\\\x00-\x1f]/.test(g)){g=g.replace(/["\\\x00-\x1f]/g,function(h){var i=b[h];if(i){return i}i=h.charCodeAt();return"\\u00"+Math.floor(i/16).toString(16)+(i%16).toString(16)})}return'"'+g+'"'}function d(n){var h=["["],j=n.length,g,k,m;for(k=0;k");baidu.dom.insertHTML(d.getElementsByTagName("HEAD")[0],"beforeEnd",c);if(g.url){return null}var b=d.styleSheets[d.styleSheets.length-1],f=b.rules||b.cssRules;return{self:b,rules:b.rules||b.cssRules,addRule:function(h,k,j){if(b.addRule){return b.addRule(h,k,j)}else{if(b.insertRule){isNaN(j)&&(j=f.length);return b.insertRule(h+"{"+k+"}",j)}}},removeRule:function(h){if(b.removeRule){b.removeRule(h)}else{if(b.deleteRule){isNaN(h)&&(h=0);b.deleteRule(h)}}}}}};baidu.page.getHeight=function(){var d=document,a=d.body,c=d.documentElement,b=d.compatMode=="BackCompat"?a:d.documentElement;return Math.max(c.scrollHeight,a.scrollHeight,b.clientHeight)};baidu.page.getWidth=function(){var d=document,a=d.body,c=d.documentElement,b=d.compatMode=="BackCompat"?a:d.documentElement;return Math.max(c.scrollWidth,a.scrollWidth,b.clientWidth)};baidu.page.lazyLoadImage=function(a){a=a||{};a.preloadHeight=a.preloadHeight||0;baidu.dom.ready(function(){var f=document.getElementsByTagName("IMG"),g=f,h=f.length,d=0,l=c(),k="data-tangram-ori-src",j;if(a.className){g=[];for(;dl){j.setAttribute(k,j.src);a.placeHolder?j.src=a.placeHolder:j.removeAttribute("src")}}var b=function(){var n=c(),p,q=true,o=0,m=g.length;for(;o").replace(/&/g,"&");return b.replace(/&#([\d]+);/g,function(d,c){return String.fromCharCode(parseInt(c,10))})};baidu.decodeHTML=baidu.string.decodeHTML;baidu.string.encodeHTML=function(a){return String(a).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")};baidu.encodeHTML=baidu.string.encodeHTML;baidu.string.filterFormat=function(c,a){var b=Array.prototype.slice.call(arguments,1),d=Object.prototype.toString;if(b.length){b=b.length==1?(a!==null&&(/\[object Array\]|\[object Object\]/.test(d.call(a)))?a:b):b;return c.replace(/#\{(.+?)\}/g,function(g,k){var m,j,h,f,l;if(!b){return""}m=k.split("|");j=b[m[0]];if("[object Function]"==d.call(j)){j=j(m[0])}for(h=1,f=m.length;h255){c.push(f.charAt(d))}else{c.push("\\x"+b.toString(16))}}return c.join("")};baidu.string.filterFormat.js=baidu.string.filterFormat.escapeJs;baidu.string.filterFormat.escapeString=function(a){if(!a||"string"!=typeof a){return a}return a.replace(/["'<>\\\/`]/g,function(b){return"&#"+b.charCodeAt(0)+";"})};baidu.string.filterFormat.e=baidu.string.filterFormat.escapeString;baidu.string.filterFormat.toInt=function(a){return parseInt(a,10)||0};baidu.string.filterFormat.i=baidu.string.filterFormat.toInt;baidu.string.format=function(c,a){c=String(c);var b=Array.prototype.slice.call(arguments,1),d=Object.prototype.toString;if(b.length){b=b.length==1?(a!==null&&(/\[object Array\]|\[object Object\]/.test(d.call(a)))?a:b):b;return c.replace(/#\{(.+?)\}/g,function(f,h){var g=b[h];if("[object Function]"==d.call(g)){g=g(h)}return("undefined"==typeof g?"":g)})}return c};baidu.format=baidu.string.format;(function(){var c=/^\#[\da-f]{6}$/i,b=/^rgb\((\d+), (\d+), (\d+)\)$/,a={black:"#000000",silver:"#c0c0c0",gray:"#808080",white:"#ffffff",maroon:"#800000",red:"#ff0000",purple:"#800080",fuchsia:"#ff00ff",green:"#008000",lime:"#00ff00",olive:"#808000",yellow:"#ffff0",navy:"#000080",blue:"#0000ff",teal:"#008080",aqua:"#00ffff"};baidu.string.formatColor=function(f){if(c.test(f)){return f}else{if(b.test(f)){for(var k,j=1,f="#";j<4;j++){k=parseInt(RegExp["\x24"+j]).toString(16);f+=("00"+k).substr(k.length)}return f}else{if(/^\#[\da-f]{3}$/.test(f)){var h=f.charAt(1),g=f.charAt(2),d=f.charAt(3);return"#"+h+h+g+g+d+d}else{if(a[f]){return a[f]}}}}return""}})();baidu.string.getByteLength=function(a){return String(a).replace(/[^\x00-\xff]/g,"ci").length};baidu.string.subByte=function(c,b,a){c=String(c);a=a||"";if(b<0||baidu.string.getByteLength(c)<=b){return c+a}c=c.substr(0,b).replace(/([^\x00-\xff])/g,"\x241 ").substr(0,b).replace(/[^\x00-\xff]$/,"").replace(/([^\x00-\xff]) /g,"\x241");return c+a};baidu.string.toHalfWidth=function(a){return String(a).replace(/[\uFF01-\uFF5E]/g,function(b){return String.fromCharCode(b.charCodeAt(0)-65248)}).replace(/\u3000/g," ")};baidu.string.wbr=function(a){return String(a).replace(/(?:<[^>]+>)|(?:&#?[0-9a-z]{2,6};)|(.{1})/gi,"$&").replace(/>/g,">")};baidu.string.stripTags=function(a){return String(a||"").replace(/<[^>]+>/g,"")};baidu.swf=baidu.swf||{};baidu.swf.getMovie=function(c){var a=document[c],b;return baidu.browser.ie==9?a&&a.length?(b=baidu.array.remove(baidu.lang.toArray(a),function(d){return d.tagName.toLowerCase()!="embed"})).length==1?b[0]:b:a:a||window[c]};baidu.swf.Proxy=function(g,c,d){var b=this,a=this._flash=baidu.swf.getMovie(g),f;if(!c){return this}f=setInterval(function(){try{if(a[c]){b._initialized=true;clearInterval(f);if(d){d()}}}catch(h){}},100)};baidu.swf.Proxy.prototype.getFlash=function(){return this._flash};baidu.swf.Proxy.prototype.isReady=function(){return !!this._initialized};baidu.swf.Proxy.prototype.call=function(a,f){try{var c=this.getFlash(),b=Array.prototype.slice.call(arguments);b.shift();if(c[a]){c[a].apply(c,b)}}catch(d){}};baidu.swf.version=(function(){var h=navigator;if(h.plugins&&h.mimeTypes.length){var d=h.plugins["Shockwave Flash"];if(d&&d.description){return d.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s)+r/,".")+".0"}}else{if(window.ActiveXObject&&!window.opera){for(var b=12;b>=2;b--){try{var g=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+b);if(g){var a=g.GetVariable("$version");return a.replace(/WIN/g,"").replace(/,/g,".")}}catch(f){}}}}})();baidu.swf.createHTML=function(t){t=t||{};var l=baidu.swf.version,h=t.ver||"6.0.0",g,d,f,c,j,s,a={},p=baidu.string.encodeHTML;for(c in t){a[c]=t[c]}t=a;if(l){l=l.split(".");h=h.split(".");for(f=0;f<3;f++){g=parseInt(l[f],10);d=parseInt(h[f],10);if(dg){return""}}}}else{return""}var n=t.vars,m=["classid","codebase","id","width","height","align"];t.align=t.align||"middle";t.classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000";t.codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0";t.movie=t.url||"";delete t.vars;delete t.url;if("string"==typeof n){t.flashvars=n}else{var q=[];for(c in n){s=n[c];q.push(c+"="+encodeURIComponent(s))}t.flashvars=q.join("&")}var o=["");var b={wmode:1,scale:1,quality:1,play:1,loop:1,menu:1,salign:1,bgcolor:1,base:1,allowscriptaccess:1,allownetworking:1,allowfullscreen:1,seamlesstabbing:1,devicefont:1,swliveconnect:1,flashvars:1,movie:1};for(c in t){s=t[c];c=c.toLowerCase();if(b[c]&&(s||s===false||s===0)){o.push('')}}t.src=t.movie;t.name=t.id;delete t.id;delete t.movie;delete t.classid;delete t.codebase;t.type="application/x-shockwave-flash";t.pluginspage="http://www.macromedia.com/go/getflashplayer";o.push("");return o.join("")};baidu.swf.create=function(a,c){a=a||{};var b=baidu.swf.createHTML(a)||a.errorMessage||"";if(c&&"string"==typeof c){c=document.getElementById(c)}if(c){c.innerHTML=b}else{document.write(b)}};baidu.url=baidu.url||{};baidu.url.escapeSymbol=function(a){return String(a).replace(/\%/g,"%25").replace(/&/g,"%26").replace(/\+/g,"%2B").replace(/\ /g,"%20").replace(/\//g,"%2F").replace(/\#/g,"%23").replace(/\=/g,"%3D")};baidu.url.getQueryValue=function(b,c){var d=new RegExp("(^|&|\\?|#)"+baidu.string.escapeReg(c)+"=([^&#]*)(&|\x24|#)","");var a=b.match(d);if(a){return a[2]}return null};baidu.url.jsonToQuery=function(c,f){var a=[],d,b=f||function(g){return baidu.url.escapeSymbol(g)};baidu.object.each(c,function(h,g){if(baidu.lang.isArray(h)){d=h.length;while(d--){a.push(g+"="+b(h[d],g))}}else{a.push(g+"="+b(h,g))}});return a.join("&")};baidu.url.queryToJson=function(a){var g=a.substr(a.lastIndexOf("?")+1),c=g.split("&"),f=c.length,l={},d=0,j,h,k,b;for(;d= 200 && stat < 300) + || stat == 304 + || stat == 1223) { + fire('success'); + } else { + fire('failure'); + } + + /* + * NOTE: Testing discovered that for some bizarre reason, on Mozilla, the + * JavaScript XmlHttpRequest.onreadystatechange handler + * function maybe still be called after it is deleted. The theory is that the + * callback is cached somewhere. Setting it to null or an empty function does + * seem to work properly, though. + * + * On IE, there are two problems: Setting onreadystatechange to null (as + * opposed to an empty function) sometimes throws an exception. With + * particular (rare) versions of jscript.dll, setting onreadystatechange from + * within onreadystatechange causes a crash. Setting it from within a timeout + * fixes this bug (see issue 1610). + * + * End result: *always* set onreadystatechange to an empty function (never to + * null). Never set onreadystatechange from within onreadystatechange (always + * in a setTimeout()). + */ + window.setTimeout( + function() { + // 避免内存泄露. + // 由new Function改成不含此作用域链的 baidu.fn.blank 函数, + // 以避免作用域链带来的隐性循环引用导致的IE下内存泄露. By rocy 2011-01-05 . + xhr.onreadystatechange = baidu.fn.blank; + if (async) { + xhr = null; + } + }, 0); + } + } + + /** + * 获取XMLHttpRequest对象 + * + * @ignore + * @return {XMLHttpRequest} XMLHttpRequest对象 + */ + function getXHR() { + if (window.ActiveXObject) { + try { + return new ActiveXObject("Msxml2.XMLHTTP"); + } catch (e) { + try { + return new ActiveXObject("Microsoft.XMLHTTP"); + } catch (e) {} + } + } + if (window.XMLHttpRequest) { + return new XMLHttpRequest(); + } + } + + /** + * 触发事件 + * + * @ignore + * @param {String} type 事件类型 + */ + function fire(type) { + type = 'on' + type; + var handler = eventHandlers[type], + globelHandler = baidu.ajax[type]; + + // 不对事件类型进行验证 + if (handler) { + if (tick) { + clearTimeout(tick); + } + + if (type != 'onsuccess') { + handler(xhr); + } else { + //处理获取xhr.responseText导致出错的情况,比如请求图片地址. + try { + xhr.responseText; + } catch(error) { + return handler(xhr); + } + handler(xhr, xhr.responseText); + } + } else if (globelHandler) { + //onsuccess不支持全局事件 + if (type == 'onsuccess') { + return; + } + globelHandler(xhr); + } + } + + + for (key in options) { + // 将options参数中的事件参数复制到eventHandlers对象中 + // 这里复制所有options的成员,eventHandlers有冗余 + // 但是不会产生任何影响,并且代码紧凑 + eventHandlers[key] = options[key]; + } + + headers['X-Requested-With'] = 'XMLHttpRequest'; + + + try { + xhr = getXHR(); + + if (method == 'GET') { + if (data) { + url += (url.indexOf('?') >= 0 ? '&' : '?') + data; + data = null; + } + if(options['noCache']) + url += (url.indexOf('?') >= 0 ? '&' : '?') + 'b' + (+ new Date) + '=1'; + } + + if (username) { + xhr.open(method, url, async, username, password); + } else { + xhr.open(method, url, async); + } + + if (async) { + xhr.onreadystatechange = stateChangeHandler; + } + + // 在open之后再进行http请求头设定 + // FIXME 是否需要添加; charset=UTF-8呢 + if (method == 'POST') { + xhr.setRequestHeader("Content-Type", + (headers['Content-Type'] || "application/x-www-form-urlencoded")); + } + + for (key in headers) { + if (headers.hasOwnProperty(key)) { + xhr.setRequestHeader(key, headers[key]); + } + } + + fire('beforerequest'); + + if (timeout) { + tick = setTimeout(function(){ + xhr.onreadystatechange = baidu.fn.blank; + xhr.abort(); + fire("timeout"); + }, timeout); + } + xhr.send(data); + + if (!async) { + stateChangeHandler(); + } + } catch (ex) { + fire('failure'); + } + + return xhr; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/ajax/form.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + + +/** + * 将一个表单用ajax方式提交 + * @name baidu.ajax.form + * @function + * @grammar baidu.ajax.form(form[, options]) + * @param {HTMLFormElement} form 需要提交的表单元素 + * @param {Object} [options] 发送请求的选项参数 + * @config {Boolean} [async] 是否异步请求。默认为true(异步) + * @config {String} [username] 用户名 + * @config {String} [password] 密码 + * @config {Object} [headers] 要设置的http request header + * @config {Function} [replacer] 对参数值特殊处理的函数,replacer(string value, string key) + * @config {Function} [onbeforerequest] 发送请求之前触发,function(XMLHttpRequest xhr)。 + * @config {Function} [onsuccess] 请求成功时触发,function(XMLHttpRequest xhr, string responseText)。 + * @config {Function} [onfailure] 请求失败时触发,function(XMLHttpRequest xhr)。 + * @config {Function} [on{STATUS_CODE}] 当请求为相应状态码时触发的事件,如on302、on404、on500,function(XMLHttpRequest xhr)。3XX的状态码浏览器无法获取,4xx的,可能因为未知问题导致获取失败。 + + * @see baidu.ajax.request + * + * @returns {XMLHttpRequest} 发送请求的XMLHttpRequest对象 + */ +baidu.ajax.form = function (form, options) { + options = options || {}; + var elements = form.elements, + len = elements.length, + method = form.getAttribute('method'), + url = form.getAttribute('action'), + replacer = options.replacer || function (value, name) { + return value; + }, + sendOptions = {}, + data = [], + i, item, itemType, itemName, itemValue, + opts, oi, oLen, oItem; + + /** + * 向缓冲区添加参数数据 + * @private + */ + function addData(name, value) { + data.push(name + '=' + value); + } + + // 复制发送参数选项对象 + for (i in options) { + if (options.hasOwnProperty(i)) { + sendOptions[i] = options[i]; + } + } + + for (i = 0; i < len; i++) { + item = elements[i]; + itemName = item.name; + + // 处理:可用并包含表单name的表单项 + if (!item.disabled && itemName) { + itemType = item.type; + itemValue = item.value; + + switch (itemType) { + // radio和checkbox被选中时,拼装queryString数据 + case 'radio': + case 'checkbox': + if (!item.checked) { + break; + } + + // 默认类型,拼装queryString数据 + case 'textarea': + case 'text': + case 'password': + case 'hidden': + case 'select-one': + addData(itemName, replacer(itemValue, itemName)); + break; + + // 多行选中select,拼装所有选中的数据 + case 'select-multiple': + opts = item.options; + oLen = opts.length; + for (oi = 0; oi < oLen; oi++) { + oItem = opts[oi]; + if (oItem.selected) { + addData(itemName, replacer(oItem.value, itemName)); + } + } + break; + } + } + } + + // 完善发送请求的参数选项 + sendOptions.data = data.join('&'); + sendOptions.method = form.getAttribute('method') || 'GET'; + + // 发送请求 + return baidu.ajax.request(url, sendOptions); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/ajax/get.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + + +/** + * 发送一个get请求 + * @name baidu.ajax.get + * @function + * @grammar baidu.ajax.get(url[, onsuccess]) + * @param {string} url 发送请求的url地址 + * @param {Function} [onsuccess] 请求成功之后的回调函数,function(XMLHttpRequest xhr, string responseText) + * @meta standard + * @see baidu.ajax.post,baidu.ajax.request + * + * @returns {XMLHttpRequest} 发送请求的XMLHttpRequest对象 + */ +baidu.ajax.get = function (url, onsuccess) { + return baidu.ajax.request(url, {'onsuccess': onsuccess}); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/ajax/post.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + + +/** + * 发送一个post请求 + * @name baidu.ajax.post + * @function + * @grammar baidu.ajax.post(url, data[, onsuccess]) + * @param {string} url 发送请求的url地址 + * @param {string} data 发送的数据 + * @param {Function} [onsuccess] 请求成功之后的回调函数,function(XMLHttpRequest xhr, string responseText) + * @meta standard + * @see baidu.ajax.get,baidu.ajax.request + * + * @returns {XMLHttpRequest} 发送请求的XMLHttpRequest对象 + */ +baidu.ajax.post = function (url, data, onsuccess) { + return baidu.ajax.request( + url, + { + 'onsuccess': onsuccess, + 'method': 'POST', + 'data': data + } + ); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/array.js + * author: erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * @namespace baidu.array 操作数组的方法。 + */ + +baidu.array = baidu.array || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/array/indexOf.js + * author: erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 查询数组中指定元素的索引位置 + * @name baidu.array.indexOf + * @function + * @grammar baidu.array.indexOf(source, match[, fromIndex]) + * @param {Array} source 需要查询的数组 + * @param {Any} match 查询项 + * @param {number} [fromIndex] 查询的起始位索引位置,如果为负数,则从source.length+fromIndex往后开始查找 + * @see baidu.array.find,baidu.array.lastIndexOf + * + * @returns {number} 指定元素的索引位置,查询不到时返回-1 + */ +baidu.array.indexOf = function (source, match, fromIndex) { + var len = source.length, + iterator = match; + + fromIndex = fromIndex | 0; + if(fromIndex < 0){//小于0 + fromIndex = Math.max(0, len + fromIndex) + } + for ( ; fromIndex < len; fromIndex++) { + if(fromIndex in source && source[fromIndex] === match) { + return fromIndex; + } + } + + return -1; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + +/** + * 判断一个数组中是否包含给定元素 + * @name baidu.array.contains + * @function + * @grammar baidu.array.contains(source, obj) + * @param {Array} source 需要判断的数组. + * @param {Any} obj 要查找的元素. + * @return {boolean} 判断结果. + * @author berg + */ +baidu.array.contains = function(source, obj) { + return (baidu.array.indexOf(source, obj) >= 0); +}; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/array/each.js + * author: erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 遍历数组中所有元素 + * @name baidu.array.each + * @function + * @grammar baidu.array.each(source, iterator[, thisObject]) + * @param {Array} source 需要遍历的数组 + * @param {Function} iterator 对每个数组元素进行调用的函数,该函数有两个参数,第一个为数组元素,第二个为数组索引值,function (item, index)。 + * @param {Object} [thisObject] 函数调用时的this指针,如果没有此参数,默认是当前遍历的数组 + * @remark + * each方法不支持对Object的遍历,对Object的遍历使用baidu.object.each 。 + * @shortcut each + * @meta standard + * + * @returns {Array} 遍历的数组 + */ + +baidu.each = baidu.array.forEach = baidu.array.each = function (source, iterator, thisObject) { + var returnValue, item, i, len = source.length; + + if ('function' == typeof iterator) { + for (i = 0; i < len; i++) { + item = source[i]; + //TODO + //此处实现和标准不符合,标准中是这样说的: + //If a thisObject parameter is provided to forEach, it will be used as the this for each invocation of the callback. If it is not provided, or is null, the global object associated with callback is used instead. + returnValue = iterator.call(thisObject || source, item, i); + + if (returnValue === false) { + break; + } + } + } + return source; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 清空一个数组 + * @name baidu.array.empty + * @function + * @grammar baidu.array.empty(source) + * @param {Array} source 需要清空的数组. + * @author berg + */ +baidu.array.empty = function(source) { + source.length = 0; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 判断一个数组中是否所有元素都满足给定条件 + * @name baidu.array.every + * @function + * @grammar baidu.array.every(source, iterator[,thisObject]) + * @param {Array} source 需要判断的数组. + * @param {Function} iterator 判断函数. + * @param {Object} [thisObject] 函数调用时的this指针,如果没有此参数,默认是当前遍历的数组 + * @return {boolean} 判断结果. + * @see baidu.array.some + */ +baidu.array.every = function(source, iterator, thisObject) { + var i = 0, + len = source.length; + for (; i < len; i++) { + if (i in source && !iterator.call(thisObject || source, source[i], i)) { + return false; + } + } + return true; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 从数组中筛选符合条件的元素 + * @name baidu.array.filter + * @function + * @grammar baidu.array.filter(source, iterator[, thisObject]) + * @param {Array} source 需要筛选的数组 + * @param {Function} iterator 对每个数组元素进行筛选的函数,该函数有两个参数,第一个为数组元素,第二个为数组索引值,function (item, index),函数需要返回true或false + * @param {Object} [thisObject] 函数调用时的this指针,如果没有此参数,默认是当前遍历的数组 + * @meta standard + * @see baidu.array.find + * + * @returns {Array} 符合条件的数组项集合 + */ + +baidu.array.filter = function (source, iterator, thisObject) { + var result = [], + resultIndex = 0, + len = source.length, + item, + i; + + if ('function' == typeof iterator) { + for (i = 0; i < len; i++) { + item = source[i]; + //TODO + //和标准不符,see array.each + if (true === iterator.call(thisObject || source, item, i)) { + // resultIndex用于优化对result.length的多次读取 + result[resultIndex++] = item; + } + } + } + + return result; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/array/find.js + * author: erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 从数组中寻找符合条件的第一个元素 + * @name baidu.array.find + * @function + * @grammar baidu.array.find(source, iterator) + * @param {Array} source 需要查找的数组 + * @param {Function} iterator 对每个数组元素进行查找的函数,该函数有两个参数,第一个为数组元素,第二个为数组索引值,function (item, index),函数需要返回true或false + * @see baidu.array.filter,baidu.array.indexOf + * + * @returns {Any|null} 符合条件的第一个元素,找不到时返回null + */ +baidu.array.find = function (source, iterator) { + var item, i, len = source.length; + + if ('function' == typeof iterator) { + for (i = 0; i < len; i++) { + item = source[i]; + if (true === iterator.call(source, item, i)) { + return item; + } + } + } + + return null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 将两个数组参数合并成一个类似hashMap结构的对象,这个对象使用第一个数组做为key,使用第二个数组做为值,如果第二个参数未指定,则把对象的所有值置为true。 + * @name baidu.array.hash + * @function + * @grammar baidu.array.hash(keys[, values]) + * @param {Array} keys 作为key的数组 + * @param {Array} [values] 作为value的数组,未指定此参数时,默认值将对象的值都设为true。 + * + * @returns {Object} 合并后的对象{key : value} + */ +baidu.array.hash = function(keys, values) { + var o = {}, vl = values && values.length, i = 0, l = keys.length; + for (; i < l; i++) { + o[keys[i]] = (vl && vl > i) ? values[i] : true; + } + return o; +}; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/array/lastIndexOf.js + * author: erik + * version: 1.1.0 + * date: 2009/11/14 + */ + + + +/** + * 从后往前,查询数组中指定元素的索引位置 + * @name baidu.array.lastIndexOf + * @function + * @grammar baidu.array.lastIndexOf(source, match) + * @param {Array} source 需要查询的数组 + * @param {Any} match 查询项 + * @param {number} [fromIndex] 查询的起始位索引位置,如果为负数,则从source.length+fromIndex往前开始查找 + * @see baidu.array.indexOf + * + * @returns {number} 指定元素的索引位置,查询不到时返回-1 + */ + +baidu.array.lastIndexOf = function (source, match, fromIndex) { + var len = source.length; + + fromIndex = fromIndex | 0; + + if(!fromIndex || fromIndex >= len){ + fromIndex = len - 1; + } + if(fromIndex < 0){ + fromIndex += len; + } + for(; fromIndex >= 0; fromIndex --){ + if(fromIndex in source && source[fromIndex] === match){ + return fromIndex; + } + } + + return -1; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 遍历数组中所有元素,将每一个元素应用方法进行转换,并返回转换后的新数组。 + * @name baidu.array.map + * @function + * @grammar baidu.array.map(source, iterator[, thisObject]) + * @param {Array} source 需要遍历的数组. + * @param {Function} iterator 对每个数组元素进行处理的函数. + * @param {Object} [thisObject] 函数调用时的this指针,如果没有此参数,默认是当前遍历的数组 + * @return {Array} map后的数组. + * @see baidu.array.reduce + */ +baidu.array.map = function(source, iterator, thisObject) { + var results = [], + i = 0, + l = source.length; + for (; i < l; i++) { + results[i] = iterator.call(thisObject || source, source[i], i); + } + return results; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 遍历数组中所有元素,将每一个元素应用方法进行合并,并返回合并后的结果。 + * @name baidu.array.reduce + * @function + * @grammar baidu.array.reduce(source, iterator[, initializer]) + * @param {Array} source 需要遍历的数组. + * @param {Function} iterator 对每个数组元素进行处理的函数,函数接受四个参数:上一次reduce的结果(或初始值),当前元素值,索引值,整个数组. + * @param {Object} [initializer] 合并的初始项,如果没有此参数,默认用数组中的第一个值作为初始值. + * @return {Array} reduce后的值. + * @version 1.3.4 + * @see baidu.array.reduce + */ +baidu.array.reduce = function(source, iterator, initializer) { + var i = 0, + l = source.length, + found = 0; + + if( arguments.length < 3){ + //没有initializer的情况,找到第一个可用的值 + for(; i < l; i++){ + initializer = source[i++]; + found = 1; + break; + } + if(!found){ + return ; + } + } + + for (; i < l; i++) { + if( i in source){ + initializer = iterator(initializer, source[i] , i , source); + } + } + return initializer; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/array/remove.js + * author: erik + * version: 1.1.0 + * date: 2009/11/30 + */ + + + +/** + * 移除数组中的项 + * @name baidu.array.remove + * @function + * @grammar baidu.array.remove(source, match) + * @param {Array} source 需要移除项的数组 + * @param {Any} match 要移除的项 + * @meta standard + * @see baidu.array.removeAt + * + * @returns {Array} 移除后的数组 + */ +baidu.array.remove = function (source, match) { + var len = source.length; + + while (len--) { + if (len in source && source[len] === match) { + source.splice(len, 1); + } + } + return source; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/array/removeAt.js + * author: erik + * version: 1.1.0 + * date: 2009/11/30 + */ + + + +/** + * 移除数组中的项 + * @name baidu.array.removeAt + * @function + * @grammar baidu.array.removeAt(source, index) + * @param {Array} source 需要移除项的数组 + * @param {number} index 要移除项的索引位置 + * @see baidu.array.remove + * @meta standard + * @returns {Any} 被移除的数组项 + */ +baidu.array.removeAt = function (source, index) { + return source.splice(index, 1)[0]; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 判断一个数组中是否有部分元素满足给定条件 + * @name baidu.array.some + * @function + * @grammar baidu.array.some(source, iterator[,thisObject]) + * @param {Array} source 需要判断的数组. + * @param {Function} iterator 判断函数. + * @param {Object} [thisObject] 函数调用时的this指针,如果没有此参数,默认是当前遍历的数组 + * @return {boolean} 判断结果. + * @see baidu.array.every + */ +baidu.array.some = function(source, iterator, thisObject) { + var i = 0, + len = source.length; + for (; i < len; i++) { + if (i in source && iterator.call(thisObject || source, source[i], i)) { + return true; + } + } + return false; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/array/unique.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 过滤数组中的相同项。如果两个元素相同,会删除后一个元素。 + * @name baidu.array.unique + * @function + * @grammar baidu.array.unique(source[, compareFn]) + * @param {Array} source 需要过滤相同项的数组 + * @param {Function} [compareFn] 比较两个数组项是否相同的函数,两个数组项作为函数的参数。 + * + * @returns {Array} 过滤后的新数组 + */ +baidu.array.unique = function (source, compareFn) { + var len = source.length, + result = source.slice(0), + i, datum; + + if ('function' != typeof compareFn) { + compareFn = function (item1, item2) { + return item1 === item2; + }; + } + + // 从后往前双重循环比较 + // 如果两个元素相同,删除后一个 + while (--len > 0) { + datum = result[len]; + i = len; + while (i--) { + if (compareFn(datum, result[i])) { + result.splice(len, 1); + break; + } + } + } + + return result; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/browser.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * @namespace baidu.browser 判断浏览器类型和特性的属性。 + */ +baidu.browser = baidu.browser || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/browser/chrome.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/24 + */ + + +if (/chrome\/(\d+\.\d)/i.test(navigator.userAgent)) { +/** + * 判断是否为chrome浏览器 + * @grammar baidu.browser.chrome + * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.opera + * @property chrome chrome版本号 + */ + baidu.browser.chrome = + RegExp['\x241']; +} +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/browser/firefox.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +if (/firefox\/(\d+\.\d)/i.test(navigator.userAgent)) { +/** + * 判断是否为firefox浏览器 + * @property firefox firefox版本号 + * @grammar baidu.browser.firefox + * @meta standard + * @see baidu.browser.ie,baidu.browser.safari,baidu.browser.opera,baidu.browser.chrome + */ + baidu.browser.firefox = + RegExp['\x241']; +} +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/browser/ie.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/23 + */ + + +if (/msie (\d+\.\d)/i.test(navigator.userAgent)) { + //IE 8下,以documentMode为准 + //在百度模板中,可能会有$,防止冲突,将$1 写成 \x241 +/** + * 判断是否为ie浏览器 + * @property ie ie版本号 + * @grammar baidu.browser.ie + * @meta standard + * @shortcut ie + * @see baidu.browser.firefox,baidu.browser.safari,baidu.browser.opera,baidu.browser.chrome,baidu.browser.maxthon + */ + baidu.browser.ie = baidu.ie = document.documentMode || + RegExp['\x241']; +} +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/browser/isGecko.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +/** + * 判断是否为gecko内核 + * @property isGecko + * @grammar baidu.browser.isGecko + * @meta standard + * @see baidu.browser.isWebkit + */ +baidu.browser.isGecko = /gecko/i.test(navigator.userAgent) && !/like gecko/i.test(navigator.userAgent); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/browser/isStrict.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +/** + * 判断是否严格标准的渲染模式 + * @property isStrict + * @grammar baidu.browser.isStrict + * @meta standard + */ +baidu.browser.isStrict = document.compatMode == "CSS1Compat"; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/browser/isWebkit.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +/** + * 判断是否为webkit内核 + * @property isWebkit + * @grammar baidu.browser.isWebkit + * @meta standard + * @see baidu.browser.isGecko + */ +baidu.browser.isWebkit = /webkit/i.test(navigator.userAgent); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/browser/maxthon.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +try { + if (/(\d+\.\d)/.test(external.max_version)) { +/** + * 判断是否为maxthon浏览器 + * @property maxthon maxthon版本号 + * @grammar baidu.browser.maxthon + * @see baidu.browser.ie + */ + baidu.browser.maxthon = + RegExp['\x241']; + } +} catch (e) {} +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/browser/opera.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +if (/opera\/(\d+\.\d)/i.test(navigator.userAgent)) { +/** + * 判断是否为opera浏览器 + * @property opera opera版本号 + * @grammar baidu.browser.opera + * @meta standard + * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.chrome + */ + baidu.browser.opera = + RegExp['\x241']; +} +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/browser/safari.js + * author: allstar, rocy + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +(function(){ + var ua = navigator.userAgent; + /* + * 兼容浏览器为safari或ipad,其中,一段典型的ipad UA 如下: + * Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10 + */ + if(/(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(ua) && !/chrome/i.test(ua)){ + /** + * 判断是否为safari浏览器, 支持ipad + * @property safari safari版本号 + * @grammar baidu.browser.safari + * @meta standard + * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.opera,baidu.browser.chrome + */ + baidu.browser.safari = + (RegExp['\x241'] || RegExp['\x242']); + } +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/cookie.js + * author: erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + +/** + * @namespace baidu.cookie 操作cookie的方法。 + */ +baidu.cookie = baidu.cookie || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/cookie/_isValidKey.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 验证字符串是否合法的cookie键名 + * + * @param {string} source 需要遍历的数组 + * @meta standard + * @return {boolean} 是否合法的cookie键名 + */ +baidu.cookie._isValidKey = function (key) { + // http://www.w3.org/Protocols/rfc2109/rfc2109 + // Syntax: General + // The two state management headers, Set-Cookie and Cookie, have common + // syntactic properties involving attribute-value pairs. The following + // grammar uses the notation, and tokens DIGIT (decimal digits) and + // token (informally, a sequence of non-special, non-white space + // characters) from the HTTP/1.1 specification [RFC 2068] to describe + // their syntax. + // av-pairs = av-pair *(";" av-pair) + // av-pair = attr ["=" value] ; optional value + // attr = token + // value = word + // word = token | quoted-string + + // http://www.ietf.org/rfc/rfc2068.txt + // token = 1* + // CHAR = + // CTL = + // tspecials = "(" | ")" | "<" | ">" | "@" + // | "," | ";" | ":" | "\" | <"> + // | "/" | "[" | "]" | "?" | "=" + // | "{" | "}" | SP | HT + // SP = + // HT = + + return (new RegExp("^[^\\x00-\\x20\\x7f\\(\\)<>@,;:\\\\\\\"\\[\\]\\?=\\{\\}\\/\\u0080-\\uffff]+\x24")).test(key); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/cookie/getRaw.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 获取cookie的值,不对值进行解码 + * @name baidu.cookie.getRaw + * @function + * @grammar baidu.cookie.getRaw(key) + * @param {string} key 需要获取Cookie的键名 + * @meta standard + * @see baidu.cookie.get,baidu.cookie.setRaw + * + * @returns {string|null} 获取的Cookie值,获取不到时返回null + */ +baidu.cookie.getRaw = function (key) { + if (baidu.cookie._isValidKey(key)) { + var reg = new RegExp("(^| )" + key + "=([^;]*)(;|\x24)"), + result = reg.exec(document.cookie); + + if (result) { + return result[2] || null; + } + } + + return null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/cookie/get.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 获取cookie的值,用decodeURIComponent进行解码 + * @name baidu.cookie.get + * @function + * @grammar baidu.cookie.get(key) + * @param {string} key 需要获取Cookie的键名 + * @remark + * 注意:该方法会对cookie值进行decodeURIComponent解码。如果想获得cookie源字符串,请使用getRaw方法。 + * @meta standard + * @see baidu.cookie.getRaw,baidu.cookie.set + * + * @returns {string|null} cookie的值,获取不到时返回null + */ +baidu.cookie.get = function (key) { + var value = baidu.cookie.getRaw(key); + if ('string' == typeof value) { + value = decodeURIComponent(value); + return value; + } + return null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/cookie/setRaw.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 设置cookie的值,不对值进行编码 + * @name baidu.cookie.setRaw + * @function + * @grammar baidu.cookie.setRaw(key, value[, options]) + * @param {string} key 需要设置Cookie的键名 + * @param {string} value 需要设置Cookie的值 + * @param {Object} [options] 设置Cookie的其他可选参数 + * @config {string} [path] cookie路径 + * @config {Date|number} [expires] cookie过期时间,如果类型是数字的话, 单位是毫秒 + * @config {string} [domain] cookie域名 + * @config {string} [secure] cookie是否安全传输 + * @remark + * +options参数包括:
+path:cookie路径
+expires:cookie过期时间,Number型,单位为毫秒。
+domain:cookie域名
+secure:cookie是否安全传输 + + * @meta standard + * @see baidu.cookie.set,baidu.cookie.getRaw + */ +baidu.cookie.setRaw = function (key, value, options) { + if (!baidu.cookie._isValidKey(key)) { + return; + } + + options = options || {}; + //options.path = options.path || "/"; // meizz 20100402 设定一个初始值,方便后续的操作 + //berg 20100409 去掉,因为用户希望默认的path是当前路径,这样和浏览器对cookie的定义也是一致的 + + // 计算cookie过期时间 + var expires = options.expires; + if ('number' == typeof options.expires) { + expires = new Date(); + expires.setTime(expires.getTime() + options.expires); + } + + document.cookie = + key + "=" + value + + (options.path ? "; path=" + options.path : "") + + (expires ? "; expires=" + expires.toGMTString() : "") + + (options.domain ? "; domain=" + options.domain : "") + + (options.secure ? "; secure" : ''); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/cookie/remove.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 删除cookie的值 + * @name baidu.cookie.remove + * @function + * @grammar baidu.cookie.remove(key, options) + * @param {string} key 需要删除Cookie的键名 + * @param {Object} options 需要删除的cookie对应的 path domain 等值 + * @meta standard + */ +baidu.cookie.remove = function (key, options) { + options = options || {}; + options.expires = new Date(0); + baidu.cookie.setRaw(key, '', options); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/cookie/set.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 设置cookie的值,用encodeURIComponent进行编码 + * @name baidu.cookie.set + * @function + * @grammar baidu.cookie.set(key, value[, options]) + * @param {string} key 需要设置Cookie的键名 + * @param {string} value 需要设置Cookie的值 + * @param {Object} [options] 设置Cookie的其他可选参数 + * @config {string} [path] cookie路径 + * @config {Date|number} [expires] cookie过期时间,如果类型是数字的话, 单位是毫秒 + * @config {string} [domain] cookie域名 + * @config {string} [secure] cookie是否安全传输 + * @remark + * +1. 注意:该方法会对cookie值进行encodeURIComponent编码。如果想设置cookie源字符串,请使用setRaw方法。

+2. options参数包括:
+path:cookie路径
+expires:cookie过期时间,Number型,单位为毫秒。
+domain:cookie域名
+secure:cookie是否安全传输 + + * @meta standard + * @see baidu.cookie.setRaw,baidu.cookie.get + */ +baidu.cookie.set = function (key, value, options) { + baidu.cookie.setRaw(key, encodeURIComponent(value), options); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/date.js + * author: erik + * version: 1.1.0 + * date: 2009/12/04 + */ + + +/** + * @namespace baidu.date 操作日期的方法。 + */ +baidu.date = baidu.date || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/number.js + * author: erik + * version: 1.1.0 + * date: 2009/12/2 + */ + + +/** + * @namespace baidu.number 操作number的方法。 + */ +baidu.number = baidu.number || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/number/pad.js + * author: dron, erik, berg + * version: 1.1.0 + * date: 20100412 + */ + + + +/** + * 对目标数字进行0补齐处理 + * @name baidu.number.pad + * @function + * @grammar baidu.number.pad(source, length) + * @param {number} source 需要处理的数字 + * @param {number} length 需要输出的长度 + * + * @returns {string} 对目标数字进行0补齐处理后的结果 + */ +baidu.number.pad = function (source, length) { + var pre = "", + negative = (source < 0), + string = String(Math.abs(source)); + + if (string.length < length) { + pre = (new Array(length - string.length + 1)).join('0'); + } + + return (negative ? "-" : "") + pre + string; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/date/format.js + * author: erik + * version: 1.1.0 + * date: 2009/12/04 + */ + + + + +/** + * 对目标日期对象进行格式化 + * @name baidu.date.format + * @function + * @grammar baidu.date.format(source, pattern) + * @param {Date} source 目标日期对象 + * @param {string} pattern 日期格式化规则 + * @remark + * +格式表达式,变量含义:

+hh: 带 0 补齐的两位 12 进制时表示
+h: 不带 0 补齐的 12 进制时表示
+HH: 带 0 补齐的两位 24 进制时表示
+H: 不带 0 补齐的 24 进制时表示
+mm: 带 0 补齐两位分表示
+m: 不带 0 补齐分表示
+ss: 带 0 补齐两位秒表示
+s: 不带 0 补齐秒表示
+yyyy: 带 0 补齐的四位年表示
+yy: 带 0 补齐的两位年表示
+MM: 带 0 补齐的两位月表示
+M: 不带 0 补齐的月表示
+dd: 带 0 补齐的两位日表示
+d: 不带 0 补齐的日表示 + + * + * @returns {string} 格式化后的字符串 + */ + +baidu.date.format = function (source, pattern) { + if ('string' != typeof pattern) { + return source.toString(); + } + + function replacer(patternPart, result) { + pattern = pattern.replace(patternPart, result); + } + + var pad = baidu.number.pad, + year = source.getFullYear(), + month = source.getMonth() + 1, + date2 = source.getDate(), + hours = source.getHours(), + minutes = source.getMinutes(), + seconds = source.getSeconds(); + + replacer(/yyyy/g, pad(year, 4)); + replacer(/yy/g, pad(parseInt(year.toString().slice(2), 10), 2)); + replacer(/MM/g, pad(month, 2)); + replacer(/M/g, month); + replacer(/dd/g, pad(date2, 2)); + replacer(/d/g, date2); + + replacer(/HH/g, pad(hours, 2)); + replacer(/H/g, hours); + replacer(/hh/g, pad(hours % 12, 2)); + replacer(/h/g, hours % 12); + replacer(/mm/g, pad(minutes, 2)); + replacer(/m/g, minutes); + replacer(/ss/g, pad(seconds, 2)); + replacer(/s/g, seconds); + + return pattern; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/date/parse.js + * author: erik + * version: 1.1.0 + * date: 2009/12/04 + */ + + + +/** + * 将目标字符串转换成日期对象 + * @name baidu.date.parse + * @function + * @grammar baidu.date.parse(source) + * @param {string} source 目标字符串 + * @remark + * +对于目标字符串,下面这些规则决定了 parse 方法能够成功地解析:
+
    +
  1. 短日期可以使用“/”或“-”作为日期分隔符,但是必须用月/日/年的格式来表示,例如"7/20/96"。
  2. +
  3. 以 "July 10 1995" 形式表示的长日期中的年、月、日可以按任何顺序排列,年份值可以用 2 位数字表示也可以用 4 位数字表示。如果使用 2 位数字来表示年份,那么该年份必须大于或等于 70。
  4. +
  5. 括号中的任何文本都被视为注释。这些括号可以嵌套使用。
  6. +
  7. 逗号和空格被视为分隔符。允许使用多个分隔符。
  8. +
  9. 月和日的名称必须具有两个或两个以上的字符。如果两个字符所组成的名称不是独一无二的,那么该名称就被解析成最后一个符合条件的月或日。例如,"Ju" 被解释为七月而不是六月。
  10. +
  11. 在所提供的日期中,如果所指定的星期几的值与按照该日期中剩余部分所确定的星期几的值不符合,那么该指定值就会被忽略。例如,尽管 1996 年 11 月 9 日实际上是星期五,"Tuesday November 9 1996" 也还是可以被接受并进行解析的。但是结果 date 对象中包含的是 "Friday November 9 1996"。
  12. +
  13. JScript 处理所有的标准时区,以及全球标准时间 (UTC) 和格林威治标准时间 (GMT)。
  14. +
  15. 小时、分钟、和秒钟之间用冒号分隔,尽管不是这三项都需要指明。"10:"、"10:11"、和 "10:11:12" 都是有效的。
  16. +
  17. 如果使用 24 小时计时的时钟,那么为中午 12 点之后的时间指定 "PM" 是错误的。例如 "23:15 PM" 就是错误的。
  18. +
  19. 包含无效日期的字符串是错误的。例如,一个包含有两个年份或两个月份的字符串就是错误的。
  20. +
+ + * + * @returns {Date} 转换后的日期对象 + */ + +baidu.date.parse = function (source) { + var reg = new RegExp("^\\d+(\\-|\\/)\\d+(\\-|\\/)\\d+\x24"); + if ('string' == typeof source) { + if (reg.test(source) || isNaN(Date.parse(source))) { + var d = source.split(/ |T/), + d1 = d.length > 1 + ? d[1].split(/[^\d]/) + : [0, 0, 0], + d0 = d[0].split(/[^\d]/); + return new Date(d0[0] - 0, + d0[1] - 1, + d0[2] - 0, + d1[0] - 0, + d1[1] - 0, + d1[2] - 0); + } else { + return new Date(source); + } + } + + return new Date(); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + +/** + * @namespace baidu.dom 操作dom的方法。 + */ +baidu.dom = baidu.dom || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/_NAME_ATTRS.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/2 + */ + + + + +/** + * 提供给setAttr与getAttr方法作名称转换使用 + * ie6,7下class要转换成className + * @meta standard + */ + +baidu.dom._NAME_ATTRS = (function () { + var result = { + 'cellpadding': 'cellPadding', + 'cellspacing': 'cellSpacing', + 'colspan': 'colSpan', + 'rowspan': 'rowSpan', + 'valign': 'vAlign', + 'usemap': 'useMap', + 'frameborder': 'frameBorder' + }; + + if (baidu.browser.ie < 8) { + result['for'] = 'htmlFor'; + result['class'] = 'className'; + } else { + result['htmlFor'] = 'for'; + result['className'] = 'class'; + } + + return result; +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang.js + * author: erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + +/** + * @namespace baidu.lang 对语言层面的封装,包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。 +*/ +baidu.lang = baidu.lang || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/isString.js + * author: erik + * version: 1.1.0 + * date: 2009/12/30 + */ + + + +/** + * 判断目标参数是否string类型或String对象 + * @name baidu.lang.isString + * @function + * @grammar baidu.lang.isString(source) + * @param {Any} source 目标参数 + * @shortcut isString + * @meta standard + * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isString = function (source) { + return '[object String]' == Object.prototype.toString.call(source); +}; + +// 声明快捷方法 +baidu.isString = baidu.lang.isString; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/g.js + * author: allstar, erik, berg + * version: 1.3 + * date: 2010-07-07 + */ + + + + +/** + * 从文档中获取指定的DOM元素 + * **内部方法** + * + * @param {string|HTMLElement} id 元素的id或DOM元素 + * @meta standard + * @return {HTMLElement} DOM元素,如果不存在,返回null,如果参数不合法,直接返回参数 + */ +baidu.dom._g = function (id) { + if (baidu.lang.isString(id)) { + return document.getElementById(id); + } + return id; +}; + +// 声明快捷方法 +baidu._g = baidu.dom._g; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/g.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 从文档中获取指定的DOM元素 + * @name baidu.dom.g + * @function + * @grammar baidu.dom.g(id) + * @param {string|HTMLElement} id 元素的id或DOM元素 + * @shortcut g,T.G + * @meta standard + * @see baidu.dom.q + * + * @returns {HTMLElement|null} 获取的元素,查找不到时返回null,如果参数不合法,直接返回参数 + */ +baidu.dom.g = function (id) { + if ('string' == typeof id || id instanceof String) { + return document.getElementById(id); + } else if (id && id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) { + return id; + } + return null; +}; + +// 声明快捷方法 +baidu.g = baidu.G = baidu.dom.g; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/_matchNode.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/18 + */ + + + + +/** + * 从目标元素指定的方向搜索元素 + * + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} direction 遍历的方向名称,取值为previousSibling,nextSibling + * @param {string} start 遍历的开始位置,取值为firstChild,lastChild,previousSibling,nextSibling + * @meta standard + * @return {HTMLElement} 搜索到的元素,如果没有找到,返回 null + */ +baidu.dom._matchNode = function (element, direction, start) { + element = baidu.dom.g(element); + + for (var node = element[start]; node; node = node[direction]) { + if (node.nodeType == 1) { + return node; + } + } + + return null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/_styleFilters.js + * author: allstar + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 提供给setStyle与getStyle使用 + */ +baidu.dom._styleFilter = baidu.dom._styleFilter || []; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/_styleFilter/color.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 提供给setStyle与getStyle使用 + * @meta standard + */ +baidu.dom._styleFilter[baidu.dom._styleFilter.length] = { + get: function (key, value) { + if (/color/i.test(key) && value.indexOf("rgb(") != -1) { + var array = value.split(","); + + value = "#"; + for (var i = 0, color; color = array[i]; i++){ + color = parseInt(color.replace(/[^\d]/gi, ''), 10).toString(16); + value += color.length == 1 ? "0" + color : color; + } + + value = value.toUpperCase(); + } + + return value; + } +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/_styleFilter/filter.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 为获取和设置样式的过滤器 + * @private + * @meta standard + */ +baidu.dom._styleFilter.filter = function (key, value, method) { + for (var i = 0, filters = baidu.dom._styleFilter, filter; filter = filters[i]; i++) { + if (filter = filter[method]) { + value = filter(key, value); + } + } + + return value; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/_styleFilter/px.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 提供给setStyle与getStyle使用 + * @meta standard + */ +baidu.dom._styleFilter[baidu.dom._styleFilter.length] = { + set: function (key, value) { + if (value.constructor == Number + && !/zIndex|fontWeight|opacity|zoom|lineHeight/i.test(key)){ + value = value + "px"; + } + + return value; + } +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/_styleFixer.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 提供给setStyle与getStyle使用 + */ +baidu.dom._styleFixer = baidu.dom._styleFixer || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/_styleFixer/display.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/24 + */ + + + + + +/** + * 提供给setStyle与getStyle使用 + * @meta standard + */ +baidu.dom._styleFixer.display = baidu.browser.ie && baidu.browser.ie < 8 ? { // berg: 修改到<8,因为ie7同样存在这个问题,from 先伟 + set: function (element, value) { + element = element.style; + if (value == 'inline-block') { + element.display = 'inline'; + element.zoom = 1; + } else { + element.display = value; + } + } +} : baidu.browser.firefox && baidu.browser.firefox < 3 ? { + set: function (element, value) { + element.style.display = value == 'inline-block' ? '-moz-inline-box' : value; + } +} : null; +/* + * Tangram + * Copyright 2009 Baidu Inc. All right reserved. + * + * path: baidu/dom/_styleFixer/float.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 提供给setStyle与getStyle使用 + * @meta standard + */ +baidu.dom._styleFixer["float"] = baidu.browser.ie ? "styleFloat" : "cssFloat"; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/_styleFixer/opacity.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + + +/** + * 提供给setStyle与getStyle使用 + * @meta standard + */ +baidu.dom._styleFixer.opacity = baidu.browser.ie ? { + get: function (element) { + var filter = element.style.filter; + return filter && filter.indexOf("opacity=") >= 0 ? (parseFloat(filter.match(/opacity=([^)]*)/)[1]) / 100) + "" : "1"; + }, + + set: function (element, value) { + var style = element.style; + // 只能Quirks Mode下面生效?? + style.filter = (style.filter || "").replace(/alpha\([^\)]*\)/gi, "") + (value == 1 ? "" : "alpha(opacity=" + value * 100 + ")"); + // IE filters only apply to elements with "layout." + style.zoom = 1; + } +} : null; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/getDocument.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 获取目标元素所属的document对象 + * @name baidu.dom.getDocument + * @function + * @grammar baidu.dom.getDocument(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @meta standard + * @see baidu.dom.getWindow + * + * @returns {HTMLDocument} 目标元素所属的document对象 + */ +baidu.dom.getDocument = function (element) { + element = baidu.dom.g(element); + return element.nodeType == 9 ? element : element.ownerDocument || element.document; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + + +/** + * 获取目标元素的computed style值。如果元素的样式值不能被浏览器计算,则会返回空字符串(IE) + * + * @author berg + * @name baidu.dom.getComputedStyle + * @function + * @grammar baidu.dom.getComputedStyle(element, key) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} key 要获取的样式名 + * + * @see baidu.dom.getStyle + * + * @returns {string} 目标元素的computed style值 + */ + +baidu.dom.getComputedStyle = function(element, key){ + element = baidu.dom._g(element); + var doc = baidu.dom.getDocument(element), + styles; + if (doc.defaultView && doc.defaultView.getComputedStyle) { + styles = doc.defaultView.getComputedStyle(element, null); + if (styles) { + return styles[key] || styles.getPropertyValue(key); + } + } + return ''; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + +/** + * @namespace baidu.string 操作字符串的方法。 + */ +baidu.string = baidu.string || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/toCamelCase.js + * author: erik, berg + * version: 1.2 + * date: 2010-06-22 + */ + + + +/** + * 将目标字符串进行驼峰化处理 + * @name baidu.string.toCamelCase + * @function + * @grammar baidu.string.toCamelCase(source) + * @param {string} source 目标字符串 + * @remark + * 支持单词以“-_”分隔 + * @meta standard + * + * @returns {string} 驼峰化处理后的字符串 + */ + + //todo:考虑以后去掉下划线支持? +baidu.string.toCamelCase = function (source) { + //提前判断,提高getStyle等的效率 thanks xianwei + if (source.indexOf('-') < 0 && source.indexOf('_') < 0) { + return source; + } + return source.replace(/[-_][^-_]/g, function (match) { + return match.charAt(1).toUpperCase(); + }); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + + + + +/** + * 获取目标元素的样式值 + * @name baidu.dom.getStyle + * @function + * @grammar baidu.dom.getStyle(element, key) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} key 要获取的样式名 + * @remark + * + * 为了精简代码,本模块默认不对任何浏览器返回值进行归一化处理(如使用getStyle时,不同浏览器下可能返回rgb颜色或hex颜色),也不会修复浏览器的bug和差异性(如设置IE的float属性叫styleFloat,firefox则是cssFloat)。
+ * baidu.dom._styleFixer和baidu.dom._styleFilter可以为本模块提供支持。
+ * 其中_styleFilter能对颜色和px进行归一化处理,_styleFixer能对display,float,opacity,textOverflow的浏览器兼容性bug进行处理。 + * @shortcut getStyle + * @meta standard + * @see baidu.dom.setStyle,baidu.dom.setStyles, baidu.dom.getComputedStyle + * + * @returns {string} 目标元素的样式值 + */ +// TODO +// 1. 无法解决px/em单位统一的问题(IE) +// 2. 无法解决样式值为非数字值的情况(medium等 IE) +baidu.dom.getStyle = function (element, key) { + var dom = baidu.dom; + + element = dom.g(element); + key = baidu.string.toCamelCase(key); + //computed style, then cascaded style, then explicitly set style. + var value = element.style[key] || + (element.currentStyle ? element.currentStyle[key] : "") || + dom.getComputedStyle(element, key); + + // 在取不到值的时候,用fixer进行修正 + if (!value) { + var fixer = dom._styleFixer[key]; + if(fixer){ + value = fixer.get ? fixer.get(element) : baidu.dom.getStyle(element, fixer); + } + } + + /* 检查结果过滤器 */ + if (fixer = dom._styleFilter) { + value = fixer.filter(key, value, 'get'); + } + + return value; +}; + +// 声明快捷方法 +baidu.getStyle = baidu.dom.getStyle; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/_styleFixer/textOverflow.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + + + + +/** + * 提供给setStyle与getStyle使用,在做textOverflow时会向element对象中添加,_baiduOverflow, _baiduHTML两个属性保存原始的innerHTML信息 + */ +baidu.dom._styleFixer.textOverflow = (function () { + var fontSizeCache = {}; + + function pop(list) { + var o = list.length; + if (o > 0) { + o = list[o - 1]; + list.length--; + } else { + o = null; + } + return o; + } + + function setText(element, text) { + element[baidu.browser.firefox ? "textContent" : "innerText"] = text; + } + + function count(element, width, ellipsis) { + /* 计算cache的名称 */ + var o = baidu.browser.ie ? element.currentStyle || element.style : getComputedStyle(element, null), + fontWeight = o.fontWeight, + cacheName = + "font-family:" + o.fontFamily + ";font-size:" + o.fontSize + + ";word-spacing:" + o.wordSpacing + ";font-weight:" + ((parseInt(fontWeight) || 0) == 401 ? 700 : fontWeight) + + ";font-style:" + o.fontStyle + ";font-variant:" + o.fontVariant, + cache = fontSizeCache[cacheName]; + + if (!cache) { + o = element.appendChild(document.createElement("div")); + + o.style.cssText = "float:left;" + cacheName; + cache = fontSizeCache[cacheName] = []; + + /* 计算ASCII字符的宽度cache */ + for (var i=0; i < 256; i++) { + i == 32 ? (o.innerHTML = " ") : setText(o, String.fromCharCode(i)); + cache[i] = o.offsetWidth; + } + + /* 计算非ASCII字符的宽度、字符间距、省略号的宽度,\u4e00是汉字一的编码*/ + setText(o, "\u4e00"); + cache[256] = o.offsetWidth; + setText(o, "\u4e00\u4e00"); + cache[257] = o.offsetWidth - cache[256] * 2; + cache[258] = cache[".".charCodeAt(0)] * 3 + cache[257] * 3; + + element.removeChild(o); + } + + for ( + /* wordWidth是每个字符或子节点计算之前的宽度序列 */ + var node = element.firstChild, charWidth = cache[256], wordSpacing = cache[257], ellipsisWidth = cache[258], + wordWidth = [], ellipsis = ellipsis ? ellipsisWidth : 0; + node; + node = node.nextSibling + ) { + if (width < ellipsis) { + element.removeChild(node); + } + else if (node.nodeType == 3) { + for (var i = 0, text = node.nodeValue, length = text.length; i < length; i++) { + o = text.charCodeAt(i); + /* 计算增加字符后剩余的长度 */ + wordWidth[wordWidth.length] = [width, node, i]; + width -= (i ? wordSpacing : 0) + (o < 256 ? cache[o] : charWidth); + if (width < ellipsis) { + break; + } + } + } + else { + o = node.tagName; + if (o == "IMG" || o == "TABLE") { + /* 特殊元素直接删除 */ + o = node; + node = node.previousSibling; + element.removeChild(o); + } + else { + wordWidth[wordWidth.length] = [width, node]; + width -= node.offsetWidth; + } + } + } + + if (width < ellipsis) { + /* 过滤直到能得到大于省略号宽度的位置 */ + while (o = pop(wordWidth)) { + width = o[0]; + node = o[1]; + o = o[2]; + if (node.nodeType == 3) { + if (width >= ellipsisWidth) { + node.nodeValue = node.nodeValue.substring(0, o) + "..."; + return true; + } + else if (!o) { + element.removeChild(node); + } + } + else if (count(node, width, true)) { + return true; + } + else { + element.removeChild(node); + } + } + + /* 能显示的宽度小于省略号的宽度,直接不显示 */ + element.innerHTML = ""; + } + } + + return { + get: function (element) { + var browser = baidu.browser, + getStyle = dom.getStyle; + return (browser.opera ? + getStyle("OTextOverflow") : + browser.firefox ? + element._baiduOverflow : + getStyle("textOverflow")) || + "clip"; + }, + + set: function (element, value) { + var browser = baidu.browser; + if (element.tagName == "TD" || element.tagName == "TH" || browser.firefox) { + element._baiduHTML && (element.innerHTML = element._baiduHTML); + + if (value == "ellipsis") { + element._baiduHTML = element.innerHTML; + var o = document.createElement("div"), width = element.appendChild(o).offsetWidth; + element.removeChild(o); + count(element, width); + } + else { + element._baiduHTML = ""; + } + } + + o = element.style; + browser.opera ? (o.OTextOverflow = value) : browser.firefox ? (element._baiduOverflow = value) : (o.textOverflow = value); + } + }; +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/trim.js + * author: dron, erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 删除目标字符串两端的空白字符 + * @name baidu.string.trim + * @function + * @grammar baidu.string.trim(source) + * @param {string} source 目标字符串 + * @remark + * 不支持删除单侧空白字符 + * @shortcut trim + * @meta standard + * + * @returns {string} 删除两端空白字符后的字符串 + */ + +(function () { + var trimer = new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+\x24)", "g"); + + baidu.string.trim = function (source) { + return String(source) + .replace(trimer, ""); + }; +})(); + +// 声明快捷方法 +baidu.trim = baidu.string.trim; +/* + * Tangram + * Copyright 2009 Baidu Inc. All right reserved. + * + * path: baidu/dom/addClass.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/2 + */ + + + + +/** + * 为目标元素添加className + * @name baidu.dom.addClass + * @function + * @grammar baidu.dom.addClass(element, className) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} className 要添加的className,允许同时添加多个class,中间使用空白符分隔 + * @remark + * 使用者应保证提供的className合法性,不应包含不合法字符,className合法字符参考:http://www.w3.org/TR/CSS2/syndata.html。 + * @shortcut addClass + * @meta standard + * @see baidu.dom.removeClass + * + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.addClass = function (element, className) { + element = baidu.dom.g(element); + var classArray = className.split(/\s+/), + result = element.className, + classMatch = " " + result + " ", + i = 0, + l = classArray.length; + + for (; i < l; i++){ + if ( classMatch.indexOf( " " + classArray[i] + " " ) < 0 ) { + result += (result ? ' ' : '') + classArray[i]; + } + } + + element.className = result; + return element; +}; + +// 声明快捷方法 +baidu.addClass = baidu.dom.addClass; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/children.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + + +/** + * 获取目标元素的直接子元素列表 + * @name baidu.dom.children + * @function + * @grammar baidu.dom.children(element) + * @param {HTMLElement|String} element 目标元素或目标元素的id + * @meta standard + * + * @returns {Array} 目标元素的子元素列表,没有子元素时返回空数组 + */ +baidu.dom.children = function (element) { + element = baidu.dom.g(element); + + for (var children = [], tmpEl = element.firstChild; tmpEl; tmpEl = tmpEl.nextSibling) { + if (tmpEl.nodeType == 1) { + children.push(tmpEl); + } + } + + return children; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/contains.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 判断一个元素是否包含另一个元素 + * @name baidu.dom.contains + * @function + * @grammar baidu.dom.contains(container, contained) + * @param {HTMLElement|string} container 包含元素或元素的id + * @param {HTMLElement|string} contained 被包含元素或元素的id + * @meta standard + * @see baidu.dom.intersect + * + * @returns {boolean} contained元素是否被包含于container元素的DOM节点上 + */ +baidu.dom.contains = function (container, contained) { + + var g = baidu.dom._g; + container = g(container); + contained = g(contained); + + //fixme: 无法处理文本节点的情况(IE) + return container.contains + ? container != contained && container.contains(contained) + : !!(container.compareDocumentPosition(contained) & 16); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/setAttr.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + + +/** + * 设置目标元素的attribute值 + * @name baidu.dom.setAttr + * @function + * @grammar baidu.dom.setAttr(element, key, value) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} key 要设置的attribute键名 + * @param {string} value 要设置的attribute值 + * @remark + * + 设置object的自定义属性时,由于浏览器限制,无法设置。 + + * @shortcut setAttr + * @meta standard + * @see baidu.dom.getAttr,baidu.dom.setAttrs + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.setAttr = function (element, key, value) { + element = baidu.dom.g(element); + + if ('style' == key){ + element.style.cssText = value; + } else { + key = baidu.dom._NAME_ATTRS[key] || key; + element.setAttribute(key, value); + } + + return element; +}; + +// 声明快捷方法 +baidu.setAttr = baidu.dom.setAttr; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/setAttrs.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + + +/** + * 批量设置目标元素的attribute值 + * @name baidu.dom.setAttrs + * @function + * @grammar baidu.dom.setAttrs(element, attributes) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {Object} attributes 要设置的attribute集合 + * @shortcut setAttrs + * @meta standard + * @see baidu.dom.setAttr,baidu.dom.getAttr + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.setAttrs = function (element, attributes) { + element = baidu.dom.g(element); + + for (var key in attributes) { + baidu.dom.setAttr(element, key, attributes[key]); + } + + return element; +}; + +// 声明快捷方法 +baidu.setAttrs = baidu.dom.setAttrs; +/* + * Tangram + * Copyright 2009 Baidu Inc. All right reserved. + */ + + +/** + * 创建 Element 对象。 + * @author berg + * @name baidu.dom.create + * @function + * @grammar baidu.dom.create(tagName[, options]) + * @param {string} tagName 标签名称. + * @param {Object} opt_attributes 元素创建时拥有的属性,如style和className. + * @version 1.3 + * @meta standard + * @return {HTMLElement} 创建的 Element 对象 + */ +baidu.dom.create = function(tagName, opt_attributes) { + var el = document.createElement(tagName), + attributes = opt_attributes || {}; + return baidu.dom.setAttrs(el, attributes); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/guid.js + * author: meizz + * version: 1.1.0 + * date: 2010/02/04 + */ + +/** + * 返回一个当前页面的唯一标识字符串。 + * @name baidu.lang.guid + * @function + * @grammar baidu.lang.guid() + * @version 1.1.1 + * @meta standard + * + * @returns {String} 当前页面的唯一标识字符串 + */ + +(function(){ + //不直接使用window,可以提高3倍左右性能 + var guid = window[baidu.guid]; + + baidu.lang.guid = function() { + return "TANGRAM__" + (guid._counter ++).toString(36); + }; + + guid._counter = guid._counter || 1; +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/_instances.js + * author: meizz, erik + * version: 1.1.0 + * date: 2009/12/1 + */ + + + + +/** + * 所有类的实例的容器 + * key为每个实例的guid + * @meta standard + */ + +window[baidu.guid]._instances = window[baidu.guid]._instances || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/isFunction.js + * author: rocy + * version: 1.1.2 + * date: 2010/06/12 + */ + + + +/** + * 判断目标参数是否为function或Function实例 + * @name baidu.lang.isFunction + * @function + * @grammar baidu.lang.isFunction(source) + * @param {Any} source 目标参数 + * @version 1.2 + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * @meta standard + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isFunction = function (source) { + // chrome下,'function' == typeof /a/ 为true. + return '[object Function]' == Object.prototype.toString.call(source); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/Class.js + * author: meizz, erik + * version: 1.1.0 + * date: 2009/12/1 + */ + + + + + +/** + * + * @class Tangram继承机制提供的一个基类,用户可以通过继承baidu.lang.Class来获取它的属性及方法。 + * @name baidu.lang.Class + * @grammar baidu.lang.Class(guid) + * @param {string} guid 对象的唯一标识 + * @meta standard + * @remark baidu.lang.Class和它的子类的实例均包含一个全局唯一的标识guid。guid是在构造函数中生成的,因此,继承自baidu.lang.Class的类应该直接或者间接调用它的构造函数。
baidu.lang.Class的构造函数中产生guid的方式可以保证guid的唯一性,及每个实例都有一个全局唯一的guid。 + * @meta standard + * @see baidu.lang.inherits,baidu.lang.Event + */ +baidu.lang.Class = function(guid) { + this.guid = guid || baidu.lang.guid(); + window[baidu.guid]._instances[this.guid] = this; +}; +window[baidu.guid]._instances = window[baidu.guid]._instances || {}; + +/** + * 释放对象所持有的资源,主要是自定义事件。 + * @name dispose + * @grammar obj.dispose() + * TODO: 将_listeners中绑定的事件剔除掉 + */ +baidu.lang.Class.prototype.dispose = function(){ + delete window[baidu.guid]._instances[this.guid]; + + for(var property in this){ + if (!baidu.lang.isFunction(this[property])) { + delete this[property]; + } + } + this.disposed = true; // 20100716 +}; + +/** + * 重载了默认的toString方法,使得返回信息更加准确一些。 + * @return {string} 对象的String表示形式 + */ +baidu.lang.Class.prototype.toString = function(){ + return "[object " + (this._className || "Object" ) + "]"; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/Event.js + * author: meizz, erik, berg + * version: 1.1.1 + * date: 2009/11/24 + * modify: 2010/04/19 berg + */ + + + + + + +/** + * + * @class 自定义的事件对象。 + * @name baidu.lang.Event + * @grammar baidu.lang.Event(type[, target]) + * @param {string} type 事件类型名称。为了方便区分事件和一个普通的方法,事件类型名称必须以"on"(小写)开头。 + * @param {Object} [target]触发事件的对象 + * @meta standard + * @remark 引入该模块,会自动为Class引入3个事件扩展方法:addEventListener、removeEventListener和dispatchEvent。 + * @meta standard + * @see baidu.lang.Class + */ +baidu.lang.Event = function (type, target) { + this.type = type; + this.returnValue = true; + this.target = target || null; + this.currentTarget = null; +}; + +/** + * 注册对象的事件监听器。引入baidu.lang.Event后,Class的子类实例才会获得该方法。 + * @grammar obj.addEventListener(type, handler[, key]) + * @param {string} type 自定义事件的名称 + * @param {Function} handler 自定义事件被触发时应该调用的回调函数 + * @param {string} [key] 为事件监听函数指定的名称,可在移除时使用。如果不提供,方法会默认为它生成一个全局唯一的key。 + * @remark 事件类型区分大小写。如果自定义事件名称不是以小写"on"开头,该方法会给它加上"on"再进行判断,即"click"和"onclick"会被认为是同一种事件。 + */ +baidu.lang.Class.prototype.addEventListener = function (type, handler, key) { + if (!baidu.lang.isFunction(handler)) { + return; + } + + !this.__listeners && (this.__listeners = {}); + + var t = this.__listeners, id; + if (typeof key == "string" && key) { + if (/[^\w\-]/.test(key)) { + throw("nonstandard key:" + key); + } else { + handler.hashCode = key; + id = key; + } + } + type.indexOf("on") != 0 && (type = "on" + type); + + typeof t[type] != "object" && (t[type] = {}); + id = id || baidu.lang.guid(); + handler.hashCode = id; + t[type][id] = handler; +}; + +/** + * 移除对象的事件监听器。引入baidu.lang.Event后,Class的子类实例才会获得该方法。 + * @grammar obj.removeEventListener(type, handler) + * @param {string} type 事件类型 + * @param {Function|string} handler 要移除的事件监听函数或者监听函数的key + * @remark 如果第二个参数handler没有被绑定到对应的自定义事件中,什么也不做。 + */ +baidu.lang.Class.prototype.removeEventListener = function (type, handler) { + if (typeof handler != "undefined") { + if ( (baidu.lang.isFunction(handler) && ! (handler = handler.hashCode)) + || (! baidu.lang.isString(handler)) + ){ + return; + } + } + + !this.__listeners && (this.__listeners = {}); + + type.indexOf("on") != 0 && (type = "on" + type); + + var t = this.__listeners; + if (!t[type]) { + return; + } + if (typeof handler != "undefined") { + t[type][handler] && delete t[type][handler]; + } else { + for(var guid in t[type]){ + delete t[type][guid]; + } + } +}; + +/** + * 派发自定义事件,使得绑定到自定义事件上面的函数都会被执行。引入baidu.lang.Event后,Class的子类实例才会获得该方法。 + * @grammar obj.dispatchEvent(event, options) + * @param {baidu.lang.Event|String} event Event对象,或事件名称(1.1.1起支持) + * @param {Object} options 扩展参数,所含属性键值会扩展到Event对象上(1.2起支持) + * @remark 处理会调用通过addEventListenr绑定的自定义事件回调函数之外,还会调用直接绑定到对象上面的自定义事件。例如:
+myobj.onMyEvent = function(){}
+myobj.addEventListener("onMyEvent", function(){}); + */ +baidu.lang.Class.prototype.dispatchEvent = function (event, options) { + if (baidu.lang.isString(event)) { + event = new baidu.lang.Event(event); + } + !this.__listeners && (this.__listeners = {}); + + // 20100603 添加本方法的第二个参数,将 options extend到event中去传递 + options = options || {}; + for (var i in options) { + event[i] = options[i]; + } + + var i, t = this.__listeners, p = event.type; + event.target = event.target || this; + event.currentTarget = this; + + p.indexOf("on") != 0 && (p = "on" + p); + + baidu.lang.isFunction(this[p]) && this[p].apply(this, arguments); + + if (typeof t[p] == "object") { + for (i in t[p]) { + t[p][i].apply(this, arguments); + } + } + return event.returnValue; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/createSingle.js + * author: meizz, berg + * version: 1.1.2 + * date: 2010-05-13 + */ + + + + + +/** + * 创建一个baidu.lang.Class的单例实例 + * @name baidu.lang.createSingle + * @function + * @grammar baidu.lang.createSingle(json) + * @param {Object} json 直接挂载到这个单例里的预定属性/方法 + * @version 1.2 + * @see baidu.lang.Class + * + * @returns {Object} 一个实例 + */ +baidu.lang.createSingle = function (json) { + var c = new baidu.lang.Class(); + + for (var key in json) { + c[key] = json[key]; + } + return c; +}; + +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * path: baidu/dom/dragManager.js + * author: rocy + * version: 1.4.0 + * date: 2010/10/14 + */ + + + +/** + * 拖曳管理器 + * @function + * @param {HTMLElement|ID} element 被拖曳的元素 + * @param {JSON} options 拖曳配置项 {toggle, autoStop, interval, capture, range, ondragstart, ondragend, ondrag} + * @return {DOMElement} 可拖拽的元素 + */ +baidu.dom.ddManager = baidu.lang.createSingle({ + _targetsDroppingOver:{} +}); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event.js + * author: erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * @namespace baidu.event 屏蔽浏览器差异性的事件封装。 + * @property target 事件的触发元素 + * @property pageX 鼠标事件的鼠标x坐标 + * @property pageY 鼠标事件的鼠标y坐标 + * @property keyCode 键盘事件的键值 + */ +baidu.event = baidu.event || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/_listeners.js + * author: erik + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +/** + * 事件监听器的存储表 + * @private + * @meta standard + */ +baidu.event._listeners = baidu.event._listeners || []; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/on.js + * author: erik + * version: 1.1.0 + * date: 2009/12/16 + */ + + + + +/** + * 为目标元素添加事件监听器 + * @name baidu.event.on + * @function + * @grammar baidu.event.on(element, type, listener) + * @param {HTMLElement|string|window} element 目标元素或目标元素id + * @param {string} type 事件类型 + * @param {Function} listener 需要添加的监听器 + * @remark + * +1. 不支持跨浏览器的鼠标滚轮事件监听器添加
+2. 改方法不为监听器灌入事件对象,以防止跨iframe事件挂载的事件对象获取失败 + + * @shortcut on + * @meta standard + * @see baidu.event.un + * + * @returns {HTMLElement|window} 目标元素 + */ +baidu.event.on = function (element, type, listener) { + type = type.replace(/^on/i, ''); + element = baidu.dom._g(element); + + var realListener = function (ev) { + // 1. 这里不支持EventArgument, 原因是跨frame的事件挂载 + // 2. element是为了修正this + listener.call(element, ev); + }, + lis = baidu.event._listeners, + filter = baidu.event._eventFilter, + afterFilter, + realType = type; + type = type.toLowerCase(); + // filter过滤 + if(filter && filter[type]){ + afterFilter = filter[type](element, type, realListener); + realType = afterFilter.type; + realListener = afterFilter.listener; + } + + // 事件监听器挂载 + if (element.addEventListener) { + element.addEventListener(realType, realListener, false); + } else if (element.attachEvent) { + element.attachEvent('on' + realType, realListener); + } + + // 将监听器存储到数组中 + lis[lis.length] = [element, type, listener, realListener, realType]; + return element; +}; + +// 声明快捷方法 +baidu.on = baidu.event.on; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/un.js + * author: erik + * version: 1.1.0 + * date: 2009/12/16 + */ + + + + +/** + * 为目标元素移除事件监听器 + * @name baidu.event.un + * @function + * @grammar baidu.event.un(element, type, listener) + * @param {HTMLElement|string|window} element 目标元素或目标元素id + * @param {string} type 事件类型 + * @param {Function} listener 需要移除的监听器 + * @shortcut un + * @meta standard + * @see baidu.event.on + * + * @returns {HTMLElement|window} 目标元素 + */ +baidu.event.un = function (element, type, listener) { + element = baidu.dom._g(element); + type = type.replace(/^on/i, '').toLowerCase(); + + var lis = baidu.event._listeners, + len = lis.length, + isRemoveAll = !listener, + item, + realType, realListener; + + //如果将listener的结构改成json + //可以节省掉这个循环,优化性能 + //但是由于un的使用频率并不高,同时在listener不多的时候 + //遍历数组的性能消耗不会对代码产生影响 + //暂不考虑此优化 + while (len--) { + item = lis[len]; + + // listener存在时,移除element的所有以listener监听的type类型事件 + // listener不存在时,移除element的所有type类型事件 + if (item[1] === type + && item[0] === element + && (isRemoveAll || item[2] === listener)) { + realType = item[4]; + realListener = item[3]; + if (element.removeEventListener) { + element.removeEventListener(realType, realListener, false); + } else if (element.detachEvent) { + element.detachEvent('on' + realType, realListener); + } + lis.splice(len, 1); + } + } + + return element; +}; + +// 声明快捷方法 +baidu.un = baidu.event.un; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/preventDefault.js + * author: erik + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +/** + * 阻止事件的默认行为 + * @name baidu.event.preventDefault + * @function + * @grammar baidu.event.preventDefault(event) + * @param {Event} event 事件对象 + * @meta standard + * @see baidu.event.stop,baidu.event.stopPropagation + */ +baidu.event.preventDefault = function (event) { + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + } +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/object.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + +/** + * @namespace baidu.object 操作原生对象的方法。 + */ +baidu.object = baidu.object || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 将源对象的所有属性拷贝到目标对象中 + * @author erik + * @name baidu.object.extend + * @function + * @grammar baidu.object.extend(target, source) + * @param {Object} target 目标对象 + * @param {Object} source 源对象 + * @see baidu.array.merge + * @remark + * +1.目标对象中,与源对象key相同的成员将会被覆盖。
+2.源对象的prototype成员不会拷贝。 + + * @shortcut extend + * @meta standard + * + * @returns {Object} 目标对象 + */ +baidu.extend = +baidu.object.extend = function (target, source) { + for (var p in source) { + if (source.hasOwnProperty(p)) { + target[p] = source[p]; + } + } + + return target; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/page.js + * author: erik + * version: 1.1.0 + * date: 2009/11/17 + */ + + +/** + * @namespace baidu.page 对页面层面的封装,包括页面的高宽属性、以及外部css和js的动态添加。 + */ +baidu.page = baidu.page || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/page/getScrollTop.js + * author: erik + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 获取纵向滚动量 + * @name baidu.page.getScrollTop + * @function + * @grammar baidu.page.getScrollTop() + * @see baidu.page.getScrollLeft + * @meta standard + * @returns {number} 纵向滚动量 + */ +baidu.page.getScrollTop = function () { + var d = document; + return window.pageYOffset || d.documentElement.scrollTop || d.body.scrollTop; +}; +/** + * 获取横向滚动量 + * @name baidu.page.getScrollLeft + * @function + * @grammar baidu.page.getScrollLeft() + * @see baidu.page.getScrollTop + * + * @returns {number} 横向滚动量 + */ +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/page/getScrollLeft.js + * author: erik + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 获取横向滚动量 + * + * @return {number} 横向滚动量 + */ +baidu.page.getScrollLeft = function () { + var d = document; + return window.pageXOffset || d.documentElement.scrollLeft || d.body.scrollLeft; +}; +/** + * 获得页面里的目前鼠标所在的坐标 + * @name baidu.page.getMousePosition + * @function + * @grammar baidu.page.getMousePosition() + * @version 1.2 + * + * @returns {object} 鼠标坐标值{x:[Number], y:[Number]} + */ +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * path: baidu/page/getMousePosition.js + * author: meizz + * version: 1.1.0 + * date: 2010/06/02 + */ + + + + +/** + * 取得当前页面里的目前鼠标所在的坐标(x y) + * + * @return {JSON} 当前鼠标的坐标值({x, y}) + */ +(function(){ + + baidu.page.getMousePosition = function(){ + return { +x : baidu.page.getScrollLeft() + xy.x, +y : baidu.page.getScrollTop() + xy.y +}; +}; + +var xy = {x:0, y:0}; +// 监听当前网页的 mousemove 事件以获得鼠标的实时坐标 +baidu.event.on(document, "onmousemove", function(e){ + e = window.event || e; + xy.x = e.clientX; + xy.y = e.clientY; + }); + +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/getPosition.js + * author: berg + * version: 1.2.0 + * date: 2010/12/16 + * + * thanks google closure & jquery + * 本函数部分思想来自:http://code.google.com/p/doctype/wiki/ArticlePageOffset + */ + + + + + + + + + + +/** + * 获取目标元素相对于整个文档左上角的位置 + * @name baidu.dom.getPosition + * @function + * @grammar baidu.dom.getPosition(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @meta standard + * + * @returns {Object} 目标元素的位置,键值为top和left的Object。 + */ +baidu.dom.getPosition = function (element) { + element = baidu.dom.g(element); + var doc = baidu.dom.getDocument(element), + browser = baidu.browser, + getStyle = baidu.dom.getStyle, + // Gecko 1.9版本以下用getBoxObjectFor计算位置 + // 但是某些情况下是有bug的 + // 对于这些有bug的情况 + // 使用递归查找的方式 + BUGGY_GECKO_BOX_OBJECT = browser.isGecko > 0 && + doc.getBoxObjectFor && + getStyle(element, 'position') == 'absolute' && + (element.style.top === '' || element.style.left === ''), + pos = {"left":0,"top":0}, + viewport = (browser.ie && !browser.isStrict) ? doc.body : doc.documentElement, + parent, + box; + + if(element == viewport){ + return pos; + } + + + if(element.getBoundingClientRect){ // IE and Gecko 1.9+ + + //当HTML或者BODY有border width时, 原生的getBoundingClientRect返回值是不符合预期的 + //考虑到通常情况下 HTML和BODY的border只会设成0px,所以忽略该问题. + box = element.getBoundingClientRect(); + + pos.left = Math.floor(box.left) + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft); + pos.top = Math.floor(box.top) + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop); + + // IE会给HTML元素添加一个border,默认是medium(2px) + // 但是在IE 6 7 的怪异模式下,可以被html { border: 0; } 这条css规则覆盖 + // 在IE7的标准模式下,border永远是2px,这个值通过clientLeft 和 clientTop取得 + // 但是。。。在IE 6 7的怪异模式,如果用户使用css覆盖了默认的medium + // clientTop和clientLeft不会更新 + pos.left -= doc.documentElement.clientLeft; + pos.top -= doc.documentElement.clientTop; + + var htmlDom = doc.body, + // 在这里,不使用element.style.borderLeftWidth,只有computedStyle是可信的 + htmlBorderLeftWidth = parseInt(getStyle(htmlDom, 'borderLeftWidth')), + htmlBorderTopWidth = parseInt(getStyle(htmlDom, 'borderTopWidth')); + if(browser.ie && !browser.isStrict){ + pos.left -= isNaN(htmlBorderLeftWidth) ? 2 : htmlBorderLeftWidth; + pos.top -= isNaN(htmlBorderTopWidth) ? 2 : htmlBorderTopWidth; + } + /* + * 因为firefox 3.6和4.0在特定页面下(场景待补充)都会出现1px偏移,所以暂时移除该逻辑分支 + * 如果 2.0版本时firefox仍存在问题,该逻辑分支将彻底移除. by rocy 2011-01-20 + } else if (doc.getBoxObjectFor && !BUGGY_GECKO_BOX_OBJECT){ // gecko 1.9- + + // 1.9以下的Gecko,会忽略ancestors的scroll值 + // https://bugzilla.mozilla.org/show_bug.cgi?id=328881 and + // https://bugzilla.mozilla.org/show_bug.cgi?id=330619 + + box = doc.getBoxObjectFor(element); + var vpBox = doc.getBoxObjectFor(viewport); + pos.left = box.screenX - vpBox.screenX; + pos.top = box.screenY - vpBox.screenY; + */ + } else { // safari/opera/firefox + parent = element; + + do { + pos.left += parent.offsetLeft; + pos.top += parent.offsetTop; + + // safari里面,如果遍历到了一个fixed的元素,后面的offset都不准了 + if (browser.isWebkit > 0 && getStyle(parent, 'position') == 'fixed') { + pos.left += doc.body.scrollLeft; + pos.top += doc.body.scrollTop; + break; + } + + parent = parent.offsetParent; + } while (parent && parent != element); + + // 对body offsetTop的修正 + if(browser.opera > 0 || (browser.isWebkit > 0 && getStyle(element, 'position') == 'absolute')){ + pos.top -= doc.body.offsetTop; + } + + // 计算除了body的scroll + parent = element.offsetParent; + while (parent && parent != doc.body) { + pos.left -= parent.scrollLeft; + // see https://bugs.opera.com/show_bug.cgi?id=249965 +// if (!b.opera || parent.tagName != 'TR') { + if (!browser.opera || parent.tagName != 'TR') { + pos.top -= parent.scrollTop; + } + parent = parent.offsetParent; + } + } + + return pos; +}; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * path: baidu/dom/drag.js + * author: meizz, berg, lxp + * version: 1.1.0 + * date: 2010/06/02 + */ + + + + + + + + + + + + + + + +/** + * 拖动指定的DOM元素 + * @name baidu.dom.drag + * @function + * @grammar baidu.dom.drag(element, options) + * @param {HTMLElement|string} element 元素或者元素的id + * @param {Object} options 拖曳配置项 + + * @param {Array} options.range 限制drag的拖拽范围,数组中必须包含四个值,分别是上、右、下、左边缘相对上方或左方的像素距离。默认无限制 + * @param {Number} options.interval 拖曳行为的触发频度(时间:毫秒) + * @param {Boolean} options.capture 鼠标拖曳粘滞 + * @param {Object} options.mouseEvent 键名为clientX和clientY的object,若不设置此项,默认会获取当前鼠标位置 + * @param {Function} options.ondragstart drag开始时触发 + * @param {Function} options.ondrag drag进行中触发 + * @param {Function} options.ondragend drag结束时触发 + * @param {function} options.autoStop 是否在onmouseup时自动停止拖拽。默认为true + * @version 1.2 + * @remark + * + 要拖拽的元素必须事先设定样式的postion值,如果postion为absloute,并且没有设定top和left,拖拽开始时,无法取得元素的top和left值,这时会从[0,0]点开始拖拽 + + * @see baidu.dom.draggable + */ +/** + * 拖曳DOM元素 + * @param {HTMLElement|ID} element 被拖曳的元素 + * @param {JSON} options 拖曳配置项 + * {autoStop, interval, capture, range, ondragstart, ondragend, ondrag, mouseEvent} + */ +(function(){ + var target, // 被拖曳的DOM元素 + op, ox, oy, //timer, + top, left, mozUserSelect, + lastLeft, lastTop, + isFunction = baidu.lang.isFunction, + timer, + offset_parent,offset_target; + + baidu.dom.drag = function(element, options) { + //每次开始拖拽的时候重置lastTop和lastLeft + lastTop = lastLeft = null; + + if (!(target = baidu.dom.g(element))) return false; + op = baidu.object.extend({ + autoStop:true // false 用户手动结束拖曳 | true 在mouseup时自动停止拖曳 + ,capture : true // 鼠标拖曳粘滞 + ,interval : 20 // 拖曳行为的触发频度(时间:毫秒) + }, options); + + offset_parent = baidu.dom.getPosition(target.offsetParent); + offset_target = baidu.dom.getPosition(target); + + if(baidu.getStyle(target,'position') == "absolute"){ + top = offset_target.top - (target.offsetParent == document.body ? 0 : offset_parent.top); + left = offset_target.left - (target.offsetParent == document.body ? 0 :offset_parent.left); + }else{ + top = parseFloat(baidu.getStyle(target,"top")) || -parseFloat(baidu.getStyle(target,"bottom")) || 0; + left = parseFloat(baidu.getStyle(target,"left")) || -parseFloat(baidu.getStyle(target,"right")) || 0; + } + + if(op.mouseEvent){ + // [2010/11/16] 可以不依赖getMousePosition,直接通过一个可选参数获得鼠标位置 + ox = baidu.page.getScrollLeft() + op.mouseEvent.clientX; + oy = baidu.page.getScrollTop() + op.mouseEvent.clientY; + }else{ + var xy = baidu.page.getMousePosition(); // 得到当前鼠标坐标值 + ox = xy.x; + oy = xy.y; + } + + timer = setInterval(render, op.interval); + + // 这项为 true,缺省在 onmouseup 事件终止拖曳 + op.autoStop && baidu.event.on(document, "mouseup", stop); + + // 在拖曳过程中页面里的文字会被选中高亮显示,在这里修正 + baidu.event.on(document.body, "selectstart", unselect); + + // 设置鼠标粘滞 + if (op.capture && target.setCapture) { + target.setCapture(); + } else if (op.capture && window.captureEvents) { + window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP); + } + //baidu.on(target,"mousemove",render); + + // fixed for firefox + mozUserSelect = document.body.style.MozUserSelect; + document.body.style.MozUserSelect = "none"; + + // ondragstart 事件 + if(isFunction(op.ondragstart)){ + op.ondragstart(target, op); + } + + return {stop : stop, update : update}; + }; + + /** + * 更新当前拖拽对象的属性 + */ + function update(options){ + baidu.extend(op, options); + } + + /** + * 手动停止拖拽 + */ + function stop() { + clearTimeout(timer); + + // 解除鼠标粘滞 + if (op.capture && target.releaseCapture) { + target.releaseCapture(); + } else if (op.capture && window.releaseEvents) { + window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP); + } + + // 拖曳时网页内容被框选 + document.body.style.MozUserSelect = mozUserSelect; + baidu.event.un(document.body, "selectstart", unselect); + op.autoStop && baidu.event.un(document, "mouseup", stop); + + // ondragend 事件 + if(isFunction(op.ondragend)){ + op.ondragend(target, op); + } + } + + // 对DOM元素进行top/left赋新值以实现拖曳的效果 + function render(e) { + var rg = op.range, + xy = baidu.page.getMousePosition(), + el = left + xy.x - ox, + et = top + xy.y - oy; + + // 如果用户限定了可拖动的范围 + if (typeof rg == "object" && rg && rg.length == 4) { + el = Math.max(rg[3], el); + el = Math.min(rg[1] - target.offsetWidth, el); + et = Math.max(rg[0], et); + et = Math.min(rg[2] - target.offsetHeight, et); + } + target.style.top = et + "px"; + target.style.left = el + "px"; + + if((lastLeft !== el || lastTop !== et) && (lastLeft !== null || lastTop !== null) ){ + if(isFunction(op.ondrag)){ + op.ondrag(target, op); + } + } + lastLeft = el; + lastTop = et; + } + + // 对document.body.onselectstart事件进行监听,避免拖曳时文字被选中 + function unselect(e) { + return baidu.event.preventDefault(e, false); + } +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/setStyle.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/18 + */ + + + + + + +/** + * 设置目标元素的style样式值 + * @name baidu.dom.setStyle + * @function + * @grammar baidu.dom.setStyle(element, key, value) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} key 要设置的样式名 + * @param {string} value 要设置的样式值 + * @remark + * + 为了精简代码,本模块默认不对任何浏览器返回值进行归一化处理(如使用getStyle时,不同浏览器下可能返回rgb颜色或hex颜色),也不会修复浏览器的bug和差异性(如设置IE的float属性叫styleFloat,firefox则是cssFloat)。
+baidu.dom._styleFixer和baidu.dom._styleFilter可以为本模块提供支持。
+其中_styleFilter能对颜色和px进行归一化处理,_styleFixer能对display,float,opacity,textOverflow的浏览器兼容性bug进行处理。 + + * @shortcut setStyle + * @meta standard + * @see baidu.dom.getStyle,baidu.dom.setStyles + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.setStyle = function (element, key, value) { + var dom = baidu.dom, fixer; + + // 放弃了对firefox 0.9的opacity的支持 + element = dom.g(element); + key = baidu.string.toCamelCase(key); + + if (fixer = dom._styleFilter) { + value = fixer.filter(key, value, 'set'); + } + + fixer = dom._styleFixer[key]; + (fixer && fixer.set) ? fixer.set(element, value) : (element.style[fixer || key] = value); + + return element; +}; + +// 声明快捷方法 +baidu.setStyle = baidu.dom.setStyle; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + */ + + + + + + + + + + + + + + +/** + * 让一个DOM元素可拖拽 + * @name baidu.dom.draggable + * @function + * @grammar baidu.dom.draggable(element[, options]) + * @param {string|HTMLElement} element 元素或者元素的ID. + * @param {Object} [options] 选项. + * @config {Array} [range] 限制drag的拖拽范围,数组中必须包含四个值,分别是上、右、下、左边缘相对上方或左方的像素距离。默认无限制. + * @config {Number} [interval] 拖曳行为的触发频度(时间:毫秒). + * @config {Boolean} [capture] 鼠标拖曳粘滞. + * @config {Object} [mouseEvent] 键名为clientX和clientY的object,若不设置此项,默认会获取当前鼠标位置. + * @config {Function} [onbeforedragstart] drag开始前触发(即鼠标按下时). + * @config {Function} [ondragstart] drag开始时触发. + * @config {Function} [ondrag] drag进行中触发. + * @config {Function} [ondragend] drag结束时触发. + * @config {HTMLElement} [handler] 用于拖拽的手柄,比如dialog的title. + * @config {Function} [toggle] 在每次ondrag的时候,会调用这个方法判断是否应该停止拖拽。如果此函数返回值为false,则停止拖拽. + * @version 1.2 + * @remark 要拖拽的元素必须事先设定样式的postion值,如果postion为absloute,并且没有设定top和left,拖拽开始时,无法取得元素的top和left值,这时会从[0,0]点开始拖拽
如果要拖拽的元素是static定位,会被改成relative定位方式。 + * @see baidu.dom.drag + * @return {Draggable Instance} 拖拽实例,包含cancel方法,可以停止拖拽. + */ + +baidu.dom.draggable = function(element, options) { + options = baidu.object.extend({toggle: function() {return true}}, options || {}); + options.autoStop = true; + element = baidu.dom.g(element); + options.handler = options.handler || element; + var manager, + events = ['ondragstart', 'ondrag', 'ondragend'], + i = events.length - 1, + eventName, + dragSingle, + draggableSingle = { + dispose: function() { + dragSingle && dragSingle.stop(); + baidu.event.un(options.handler, 'onmousedown', handlerMouseDown); + baidu.lang.Class.prototype.dispose.call(draggableSingle); + } + }, + me = this; + + //如果存在ddManager, 将事件转发到ddManager中 + if (manager = baidu.dom.ddManager) { + for (; i >= 0; i--) { + eventName = events[i]; + options[eventName] = (function(eventName) { + var fn = options[eventName]; + return function() { + baidu.lang.isFunction(fn) && fn.apply(me, arguments); + manager.dispatchEvent(eventName, {DOM: element}); + } + })(eventName); + } + } + + + // 拖曳只针对有 position 定位的元素 + if (element) { + function handlerMouseDown(e) { + var event = options.mouseEvent = window.event || e; + if (event.button > 1 //只支持鼠标左键拖拽; 左键代码: IE为1,W3C为0 + // 可以通过配置项里的这个开关函数暂停或启用拖曳功能 + || (baidu.lang.isFunction(options.toggle) && !options.toggle())) { + return; + } + if (baidu.dom.getStyle(element, 'position') == 'static') { + baidu.dom.setStyle(element, 'position', 'relative'); + } + if (baidu.lang.isFunction(options.onbeforedragstart)) { + options.onbeforedragstart(element); + } + dragSingle = baidu.dom.drag(element, options); + draggableSingle.stop = dragSingle.stop; + draggableSingle.update = dragSingle.update; + //防止ff下出现禁止拖拽的图标 + baidu.event.preventDefault(event); + } + + // 对拖曳的扳机元素监听 onmousedown 事件,以便进行拖曳行为 + baidu.event.on(options.handler, 'onmousedown', handlerMouseDown); + } + return { + cancel: function() { + draggableSingle.dispose(); + } + }; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/intersect.js + * author: allstar + * version: 1.1.0 + * date: 2009/12/02 + */ + + + + +/** + * 检查两个元素是否相交 + * @name baidu.dom.intersect + * @function + * @grammar baidu.dom.intersect(element1, element2) + * @param {HTMLElement|string} element1 要检查的元素或元素的id + * @param {HTMLElement|string} element2 要检查的元素或元素的id + * @see baidu.dom.contains + * + * @returns {boolean} 两个元素是否相交的检查结果 + */ +baidu.dom.intersect = function (element1, element2) { + var g = baidu.dom.g, + getPosition = baidu.dom.getPosition, + max = Math.max, + min = Math.min; + + element1 = g(element1); + element2 = g(element2); + + var pos1 = getPosition(element1), + pos2 = getPosition(element2); + + return max(pos1.left, pos2.left) <= min(pos1.left + element1.offsetWidth, pos2.left + element2.offsetWidth) + && max(pos1.top, pos2.top) <= min(pos1.top + element1.offsetHeight, pos2.top + element2.offsetHeight); +}; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * path: baidu/dom/droppable.js + * author: rocy + * version: 1.4.0 + * date: 2010/10/14 + */ + + + + + + + + +//TODO: 添加对 accept, hoverclass 等参数的支持. +/** + * 让一个DOM元素可以容纳被拖拽的DOM元素 + * @name baidu.dom.droppable + * @function + * @grammar baidu.dom.droppable(element[, options]) + * @param {HTMLElement|string} element 容器元素或者容器元素的ID + * @param {Object} [options] 选项,拖拽元素对于容器元素的事件 + + * @config {Function} [ondrop] 当元素放到容器元素内部触发 + * @config {Function} [ondropover] 当元素在容器元素上方时触发 + * @config {Function} [ondropout] 当元素移除容器元素时触发 + * @version 1.3 + * @remark + * + 需要将元素和容器元素的定位都设置为absolute + + * @see baidu.dom.droppable + * + * @returns {Function} cancel取消拖拽 + */ +baidu.dom.droppable = function(element, options){ + options = options || {}; + var manager = baidu.dom.ddManager, + target = baidu.dom.g(element), + guid = baidu.lang.guid(), + //拖拽进行时判断 + _dragging = function(event){ + var _targetsDroppingOver = manager._targetsDroppingOver, + eventData = {trigger:event.DOM,reciever: target}; + //判断被拖拽元素和容器是否相撞 + if(baidu.dom.intersect(target, event.DOM)){ + //进入容器区域 + if(! _targetsDroppingOver[guid]){ + //初次进入 + (typeof options.ondropover == 'function') && options.ondropover.call(target,eventData); + manager.dispatchEvent("ondropover", eventData); + _targetsDroppingOver[guid] = true; + } + } else { + //出了容器区域 + if(_targetsDroppingOver[guid]){ + (typeof options.ondropout == 'function') && options.ondropout.call(target,eventData); + manager.dispatchEvent("ondropout", eventData); + } + delete _targetsDroppingOver[guid]; + } + }, + //拖拽结束时判断 + _dragend = function(event){ + var eventData = {trigger:event.DOM,reciever: target}; + if(baidu.dom.intersect(target, event.DOM)){ + typeof options.ondrop == 'function' && options.ondrop.call(target, eventData); + manager.dispatchEvent("ondrop", eventData); + } + delete manager._targetsDroppingOver[guid]; + }; + //事件注册,return object提供事件解除 + manager.addEventListener("ondrag", _dragging); + manager.addEventListener("ondragend", _dragend); + return { + cancel : function(){ + manager.removeEventListener("ondrag", _dragging); + manager.removeEventListener("ondragend",_dragend); + } + }; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/empty.js + * author: berg + * version: 1.0 + * date: 2010-07-06 + */ + +/** + * 删除一个节点下面的所有子节点。 + * @name baidu.dom.empty + * @function + * @grammar baidu.dom.empty(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @version 1.3 + * + * @returns {HTMLElement} 目标元素 + + */ + + + +baidu.dom.empty = function (element) { + element = baidu.dom.g(element); + + while(element.firstChild){ + element.removeChild(element.firstChild); + } + //todo:删除元素上绑定的事件等? + + return element; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/first.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/11/18 + */ + + + +/** + * 获取目标元素的第一个元素节点 + * @name baidu.dom.first + * @function + * @grammar baidu.dom.first(element) + * @param {HTMLElement|String} element 目标元素或目标元素的id + * @see baidu.dom.last,baidu.dom.prev,baidu.dom.next + * @meta standard + * @returns {HTMLElement|null} 目标元素的第一个元素节点,查找不到时返回null + */ +baidu.dom.first = function (element) { + return baidu.dom._matchNode(element, 'nextSibling', 'firstChild'); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/getAncestorBy.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 获取目标元素符合条件的最近的祖先元素 + * @name baidu.dom.getAncestorBy + * @function + * @grammar baidu.dom.getAncestorBy(element, method) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {Function} method 判断祖先元素条件的函数,function (element) + * @see baidu.dom.getAncestorByTag,baidu.dom.getAncestorByClass + * + * @returns {HTMLElement|null} 符合条件的最近的祖先元素,查找不到时返回null + */ +baidu.dom.getAncestorBy = function (element, method) { + element = baidu.dom.g(element); + + while ((element = element.parentNode) && element.nodeType == 1) { + if (method(element)) { + return element; + } + } + + return null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/getAncestorByClass.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + + +/** + * 获取目标元素指定元素className最近的祖先元素 + * @name baidu.dom.getAncestorByClass + * @function + * @grammar baidu.dom.getAncestorByClass(element, className) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} className 祖先元素的class,只支持单个class + * @remark 使用者应保证提供的className合法性,不应包含不合法字符,className合法字符参考:http://www.w3.org/TR/CSS2/syndata.html。 + * @see baidu.dom.getAncestorBy,baidu.dom.getAncestorByTag + * + * @returns {HTMLElement|null} 指定元素className最近的祖先元素,查找不到时返回null + */ +baidu.dom.getAncestorByClass = function (element, className) { + element = baidu.dom.g(element); + className = new RegExp("(^|\\s)" + baidu.string.trim(className) + "(\\s|\x24)"); + + while ((element = element.parentNode) && element.nodeType == 1) { + if (className.test(element.className)) { + return element; + } + } + + return null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/getAncestorByTag.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 获取目标元素指定标签的最近的祖先元素 + * @name baidu.dom.getAncestorByTag + * @function + * @grammar baidu.dom.getAncestorByTag(element, tagName) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} tagName 祖先元素的标签名 + * @see baidu.dom.getAncestorBy,baidu.dom.getAncestorByClass + * + * @returns {HTMLElement|null} 指定标签的最近的祖先元素,查找不到时返回null + */ +baidu.dom.getAncestorByTag = function (element, tagName) { + element = baidu.dom.g(element); + tagName = tagName.toUpperCase(); + + while ((element = element.parentNode) && element.nodeType == 1) { + if (element.tagName == tagName) { + return element; + } + } + + return null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/getAttr.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + + +/** + * 获取目标元素的属性值 + * @name baidu.dom.getAttr + * @function + * @grammar baidu.dom.getAttr(element, key) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} key 要获取的attribute键名 + * @shortcut getAttr + * @meta standard + * @see baidu.dom.setAttr,baidu.dom.setAttrs + * + * @returns {string|null} 目标元素的attribute值,获取不到时返回null + */ +baidu.dom.getAttr = function (element, key) { + element = baidu.dom.g(element); + + if ('style' == key){ + return element.style.cssText; + } + + key = baidu.dom._NAME_ATTRS[key] || key; + return element.getAttribute(key); +}; + +// 声明快捷方法 +baidu.getAttr = baidu.dom.getAttr; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All right reserved. + * + * path: baidu/dom/getParent.js + * author: berg + * version: 1.0.0 + * date: 2010/12/02 + */ + + + +/** + * 获得元素的父节点 + * @name baidu.dom.getParent + * @function + * @grammar baidu.dom.getParent(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @return {HTMLElement|null} 父元素,如果找不到父元素,返回null + */ +baidu.dom.getParent = function (element) { + element = baidu.dom._g(element); + //parentElement在IE下准确,parentNode在ie下可能不准确 + return element.parentElement || element.parentNode || null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/getText.js + * author: berg + * version: 1.0 + * date: 2010/07/16 + */ + + + +/** + * 获得元素中的文本内容。 + * @name baidu.dom.getText + * @function + * @grammar baidu.dom.getText(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @version 1.3 + * + * @returns {String} 元素中文本的内容 + */ +baidu.dom.getText = function (element) { + var ret = "", childs, i=0, l; + + element = baidu._g(element); + + // text 和 CDATA 节点,取nodeValue + if ( element.nodeType === 3 || element.nodeType === 4 ) { + ret += element.nodeValue; + } else if ( element.nodeType !== 8 ) {// 8 是 comment Node + childs = element.childNodes; + for(l = childs.length; i < l; i++){ + ret += baidu.dom.getText(childs[i]); + } + } + + return ret; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/getWindow.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + + +/** + * 获取目标元素所属的window对象 + * @name baidu.dom.getWindow + * @function + * @grammar baidu.dom.getWindow(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @see baidu.dom.getDocument + * + * @returns {window} 目标元素所属的window对象 + */ +baidu.dom.getWindow = function (element) { + element = baidu.dom.g(element); + var doc = baidu.dom.getDocument(element); + + // 没有考虑版本低于safari2的情况 + // @see goog/dom/dom.js#goog.dom.DomHelper.prototype.getWindow + return doc.parentWindow || doc.defaultView || null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/hasAttr.js + * author: berg + * version: 1.0 + * date: 2010/07/16 + */ + + + +/** + * 查询一个元素是否包含指定的属性 + * @name baidu.dom.hasAttr + * @function + * @grammar baidu.dom.hasAttr(element, name) + * @param {DOMElement|string} element DOM元素或元素的id + * @param {string} name 要查找的属性名 + * @version 1.3 + * + * @returns {Boolean} 是否包含此属性 + */ + +baidu.dom.hasAttr = function (element, name){ + element = baidu.g(element); + var attr = element.attributes.getNamedItem(name); + return !!( attr && attr.specified ); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/hasClass.js + * author: berg + * version: 1.0 + * date: 2010-07-06 + */ + + + + + + +/** + * 判断元素是否拥有指定的className + * @name baidu.dom.hasClass + * @function + * @grammar baidu.dom.hasClass(element, className) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} className 要判断的className,可以是用空格拼接的多个className + * @version 1.2 + * @remark + * 对于参数className,支持空格分隔的多个className + * @see baidu.dom.addClass, baidu.dom.removeClass + * @meta standard + * @returns {Boolean} 是否拥有指定的className,如果要查询的classname有一个或多个不在元素的className中,返回false + */ +baidu.dom.hasClass = function (element, className) { + element = baidu.dom.g(element); + var classArray = baidu.string.trim(className).split(/\s+/), + len = classArray.length; + + className = element.className.split(/\s+/).join(" "); + + while (len--) { + if(!(new RegExp("(^| )" + classArray[len] + "( |\x24)")).test(className)){ + return false; + } + } + return true; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/hide.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 隐藏目标元素 + * @name baidu.dom.hide + * @function + * @grammar baidu.dom.hide(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @shortcut hide + * @meta standard + * @see baidu.dom.show,baidu.dom.toggle + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.hide = function (element) { + element = baidu.dom.g(element); + element.style.display = "none"; + + return element; +}; + +// 声明快捷方法 +baidu.hide = baidu.dom.hide; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/insertAfter.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + +/** + * 将目标元素添加到基准元素之后 + * @name baidu.dom.insertAfter + * @function + * @grammar baidu.dom.insertAfter(newElement, existElement) + * @param {HTMLElement|string} newElement 被添加的目标元素 + * @param {HTMLElement|string} existElement 基准元素 + * @meta standard + * @see baidu.dom.insertBefore + * + * @returns {HTMLElement} 被添加的目标元素 + */ +baidu.dom.insertAfter = function (newElement, existElement) { + var g, existParent; + g = baidu.dom._g; + newElement = g(newElement); + existElement = g(existElement); + existParent = existElement.parentNode; + + if (existParent) { + existParent.insertBefore(newElement, existElement.nextSibling); + } + return newElement; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/insertBefore.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 将目标元素添加到基准元素之前 + * @name baidu.dom.insertBefore + * @function + * @grammar baidu.dom.insertBefore(newElement, existElement) + * @param {HTMLElement|string} newElement 被添加的目标元素 + * @param {HTMLElement|string} existElement 基准元素 + * @meta standard + * @see baidu.dom.insertAfter + * + * @returns {HTMLElement} 被添加的目标元素 + */ +baidu.dom.insertBefore = function (newElement, existElement) { + var g, existParent; + g = baidu.dom._g; + newElement = g(newElement); + existElement = g(existElement); + existParent = existElement.parentNode; + + if (existParent) { + existParent.insertBefore(newElement, existElement); + } + + return newElement; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/insertHTML.js + * author: allstar, erik, berg,wenyuxiang,lixiaopeng + * version: 1.1.2 + * date: 2010-07-13 + */ + + + +/** + * 在目标元素的指定位置插入HTML代码 + * @name baidu.dom.insertHTML + * @function + * @grammar baidu.dom.insertHTML(element, position, html) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} position 插入html的位置信息,取值为beforeBegin,afterBegin,beforeEnd,afterEnd + * @param {string} html 要插入的html + * @remark + * + * 对于position参数,大小写不敏感
+ * 参数的意思:beforeBegin<span>afterBegin this is span! beforeEnd</span> afterEnd
+ * 此外,如果使用本函数插入带有script标签的HTML字符串,script标签对应的脚本将不会被执行。 + * + * @shortcut insertHTML + * @meta standard + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.insertHTML = function (element, position, html) { + element = baidu.dom.g(element); + var range,begin; + + if (element.insertAdjacentHTML) { + element.insertAdjacentHTML(position, html); + } else { + // 这里不做"undefined" != typeof(HTMLElement) && !window.opera判断,其它浏览器将出错?! + // 但是其实做了判断,其它浏览器下等于这个函数就不能执行了 + range = element.ownerDocument.createRange(); + // FF下range的位置设置错误可能导致创建出来的fragment在插入dom树之后html结构乱掉 + // 改用range.insertNode来插入html, by wenyuxiang @ 2010-12-14. + position = position.toUpperCase(); + if (position == 'AFTERBEGIN' || position == 'BEFOREEND') { + range.selectNodeContents(element); + range.collapse(position == 'AFTERBEGIN'); + } else { + begin = position == 'BEFOREBEGIN'; + range[begin ? 'setStartBefore' : 'setEndAfter'](element); + range.collapse(begin); + } + range.insertNode(range.createContextualFragment(html)); + } + return element; +}; + +baidu.insertHTML = baidu.dom.insertHTML; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/last.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/18 + */ + + + +/** + * 获取目标元素的最后一个元素节点 + * @name baidu.dom.last + * @function + * @grammar baidu.dom.last(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @see baidu.dom.first,baidu.dom.prev,baidu.dom.next + * + * @returns {HTMLElement|null} 目标元素的最后一个元素节点,查找不到时返回null + */ +baidu.dom.last = function (element) { + return baidu.dom._matchNode(element, 'previousSibling', 'lastChild'); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/next.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/18 + */ + + + +/** + * 获取目标元素的下一个兄弟元素节点 + * @name baidu.dom.next + * @function + * @grammar baidu.dom.next(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @see baidu.dom.first,baidu.dom.last,baidu.dom.prev + * @meta standard + * @returns {HTMLElement|null} 目标元素的下一个兄弟元素节点,查找不到时返回null + */ +baidu.dom.next = function (element) { + return baidu.dom._matchNode(element, 'nextSibling', 'nextSibling'); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/prev.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/18 + */ + + + +/** + * 获取目标元素的上一个兄弟元素节点 + * @name baidu.dom.prev + * @function + * @grammar baidu.dom.prev(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @see baidu.dom.first,baidu.dom.last,baidu.dom.next + * + * + * @returns {HTMLElement|null} 目标元素的上一个兄弟元素节点,查找不到时返回null + */ +baidu.dom.prev = function (element) { + return baidu.dom._matchNode(element, 'previousSibling', 'previousSibling'); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/escapeReg.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 将目标字符串中可能会影响正则表达式构造的字符串进行转义。 + * @name baidu.string.escapeReg + * @function + * @grammar baidu.string.escapeReg(source) + * @param {string} source 目标字符串 + * @remark + * 给以下字符前加上“\”进行转义:.*+?^=!:${}()|[]/\ + * @meta standard + * + * @returns {string} 转义后的字符串 + */ +baidu.string.escapeReg = function (source) { + return String(source) + .replace(new RegExp("([.*+?^=!:\x24{}()|[\\]\/\\\\])", "g"), '\\\x241'); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/q.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + + + +/** + * 通过className获取元素 + * @name baidu.dom.q + * @function + * @grammar baidu.dom.q(className[, element, tagName]) + * @param {string} className 元素的class,只能指定单一的class,如果为空字符串或者纯空白的字符串,返回空数组。 + * @param {string|HTMLElement} [element] 开始搜索的元素,默认是document。 + * @param {string} [tagName] 要获取元素的标签名,如果没有值或者值为空字符串或者纯空白的字符串,表示不限制标签名。 + * @remark 不保证返回数组中DOM节点的顺序和文档中DOM节点的顺序一致。 + * @shortcut q,T.Q + * @meta standard + * @see baidu.dom.g + * + * @returns {Array} 获取的元素集合,查找不到或className参数错误时返回空数组. + */ +baidu.dom.q = function (className, element, tagName) { + var result = [], + trim = baidu.string.trim, + len, i, elements, node; + + if (!(className = trim(className))) { + return result; + } + + // 初始化element参数 + if ('undefined' == typeof element) { + element = document; + } else { + element = baidu.dom.g(element); + if (!element) { + return result; + } + } + + // 初始化tagName参数 + tagName && (tagName = trim(tagName).toUpperCase()); + + // 查询元素 + if (element.getElementsByClassName) { + elements = element.getElementsByClassName(className); + len = elements.length; + for (i = 0; i < len; i++) { + node = elements[i]; + if (tagName && node.tagName != tagName) { + continue; + } + result[result.length] = node; + } + } else { + className = new RegExp( + "(^|\\s)" + + baidu.string.escapeReg(className) + + "(\\s|\x24)"); + elements = tagName + ? element.getElementsByTagName(tagName) + : (element.all || element.getElementsByTagName("*")); + len = elements.length; + for (i = 0; i < len; i++) { + node = elements[i]; + className.test(node.className) && (result[result.length] = node); + } + } + + return result; +}; + +// 声明快捷方法 +baidu.q = baidu.Q = baidu.dom.q; +/* + * Tangram + * + * code from sizzle + * add by berg + * + * version: 1.0.0 + * date: 20100525 + */ + + + + +/** + * 提供css选择器功能 选择器支持所有的css3选择器 ,核心实现采用sizzle。baidu.dom.query.matches 请参考sizzle 文档 + * @name baidu.dom.query + * @function + * @grammar baidu.dom.query(selector[, context, results]) + * @param {String} selector 选择器定义 + * @param {HTMLElement | DOMDocument} [context] 查找的上下文 + * @param {Array} [results] 查找的结果会追加到这个数组中 + * @version 1.2 + * @remark + * + 选择器支持所有的css3选择器 ,核心实现采用sizzle。可参考sizzle 文档 + + * @see baidu.dom.g, baidu.dom.q, + * + * @returns {Array} 包含所有筛选出的DOM元素的数组 + */ + +/*! + * Sizzle CSS Selector Engine - v1.0 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var match, + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace(/\\/g, ""); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = context.getElementsByTagName( "*" ); + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + var found, item, + filter = Expr.filter[ type ], + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !/\W/.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !/\W/.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + return context.getElementsByTagName( match[1] ); + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace(/\\/g, "") + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace(/\\/g, ""); + }, + + TAG: function( match, curLoop ) { + return match[1].toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1].replace(/\\/g, ""); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + elem.parentNode.selectedIndex; + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + return "text" === elem.type; + }, + radio: function( elem ) { + return "radio" === elem.type; + }, + + checkbox: function( elem ) { + return "checkbox" === elem.type; + }, + + file: function( elem ) { + return "file" === elem.type; + }, + password: function( elem ) { + return "password" === elem.type; + }, + + submit: function( elem ) { + return "submit" === elem.type; + }, + + image: function( elem ) { + return "image" === elem.type; + }, + + reset: function( elem ) { + return "reset" === elem.type; + }, + + button: function( elem ) { + return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + var first = match[2], + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // If the nodes are siblings (or identical) we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Utility function for retreiving the text value of an array of DOM nodes +Sizzle.getText = function( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += Sizzle.getText( elem.childNodes ); + } + } + + return ret; +}; + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + + //2010/12/28 berg: + //add try-catch + //in IE 5.5, createComment cause a JS error + try{ + div.appendChild( document.createComment("") ); + }catch(e){} + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Make sure that attribute selectors are quoted + query = query.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + if ( context.nodeType === 9 ) { + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + context.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector, + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + if ( matches ) { + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + return matches.call( node, expr ); + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE + +baidu.dom.query = Sizzle; + +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + + + +/** + * 使函数在页面dom节点加载完毕时调用 + * @author allstar + * @name baidu.dom.ready + * @function + * @grammar baidu.dom.ready(callback) + * @param {Function} callback 页面加载完毕时调用的函数. + * @remark + * 如果有条件将js放在页面最底部, 也能达到同样效果,不必使用该方法。 + * @meta standard + */ +(function() { + + var ready = baidu.dom.ready = function() { + var readyBound = false, + readyList = [], + DOMContentLoaded; + + if (document.addEventListener) { + DOMContentLoaded = function() { + document.removeEventListener('DOMContentLoaded', DOMContentLoaded, false); + ready(); + }; + + } else if (document.attachEvent) { + DOMContentLoaded = function() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', DOMContentLoaded); + ready(); + } + }; + } + + function ready() { + if (!ready.isReady) { + ready.isReady = true; + for (var i = 0, j = readyList.length; i < j; i++) { + readyList[i](); + } + } + } + + function doScrollCheck(){ + try { + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + ready(); + } + + function bindReady() { + if (readyBound) { + return; + } + readyBound = true; + + if (document.addEventListener) { + + document.addEventListener('DOMContentLoaded', DOMContentLoaded, false); + window.addEventListener('load', ready, false); + + } else if (document.attachEvent) { + + document.attachEvent('onreadystatechange', DOMContentLoaded); + window.attachEvent('onload', ready); + + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch (e) {} + + if (document.documentElement.doScroll && toplevel) { + doScrollCheck(); + } + } + } + bindReady(); + + return function(callback) { + ready.isReady ? callback() : readyList.push(callback); + }; + }(); + + ready.isReady = false; +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/remove.js + * author: allstar,berg + * version: 1.1.0 + * date: 2009/11/17 + */ + + + + +/** + * 从DOM树上移除目标元素 + * @name baidu.dom.remove + * @function + * @grammar baidu.dom.remove(element) + * @param {HTMLElement|string} element 需要移除的元素或元素的id + * @remark + * 注意:对于移除的dom元素,IE下会释放该元素的空间,继续使用该元素的引用进行操作将会引发不可预料的问题。 + * @meta standard + */ +baidu.dom.remove = function (element) { + element = baidu.dom._g(element); + var tmpEl = element.parentNode; + //去掉了对ie下的特殊处理:创建一个div,appendChild,然后div.innerHTML = "" + tmpEl && tmpEl.removeChild(element); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/removeClass.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + + + +/** + * 移除目标元素的className + * @name baidu.dom.removeClass + * @function + * @grammar baidu.dom.removeClass(element, className) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} className 要移除的className,允许同时移除多个class,中间使用空白符分隔 + * @remark + * 使用者应保证提供的className合法性,不应包含不合法字符,className合法字符参考:http://www.w3.org/TR/CSS2/syndata.html。 + * @shortcut removeClass + * @meta standard + * @see baidu.dom.addClass + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.removeClass = function (element, className) { + element = baidu.dom.g(element); + + var oldClasses = element.className.split(/\s+/), + newClasses = className.split(/\s+/), + lenOld, + lenDel = newClasses.length, + j, + i = 0; + //考虑到同时删除多个className的应用场景概率较低,故放弃进一步性能优化 + // by rocy @1.3.4 + for (; i < lenDel; ++i){ + for(j = 0, lenOld = oldClasses.length; j < lenOld; ++j){ + if(oldClasses[j] == newClasses[i]){ + oldClasses.splice(j, 1); + break; + } + } + } + element.className = oldClasses.join(' '); + return element; +}; + +// 声明快捷方法 +baidu.removeClass = baidu.dom.removeClass; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * path: baidu/dom/removeStyle.js + * author: wenyuxiang, berg + * version: 1.0.1 + * date: 2010/9/10 + */ + + + + +/** + * 删除元素的某个样式 + * @name baidu.dom.removeStyle + * @function + * @grammar baidu.dom.removeStyle(element, styleName) + * @param {HTMLElement|String} element 需要删除样式的元素或者元素id + * @param {string} styleName 需要删除的样式名字 + * @version 1.3 + * @see baidu.dom.setStyle + * + * @returns {HTMLElement} 目标元素 + */ + +// todo: 1. 只支持现代浏览器,有一些老浏览器可能不支持; 2. 有部分属性无法被正常移除 +baidu.dom.removeStyle = function (){ + var ele = document.createElement("DIV"), + fn, + _g = baidu.dom._g; + + if (ele.style.removeProperty) {// W3C, (gecko, opera, webkit) + fn = function (el, st){ + el = _g(el); + el.style.removeProperty(st); + return el; + }; + } else if (ele.style.removeAttribute) { // IE + fn = function (el, st){ + el = _g(el); + el.style.removeAttribute(baidu.string.toCamelCase(st)); + return el; + }; + } + ele = null; + return fn; +}(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/object/each.js + * author: berg + * version: 1.1.1 + * date: 2010-04-19 + */ + + + +/** + * 遍历Object中所有元素,1.1.1增加 + * @name baidu.object.each + * @function + * @grammar baidu.object.each(source, iterator) + * @param {Object} source 需要遍历的Object + * @param {Function} iterator 对每个Object元素进行调用的函数,function (item, key) + * @version 1.1.1 + * + * @returns {Object} 遍历的Object + */ +baidu.object.each = function (source, iterator) { + var returnValue, key, item; + if ('function' == typeof iterator) { + for (key in source) { + if (source.hasOwnProperty(key)) { + item = source[key]; + returnValue = iterator.call(source, item, key); + + if (returnValue === false) { + break; + } + } + } + } + return source; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/setStyles.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/18 + */ + + + + +/** + * 批量设置目标元素的style样式值 + * @name baidu.dom.setStyles + * @function + * @grammar baidu.dom.setStyles(element, styles) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {Object} styles 要设置的样式集合 + * @shortcut setStyles + * @meta standard + * @see baidu.dom.setStyle,baidu.dom.getStyle + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.setStyles = function (element, styles) { + element = baidu.dom.g(element); + + for (var key in styles) { + baidu.dom.setStyle(element, key, styles[key]); + } + + return element; +}; + +// 声明快捷方法 +baidu.setStyles = baidu.dom.setStyles; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 判断目标参数是否number类型或Number对象 + * @name baidu.lang.isNumber + * @function + * @grammar baidu.lang.isNumber(source) + * @param {Any} source 目标参数 + * @meta standard + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + * @remark 用本函数判断NaN会返回false,尽管在Javascript中是Number类型。 + */ +baidu.lang.isNumber = function (source) { + return '[object Number]' == Object.prototype.toString.call(source) && isFinite(source); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/getTarget.js + * author: erik + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 获取事件的触发元素 + * @name baidu.event.getTarget + * @function + * @grammar baidu.event.getTarget(event) + * @param {Event} event 事件对象 + * @meta standard + * @returns {HTMLElement} 事件的触发元素 + */ + +baidu.event.getTarget = function (event) { + return event.target || event.srcElement; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + + + + + + +/** + * 按照border-box模型设置元素的height和width值。只支持元素的padding/border/height/width使用同一种计量单位的情况。
不支持:
1. 非数字值(medium)
2. em/px在不同的属性中混用 + * @name baidu.dom.setBorderBoxSize + * @author berg + * @function + * @grammar baidu.dom.setBorderBoxSize(element, size) + * @param {HTMLElement|string} element 元素或DOM元素的id + * @param {object} size 包含height和width键名的对象 + * + * @see baidu.dom.setBorderBoxWidth, baidu.dom.setBorderBoxHeight + * + * @return {HTMLElement} 设置好的元素 + */ +baidu.dom.setBorderBoxSize= function (element, size) { + var result = {}; + size.width && (result.width = parseFloat(size.width)); + size.height && (result.height = parseFloat(size.height)); + + function getNumericalStyle(element, name){ + return parseFloat(baidu.getStyle(element, name)) || 0; + } + + if(baidu.browser.isStrict){ + if(size.width){ + result.width = parseFloat(size.width) - + getNumericalStyle(element, 'paddingLeft') - + getNumericalStyle(element, 'paddingRight') - + getNumericalStyle(element, 'borderLeftWidth') - + getNumericalStyle(element, 'borderRightWidth'); + result.width < 0 && (result.width = 0); + } + if(size.height){ + result.height = parseFloat(size.height) - + getNumericalStyle(element, 'paddingTop') - + getNumericalStyle(element, 'paddingBottom') - + getNumericalStyle(element, 'borderTopWidth') - + getNumericalStyle(element, 'borderBottomWidth'); + result.height < 0 && (result.height = 0); + } + } + return baidu.dom.setStyles(element, result); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + +/** + * 按照border-box模型设置元素的height值 + * + * @author berg + * @name baidu.dom.setBorderBoxHeight + * @function + * @grammar baidu.dom.setBorderBoxHeight(element, height) + * + * @param {HTMLElement|string} element DOM元素或元素的id + * @param {number|string} height 要设置的height + * + * @return {HTMLElement} 设置好的元素 + * @see baidu.dom.setBorderBoxWidth, baidu.dom.setBorderBoxSize + * @shortcut dom.setOuterHeight + */ +baidu.dom.setOuterHeight = +baidu.dom.setBorderBoxHeight = function (element, height) { + return baidu.dom.setBorderBoxSize(element, {height : height}); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + +/** + * 按照border-box模型设置元素的width值 + * + * @author berg + * @name baidu.dom.setBorderBoxWidth + * @function + * @grammar baidu.dom.setBorderBoxWidth(element, width) + * + * @param {HTMLElement|string} element DOM元素或元素的id + * @param {number|string} width 要设置的width + * + * @return {HTMLElement} 设置好的元素 + * @see baidu.dom.setBorderBoxHeight, baidu.dom.setBorderBoxSize + * @shortcut dom.setOuterWidth + */ +baidu.dom.setOuterWidth = +baidu.dom.setBorderBoxWidth = function (element, width) { + return baidu.dom.setBorderBoxSize(element, {width : width}); +}; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + */ + + + + + + + + + + + + + + + + + + + + + + +/** + * 绘制可以根据鼠标行为改变HTMLElement大小的resize handle + * @name baidu.dom.resizable + * @function + * @grammar baidu.dom.resizable(element[, options]) + * @param {HTMLElement|string} element 需要改变大小的元素或者元素的id. + * @param {Object} [options] resizable参数配置 + * @config {Array} [direction] 可以改变的方向[e,se,s,ws,w,wn,n,en] + * @config {Function} [onresizestart] 开始改变大小时触发 + * @config {Function} [onresizeend] 大小改变结束时触发 + * @config {Function} [onresize] 大小改变后时触发 + * @config {Number|String} [maxWidth] 可改变的最大宽度 + * @config {Number|String} [maxHeight] 可改变的最大高度 + * @config {Number|String} [minWidth] 可改变的最小宽度 + * @config {Number|String} [minHeight] 可改变的最小高度 + * @config {String} [classPrefix] className 前缀 + * @config {Object} [directionHandlePosition] resizHandle的位置参数 + * @return {Object} {cancel:Function} cancel函数 + * @remark 需要将元素的定位设置为absolute + * @author lixiaopeng + * @version 1.3 + */ +baidu.dom.resizable = function(element,options) { + var target, + op, + resizeHandle = {}, + directionHandlePosition, + orgStyles = {}, + range, mozUserSelect, + orgCursor, + offsetParent, + currentEle, + handlePosition, + timer, + isCancel = false, + defaultOptions = { + direction: ['e', 's', 'se'], + minWidth: 16, + minHeight: 16, + classPrefix: 'tangram', + directionHandlePosition: {} + }; + + + if (!(target = baidu.dom.g(element)) && baidu.getStyle(target, 'position') == 'static') { + return false; + } + offsetParent = target.offsetParent; + var orgPosition = baidu.getStyle(target,'position'); + + /* + * 必要参数的扩展 + * resize handle以方向命名 + * 顺时针的顺序为 + * north northwest west southwest south southeast east northeast + */ + op = baidu.extend(defaultOptions, options); + + /* + * 必要参数转换 + */ + baidu.each(['minHeight', 'minWidth', 'maxHeight', 'maxWidth'], function(style) { + op[style] && (op[style] = parseFloat(op[style])); + }); + + /* + * {Array[Number]} rangeObject + * minWidth,maxWidth,minHeight,maxHeight + */ + range = [ + op.minWidth || 0, + op.maxWidth || Number.MAX_VALUE, + op.minHeight || 0, + op.maxHeight || Number.MAX_VALUE + ]; + + render(); + + /** + * 绘制resizable handle + */ + function render(){ + + //位置属性 + handlePosition = baidu.extend({ + 'e' : {'right': '-5px', 'top': '0px', 'width': '7px', 'height': target.offsetHeight}, + 's' : {'left': '0px', 'bottom': '-5px', 'height': '7px', 'width': target.offsetWidth}, + 'n' : {'left': '0px', 'top': '-5px', 'height': '7px', 'width': target.offsetWidth}, + 'w' : {'left': '-5px', 'top': '0px', 'height':target.offsetHeight , 'width': '7px'}, + 'se': {'right': '1px', 'bottom': '1px', 'height': '16px', 'width': '16px'}, + 'sw': {'left': '1px', 'bottom': '1px', 'height': '16px', 'width': '16px'}, + 'ne': {'right': '1px', 'top': '1px', 'height': '16px', 'width': '16px'}, + 'nw': {'left': '1px', 'top': '1px', 'height': '16px', 'width': '16px'} + },op.directionHandlePosition); + + //创建resizeHandle + baidu.each(op.direction, function(key) { + var className = op.classPrefix.split(' '); + className[0] = className[0] + '-resizable-' + key; + + var ele = baidu.dom.create('div', { + className: className.join(' ') + }), + styles = handlePosition[key]; + + styles['cursor'] = key + '-resize'; + styles['position'] = 'absolute'; + baidu.setStyles(ele, styles); + + ele.key = key; + ele.style.MozUserSelect = 'none'; + + target.appendChild(ele); + resizeHandle[key] = ele; + + baidu.on(ele, 'mousedown', start); + }); + + isCancel = false; + } + + /** + * cancel resizeHandle + * @public + * @return void + */ + function cancel(){ + currentEle && stop(); + baidu.object.each(resizeHandle,function(item){ + baidu.un(item,"mousedown",start); + baidu.dom.remove(item); + }); + isCancel = true; + } + + /** + * update resizable + * @public + * @param {Object} options + * @return null + */ + function update(options){ + if(!isCancel){ + op = baidu.extend(op,options || {}); + cancel(); + render(); + } + } + + /** + * resizeHandle相应mousedown事件的函数 + * @param {Event} e + * @return void + */ + function start(e){ + var ele = baidu.event.getTarget(e), + key = ele.key; + currentEle = ele; + + if (ele.setCapture) { + ele.setCapture(); + } else if (window.captureEvents) { + window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP); + } + + /* + * 给body设置相应的css属性 + * 添加事件监听 + */ + orgCursor = baidu.getStyle(document.body, 'cursor'); + baidu.setStyle(document.body, 'cursor', key + '-resize'); + baidu.on(document, 'mouseup',stop); + baidu.on(document.body, 'selectstart', unselect); + mozUserSelect = document.body.style.MozUserSelect; + document.body.style.MozUserSelect = 'none'; + + /* + * 获取鼠标坐标 + * 偏移量计算 + */ + var orgMousePosition = baidu.page.getMousePosition(); + orgStyles = _getOrgStyle(); + timer = setInterval(function(){ + resize(key,orgMousePosition); + }, 20); + + baidu.lang.isFunction(op.onresizestart) && op.onresizestart(); + baidu.event.preventDefault(e); + } + + /** + * 当鼠标按键抬起时终止对鼠标事件的监听 + * @private + * @return void + */ + function stop() { + if (currentEle.releaseCapture) { + currentEle.releaseCapture(); + } else if (window.releaseEvents) { + window.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP); + } + + /* + * 删除事件监听 + * 还原css属性设置 + */ + baidu.un(document, 'mouseup',stop); + baidu.un(document, 'selectstart', unselect); + document.body.style.MozUserSelect = mozUserSelect; + baidu.un(document.body, 'selectstart', unselect); + + clearInterval(timer); + baidu.setStyle(document.body, 'cursor',orgCursor); + currentEle = null; + + baidu.lang.isFunction(op.onresizeend) && op.onresizeend(); + } + + /** + * 根据鼠标移动的距离来绘制target + * @private + * @param {String} key handle的direction字符串 + * @param {Object} orgMousePosition 鼠标坐标{x,y} + * @return void + */ + function resize(key,orgMousePosition) { + var xy = baidu.page.getMousePosition(), + width = orgStyles['width'], + height = orgStyles['height'], + top = orgStyles['top'], + left = orgStyles['left'], + styles; + + if (key.indexOf('e') >= 0) { + width = Math.max(xy.x - orgMousePosition.x + orgStyles['width'], range[0]); + width = Math.min(width, range[1]); + }else if (key.indexOf('w') >= 0) { + width = Math.max(orgMousePosition.x - xy.x + orgStyles['width'], range[0]); + width = Math.min(width, range[1]); + left -= width - orgStyles['width']; + } + + if (key.indexOf('s') >= 0) { + height = Math.max(xy.y - orgMousePosition.y + orgStyles['height'], range[2]); + height = Math.min(height, range[3]); + }else if (key.indexOf('n') >= 0) { + height = Math.max(orgMousePosition.y - xy.y + orgStyles['height'], range[2]); + height = Math.min(height, range[3]); + top -= height - orgStyles['height']; + } + + styles = {'width': width, 'height': height, 'top': top, 'left': left}; + baidu.dom.setOuterHeight(target,height); + baidu.dom.setOuterWidth(target,width); + baidu.setStyles(target,{"top":top,"left":left}); + + resizeHandle['n'] && baidu.setStyle(resizeHandle['n'], 'width', width); + resizeHandle['s'] && baidu.setStyle(resizeHandle['s'], 'width', width); + resizeHandle['e'] && baidu.setStyle(resizeHandle['e'], 'height', height); + resizeHandle['w'] && baidu.setStyle(resizeHandle['w'], 'height', height); + + baidu.lang.isFunction(op.onresize) && op.onresize({current:styles,original:orgStyles}); + } + + /** + * 阻止文字被选中 + * @private + * @param {Event} e + * @return {Boolean} + */ + function unselect(e) { + return baidu.event.preventDefault(e, false); + } + + /** + * 获取target的原始宽高 + * @private + * @return {Object} {width,height,top,left} + */ + function _getOrgStyle() { + var offset_parent = baidu.dom.getPosition(target.offsetParent), + offset_target = baidu.dom.getPosition(target), + top, + left; + + if(orgPosition == "absolute"){ + top = offset_target.top - (target.offsetParent == document.body ? 0 : offset_parent.top); + left = offset_target.left - (target.offsetParent == document.body ? 0 :offset_parent.left); + }else{ + top = parseFloat(baidu.getStyle(target,"top")) || -parseFloat(baidu.getStyle(target,"bottom")) || 0; + left = parseFloat(baidu.getStyle(target,"left")) || -parseFloat(baidu.getStyle(target,"right")) || 0; + } + baidu.setStyles(target,{top:top,left:left}); + + return { + width:target.offsetWidth, + height:target.offsetHeight, + top:top, + left:left + }; + } + + return {cancel:cancel,update:update,enable:render}; +}; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/setPosition.js + * author: berg + * version: 1.0.0 + * date: 2010/12/14 + */ + + + + + + + + + +/** + * 设置目标元素的top和left值到用户指定的位置 + * + * @name baidu.dom.setPosition + * @function + * @grammar baidu.dom.setPosition(element, position) + * + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {object} position 位置对象 {top: {number}, left : {number}} + * + * @return {HTMLElement} 进行设置的元素 + */ +baidu.dom.setPosition = function (element, position) { + return baidu.dom.setStyles(element, { + left : position.left - (parseFloat(baidu.dom.getStyle(element, "margin-left")) || 0), + top : position.top - (parseFloat(baidu.dom.getStyle(element, "margin-top")) || 0) + }); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 显示目标元素,即将目标元素的display属性还原成默认值。默认值可能在stylesheet中定义,或者是继承了浏览器的默认样式值 + * @author allstar, berg + * @name baidu.dom.show + * @function + * @grammar baidu.dom.show(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @remark + * 注意1:如果在CSS中定义此元素的样式为display:none + * 在调用本函数以后,会将display属性仍然还原成none,元素仍然无法显示。 + * 注意2:如果这个元素的display属性被设置成inline + * (由element.style.display或者HTML中的style属性设置) + * 调用本方法将清除此inline属性,导致元素的display属性变成继承值 + * 因此,针对上面两种情况,建议使用dom.setStyle("display", "something") + * 来明确指定要设置的display属性值。 + * + * @shortcut show + * @meta standard + * @see baidu.dom.hide,baidu.dom.toggle + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.show = function (element) { + element = baidu.dom.g(element); + element.style.display = ""; + + return element; +}; + +// 声明快捷方法 +baidu.show = baidu.dom.show; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/toggle.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 改变目标元素的显示/隐藏状态 + * @name baidu.dom.toggle + * @function + * @grammar baidu.dom.toggle(element) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @meta standard + * @see baidu.dom.show,baidu.dom.hide + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.toggle = function (element) { + element = baidu.dom.g(element); + element.style.display = element.style.display == "none" ? "" : "none"; + + return element; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/dom/toggleClass.js + * author: berg + * version: 1.0 + * date: 2010-07-06 + */ + +/** + * 添加或者删除一个节点中的指定class,如果已经有就删除,否则添加 + * @name baidu.dom.toggleClass + * @function + * @grammar baidu.dom.toggleClass(element, className) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {String} className 指定的className。允许同时添加多个class,中间使用空白符分隔 + * @version 1.3 + * @remark + * + * 传入多个class时,只要其中有一个class不在当前元素中,则添加所有class,否则删除所有class。 + */ + + + + + +baidu.dom.toggleClass = function (element, className) { + if(baidu.dom.hasClass(element, className)){ + baidu.dom.removeClass(element, className); + }else{ + baidu.dom.addClass(element, className); + } +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/page/getViewHeight.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/20 + */ + + + +/** + * 获取页面视觉区域高度 + * @name baidu.page.getViewHeight + * @function + * @grammar baidu.page.getViewHeight() + * @see baidu.page.getViewWidth + * @meta standard + * @returns {number} 页面视觉区域高度 + */ +baidu.page.getViewHeight = function () { + var doc = document, + client = doc.compatMode == 'BackCompat' ? doc.body : doc.documentElement; + + return client.clientHeight; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/page/getViewWidth.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/20 + */ + + + +/** + * 获取页面视觉区域宽度 + * @name baidu.page.getViewWidth + * @function + * @grammar baidu.page.getViewWidth() + * @see baidu.page.getViewHeight + * + * @returns {number} 页面视觉区域宽度 + */ +baidu.page.getViewWidth = function () { + var doc = document, + client = doc.compatMode == 'BackCompat' ? doc.body : doc.documentElement; + + return client.clientWidth; +}; +/* + * Tangram + * Copyright 2010 Baidu Inc. All right reserved. + */ + + + + + + + + + + + + + + + + +/** + * 使目标元素拥有可进行与页面可见区域相对位置保持不变的移动的能力 + * @name baidu.dom.fixable + * @function + * @param {HTMLElement|String} element 目标元素或目标元素的id + * @param {Object} options 配置项 + * @config {String} [vertival] 取值[top|bottom] 默认值 top + * @config {Strgin} [horizontal] 取值[left|right] 默认值 left + * @config {Object} [offset] {x:String|Number, y:String|Number}} 横向与纵向的取值 + * @config {Boolean} [autofix] 是否自动进行fix,默认值为true + * @config {Function} [onrender] 当被渲染时候触发 + * @config {Function} [onupdate] 当位置被更新的时候触发 + * @config {Function} [onrelease] 当被释放的时候触发 + * @return {Object} 返回值一个对象,有三个方法:render、update、release + */ + +baidu.dom.fixable = function(element, options){ + + var target = baidu.g(element), + isUnderIE7 = baidu.browser.ie && baidu.browser.ie <= 7 ? true : false, + vertival = options.vertival || 'top', + horizontal = options.horizontal || 'left', + autofix = typeof options.autofix != 'undefined' ? options.autofix : true, + origPos,offset,isRender = false, + onrender = options.onrender || new Function(), + onupdate = options.onupdate || new Function(), + onrelease = options.onrelease || new Function(); + + if(!target) return; + + //获取target原始值 + origPos = _getOriginalStyle(); + //设置offset值 + offset = { + y: isUnderIE7 ? (origPos.position == "static" ? baidu.dom.getPosition(target).top : baidu.dom.getPosition(target).top - baidu.dom.getPosition(target.parentNode).top) : target.offsetTop, + x: isUnderIE7 ? (origPos.position == "static" ? baidu.dom.getPosition(target).left : baidu.dom.getPosition(target).left - baidu.dom.getPosition(target.parentNode).left) : target.offsetLeft + }; + baidu.extend(offset, options.offset || {}); + + autofix && render(); + + function _convert(){ + return { + top : vertival == "top" ? offset.y : baidu.page.getViewHeight() - offset.y - origPos.height, + left: horizontal == "left" ? offset.x : baidu.page.getViewWidth() - offset.x - origPos.width + }; + } + + /** + * + */ + function _handleOnMove(){ + var p = _convert(); + + target.style.setExpression("left","eval((document.body.scrollLeft || document.documentElement.scrollLeft) + " + p.left + ") + 'px'"); + target.style.setExpression("top", "eval((document.body.scrollTop || document.documentElement.scrollTop) + " + p.top + ") + 'px'"); + } + + /** + * 返回target原始position值 + * @return {Object} + */ + function _getOriginalStyle(){ + var result = { + position: baidu.getStyle(target,"position"), + height: function(){ + var h = baidu.getStyle(target,"height"); + return (h != "auto") ? (/\d+/.exec(h)[0]) : target.offsetHeight; + }(), + width: function(){ + var w = baidu.getStyle(target,"width"); + return (w != "auto") ? (/\d+/.exec(w)[0]) : target.offsetWidth; + }() + }; + + _getValue('top', result); + _getValue('left', result); + _getValue('bottom', result); + _getValue('right', result); + + return result; + } + + function _getValue(position, options){ + var result; + + if(options.position == 'static'){ + options[position] = ''; + }else{ + result = baidu.getStyle(target, position); + if(result == 'auto' || result == '0px' ){ + options[position] = ''; + }else{ + options[position] = result; + } + } + } + + function render(){ + if(isRender) return; + + baidu.setStyles(target, {top:'', left:'', bottom:'', right:''}); + + if(!isUnderIE7){ + var style = {position:"fixed"}; + style[vertival == "top" ? "top" : "bottom"] = offset.y + "px"; + style[horizontal == "left" ? "left" : "right"] = offset.x + "px"; + + baidu.setStyles(target, style); + }else{ + baidu.setStyle(target,"position","absolute"); + _handleOnMove(); + } + + onrender(); + isRender = true; + } + + function release(){ + if(!isRender) return; + + var style = { + position: origPos.position, + left: origPos.left == '' ? 'auto' : origPos.left, + top: origPos.top == '' ? 'auto' : origPos.top, + bottom: origPos.bottom == '' ? 'auto' : origPos.bottom, + right: origPos.right == '' ? 'auto' : origPos.right + }; + + if(isUnderIE7){ + target.style.removeExpression("left"); + target.style.removeExpression("top"); + } + baidu.setStyles(target, style); + + onrelease(); + isRender = false; + } + + function update(options){ + if(!options) return; + + //更新事件 + onrender = options.onrender || onrender; + onupdate = options.onupdate || onupdate; + onrelease = options.onrelease || onrelease; + + //更新设置 + vertival = options.vertival || 'top'; + horizontal = options.horizontal || 'left'; + + //更新offset + baidu.extend(offset, options.offset || {}); + + onupdate(); + } + + return {render: render, update: update, release:release}; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/isArray.js + * author: erik + * version: 1.1.0 + * date: 2009/12/30 + */ + + + +/** + * 判断目标参数是否Array对象 + * @name baidu.lang.isArray + * @function + * @grammar baidu.lang.isArray(source) + * @param {Any} source 目标参数 + * @meta standard + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isArray = function (source) { + return '[object Array]' == Object.prototype.toString.call(source); +}; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * path: baidu/lang/toArray.js + * author: berg + * version: 1.0 + * date: 2010-07-05 + */ + + + + + +/** + * 将一个变量转换成array + * @name baidu.lang.toArray + * @function + * @grammar baidu.lang.toArray(source) + * @param {mix} source 需要转换成array的变量 + * @version 1.3 + * @meta standard + * @returns {array} 转换后的array + */ +baidu.lang.toArray = function (source) { + if (source === null || source === undefined) + return []; + if (baidu.lang.isArray(source)) + return source; + + // The strings and functions also have 'length' + if (typeof source.length !== 'number' || typeof source === 'string' || baidu.lang.isFunction(source)) { + return [source]; + } + + //nodeList, IE 下调用 [].slice.call(nodeList) 会报错 + if (source.item) { + var l = source.length, array = new Array(l); + while (l--) + array[l] = source[l]; + return array; + } + + return [].slice.call(source); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/fn/methodize.js + * author: berg + * version: 1.0.0 + * date: 2010/11/02 + */ + + + +/** + * 将一个静态函数变换成一个对象的方法,使其的第一个参数为this,或this[attr] + * @name baidu.fn.methodize + * @function + * @grammar baidu.fn.methodize(func[, attr]) + * @param {Function} func 要方法化的函数 + * @param {string} [attr] 属性 + * @version 1.3 + * @returns {Function} 已方法化的函数 + */ +baidu.fn.methodize = function (func, attr) { + return function(){ + return func.apply(this, [(attr ? this[attr] : this)].concat([].slice.call(arguments))); + }; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 包装函数的返回值,使其在能按照index指定的方式返回。
如果其值为-1,直接返回返回值。
如果其值为0,返回"返回值"的包装结果。
如果其值大于0,返回第i个位置的参数的包装结果(从1开始计数) + * @author berg + * @name baidu.fn.wrapReturnValue + * @function + * @grammar baidu.fn.wrapReturnValue(func, wrapper, mode) + * @param {function} func 需要包装的函数 + * @param {function} wrapper 包装器 + * @param {number} 包装第几个参数 + * @version 1.3.5 + * @return {function} 包装后的函数 + */ +baidu.fn.wrapReturnValue = function (func, wrapper, mode) { + mode = mode | 0; + return function(){ + var ret = func.apply(this, arguments); + + if(mode > 0){ + return new wrapper(arguments[mode - 1]); + } + if(!mode){ + return new wrapper(ret); + } + return ret; + } +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/fn/multize.js + * author: berg + * version: 1.0.0 + * date: 2010/11/02 + */ + + + +/** + * 对函数进行集化,使其在第一个参数为array时,结果也返回一个数组 + * @name baidu.fn.multize + * @function + * @grammar baidu.fn.multize(func[, recursive]) + * @param {Function} func 需要包装的函数 + * @param {Boolean} [recursive] 是否递归包装(如果数组里面一项仍然是数组,递归),可选 + * @param {Boolean} [joinArray] 将操作的结果展平后返回(如果返回的结果是数组,则将多个数组合成一个),可选 + * @version 1.3 + * + * @returns {Function} 已集化的函数 + */ +baidu.fn.multize = function (func, recursive, joinArray) { + var newFunc = function(){ + var list = arguments[0], + fn = recursive ? newFunc : func, + ret = [], + moreArgs = [].slice.call(arguments,0), + i = 0, + len, + r; + + if(list instanceof Array){ + for(len = list.length; i < len; i++){ + moreArgs[0]=list[i]; + r = fn.apply(this, moreArgs); + if (joinArray) { + if (r) { + //TODO: 需要去重吗? + ret = ret.concat(r); + } + } else { + ret.push(r); + } + } + return ret; + }else{ + return func.apply(this, arguments); + } + } + return newFunc; +}; +/* + * Tangram + * Copyright 2010 Baidu Inc. All right reserved. + * + * path: baidu/dom/element.js + * author: berg + * version: 1.0.0 + * date: 2010-07-12 + */ + + + + + + + + + + + + + + +/** + * @namespace baidu.element 通过该方法封装的对象可使用dom、event方法集合以及each方法进行链式调用。 + */ +baidu.element = baidu.e = function(node){ + var gNode = baidu._g(node); + if(!gNode && baidu.dom.query){ + gNode = baidu.dom.query(node); + } + return new baidu.element.Element(gNode); +}; + +/** + * Element类,所有扩展到链条上的方法都会被放在这里面 + * @name baidu.element.Element + * @grammar baidu.element.Element(node) + * @param {DOMElement|NodeList} node 目标元素,可以是数组或者单个node节点 + * @returns {ElementObj} 包装后的DOM对象 + * @version 1.3 + */ +baidu.element.Element = function(node){ + if(!baidu.element._init){ + //由于element可能会在其他代码之前加载,因此用这个方法来延迟加载 + baidu.element._makeChain(); + baidu.element._init = true; + } + /** + * @private + * @type {Array.} + */ + this._dom = (node.tagName || '').toLowerCase() == 'select' ? + [node] : baidu.lang.toArray(node); +}; + +/** + * 以每一个匹配的元素作为上下文执行传递进来的函数,方便用户自行遍历dom。 + * @name baidu.element.each + * @function + * @grammar baidu.element(node).each(iterator) + * @param {Function} iterator 遍历Dom时调用的方法 + * @version 1.3 + */ +baidu.element.Element.prototype.each = function(iterator) { + // 每一个iterator接受到的都是封装好的node + baidu.array.each(this._dom, function(node, i){ + iterator.call(node, node, i); + }); +}; + +/* + * 包装静态方法,使其变成一个链条方法。 + * 先把静态方法multize化,让其支持接受数组参数, + * 然后包装返回值,返回值是一个包装类 + * 最后把静态方法methodize化,让其变成一个对象方法。 + * + * @param {Function} func 要包装的静态方法 + * @param {number} index 包装函数的第几个返回值 + * + * @return {function} 包装后的方法,能直接挂到Element的prototype上。 + * @private + */ +baidu.element._toChainFunction = function(func, index, joinArray){ + return baidu.fn.methodize(baidu.fn.wrapReturnValue(baidu.fn.multize(func, 0, 1), baidu.element.Element, index), '_dom'); +}; + +/** + * element对象包装了dom包下的除了drag和ready,create,ddManager之外的大部分方法。这样做的目的是提供更为方便的链式调用操作。其中doms代指dom包下的方法名。 + * @name baidu.element.doms + * @function + * @grammar baidu.element(node).doms + * @param 详见dom包下相应方法的参数。 + * @version 1.3 + * @private + */ +baidu.element._makeChain = function(){ //将dom/event包下的东西挂到prototype里面 + var proto = baidu.element.Element.prototype, + fnTransformer = baidu.element._toChainFunction; + + //返回值是第一个参数的包装 + baidu.each(("draggable droppable resizable").split(' '), + function(fn){ + proto[fn] = fnTransformer(baidu.dom[fn], 1); + }); + + //直接返回返回值 + baidu.each(("remove getText contains getAttr getPosition getStyle hasClass intersect hasAttr getComputedStyle").split(' '), + function(fn){ + proto[fn] = proto[fn.replace(/^get[A-Z]/g, stripGet)] = fnTransformer(baidu.dom[fn], -1); + }); + + //包装返回值 + //包含 + //1. methodize + //2. multize,结果如果是数组会被展平 + //3. getXx == xx + baidu.each(("addClass empty hide show insertAfter insertBefore insertHTML removeClass " + + "setAttr setAttrs setStyle setStyles show toggleClass toggle next first " + + "getAncestorByClass getAncestorBy getAncestorByTag getDocument getParent getWindow " + + "last next prev g removeStyle setBorderBoxSize setOuterWidth setOuterHeight " + + "setBorderBoxWidth setBorderBoxHeight setPosition children query").split(' '), + function(fn){ + proto[fn] = proto[fn.replace(/^get[A-Z]/g, stripGet)] = fnTransformer(baidu.dom[fn], 0); + }); + + //对于baidu.dom.q这种特殊情况,将前两个参数调转 + //TODO:需要将这种特殊情况归纳到之前的情况中 + proto['q'] = proto['Q'] = fnTransformer(function(arg1, arg2){ + return baidu.dom.q.apply(this, [arg2, arg1].concat([].slice.call(arguments, 2))); + }, 0); + + //包装event中的on 和 un + baidu.each(("on un").split(' '), function(fn){ + proto[fn] = fnTransformer(baidu.event[fn], 0); + }); + + /** + * 方法提供了事件绑定的快捷方式,事件发生时会触发传递进来的函数。events代指事件方法的总和。 + * @name baidu.element.events + * @function + * @grammar baidu.element(node).events(fn) + * @param {Function} fn 事件触发时要调用的方法 + * @version 1.3 + * @remark 包装event的快捷方式具体包括blur、focus、focusin、focusout、load 、resize 、scroll 、unload 、click、 dblclick、mousedown 、mouseup 、mousemove、 mouseover 、mouseout 、mouseenter、 mouseleave、change 、select 、submit 、keydown、 keypress 、keyup、 error。 + * @returns {baidu.element} Element对象 + */ + //包装event的快捷方式 + baidu.each(("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error").split(' '), function(fnName){ + proto[fnName] = function(fn){ + return this.on(fnName, fn); + }; + }); + + + /** + * 把get去掉 + * 链里面的方法可以不以get开头调用 + * 如 baidu.element("myDiv").parent() == baidu.element("myDiv").getParent(); + * TODO: 合并getter和setter. baidu.e('myDiv').style() & baidu.e('myDiv').style('width', '100'); + */ + function stripGet(match) { + return match.charAt(3).toLowerCase(); + } +}; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/element/extend.js + * author: berg + * version: 1.0.0 + * date: 2010/12/16 + */ + + + + + + + + /** + * 为element对象扩展一个方法。 + * @name baidu.element.extend + * @function + * @grammar baidu.element.extend(json) + * @param {Object} json 要扩展的方法名以及方法 + * @version 1.3 + * @shortcut e + * @returns {baidu.element.Element} Element对象 + * + */ +baidu.element.extend = function(json){ + var e = baidu.element; + baidu.object.each(json, function(item, key){ + e.Element.prototype[key] = baidu.element._toChainFunction(item, -1); + }); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/EventArg.js + * author: erik + * version: 1.1.0 + * date: 2010/01/11 + */ + + + +/** + * 事件对象构造器,屏蔽浏览器差异的事件类 + * @name baidu.event.EventArg + * @function + * @grammar baidu.event.EventArg(event[, win]) + * @param {Event} event 事件对象 + * @param {Window} [win] 窗口对象,默认为window + * @meta standard + * @remark 1.1.0开始支持 + * @see baidu.event.get + * @constructor + */ +baidu.event.EventArg = function (event, win) { + win = win || window; + event = event || win.event; + var doc = win.document; + + this.target = /** @type {Node} */ (event.target) || event.srcElement; + this.keyCode = event.which || event.keyCode; + for (var k in event) { + var item = event[k]; + // 避免拷贝preventDefault等事件对象方法 + if ('function' != typeof item) { + this[k] = item; + } + } + + if (!this.pageX && this.pageX !== 0) { + this.pageX = (event.clientX || 0) + + (doc.documentElement.scrollLeft + || doc.body.scrollLeft); + this.pageY = (event.clientY || 0) + + (doc.documentElement.scrollTop + || doc.body.scrollTop); + } + this._event = event; +}; + +/** + * 阻止事件的默认行为 + * @name preventDefault + * @grammar eventArgObj.preventDefault() + * @returns {baidu.event.EventArg} EventArg对象 + */ +baidu.event.EventArg.prototype.preventDefault = function () { + if (this._event.preventDefault) { + this._event.preventDefault(); + } else { + this._event.returnValue = false; + } + return this; +}; + +/** + * 停止事件的传播 + * @name stopPropagation + * @grammar eventArgObj.stopPropagation() + * @returns {baidu.event.EventArg} EventArg对象 + */ +baidu.event.EventArg.prototype.stopPropagation = function () { + if (this._event.stopPropagation) { + this._event.stopPropagation(); + } else { + this._event.cancelBubble = true; + } + return this; +}; + +/** + * 停止事件 + * @name stop + * @grammar eventArgObj.stop() + * @returns {baidu.event.EventArg} EventArg对象 + */ +baidu.event.EventArg.prototype.stop = function () { + return this.stopPropagation().preventDefault(); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/_eventFilter.js + * author: rocy + * version: 1.0.0 + * date: 2010/10/29 + */ + + +baidu.event._eventFilter = baidu.event._eventFilter || {}; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/_eventFilter/_crossElementBoundary.js + * author: Rocy, berg + * version: 1.0.0 + * date: 2010/12/16 + */ + + + + + +/** + * 事件仅在鼠标进入/离开元素区域触发一次,当鼠标在元素区域内部移动的时候不会触发,用于为非IE浏览器添加mouseleave/mouseenter支持。 + * + * @name baidu.event._eventFilter._crossElementBoundary + * @function + * @grammar baidu.event._eventFilter._crossElementBoundary(listener, e) + * + * @param {function} listener 要触发的函数 + * @param {DOMEvent} e DOM事件 + */ + +baidu.event._eventFilter._crossElementBoundary = function(listener, e){ + var related = e.relatedTarget, + current = e.currentTarget; + if( + related === false || + // 如果current和related都是body,contains函数会返回false + current == related || + // Firefox有时会把XUL元素作为relatedTarget + // 这些元素不能访问parentNode属性 + // thanks jquery & mootools + (related && (related.prefix == 'xul' || + //如果current包含related,说明没有经过current的边界 + baidu.dom.contains(current, related))) + ){ + return ; + } + return listener.call(current, e); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/fn/bind.js + * author: berg + * version: 1.0.0 + * date: 2010/11/02 + */ + + + + + +/** + * 为对象绑定方法和作用域 + * @name baidu.fn.bind + * @function + * @grammar baidu.fn.bind(handler[, obj, args]) + * @param {Function|String} handler 要绑定的函数,或者一个在作用域下可用的函数名 + * @param {Object} obj 执行运行时this,如果不传入则运行时this为函数本身 + * @param {args* 0..n} args 函数执行时附加到执行时函数前面的参数 + * @version 1.3 + * + * @returns {Function} 封装后的函数 + */ +baidu.fn.bind = function(func, scope) { + var xargs = arguments.length > 2 ? [].slice.call(arguments, 2) : null; + return function () { + var fn = baidu.lang.isString(func) ? scope[func] : func, + args = (xargs) ? xargs.concat([].slice.call(arguments, 0)) : arguments; + return fn.apply(scope || fn, args); + }; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/_eventFilter/mouseenter.js + * author: Rocy + * version: 1.0.0 + * date: 2010/11/09 + */ + + + + + +/** + * 用于为非IE浏览器添加mouseenter的支持; + * mouseenter事件仅在鼠标进入元素区域触发一次, + * 当鼠标在元素内部移动的时候不会多次触发. + */ +baidu.event._eventFilter.mouseenter = window.attachEvent ? null : function(element,type, listener){ + return { + type: "mouseover", + listener: baidu.fn.bind(baidu.event._eventFilter._crossElementBoundary, this, listener) + } +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/_eventFilter/mouseleave.js + * author: Rocy, berg + * version: 1.0.0 + * date: 2010/11/09 + */ + + + + +/** + * 用于为非IE浏览器添加mouseleave的支持; + * mouseleave事件仅在鼠标移出元素区域触发一次, + * 当鼠标在元素区域内部移动的时候不会触发. + */ +baidu.event._eventFilter.mouseleave = window.attachEvent ? null : function(element,type, listener){ + return { + type: "mouseout", + listener: baidu.fn.bind(baidu.event._eventFilter._crossElementBoundary, this, listener) + } +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/_unload.js + * author: erik, berg + * version: 1.1.0 + * date: 2009/12/16 + */ + + + + +/** + * 卸载所有事件监听器 + * @private + */ +baidu.event._unload = function() { + var lis = baidu.event._listeners, + len = lis.length, + standard = !!window.removeEventListener, + item, el; + + while (len--) { + item = lis[len]; + //20100409 berg: 不解除unload的绑定,保证用户的事件一定会被执行 + //否则用户挂载进入的unload事件也可能会在这里被删除 + if (item[1] == 'unload') { + continue; + } + //如果el被移除,不做判断将导致js报错 + if (!(el = item[0])) { + continue; + } + if (el.removeEventListener) { + el.removeEventListener(item[1], item[3], false); + } else if (el.detachEvent) { + el.detachEvent('on' + item[1], item[3]); + } + } + + if (standard) { + window.removeEventListener('unload', baidu.event._unload, false); + } else { + window.detachEvent('onunload', baidu.event._unload); + } +}; + +// 在页面卸载的时候,将所有事件监听器移除 +if (window.attachEvent) { + window.attachEvent('onunload', baidu.event._unload); +} else { + window.addEventListener('unload', baidu.event._unload, false); +} +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/object/values.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 获取目标对象的值列表 + * @name baidu.object.values + * @function + * @grammar baidu.object.values(source) + * @param {Object} source 目标对象 + * @see baidu.object.keys + * + * @returns {Array} 值列表 + */ +baidu.object.values = function (source) { + var result = [], resultLen = 0, k; + for (k in source) { + if (source.hasOwnProperty(k)) { + result[resultLen++] = source[k]; + } + } + return result; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/fire.js + * author: linlingyu + * version: 1.1.0 + * date: 2010/10/28 + */ + + + + + + +/** + * 触发已经注册的事件。注:在ie下不支持load和unload事件 + * @name baidu.event.fire + * @function + * @grammar baidu.event.fire(element, type, options) + * @param {HTMLElement|string|window} element 目标元素或目标元素id + * @param {string} type 事件类型 + * @param {Object} options 触发的选项 + + * @param {Boolean} options.bubbles 是否冒泡 + * @param {Boolean} options.cancelable 是否可以阻止事件的默认操作 + * @param {window|null} options.view 指定 Event 的 AbstractView + * @param {1|Number} options.detail 指定 Event 的鼠标单击量 + * @param {Number} options.screenX 指定 Event 的屏幕 x 坐标 + * @param {Number} options.screenY number 指定 Event 的屏幕 y 坐标 + * @param {Number} options.clientX 指定 Event 的客户端 x 坐标 + * @param {Number} options.clientY 指定 Event 的客户端 y 坐标 + * @param {Boolean} options.ctrlKey 指定是否在 Event 期间按下 ctrl 键 + * @param {Boolean} options.altKey 指定是否在 Event 期间按下 alt 键 + * @param {Boolean} options.shiftKey 指定是否在 Event 期间按下 shift 键 + * @param {Boolean} options.metaKey 指定是否在 Event 期间按下 meta 键 + * @param {Number} options.button 指定 Event 的鼠标按键 + * @param {Number} options.keyCode 指定 Event 的键盘按键 + * @param {Number} options.charCode 指定 Event 的字符编码 + * @param {HTMLElement} options.relatedTarget 指定 Event 的相关 EventTarget + * @version 1.3 + * + * @returns {HTMLElement} 目标元素 + */ +(function(){ + var browser = baidu.browser, + keys = { + keydown : 1, + keyup : 1, + keypress : 1 + }, + mouses = { + click : 1, + dblclick : 1, + mousedown : 1, + mousemove : 1, + mouseup : 1, + mouseover : 1, + mouseout : 1 + }, + htmls = { + abort : 1, + blur : 1, + change : 1, + error : 1, + focus : 1, + load : browser.ie ? 0 : 1, + reset : 1, + resize : 1, + scroll : 1, + select : 1, + submit : 1, + unload : browser.ie ? 0 : 1 + }, + bubblesEvents = { + scroll : 1, + resize : 1, + reset : 1, + submit : 1, + change : 1, + select : 1, + error : 1, + abort : 1 + }, + parameters = { + "KeyEvents" : ["bubbles", "cancelable", "view", "ctrlKey", "altKey", "shiftKey", "metaKey", "keyCode", "charCode"], + "MouseEvents" : ["bubbles", "cancelable", "view", "detail", "screenX", "screenY", "clientX", "clientY", "ctrlKey", "altKey", "shiftKey", "metaKey", "button", "relatedTarget"], + "HTMLEvents" : ["bubbles", "cancelable"], + "UIEvents" : ["bubbles", "cancelable", "view", "detail"], + "Events" : ["bubbles", "cancelable"] + }; + baidu.object.extend(bubblesEvents, keys); + baidu.object.extend(bubblesEvents, mouses); + function parse(array, source){//按照array的项在source中找到值生成新的obj并把source中对应的array的项删除 + var i = 0, size = array.length, obj = {}; + for(; i < size; i++){ + obj[array[i]] = source[array[i]]; + delete source[array[i]]; + } + return obj; + }; + function eventsHelper(type, eventType, options){//非IE内核的事件辅助 + options = baidu.object.extend({}, options); + var param = baidu.object.values(parse(parameters[eventType], options)), + evnt = document.createEvent(eventType); + param.unshift(type); + if("KeyEvents" == eventType){ + evnt.initKeyEvent.apply(evnt, param); + }else if("MouseEvents" == eventType){ + evnt.initMouseEvent.apply(evnt, param); + }else if("UIEvents" == eventType){ + evnt.initUIEvent.apply(evnt, param); + }else{//HTMMLEvents, Events + evnt.initEvent.apply(evnt, param); + } + baidu.object.extend(evnt, options);//把多出来的options再附加上去,这是为解决当创建一个其它event时,当用Events代替后需要把参数附加到对象上 + return evnt; + }; + function eventObject(options){//ie内核的构建方式 + var evnt; + if(document.createEventObject){ + evnt = document.createEventObject(); + baidu.object.extend(evnt, options); + } + return evnt; + }; + function keyEvents(type, options){//keyEvents + options = parse(parameters["KeyEvents"], options); + var evnt; + if(document.createEvent){ + try{//opera对keyEvents的支持极差 + evnt = eventsHelper(type, "KeyEvents", options); + }catch(keyError){ + try{ + evnt = eventsHelper(type, "Events", options); + }catch(evtError){ + evnt = eventsHelper(type, "UIEvents", options); + } + } + }else{ + options.keyCode = options.charCode > 0 ? options.charCode : options.keyCode; + evnt = eventObject(options); + } + return evnt; + }; + function mouseEvents(type, options){//mouseEvents + options = parse(parameters["MouseEvents"], options); + var evnt; + if(document.createEvent){ + evnt = eventsHelper(type, "MouseEvents", options);//mouseEvents基本浏览器都支持 + if(options.relatedTarget && !evnt.relatedTarget){ + if("mouseout" == type.toLowerCase()){ + evnt.toElement = options.relatedTarget; + }else if("mouseover" == type.toLowerCase()){ + evnt.fromElement = options.relatedTarget; + } + } + }else{ + options.button = options.button == 0 ? 1 + : options.button == 1 ? 4 + : baidu.lang.isNumber(options.button) ? options.button : 0; + evnt = eventObject(options); + } + return evnt; + }; + function htmlEvents(type, options){//htmlEvents + options.bubbles = bubblesEvents.hasOwnProperty(type); + options = parse(parameters["HTMLEvents"], options); + var evnt; + if(document.createEvent){ + try{ + evnt = eventsHelper(type, "HTMLEvents", options); + }catch(htmlError){ + try{ + evnt = eventsHelper(type, "UIEvents", options); + }catch(uiError){ + evnt = eventsHelper(type, "Events", options); + } + } + }else{ + evnt = eventObject(options); + } + return evnt; + }; + baidu.event.fire = function(element, type, options){ + var evnt; + type = type.replace(/^on/i, ""); + element = baidu.dom._g(element); + options = baidu.object.extend({ + bubbles : true, + cancelable : true, + view : window, + detail : 1, + screenX : 0, + screenY : 0, + clientX : 0, + clientY : 0, + ctrlKey : false, + altKey : false, + shiftKey: false, + metaKey : false, + keyCode : 0, + charCode: 0, + button : 0, + relatedTarget : null + }, options); + if(keys[type]){ + evnt = keyEvents(type, options); + }else if(mouses[type]){ + evnt = mouseEvents(type, options); + }else if(htmls[type]){ + evnt = htmlEvents(type, options); + }else{ + throw(new Error(type + " is not support!")); + } + if(evnt){//tigger event + if(element.dispatchEvent){ + element.dispatchEvent(evnt); + }else if(element.fireEvent){ + element.fireEvent("on" + type, evnt); + } + } + } +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/get.js + * author: erik + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +/** + * 获取扩展的EventArg对象 + * @name baidu.event.get + * @function + * @grammar baidu.event.get(event[, win]) + * @param {Event} event 事件对象 + * @param {window} [win] 触发事件元素所在的window + * @meta standard + * @see baidu.event.EventArg + * + * @returns {EventArg} 扩展的事件对象 + */ +baidu.event.get = function (event, win) { + return new baidu.event.EventArg(event, win); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/getKeyCode.js + * author: erik + * version: 1.1.0 + * date: 2009/11/23 + */ + + +/** + * 获取键盘事件的键值 + * @name baidu.event.getKeyCode + * @function + * @grammar baidu.event.getKeyCode(event) + * @param {Event} event 事件对象 + * + * @returns {number} 键盘事件的键值 + */ +baidu.event.getKeyCode = function (event) { + return event.which || event.keyCode; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/getPageX.js + * author: erik + * version: 1.1.0 + * date: 2009/12/16 + */ + + + +/** + * 获取鼠标事件的鼠标x坐标 + * @name baidu.event.getPageX + * @function + * @grammar baidu.event.getPageX(event) + * @param {Event} event 事件对象 + * @see baidu.event.getPageY + * + * @returns {number} 鼠标事件的鼠标x坐标 + */ +baidu.event.getPageX = function (event) { + var result = event.pageX, + doc = document; + if (!result && result !== 0) { + result = (event.clientX || 0) + + (doc.documentElement.scrollLeft + || doc.body.scrollLeft); + } + return result; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/getPageY.js + * author: erik + * version: 1.1.0 + * date: 2009/12/16 + */ + + + +/** + * 获取鼠标事件的鼠标y坐标 + * @name baidu.event.getPageY + * @function + * @grammar baidu.event.getPageY(event) + * @param {Event} event 事件对象 + * @see baidu.event.getPageX + * + * @returns {number} 鼠标事件的鼠标y坐标 + */ +baidu.event.getPageY = function (event) { + var result = event.pageY, + doc = document; + if (!result && result !== 0) { + result = (event.clientY || 0) + + (doc.documentElement.scrollTop + || doc.body.scrollTop); + } + return result; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/once.js + * author: wangcheng + * version: 1.1.0 + * date: 2010/10/29 + */ + + + + + +/** + * 为目标元素添加一次事件绑定 + * @name baidu.event.once + * @function + * @grammar baidu.event.once(element, type, listener) + * @param {HTMLElement|string} element 目标元素或目标元素id + * @param {string} type 事件类型 + * @param {Function} listener 需要添加的监听器 + * @version 1.3 + * @see baidu.event.un,baidu.event.on + * + * @returns {HTMLElement} 目标元素 + */ +baidu.event.once = function(element, type, listener){ + element = baidu.dom._g(element); + function onceListener(event){ + listener.call(element,event); + baidu.event.un(element, type, onceListener); + } + + baidu.event.on(element, type, onceListener); + return element; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/stopPropagation.js + * author: erik + * version: 1.1.0 + * date: 2009/11/23 + */ + + + +/** + * 阻止事件传播 + * @name baidu.event.stopPropagation + * @function + * @grammar baidu.event.stopPropagation(event) + * @param {Event} event 事件对象 + * @see baidu.event.stop,baidu.event.preventDefault + */ +baidu.event.stopPropagation = function (event) { + if (event.stopPropagation) { + event.stopPropagation(); + } else { + event.cancelBubble = true; + } +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/event/stop.js + * author: erik + * version: 1.1.0 + * date: 2009/11/23 + */ + + + + +/** + * 停止事件 + * @name baidu.event.stop + * @function + * @grammar baidu.event.stop(event) + * @param {Event} event 事件对象 + * @see baidu.event.stopPropagation,baidu.event.preventDefault + */ +baidu.event.stop = function (event) { + var e = baidu.event; + e.stopPropagation(event); + e.preventDefault(event); +}; +/* + * Tangram + * Copyright 2011 Baidu Inc. All rights reserved. + * + * path: baidu/fn/abstractMethod.js + * author: leeight + * version: 1.0.0 + * date: 2011/04/29 + */ + + + +/** + * 定义一个抽象方法 + * @type {!Function} + * @throws {Error} when invoked to indicate the method should be + * overridden. + * @see goog.abstractMethod + */ +baidu.fn.abstractMethod = function() { + throw Error('unimplemented abstract method'); +}; + + + + + + + + + + + + + + + + + + + + + +/* vim: set ts=4 sw=4 sts=4 tw=100 noet: */ +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json.js + * author: erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + +/** + * @namespace baidu.json 操作json对象的方法。 + */ +baidu.json = baidu.json || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/parse.js + * author: erik, berg + * version: 1.2 + * date: 2009/11/23 + */ + + + +/** + * 将字符串解析成json对象。注:不会自动祛除空格 + * @name baidu.json.parse + * @function + * @grammar baidu.json.parse(data) + * @param {string} source 需要解析的字符串 + * @remark + * 该方法的实现与ecma-262第五版中规定的JSON.parse不同,暂时只支持传入一个参数。后续会进行功能丰富。 + * @meta standard + * @see baidu.json.stringify,baidu.json.decode + * + * @returns {JSON} 解析结果json对象 + */ +baidu.json.parse = function (data) { + //2010/12/09:更新至不使用原生parse,不检测用户输入是否正确 + return (new Function("return (" + data + ")"))(); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/decode.js + * author: erik, cat + * version: 1.3.4 + * date: 2010/12/23 + */ + + + +/** + * 将字符串解析成json对象,为过时接口,今后会被baidu.json.parse代替 + * @name baidu.json.decode + * @function + * @grammar baidu.json.decode(source) + * @param {string} source 需要解析的字符串 + * @meta out + * @see baidu.json.encode,baidu.json.parse + * + * @returns {JSON} 解析结果json对象 + */ +baidu.json.decode = baidu.json.parse; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/stringify.js + * author: erik + * version: 1.1.0 + * date: 2010/01/11 + */ + + + +/** + * 将json对象序列化 + * @name baidu.json.stringify + * @function + * @grammar baidu.json.stringify(value) + * @param {JSON} value 需要序列化的json对象 + * @remark + * 该方法的实现与ecma-262第五版中规定的JSON.stringify不同,暂时只支持传入一个参数。后续会进行功能丰富。 + * @meta standard + * @see baidu.json.parse,baidu.json.encode + * + * @returns {string} 序列化后的字符串 + */ +baidu.json.stringify = (function () { + /** + * 字符串处理时需要转义的字符表 + * @private + */ + var escapeMap = { + "\b": '\\b', + "\t": '\\t', + "\n": '\\n', + "\f": '\\f', + "\r": '\\r', + '"' : '\\"', + "\\": '\\\\' + }; + + /** + * 字符串序列化 + * @private + */ + function encodeString(source) { + if (/["\\\x00-\x1f]/.test(source)) { + source = source.replace( + /["\\\x00-\x1f]/g, + function (match) { + var c = escapeMap[match]; + if (c) { + return c; + } + c = match.charCodeAt(); + return "\\u00" + + Math.floor(c / 16).toString(16) + + (c % 16).toString(16); + }); + } + return '"' + source + '"'; + } + + /** + * 数组序列化 + * @private + */ + function encodeArray(source) { + var result = ["["], + l = source.length, + preComma, i, item; + + for (i = 0; i < l; i++) { + item = source[i]; + + switch (typeof item) { + case "undefined": + case "function": + case "unknown": + break; + default: + if(preComma) { + result.push(','); + } + result.push(baidu.json.stringify(item)); + preComma = 1; + } + } + result.push("]"); + return result.join(""); + } + + /** + * 处理日期序列化时的补零 + * @private + */ + function pad(source) { + return source < 10 ? '0' + source : source; + } + + /** + * 日期序列化 + * @private + */ + function encodeDate(source){ + return '"' + source.getFullYear() + "-" + + pad(source.getMonth() + 1) + "-" + + pad(source.getDate()) + "T" + + pad(source.getHours()) + ":" + + pad(source.getMinutes()) + ":" + + pad(source.getSeconds()) + '"'; + } + + return function (value) { + switch (typeof value) { + case 'undefined': + return 'undefined'; + + case 'number': + return isFinite(value) ? String(value) : "null"; + + case 'string': + return encodeString(value); + + case 'boolean': + return String(value); + + default: + if (value === null) { + return 'null'; + } else if (value instanceof Array) { + return encodeArray(value); + } else if (value instanceof Date) { + return encodeDate(value); + } else { + var result = ['{'], + encode = baidu.json.stringify, + preComma, + item; + + for (var key in value) { + if (Object.prototype.hasOwnProperty.call(value, key)) { + item = value[key]; + switch (typeof item) { + case 'undefined': + case 'unknown': + case 'function': + break; + default: + if (preComma) { + result.push(','); + } + preComma = 1; + result.push(encode(key) + ':' + encode(item)); + } + } + } + result.push('}'); + return result.join(''); + } + } + }; +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/encode.js + * author: erik, cat + * version: 1.3.4 + * date: 2010/12/23 + */ + + + +/** + * 将json对象序列化,为过时接口,今后会被baidu.json.stringify代替 + * @name baidu.json.encode + * @function + * @grammar baidu.json.encode(value) + * @param {JSON} value 需要序列化的json对象 + * @meta out + * @see baidu.json.decode,baidu.json.stringify + * + * @returns {string} 序列化后的字符串 + */ +baidu.json.encode = baidu.json.stringify; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * path: baidu/lang/Class/addEventListeners.js + * author: berg + * version: 1.0 + * date: 2010-07-05 + */ + + + + +/** + * 添加多个自定义事件。 + * @grammar obj.addEventListeners(events, fn) + * @param {object} events json对象,key为事件名称,value为事件被触发时应该调用的回调函数 + * @param {Function} fn 要挂载的函数 + * @version 1.3 + */ +/* addEventListeners("onmyevent,onmyotherevent", fn); + * addEventListeners({ + * "onmyevent" : fn, + * "onmyotherevent" : fn1 + * }); + */ +baidu.lang.Class.prototype.addEventListeners = function (events, fn) { + if(typeof fn == 'undefined'){ + for(var i in events){ + this.addEventListener(i, events[i]); + } + }else{ + events = events.split(','); + var i = 0, len = events.length, event; + for(; i < len; i++){ + this.addEventListener(baidu.trim(events[i]), fn); + } + } +}; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * @author: meizz + * @namespace: baidu.lang.createClass + * @version: 2010-05-13 + */ + + + + + +/** + * 创建一个类,包括创造类的构造器、继承基类Class + * @name baidu.lang.createClass + * @function + * @grammar baidu.lang.createClass(constructor[, options]) + * @param {Function} constructor 类的构造器函数 + * @param {Object} [options] + + * @config {string} [className] 类名 + * @config {Function} [superClass] 父类,默认为baidu.lang.Class + * @version 1.2 + * @remark + * + 使用createClass能方便的创建一个带有继承关系的类。同时会为返回的类对象添加extend方法,使用obj.extend({});可以方便的扩展原型链上的方法和属性 + + * @see baidu.lang.Class,baidu.lang.inherits + * + * @returns {Object} 一个类对象 + */ + +baidu.lang.createClass = function(constructor, options) { + options = options || {}; + var superClass = options.superClass || baidu.lang.Class; + + // 创建新类的真构造器函数 + var fn = function(){ + // 继承父类的构造器 + if(superClass != baidu.lang.Class){ + superClass.apply(this, arguments); + }else{ + superClass.call(this); + } + constructor.apply(this, arguments); + }; + + fn.options = options.options || {}; + + var C = function(){}, + cp = constructor.prototype; + C.prototype = superClass.prototype; + + // 继承父类的原型(prototype)链 + var fp = fn.prototype = new C(); + + // 继承传参进来的构造器的 prototype 不会丢 + for (var i in cp) fp[i] = cp[i]; + + typeof options.className == "string" && (fp._className = options.className); + + // 修正这种继承方式带来的 constructor 混乱的问题 + fp.constructor = cp.constructor; + + // 给类扩展出一个静态方法,以代替 baidu.object.extend() + fn.extend = function(json){ + for (var i in json) { + fn.prototype[i] = json[i]; + } + return fn; // 这个静态方法也返回类对象本身 + }; + + return fn; +}; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * path: baidu/lang/decontrol.js + * author: meizz + * version: 1.1.0 + * $date$ + */ + + + +/** + * 解除instance中对指定类实例的引用关系。 + * @name baidu.lang.decontrol + * @function + * @grammar baidu.lang.decontrol(guid) + * @param {string} guid 类的唯一标识 + * @version 1.1.1 + * @see baidu.lang.instance + */ +baidu.lang.decontrol = function(guid) { + var m = window[baidu.guid]; + m._instances && (delete m._instances[guid]); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 事件中心 + * @class 事件中心 + * @name baidu.lang.eventCenter + * @author rocy + */ +baidu.lang.eventCenter = baidu.lang.eventCenter || baidu.lang.createSingle(); + +/** + * 注册全局事件监听器。 + * @name baidu.lang.eventCenter.addEventListener + * @function + * @grammar baidu.lang.eventCenter.addEventListener(type, handler[, key]) + * @param {string} type 自定义事件的名称 + * @param {Function} handler 自定义事件被触发时应该调用的回调函数 + * @param {string} [key] 为事件监听函数指定的名称,可在移除时使用。如果不提供,方法会默认为它生成一个全局唯一的key。 + * @remark 事件类型区分大小写。如果自定义事件名称不是以小写"on"开头,该方法会给它加上"on"再进行判断,即"click"和"onclick"会被认为是同一种事件。 + */ + +/** + * 移除全局事件监听器。 + * @grammar baidu.lang.eventCenter.removeEventListener(type, handler) + * @param {string} type 事件类型 + * @param {Function|string} handler 要移除的事件监听函数或者监听函数的key + * @remark 如果第二个参数handler没有被绑定到对应的自定义事件中,什么也不做。 + */ + +/** + * 派发全局自定义事件,使得绑定到全局自定义事件上面的函数都会被执行。 + * @grammar baidu.lang.eventCenter.dispatchEvent(event, options) + * @param {baidu.lang.Event|String} event Event对象,或事件名称(1.1.1起支持) + * @param {Object} options 扩展参数,所含属性键值会扩展到Event对象上(1.2起支持) + */ +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/inherits.js + * author: erik + * version: 1.1.0 + * date: 2009/11/24 + */ + + + +/** + * 为类型构造器建立继承关系 + * @name baidu.lang.inherits + * @function + * @grammar baidu.lang.inherits(subClass, superClass[, className]) + * @param {Function} subClass 子类构造器 + * @param {Function} superClass 父类构造器 + * @param {string} className 类名标识 + * @remark + * +使subClass继承superClass的prototype,因此subClass的实例能够使用superClass的prototype中定义的所有属性和方法。
+这个函数实际上是建立了subClass和superClass的原型链集成,并对subClass进行了constructor修正。
+注意:如果要继承构造函数,需要在subClass里面call一下,具体见下面的demo例子 + + * @shortcut inherits + * @meta standard + * @see baidu.lang.Class + */ +baidu.lang.inherits = function (subClass, superClass, className) { + var key, proto, + selfProps = subClass.prototype, + clazz = new Function(); + + clazz.prototype = superClass.prototype; + proto = subClass.prototype = new clazz(); + for (key in selfProps) { + proto[key] = selfProps[key]; + } + subClass.prototype.constructor = subClass; + subClass.superClass = superClass.prototype; + + // 类名标识,兼容Class的toString,基本没用 + if ("string" == typeof className) { + proto._className = className; + } +}; + +// 声明快捷方法 +baidu.inherits = baidu.lang.inherits; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/instance.js + * author: meizz, erik + * version: 1.1.0 + * date: 2009/12/1 + */ + + + +/** + * 根据参数(guid)的指定,返回对应的实例对象引用 + * @name baidu.lang.instance + * @function + * @grammar baidu.lang.instance(guid) + * @param {string} guid 需要获取实例的guid + * @meta standard + * + * @returns {Object|null} 如果存在的话,返回;否则返回null。 + */ +baidu.lang.instance = function (guid) { + return window[baidu.guid]._instances[guid] || null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/isBoolean.js + * author: berg + * version: 1.0.0 + * date: 2010/10/12 + */ + + + +/** + * 判断目标参数是否Boolean对象 + * @name baidu.lang.isBoolean + * @function + * @grammar baidu.lang.isBoolean(source) + * @param {Any} source 目标参数 + * @version 1.3 + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isElement,baidu.lang.isArray,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isBoolean = function(o) { + return typeof o === 'boolean'; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/isDate.js + * author: berg + * version: 1.0.0 + * date: 2010/10/12 + */ + + + +/** + * 判断目标参数是否为Date对象 + * @name baidu.lang.isDate + * @function + * @grammar baidu.lang.isDate(source) + * @param {Any} source 目标参数 + * @version 1.3 + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isBoolean,baidu.lang.isElement + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isDate = function(o) { + // return o instanceof Date; + return {}.toString.call(o) === "[object Date]" && o.toString() !== 'Invalid Date' && !isNaN(o); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/isElement.js + * author: erik + * version: 1.1.0 + * date: 2009/12/30 + */ + + + +/** + * 判断目标参数是否为Element对象 + * @name baidu.lang.isElement + * @function + * @grammar baidu.lang.isElement(source) + * @param {Any} source 目标参数 + * @meta standard + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isBoolean,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isElement = function (source) { + return !!(source && source.nodeName && source.nodeType == 1); +}; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/lang/isObject.js + * author: erik + * version: 1.1.0 + * date: 2009/12/30 + */ + + + +/** + * 判断目标参数是否为Object对象 + * @name baidu.lang.isObject + * @function + * @grammar baidu.lang.isObject(source) + * @param {Any} source 目标参数 + * @shortcut isObject + * @meta standard + * @see baidu.lang.isString,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isObject = function (source) { + return 'function' == typeof source || !!(source && 'object' == typeof source); +}; + +// 声明快捷方法 +baidu.isObject = baidu.lang.isObject; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 增加自定义模块扩展,默认创建在当前作用域 + * @author erik, berg + * @name baidu.lang.module + * @function + * @grammar baidu.lang.module(name, module[, owner]) + * @param {string} name 需要创建的模块名. + * @param {Any} module 需要创建的模块对象. + * @param {Object} [owner] 模块创建的目标环境,默认为window. + * @remark + * + 从1.1.1开始,module方法会优先在当前作用域下寻找模块,如果无法找到,则寻找window下的模块 + + * @meta standard + */ +baidu.lang.module = function(name, module, owner) { + var packages = name.split('.'), + len = packages.length - 1, + packageName, + i = 0; + + // 如果没有owner,找当前作用域,如果当前作用域没有此变量,在window创建 + if (!owner) { + try { + if (!(new RegExp('^[a-zA-Z_\x24][a-zA-Z0-9_\x24]*\x24')).test(packages[0])) { + throw ''; + } + owner = eval(packages[0]); + i = 1; + }catch (e) { + owner = window; + } + } + + for (; i < len; i++) { + packageName = packages[i]; + if (!owner[packageName]) { + owner[packageName] = {}; + } + owner = owner[packageName]; + } + + if (!owner[packages[len]]) { + owner[packages[len]] = module; + } +}; +/* + * tangram + * copyright 2011 baidu inc. all rights reserved. + * + * path: baidu/lang/getModule.js + * author: leeight + * version: 1.1.0 + * date: 2011/04/29 + */ + + + +/** + * 根据变量名或者命名空间来查找对象 + * @param {string} name 变量或者命名空间的名字. + * @param {Object=} opt_obj 从这个对象开始查找,默认是window; + * @return {?Object} 返回找到的对象,如果没有找到返回null. + * @see goog.getObjectByName + */ +baidu.lang.getModule = function(name, opt_obj) { + var parts = name.split('.'), + cur = opt_obj || window, + part; + for (; part = parts.shift(); ) { + if (cur[part] != null) { + cur = cur[part]; + } else { + return null; + } + } + + return cur; +}; + + + + + + + + + + + + + + + + + + + +/* vim: set ts=4 sw=4 sts=4 tw=100 noet: */ +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/number/comma.js + * author: dron, erik, berg + * version: 1.2.0 + * date: 2010/09/07 + */ + + + +/** + * 为目标数字添加逗号分隔 + * @name baidu.number.comma + * @function + * @grammar baidu.number.comma(source[, length]) + * @param {number} source 需要处理的数字 + * @param {number} [length] 两次逗号之间的数字位数,默认为3位 + * + * @returns {string} 添加逗号分隔后的字符串 + */ +baidu.number.comma = function (source, length) { + if (!length || length < 1) { + length = 3; + } + + source = String(source).split("."); + source[0] = source[0].replace(new RegExp('(\\d)(?=(\\d{'+length+'})+$)','ig'),"$1,"); + return source.join("."); +}; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/number/randomInt.js + * author: berg + * version: 1.0.0 + * date: 2010/12/14 + */ + + + +/** + * 生成随机整数,范围是[min, max] + * @name baidu.number.randomInt + * @function + * @grammar baidu.number.randomInt(min, max) + * + * @param {number} min 随机整数的最小值 + * @param {number} max 随机整数的最大值 + * @return {number} 生成的随机整数 + */ +baidu.number.randomInt = function(min, max){ + return Math.floor(Math.random() * (max - min + 1) + min); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + + +/** + * 判断一个对象是不是字面量对象,即判断这个对象是不是由{}或者new Object类似方式创建 + * + * @name baidu.object.isPlain + * @function + * @grammar baidu.object.isPlain(source) + * @param {Object} source 需要检查的对象 + * @remark + * 事实上来说,在Javascript语言中,任何判断都一定会有漏洞,因此本方法只针对一些最常用的情况进行了判断 + * + * @returns {Boolean} 检查结果 + */ +baidu.object.isPlain = function(obj){ + var hasOwnProperty = Object.prototype.hasOwnProperty, + key; + if ( !obj || + //一般的情况,直接用toString判断 + Object.prototype.toString.call(obj) !== "[object Object]" || + //IE下,window/document/document.body/HTMLElement/HTMLCollection/NodeList等DOM对象上一个语句为true + //isPrototypeOf挂在Object.prototype上的,因此所有的字面量都应该会有这个属性 + //对于在window上挂了isPrototypeOf属性的情况,直接忽略不考虑 + !('isPrototypeOf' in obj) + ) { + return false; + } + + //判断new fun()自定义对象的情况 + //constructor不是继承自原型链的 + //并且原型中有isPrototypeOf方法才是Object + if ( obj.constructor && + !hasOwnProperty.call(obj, "constructor") && + !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + //判断有继承的情况 + //如果有一项是继承过来的,那么一定不是字面量Object + //OwnProperty会首先被遍历,为了加速遍历过程,直接看最后一项 + for ( key in obj ) {} + return key === undefined || hasOwnProperty.call( obj, key ); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + + +/** + * 对一个object进行深度拷贝 + * + * @author berg + * @name baidu.object.clone + * @function + * @grammar baidu.object.clone(source) + * @param {Object} source 需要进行拷贝的对象 + * @remark + * 对于Object来说,只拷贝自身成员,不拷贝prototype成员 + * @meta standard + * + * @returns {Object} 拷贝后的新对象 + */ +baidu.object.clone = function (source) { + var result = source, i, len; + if (!source + || source instanceof Number + || source instanceof String + || source instanceof Boolean) { + return result; + } else if (baidu.lang.isArray(source)) { + result = []; + var resultLen = 0; + for (i = 0, len = source.length; i < len; i++) { + result[resultLen++] = baidu.object.clone(source[i]); + } + } else if (baidu.object.isPlain(source)) { + result = {}; + for (i in source) { + if (source.hasOwnProperty(i)) { + result[i] = baidu.object.clone(source[i]); + } + } + } + return result; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/object/keys.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 获取目标对象的键名列表 + * @name baidu.object.keys + * @function + * @grammar baidu.object.keys(source) + * @param {Object} source 目标对象 + * @see baidu.object.values + * + * @returns {Array} 键名列表 + */ +baidu.object.keys = function (source) { + var result = [], resultLen = 0, k; + for (k in source) { + if (source.hasOwnProperty(k)) { + result[resultLen++] = k; + } + } + return result; +}; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/object/map.js + * author: berg + * version: 1.1.0 + * date: 2010/12/14 + */ + + + +/** + * 遍历object中所有元素,将每一个元素应用方法进行转换,返回转换后的新object。 + * @name baidu.object.map + * @function + * @grammar baidu.object.map(source, iterator) + * + * @param {Array} source 需要遍历的object + * @param {Function} iterator 对每个object元素进行处理的函数 + * @return {Array} map后的object + */ +baidu.object.map = function (source, iterator) { + var results = {}; + for (var key in source) { + if (source.hasOwnProperty(key)) { + results[key] = iterator(source[key], key); + } + } + return results; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + + +/* + * 默认情况下,所有在源对象上的属性都会被非递归地合并到目标对象上 + * 并且如果目标对象上已有此属性,不会被覆盖 + */ +/** + * 合并源对象的属性到目标对象。 + * + * @name baidu.object.merge + * @function + * @grammar baidu.object.merge(target, source[, opt_options]) + * + * @param {Function} target 目标对象. + * @param {Function} source 源对象. + * @param {Object} opt_options optional merge选项. + * @config {boolean} overwrite optional 如果为真,源对象属性会覆盖掉目标对象上的已有属性,默认为假. + * @config {string[]} whiteList optional 白名单,默认为空,如果存在,只有在这里的属性才会被处理. + * @config {boolean} recursive optional 是否递归合并对象里面的object,默认为否. + * @return {object} merge后的object. + * @see baidu.object.extend + * @author berg + */ +(function() { +var isPlainObject = function(source) { + return baidu.lang.isObject(source) && !baidu.lang.isFunction(source); + }; + +function mergeItem(target, source, index, overwrite, recursive) { + if (source.hasOwnProperty(index)) { + if (recursive && isPlainObject(target[index])) { + // 如果需要递归覆盖,就递归调用merge + baidu.object.merge( + target[index], + source[index], + { + 'overwrite': overwrite, + 'recursive': recursive + } + ); + } else if (overwrite || !(index in target)) { + // 否则只处理overwrite为true,或者在目标对象中没有此属性的情况 + target[index] = source[index]; + } + } +} + +baidu.object.merge = function(target, source, opt_options) { + var i = 0, + options = opt_options || {}, + overwrite = options['overwrite'], + whiteList = options['whiteList'], + recursive = options['recursive'], + len; + + // 只处理在白名单中的属性 + if (whiteList && whiteList.length) { + len = whiteList.length; + for (; i < len; ++i) { + mergeItem(target, source, whiteList[i], overwrite, recursive); + } + } else { + for (i in source) { + mergeItem(target, source, i, overwrite, recursive); + } + } + + return target; +}; +})(); +/* + * tangram + * copyright 2011 baidu inc. all rights reserved. + * + * path: baidu/object/isEmpty.js + * author: leeight + * version: 1.1.0 + * date: 2011/04/30 + */ + + + +/** + * 检测一个对象是否是空的. + * 需要注意的是: + * 如果污染了Object.prototype或者Array.prototype,那么 + * baidu.object.isEmpty({})或者 + * baidu.object.isEmpty([])可能返回的就是false. + * @param {Object} obj 需要检测的对象. + * @return {boolean} 如果是空的对象就返回true. + */ +baidu.object.isEmpty = function(obj) { + for (var key in obj) { + return false; + } + + return true; +}; + + + + + + + + + + + + + + + + + + + + + + +/* vim: set ts=4 sw=4 sts=4 tw=100 noet: */ +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * @author: meizz + * @namespace: baidu.page.createStyleSheet + * @version: 2010-06-12 + */ + + + + + +/** + * 在页面中创建样式表对象 + * @name baidu.page.createStyleSheet + * @function + * @grammar baidu.page.createStyleSheet(options) + * @param {Object} options 配置信息 + + * @param {Document} options.document 指定在哪个document下创建,默认是当前文档 + * @param {String} options.url css文件的URL + * @param {Number} options.index 在文档里的排序索引(注意,仅IE下有效) + * @version 1.2 + * @remark + * ie 下返回值styleSheet的addRule方法不支持添加逗号分隔的css rule. + * + * @see baidu.page.createStyleSheet.StyleSheet + * + * @returns {baidu.page.createStyleSheet.StyleSheet} styleSheet对象(注意: 仅IE下,其他浏览器均返回null) + */ +baidu.page.createStyleSheet = function(options){ + var op = options || {}, + doc = op.document || document, + s; + + if (baidu.browser.ie) { + //修复ie下会请求一个undefined的bug berg 2010/08/27 + if(!op.url) + op.url = ""; + return doc.createStyleSheet(op.url, op.index); + } else { + s = ""; + op.url && (s=""); + baidu.dom.insertHTML(doc.getElementsByTagName("HEAD")[0],"beforeEnd",s); + //如果用户传入了url参数,下面访问sheet.rules的时候会报错 + if(op.url){ + return null; + } + + var sheet = doc.styleSheets[doc.styleSheets.length - 1], + rules = sheet.rules || sheet.cssRules; + return { + self : sheet + ,rules : sheet.rules || sheet.cssRules + ,addRule : function(selector, style, i) { + if (sheet.addRule) { + return sheet.addRule(selector, style, i); + } else if (sheet.insertRule) { + isNaN(i) && (i = rules.length); + return sheet.insertRule(selector +"{"+ style +"}", i); + } + } + ,removeRule : function(i) { + if (sheet.removeRule) { + sheet.removeRule(i); + } else if (sheet.deleteRule) { + isNaN(i) && (i = 0); + sheet.deleteRule(i); + } + } + } + } +}; +/* + * styleSheet对象 有两个方法 + * addRule(selector, style, i) + * removeRule(i) + * 这两个方法已经做了浏览器兼容处理 + * 一个集合 + * rules + */ +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/page/getHeight.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/03 + */ + + + +/** + * 获取页面高度 + * @name baidu.page.getHeight + * @function + * @grammar baidu.page.getHeight() + * @see baidu.page.getWidth + * + * @returns {number} 页面高度 + */ +baidu.page.getHeight = function () { + var doc = document, + body = doc.body, + html = doc.documentElement, + client = doc.compatMode == 'BackCompat' ? body : doc.documentElement; + + return Math.max(html.scrollHeight, body.scrollHeight, client.clientHeight); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/page/getWidth.js + * author: allstar, erik + * version: 1.1.0 + * date: 2009/12/03 + */ + + + +/** + * 获取页面宽度 + * @name baidu.page.getWidth + * @function + * @grammar baidu.page.getWidth() + * @see baidu.page.getHeight + * @meta standard + * @returns {number} 页面宽度 + */ +baidu.page.getWidth = function () { + var doc = document, + body = doc.body, + html = doc.documentElement, + client = doc.compatMode == 'BackCompat' ? body : doc.documentElement; + + return Math.max(html.scrollWidth, body.scrollWidth, client.clientWidth); +}; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + */ + + + + + + + + + + + +/** + * 延迟加载图片. 默认只加载可见高度以上的图片, 随着窗口滚动加载剩余图片.注意: 仅支持垂直方向. + * @name baidu.page.lazyLoadImage + * @function + * @grammar baidu.page.lazyLoadImage([options]) + * @param {Object} options + * @param {String} [options.className] 延迟加载的IMG的className,如果不传入该值将延迟加载所有IMG. + * @param {Number} [options.preloadHeight] 预加载的高度, 可见窗口下该高度内的图片将被加载. + * @param {String} [options.placeHolder] 占位图url. + * @param {Function} [options.onlazyload] 延迟加载回调函数,在实际加载时触发. + * @author rocy + */ +baidu.page.lazyLoadImage = function(options) { + options = options || {}; + options.preloadHeight = options.preloadHeight || 0; + + baidu.dom.ready(function() { + var imgs = document.getElementsByTagName('IMG'), + targets = imgs, + len = imgs.length, + i = 0, + viewOffset = getLoadOffset(), + srcAttr = 'data-tangram-ori-src', + target; + //避免循环中每次都判断className + if (options.className) { + targets = []; + for (; i < len; ++i) { + if (baidu.dom.hasClass(imgs[i], options.className)) { + targets.push(imgs[i]); + } + } + } + //计算需要加载图片的页面高度 + function getLoadOffset() { + return baidu.page.getScrollTop() + baidu.page.getViewHeight() + options.preloadHeight; + } + //加载可视图片 + for (i = 0, len = targets.length; i < len; ++i) { + target = targets[i]; + if (baidu.dom.getPosition(target).top > viewOffset) { + target.setAttribute(srcAttr, target.src); + options.placeHolder ? target.src = options.placeHolder : target.removeAttribute('src'); + } + } + //处理延迟加载 + var loadNeeded = function() { + var viewOffset = getLoadOffset(), + imgSrc, + finished = true, + i = 0, + len = targets.length; + for (; i < len; ++i) { + target = targets[i]; + imgSrc = target.getAttribute(srcAttr); + imgSrc && (finished = false); + if (baidu.dom.getPosition(target).top < viewOffset && imgSrc) { + target.src = imgSrc; + target.removeAttribute(srcAttr); + baidu.lang.isFunction(options.onlazyload) && options.onlazyload(target); + } + } + //当全部图片都已经加载, 去掉事件监听 + finished && baidu.un(window, 'scroll', loadNeeded); + }; + + baidu.on(window, 'scroll', loadNeeded); + }); +}; + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/page/load.js + * author: rocy + * version: 1.0.0 + * date: 2010/11/29 + */ + + + + + + + + + +/** + * + * 加载一组资源,支持多种格式资源的串/并行加载,支持每个文件有单独回调函数。 + * + * @name baidu.page.load + * @function + * @grammar baidu.page.load(resources[, options]) + * + * @param {Array} resources 资源描述数组,单个resource含如下属性. + * @param {String} resources.url 链接地址. + * @param {String} [resources.type] 取值["css","js","html"],默认参考文件后缀. + * @param {String} [resources.requestType] 取值["dom","ajax"],默认js和css用dom标签,html用ajax. + * @param {Function} resources.onload 当前resource加载完成的回调函数,若requestType为ajax,参数为xhr(可能失效),responseText;若requestType为dom,无参数,执行时this为相应dom标签。. + * + * @param {Object} [options] 可选参数. + * @param {Function} [options.onload] 资源全部加载完成的回调函数,无参数。. + * @param {Boolean} [options.parallel] 是否并行加载,默认为false,串行。. + * @param {Boolean} [ignoreAllLoaded] 全部加载之后不触发回调事件.主要用于内部实现. + * + * + * @remark + * //串行实例 + * baidu.page.load([ + * { url : "http://img.baidu.com/js/tangram-1.3.2.js" }, + * {url : "http://xxx.baidu.com/xpath/logicRequire.js", + * onload : fnOnRequireLoaded + * }, + * { url : "http://xxx.baidu.com/xpath/target.js" } + * ],{ + * onload : fnWhenTargetOK + * }); + * //并行实例 + * baidu.page.load([ + * { + * url : "http://xxx.baidu.com/xpath/template.html", + * onload : fnExtractTemplate + * }, + * { url : "http://xxx.baidu.com/xpath/style.css"}, + * { + * url : "http://xxx.baidu.com/xpath/import.php?f=baidu.*", + * type : "js" + * }, + * { + * url : "http://xxx.baidu.com/xpath/target.js", + * }, + * { + * url : "http://xxx.baidu.com/xpath/jsonData.js", + * requestType : "ajax", + * onload : fnExtractData + * } + * ],{ + * parallel : true, + * onload : fnWhenEverythingIsOK + * }); + */ +baidu.page.load = function(resources, options, ignoreAllLoaded) { + //TODO failure, 整体onload能不能每个都调用; resources.charset + options = options || {}; + var self = baidu.page.load, + cache = self._cache = self._cache || {}, + loadingCache = self._loadingCache = self._loadingCache || {}, + parallel = options.parallel; + + function allLoadedChecker() { + for (var i = 0, len = resources.length; i < len; ++i) { + if (! cache[resources[i].url]) { + setTimeout(arguments.callee, 10); + return; + } + } + options.onload(); + }; + + function loadByDom(res, callback) { + var node, loaded, onready; + switch (res.type.toLowerCase()) { + case 'css' : + node = document.createElement('link'); + node.setAttribute('rel', 'stylesheet'); + node.setAttribute('type', 'text/css'); + break; + case 'js' : + node = document.createElement('script'); + node.setAttribute('type', 'text/javascript'); + node.setAttribute('charset', res.charset || self.charset); + break; + case 'html' : + node = document.createElement('iframe'); + node.frameBorder = 'none'; + break; + default : + return; + } + + // HTML,JS works on all browsers, CSS works only on IE. + onready = function() { + if (!loaded && (!this.readyState || + this.readyState === 'loaded' || + this.readyState === 'complete')) { + loaded = true; + // 防止内存泄露 + baidu.un(node, 'load', onready); + baidu.un(node, 'readystatechange', onready); + //node.onload = node.onreadystatechange = null; + callback.call(window, node); + } + }; + baidu.on(node, 'load', onready); + baidu.on(node, 'readystatechange', onready); + //CSS has no onload event on firefox and webkit platform, so hack it. + if (res.type == 'css') { + (function() { + //避免重复加载 + if (loaded) return; + try { + node.sheet.cssRule; + } catch (e) { + setTimeout(arguments.callee, 20); + return; + } + loaded = true; + callback.call(window, node); + })(); + } + + node.href = node.src = res.url; + document.getElementsByTagName('head')[0].appendChild(node); + } + + //兼容第一个参数直接是资源地址. + baidu.lang.isString(resources) && (resources = [{url: resources}]); + + //避免递归出错,添加容错. + if (! (resources && resources.length)) return; + + function loadResources(res) { + var url = res.url, + shouldContinue = !!parallel, + cacheData, + callback = function(textOrNode) { + //ajax存入responseText,dom存入节点,用于保证onload的正确执行. + cache[res.url] = textOrNode; + delete loadingCache[res.url]; + + if (baidu.lang.isFunction(res.onload)) { + //若返回false, 则停止接下来的加载. + if (false === res.onload.call(window, textOrNode)) { + return; + } + } + //串行时递归执行 + !parallel && self(resources.slice(1), options, true); + if ((! ignoreAllLoaded) && baidu.lang.isFunction(options.onload)) { + allLoadedChecker(); + } + }; + //默认用后缀名, 并防止后缀名大写 + res.type = res.type || url.substr(url.lastIndexOf('.') + 1); + //默认html格式用ajax请求,其他都使用dom标签方式请求. + res.requestType = res.requestType || (res.type == 'html' ? 'ajax' : 'dom'); + + if (cacheData = cache[res.url]) { + callback(cacheData); + return shouldContinue; + } + if (!options.refresh && loadingCache[res.url]) { + setTimeout(function() {loadResources(res);}, 10); + return shouldContinue; + } + loadingCache[res.url] = true; + if (res.requestType.toLowerCase() == 'dom') { + loadByDom(res, callback); + }else {//ajax + baidu.ajax.get(res.url, function(xhr, responseText) {callback(responseText);}); + } + //串行模式,通过callback方法执行后续 + return shouldContinue; + }; + + baidu.each(resources, loadResources); +}; +//默认编码设置为UTF8 +baidu.page.load.charset = 'UTF8'; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/page/loadCssFile.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/20 + */ + + + +/** + * 动态在页面上加载一个外部css文件 + * @name baidu.page.loadCssFile + * @function + * @grammar baidu.page.loadCssFile(path) + * @param {string} path css文件路径 + * @see baidu.page.loadJsFile + */ + +baidu.page.loadCssFile = function (path) { + var element = document.createElement("link"); + + element.setAttribute("rel", "stylesheet"); + element.setAttribute("type", "text/css"); + element.setAttribute("href", path); + + document.getElementsByTagName("head")[0].appendChild(element); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/page/loadJsFile.js + * author: allstar + * version: 1.1.0 + * date: 2009/11/20 + */ + + + +/** + * 动态在页面上加载一个外部js文件 + * @name baidu.page.loadJsFile + * @function + * @grammar baidu.page.loadJsFile(path) + * @param {string} path js文件路径 + * @see baidu.page.loadCssFile + */ +baidu.page.loadJsFile = function (path) { + var element = document.createElement('script'); + + element.setAttribute('type', 'text/javascript'); + element.setAttribute('src', path); + element.setAttribute('defer', 'defer'); + + document.getElementsByTagName("head")[0].appendChild(element); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * @namespace baidu.platform 判断平台类型和特性的属性。 + * @author jz + */ +baidu.platform = baidu.platform || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 判断是否为android平台 + * @property android 是否为android平台 + * @grammar baidu.platform.android + * @meta standard + * @see baidu.platform.x11,baidu.platform.windows,baidu.platform.macintosh,baidu.platform.iphone,baidu.platform.ipad + * @author jz + */ +baidu.platform.isAndroid = /android/i.test(navigator.userAgent); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 判断是否为ipad平台 + * @property ipad 是否为ipad平台 + * @grammar baidu.platform.ipad + * @meta standard + * @see baidu.platform.x11,baidu.platform.windows,baidu.platform.macintosh,baidu.platform.iphone,baidu.platform.android + * @author jz + */ +baidu.platform.isIpad = /ipad/i.test(navigator.userAgent); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 判断是否为iphone平台 + * @property iphone 是否为iphone平台 + * @grammar baidu.platform.iphone + * @meta standard + * @see baidu.platform.x11,baidu.platform.windows,baidu.platform.macintosh,baidu.platform.ipad,baidu.platform.android + * @author jz + */ +baidu.platform.isIphone = /iphone/i.test(navigator.userAgent); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 判断是否为macintosh平台 + * @property macintosh 是否为macintosh平台 + * @grammar baidu.platform.macintosh + * @meta standard + * @see baidu.platform.x11,baidu.platform.windows,baidu.platform.iphone,baidu.platform.ipad,baidu.platform.android + * @author jz + */ +baidu.platform.isMacintosh = /macintosh/i.test(navigator.userAgent); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 判断是否为windows平台 + * @property windows 是否为windows平台 + * @grammar baidu.platform.windows + * @meta standard + * @see baidu.platform.x11,baidu.platform.macintosh,baidu.platform.iphone,baidu.platform.ipad,baidu.platform.android + * @author jz + */ +baidu.platform.isWindows = /windows/i.test(navigator.userAgent); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 判断是否为x11平台 + * @property x11 是否为x11平台 + * @grammar baidu.platform.x11 + * @meta standard + * @see baidu.platform.windows,baidu.platform.macintosh,baidu.platform.iphone,baidu.platform.ipad,baidu.platform.android + * @author jz + */ +baidu.platform.isX11 = /x11/i.test(navigator.userAgent); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/sio.js + * author: erik + * version: 1.1.0 + * date: 2009/12/16 + */ + + +/** + * @namespace baidu.sio 使用动态script标签请求服务器资源,包括由服务器端的回调和浏览器端的回调。 + */ +baidu.sio = baidu.sio || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * + * @param {HTMLElement} src script节点 + * @param {String} url script节点的地址 + * @param {String} [charset] 编码 + */ +baidu.sio._createScriptTag = function(scr, url, charset){ + scr.setAttribute('type', 'text/javascript'); + charset && scr.setAttribute('charset', charset); + scr.setAttribute('src', url); + document.getElementsByTagName('head')[0].appendChild(scr); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 删除script的属性,再删除script标签,以解决修复内存泄漏的问题 + * + * @param {HTMLElement} src script节点 + */ +baidu.sio._removeScriptTag = function(scr){ + if (scr.clearAttributes) { + scr.clearAttributes(); + } else { + for (var attr in scr) { + if (scr.hasOwnProperty(attr)) { + delete scr[attr]; + } + } + } + if(scr && scr.parentNode){ + scr.parentNode.removeChild(scr); + } + scr = null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + + +/** + * 通过script标签加载数据,加载完成由浏览器端触发回调 + * @name baidu.sio.callByBrowser + * @function + * @grammar baidu.sio.callByBrowser(url, opt_callback, opt_options) + * @param {string} url 加载数据的url + * @param {Function|string} opt_callback 数据加载结束时调用的函数或函数名 + * @param {Object} opt_options 其他可选项 + * @config {String} [charset] script的字符集 + * @config {Integer} [timeOut] 超时时间,超过这个时间将不再响应本请求,并触发onfailure函数 + * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数 + * @remark + * 1、与callByServer不同,callback参数只支持Function类型,不支持string。 + * 2、如果请求了一个不存在的页面,callback函数在IE/opera下也会被调用,因此使用者需要在onsuccess函数中判断数据是否正确加载。 + * @meta standard + * @see baidu.sio.callByServer + */ +baidu.sio.callByBrowser = function (url, opt_callback, opt_options) { + var scr = document.createElement("SCRIPT"), + scriptLoaded = 0, + options = opt_options || {}, + charset = options['charset'], + callback = opt_callback || function(){}, + timeOut = options['timeOut'] || 0, + timer; + + // IE和opera支持onreadystatechange + // safari、chrome、opera支持onload + scr.onload = scr.onreadystatechange = function () { + // 避免opera下的多次调用 + if (scriptLoaded) { + return; + } + + var readyState = scr.readyState; + if ('undefined' == typeof readyState + || readyState == "loaded" + || readyState == "complete") { + scriptLoaded = 1; + try { + callback(); + clearTimeout(timer); + } finally { + scr.onload = scr.onreadystatechange = null; + baidu.sio._removeScriptTag(scr); + } + } + }; + + if( timeOut ){ + timer = setTimeout(function(){ + scr.onload = scr.onreadystatechange = null; + baidu.sio._removeScriptTag(scr); + options.onfailure && options.onfailure(); + }, timeOut); + } + + baidu.sio._createScriptTag(scr, url, charset); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + + + + +/** + * 通过script标签加载数据,加载完成由服务器端触发回调 + * @name baidu.sio.callByServer + * @function + * @grammar baidu.sio.callByServer(url, callback[, opt_options]) + * @param {string} url 加载数据的url. + * @param {Function|string} callback 服务器端调用的函数或函数名。如果没有指定本参数,将在URL中寻找options['queryField']做为callback的方法名. + * @param {Object} opt_options 加载数据时的选项. + * @config {string} [charset] script的字符集 + * @config {string} [queryField] 服务器端callback请求字段名,默认为callback + * @config {Integer} [timeOut] 超时时间(单位:ms),超过这个时间将不再响应本请求,并触发onfailure函数 + * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数 + * @remark + * 如果url中已经包含key为“options['queryField']”的query项,将会被替换成callback中参数传递或自动生成的函数名。 + * @meta standard + * @see baidu.sio.callByBrowser + */ +baidu.sio.callByServer = function(url, callback, opt_options) { + var scr = document.createElement('SCRIPT'), + prefix = 'bd__cbs__', + callbackName, + callbackImpl, + options = opt_options || {}, + charset = options['charset'], + queryField = options['queryField'] || 'callback', + timeOut = options['timeOut'] || 0, + timer, + reg = new RegExp('(\\?|&)' + queryField + '=([^&]*)'), + matches; + + if (baidu.lang.isFunction(callback)) { + callbackName = prefix + Math.floor(Math.random() * 2147483648).toString(36); + window[callbackName] = getCallBack(0); + } else if(baidu.lang.isString(callback)){ + // 如果callback是一个字符串的话,就需要保证url是唯一的,不要去改变它 + // TODO 当调用了callback之后,无法删除动态创建的script标签 + callbackName = callback; + } else { + if (matches = reg.exec(url)) { + callbackName = matches[2]; + } + } + + if( timeOut ){ + timer = setTimeout(getCallBack(1), timeOut); + } + + //如果用户在URL中已有callback,用参数传入的callback替换之 + url = url.replace(reg, '\x241' + queryField + '=' + callbackName); + + if (url.search(reg) < 0) { + url += (url.indexOf('?') < 0 ? '?' : '&') + queryField + '=' + callbackName; + } + baidu.sio._createScriptTag(scr, url, charset); + + /* + * 返回一个函数,用于立即(挂在window上)或者超时(挂在setTimeout中)时执行 + */ + function getCallBack(onTimeOut){ + /*global callbackName, callback, scr, options;*/ + return function(){ + try { + if( onTimeOut ){ + options.onfailure && options.onfailure(); + }else{ + callback.apply(window, arguments); + clearTimeout(timer); + } + window[callbackName] = null; + delete window[callbackName]; + } catch (exception) { + // ignore the exception + } finally { + baidu.sio._removeScriptTag(scr); + } + } + } +}; +/* + * Tangram + * Copyright 2011 Baidu Inc. All rights reserved. + */ + + + +/** + * 通过请求一个图片的方式令服务器存储一条日志 + * author: int08h,leeight + * @param {string} url 要发送的地址. + */ +baidu.sio.log = function(url) { + var img = new Image(), + key = 'tangram_sio_log_' + Math.floor(Math.random() * + 2147483648).toString(36); + + // 这里一定要挂在window下 + // 在IE中,如果没挂在window下,这个img变量又正好被GC的话,img的请求会abort + // 导致服务器收不到日志 + window[key] = img; + + img.onload = img.onerror = img.onabort = function() { + // 下面这句非常重要 + // 如果这个img很不幸正好加载了一个存在的资源,又是个gif动画 + // 则在gif动画播放过程中,img会多次触发onload + // 因此一定要清空 + img.onload = img.onerror = img.onabort = null; + + window[key] = null; + + // 下面这句非常重要 + // new Image创建的是DOM,DOM的事件中形成闭包环引用DOM是典型的内存泄露 + // 因此这里一定要置为null + img = null; + }; + + // 一定要在注册了事件之后再设置src + // 不然如果图片是读缓存的话,会错过事件处理 + // 最后,对于url最好是添加客户端时间来防止缓存 + // 同时服务器也配合一下传递Cache-Control: no-cache; + img.src = url; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/decodeHTML.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 对目标字符串进行html解码 + * @name baidu.string.decodeHTML + * @function + * @grammar baidu.string.decodeHTML(source) + * @param {string} source 目标字符串 + * @shortcut decodeHTML + * @meta standard + * @see baidu.string.encodeHTML + * + * @returns {string} html解码后的字符串 + */ +baidu.string.decodeHTML = function (source) { + var str = String(source) + .replace(/"/g,'"') + .replace(/</g,'<') + .replace(/>/g,'>') + .replace(/&/g, "&"); + //处理转义的中文和实体字符 + return str.replace(/&#([\d]+);/g, function(_0, _1){ + return String.fromCharCode(parseInt(_1, 10)); + }); +}; + +baidu.decodeHTML = baidu.string.decodeHTML; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/encodeHTML.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 对目标字符串进行html编码 + * @name baidu.string.encodeHTML + * @function + * @grammar baidu.string.encodeHTML(source) + * @param {string} source 目标字符串 + * @remark + * 编码字符有5个:&<>"' + * @shortcut encodeHTML + * @meta standard + * @see baidu.string.decodeHTML + * + * @returns {string} html编码后的字符串 + */ +baidu.string.encodeHTML = function (source) { + return String(source) + .replace(/&/g,'&') + .replace(//g,'>') + .replace(/"/g, """) + .replace(/'/g, "'"); +}; + +baidu.encodeHTML = baidu.string.encodeHTML; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/filterFormat.js + * author: rocy + * version: 1.1.2 + * date: 2010/06/10 + */ + + + +/** + * 对目标字符串进行格式化,支持过滤 + * @name baidu.string.filterFormat + * @function + * @grammar baidu.string.filterFormat(source, opts) + * @param {string} source 目标字符串 + * @param {Object|string...} opts 提供相应数据的对象 + * @version 1.2 + * @remark + * +在 baidu.string.format的基础上,增加了过滤功能. 目标字符串中的#{url|escapeUrl},
+会替换成baidu.string.filterFormat["escapeUrl"](opts.url);
+过滤函数需要之前挂载在baidu.string.filterFormat属性中. + + * @see baidu.string.format,baidu.string.filterFormat.escapeJs,baidu.string.filterFormat.escapeString,baidu.string.filterFormat.toInt + * @returns {string} 格式化后的字符串 + */ +baidu.string.filterFormat = function (source, opts) { + var data = Array.prototype.slice.call(arguments,1), toString = Object.prototype.toString; + if(data.length){ + data = data.length == 1 ? + /* ie 下 Object.prototype.toString.call(null) == '[object Object]' */ + (opts !== null && (/\[object Array\]|\[object Object\]/.test(toString.call(opts))) ? opts : data) + : data; + return source.replace(/#\{(.+?)\}/g, function (match, key){ + var filters, replacer, i, len, func; + if(!data) return ''; + filters = key.split("|"); + replacer = data[filters[0]]; + // chrome 下 typeof /a/ == 'function' + if('[object Function]' == toString.call(replacer)){ + replacer = replacer(filters[0]/*key*/); + } + for(i=1,len = filters.length; i< len; ++i){ + func = baidu.string.filterFormat[filters[i]]; + if('[object Function]' == toString.call(func)){ + replacer = func(replacer); + } + } + return ( ('undefined' == typeof replacer || replacer === null)? '' : replacer); + }); + } + return source; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/filterFormat/escapeJs.js + * author: rocy + * version: 1.1.2 + * date: 2010/06/12 + */ + + +/** + * 对js片段的字符做安全转义,编码低于255的都将转换成\x加16进制数 + * @name baidu.string.filterFormat.escapeJs + * @function + * @grammar baidu.string.filterFormat.escapeJs(source) + * @param {String} source 待转义字符串 + * + * @see baidu.string.filterFormat,baidu.string.filterFormat.escapeString,baidu.string.filterFormat.toInt + * @version 1.2 + * @return {String} 转义之后的字符串 + */ +baidu.string.filterFormat.escapeJs = function(str){ + if(!str || 'string' != typeof str) return str; + var i,len,charCode,ret = []; + for(i=0, len=str.length; i < len; ++i){ + charCode = str.charCodeAt(i); + if(charCode > 255){ + ret.push(str.charAt(i)); + } else{ + ret.push('\\x' + charCode.toString(16)); + } + } + return ret.join(''); +}; +baidu.string.filterFormat.js = baidu.string.filterFormat.escapeJs; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/filterFormat/escapeString.js + * author: rocy + * version: 1.1.2 + * date: 2010/06/12 + */ + + +/** + * 对字符串做安全转义,转义字符包括: 单引号,双引号,左右小括号,斜杠,反斜杠,上引号. + * @name baidu.string.filterFormat.escapeString + * @function + * @grammar baidu.string.filterFormat.escapeString(source) + * @param {String} source 待转义字符串 + * + * @see baidu.string.filterFormat,baidu.string.filterFormat.escapeJs,baidu.string.filterFormat.toInt + * @version 1.2 + * @return {String} 转义之后的字符串 + */ +baidu.string.filterFormat.escapeString = function(str){ + if(!str || 'string' != typeof str) return str; + return str.replace(/["'<>\\\/`]/g, function($0){ + return '&#'+ $0.charCodeAt(0) +';'; + }); +}; + +baidu.string.filterFormat.e = baidu.string.filterFormat.escapeString; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/filterFormat/toInt.js + * author: rocy + * version: 1.1.2 + * date: 2010/06/12 + */ + + +/** + * 对数字做安全转义,确保是十进制数字;否则返回0. + * @name baidu.string.filterFormat.toInt + * @function + * @grammar baidu.string.filterFormat.toInt(source) + * @param {String} source 待转义字符串 + * + * @see baidu.string.filterFormat,baidu.string.filterFormat.escapeJs,baidu.string.filterFormat.escapeString + * @version 1.2 + * @return {Number} 转义之后的数字 + */ +baidu.string.filterFormat.toInt = function(str){ + return parseInt(str, 10) || 0; +}; +baidu.string.filterFormat.i = baidu.string.filterFormat.toInt; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/format.js + * author: dron, erik + * version: 1.1.0 + * date: 2009/11/30 + */ + + + +/** + * 对目标字符串进行格式化 + * @name baidu.string.format + * @function + * @grammar baidu.string.format(source, opts) + * @param {string} source 目标字符串 + * @param {Object|string...} opts 提供相应数据的对象或多个字符串 + * @remark + * +opts参数为“Object”时,替换目标字符串中的#{property name}部分。
+opts为“string...”时,替换目标字符串中的#{0}、#{1}...部分。 + + * @shortcut format + * @meta standard + * + * @returns {string} 格式化后的字符串 + */ +baidu.string.format = function (source, opts) { + source = String(source); + var data = Array.prototype.slice.call(arguments,1), toString = Object.prototype.toString; + if(data.length){ + data = data.length == 1 ? + /* ie 下 Object.prototype.toString.call(null) == '[object Object]' */ + (opts !== null && (/\[object Array\]|\[object Object\]/.test(toString.call(opts))) ? opts : data) + : data; + return source.replace(/#\{(.+?)\}/g, function (match, key){ + var replacer = data[key]; + // chrome 下 typeof /a/ == 'function' + if('[object Function]' == toString.call(replacer)){ + replacer = replacer(key); + } + return ('undefined' == typeof replacer ? '' : replacer); + }); + } + return source; +}; + +// 声明快捷方法 +baidu.format = baidu.string.format; +/* + * Tangram + * Copyright 2010 Baidu Inc. All rights reserved. + * + * @author: meizz + * @namespace: baidu.string.formatColor + * @version: 2010-01-23 + */ + + + +/** + * 将各种浏览器里的颜色值转换成 #RRGGBB 的格式 + * @name baidu.string.formatColor + * @function + * @grammar baidu.string.formatColor(color) + * @param {string} color 颜色值字符串 + * @version 1.3 + * + * @returns {string} #RRGGBB格式的字符串或空 + */ +(function(){ + // 将正则表达式预创建,可提高效率 + var reg1 = /^\#[\da-f]{6}$/i, + reg2 = /^rgb\((\d+), (\d+), (\d+)\)$/, + keyword = { + black: '#000000', + silver: '#c0c0c0', + gray: '#808080', + white: '#ffffff', + maroon: '#800000', + red: '#ff0000', + purple: '#800080', + fuchsia: '#ff00ff', + green: '#008000', + lime: '#00ff00', + olive: '#808000', + yellow: '#ffff0', + navy: '#000080', + blue: '#0000ff', + teal: '#008080', + aqua: '#00ffff' + }; + + baidu.string.formatColor = function(color) { + if(reg1.test(color)) { + // #RRGGBB 直接返回 + return color; + } else if(reg2.test(color)) { + // 非IE中的 rgb(0, 0, 0) + for (var s, i=1, color="#"; i<4; i++) { + s = parseInt(RegExp["\x24"+ i]).toString(16); + color += ("00"+ s).substr(s.length); + } + return color; + } else if(/^\#[\da-f]{3}$/.test(color)) { + // 简写的颜色值: #F00 + var s1 = color.charAt(1), + s2 = color.charAt(2), + s3 = color.charAt(3); + return "#"+ s1 + s1 + s2 + s2 + s3 + s3; + }else if(keyword[color]) + return keyword[color]; + + return ""; + }; +})(); + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/getByteLength.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + + +/** + * 获取目标字符串在gbk编码下的字节长度 + * @name baidu.string.getByteLength + * @function + * @grammar baidu.string.getByteLength(source) + * @param {string} source 目标字符串 + * @remark + * 获取字符在gbk编码下的字节长度, 实现原理是认为大于127的就一定是双字节。如果字符超出gbk编码范围, 则这个计算不准确 + * @meta standard + * @see baidu.string.subByte + * + * @returns {number} 字节长度 + */ +baidu.string.getByteLength = function (source) { + return String(source).replace(/[^\x00-\xff]/g, "ci").length; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/subByte.js + * author: dron, erik, berg + * version: 1.2 + * date: 2010-06-30 + */ + + + +/** + * 对目标字符串按gbk编码截取字节长度 + * @name baidu.string.subByte + * @function + * @grammar baidu.string.subByte(source, length) + * @param {string} source 目标字符串 + * @param {number} length 需要截取的字节长度 + * @param {string} [tail] 追加字符串,可选. + * @remark + * 截取过程中,遇到半个汉字时,向下取整。 + * @see baidu.string.getByteLength + * + * @returns {string} 字符串截取结果 + */ +baidu.string.subByte = function (source, length, tail) { + source = String(source); + tail = tail || ''; + if (length < 0 || baidu.string.getByteLength(source) <= length) { + return source + tail; + } + + //thanks 加宽提供优化方法 + source = source.substr(0,length).replace(/([^\x00-\xff])/g,"\x241 ")//双字节字符替换成两个 + .substr(0,length)//截取长度 + .replace(/[^\x00-\xff]$/,"")//去掉临界双字节字符 + .replace(/([^\x00-\xff]) /g,"\x241");//还原 + return source + tail; + +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/toHalfWidth.js + * author: erik + * version: 1.1.0 + * date: 2009/11/15 + */ + + +/** + * 将目标字符串中常见全角字符转换成半角字符 + * @name baidu.string.toHalfWidth + * @function + * @grammar baidu.string.toHalfWidth(source) + * @param {string} source 目标字符串 + * @remark + * +将全角的字符转成半角, 将“&#xFF01;”至“&#xFF5E;”范围的全角转成“&#33;”至“&#126;”, 还包括全角空格包括常见的全角数字/空格/字母, 用于需要同时支持全半角的转换, 具体转换列表如下("空格"未列出):

+ +! => !
+" => "
+# => #
+$ => $
+% => %
+& => &
+' => '
+( => (
+) => )
+* => *
++ => +
+, => ,
+- => -
+. => .
+/ => /
+0 => 0
+1 => 1
+2 => 2
+3 => 3
+4 => 4
+5 => 5
+6 => 6
+7 => 7
+8 => 8
+9 => 9
+: => :
+; => ;
+< => <
+= => =
+> => >
+? => ?
+@ => @
+A => A
+B => B
+C => C
+D => D
+E => E
+F => F
+G => G
+H => H
+I => I
+J => J
+K => K
+L => L
+M => M
+N => N
+O => O
+P => P
+Q => Q
+R => R
+S => S
+T => T
+U => U
+V => V
+W => W
+X => X
+Y => Y
+Z => Z
+[ => [
+\ => \
+] => ]
+^ => ^
+_ => _
+` => `
+a => a
+b => b
+c => c
+d => d
+e => e
+f => f
+g => g
+h => h
+i => i
+j => j
+k => k
+l => l
+m => m
+n => n
+o => o
+p => p
+q => q
+r => r
+s => s
+t => t
+u => u
+v => v
+w => w
+x => x
+y => y
+z => z
+{ => {
+| => |
+} => }
+~ => ~
+ + * + * @returns {string} 转换后的字符串 + */ + +baidu.string.toHalfWidth = function (source) { + return String(source).replace(/[\uFF01-\uFF5E]/g, + function(c){ + return String.fromCharCode(c.charCodeAt(0) - 65248); + }).replace(/\u3000/g," "); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/string/wbr.js + * author: erik + * version: 1.1.0 + * date: 2009/11/30 + */ + + + +/** + * 为目标字符串添加wbr软换行 + * @name baidu.string.wbr + * @function + * @grammar baidu.string.wbr(source) + * @param {string} source 目标字符串 + * @remark + * +1.支持html标签、属性以及字符实体。
+2.任意字符中间都会插入wbr标签,对于过长的文本,会造成dom节点元素增多,占用浏览器资源。 +3.在opera下,浏览器默认css不会为wbr加上样式,导致没有换行效果,可以在css中加上 wbr:after { content: "\00200B" } 解决此问题 + + * + * @returns {string} 添加软换行后的字符串 + */ +baidu.string.wbr = function (source) { + return String(source) + .replace(/(?:<[^>]+>)|(?:&#?[0-9a-z]{2,6};)|(.{1})/gi, '$&') + .replace(/>/g, '>'); +}; +/* + * tangram + * copyright 2011 baidu inc. all rights reserved. + * + * path: baidu/string/stripTags.js + * author: leeight + * version: 1.1.0 + * date: 2011/04/30 + */ + + + +/** + * 去掉字符串中的html标签 + * @param {string} source 要处理的字符串. + * @return {string} + */ +baidu.string.stripTags = function(source) { + return String(source || '').replace(/<[^>]+>/g, ''); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/swf.js + * author: erik + * version: 1.1.0 + * date: 2009/11/16 + */ + + +/** + * @namespace baidu.swf 操作flash对象的方法,包括创建flash对象、获取flash对象以及判断flash插件的版本号。 +*/ +baidu.swf = baidu.swf || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/swf/getMovie.js + * author: erik + * version: 1.1.0 + * date: 2009/11/16 + */ + + + + + +/** + * 获得flash对象的实例 + * @name baidu.swf.getMovie + * @function + * @grammar baidu.swf.getMovie(name) + * @param {string} name flash对象的名称 + * @see baidu.swf.create + * @meta standard + * @returns {HTMLElement} flash对象的实例 + */ +baidu.swf.getMovie = function (name) { + //ie9下, Object标签和embed标签嵌套的方式生成flash时, + //会导致document[name]多返回一个Object元素,而起作用的只有embed标签 + var movie = document[name], ret; + return baidu.browser.ie == 9 ? + movie && movie.length ? + (ret = baidu.array.remove(baidu.lang.toArray(movie),function(item){ + return item.tagName.toLowerCase() != "embed"; + })).length == 1 ? ret[0] : ret + : movie + : movie || window[name]; +}; +/* + * Tangram + * Copyright 2011 Baidu Inc. All rights reserved. + */ + + + + + + +/** + * Js 调用 Flash方法的代理类. + * @function + * @name baidu.swf.Proxy + * @grammar new baidu.swf.Proxy(id, property, [, loadedHandler]) + * @param {string} id Flash的元素id.object标签id, embed标签name. + * @param {string} property Flash的方法或者属性名称,用来检测Flash是否初始化好了. + * @param {Function} loadedHandler 初始化之后的回调函数. + * @remark Flash对应的DOM元素必须已经存在, 否则抛错. 可以使用baidu.swf.create预先创建Flash对应的DOM元素. + * @author liyubei@baidu.com (leeight) + */ +baidu.swf.Proxy = function(id, property, loadedHandler) { + /** + * 页面上的Flash对象 + * @type {HTMLElement} + */ + var me = this, + flash = this._flash = baidu.swf.getMovie(id), + timer; + if (! property) { + return this; + } + timer = setInterval(function() { + try { + /** @preserveTry */ + if (flash[property]) { + me._initialized = true; + clearInterval(timer); + if (loadedHandler) { + loadedHandler(); + } + } + } catch (e) { + } + }, 100); +}; +/** + * 获取flash对象. + * @return {HTMLElement} Flash对象. + */ +baidu.swf.Proxy.prototype.getFlash = function() { + return this._flash; +}; +/** + * 判断Flash是否初始化完成,可以与js进行交互. + */ +baidu.swf.Proxy.prototype.isReady = function() { + return !! this._initialized; +}; +/** + * 调用Flash中的某个方法 + * @param {string} methodName 方法名. + * @param {...*} var_args 方法的参数. + */ +baidu.swf.Proxy.prototype.call = function(methodName, var_args) { + try { + var flash = this.getFlash(), + args = Array.prototype.slice.call(arguments); + + args.shift(); + if (flash[methodName]) { + flash[methodName].apply(flash, args); + } + } catch (e) { + } +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/swf/version.js + * author: erik + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 浏览器支持的flash插件版本 + * @property version 浏览器支持的flash插件版本 + * @grammar baidu.swf.version + * @meta standard + */ +baidu.swf.version = (function () { + var n = navigator; + if (n.plugins && n.mimeTypes.length) { + var plugin = n.plugins["Shockwave Flash"]; + if (plugin && plugin.description) { + return plugin.description + .replace(/([a-zA-Z]|\s)+/, "") + .replace(/(\s)+r/, ".") + ".0"; + } + } else if (window.ActiveXObject && !window.opera) { + for (var i = 12; i >= 2; i--) { + try { + var c = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + i); + if (c) { + var version = c.GetVariable("$version"); + return version.replace(/WIN/g,'').replace(/,/g,'.'); + } + } catch(e) {} + } + } +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/swf/createHTML.js + * author: erik + * version: 1.1.0 + * date: 2009/11/17 + */ + + + + +/** + * 创建flash对象的html字符串 + * @name baidu.swf.createHTML + * @function + * @grammar baidu.swf.createHTML(options) + * + * @param {Object} options 创建flash的选项参数 + * @param {string} options.id 要创建的flash的标识 + * @param {string} options.url flash文件的url + * @param {String} options.errorMessage 未安装flash player或flash player版本号过低时的提示 + * @param {string} options.ver 最低需要的flash player版本号 + * @param {string} options.width flash的宽度 + * @param {string} options.height flash的高度 + * @param {string} options.align flash的对齐方式,允许值:middle/left/right/top/bottom + * @param {string} options.base 设置用于解析swf文件中的所有相对路径语句的基本目录或URL + * @param {string} options.bgcolor swf文件的背景色 + * @param {string} options.salign 设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br + * @param {boolean} options.menu 是否显示右键菜单,允许值:true/false + * @param {boolean} options.loop 播放到最后一帧时是否重新播放,允许值: true/false + * @param {boolean} options.play flash是否在浏览器加载时就开始播放。允许值:true/false + * @param {string} options.quality 设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best + * @param {string} options.scale 设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit + * @param {string} options.wmode 设置flash的显示模式。允许值:window/opaque/transparent + * @param {string} options.allowscriptaccess 设置flash与页面的通信权限。允许值:always/never/sameDomain + * @param {string} options.allownetworking 设置swf文件中允许使用的网络API。允许值:all/internal/none + * @param {boolean} options.allowfullscreen 是否允许flash全屏。允许值:true/false + * @param {boolean} options.seamlesstabbing 允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false + * @param {boolean} options.devicefont 设置静态文本对象是否以设备字体呈现。允许值:true/false + * @param {boolean} options.swliveconnect 第一次加载flash时浏览器是否应启动Java。允许值:true/false + * @param {Object} options.vars 要传递给flash的参数,支持JSON或string类型。 + * + * @see baidu.swf.create + * @meta standard + * @returns {string} flash对象的html字符串 + */ +baidu.swf.createHTML = function (options) { + options = options || {}; + var version = baidu.swf.version, + needVersion = options['ver'] || '6.0.0', + vUnit1, vUnit2, i, k, len, item, tmpOpt = {}, + encodeHTML = baidu.string.encodeHTML; + + // 复制options,避免修改原对象 + for (k in options) { + tmpOpt[k] = options[k]; + } + options = tmpOpt; + + // 浏览器支持的flash插件版本判断 + if (version) { + version = version.split('.'); + needVersion = needVersion.split('.'); + for (i = 0; i < 3; i++) { + vUnit1 = parseInt(version[i], 10); + vUnit2 = parseInt(needVersion[i], 10); + if (vUnit2 < vUnit1) { + break; + } else if (vUnit2 > vUnit1) { + return ''; // 需要更高的版本号 + } + } + } else { + return ''; // 未安装flash插件 + } + + var vars = options['vars'], + objProperties = ['classid', 'codebase', 'id', 'width', 'height', 'align']; + + // 初始化object标签需要的classid、codebase属性值 + options['align'] = options['align'] || 'middle'; + options['classid'] = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000'; + options['codebase'] = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0'; + options['movie'] = options['url'] || ''; + delete options['vars']; + delete options['url']; + + // 初始化flashvars参数的值 + if ('string' == typeof vars) { + options['flashvars'] = vars; + } else { + var fvars = []; + for (k in vars) { + item = vars[k]; + fvars.push(k + "=" + encodeURIComponent(item)); + } + options['flashvars'] = fvars.join('&'); + } + + // 构建IE下支持的object字符串,包括属性和参数列表 + var str = [''); + var params = { + 'wmode' : 1, + 'scale' : 1, + 'quality' : 1, + 'play' : 1, + 'loop' : 1, + 'menu' : 1, + 'salign' : 1, + 'bgcolor' : 1, + 'base' : 1, + 'allowscriptaccess' : 1, + 'allownetworking' : 1, + 'allowfullscreen' : 1, + 'seamlesstabbing' : 1, + 'devicefont' : 1, + 'swliveconnect' : 1, + 'flashvars' : 1, + 'movie' : 1 + }; + + for (k in options) { + item = options[k]; + k = k.toLowerCase(); + if (params[k] && (item || item === false || item === 0)) { + str.push(''); + } + } + + // 使用embed时,flash地址的属性名是src,并且要指定embed的type和pluginspage属性 + options['src'] = options['movie']; + options['name'] = options['id']; + delete options['id']; + delete options['movie']; + delete options['classid']; + delete options['codebase']; + options['type'] = 'application/x-shockwave-flash'; + options['pluginspage'] = 'http://www.macromedia.com/go/getflashplayer'; + + + // 构建embed标签的字符串 + str.push(''); + + return str.join(''); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/swf/create.js + * author: erik + * version: 1.1.0 + * date: 2009/11/17 + */ + + + +/** + * 在页面中创建一个flash对象 + * @name baidu.swf.create + * @function + * @grammar baidu.swf.create(options[, container]) + * + * @param {Object} options 创建flash的选项参数 + * @param {string} options.id 要创建的flash的标识 + * @param {string} options.url flash文件的url + * @param {String} options.errorMessage 未安装flash player或flash player版本号过低时的提示 + * @param {string} options.ver 最低需要的flash player版本号 + * @param {string} options.width flash的宽度 + * @param {string} options.height flash的高度 + * @param {string} options.align flash的对齐方式,允许值:middle/left/right/top/bottom + * @param {string} options.base 设置用于解析swf文件中的所有相对路径语句的基本目录或URL + * @param {string} options.bgcolor swf文件的背景色 + * @param {string} options.salign 设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br + * @param {boolean} options.menu 是否显示右键菜单,允许值:true/false + * @param {boolean} options.loop 播放到最后一帧时是否重新播放,允许值: true/false + * @param {boolean} options.play flash是否在浏览器加载时就开始播放。允许值:true/false + * @param {string} options.quality 设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best + * @param {string} options.scale 设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit + * @param {string} options.wmode 设置flash的显示模式。允许值:window/opaque/transparent + * @param {string} options.allowscriptaccess 设置flash与页面的通信权限。允许值:always/never/sameDomain + * @param {string} options.allownetworking 设置swf文件中允许使用的网络API。允许值:all/internal/none + * @param {boolean} options.allowfullscreen 是否允许flash全屏。允许值:true/false + * @param {boolean} options.seamlesstabbing 允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false + * @param {boolean} options.devicefont 设置静态文本对象是否以设备字体呈现。允许值:true/false + * @param {boolean} options.swliveconnect 第一次加载flash时浏览器是否应启动Java。允许值:true/false + * @param {Object} options.vars 要传递给flash的参数,支持JSON或string类型。 + * + * @param {HTMLElement|string} [container] flash对象的父容器元素,不传递该参数时在当前代码位置创建flash对象。 + * @meta standard + * @see baidu.swf.createHTML,baidu.swf.getMovie + */ +baidu.swf.create = function (options, target) { + options = options || {}; + var html = baidu.swf.createHTML(options) + || options['errorMessage'] + || ''; + + if (target && 'string' == typeof target) { + target = document.getElementById(target); + } + + if (target) { + target.innerHTML = html; + } else { + document.write(html); + } +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/url.js + * author: erik + * version: 1.1.0 + * date: 2009/11/16 + */ + + +/** + * @namespace baidu.url 操作url的方法。 + */ +baidu.url = baidu.url || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/url/escapeSymbol.js + * author: erik + * version: 1.1.0 + * date: 2009/11/16 + */ + + + +/** + * 对字符串进行%&+/#=和空格七个字符进行url转义 + * @name baidu.url.escapeSymbol + * @function + * @grammar baidu.url.escapeSymbol(source) + * @param {string} source 需要转义的字符串 + * @return {string} 转义之后的字符串. + * @remark + * 用于get请求转义。在服务器只接受gbk,并且页面是gbk编码时,可以经过本转义后直接发get请求。 + * + * @returns {string} 转义后的字符串 + */ +baidu.url.escapeSymbol = function (source) { + return String(source).replace(/\%/g, "%25") + .replace(/&/g, "%26") + .replace(/\+/g, "%2B") + .replace(/\ /g, "%20") + .replace(/\//g, "%2F") + .replace(/\#/g, "%23") + .replace(/\=/g, "%3D"); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/url/getQueryValue.js + * author: erik + * version: 1.1.0 + * date: 2009/11/16 + */ + + + + +/** + * 根据参数名从目标URL中获取参数值 + * @name baidu.url.getQueryValue + * @function + * @grammar baidu.url.getQueryValue(url, key) + * @param {string} url 目标URL + * @param {string} key 要获取的参数名 + * @meta standard + * @see baidu.url.jsonToQuery + * + * @returns {string|null} - 获取的参数值,其中URI编码后的字符不会被解码,获取不到时返回null + */ +baidu.url.getQueryValue = function (url, key) { + var reg = new RegExp( + "(^|&|\\?|#)" + + baidu.string.escapeReg(key) + + "=([^&#]*)(&|\x24|#)", + ""); + var match = url.match(reg); + if (match) { + return match[2]; + } + + return null; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/url/jsonToQuery.js + * author: erik + * version: 1.1.0 + * date: 2009/11/16 + */ + + + + + +/** + * 将json对象解析成query字符串 + * @name baidu.url.jsonToQuery + * @function + * @grammar baidu.url.jsonToQuery(json[, replacer]) + * @param {Object} json 需要解析的json对象 + * @param {Function=} replacer_opt 对值进行特殊处理的函数,function (value, key) + * @see baidu.url.queryToJson,baidu.url.getQueryValue + * + * @return {string} - 解析结果字符串,其中值将被URI编码,{a:'&1 '} ==> "a=%261%20"。 + */ +baidu.url.jsonToQuery = function (json, replacer_opt) { + var result = [], + itemLen, + replacer = replacer_opt || function (value) { + return baidu.url.escapeSymbol(value); + }; + + baidu.object.each(json, function(item, key){ + // 这里只考虑item为数组、字符串、数字类型,不考虑嵌套的object + if (baidu.lang.isArray(item)) { + itemLen = item.length; + // FIXME value的值需要encodeURIComponent转义吗? + while (itemLen--) { + result.push(key + '=' + replacer(item[itemLen], key)); + } + } else { + result.push(key + '=' + replacer(item, key)); + } + }); + + return result.join('&'); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/url/queryToJson.js + * author: erik + * version: 1.1.0 + * date: 2009/11/16 + */ + + + + +/** + * 解析目标URL中的参数成json对象 + * @name baidu.url.queryToJson + * @function + * @grammar baidu.url.queryToJson(url) + * @param {string} url 目标URL + * @see baidu.url.jsonToQuery + * + * @returns {Object} - 解析为结果对象,其中URI编码后的字符不会被解码,'a=%20' ==> {a:'%20'}。 + */ +baidu.url.queryToJson = function (url) { + var query = url.substr(url.lastIndexOf('?') + 1), + params = query.split('&'), + len = params.length, + result = {}, + i = 0, + key, value, item, param; + + for (; i < len; i++) { + if(!params[i]){ + continue; + } + param = params[i].split('='); + key = param[0]; + value = param[1]; + + item = result[key]; + if ('undefined' == typeof item) { + result[key] = value; + } else if (baidu.lang.isArray(item)) { + item.push(value); + } else { // 这里只可能是string了 + result[key] = [item, value]; + } + } + + return result; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + +/** + * @namespace baidu.async 对异步调用的封装。 + * @author rocy + */ +baidu.async = baidu.async || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + +/** + * 判断给定object是否包含Deferred主要特征. + * @param {Object} obj 待判定object. + * @return {Boolean} 判定结果, true 则该object符合Deferred特征. + * @private + * @author rocy + */ +baidu.async._isDeferred = function(obj) { + var isFn = baidu.lang.isFunction; + return obj && isFn(obj.success) && isFn(obj.then) + && isFn(obj.fail) && isFn(obj.cancel); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + + + +/** + * 用于支持异步处理, 使同步异步的调用风格统一. + * @class + * @private + * @grammar new baidu.async.Deferred() + * @remark + * 示例: + function someAsync(){ + var deferred = new baidu.async.Deferred(); + setTimeout(function(){ + afterSomeOperation(); + if(someReason){ + deferred.resolve(someValue); + } else { + deferred.reject(someError); + } + },100); + return deferred; + } + //用类似同步的方式调用异步操作. + someAsync().then(onSuccess, onFail); + //onSuccess或onFail可以确保在正确的时间点执行. + + * @author rocy + */ +baidu.async.Deferred = function() { + var me = this; + baidu.extend(me, { + _fired: 0, + _firing: 0, + _cancelled: 0, + _resolveChain: [], + _rejectChain: [], + _result: [], + _isError: 0 + }); + + function fire() { + if (me._cancelled || me._firing) { + return; + } + //如果已有nextDeferred对象,则转移到nextDeferred上. + if (me._nextDeferred) { + me._nextDeferred.then(me._resolveChain[0], me._rejectChain[0]); + return; + } + me._firing = 1; + var chain = me._isError ? me._rejectChain : me._resolveChain, + result = me._result[me._isError ? 1 : 0]; + // 此处使用while而非for循环,是为了避免firing时插入新函数. + while (chain[0] && (! me._cancelled)) { + //所有函数仅调用一次. + //TODO: 支持传入 this 和 arguments, 而不是仅仅一个值. + try { + var chainResult = chain.shift().call(me, result); + //若方法返回Deferred,则将剩余方法延至Deferred中执行 + if (baidu.async._isDeferred(chainResult)) { + me._nextDeferred = chainResult; + [].push.apply(chainResult._resolveChain, me._resolveChain); + [].push.apply(chainResult._rejectChain, me._rejectChain); + chain = me._resolveChain = []; + me._rejectChain = []; + } + } catch (error) { + throw error; + } finally { + me._fired = 1; + me._firing = 0; + } + } + } + + + /** + * 调用onSuccess链.使用给定的value作为函数参数. + * @param {*} value 成功结果. + * @return {baidu.async.Deferred} this. + */ + me.resolve = me.fireSuccess = function(value) { + me._result[0] = value; + fire(); + return me; + }; + + /** + * 调用onFail链. 使用给定的error作为函数参数. + * @param {Error} error 失败原因. + * @return {baidu.async.Deferred} this. + */ + me.reject = me.fireFail = function(error) { + me._result[1] = error; + me._isError = 1; + fire(); + return me; + }; + + /** + * 添加onSuccess和onFail方法到各自的链上. 如果该deferred已触发,则立即执行. + * @param {Function} onSuccess 该deferred成功时的回调函数.第一个形参为成功时结果. + * @param {Function} onFail 该deferred失败时的回调函数.第一个形参为失败时结果. + * @return {baidu.async.Deferred} this. + */ + me.then = function(onSuccess, onFail) { + me._resolveChain.push(onSuccess); + me._rejectChain.push(onFail); + if (me._fired) { + fire(); + } + return me; + }; + + /** + * 添加方法到onSuccess链上. 如果该deferred已触发,则立即执行. + * @param {Function} onSuccess 该deferred成功时的回调函数.第一个形参为成功时结果. + * @return {baidu.async.Deferred} this. + */ + me.success = function(onSuccess) { + return me.then(onSuccess, baidu.fn.blank); + }; + + /** + * 添加方法到onFail链上. 如果该deferred已触发,则立即执行. + * @param {Function} onFail 该deferred失败时的回调函数.第一个形参为失败时结果. + * @return {baidu.async.Deferred} this. + */ + me.fail = function(onFail) { + return me.then(baidu.fn.blank, onFail); + }; + + /** + * 中断该deferred, 使其失效. + */ + me.cancel = function() { + me._cancelled = 1; + }; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + +/** + * 支持异步的ajax.get封装. + * @param {String} url 请求地址. + * @return {baidu.async.Deferred} Deferred对象,支持链式调用. + */ +baidu.async.get = function(url){ + var deferred = new baidu.async.Deferred(); + baidu.ajax.request(url, { + onsuccess: function(xhr, responseText) { + deferred.resolve({xhr: xhr, responseText: responseText}); + }, + onfailure: function(xhr) { + deferred.reject({xhr: xhr}); + } + }); + return deferred; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + +/** + * 支持异步的ajax.post封装. + * @param {String} url 请求地址. + * @param {String} data 请求数据. + * @return {baidu.async.Deferred} Deferred对象,支持链式调用. + */ +baidu.async.post = function(url, data){ + var deferred = new baidu.async.Deferred(); + baidu.ajax.request(url, { + method: 'POST', + data: data, + onsuccess: function(xhr, responseText) { + deferred.resolve({xhr: xhr, responseText: responseText}); + }, + onfailure: function(xhr) { + deferred.reject({xhr: xhr}); + } + }); + return deferred; +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + */ + + + + +/** + * 保证onResolve或onReject可以按序执行. 若第一个参数为deferred,则deferred完成后执行.否则立即执行onResolve,并传入第一个参数. + * @param {baidu.async.Deferred|*} deferredOrValue deferred实例或任意值. + * @param {Function} onResolve 成功时的回调函数.若第一个参数不是Deferred实例,则立即执行此方法. + * @param {Function} onReject 失败时的回调函数. + * @remark + * 示例一:异步调用: baidu.async.when(asyncLoad(), onResolve, onReject).then(nextSuccess, nextFail); + * 示例二:同步异步不确定的调用: baidu.async.when(syncOrNot(), onResolve, onReject).then(nextSuccess, nextFail); + * 示例三:同步接异步的调用: baidu.async.when(sync(), onResolve, onReject).then(asyncSuccess, asyncFail).then(afterAllSuccess, afterAllFail); + * @return {baidu.async.Deferred} deferred. + */ +baidu.async.when = function(deferredOrValue, onResolve, onReject) { + if (baidu.async._isDeferred(deferredOrValue)) { + deferredOrValue.then(onResolve, onReject); + return deferredOrValue; + } + var deferred = new baidu.async.Deferred(); + deferred.then(onResolve, onReject).resolve(deferredOrValue); + return deferred; +}; diff --git a/src/tangramgrid/tangram/tangram-datepicker.js b/src/tangramgrid/tangram/tangram-datepicker.js new file mode 100644 index 0000000..0c8ffe2 --- /dev/null +++ b/src/tangramgrid/tangram/tangram-datepicker.js @@ -0,0 +1,1600 @@ +// Copyright (c) 2009, Baidu Inc. All rights reserved. +// +// Licensed under the BSD License +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http:// tangram.baidu.com/license.html +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/* UI BASE: baidu/ui/createUI.js */ +/* BASE: baidu/object/merge.js */ + +/* BASE: baidu/page/getViewWidth.js */ +/* BASE: baidu/page/getViewHeight.js */ +/* BASE: baidu/page/getScrollLeft.js */ +/* BASE: baidu/page/getScrollTop.js */ + +/* BASE: baidu/event/on.js */ +/* BASE: baidu/object/extend.js */ + + +/* BASE: baidu/dom/g.js */ +/* BASE: baidu/dom/setStyles.js */ +/* BASE: baidu/dom/_styleFilter/px.js */ +/* BASE: baidu/dom/insertHTML.js */ +/* BASE: baidu/dom/remove.js */ + +/* BASE: baidu/string/format.js */ + +/* + * popup基类,建立一个popup实例,这个类原则上不对外暴露 + * reference: http://docs.jquery.com/UI/Popup (Popup in jquery) + */ + + /** + * popup基类,建立一个popup实例 + * @class + * @param {Object} options 选项 + * @config {DOMElement} content 要放到popup中的元素,如果传此参数时同时传contentText,则忽略contentText。 + * @config {String} contentText popup中的内容 + * @config {String|Number} width 内容区域的宽度。注意,这里的内容区域指getContent()得到元素的区域,不包含title和footer。 + * @config {String|Number} height 内容区域的高度 + * @config {String|Number} top popup距离页面上方的距离 + * @config {String|Number} left popup距离页面左方的距离 + * @config {String} classPrefix popup样式的前缀 + * @config {Number} zIndex popup的zIndex值 + * @config {Function} onopen popup打开时触发 + * @config {Function} onclose popup关闭时触发 + * @config {Function} onbeforeclose popup关闭前触发,如果此函数返回false,则组织popup关闭。 + * @config {Function} onupdate popup更新内容时触发 + * @config {Boolean} closeOnEscape keyboardSupport模块提供支持,当esc键按下时关闭popup + * @config {String} closeText closeButton模块提供支持,关闭按钮上的文字 + * @config {Boolean} modal modal模块支持,是否显示遮罩 + * @config {String} modalColor modal模块支持,遮罩的颜色 + * @config {Number} modalOpacity modal模块支持,遮罩的透明度 + * @config {Number} modalZIndex modal模块支持,遮罩的zIndex值 + * @config {Boolean} draggable draggable模块支持,是否支持拖拽 + * @config {Function} ondragstart draggable模块支持,当拖拽开始时触发 + * @config {Function} ondrag draggable模块支持,拖拽过程中触发 + * @config {Function} ondragend draggable模块支持,拖拽结束时触发 + * @plugin smartCover 智能遮罩 + * @remark + * @return {baidu.ui.Popup} Popup类 + */ + +baidu.ui.Popup = baidu.ui.createUI(function (options){ +}).extend( + /** + * @lends baidu.ui.Popup.prototype + */ +{ + //ui控件的类型,传入给UIBase **必须** + uiType : "popup", + //ui控件的class样式前缀 可选 + //classPrefix : "tangram-popup-", + + width : '', + height : '', + + top : 'auto', + left : 'auto', + zIndex : 1200,//没有做层管理 + //content : null,//dom节点 + contentText : '', + + //onopen : function(){}, + /** + * @private + */ + onbeforeclose : function(){ return true}, + //onclose : function(){}, + //onupdate : function(){}, + + + tplBody : "
", + + /** + * 查询当前窗口是否处于显示状态 + * @public + * @return {Boolean} 是否处于显示状态 + */ + isShown : function(){ + return baidu.ui.Popup.instances[this.guid] == 'show'; + }, + + /** + * @private + */ + getString : function(){ + var me = this; + return baidu.format( + me.tplBody, { + id : me.getId(), + "class" : me.getClass() + } + ); + }, + + /** + * render popup到DOM树 + * @private + */ + render : function(){ + var me = this, + main; + + //避免重复render + if(me.getMain()){ + return ; + } + + main = me.renderMain(); + + main.innerHTML = me.getString(); + + me._update(me); + + baidu.dom.setStyles(me.getMain(), { + position : "absolute", + zIndex : me.zIndex, + marginLeft : "-100000px" + }); + + me.dispatchEvent("onload"); + + return main; + }, + + /** + * 显示当前popup + * @public + * @param {Object} options 选项参数 + * @config {DOMElement} content 要放到popup中的元素,如果传此参数时同时传contentText,则忽略contentText。 + * @config {String} contentText popup中的内容 + * @config {String|Number} width 内容区域的宽度。注意,这里的内容区域指getContent()得到元素的区域,不包含title和footer。 + * @config {String|Number} height 内容区域的高度 + * @config {String|Number} top popup距离页面上方的距离 + * @config {String|Number} left popup距离页面左方的距离 + * @config {String} classPrefix popup样式的前缀 + * @config {Number} zIndex popup的zIndex值 + * @config {Function} onopen popup打开时触发 + * @config {Function} onclose popup关闭时触发 + * @config {Function} onbeforeclose popup关闭前触发,如果此函数返回false,则组织popup关闭。 + * @config {Function} onupdate popup更新内容时触发 + * @config {Boolean} closeOnEscape keyboardSupport模块提供支持,当esc键按下时关闭popup + * @config {String} closeText closeButton模块提供支持,关闭按钮上的文字 + * @config {Boolean} modal modal模块支持,是否显示遮罩 + * @config {String} modalColor modal模块支持,遮罩的颜色 + * @config {Number} modalOpacity modal模块支持,遮罩的透明度 + * @config {Number} modalZIndex modal模块支持,遮罩的zIndex值 + * @config {Boolean} draggable draggable模块支持,是否支持拖拽 + * @config {Function} ondragstart draggable模块支持,当拖拽开始时触发 + * @config {Function} ondrag draggable模块支持,拖拽过程中触发 + * @config {Function} ondragend draggable模块支持,拖拽结束时触发 + */ + open : function(options){ + var me = this; + + me._update(options); + + me.getMain().style.marginLeft = "auto"; + + baidu.ui.Popup.instances[me.guid] = "show"; + + me.dispatchEvent("onopen"); + }, + + /** + * 隐藏当前popup + * @public + */ + close : function(){ + var me = this; + if(me.dispatchEvent("onbeforeclose")){ + me.getMain().style.marginLeft = "-100000px"; + baidu.ui.Popup.instances[me.guid] = "hide"; + me.dispatchEvent("onclose"); + } + }, + + /** + * 更新popup状态 + * @public + * @param {Object} options 选项参数 + * @config {DOMElement} content 要放到popup中的元素,如果传此参数时同时传contentText,则忽略contentText。 + * @config {String} contentText popup中的内容 + * @config {String|Number} width 内容区域的宽度。注意,这里的内容区域指getContent()得到元素的区域,不包含title和footer。 + * @config {String|Number} height 内容区域的高度 + * @config {String|Number} top popup距离页面上方的距离 + * @config {String|Number} left popup距离页面左方的距离 + * @config {String} classPrefix popup样式的前缀 + * @config {Number} zIndex popup的zIndex值 + * @config {Function} onopen popup打开时触发 + * @config {Function} onclose popup关闭时触发 + * @config {Function} onbeforeclose popup关闭前触发,如果此函数返回false,则组织popup关闭。 + * @config {Function} onupdate popup更新内容时触发 + * @config {Boolean} closeOnEscape keyboardSupport模块提供支持,当esc键按下时关闭popup + * @config {String} closeText closeButton模块提供支持,关闭按钮上的文字 + * @config {Boolean} modal modal模块支持,是否显示遮罩 + * @config {String} modalColor modal模块支持,遮罩的颜色 + * @config {Number} modalOpacity modal模块支持,遮罩的透明度 + * @config {Number} modalZIndex modal模块支持,遮罩的zIndex值 + * @config {Boolean} draggable draggable模块支持,是否支持拖拽 + * @config {Function} ondragstart draggable模块支持,当拖拽开始时触发 + * @config {Function} ondrag draggable模块支持,拖拽过程中触发 + * @config {Function} ondragend draggable模块支持,拖拽结束时触发 + * + */ + update : function(options){ + var me = this; + me._update(options); + me.dispatchEvent("onupdate"); + }, + + _update: function(options){ + options = options || {}; + var me = this, contentWrapper = me.getBody(); + + //扩展options属性 + baidu.object.extend(me, options); + + //更新内容 + if(options.content){ + //content优先 + if(contentWrapper.firstChild != options.content){ + contentWrapper.innerHTML = ""; + contentWrapper.appendChild(options.content); + } + }else if(options.contentText){ + //建议popup不要支持text + contentWrapper.innerHTML = options.contentText; + } + me._updateSize(); + me._updatePosition(); + }, + + /** + * 更新大小,子类可以通过同名方法覆盖; + * 默认实现为使用参数的width和height赋值 + */ + //[Interface] + _updateSize : function(){ + var me = this; + baidu.dom.setStyles(me.getMain(), { width : me.width, height : me.height}); + }, + /** + * 更新位置,子类可以通过同名方法覆盖; + * 默认实现为使用参数的top和left赋值 + */ + //[Interface] + _updatePosition : function(){ + var me = this; + baidu.dom.setStyles(me.getMain(), { top : me.top, left : me.left}); + }, + /** + * 销毁控件 + * @public + */ + dispose : function(){ + var me = this; + me.dispatchEvent("ondispose"); + baidu.dom.remove(me.getMain()); + baidu.lang.Class.prototype.dispose.call(me); + } +}); + +baidu.ui.Popup.instances = baidu.ui.Popup.instances || []; + + +/** + * Tangram UI + * Copyright 2009 Baidu Inc. All rights reserved. + */ + +/* BASE: baidu.js */ +/** @namespace */ +baidu.ui = baidu.ui || { version: '1.3.9' }; + +/** + * 定义名字空间 + */ + + /** + * 为各个控件增加装饰器。 + * @class Behavior类 + */ +baidu.ui.behavior = baidu.ui.behavior || {}; + +/* BASE: baidu/dom/children.js */ +/* BASE: baidu/dom/insertBefore.js */ +/* BASE: baidu/dom/setStyle.js */ + + +/* BASE: baidu/dom/setBorderBoxSize.js */ + +(function(){ + var Coverable = baidu.ui.behavior.coverable = function() {}; + + Coverable.Coverable_isShowing = false; + Coverable.Coverable_iframe; + Coverable.Coverable_container; + Coverable.Coverable_iframeContainer; + + /** + * 显示遮罩,当遮罩不存在时创建遮罩 + * @public + * @return {NULL} + */ + Coverable.Coverable_show = function(){ + var me = this; + if(me.Coverable_iframe){ + me.Coverable_update(); + baidu.setStyle(me.Coverable_iframe, 'display', 'block'); + return; + } + + var opt = me.coverableOptions || {}, + container = me.Coverable_container = opt.container || me.getMain(), + opacity = opt.opacity || '0', + color = opt.color || '', + iframe = me.Coverable_iframe = document.createElement('iframe'), + iframeContainer = me.Coverable_iframeContainer = document.createElement('div'); + + //append iframe container + baidu.dom.children(container).length > 0 ? + baidu.dom.insertBefore(iframeContainer, container.firstChild): + container.appendChild(iframeContainer); + + //setup iframeContainer styles + baidu.setStyles(iframeContainer, { + position: 'absolute', + top: '0px', + left: '0px' + }); + baidu.dom.setBorderBoxSize(iframeContainer,{ + width: container.offsetWidth, + height: container.offsetHeight + }); + + baidu.dom.setBorderBoxSize(iframe,{ + width: iframeContainer.offsetWidth + }); + + baidu.dom.setStyles(iframe,{ + zIndex : -1, + display : "block", + border: 0, + backgroundColor: color, + filter : 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=' + opacity + ')' + }); + iframeContainer.appendChild(iframe); + + iframe.src = "javascript:void(0)"; + iframe.frameBorder = '0'; + iframe.scrolling = 'no'; + iframe.height = '97%'; + me.Coverable_isShowing = true; + }; + + /** + * 隐藏遮罩 + * @public + * @return {NULL} + */ + Coverable.Coverable_hide = function(){ + var me = this, + iframe = me.Coverable_iframe; + + if(!me.Coverable_isShowing){ + return; + } + + baidu.setStyle(iframe, 'display', 'none'); + me.Coverable_isShowing = false; + }; + + /** + * 更新遮罩 + * @public + * @param {Object} options + * @config {Number|String} opacity 透明度 + * @config {String} backgroundColor 背景色 + */ + Coverable.Coverable_update = function(options){ + var me = this, + options = options || {}, + container = me.Coverable_container, + iframeContainer = me.Coverable_iframeContainer, + iframe = me.Coverable_iframe; + + baidu.dom.setBorderBoxSize(iframeContainer,{ + width: container.offsetWidth, + height: container.offsetHeight + }); + + baidu.dom.setBorderBoxSize(iframe,baidu.extend({ + width: baidu.getStyle(iframeContainer, 'width') + },options)); + }; +})(); + +/* BASE: baidu/lang/Class/addEventListeners.js */ + +baidu.extend(baidu.ui.Popup.prototype,{ + coverable: true, + coverableOptions: {} +}); + +baidu.ui.Popup.register(function(me){ + + if(me.coverable){ + + me.addEventListener("onopen", function(){ + me.Coverable_show(); + }); + me.addEventListener("onload", function(){ + me.Coverable_show(); + }); + + me.addEventListener("onclose", function(){ + me.Coverable_hide(); + }); + + me.addEventListener("onupdate",function(){ + me.Coverable_update(); + }); + } +}); + + + +/** + * Tangram UI + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: ui/behavior/statable.js + * author: berg, lingyu + * version: 1.0.0 + * date: 2010/09/04 + */ + +/* BASE: baidu/dom/addClass.js */ +/* BASE: baidu/dom/removeClass.js */ +/* BASE: baidu/dom/hasClass.js */ +/* BASE: baidu/event/getTarget.js */ + +/* BASE: baidu/event/un.js */ +/* BASE: baidu/array/each.js */ +/* BASE: baidu/object/each.js */ +/* BASE: baidu/fn/bind.js */ + + +/** + * 为ui控件添加状态管理行为 + */ +(function() { + var Statable = baidu.ui.behavior.statable = function() { + var me = this; + + me.addEventListener('ondisable', function(event,options) { + var element, group; + options = options || {}; + elementId = (options.element || me.getMain()).id; + group = options.group; + + if (event.type == 'ondisable' && !me.getState(elementId, group)['disabled']) { + me.removeState('press', elementId, group); + me.removeState('hover', elementId, group); + me.setState('disabled', elementId, group); + }else if (event.type == 'onenable' && me.getState(elementId, group)['disabled']) { + me.removeState('disabled', elementId, group); + } + }); + + me.addEventListener('onenable', function(event,options) { + var element, group; + options = options || {}; + elementId = (options.element || me.getMain()).id; + group = options.group; + + if (event.type == 'ondisable' && !me.getState(elementId, group)['disabled']) { + me.removeState('press', elementId, group); + me.removeState('hover', elementId, group); + me.setState('disabled', elementId, group); + }else if (event.type == 'onenable' && me.getState(elementId, group)['disabled']) { + me.removeState('disabled', elementId, group); + } + }); + }; + + //保存实例中所有的状态,格式:group+elementId : {stateA : 1, stateB : 1} + Statable._states = {}; + //所有可用的状态,调用者通过addState添加 + Statable._allStates = ['hover', 'press', 'disabled']; + Statable._allEventsName = ['mouseover', 'mouseout', 'mousedown', 'mouseup']; + Statable._eventsHandler = { + 'mouseover' : function(id, group) { + var me = this; + if (!me.getState(id, group)['disabled']) { + me.setState('hover', id, group); + return true; + } + }, + 'mouseout' : function(id, group) { + var me = this; + if (!me.getState(id, group)['disabled']) { + me.removeState('hover', id, group); + me.removeState('press', id, group); + return true; + } + }, + 'mousedown' : function(id, group) { + var me = this; + if (!me.getState(id, group)['disabled']) { + me.setState('press', id, group); + return true; + } + }, + 'mouseup' : function(id, group) { + var me = this; + if (!me.getState(id, group)['disabled']) { + me.removeState('press', id, group); + return true; + } + } + }; + + /** + * 获得状态管理方法的字符串,用于插入元素的HTML字符串的属性部分 + * + * @param {string} group optional 状态分组,同一组的相同状态会被加上相同的css. + * @param {string} key optional 索引,在同一类中的索引. + * + * @return {string} 元素属性字符串. + */ + Statable._getStateHandlerString = function(group, key) { + var me = this, + i = 0, + len = me._allEventsName.length, + ret = [], + eventType; + if (typeof group == 'undefined') { + group = key = ''; + } + for (; i < len; i++) { + eventType = me._allEventsName[i]; + ret[i] = 'on' + eventType + '=\"' + me.getCallRef() + "._fireEvent('" + eventType + "', '" + group + "', '" + key + "', event)\""; + } + + return ret.join(' '); + }; + + /** + * 触发指定类型的事件 + * @param {string} eventType 事件类型. + * @param {string} group optional 状态分组,同一组的相同状态会被加上相同的css. + * @param {string} key 索引,在同一类中的索引. + * @param {DOMEvent} e DOM原始事件. + */ + Statable._fireEvent = function(eventType, group, key, e) { + var me = this, + id = me.getId(group + key); + if (me._eventsHandler[eventType].call(me, id, group)) { + me.dispatchEvent(eventType, { + element: id, + group: group, + key: key, + DOMEvent: e + }); + } + }; + + /** + * 添加一个可用的状态 + * @param {string} state 要添加的状态. + * @param {string} eventNam optional DOM事件名称. + * @param {string} eventHandler optional DOM事件处理函数. + */ + Statable.addState = function(state, eventName, eventHandler) { + var me = this; + me._allStates.push(state); + if (eventName) { + me._allEventsName.push(eventName); + if (!eventHandler) { + eventHandler = function() {return true;}; + } + me._eventsHandler[eventName] = eventHandler; + } + }; + + /** + * 获得指定索引的元素的状态 + * @param {string} elementId 元素id,默认是main元素id. + * @param {string} group optional 状态分组,同一组的相同状态会被加上相同的css. + */ + Statable.getState = function(elementId, group) { + var me = this, + _states; + group = group ? group + '-' : ''; + elementId = elementId ? elementId : me.getId(); + _states = me._states[group + elementId]; + return _states ? _states : {}; + }; + + /** + * 设置指定索的元素的状态 + * @param {string} state 枚举量 in ui._allStates. + * @param {string} elementId optional 元素id,默认是main元素id. + * @param {string} group optional 状态分组,同一组的相同状态会被加上相同的css. + */ + Statable.setState = function(state, elementId, group) { + var me = this, + stateId, + currentState; + + group = group ? group + '-' : ''; + elementId = elementId ? elementId : me.getId(); + stateId = group + elementId; + + me._states[stateId] = me._states[stateId] || {}; + currentState = me._states[stateId][state]; + if (!currentState) { + me._states[stateId][state] = 1; + baidu.addClass(elementId, me.getClass(group + state)); + } + }; + + /** + * 移除指定索引的元素的状态 + * @param {string} state 枚举量 in ui._allStates. + * @param {string} element optional 元素id,默认是main元素id. + * @param {string} group optional 状态分组,同一组的相同状态会被加上相同的css. + */ + Statable.removeState = function(state, elementId, group) { + var me = this, + stateId; + + group = group ? group + '-' : ''; + elementId = elementId ? elementId : me.getId(); + stateId = group + elementId; + + if (me._states[stateId]) { + me._states[stateId][state] = 0; + baidu.removeClass(elementId, me.getClass(group + state)); + } + }; +})(); + + + +//依赖包 + +/* UI BASE: baidu/ui/Base/setParent.js */ +/* UI BASE: baidu/ui/Base/getParent.js */ + + + + + + + +//声明包 + + +/** + * button基类,创建一个button实例 + * @class button类 + * @param {Object} [options] 选项 + * @config {String} content 按钮文本信息 + * @config {Boolean} disabled 按钮是否有效,默认为false(有效)。 + * @config {Function} onmouseover 鼠标悬停在按钮上时触发 + * @config {Function} onmousedown 鼠标按下按钮时触发 + * @config {Function} onmouseup 按钮弹起时触发 + * @config {Function} onmouseout 鼠标移出按钮时触发 + * @config {Function} onclick 鼠标点击按钮时触发 + * @config {Function} onupdate 更新按钮时触发 + * @config {Function} onload 页面加载时触发 + * @config {Function} ondisable 当调用button的实例方法disable,使得按钮失效时触发。 + * @config {Function} onenable 当调用button的实例方法enable,使得按钮有效时触发。 + * @returns {Button} Button类 + * @plugin statable 状态行为,为button组件添加事件和样式。 + * @remark 创建按钮控件时,会自动为控件加上四种状态的style class,分别为正常情况(tangram-button)、鼠标悬停在按钮上(tangram-button-hover)、鼠标按下按钮时(tangram-button-press)、按钮失效时(tangram-button-disable),用户可自定义样式。 + */ +baidu.ui.Button = baidu.ui.createUI(new Function).extend( + /** + * @lends baidu.ui.Button.prototype + */ + { + + //ui控件的类型,传入给UIBase **必须** + uiType: 'button', + //ui控件的class样式前缀 可选 + //classPrefix : "tangram-button-", + tplBody: '
#{content}
', + disabled: false, + statable: true, + + /** + * 获得button的HTML字符串 + * @private + * @return {String} 拼接的字符串 + */ + _getString: function() { + var me = this; + return baidu.format(me.tplBody, { + id: me.getId(), + statable: me._getStateHandlerString(), + 'class' : me.getClass(), + content: me.content + }); + }, + + /** + * 将button绘制到DOM树中。 + * @public + * @param {HTMLElement|String} target 需要渲染到的元素 + */ + render: function(target) { + var me = this, + body; + me.addState('click', 'click'); + baidu.dom.insertHTML(me.renderMain(target), 'beforeEnd', me._getString()); + + body = baidu.g(target).lastChild; + if (me.title) { + body.title = me.title; + } + + me.disabled && me.setState('disabled'); + me.dispatchEvent('onload'); + }, + + /** + * 判断按钮是否处于失效状态。 + * @public + * @return {Boolean} 是否失效的状态 + */ + isDisabled: function() { + var me = this, + id = me.getId(); + return me.getState()['disabled']; + }, + + /** + * 销毁实例。 + * @public + */ + dispose : function(){ + var me = this, + body = me.getBody(); + me.dispatchEvent('dispose'); + //删除当前实例上的方法 + baidu.each(me._allEventsName, function(item,index) { + body['on' + item] = null; + }); + baidu.dom.remove(body); + + me.dispatchEvent('ondispose'); + baidu.lang.Class.prototype.dispose.call(me); + }, + + /** + * 设置disabled属性 + * @pubic + * + */ + disable: function() { + var me = this, + body = me.getBody(); + me.dispatchEvent('ondisable', {element: body}); + }, + + /** + * 删除disabled属性 + * @pubic + * + */ + enable: function() { + var me = this; + body = me.getBody(); + me.dispatchEvent('onenable', {element: body}); + }, + + /** + * 触发button事件 + * @public + * @param {String} eventName 要触发的事件名称 + * @param {Object} e 事件event + */ + fire: function(eventType,e) { + var me = this, eventType = eventType.toLowerCase(); + if (me.getState()['disabled']) { + return; + } + me._fireEvent(eventType, null, null, e); + }, + + /** + * 更新button的属性 + * @public + * @param {Object} options 更新button的属性 + * @config {String} content 按钮文本信息 + * @config {Boolean} disabled 按钮是否有效,默认为false(有效)。 + * @config {Function} onmouseover 鼠标悬停在按钮上时触发 + * @config {Function} onmousedown 鼠标按下按钮时触发 + * @config {Function} onmouseup 按钮弹起时触发 + * @config {Function} onmouseout 鼠标移出按钮时触发 + * @config {Function} onclick 鼠标点击按钮时触发 + * @config {Function} onupdate 更新按钮时触发 + * @config {Function} onload 页面加载时触发 + * @config {Function} ondisable 当调用button的实例方法disable,使得按钮失效时触发。 + * @config {Function} onenable 当调用button的实例方法enable,使得按钮有效时触发。 + * + */ + update: function(options) { + var me = this; + baidu.extend(me, options); + options.content && (me.getBody().innerHTML = options.content); + + me.dispatchEvent('onupdate'); + } +}); + +/* BASE: baidu/lang/isBoolean.js */ +/** + * 使按钮支持poll轮询,实现在按钮上点击并保持鼠标按着状态时连续激活事件侦听器 + * @param {Object} options config参数. + * @config {Object} poll 当为true时表示需要使按钮是一个poll的按钮,如果是一个json的描述,可以有两个可选参数: + * {interval: 100, time: 4},interval表示轮询的时间间隔,time表示第一次执行和第二执行之间的时间间隔是time*interval毫秒 + * @author linlingyu + */ +baidu.ui.Button.register(function(me) { + if (!me.poll) {return;} + baidu.lang.isBoolean(me.poll) && (me.poll = {}); + me.addEventListener('mousedown', function(evt) { + var pollIdent = 0, + interval = me.poll.interval || 100, + timer = me.poll.time || 0; + (function() { + if (me.getState()['press']) { + pollIdent++ > timer && me.onmousedown && me.onmousedown(); + me.poll.timeOut = setTimeout(arguments.callee, interval); + } + })(); + }); + me.addEventListener('dispose', function(){ + if(me.poll.timeOut){ + me.disable(); + window.clearTimeout(me.poll.timeOut); + } + }); +}); + +/* BASE: baidu/date/format.js */ +/* BASE: baidu/lang/guid.js */ + +/* BASE: baidu/array/indexOf.js */ +/* BASE: baidu/array/some.js */ +/* BASE: baidu/lang/isDate.js */ + + + + +/* BASE: baidu/lang/isNumber.js */ + +baidu.i18n = baidu.i18n || {}; +baidu.i18n.cultures = baidu.i18n.cultures || {}; + + +baidu.i18n.cultures['zh-CN'] = baidu.object.extend(baidu.i18n.cultures['zh-CN'] || {}, { + calendar: { + dateFormat: 'yyyy-MM-dd', + titleNames: '#{yyyy}年 #{MM}月', + monthNames: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'], + dayNames: {mon: '一', tue: '二', wed: '三', thu: '四', fri: '五', sat: '六', sun: '日'} + }, + + timeZone: 8, + whitespace: new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+\x24)", "g"), + + number: { + group: ",", + groupLength: 3, + decimal: ".", + positive: "", + negative: "-", + + _format: function(number, isNegative){ + return baidu.i18n.number._format(number, { + group: this.group, + groupLength: this.groupLength, + decimal: this.decimal, + symbol: isNegative ? this.negative : this.positive + }); + } + }, + + currency: { + symbol: '¥' + }, + + language: { + ok: '确定', + cancel: '取消', + signin: '注册', + signup: '登录' + } +}); + +baidu.i18n.currentLocale = baidu.i18n.currentLocale || 'zh-CN'; + +baidu.i18n.date = baidu.i18n.date || { + + /** + * 获取某年某个月的天数 + * @public + * @param {Number} year 年份. + * @param {Number} month 月份. + * @return {Number} + */ + getDaysInMonth: function(year, month) { + var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + + if (month == 1 && baidu.i18n.date.isLeapYear(year)) { + return 29; + } + return days[month]; + }, + + /** + * 判断传入年份是否时润年 + * @param {Number} year 年份. + * @return {Boolean} + */ + isLeapYear: function(year) { + return !(year % 400) || (!(year % 4) && !!(year % 100)); + }, + + /** + * 将传入的date对象转换成指定地区的date对象 + * @public + * @param {Date} dateObject + * @param {String} sLocale dateObject 的地区标识,可选参数,传则以dateObject中获取的为准 + * @param {String} tLocale 地区名称简写字符. + * @return {Date} + */ + toLocaleDate: function(dateObject, sLocale, tLocale) { + return this._basicDate(dateObject, sLocale, tLocale || baidu.i18n.currentLocale); + }, + + /** + * 本地日历和格力高利公历相互转换的基础函数 + * @private + * @param {Date} dateObject 需要转换的日期函数. + * @param {String} sLocale dateObject 的地区标识,可选参数,否则以dateObject中获取的为准 + * @param {string} tlocale 传入date的地区名称简写字符,不传入则从date中计算得出. + */ + _basicDate: function(dateObject, sLocale, tLocale) { + var tTimeZone = baidu.i18n.cultures[tLocale || baidu.i18n.currentLocale].timeZone, + tTimeOffset = tTimeZone * 60, + sTimeZone,sTimeOffset, + millisecond = dateObject.getTime(); + + if(sLocale){ + sTimeZone = baidu.i18n.cultures[sLocale].timeZone; + sTimeOffset = sTimeZone * 60; + }else{ + sTimeOffset = -1 * dateObject.getTimezoneOffset(); + sTimeZone = sTimeZone / 60; + } + + return new Date(sTimeZone != tTimeZone ? (millisecond + (tTimeOffset - sTimeOffset) * 60000) : millisecond); + } +}; + + +/** + * 创建一个简单的日历对象 + * @name baidu.ui.Calendar + * @class + * @param {Object} options config参数 + * @config {String} weekStart 定义周的第一天,取值:'Mon'|'Tue'|'Web'|'Thu'|'Fri'|'Sat'|'Sun',默认值'Sun' + * @config {Date} initDate 以某个本地日期打开日历,默认值是当前日期 + * @config {Array} highlightDates 设定需要高亮显示的某几个日期或日期区间,格式:[date, {start:date, end:date}, date, date...] + * @config {Array} disableDates 设定不可使用的某几个日期或日期区间,格式:[date, {start:date, end:date}, date, date...] + * @config {Object} flipContent 设置翻转月份按钮的内容,格式{prev: '', next: ''} + * @config {string} language 日历显示的语言,默认为中文 + * @config {function} onclickdate 当点击某个日期的某天时触发该事件 + * @author linlingyu + */ +baidu.ui.Calendar = baidu.ui.createUI(function(options){ + var me = this; + me.flipContent = baidu.object.extend({prev: '<', next: '>'}, + me.flipContent); + me.addEventListener('mouseup', function(evt){ + var ele = evt.element, + date = me._dates[ele], + beforeElement = baidu.dom.g(me._currElementId); + //移除之前的样子 + beforeElement && baidu.dom.removeClass(beforeElement, me.getClass('date-current')); + me._currElementId = ele; + me._initDate = date; + //添加现在的样式 + baidu.dom.addClass(baidu.dom.g(ele), me.getClass('date-current')); + me.dispatchEvent('clickdate', {date: date}); + }); +}).extend( +/** + * @lends baidu.ui.Calendar.prototype + */ +{ + uiType: 'calendar', + weekStart: 'Sun',//定义周的第一天 + statable: true, + language: 'zh-CN', + + tplDOM: '
#{content}
', + tplTable: '#{head}#{body}
', + tplDateCell: '#{content}', + tplTitle: '
#{text}
', + + /** + * 对initDate, highlight, disableDates, weekStart等参数进行初始化为本地时间 + * @private + */ + _initialize: function(){ + var me = this; + function initDate(array){ + var arr = []; + //格式:[date, {start:date, end:date}, date, date...] + baidu.array.each(array, function(item){ + arr.push(baidu.lang.isDate(item) ? me._toLocalDate(item) + : {start: me._toLocalDate(item.start), end: me._toLocalDate(item.end)}); + }); + return arr; + } + me._highlightDates = initDate(me.highlightDates || []); + me._disableDates = initDate(me.disableDates || []); + me._initDate = me._toLocalDate(me.initDate || new Date());//这个就是css中的current + me._currDate = new Date(me._initDate.getTime());//这个是用于随时跳转的决定页面显示什么日历的重要date + me.weekStart = me.weekStart.toLowerCase(); + }, + + /** + * 根据参数取得单个日子的json + * @param {Date} date 一个日期对象 + * @return 返回格式{id:'', 'class': '', handler:'', date: '', disable:''} + * @private + */ + _getDateJson: function(date){ + var me = this, + guid = baidu.lang.guid(), + curr = me._currDate, + css = [], + disabled; + function compare(srcDate, compDate){//比较是否同一天 + //不能用毫秒数除以一天毫秒数来比较(2011/1/1 0:0:0 2011/1/1 23:59:59) + //不能用compDate - srcDate和一天的毫秒数来比较(2011/1/1 12:0:0 2011/1/2/ 0:0:0) + return srcDate.getDate() == compDate.getDate() + && Math.abs(srcDate.getTime() - compDate.getTime()) < 24 * 60 * 60 * 1000; + } + function contains(array, date){ + var time = date.getTime(); + return baidu.array.some(array, function(item){ + if(baidu.lang.isDate(item)){ + return compare(item, date); + }else{ + return compare(item.start, date) + || time > item.start.getTime() + && time <= item.end.getTime(); + } + }); + } + //设置非本月的日期的css + date.getMonth() != curr.getMonth() && css.push(me.getClass('date-other')); + //设置highlight的css + contains(me._highlightDates, date) && css.push(me.getClass('date-highlight')); + //设置初始化日期的css + if(compare(me._initDate, date)){ + css.push(me.getClass('date-current')); + me._currElementId = me.getId(guid); + } + //设置当天的css + compare(me._toLocalDate(new Date()), date) && css.push(me.getClass('date-today')); + //设置disabled disabled优先级最高,出现disable将清除上面所有的css运算 + disabled = contains(me._disableDates, date) && (css = []); + return { + id: me.getId(guid), + 'class': css.join('\x20'),//\x20-space + handler: me._getStateHandlerString('', guid), + date: date, + disabled: disabled + }; + }, + + /** + * 取得参数日期对象所对月份的天数 + * @param {Number} year 年份 + * @param {Number} month 月份 + * @private + */ + _getMonthCount: function(year, month){ + var invoke = baidu.i18n.date.getDaysInMonth, + monthArr = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + count; + invoke && (count = invoke(year, month)); + if(!baidu.lang.isNumber(count)){ + count = 1 == month && (year % 4) + && (year % 100 != 0 || year % 400 == 0) ? 29 : monthArr[month]; + } + return count; + }, + + /** + * 生成日期表格的字符串用于渲染日期表 + * @private + */ + _getDateTableString: function(){ + var me = this, + calendar = baidu.i18n.cultures[me.language].calendar, + dayArr = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],//day index +// curr = me._currLocalDate,//_currentLocalDate + curr = me._currDate, + year = curr.getFullYear(), + month = curr.getMonth(), + day = new Date(year, month, 1).getDay(),//取得当前第一天用来计算第一天是星期几,这里不需要转化为本地时间 + weekIndex = 0,//记录wekStart在day数组中的索引 + headArr = [], + bodyArr = [], + weekArray = [], + disabledIds = me._disabledIds = [], + i = 0, + j = 0, + len = dayArr.length, + count, + date; + + //运算星期标题 + for(; i < len; i++){ + dayArr[i] == me.weekStart && (weekIndex = i); + (weekIndex > 0 ? headArr : weekArray).push('', calendar.dayNames[dayArr[i]], ''); + } + headArr = headArr.concat(weekArray); + headArr.unshift(''); + headArr.push(''); + //运算日期 + day = (day < weekIndex ? day + 7 : day) - weekIndex;//当月月初的填补天数 + count = Math.ceil((me._getMonthCount(year, month) + day) / len); + me._dates = {};//用来存入td对象和date的对应关系在click时通过id取出date对象 + for(i = 0; i < count; i++){ + bodyArr.push(''); + for(j = 0; j < len; j++){ + date = me._getDateJson(new Date(year, month, i * len + j + 1 - day));//这里也不需要转化为本地时间 + //把被列为disable的日期先存到me._disabledIds中是为了在渲染后调用setState来管理 + me._dates[date.id] = date.date; + date.disabled && disabledIds.push(date['id']); + bodyArr.push(baidu.string.format(me.tplDateCell, { + id: date['id'], + 'class': date['class'], + handler: date['handler'], + content: date['date'].getDate() + })); + } + bodyArr.push(''); + } + return baidu.string.format(me.tplTable, { + 'class': me.getClass('table'), + headClass: me.getClass('week'), + bodyClass: me.getClass('date'), + head: headArr.join(''), + body: bodyArr.join('') + }); + }, + + /** + * 生成日期容器的字符串 + * @private + */ + getString: function(){ + var me = this; + return baidu.string.format(me.tplDOM, { + id: me.getId(), + 'class': me.getClass(), + content: baidu.string.format(me.tplDOM, { + id: me.getId('content'), + 'class': me.getClass('content') + }) + }); + }, + + /** + * 将一个非本地化的日期转化为本地化的日期对象 + * @param {Date} date 一个非本地化的日期对象 + * @private + */ + _toLocalDate: function(date){//很多地方都需要使用到转化,为避免总是需要写一长串i18n特地做成方法吧 + return date ? baidu.i18n.date.toLocaleDate(date, null, this.language) + : date; + }, + + /** + * 渲染日期表到容器中 + * @private + */ + _renderDate: function(){ + var me = this; + baidu.dom.g(me.getId('content')).innerHTML = me._getDateTableString(); + //渲染后对disabled的日期进行setState管理 + baidu.array.each(me._disabledIds, function(item){ + me.setState('disabled', item); + }); + }, + + /** + * 左右翻页跳转月份的基础函数 + * @param {String} pos 方向 prev || next + * @private + */ + _basicFlipMonth: function(pos){ + var me = this, + curr = me._currDate, + month = curr.getMonth() + (pos == 'prev' ? -1 : 1), + year = curr.getFullYear() + (month < 0 ? -1 : (month > 11 ? 1 : 0)); + month = month < 0 ? 12 : (month > 11 ? 0 : month); + curr.setYear(year); + me.gotoMonth(month); + me.dispatchEvent(pos + 'month', {date: new Date(curr.getTime())}); + }, + + /** + * 渲染日历表的标题说明,如果对标题说明有特列要求,可以覆盖方法来实现 + */ + renderTitle: function(){ + var me = this, prev, next, + curr = me._currDate, + calendar = baidu.i18n.cultures[me.language].calendar, + ele = baidu.dom.g(me.getId('label')), + txt = baidu.string.format(calendar.titleNames, { + yyyy: curr.getFullYear(), + MM: calendar.monthNames[curr.getMonth()], + dd: curr.getDate() + }); + if(ele){ + ele.innerHTML = txt; + return; + } + baidu.dom.insertHTML(me.getBody(), + 'afterBegin', + baidu.string.format(me.tplTitle, { + id: me.getId('title'), + 'class': me.getClass('title'), + labelId: me.getId('label'), + labelClass: me.getClass('label'), + text: txt, + prevId: me.getId('prev'), + prevClass: me.getClass('prev'), + nextId: me.getId('next'), + nextClass: me.getClass('next') + }) + ); + function getOptions(pos){ + return { + classPrefix: me.classPrefix + '-' + pos + 'btn', + skin: me.skin ? me.skin + '-' + pos : '', + content: me.flipContent[pos], + poll: {time: 4}, + element: me.getId(pos), + autoRender: true, + onmousedown: function(){ + me._basicFlipMonth(pos); + } + }; + } + prev = new baidu.ui.Button(getOptions('prev')); + next = new baidu.ui.Button(getOptions('next')); + me.addEventListener('ondispose', function(){ + prev.dispose(); + next.dispose(); + }); + }, + + /** + * 渲染日期组件到参数指定的容器中 + * @param {HTMLElement} target 一个用来存放组件的容器对象 + */ + render: function(target){ + var me = this, + skin = me.skin; + if(!target || me.getMain()){return;} + baidu.dom.insertHTML(me.renderMain(target), 'beforeEnd', me.getString()); + me._initialize(); + me.renderTitle(); + me._renderDate(); + baidu.dom.g(me.getId('content')).style.height = + (me.getBody().clientHeight || me.getBody().offsetHeight) + - baidu.dom.g(me.getId('title')).offsetHeight + 'px'; + me.dispatchEvent('onload'); + }, + + /** + * 更新日期的参数 + * @param {Object} options 参数,具体请参照构造中的options + */ + update: function(options){ + var me = this; + baidu.object.extend(me, options || {}); + me._initialize(); + me.renderTitle(); + me._renderDate(); + me.dispatchEvent('onupdate'); + }, + + /** + * 跳转到某一天 + * @param {Date} date 一个非本地化的日期对象 + */ + gotoDate: function(date){ + var me = this; + me._currDate = me._toLocalDate(date); + me._initDate = me._toLocalDate(date); + me.renderTitle(); + me._renderDate(); + me.dispatchEvent('ongotodate'); + }, + + /** + * 跳转到某一年 + * @param {Number} year 年份 + */ + gotoYear: function(year){ + var me = this, + curr = me._currDate, + month = curr.getMonth(), + date = curr.getDate(), + count; + if(1 == month){//如果是二月份 + count = me._getMonthCount(year, month); + date > count && curr.setDate(count); + } + curr.setFullYear(year); + me.renderTitle(); + me._renderDate(); + me.dispatchEvent('ongotoyear'); + }, + + /** + * 跳转到当前年份的某个月份 + * @param {Number} month 月份,取值(0, 11) + */ + gotoMonth: function(month){ + var me = this, + curr = me._currDate, + month = Math.min(Math.max(month, 0), 11), + date = curr.getDate(), + count = me._getMonthCount(curr.getFullYear(), month); + date > count && curr.setDate(count); + curr.setMonth(month); + me.renderTitle(); + me._renderDate(); + me.dispatchEvent('ongotomonth'); + }, + + /** + * 取得一个本地化的当天的日期 + * @return {Date} 返回一个本地当天的时间 + */ + getToday: function(){ + return me._toLocalDate(new Date()); + }, + + /** + * 返回一个当前选中的当地日期对象 + * @return {Date} 返回一个本地日期对象 + */ + getDate: function(){ + return new Date(this._initDate.getTime()); + }, + + /** + * 用一个本地化的日期设置当前的显示日期 + * @param {Date} date 一个当地的日期对象 + */ + setDate: function(date){ + if(baidu.lang.isDate(date)){ + var me = this; + me._initDate = date; + me._currDate = date; + } + }, + + /** + * 翻页到上一个月份,当在年初时会翻到上一年的最后一个月份 + */ + prevMonth: function(){ + this._basicFlipMonth('prev'); + }, + + /** + * 翻页到下一个月份,当在年末时会翻到下一年的第一个月份 + */ + nextMonth: function(){ + this._basicFlipMonth('next'); + }, + + /** + * 析构函数 + */ + dispose: function(){ + var me = this; + me.dispatchEvent('dispose'); + baidu.dom.remove(me.getMain()); + baidu.lang.Class.prototype.dispose.call(me); + } +}); + + + + +/* BASE: baidu/dom/contains.js */ + + + +/* BASE: baidu/dom/getPosition.js */ +/* BASE: baidu/browser/isStrict.js */ + + + + +/** + * 创建一个日历对象绑定于一个input输入域 + * @name baidu.ui.DatePicker + * @class + * @param {Object} options config参数 + * @config {Number} width 日历组件的宽度 + * @config {Number} height 日历组件的高度 + * @config {String} format 日历组件格式化日历的格式,默认:yyyy-MM-dd + * @config {Object} popupOptions Picker组件的浮动层由Popup组件渲染,该参数用来设置Popup的属性,具体参考Popup + * @config {Object} calendarOptions Picker组件的日历由Calendar组件渲染,该参数来用设置Calendar的属性,具体参考Calendar + * @config {Function} onpick 当选中某个日期时的触发事件 + * @config {String} language 当前语言,默认为中文 + */ +baidu.ui.DatePicker = baidu.ui.createUI(function(options){ + var me = this; + me.format = me.format || baidu.i18n.cultures[me.language].calendar.dateFormat || 'yyyy-MM-dd'; + me.popupOptions = baidu.object.merge(me.popupOptions || {}, + options, + {overwrite: true, whiteList: ['width', 'height']}); + me.calendarOptions = baidu.object.merge(me.calendarOptions || {}, + options, + {overwrite: true, whiteList: ['weekStart']}); + me._popup = new baidu.ui.Popup(me.popupOptions); + me._calendar = new baidu.ui.Calendar(me.calendarOptions); + me._calendar.addEventListener('clickdate', function(evt){ + me.pick(evt.date); + }); +}).extend( +/** + * @lends baidu.ui.DatePicker.prototype + */ +{ + uiType: 'datePicker', + + language: 'zh-CN', + + /** + * 取得从input到得字符按format分析得到的日期对象 + * @private + */ + _getInputDate: function(){ + var me = this, + patrn = [/yyyy|yy/, /M{1,2}/, /d{1,2}/],//只支持到年月日的格式化,需要时分秒的请扩展此数组 + key = [], + val = {}, + count = patrn.length, + i = 0, + regExp; + for(; i < count; i++){ + regExp = patrn[i].exec(me.format); + key[i] = regExp ? regExp.index : null; + } + me.input.value.replace(/\d{1,4}/g, function(mc, index){ + val[index] = mc; + }); + for(i = 0; i < key.length; i++){ + key[i] = val[key[i]]; + if(!key[i]){return;} + } + return new Date(key[0], key[1] - 1, key[2]);//需要时分秒的则扩展参数 + }, + + /** + * 鼠标点击的事件侦听器,主要用来隐藏日历 + * @private + */ + _onMouseDown: function(evt){ + var me = this, + popup = me._popup, + target = baidu.event.getTarget(evt); + if(target.id != me.input.id + && !baidu.dom.contains(popup.getBody(), target)){ + me.hide(); + } + }, + + /** + * 渲染日期组件到body中并绑定input + * @param {HTMLElement} target 一个input对象,该input和组件绑定 + */ + render: function(target){ + var me = this, + focusHandler = baidu.fn.bind('show', me), + mouseHandler = baidu.fn.bind('_onMouseDown', me), + keyHandler = baidu.fn.bind('hide', me), + input = me.input = baidu.dom.g(target), + popup = me._popup; + if(me.getMain() || !input){ + return; + } + popup.render(); + me._calendar.render(popup.getBody()); + me.on(input, 'focus', focusHandler); + me.on(input, 'keyup', keyHandler); + me.on(document, 'click', mouseHandler); + }, + + /** + * 当点击某个日期时执行pick方法来向input写入日期 + * @param {Date} date 将日期写到input中 + */ + pick: function(date){ + var me = this; + me.input.value = baidu.date.format(date, me.format); + me.hide(); + me.dispatchEvent('pick'); + }, + + /** + * 显示日历 + */ + show: function(){ + var me = this, + pos = me.input && baidu.dom.getPosition(me.input), + popup = me._popup, + calendar = me._calendar, + doc = document[baidu.browser.isStrict ? 'documentElement' : 'body'], + inputHeight = me.input.offsetHeight, + popupHeight = me._popup.getBody().offsetHeight; + me._calendar.setDate(me._getInputDate() || calendar._toLocalDate(new Date())); + me._calendar.renderTitle(); + me._calendar._renderDate(); +// me._calendar.update({initDate: me._getInputDate() || calendar._toLocalDate(new Date())}); + pos.top += (pos.top + inputHeight + popupHeight - doc.scrollTop > doc.clientHeight) ? -popupHeight + : inputHeight; + me._popup.open(pos); + }, + + /** + * 隐藏日历 + */ + hide: function(){ + this._popup.close(); + }, + + /* + * 析构函数 + */ + dispose: function(){ + var me = this; + me.dispatchEvent('dispose'); + me._calendar.dispose(); + me._popup.dispose(); + baidu.lang.Class.prototype.dispose.call(me); + } +}); + + diff --git a/src/tangramgrid/tangram/tangram.baseUI.js b/src/tangramgrid/tangram/tangram.baseUI.js new file mode 100644 index 0000000..a47d364 --- /dev/null +++ b/src/tangramgrid/tangram/tangram.baseUI.js @@ -0,0 +1,2 @@ +/* Copyright (c) 2010 Baidu Licensed under the BSD License */ +var T,baidu=T=baidu||{version:"1.3.9"};baidu.guid="$BAIDU$";window[baidu.guid]=window[baidu.guid]||{};baidu.ui=baidu.ui||{version:"1.3.9"};baidu.ui.getUI=function(c){var c=c.split("-"),b=baidu.ui,a=c.length,d=0;for(;d baidu.ui.Suggestion + * toolbar-spacer -> baidu.ui.Toolbar.Spacer. + * + * @author berg + * + * @param {String} uiType + * @return {object} UI类 + */ +baidu.ui.getUI = function(uiType){ + var uiType = uiType.split('-'), + result = baidu.ui, + len = uiType.length, + i = 0; + + for (; i < len; i++) { + result = result[uiType[i].charAt(0).toUpperCase() + uiType[i].slice(1)]; + } + return result; +}; + +/** + * @namespace baidu.lang 对语言层面的封装,包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。 +*/ +baidu.lang = baidu.lang || {}; + + +/** + * 判断目标参数是否string类型或String对象 + * @name baidu.lang.isString + * @function + * @grammar baidu.lang.isString(source) + * @param {Any} source 目标参数 + * @shortcut isString + * @meta standard + * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isString = function (source) { + return '[object String]' == Object.prototype.toString.call(source); +}; + +// 声明快捷方法 +baidu.isString = baidu.lang.isString; + + +/** + * 创建一个ui控件 + * @author berg + * @param {object|String} UI控件类或者uiType + * @param {object} options optional 控件的初始化属性 + * + * autoRender : 是否自动render,默认true + * element : render到的元素 + * parent : 父控件 + * + * @return {object} 创建好的控件实例 + */ +baidu.ui.create = function(UI, options){ + if(baidu.lang.isString(UI)){ + UI = baidu.ui.getUI(UI); + } + return new UI(options); +}; + + +/** + * @namespace baidu.dom 操作dom的方法。 + */ +baidu.dom = baidu.dom || {}; + + +/** + * 从文档中获取指定的DOM元素 + * @name baidu.dom.g + * @function + * @grammar baidu.dom.g(id) + * @param {string|HTMLElement} id 元素的id或DOM元素 + * @shortcut g,T.G + * @meta standard + * @see baidu.dom.q + * + * @returns {HTMLElement|null} 获取的元素,查找不到时返回null,如果参数不合法,直接返回参数 + */ +baidu.dom.g = function (id) { + if ('string' == typeof id || id instanceof String) { + return document.getElementById(id); + } else if (id && id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) { + return id; + } + return null; +}; + +// 声明快捷方法 +baidu.g = baidu.G = baidu.dom.g; + + + + +/** + * 返回一个当前页面的唯一标识字符串。 + * @name baidu.lang.guid + * @function + * @grammar baidu.lang.guid() + * @version 1.1.1 + * @meta standard + * + * @returns {String} 当前页面的唯一标识字符串 + */ + +(function(){ + //不直接使用window,可以提高3倍左右性能 + var guid = window[baidu.guid]; + + baidu.lang.guid = function() { + return "TANGRAM__" + (guid._counter ++).toString(36); + }; + + guid._counter = guid._counter || 1; +})(); + +/** + * 所有类的实例的容器 + * key为每个实例的guid + * @meta standard + */ + +window[baidu.guid]._instances = window[baidu.guid]._instances || {}; + +/** + * 判断目标参数是否为function或Function实例 + * @name baidu.lang.isFunction + * @function + * @grammar baidu.lang.isFunction(source) + * @param {Any} source 目标参数 + * @version 1.2 + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * @meta standard + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isFunction = function (source) { + // chrome下,'function' == typeof /a/ 为true. + return '[object Function]' == Object.prototype.toString.call(source); +}; + + +/** + * + * @class Tangram继承机制提供的一个基类,用户可以通过继承baidu.lang.Class来获取它的属性及方法。 + * @name baidu.lang.Class + * @grammar baidu.lang.Class(guid) + * @param {string} guid 对象的唯一标识 + * @meta standard + * @remark baidu.lang.Class和它的子类的实例均包含一个全局唯一的标识guid。guid是在构造函数中生成的,因此,继承自baidu.lang.Class的类应该直接或者间接调用它的构造函数。
baidu.lang.Class的构造函数中产生guid的方式可以保证guid的唯一性,及每个实例都有一个全局唯一的guid。 + * @meta standard + * @see baidu.lang.inherits,baidu.lang.Event + */ +baidu.lang.Class = function(guid) { + this.guid = guid || baidu.lang.guid(); + window[baidu.guid]._instances[this.guid] = this; +}; +window[baidu.guid]._instances = window[baidu.guid]._instances || {}; + +/** + * 释放对象所持有的资源,主要是自定义事件。 + * @name dispose + * @grammar obj.dispose() + * TODO: 将_listeners中绑定的事件剔除掉 + */ +baidu.lang.Class.prototype.dispose = function(){ + delete window[baidu.guid]._instances[this.guid]; + + for(var property in this){ + if (!baidu.lang.isFunction(this[property])) { + delete this[property]; + } + } + this.disposed = true; // 20100716 +}; + +/** + * 重载了默认的toString方法,使得返回信息更加准确一些。 + * @return {string} 对象的String表示形式 + */ +baidu.lang.Class.prototype.toString = function(){ + return "[object " + (this._className || "Object" ) + "]"; +}; + +/** + * + * @class 自定义的事件对象。 + * @name baidu.lang.Event + * @grammar baidu.lang.Event(type[, target]) + * @param {string} type 事件类型名称。为了方便区分事件和一个普通的方法,事件类型名称必须以"on"(小写)开头。 + * @param {Object} [target]触发事件的对象 + * @meta standard + * @remark 引入该模块,会自动为Class引入3个事件扩展方法:addEventListener、removeEventListener和dispatchEvent。 + * @meta standard + * @see baidu.lang.Class + */ +baidu.lang.Event = function (type, target) { + this.type = type; + this.returnValue = true; + this.target = target || null; + this.currentTarget = null; +}; + +/** + * 注册对象的事件监听器。引入baidu.lang.Event后,Class的子类实例才会获得该方法。 + * @grammar obj.addEventListener(type, handler[, key]) + * @param {string} type 自定义事件的名称 + * @param {Function} handler 自定义事件被触发时应该调用的回调函数 + * @param {string} [key] 为事件监听函数指定的名称,可在移除时使用。如果不提供,方法会默认为它生成一个全局唯一的key。 + * @remark 事件类型区分大小写。如果自定义事件名称不是以小写"on"开头,该方法会给它加上"on"再进行判断,即"click"和"onclick"会被认为是同一种事件。 + */ +baidu.lang.Class.prototype.addEventListener = function (type, handler, key) { + if (!baidu.lang.isFunction(handler)) { + return; + } + + !this.__listeners && (this.__listeners = {}); + + var t = this.__listeners, id; + if (typeof key == "string" && key) { + if (/[^\w\-]/.test(key)) { + throw("nonstandard key:" + key); + } else { + handler.hashCode = key; + id = key; + } + } + type.indexOf("on") != 0 && (type = "on" + type); + + typeof t[type] != "object" && (t[type] = {}); + id = id || baidu.lang.guid(); + handler.hashCode = id; + t[type][id] = handler; +}; + +/** + * 移除对象的事件监听器。引入baidu.lang.Event后,Class的子类实例才会获得该方法。 + * @grammar obj.removeEventListener(type, handler) + * @param {string} type 事件类型 + * @param {Function|string} handler 要移除的事件监听函数或者监听函数的key + * @remark 如果第二个参数handler没有被绑定到对应的自定义事件中,什么也不做。 + */ +baidu.lang.Class.prototype.removeEventListener = function (type, handler) { + if (typeof handler != "undefined") { + if ( (baidu.lang.isFunction(handler) && ! (handler = handler.hashCode)) + || (! baidu.lang.isString(handler)) + ){ + return; + } + } + + !this.__listeners && (this.__listeners = {}); + + type.indexOf("on") != 0 && (type = "on" + type); + + var t = this.__listeners; + if (!t[type]) { + return; + } + if (typeof handler != "undefined") { + t[type][handler] && delete t[type][handler]; + } else { + for(var guid in t[type]){ + delete t[type][guid]; + } + } +}; + +/** + * 派发自定义事件,使得绑定到自定义事件上面的函数都会被执行。引入baidu.lang.Event后,Class的子类实例才会获得该方法。 + * @grammar obj.dispatchEvent(event, options) + * @param {baidu.lang.Event|String} event Event对象,或事件名称(1.1.1起支持) + * @param {Object} options 扩展参数,所含属性键值会扩展到Event对象上(1.2起支持) + * @remark 处理会调用通过addEventListenr绑定的自定义事件回调函数之外,还会调用直接绑定到对象上面的自定义事件。例如:
+myobj.onMyEvent = function(){}
+myobj.addEventListener("onMyEvent", function(){}); + */ +baidu.lang.Class.prototype.dispatchEvent = function (event, options) { + if (baidu.lang.isString(event)) { + event = new baidu.lang.Event(event); + } + !this.__listeners && (this.__listeners = {}); + + // 20100603 添加本方法的第二个参数,将 options extend到event中去传递 + options = options || {}; + for (var i in options) { + event[i] = options[i]; + } + + var i, t = this.__listeners, p = event.type; + event.target = event.target || this; + event.currentTarget = this; + + p.indexOf("on") != 0 && (p = "on" + p); + + baidu.lang.isFunction(this[p]) && this[p].apply(this, arguments); + + if (typeof t[p] == "object") { + for (i in t[p]) { + t[p][i].apply(this, arguments); + } + } + return event.returnValue; +}; + +/** + * @namespace baidu.event 屏蔽浏览器差异性的事件封装。 + * @property target 事件的触发元素 + * @property pageX 鼠标事件的鼠标x坐标 + * @property pageY 鼠标事件的鼠标y坐标 + * @property keyCode 键盘事件的键值 + */ +baidu.event = baidu.event || {}; + + +/** + * 事件监听器的存储表 + * @private + * @meta standard + */ +baidu.event._listeners = baidu.event._listeners || []; + +/** + * 从文档中获取指定的DOM元素 + * **内部方法** + * + * @param {string|HTMLElement} id 元素的id或DOM元素 + * @meta standard + * @return {HTMLElement} DOM元素,如果不存在,返回null,如果参数不合法,直接返回参数 + */ +baidu.dom._g = function (id) { + if (baidu.lang.isString(id)) { + return document.getElementById(id); + } + return id; +}; + +// 声明快捷方法 +baidu._g = baidu.dom._g; + + +/** + * 为目标元素添加事件监听器 + * @name baidu.event.on + * @function + * @grammar baidu.event.on(element, type, listener) + * @param {HTMLElement|string|window} element 目标元素或目标元素id + * @param {string} type 事件类型 + * @param {Function} listener 需要添加的监听器 + * @remark + * +1. 不支持跨浏览器的鼠标滚轮事件监听器添加
+2. 改方法不为监听器灌入事件对象,以防止跨iframe事件挂载的事件对象获取失败 + + * @shortcut on + * @meta standard + * @see baidu.event.un + * + * @returns {HTMLElement|window} 目标元素 + */ +baidu.event.on = function (element, type, listener) { + type = type.replace(/^on/i, ''); + element = baidu.dom._g(element); + + var realListener = function (ev) { + // 1. 这里不支持EventArgument, 原因是跨frame的事件挂载 + // 2. element是为了修正this + listener.call(element, ev); + }, + lis = baidu.event._listeners, + filter = baidu.event._eventFilter, + afterFilter, + realType = type; + type = type.toLowerCase(); + // filter过滤 + if(filter && filter[type]){ + afterFilter = filter[type](element, type, realListener); + realType = afterFilter.type; + realListener = afterFilter.listener; + } + + // 事件监听器挂载 + if (element.addEventListener) { + element.addEventListener(realType, realListener, false); + } else if (element.attachEvent) { + element.attachEvent('on' + realType, realListener); + } + + // 将监听器存储到数组中 + lis[lis.length] = [element, type, listener, realListener, realType]; + return element; +}; + +// 声明快捷方法 +baidu.on = baidu.event.on; + +/** + * 为目标元素移除事件监听器 + * @name baidu.event.un + * @function + * @grammar baidu.event.un(element, type, listener) + * @param {HTMLElement|string|window} element 目标元素或目标元素id + * @param {string} type 事件类型 + * @param {Function} listener 需要移除的监听器 + * @shortcut un + * @meta standard + * @see baidu.event.on + * + * @returns {HTMLElement|window} 目标元素 + */ +baidu.event.un = function (element, type, listener) { + element = baidu.dom._g(element); + type = type.replace(/^on/i, '').toLowerCase(); + + var lis = baidu.event._listeners, + len = lis.length, + isRemoveAll = !listener, + item, + realType, realListener; + + //如果将listener的结构改成json + //可以节省掉这个循环,优化性能 + //但是由于un的使用频率并不高,同时在listener不多的时候 + //遍历数组的性能消耗不会对代码产生影响 + //暂不考虑此优化 + while (len--) { + item = lis[len]; + + // listener存在时,移除element的所有以listener监听的type类型事件 + // listener不存在时,移除element的所有type类型事件 + if (item[1] === type + && item[0] === element + && (isRemoveAll || item[2] === listener)) { + realType = item[4]; + realListener = item[3]; + if (element.removeEventListener) { + element.removeEventListener(realType, realListener, false); + } else if (element.detachEvent) { + element.detachEvent('on' + realType, realListener); + } + lis.splice(len, 1); + } + } + + return element; +}; + +// 声明快捷方法 +baidu.un = baidu.event.un; + + + +/** + * UI基类,所有的UI都应该从这个类中派生出去 + * + * @author berg + * + * property: + * + * mainId + */ +baidu.ui.Base = { + + id : "", + + /** + * 获得当前控件的id + * @param {string} optional key + * @return {string} id + */ + getId : function(key){ + var ui = this, idPrefix; + //通过guid区别多实例 + idPrefix = "tangram-" + ui.uiType + '--' + (ui.id ? ui.id : ui.guid); + return key ? idPrefix + "-" + key : idPrefix; + }, + + /** + * 获得class,支持skin + * + * @param {string} optional key + * + * @return {string} className + */ + getClass : function(key){ + var me = this, + className = me.classPrefix, + skinName = me.skin; + if (key) { + className += '-' + key; + skinName += '-' + key; + } + if (me.skin) { + className += ' ' + skinName; + } + return className; + }, + + getMain : function(){ + return baidu.g(this.mainId); + }, + + getBody : function(){ + return baidu.g(this.getId()); + }, + + + /** + * 控件类型:如dialog + */ + uiType : "", + + /** + * 获取调用的字符串的引用前缀 + */ + getCallRef : function(){ + return "window['$BAIDU$']._instances['" + this.guid + "']"; + }, + + /** + * 获取调用的字符串 + */ + getCallString : function(fn){ + var i = 0, + arg = Array.prototype.slice.call(arguments, 1), + len = arg.length; + for (; i < len; i++) { + if (typeof arg[i] == 'string') { + arg[i] = "'" + arg[i] +"'"; + } + } + //如果被闭包包起来了,用baidu.lang.instance会找到最外面的baidu函数,可能出错 + return this.getCallRef() + + '.' + fn + '(' + + arg.join(',') + + ');'; + }, + + /** + * 添加事件. 避免析构中漏掉注销事件. + * @param {HTMLElement|string|window} element 目标元素或目标元素id + * @param {string} type 事件类型 + * @param {Function} listener 需要添加的监听器 + */ + on : function(element, type, listener){ + baidu.on(element, type, listener); + this.addEventListener("ondispose", function(){ + baidu.un(element, type, listener); + }); + }, + + /** + * 渲染控件到指定的元素 + * @param {HTMLElement} main optional 要渲染到的元素,可选。 + * 如果不传此参数,则会在body下创建一个绝对定位的div做为main + * @return {HTMLElement} main 渲染到的元素 + */ + renderMain : function(main){ + var ui = this, + i = 0, + len; + //如果被渲染过就不重复渲染 + if (ui.getMain()) { + return ; + } + main = baidu.g(main); + //如果没有main元素,创建一个在body下面的div当作main + if(!main){ + main = document.createElement('div'); + document.body.appendChild(main); + main.style.position = "absolute"; + //给这个元素创建一个class,方便用户控制 + main.className = ui.getClass("main"); + } + if(!main.id){ + main.id = ui.getId("main"); + } + ui.mainId = main.id; + main.setAttribute('data-guid', ui.guid); + + return main; + }, + + /** + * 销毁当前实例 + */ + dispose : function(){ + this.dispatchEvent("dispose"); + baidu.lang.Class.prototype.dispose.call(this); + } +}; + + +/** + * @namespace baidu.object 操作原生对象的方法。 + */ +baidu.object = baidu.object || {}; + + +/** + * 将源对象的所有属性拷贝到目标对象中 + * @author erik + * @name baidu.object.extend + * @function + * @grammar baidu.object.extend(target, source) + * @param {Object} target 目标对象 + * @param {Object} source 源对象 + * @see baidu.array.merge + * @remark + * +1.目标对象中,与源对象key相同的成员将会被覆盖。
+2.源对象的prototype成员不会拷贝。 + + * @shortcut extend + * @meta standard + * + * @returns {Object} 目标对象 + */ +baidu.extend = +baidu.object.extend = function (target, source) { + for (var p in source) { + if (source.hasOwnProperty(p)) { + target[p] = source[p]; + } + } + + return target; +}; + + +/** + * 创建一个UI控件类 + * + * @param {function} constructor ui控件构造器 + * @param {object} options 选项 + * + * @return {object} ui控件 + */ +baidu.ui.createUI = function(constructor, options) { + options = options || {}; + var superClass = options.superClass || baidu.lang.Class, + lastInherit = superClass == baidu.lang.Class ? 1 : 0, + i, + n, + ui = function(opt, _isInherits){// 创建新类的真构造器函数 + var me = this; + opt = opt || {}; + // 继承父类的构造器,将isInherits设置成true,在后面不执行render操作 + superClass.call(me, !lastInherit ? opt : (opt.guid || ""), true); + + //扩展静态配置到this上 + baidu.object.extend(me, ui.options); + //扩展当前options中的项到this上 + baidu.object.extend(me, opt); + //baidu.object.merge(me, opt, {overwrite:true, recursive:true}); + + me.classPrefix = me.classPrefix || "tangram-" + me.uiType.toLowerCase(); + + //初始化行为 + //行为就是在控件实例上附加一些属性和方法 + for(i in baidu.ui.behavior){ + //添加行为到控件上 + if(typeof me[i] != 'undefined' && me[i]){ + baidu.object.extend(me, baidu.ui.behavior[i]); + if(baidu.lang.isFunction(me[i])){ + me.addEventListener("onload", function(){ + baidu.ui.behavior[i].call(me[i].apply(me)); + }); + }else{ + baidu.ui.behavior[i].call(me); + } + } + } + + //执行控件自己的构造器 + constructor.apply(me, arguments); + + //执行插件的构造器 + for (i=0, n=ui._addons.length; i"; + baidu.dom.setStyles(g.ref.columndragproxy,{ + "display":"block", + top:(colIndex.indexOf("-")==-1?"-1px":((s.cell.offsetHeight-1)+"px")), + left:(s.cell.offsetLeft-1+"px"), + width:(s.cell.clientWidth+"px"), + height:(s.cell.clientHeight+"px") + }); + g._cd={dragx:e.clientX,dragy:e.clientY,originleft:s.cell.offsetLeft-1,colIndex:colIndex,originwidth:s.cell.clientWidth}; + e.stopPropagation(); + g.clearSelection(); + } + }, + _cds_dragging:function(e){ + var g= this,cd=g._cd; + if(cd){ + var newLeft =cd.originleft+(e.clientX-cd.dragx),zIndex =g.ref.columndragproxy.style.zIndex ; + g.ref.columndragproxy.style.zIndex ="-1"; + var elem = document.elementFromPoint(e.clientX,e.clientY),targetcell=elem; + while((!baidu.dom.hasClass(targetcell,"headercol")) && targetcell!=g.element){ + targetcell=targetcell.parentNode; + } + g.ref.columndragproxy.style.zIndex =zIndex; + var targetColIndex = targetcell.getAttribute("refcol"); + if(targetColIndex!=null){ + + //列拖放规则: + // 1.父列只能在父列之前排序 + // 2.子列可以在兄弟列中拖放,还可以拖放在父列相邻列的靠进该列侧(并直接转换成子列兄弟节点的拖放) + // 所有列够不能拖放在自己周围 源单元格周围的| 不显示(不合法的拖放位置) + + //源单元格为父列,目标列不关心子列,将目标列设置为父列 这样第一条拖放规则就可以避免违反 + if(cd.colIndex.toString().indexOf("-")==-1 && targetColIndex.indexOf("-")!=-1){ + targetColIndex = targetColIndex.replace(/\-\d{1,}$/gi,""); + targetcell = baidu.dom.query("[refcol="+targetColIndex+"]",g.ref.gheader)[0]; + } + + var targetCol= g._getCol(targetColIndex), + l=baidu.dom.getPosition(targetcell).left, + w=targetcell.offsetWidth, + isleft = (e.clientX<=(l+w/2)),//当前鼠标位置是在目标单元格的左边,右边? + proxyleft =isleft?(targetcell.offsetLeft-1):(targetcell.offsetLeft+targetcell.clientWidth), + proxydisplay="block";//block表示合法的拖放位置,none为不合法的位置 + //源单元格为子列 + if(cd.colIndex.toString().indexOf("-")!=-1){ + //子列到父列(只有相邻才合法) + var colIndex1=parseInt(cd.colIndex.replace(/\-\d{1,}$/gi,""),10), + colIndex2= parseInt(cd.colIndex.replace(/^\d{1,}\-/gi,""),10), + columnscount=(g._getCol(colIndex1).columns||[]).length, + targetIsParent = targetColIndex.indexOf("-")==-1,//目标列是否为父列 + targetCol1= parseInt(targetColIndex.replace(/\-\d{1,}$/gi,""),10), + targetCol2=parseInt(targetColIndex.replace(/^\d{1,}\-/gi,""),10), + targetcolumnscount = (g._getCol(targetCol1).columns||[]).count, + isrightsibing= (targetCol1==colIndex1+1) && (targetIsParent?isleft:(targetCol2=="0" && isleft )),//是否是右相邻 + isleftsibling = (targetCol1==colIndex1-1) && (targetIsParent?(!isleft):(targetCol2==targetcolumnscount-1 && (!isleft) ));//是否是左相邻 + if(colIndex1!=targetCol1 && (!isrightsibing) && (!isleftsibling) ){//非子列兄弟列 && 不相邻 + proxydisplay="none"; + } + //如果是左相邻,右相邻,可以等效 + if(isleftsibling){ + isleft = true; + targetColIndex = colIndex1+"-0"; + } + if(isrightsibing){ + isleft = false; + targetColIndex = colIndex1+"-"+targetCol2; + } + }else{//源单元格是父列 + + } + + //所有列够不能拖放在自己周围 源单元格周围的| 不显示(不合法的拖放位置) + if(Math.abs(proxyleft- cd.originleft)<=1 || Math.abs(cd.originleft+cd.originwidth -proxyleft)<=1){ + proxydisplay = "none"; + } + + if(proxydisplay=="none"){ + delete cd.isleft; + delete cd.targetColIndex; + }else{ + cd.isleft=isleft; + cd.targetColIndex=targetColIndex; + } + + + baidu.dom.setStyles(g.ref.resizerproxy,{ + "display":proxydisplay, + "height":(g.element.clientHeight+"px"), + "top":g.ref.columndragproxy.style.top, + "left":(proxyleft+"px") + }); + } + g.ref.columndragproxy.style.left=(newLeft+"px"); + + } + }, + _cds_dragend:function(){ + var g =this,cd=g._cd; + if (cd) { + g.ref.columndragproxy.style.display="none"; + g.ref.resizerproxy.style.display="none"; + //console.log(cd.colIndex+" "+cd.targetColIndex+" "+ cd.isleft); + if(typeof(cd.targetColIndex)!="undefined"){ + + //记住之前的排序字段 + var orderCol= g._getCol(g.orderBy); + if(orderCol) orderCol._ordered =true; + + //copy source column + var copySource = baidu.object.clone(g._getCol(cd.colIndex)); + //case1: 父列之间的排序 + if(cd.targetColIndex.toString().indexOf("-")==-1 && cd.colIndex.toString().indexOf("-")==-1){ + if(!cd.isleft){ + cd.targetColIndex++; + } + if (cd.targetColIndex > cd.colIndex) { + g.columns.splice(cd.targetColIndex, 0, copySource); + g.columns.splice(cd.colIndex,1); + }else{ + g.columns.splice(cd.targetColIndex, 0, copySource); + g.columns.splice(++cd.colIndex,1); + } + }else{//case2 子列之间的排序 + var colIndex1=parseInt(cd.colIndex.toString().replace(/\-\d{1,}$/gi,""),10), + targetColIndex2= parseInt(cd.targetColIndex.toString().replace(/^\d{1,}\-/gi,""),10), + colIndex2 = parseInt(cd.colIndex.toString().replace(/^\d{1,}\-/gi,""),10); + if(!cd.isleft){ + targetColIndex2++; + } + if (targetColIndex2 > colIndex2) { + g.columns[colIndex1].columns.splice(targetColIndex2, 0, copySource); + g.columns[colIndex1].columns.splice(colIndex2,1); + }else{ + g.columns[colIndex1].columns.splice(targetColIndex2, 0, copySource); + g.columns[colIndex1].columns.splice(++colIndex2,1); + } + } + } + delete g._cd; + //更新orderBy + for(i=0,l=g.columns.length;i= g.freeze) { + cell.parentNode.removeChild(cell); + } + } + }); + baidu.dom.addClass(headertbl, "fixedheadertable"); + g.ref.gheader.appendChild(headertbl); + + g.addEventListener("afterload",function(){ + //body + var bodytbl = baidu.dom.query(".fixedbodytable",g.ref.gbody); + if(bodytbl.length){ + bodytbl[0].parentNode.removeChild(bodytbl[0]); + } + bodytbl = baidu.dom.query("table",g.ref.gbody)[0].cloneNode(true); + baidu.dom.addClass(bodytbl, "fixedbodytable"); + bodytbl.style.width="auto"; + //realfreeze:实际冻结列数 + var rows = bodytbl.rows,row0= bodytbl.rows[0],realfreeze=g.freeze,row0cells= row0.cells; + baidu.array.each(row0cells,function(cell,i){ + var colIndex = cell.getAttribute("refcol"), + col= colIndex.indexOf("-")==-1?parseInt(colIndex):parseInt(colIndex.substr(0,colIndex.indexOf("-"))); + if(col==g.freeze){ + realfreeze= i; + return false; + } + }); + for(var i=0,l=rows.length;i= realfreeze) { + cells[ll].parentNode.removeChild(cells[ll]); + } + } + } + var headertbl = baidu.dom.query(".fixedheadertable",g.ref.gheader)[0]; + baidu.dom.setBorderBoxWidth(bodytbl,headertbl.offsetWidth); + g.ref.gbody.appendChild(bodytbl); + }); + function resizeheadertbl(){ + var bodytbl = baidu.dom.query(".fixedbodytable",g.ref.gbody); + if (bodytbl.length) { + var headertbl = baidu.dom.query(".fixedheadertable", g.ref.gheader)[0]; + baidu.dom.setBorderBoxWidth(bodytbl[0], headertbl.offsetWidth); + } + } + g.addEventListener("hidecolumn",resizeheadertbl); + g.addEventListener("showcolumn",resizeheadertbl); + g.addEventListener("columnresize",resizeheadertbl); + + }); + + } + +}); diff --git a/src/tangramgrid/tangram/tangram.grid.editable.js b/src/tangramgrid/tangram/tangram.grid.editable.js new file mode 100644 index 0000000..3cc6876 --- /dev/null +++ b/src/tangramgrid/tangram/tangram.grid.editable.js @@ -0,0 +1,281 @@ +/*! + * Grid editable + * @author yanghengfeng + */ +baidu.ui.Grid.register(function(g){ + var columns = g.columns; + if(g.editMode==2){//全部编辑直接将c.renderer= c.editOption.editRenderer; + + baidu.dom.addClass(g.element,"tangramgrid-editable"); + + baidu.array.each(columns,function(c,colIndex){ + c.sortable=false; + if(c.editable && c.editOption && baidu.lang.isFunction(c.editOption.editRenderer)){ + c.renderer= c.editOption.editRenderer; + c.resizable=false; + } + if(c.columns){ + baidu.array.each(c.columns,function(subc){ + subc.sortable=false; + if(subc.editable && subc.editOption && baidu.lang.isFunction(subc.editOption.editRenderer)){ + subc.renderer= subc.editOption.editRenderer; + subc.resizable=false; + } + }); + } + }); + + //trigger onBeginEdit when data loaded + g.addEventListener("afterload",function(e,griddata){ + g.cellIterator(function(param){ + if(!baidu.dom.hasClass(param.row,"editing"))baidu.dom.addClass(param.row,"editing") + if(param.column.editable && param.column.editOption && baidu.lang.isFunction(param.column.editOption.onBeginEdit)){ + param.column.editOption.onBeginEdit.call(g,param); + } + }); + }); + } + if(g.editMode=="3"){//按单元格编辑 + g.addEventListener("cellclick",function(e,data){ + if(baidu.dom.hasClass(data.ref.cell,"editingcell")) return ; + var cell = data.ref.cell,editingcell = baidu.dom.query(".editingcell",g.ref.gbody); + editingcell= editingcell.length>0?editingcell[0]:null; + if(editingcell){//end editing cell + var columnIndex =-1,refIndex=-1, + row= editingcell.parentNode, + siblings=row.childNodes, + rowIndex = parseInt(row.getAttribute("rowindex"),10); + for(var i=0,l=siblings.length;i=0; i--) { + var row = g.getData().data.list[i]; + if (typeof(rowIndex) == "number" && i != rowIndex) { continue;} + if (baidu.lang.isArray(rowIndex) && (!baidu.array.contains(rowIndex, i))) { continue;} + if (!fields) {result.push(row);} + if (baidu.lang.isString(fields)) { + var nrow = {}; + nrow[fields] = row[fields] == "0" ? "0" : (row[fields] || ""); + result.push(nrow); + } + if (baidu.lang.isArray(fields)) { + var nrow = {}; + baidu.array.each(fields, function(f){ + nrow[f] = row[f] == "0" ? "0" : (row[f] || ""); + }); + result.push(nrow); + } + //删除行不获取 + if ((g._deletedRowIndexes && baidu.array.contains(g._deletedRowIndexes, i))) { + list.splice(i,1); + }else { + o[i] = result.length - 1; + } + } + g.cellIterator(function(param){ + if(typeof(o[param.rowIndex])=="undefined") return true;//跳过不需要获取的行 + var row = param.row,col= param.column,resultrow = result[o[param.rowIndex]],field=col.field; + if(baidu.dom.hasClass(row,"editing") && col.editable && (typeof(resultrow[field])!="undefined")){ + var newValue=null; + if(col.editOption && baidu.lang.isFunction(col.editOption.getFieldValue)){//自定义获取字段值 + newValue= col.editOption.getFieldValue.call(g,param); + }else{//没有定义,去单元格里面找name=[field]的字段值 + newValue= g._getCellFieldValue(param.cell,col.field); + } + resultrow[field]=newValue; + } + }); + return result; + }, + /** + * 获取正在编辑的行下标数组 + * @return {Array} 格式形如[rowIndex1,rowIndex2,...] + */ + getEditingRowIndexes:function(){ + var g= this,editingRows = baidu.dom.query("table:eq(0) .editing",g.ref.gbody),result=[]; + if(g.editMode!="1") return result; + baidu.array.each(editingRows,function (row){ + result.push(parseInt(row.getAttribute("rowindex"),10)); + }); + return result; + }, + /** + * 开始编辑行 + * @param {Number|Array} rowIndexes 需要激活编辑的行序号,数字,激活一行,数组,激活多行,为空的话,不激活任何行 + */ + beginEditRow:function(rowIndexes){ + if(typeof(rowIndexes)=="undefined") return ; + if(typeof(rowIndexes)=="number") rowIndexes=[rowIndexes]; + if(typeof(rowIndexes)=="string" && (!isNaN(rowIndexes))) rowIndexes=[parseInt(rowIndexes,10)]; + if(!rowIndexes.length) return ; + var g = this; + if(g.editMode!="1") return ; + g.cellIterator(function(param){ + var row = param.row,col= param.column; + if( col.editable && col.editOption && baidu.array.contains(rowIndexes,param.rowIndex) ){ + if(!baidu.dom.hasClass(row,"editing")){baidu.dom.addClass(row,"editing");} + if(baidu.lang.isFunction(col.editOption.editRenderer)){ + var cellContent = col.editOption.editRenderer.call(g,param)||""; + param.cell.childNodes[0].innerHTML = cellContent; + } + if(baidu.lang.isFunction(col.editOption.onBeginEdit)){ + col.editOption.onBeginEdit.call(g,param); + } + + } + }); + g.resize(); + }, + /** + * 结束编辑行 + * @param {Number|Array} rowIndexes 需要结束编辑的行序号,数字,激活一行,数组,激活多行,为空的话,不结束编辑任何行 + */ + endEditRow:function(rowIndexes){ + if(typeof(rowIndexes)=="undefined") return ; + if(typeof(rowIndexes)=="number") rowIndexes=[rowIndexes]; + if(typeof(rowIndexes)=="string" && (!isNaN(rowIndexes))) rowIndexes=[parseInt(rowIndexes,10)]; + if(!rowIndexes.length) return ; + var g = this; + if(g.editMode!="1") return ; + g.cellIterator(function(param){ + var row = param.row,col= param.column; + if( col.editable && col.editOption && baidu.array.contains(rowIndexes,param.rowIndex) ){ + if(baidu.dom.hasClass(row,"editing")){baidu.dom.removeClass(row,"editing");} + param.cell.childNodes[0].innerHTML = g._getCellContent(col,param.rowIndex); + } + }); + g.resize(); + }, + /** + * 添加编辑行 + * @param {Object} row 行数据 + * @param {Object} rowIndex 在行序号为rowIndex之后添加行,如果为空,在最后一行追加 + */ + /*addEditRow: function(row, rowIndex){ + var g = this, editingRows = g.getEditingRowIndexes(), currentData = g.getCurrentData(); + if(g.editMode!="1") return -1; + if (typeof(rowIndex) == "undefined") + rowIndex = currentData.length; + currentData.splice(rowIndex, 0, row); + g.getData().data.list = currentData; + g.loadData(g.getData()); + for (var i = 0, l = editingRows.length; i < l; i++) { + if (editingRows[i] >= rowIndex) { + editingRows[i]++; + } + } + editingRows.push(rowIndex); + g.beginEditRow(editingRows); + },*/ + /** + * 删除编辑行 + */ + deleteEditRow:function(rowIndex){ + var g= this; + if(g.editMode!="1") return ; + if(baidu.dom.query("[rowindex=" + rowIndex + "]", g.ref.gbody).length==0 || isNaN(rowIndex)) return ; + window.setTimeout(function(){ + g.deleteDOMRow(rowIndex); + if(!g._deletedRowIndexes) g._deletedRowIndexes=[]; + g._deletedRowIndexes.push(parseInt(rowIndex,10)); + },50); + } +}); diff --git a/src/tangramgrid/tangram/tangram.grid.groupsummary.js b/src/tangramgrid/tangram/tangram.grid.groupsummary.js new file mode 100644 index 0000000..b82d146 --- /dev/null +++ b/src/tangramgrid/tangram/tangram.grid.groupsummary.js @@ -0,0 +1,269 @@ +/*! + * Grid group & summary + * @author yanghengfeng + */ +baidu.ui.Grid.ext.summarytype={ + /** + * 计数方法统计 + * @param {Object} previousvalue 上一次调用该方法的返回值 + * @param {Object} v 此次调用方法的字段值 + * @param {Object} seqIndex 统计数据组当前行序号 + * @param {groupdata} sequencelength 需统计数据组长度 + */ + count:function(previousvalue,v,seqIndex,sequencelength){ + return seqIndex+1; + }, + sum:function(previousvalue,v,seqIndex){ + if(seqIndex==0){ + return parseFloat(v); + }else{ + return (previousvalue+parseFloat(v)); + } + }, + avg:function(previousvalue,v,seqIndex,sequencelength){ + var g=this,result ={}; + //remember iterator times and sumarry value when it is not the last time + if(seqIndex==0){ + result= {times:1,value:v}; + }else{ + result= {times:(previousvalue.times+1),value:(previousvalue.value+v)}; + } + if(result.times==sequencelength){//final average value + result = (result.value/result.times); + } + return result; + }, + max:function(previousvalue,v,seqIndex){ + if(seqIndex==0) return v; + if(v>previousvalue){ + return v; + }else{ + return previousvalue; + } + }, + min:function(previousvalue,v,seqIndex){ + if(seqIndex==0) return v; + if(vpreviousvalue){ + return v; + }else{ + return previousvalue; + } + }, + minnumber:function(previousvalue,v,seqIndex){ + if(seqIndex==0) return v; + previousvalue=parseFloat(previousvalue); + v= parseFloat(v); + if(v"); + for (var j = 0, cll = cols.length; j < cll; j++) { + var col = cols[j]; + if (!col.columns) { + var f = col.field||"",groupSummaryValue= g.groupdata[_lastGroupValue].summary[f]; + groupSummaryValue= (groupSummaryValue=="0"?0:(groupSummaryValue||"")); + var cellText = typeof(col.groupSummaryFormat)=="string"?baidu.string.format(col.groupSummaryFormat,{groupSummaryValue:groupSummaryValue}):groupSummaryValue; + if(typeof(col.groupSummaryFormat)=="function"){ + cellText= col.groupSummaryFormat.call(g,{groupSummaryValue:groupSummaryValue}); + } + arr.push(" " +cellText + ""); + + }else { + for (var subi = 0, subl = col.columns.length; subi < subl; subi++) { + var subcol= col.columns[subi],f = subcol.field||"",groupSummaryValue= g.groupdata[_lastGroupValue].summary[f]; + groupSummaryValue= (groupSummaryValue=="0"?0:(groupSummaryValue||"")); + var cellText = typeof(subcol.groupSummaryFormat)=="string"?baidu.string.format(subcol.groupSummaryFormat,{groupSummaryValue:groupSummaryValue}):groupSummaryValue; + if(typeof(subcol.groupSummaryFormat)=="function"){ + cellText= subcol.groupSummaryFormat.call(g,{groupSummaryValue:groupSummaryValue}); + } + arr.push(" " +cellText + ""); + } + } + } + arr.push(""); + } + + param.joinedArray.push(""+cellValue+""); + } + _lastGroupValue= groupValue; + }); + + g.addEventListener("endrowjoin",function(e,param){ + if(param.rowIndex +1==g.getData().data.list.length){ + var groupdata = g.groupdata,arr= param.joinedArray,groupValue = param.rowdata[g.groupBy],cols= g.columns; + //补齐最后一行的分组合计 + if(groupValue && g.groupSummary && groupdata[groupValue]){ + arr.push(""); + for (var j = 0, cll = cols.length; j < cll; j++) { + var col = cols[j]; + if (!col.columns) { + var f = col.field||"",groupSummaryValue= g.groupdata[groupValue].summary[f]; + groupSummaryValue= (groupSummaryValue=="0"?0:(groupSummaryValue||"")); + var cellText = typeof(col.groupSummaryFormat)=="string"?baidu.string.format(col.groupSummaryFormat,{groupSummaryValue:groupSummaryValue}):groupSummaryValue; + if(typeof(col.groupSummaryFormat)=="function"){ + cellText= col.groupSummaryFormat.call(g,{groupSummaryValue:groupSummaryValue}); + } + arr.push(" " +cellText + ""); + + }else { + for (var subi = 0, subl = col.columns.length; subi < subl; subi++) { + var subcol= col.columns[subi],f = subcol.field||"",groupSummaryValue= g.groupdata[groupValue].summary[f]; + groupSummaryValue= (groupSummaryValue=="0"?0:(groupSummaryValue||"")); + var cellText = typeof(subcol.groupSummaryFormat)=="string"?baidu.string.format(subcol.groupSummaryFormat,{groupSummaryValue:groupSummaryValue}):groupSummaryValue; + if(typeof(subcol.groupSummaryFormat)=="function"){ + cellText= subcol.groupSummaryFormat.call(g,{groupSummaryValue:groupSummaryValue}); + } + arr.push(" " +cellText + ""); + } + } + } + arr.push(""); + } + + } + }); + + g.addEventListener("endrowsjoin",function(e,param){ + var groupdata = g.groupdata,arr= param.joinedArray,cols= g.columns; + //总计 + if(g.summary){ + arr.push(""); + for (var j = 0, cll = cols.length; j < cll; j++) { + var col = cols[j]; + if (!col.columns) { + var f = col.field||"",summaryValue= g.summarydata[f]; + summaryValue= (summaryValue=="0"?0:(summaryValue||"")); + var cellText = typeof(col.summaryFormat)=="string"?baidu.string.format(col.summaryFormat,{summaryValue:summaryValue}):summaryValue; + if(typeof(col.summaryFormat)=="function"){ + cellText= col.summaryFormat.call(g,{summaryValue:summaryValue}); + } + arr.push(" " +cellText + ""); + + }else { + for (var subi = 0, subl = col.columns.length; subi < subl; subi++) { + var subcol= col.columns[subi],f = subcol.field||"",summaryValue= g.summarydata[f]; + summaryValue= (summaryValue=="0"?0:(summaryValue||"")); + var cellText = typeof(subcol.summaryFormat)=="string"?baidu.string.format(subcol.summaryFormat,{summaryValue:summaryValue}):summaryValue; + if(typeof(subcol.summaryFormat)=="function"){ + cellText= subcol.summaryFormat.call(g,{summaryValue:summaryValue}); + } + arr.push(" " +cellText + ""); + } + } + } + arr.push(""); + } + }); + + g.addEventListener("cellclick",function(e,data){ + var cell = data.ref.cell,row= cell.parentNode; + if(baidu.dom.hasClass(row,"groupheaderrow")){// click groupheaderrow to toggle sub rows + var groupfieldvalue=row.getAttribute("groupfieldvalue"), + rowIndexes=g.groupdata[groupfieldvalue].rows, + expander = baidu.dom.query(".groupheadertoggler",cell)[0], + toUnExpand=baidu.dom.hasClass(expander,"expanded") ; + if(toUnExpand){ + expander.innerHTML="+"; + baidu.dom.removeClass(expander,"expanded"); + }else{ + expander.innerHTML="-"; + baidu.dom.addClass(expander,"expanded"); + } + var crow = row.nextSibling; + while(crow && crow.getAttribute("rowindex")){ + crow.style.display=(toUnExpand?"none":""); + crow= crow.nextSibling; + } + } + + }); +}); diff --git a/src/tangramgrid/tangram/tangram.grid.js b/src/tangramgrid/tangram/tangram.grid.js new file mode 100644 index 0000000..89ce94d --- /dev/null +++ b/src/tangramgrid/tangram/tangram.grid.js @@ -0,0 +1,1280 @@ +/*! + * Grid,based on Tangram lib + * Tangram Grid is the Grid you need! + * @author yanghengfeng + * @param {Object} options选项 + * @config {String} element ID或者DOM + * @config {Number} height 控件的高度 + * @config {Boolean} autoHeight 自动高度 默认为false,如果autoHeight==true 内容<=height 高度设置为height。内容>height 使用内容height + * @config {String} docktop 表格上部固定内容,计算表格高度会加上该元素的高度 + * @config {Array} columns 列模型 格时形如 [{field:'NAME',header:"姓名",width:300,fix:true,type:'checkbox'/function}] + * @config {Function} onRowClick 行点击事件 参数为 {rowIndex:rowIndex,row:rowdata} + * @config {Function} onRowDblClick 行双击点击事件 参数为 {rowIndex:rowIndex,row:rowdata} + * @config {Function} onCellClick 单元格点击 参数为 {columnIndex:columnIndex,refIndex:refIndex,rowIndex:rowIndex,resizable:true,sortable:true} + * @config {Function} onSelect 单元格选择触发 参数为{rowIndex:rowIndex,row:rowdata} + * @config {Function} onUnSelect 单元格取消选择触发 参数为{rowIndex:rowIndex,row:rowdata} + * @config {Number} selectMode 行选择模式:0 不选择,1 单行选择,2 多行选择,默认为0 + * @config {String|Function} selectBy 初始选中是否选中字段或者判断函数,如果是字段名,则判断该字段是否为true/1,如果是函数,函数接收参数{rowdata:rowdata,rowIndex:rowIndex} + * @config {Boolean} strip 隔行变色效果 默认为true + * @config {Boolean} hoverhighlight hover是否高亮行,默认是true + * @config {Boolean|Object|String} page===false:不分页,否则为分页参数 分页参数默认为{perPage:10,pagenumbers:[10,20,50,100],curPage:1,pages:0,from:0,to:0,total:0,tools:"自定义分页中间的工具html"} 如果page是字符串,则作为自定分页控件的容器 + * @config {String} url ajax请求url + * @config {Object} ajaxOption ajax请求参数 + * @config {Function} onBeforeRequest ajax请求前执行方法 + * @config {Function} onBeforeLoad 数据加载前执行方法(ajax请求回调) + * @config {Function} onAfterLoad 数据加载后执行方法 + * @config {String} orderBy 初始排序字段 + * @config {String} order 初始排序类型desc /asc + * @config {Function} onBeforeSort排序前执行方法参数为{orderBy:"字段",order:"asc/desc"} + * @config {Boolean} loadMask,ajax请求是否显示遮罩 + * @config {String} loadMessage,遮罩时提示文本,默认为"正在加载..." + */ +baidu.ui.Grid = baidu.ui.createUI(function(opt){ + opt.autoRender=true; + this.element= baidu.g(opt.element); +}).extend({ + uiType: "grid", + + /** + * 设置宽度和高度 + * @param {Object} o {width:w,height:h} w可以是数字和"auto" h 只能是数字 + */ + setSize:function(o){ + if (o && o.width) { + if(isNaN(o.width)){ + baidu.dom.setStyle(this.element,"width",o.width); + }else{ + baidu.dom.setStyle(this.element,"width",o.width); + } + } + if (o && o.height) { + this._setHeight(o.height); + }else{ + this._setHeight(this.height); + } + this._fixColWidth(); + this._sizeScroller(); + this.dispatchEvent("resize",{}); + }, + /** + * 调整grid的大小 + */ + resize:function(){ + this.setSize(); + }, + /** + * 计算自适应列的宽度 + */ + _fixColWidth:function(){ + var g= this,fixColIndex=g.fixColIndex, + t=baidu.dom.query(".gridtable",g.ref.gbody), + y=parseInt(baidu.dom.getStyle(g.ref.gbody.parentNode,"height"),10)||g.ref.gbody.parentNode.clientHeight, + s=g.ref.gheader.style,fixcol=null, + hdContentWidth = g.ref.gheader.parentNode.offsetWidth-parseInt(baidu.dom.getStyle(g.ref.gheader,"border-left-width"),10)-parseInt(baidu.dom.getStyle(g.ref.gheader,"border-right-width"),10), + w=hdContentWidth; + if(fixColIndex!=-1){ + var t = baidu.dom.query(".gridtable",g.ref.gbody); + for (i = 0, l = g.ref.ghcells.length; i < l; i++) { + var c=g.ref.ghcells[i],refcol=c.getAttribute("refcol"); + if ((!g.columns[refcol].fix) || (!refcol)) { + w -= c.offsetWidth; + }else{ + fixcol= c; + } + } + if (fixcol && w>20) { + w= w- parseInt(baidu.dom.getStyle(fixcol,"border-left-width"),10)- parseInt(baidu.dom.getStyle(fixcol,"border-right-width"),10); + if (t.length > 0 && t[0].offsetHeight > y && (!g.autoHeight)) { + w=w-17; + } + baidu.dom.setBorderBoxWidth(fixcol,w); + g.columns[g.fixColIndex].width = w; + if(g.ref.gbody){ + var fixbodycell = baidu.dom.query("[refcol="+g.fixColIndex+"]",g.ref.gbody); + baidu.array.each(fixbodycell,function (c){ + baidu.dom.setBorderBoxWidth(fixbodycell[0],w); + }); + } + } + } + g._webkit(); + }, + /** + * webkit bug fix + */ + _webkit:function(mode){ + var g = this; + if(baidu.browser.isWebkit){ + baidu.array.each(baidu.dom.query("table",g.ref.gbody),function(t){ + if(t.rows[0]){ + baidu.array.each(t.rows[0].cells,function(c,i){ + var colIndex = c.getAttribute("refcol"),col= g._getCol(colIndex); + if(g.fixColIndex==colIndex){ + if(mode){ + c.style.width=((col.width+1)+"px"); + }else{ + c.style.width=(col.width+"px"); + } + if(mode===false ){ + c.style.width=((col.width+1)+"px"); + } + + }else if(i!=0 ){ + c.style.width=((col.width+1)+"px"); + } + }); + } + }); + } + }, + /** + * 根据表格数据内容计算横向/纵向滚动条的位置和大小 + */ + _sizeScroller:function(){ + var g =this,t=baidu.dom.query(".gridtable",g.ref.gbody); + //set the top of yscroller + g.ref.yscroller.style.top=g.ref.gheader.offsetHeight+"px"; + if(t.length>0 && g.ref.gbody){ + t[0].style.width=g.ref.gheader.childNodes[0].clientWidth+"px"; + var t=t[0],tHeight=t.offsetHeight,tWidth=t.offsetWidth,bodySibings = g.ref.gbody.parentNode.childNodes, + y=parseInt(baidu.dom.getStyle(g.ref.gbody.parentNode,"height"),10)||g.ref.gbody.parentNode.clientHeight, + s=g.ref.gheader.style, + x=g.ref.gheader.parentNode.offsetWidth-parseInt(baidu.dom.getStyle(g.ref.gheader,"border-left-width"),10)-parseInt(baidu.dom.getStyle(g.ref.gheader,"border-right-width"),10); + for(var i = 0,l=bodySibings.length;i0)g.ref.gbody.childNodes[0].style.marginLeft="0px"; + g.ref.gheader.childNodes[0].style.marginLeft="0px"; + t.style.marginBottom="0px"; + if(g.autoHeight){ + var gridcontainer = baidu.dom.query("> .tangramgridcontainer",g.element); + //如果autoHeight==true 内容<=height 高度设置为height。内容>height 使用内容height + if(yOverFlow){ + g.ref.xscroller.style.display=(xOverFlow?"block":"none"); + g.ref.yscroller.style.display="none"; + g.ref.rbcorner.style.display="none"; + + baidu.dom.setStyle(g.ref.xscroller,"width",x); + baidu.dom.setStyle(g.ref.xstrecher,"width",tWidth); + + + baidu.dom.setStyle(g.ref.gbody,"width",x); + baidu.dom.setStyle(g.ref.gbody,"height","auto"); + + if(gridcontainer.length) baidu.dom.setStyle(gridcontainer[0],"height","auto"); + + + } + if(xOverFlow){ + t.style.marginBottom="17px"; + baidu.dom.setStyle(g.ref.gbody,"height","auto"); + } + var h =0,nodes = g.element.childNodes; + for(var i = 0,l=nodes.length;i .gridloadmask",g.element),maskmessage= baidu.dom.query("> .gridloadmessge",g.element); + if (mask.length) { + mask[0].style.height=g.element.clientHeight+"px"; + mask[0].style.display = "block"; + } + if(maskmessage.length) maskmessage[0].style.display="block"; + + }, + /** + * 隐藏遮罩层 + */ + hideMask:function(){ + var g=this, mask= baidu.dom.query("> .gridloadmask",g.element),maskmessage= baidu.dom.query("> .gridloadmessge",g.element); + if (mask.length) mask[0].style.display="none"; + if(maskmessage.length) maskmessage[0].style.display="none"; + }, + /** + * ajax加载加载数据 + * @param {Object} param 传递的额外参数可以是string 也可以是{key:value} + */ + request:function(param){ + var g=this,opt= g.ajaxOption||{},data=opt.data||"",param= param||{},orderBy=g.orderBy||"",ordercol=g._getCol(orderBy); + if(baidu.lang.isString(param)) param = baidu.url.queryToJson(param); + data = baidu.url.queryToJson(data); + //grid param + data.curPage = g.page.curPage; + data.perPage = g.page.perPage; + (ordercol && ordercol.field) && (data.orderBy =ordercol.field); + data.order=g.order||""; + + data=baidu.object.extend(data,param); + opt.onsuccess=function(xhr,result){ + if(g.loadMask){ + g.hideMask(); + } + var ajaxResult = baidu.json.parse(result); + g.dispatchEvent("datafilter",ajaxResult);//datafilter + g.loadData(ajaxResult); + } + if(g.page===false){ + delete data.curPage; + delete data.perPage; + } + opt.data=data; + //function onBeforeRequest can change request option + if(!g.dispatchEvent("beforerequest",opt)){return ;} + if(typeof(g.onBeforeRequest)=="function" && g.onBeforeRequest({},opt)===false ) {return;} + + opt.data = baidu.url.jsonToQuery(opt.data); + g.ajaxOption=opt;//remember the ajaxOption.data + g.page.curPage = data.curPage;//remember current page + //g.orderBy=data.orderBy; + //g.order=data.order; + + if(g.loadMask){ + g.showMask(); + } + if(g.url)baidu.ajax.request(g.url,opt); + }, + /** + * 加载数据 + * @param {Object} data + */ + loadData:function(data){ + var g=this; + if(!g.dispatchEvent("beforeload",data)){return ;} + if(typeof(g.onBeforeLoad)=="function") g.onBeforeLoad({},data); + var rows=data.data.list||[],arr=[" border='0' cellspacing='0' cellpadding='0' >"],cols = g.columns,realColumnsLength=0; + g.data=data; + g.selectedRows=[];//clear selections + + + arr.push(""); + for(var j=0,ll=cols.length;j"); + realColumnsLength++; + }else{ + for(var subi=0,subl=col.columns.length;subi"); + } + } + } + arr.push(""); + for(var i=0,l=rows.length;i= 1 && g.selectMode == 1) {//单选 + select = false; + }else { + g.selectedRows.push(i); + } + } + //beginrowjoin and the performance???? + g.dispatchEvent("beginrowjoin",{realColumnsLength:realColumnsLength,rowdata:row,rowIndex:i,joinedArray:arr}); + arr.push(""); + for(var j=0,ll=cols.length;j " + g._getCellContent(col,i,{select:select}) + ""); + }else{ + for(var subi=0,subl=col.columns.length;subi " + g._getCellContent(subcol,i,{select:select}) + ""); + } + } + } + arr.push(""); + //endrowjoin and the performance???? + g.dispatchEvent("endrowjoin",{realColumnsLength:realColumnsLength,rowdata:row,rowIndex:i,joinedArray:arr}); + } + g.dispatchEvent("endrowsjoin",{joinedArray:arr}); + arr.push(""); + arr.unshift("
=pages || pages<=1); + p.last.disabled = (c>=pages || pages<=1); + p.from.innerHTML =from; + p.to.innerHTML =to; + p.total.innerHTML =data.data.page.total; + + //remember the data + g.page.pages=pages; + g.page.from=from; + g.page.to=to; + g.page.total=data.data.page.total; + + } + g._webkit(); + g.dispatchEvent("afterload",data); + if(typeof(g.onAfterLoad)=="function") g.onAfterLoad({},data); + }, + /** + * 根据单元格配置属性获取单元格内容html + * @param {Object} col + * @param {Number} rowIndex 行序号 + * @param {Object} extraParam 添加的额外参数可空 + * @return {String} 内容html + */ + _getCellContent:function(col,rowIndex,extraParam){ + var g=this,row= g.getData().data.list[rowIndex]||{}, + celltext=row[(col.field||"")], + celltext=(celltext=="0"?celltext:(celltext||"")), + coltype = baidu.ui.Grid.ext.coltype[col.renderer||""], + param = {cellvalue:celltext,colopts:col,rowdata:row,rowIndex:rowIndex}; + if(baidu.lang.isObject(extraParam)){baidu.object.extend(param,extraParam)}; + if (baidu.lang.isObject(coltype) && coltype && baidu.lang.isFunction(coltype.format)) { + celltext = coltype.format.call(g, param) || ""; + } + if (baidu.lang.isFunction(col.renderer)) { + celltext = col.renderer.call(g, param) || ""; + } + return celltext; + }, + /** + * 获取表格数据 + */ + getData:function(){ + return this.data; + }, + /** + * 选中 + * @param {Object} rowIndex 行序号 从0开始 + * @param {Object} e event对象,可选参数 + * @param {Object} data 事件传递参数,可选参数 + */ + selectRow:function(rowIndex,e,data){ + var g =this,rowIndex = parseInt(rowIndex,10),isSelected = (baidu.array.indexOf(g.selectedRows,rowIndex) != -1); + if(!data) data ={rowIndex:rowIndex,row:g.data.data.list[rowIndex]}; + //select + if (g.selectMode) { + if (g.selectMode == 1) { + //清除选中 + baidu.array.each(g.selectedRows, function(i){ + /*var row = baidu.dom.query("[rowindex=" + i + "]", g.gbody)[0]; + baidu.dom.removeClass(row, "selected");*/ + baidu.array.each(baidu.dom.query("[rowindex=" + i + "]", g.ref.gbody),function(row){ + baidu.dom.removeClass(row, "selected"); + }); + var removedata={rowIndex:i,row:g.data.data.list[i]}; + g.dispatchEvent("unselect",removedata); + if(typeof(g.onUnSelect)=="function") g.onUnSelect(e,removedata); + }); + g.selectedRows = []; + } + + /*if (!g.dispatchEvent("beforeselect", data)) { return; } + if (typeof(g.onBeforeSelect) == "function" && (!g.onBeforeSelect(e, data))) { return;}*/ + /*var newrow = baidu.dom.query("[rowindex=" + rowIndex + "]", g.gbody)[0]; + baidu.dom.addClass(newrow, "selected");*/ + if(g.selectMode==2 && isSelected) return true;//多选,已经选中,直接返回 + baidu.array.each(baidu.dom.query("[rowindex=" + rowIndex + "]", g.ref.gbody),function(row){ + baidu.dom.addClass(row, "selected"); + }); + g.selectedRows.push(rowIndex); + g.selectedRows.sort(); + g.dispatchEvent("select",data); + if(typeof(g.onSelect)=="function") g.onSelect(e,data); + } + return true; + }, + /** + * 选中 + * @param {Object} rowIndex 行序号 从0开始 + * @param {Object} e event对象,可选参数 + * @param {Object} data 事件传递参数,可选参数 + */ + unSelectRow:function(rowIndex,e,data){ + + var g =this,rowIndex = parseInt(rowIndex,10),isSelected = (baidu.array.indexOf(g.selectedRows, rowIndex) != -1); + if(!data) data ={rowIndex:rowIndex,row:g.data.data.list[rowIndex]}; + if(isSelected){ + /*if (!g.dispatchEvent("beforeunselect", data)) {return false;} + if (typeof(g.onBeforeUnSelect) == "function" && (!g.onBeforeUnSelect(e, data))) {return false;}*/ + + /*var row = baidu.dom.query("[rowindex=" + rowIndex + "]", g.gbody)[0]; + baidu.dom.removeClass(row,"selected");*/ + baidu.array.each(baidu.dom.query("[rowindex=" +rowIndex + "]", g.ref.gbody),function(row){ + baidu.dom.removeClass(row, "selected"); + }); + baidu.array.remove(g.selectedRows,rowIndex);//splice + + g.dispatchEvent("unselect",data); + if(typeof(g.onUnSelect)=="function") g.onUnSelect(e,data); + } + + }, + /** + * 选中/不选中 + * @param {Object} rowIndex 行序号 从0开始 + * @param {Object} e event对象,可选参数 + * @param {Object} data 事件传递参数,可选参数 + */ + toggleSelectRow:function(rowIndex,e,data){ + var g =this,rowIndex = parseInt(rowIndex,10),isSelected = (baidu.array.indexOf(g.selectedRows,rowIndex) != -1); + if(!data) data ={rowIndex:rowIndex,row:g.data.data.list[rowIndex]}; + if(isSelected){ + g.unSelectRow(rowIndex,e,data); + }else{ + g.selectRow(rowIndex,e,data); + } + + }, + /** + * 获取选中行数据(只返回一行数据) + * @param fields {String|Array}指定列名称 + */ + getSelected:function(fields){ + var selections = this.getSelections(); + if(selections.length>0){ + return selections[0]; + }else{ + return null; + } + }, + /** + * 获取选中行(多行) + */ + getSelections:function(fields){ + var result=[],g=this; + baidu.array.each(g.selectedRows,function (i){ + var row = {},datarow = g.data.data.list[i]; + if(baidu.lang.isString(fields)){ + row[fields]= datarow[fields]; + }else if(baidu.lang.isArray(fields)){ + baidu.array.each(fields,function(f){ + row[f]= datarow[f]; + }); + }else{ + row = datarow; + } + result.push(row); + //result.push(field?g.data.data.list[i][field]:g.data.data.list[i]); + }); + return result; + }, + /** + * 按照字段排序 + * @param {Object} colIndex 排序字段序号 + * @param {Object} order 排序类型 desc / asc + * @param {Object} e event对象,可空 e如果为空,默认找到字段的第一个列排序 + */ + reOrder: function(colIndex,order,e){ + var g =this,s=g._getSrc(e),col=g._getCol(colIndex), + data={orderBy:col.field,order:order,curPage:1,colIndex:colIndex}, + isdesc=(order=="asc"), + cell=s.cell?[s.cell]:[]; + if(col.sortable===false || col.columns ){return ;} + if(!cell.length){ + cell= baidu.dom.query("[refcol="+colIndex.toString()+"]",g.ref.gheader); + } + if(cell.length==0) {return ;} + if(!g.dispatchEvent("beforesort",data)){return ;} + if(typeof(g.onBeforeSort)=="function" && g.onBeforeSort(e,data)===false) {return ;} + + //remember order status + g.order=order; + g.orderBy=colIndex; + + //reset all sorted field + // //▼ + baidu.array.each(baidu.dom.query(".sorter",g.ref.gheader),function(o){ + baidu.dom.remove(o); + }); + + var sorter= baidu.dom.create("span",{ + "className": "sorter " + (isdesc ? "sort-asc" : "sort-desc") + }); + sorter.innerHTML = (isdesc?"▲":"▼"); + baidu.array.each(cell,function(c){ + c.childNodes[0].appendChild(sorter); + }); + delete data.colIndex; + g.request(data); + }, + /** + * 隐藏列 + * @param {Object} colIndex 列序号。从0开始 + */ + hideColumn:function(colIndex){ + var g=this,colIndex=colIndex.toString(),nodes = baidu.dom.query(".gridtable",g.ref.gbody),col=g._getCol(colIndex); + col.hide=true; + if (colIndex.indexOf("-") != -1) {//show parent + var parentColIndex = colIndex.substr(0, colIndex.indexOf("-")), parentCol = g._getCol(parentColIndex),allhidden=true; + for (var i = parentCol.columns.length - 1; i >= 0; i--){ + if(!parentCol.columns[i].hide) allhidden=false; + }; + parentCol.hide= allhidden; + }else if(col.columns){ + for (var i = col.columns.length - 1; i >= 0; i--){ + col.columns[i].hide= true; + }; + } + + g.render(g.element); + g.dispatchEvent("hidecolumn",{colIndex:colIndex}); + }, + /** + * 显示列 + * @param {Object} colIndex 列序号 + */ + showColumn:function(colIndex){ + var g=this,nodes = baidu.dom.query(".gridtable",g.ref.gbody),colIndex=colIndex.toString(),col=g._getCol(colIndex); + col.hide=false; + if (colIndex.indexOf("-") != -1) {//show parent + var parentColIndex = colIndex.substr(0, colIndex.indexOf("-")), parentCol = g._getCol(parentColIndex); + parentCol.hide = false; + }if(col.columns){ + for (var i = col.columns.length - 1; i >= 0; i--){ + col.columns[i].hide= false; + }; + } + g.render(g.element); + g.dispatchEvent("showcolumn",{colIndex:colIndex}); + }, + /** + * 新增行 + * @param {Object} row 行数据 + * @param {Number} rowIndex 在第rowIndex行后新增,rowIndex如果不指定,行数据追加到表格最后。rowIndex从1开始,rowIndex如果为0,则在最上方添加行 + */ + addRow:function(row,rowIndex){ + if(typeof(rowIndex)=="undefined") rowIndex = this.data.data.list.length; + this.data.data.list.splice(rowIndex,0,row); + if(this.data.data.page && typeof(this.data.data.page.total)!="undefined") this.data.data.page.total++; + this.loadData(this.data); + this.dispatchEvent("addrow",{row:row,rowIndex:rowIndex}); + }, + /** + * 更新行 + * @param {Object} row 行数据 + * @param {Number} rowIndex 替换行的下标,从0开始 + */ + updateRow:function(row,rowIndex){ + this.data.data.list[rowIndex]=row; + this.loadData(this.data); + this.dispatchEvent("updaterow",{row:row,rowIndex:rowIndex}); + }, + /** + * 删除行 + * @param {Number} rowIndex 删除下标为rowIndex行后的行 + */ + deleteRow:function(rowIndex){ + baidu.array.remove(this.selectedRows,rowIndex); + this.data.data.list.splice(rowIndex,1); + if(this.data.data.page && typeof(this.data.data.page.total)!="undefined") this.data.data.page.total--; + this.loadData(this.data); + this.dispatchEvent("deleterow",{rowIndex:rowIndex}); + }, + /** + * 添加行 + * @param {Object} rowdata 行数据 + * @param {Object} rowIndex 在rowIndex行后添加 + * @return {Number} 返回新增行的rowIndex + */ + addDOMRow:function(rowdata,rowIndex){ + var g=this,tables = baidu.dom.query(".gridtable",g.ref.gbody); + if(typeof(rowIndex)=="undefined") rowIndex = g.getData().data.list.length; + g.getData().data.list.push(rowdata); + var newRowIndex = g.getData().data.list.length - 1; + baidu.array.each(tables,function(t){ + var row0= t.rows[0], + cells= row0.cells, + rows=baidu.dom.query(".gridrow[rowindex="+rowIndex+"]",t), + row =rows.length>0?rows[0]:baidu.dom.query("tr:last",t)[0], + rowNextSibling = rows.length>0?row:row.nextSibling; + if(!row){return true;} + var newRow = document.createElement("tr"); + newRow.className="gridrow"; + newRow.setAttribute("rowindex",newRowIndex); + for(var i=0,l=cells.length;i" + g._getCellContent(col,newRowIndex) + ""; + newRow.appendChild(td); + } + if(rowNextSibling){ + rowNextSibling.parentNode.insertBefore(newRow,rowNextSibling); + }else{ + row.parentNode.appendChild(newRow); + } + }); + g.resize(); + this.dispatchEvent("addomrow",{rowIndex:rowIndex,newRowIndex:newRowIndex,rowdata:rowdata}); + return newRowIndex; + }, + /** + * 更新行 + * @param {Object} rowdata 行数据 + * @param {Object} rowIndex 行号 + */ + updateDOMRow:function(rowdata,rowIndex){ + var g=this,tables = baidu.dom.query(".gridtable",g.ref.gbody); + g.getData().data.list[rowIndex]=rowdata;//update model; + baidu.array.each(tables,function(t){ + var row0= t.rows[0], + cells= row0.cells, + row = (baidu.dom.query(".gridrow[rowindex="+rowIndex+"]",t)[0]); + if(!row){return true;} + var newRow = document.createElement("tr"); + newRow.className="gridrow"; + newRow.setAttribute("rowindex",rowIndex); + for(var i=0,l=cells.length;i" + g._getCellContent(col,rowIndex) + ""; + newRow.appendChild(td); + } + row.parentNode.replaceChild(newRow,row); + }); + g.resize(); + this.dispatchEvent("updatedomrow",{rowIndex:rowIndex,rowdata:rowdata}); + }, + /** + * 删除行 + * @param {Object} rowIndex 行号 + */ + deleteDOMRow:function(rowIndex){ + var g=this,tables = baidu.dom.query(".gridtable",g.ref.gbody); + baidu.array.remove(g.selectedRows,rowIndex); + //删除DOM row。不删除model数据 + //g.getData().data.list.splice(rowIndex,1); + baidu.array.each(tables,function(t){ + var row = (baidu.dom.query(".gridrow[rowindex="+rowIndex+"]",t)[0]); + if(!row){return true;} + row.parentNode.removeChild(row); + }); + g.resize(); + this.dispatchEvent("deletedomrow",{rowIndex:rowIndex}); + }, + /** + * 单元格遍历函数 + * @param fn {Function} 遍历函数,如果该方法返回false,遍历结束,函数接收参数{column:colopts,cell:cell,row:row,colIndex:refcol,rowIndex:rowIndex,rowdata:g.getData().data.list[rowIndex]} + */ + cellIterator:function(fn){ + var g = this,tables = baidu.dom.query("table",g.ref.gbody); + for(var ti=0,tl=tables.length;ti 0 || baidu.dom.query(".sorter", cell).length == 0),//当前状态是否是降序 + order = isdesc ? "asc" : "desc"; + g.reOrder(refcol,order,e); + } + g.dispatchEvent("headercellclick",{ref:s}); + } + } + baidu.event.on(g.ref.gheader,"click",headerClick); + + //column resizable + var headerLeft= baidu.dom.getPosition(g.ref.gheader).left,isResizing=false,cell=null,l=0; + function resizing(e){ + if(isResizing){ + var x = baidu.event.getPageX(e); + g.ref.resizerproxy.style.left=(x-headerLeft)+"px"; + } + } + function stopResizing(e){ + if (isResizing) { + var x = baidu.event.getPageX(e),l = baidu.dom.getPosition(cell).left,colWidth = (x-l), + refcol=cell.getAttribute("refcol"), + column=g._getCol(refcol), + bodycell= baidu.dom.query("[refcol="+refcol+"]",g.ref.gbody), + t= baidu.dom.query(".gridtable",g.ref.gbody), + offset = g._getCol(refcol).width-colWidth; + + cell.style.width= colWidth+"px"; + + baidu.array.each(baidu.dom.query("[refcol="+refcol+"]",g.ref.gheader),function(c){ + c.style.width=colWidth+"px"; + }); + + column.width=colWidth; + + baidu.array.each(bodycell,function(cell){ + cell.style.width=colWidth+"px"; + }); + baidu.array.each(t,function(table){ + var tWidth = parseInt(baidu.dom.getStyle(table, "width"), 10); + table.style.width = (tWidth - offset) + "px"; + }); + g.ref.resizerproxy.style.display="none"; + g._sizeScroller(); + g.dispatchEvent("columnresize",{column:column}); + } + isResizing=false; + cell==null; + g._webkit(refcol!=g.fixColIndex); + } + function startResize(e){ + var s = g._getSrc(e),src= s.src,e=baidu.event.get(e); + headerLeft= baidu.dom.getPosition(g.ref.gheader).left; + if (baidu.dom.hasClass(src,"header-col-resizer")) { + cell = s.cell; + l = baidu.dom.getPosition(cell).left; + var x = baidu.event.getPageX(e); + g.ref.resizerproxy.style.left = (x - headerLeft) + "px"; + g.ref.resizerproxy.style.height = g.element.clientHeight+"px"; + g.ref.resizerproxy.style.display = "block"; + isResizing = true; + g.clearSelection(); + e.stopPropagation(); + } + } + baidu.event.on(g.ref.gheader,"mousedown",startResize); + baidu.event.on(g.ref.gheader,"mousemove",resizing); + baidu.event.on(g.element,"mouseup",stopResizing); + + + }, + tplFrame:'#{loadmask}#{docktop}
#{hcols}
#{dockbottom}', + tplPager:"
#{from}-#{to} of #{total}/#{pages}#{tools}
", + /** + * 初始化grid + * @param {Object} target + */ + render:function(target){ + if(!baidu.g(target)){return ;} + this.fixColIndex=-1;// the index of column to fix width + var g = this, + frameHtml=baidu.format(g.tplFrame,{ + element:g.element.id, + dockbottom:(function(){ + if(g.page===false){ return "";}//不分页 + if(g.page===true) g.page={};//分页&默认配置 + if (baidu.lang.isString(g.page)) {//自定义分页 + g._useDefaultPager = false; + return g.page; + }else { + g._useDefaultPager = true; + g.page = baidu.object.merge(g.page || {}, { + perPage: 10, + pagenumbers: [10, 20, 50, 100], + curPage: 1, + pages: 0, + from: 0, + to: 0, + total: 0 + }); + return baidu.format(g.tplPager, baidu.object.extend(g.page, { + pnoptions: (function(){ + var arr = []; + baidu.array.each(g.page.pagenumbers, function(o){ + arr.push(""); + }); + return arr.join(""); + })() + })); + } + })(), + docktop:g.docktop||"", + loadmask:'
'+(g.loadMessage||"正在加载...")+'
', + hcols:(function(){ + var arr=[""],grouped =false,arr2=[""]; + for (i = 0, l = g.columns.length; i < l; i++) { + if (g.columns[i].columns && g.columns[i].columns.length) { + grouped = true; + break; + } + } + g.grouped = grouped; + for(i=0,l=g.columns.length;i"+(g.order=="desc"?"▼":"▲")+"":""); + if(g.orderBy==i)g.orderBy=i; + var resizer = (( (col.resizable!==false) && (!col.columns))?"":""); + var colspan = (col.columns?(" colspan='"+col.columns.length+"' "):""); + arr.push('
'+header+''+sort+resizer+'
'); + if(baidu.lang.isArray(col.columns)){ + for(var j = 0,ll=col.columns.length;j":""); + var sort =((g.orderBy==(i+"-"+j))?""+(g.order=="desc"?"▼":"▲")+"":""); + if(g.orderBy==(i+"-"+j))g.orderBy=(i+"-"+j); + arr2.push('
'+header+''+sort+resizer+'
'); + + } + } + } + arr.push(""); + arr2.push(""); + return arr.join("")+(grouped?arr2.join(""):""); + })() + }); + g._clearBindings(); + baidu.dom.addClass(g.element,"tangramgrid"); + g.renderMain(target); + g.element.innerHTML= frameHtml; + //cache grid's element references + g.ref={}; + g.selectedRows=[];//the row index of selected rows + g.highLightedRow=-1;//current highlighted row index + g.grouped=false; + g.ref.gheader= baidu.g(this.element.id+"-gridheader"); + g.ref.gbody= baidu.g(this.element.id+"-gridbody"); + g.ref.ghcells = baidu.dom.query("table tr:eq(0) td",g.ref.gheader); + g.ref.yscroller=baidu.dom.query(".grid-yscroller",g.element)[0]; + g.ref.ystrecher=baidu.dom.query(".grid-y-strecher",g.element)[0]; + g.ref.xscroller=baidu.dom.query(".grid-xscroller",g.element)[0]; + g.ref.xstrecher=baidu.dom.query(".grid-x-strecher",g.element)[0]; + g.ref.rbcorner=baidu.dom.query(".grid-rb-corner",g.element)[0]; + g.ref.resizerproxy=baidu.dom.query(".grid-resizer-proxy",g.element)[0]; + + //g.page + if(g.page && g._useDefaultPager){ + g.ref.pager={ + pagenumbers:baidu.dom.query(".tgpager-pagenumbers",g.element)[0], + first:baidu.dom.query(".tgpager-first",g.element)[0], + prev:baidu.dom.query(".tgpager-prev",g.element)[0], + curPage:baidu.dom.query(".tgpager-curPage",g.element)[0], + pages:baidu.dom.query(".tgpager-pages",g.element)[0], + next:baidu.dom.query(".tgpager-next",g.element)[0], + last:baidu.dom.query(".tgpager-last",g.element)[0], + from:baidu.dom.query(".tgpager-from",g.element)[0], + to:baidu.dom.query(".tgpager-to",g.element)[0], + total:baidu.dom.query(".tgpager-total",g.element)[0] + }; + //bind pager events + var p = g.ref.pager,h =baidu.fn.bind(g._handlePager,g);//bind saved me ! + baidu.event.on(p.pagenumbers, "change", h); + baidu.event.on(p.first, "click", h); + baidu.event.on(p.prev, "click", h); + baidu.event.on(p.curPage, "keydown", h); + baidu.event.on(p.curPage, "blur",h); + baidu.event.on(p.next, "click",h); + baidu.event.on(p.last, "click",h); + } + + this._fixColWidth(); + this._setHeight(g.height); + this._bindScroller(); + this._bindEvents(); + //notify I am initialized + this.dispatchEvent("initialized",{}); + + //load data if exist + if(this.data) this.loadData(this.getData()); + }, + _handlePager:function(e){ + var g= this,p = g.ref.pager,e=baidu.event.get(e), + perPage=p.pagenumbers.options[p.pagenumbers.selectedIndex].value, + curPage=g.page.curPage,s = e.target,prevent=false; + if(s==p.first || s==p.pagenumbers){ + curPage=1; + } + if(s==p.prev){ + curPage=Math.max(1,curPage-1); + } + if(s==p.next){ + curPage=Math.min(g.page.pages,curPage+1); + } + if(s==p.last){ + curPage=g.page.pages; + } + if(s==p.curPage){ + var v = p.curPage.value; + if(e.type=="keydown"){ + var keyCode = baidu.event.getKeyCode(e); + if(keyCode==13){ + if (isNaN(v)) { + prevent=true; + }else{ + curPage = ~~v; + if (curPage < 1) { + curPage = 1; + prevent=true; + } + if (curPage > g.page.pages) { + curPage = g.page.pages; + prevent=true; + } + } + p.curPage.value=curPage; + }else{ + return true; + } + } + if(e.type=="blur"){ + if (isNaN(v)) { + p.curPage.value=curPage; + prevent=true; + }else{ + curPage = ~~v; + } + } + } + if(prevent){ + e.preventDefault(); + return false; + }else{ + g.page.curPage =curPage; + g.page.perPage=perPage; + g.request({ + curPage:curPage, + perPage:perPage + }); + } + }, + clearSelection:function(){ + if (window.getSelection) { + if (window.getSelection().empty) { // Chrome + window.getSelection().empty(); + } else if (window.getSelection().removeAllRanges) { // Firefox + window.getSelection().removeAllRanges(); + } + } else if (document.selection) { // IE? + document.selection.empty(); + } + }, + /** + * 清除事件绑定,删除ref引用,防止内存泄漏 + * 由于grid内的DOM经常读写,事件绑定后没有解除绑定。_clearBindings专用于回收该部分内存 + */ + _clearBindings:function(){ + var g = this; + if(!g.ref) return ; + var events=["click","dblclick","mousemove","mousedown","change","keydown","blur","dommousescroll","mouseup","mouseout","scroll"]; + g.ref.element = g.element; + for(var refkey in g.ref){ + var obj = g.ref[refkey]; + if(obj.nodeType){ + baidu.array.each(events,function(eventName){ + baidu.event.un(obj,eventName); + }); + }else{ + for (var k in obj) { + if(obj[k].nodeType){//eg: g.ref.pager.next + baidu.array.each(events,function(eventName){ + baidu.event.un(obj[k],eventName); + }); + } + } + } + } + delete g.ref; + }, + dispose : function(){ + baidu.dom.remove(g.getBody()); + baidu.lang.Class.prototype.dispose.call(g); + } +}); +/*baidu.ui.Grid扩展*/ +baidu.ui.Grid.ext={coltype:{}}; +baidu.ui.Grid.ext.coltype.checkbox={ + headerformat:function (header,colopt,colIndex){ + //this为grid对象 + colopt.resizable=false; + colopt.sortable=false; + return (this.selectMode==2)?"":" "; + }, + format:function(data){ + if(!this.selectMode){return "";} + //{cellvalue:celltext,colopts:col,rowdata:row,rowIndex:i} + var f = data.colopts.field||"",v = data.rowdata[f],v= (v=="0"?v:(v||"")); + //是否禁用checkbox + var d=((typeof(data.colopts.disableBy)=="function") && data.colopts.disableBy(data)===false)?" disabled='disabled' ":""; + return ""; + }, + init:function(){//初始话行为(在Grid初始化时执行) + var g= this; + g.addEventListener("select",function(e,data){ + var cbs = baidu.dom.query("[rowindex="+data.rowIndex+"] .tg-cb",g.ref.gbody); + baidu.array.each(cbs,function(cb){ + cb.checked=true; + }); + }); + g.addEventListener("unselect",function(e,data){ + var cbs = baidu.dom.query("[rowindex="+data.rowIndex+"] .tg-cb",g.ref.gbody); + baidu.array.each(cbs,function(cb){ + cb.checked=false; + }); + }); + g.addEventListener("headercellclick",function(e,data){ + var g=this,s = data.ref.src; + if(s && baidu.dom.hasClass(s,"tg-cball")){ + var rows = baidu.dom.query("[rowindex]",g.ref.gbody); + if(s.checked){//check all + baidu.array.each(rows,function(row){ + var rowIndex = parseInt(row.getAttribute("rowindex"),10); + g.selectRow(rowIndex,e); + }); + + }else{//uncheckall + baidu.array.each(rows,function(row){ + var rowIndex = parseInt(row.getAttribute("rowindex"),10); + g.unSelectRow(rowIndex,e); + }); + } + } + }); + if (g.clickToSelect===false) { + g.addEventListener("cellclick", function(e, data){ + var g = this,e=baidu.event.get(e); + if (baidu.dom.hasClass(data.ref.src, "tg-cb")) {//checkbox is clicked + if (data.ref.row) { + g.toggleSelectRow(data.ref.row.getAttribute("rowindex")); + } + e.stopPropagation(); + } + }); + } + } +}; \ No newline at end of file diff --git a/src/tangramgrid/tangram/tangram.grid.keyboard.js b/src/tangramgrid/tangram/tangram.grid.keyboard.js new file mode 100644 index 0000000..c7f3078 --- /dev/null +++ b/src/tangramgrid/tangram/tangram.grid.keyboard.js @@ -0,0 +1,185 @@ +/** + * @author yanghengfeng + * grid key event addon + */ +baidu.ui.Grid.register(function(g){ + if(!g.keyboard) return ; + //↓ 40 ↑38 ←37 → 39 PgDn 34 PgUp 33 tab 9 + if(!g.keysrc) g.keysrc= document; + //focus + baidu.on(g.element,"click",function(e){ + e= baidu.event.get(e); + if(!baidu.dom.hasClass(g.element,"tangram-focused")){ + g.focus(); + e.stopPropagation(); + } + }); + //blur + baidu.on(document.body,"click",function(e){ + var s = baidu.event.getTarget(e); + if (!baidu.dom.contains(g.element, s)) { + g.blur(); + } + }); + //keyboard handler + baidu.on(g.keysrc,"keydown",function(e){ + e = baidu.event.get(e); + var handled= false; + if(!baidu.dom.hasClass(g.element,"tangram-focused")){return true;} + + //↓ 40 ↑38 单选时触发行点击 + if(e.keyCode==40 && g.selectMode==1){ + var rowIndex=-1,nextrow=null; + if(g.selectedRows.length==0){ + rowIndex = g.getData().data.list.length>0?0:-1; + }else{ + var selrow = baidu.dom.query(".gridrow[rowindex="+g.selectedRows[0]+"]",g.ref.gbody)[0]; + nextrow=selrow.nextSibling; + while(nextrow && ( (!nextrow.getAttribute("rowindex")) || (nextrow.style.display=="none") || (!baidu.dom.hasClass(nextrow,"gridrow"))) ){ + nextrow= nextrow.nextSibling; + } + nextrow && (rowIndex = parseInt(nextrow.getAttribute("rowindex"),10)); + + } + if(rowIndex!=-1){ + g.selectRow(rowIndex); + if(nextrow) { + nextrow.scrollIntoView(); + g.ref.yscroller.scrollTop=g.ref.gbody.scrollTop; + } + handled=true; + } + } + if(e.keyCode==38 && g.selectMode==1){ + var rowIndex=-1,prevrow=null; + if(g.selectedRows.length==0){ + rowIndex = g.getData().data.list.length>0?0:-1; + }else{ + var selrow = baidu.dom.query(".gridrow[rowindex="+g.selectedRows[0]+"]",g.ref.gbody)[0]; + prevrow=selrow.previousSibling; + while(prevrow && ( (!prevrow.getAttribute("rowindex")) || (prevrow.style.display=="none") || (!baidu.dom.hasClass(prevrow,"gridrow")) ) ){ + prevrow= prevrow.previousSibling; + } + prevrow && (rowIndex = parseInt(prevrow.getAttribute("rowindex"),10)); + } + if(rowIndex!=-1){ + g.selectRow(rowIndex); + if (prevrow) { + prevrow.scrollIntoView(); + g.ref.yscroller.scrollTop = g.ref.gbody.scrollTop; + } + handled=true; + } + } + // 触发dblclick + if(e.keyCode==13 && g.selectMode==1 && g.selectedRows.length>0){ + var selrow = baidu.dom.query(".gridrow[rowindex="+g.selectedRows[0]+"]",g.ref.gbody)[0]; + baidu.event.fire(selrow, "dblclick", {}); + handled=true; + } + // PgDn 34 PgUp 33 翻页 (非treegrid 可用 ←37 → 39 ) + if(e.keyCode==33 || ((!g.treeoption) && e.keyCode==37 )){ + if (!e.ctrlKey) { + if (g.ref.pager && g.ref.pager.prev && (!g.ref.pager.prev.disabled)) { + baidu.event.fire(g.ref.pager.prev, "click", {}); + handled=true; + } + }else{ + if (g.ref.pager && g.ref.pager.first && (!g.ref.pager.first.disabled)) { + baidu.event.fire(g.ref.pager.first, "click", {}); + handled=true; + } + + } + + } + if(e.keyCode==34 || ((!g.treeoption) && e.keyCode==39 )){ + if (!e.ctrlKey) { + if(g.ref.pager && g.ref.pager.next && (!g.ref.pager.next.disabled)){ + baidu.event.fire(g.ref.pager.next,"click",{}); + handled=true; + } + }else{ + if (g.ref.pager && g.ref.pager.last && (!g.ref.pager.last.disabled)) { + baidu.event.fire(g.ref.pager.last, "click", {}); + handled=true; + } + } + } + //←37 → 39 TreeGrid节点收缩/展开 + if(e.keyCode==39 && g.treeoption && g.selectMode=="1" && g.selectedRows.length>0){ + var refidv=null,expander = baidu.dom.query("[rowindex="+g.selectedRows[0]+"] .expander[refidv]",g.ref.gbody); + if(expander.length>0)refidv = expander[0].getAttribute("refidv"); + if (null != refidv) { + g.expandNode(refidv); + handled=true; + } + + } + if(e.keyCode==37 && g.treeoption && g.selectMode=="1" && g.selectedRows.length>0){ + var refidv=null,expander = baidu.dom.query("[rowindex="+g.selectedRows[0]+"] .expander[refidv]",g.ref.gbody); + if(expander.length>0)refidv = expander[0].getAttribute("refidv"); + if (null != refidv) { + g.unExpandNode(refidv); + handled=true; + } + + } + //可编辑表格 单元格编辑 tab切换单元格 + if(e.keyCode==9){ + if(g.editMode==3){ + if (!e.shiftKey) { + var nextcell = null, currentcell = null; + g.cellIterator(function(c){ + if (c.row.style.display == "none" || (!c.column.editable)) {//skip hidden row and uneditable cell + return true; + } + if (null != currentcell) { + nextcell = c.cell; + return false; + } + if (baidu.dom.hasClass(c.cell, "editingcell")) currentcell = c.cell; + if (null == nextcell) nextcell = c.cell; + }); + if (null != nextcell) { + baidu.event.fire(nextcell.childNodes[0], "click", {}); + handled = true; + } + }else{//shift+tab + var prevcell=null; currentcell=null; + g.cellIterator(function(c){ + if (c.row.style.display == "none" || (!c.column.editable)) {//skip hidden row and uneditable cell + return true; + } + if (baidu.dom.hasClass(c.cell, "editingcell")) { + return false; + } + prevcell = c.cell; + }); + if (null != prevcell) { + baidu.event.fire(prevcell.childNodes[0], "click", {}); + handled = true; + } + } + }else{//tab to blur + g.blur(); + handled=true; + } + } + + if(handled){ + e.preventDefault(); + e.stopPropagation(); + } + }); +}); +baidu.ui.Grid.extend({ + focus:function(){ + baidu.dom.addClass(this.element,"tangram-focused"); + try{this.element.focus();}catch(e){} + }, + blur:function(){ + baidu.dom.removeClass(this.element,"tangram-focused"); + try{this.element.blur();}catch(e){} + } +}); diff --git a/src/tangramgrid/tangram/tangram.grid.pagesort.js b/src/tangramgrid/tangram/tangram.grid.pagesort.js new file mode 100644 index 0000000..8614ab6 --- /dev/null +++ b/src/tangramgrid/tangram/tangram.grid.pagesort.js @@ -0,0 +1,24 @@ +/** + * @author yanghengfeng + * grid page sort + */ +baidu.ui.Grid.register(function(g){ + if(g.page==false){ + g.addEventListener("beforesort",function(e,data){ + var col=g._getCol(data.colIndex),order= data.order; + if(col.sortable!==false && col.field && (!g.url)){ + var list = g.getData().data.list; + list.sort(function(a,b){ + if(isNaN(a[col.field]) && isNaN(b[col.field])){//都不是数字,做字符串比较 + return order=="asc"? + a[col.field].toString().localeCompare(b[col.field].toString()): + b[col.field].toString().localeCompare(a[col.field].toString()); + }else{//数字比较 + return order=="asc"? a[col.field]-b[col.field]: b[col.field]-a[col.field]; + } + }); + g.loadData(g.getData()); + } + }); + } +}); diff --git a/src/tangramgrid/tangram/tangram.grid.rowexpand.js b/src/tangramgrid/tangram/tangram.grid.rowexpand.js new file mode 100644 index 0000000..5603af0 --- /dev/null +++ b/src/tangramgrid/tangram/tangram.grid.rowexpand.js @@ -0,0 +1,71 @@ +/*! + * Grid row expand addon + * columns:[ + { + field:'id', + width:30, + align:"center", + renderer:"rowexpand",//列类型rowexpand + title:"点击查看/收起详细信息",// +/-提示信息 + onExpand:function(param){ + //param: {expandedrow:expandedrow,expandedcell:expandedcell,data:cellclickdata} + param.expandedcell.innerHTML=baidu.string.format("
机器#{name}详细信息
",this.getData().data.list[param.data.rowIndex]); + }, + onUnExpand:function(param){ + //param: {expandedrow:expandedrow,expandedcell:expandedcell,data:cellclickdata} + console.log("onunexpand"); + } + }, + //... + * @author yanghengfeng + */ +baidu.ui.Grid.ext.coltype.rowexpand={ + headerformat:function (header,colopt,colIndex){ + colopt.resizable=false; + colopt.sortable=false; + return " "; + }, + format:function(data){ + //{cellvalue:celltext,colopts:col,rowdata:row,rowIndex:i} + var title =data.colopts.title?(" title="+data.colopts.title):""; + return ""; + }, + init:function(){ + var g=this; + g.addEventListener("cellclick",function(e,data){ + if(baidu.dom.hasClass(data.ref.src,"grid-expand")){//点击+/- + var row = data.ref.row,col= g._getCol(data.refIndex),expander=data.ref.src ; + if(row.nextSibling && baidu.dom.hasClass(row.nextSibling,"grid-expandedrow")){//已经展开 收缩 + var expandedrow = row.nextSibling; + if(baidu.lang.isFunction(col.onUnExpand)){ + col.onUnExpand.call(g,{expandedcell:expandedrow.childNodes[0],expandedrow:expandedrow,data:data}); + } + expandedrow.parentNode.removeChild(expandedrow); + expander.innerHTML="+"; + expander.className="grid-expand"; + baidu.dom.removeClass(data.ref.cell,"grid-expandedcell"); + g.resize(); + }else{//展开 + var expandedrow = document.createElement("tr"); + expandedrow.className="grid-expandedrow"; + var expandedcell = document.createElement("td"); + expandedcell.setAttribute("colspan",row.cells.length); + //expandedcell.innerHTML="haha";//TODO + if(baidu.lang.isFunction(col.onExpand)){ + col.onExpand.call(g,{expandedcell:expandedcell,expandedrow:expandedrow,data:data}); + } + expandedrow.appendChild(expandedcell); + if (row.nextSibling) { + row.parentNode.insertBefore(expandedrow, row.nextSibling); + }else{ + row.parentNode.appendChild(expandedrow); + } + expander.innerHTML="-"; + expander.className="grid-expand expanded"; + baidu.dom.addClass(data.ref.cell,"grid-expandedcell"); + g.resize(); + } + } + }); + } +}; \ No newline at end of file diff --git a/src/tangramgrid/tangram/tangram.grid.rowsortable.js b/src/tangramgrid/tangram/tangram.grid.rowsortable.js new file mode 100644 index 0000000..4992ccb --- /dev/null +++ b/src/tangramgrid/tangram/tangram.grid.rowsortable.js @@ -0,0 +1,98 @@ +/*! + * Grid row sortable addon + * add config option rowsortable,if rowsortable=true grid rows are sortable + * add a method serializeRows return current rows data in grid + * add events:"rowsortable-dragstart","rowsortable-draggging","rowsortable-dragend" + * @author yanghengfeng + */ +baidu.ui.Grid.register(function(g){ + if(!g.rowsortable) return ; + //加载时间前解除事件绑定 + g.addEventListener("beforeload",function(e,data){ + var table = baidu.dom.query(".gridtable",g.ref.gbody); + if(table.length){ + table= table[0]; + baidu.event.un(table,"mousedown"); + } + }); + g.addEventListener("afterload",function(e,data){ + var y =0,table = baidu.dom.query(".gridtable",g.ref.gbody)[0],_isdragging=false,_y=0,_row=null; + + function dragstart(e){ + var s = g._getSrc(e); + g._rs={y:e.clientY,row:s.row,table:table}; + baidu.dom.addClass(s.row,"row-dragging"); + g.dispatchEvent("rowsortable-dragstart"); + } + baidu.event.on(table,"mousedown",dragstart); + + if(!g._rs_draggging_bind) g._rs_draggging_bind= baidu.fn.bind(g._rs_draggging,g); + if(!g._rs_dragend_bind) g._rs_dragend_bind= baidu.fn.bind(g._rs_dragend,g); + + baidu.event.un(document,"mousemove",g._rs_draggging_bind); + baidu.event.on(document,"mousemove",g._rs_draggging_bind); + baidu.event.un(document,"mouseup",g._rs_dragend_bind); + baidu.event.on(document,"mouseup",g._rs_dragend_bind); + + }); +}); +baidu.ui.Grid.extend({ + /** + * 获取当前数据排序数组 + * @return {Array} 格式形如 [{当前第一行数据,rowIndex:原行序号},{当前第二行数据,rowIndex:原行序号}...] + */ + serializeRows:function(){ + var g = this,rows= baidu.dom.query("[rowindex]",g.ref.gbody),result=[]; + baidu.array.each(rows,function(row){ + var rowIndex = row.getAttribute("rowindex"); + result.push(g.data.data.list[rowIndex]); + result[result.length-1].rowIndex = rowIndex; + }); + return result; + }, + /** + * 获取当前选中的行排序数组 + * @return {Array} 格式形如 [{当前选中第一行数据,rowIndex:原行序号},{当前选中第二行数据,rowIndex:原行序号}...] + */ + getSerializedSelections:function(){ + var g = this,rows= baidu.dom.query("[rowindex]",g.ref.gbody),result=[]; + baidu.array.each(rows,function(row){ + var rowIndex = row.getAttribute("rowindex"); + if(baidu.array.indexOf(g.selectedRows,parseInt(rowIndex,10))!=-1){ + result.push(g.data.data.list[rowIndex]); + result[result.length-1].rowIndex = rowIndex; + } + }); + return result; + }, + _rs_draggging:function(e){ + var g = this; + if(g._rs){ + var y = e.clientY,x= e.clientX,down=y>g._rs.y,row= document.elementFromPoint(x,y); + if (row && baidu.dom.contains(g._rs.table,row)) { + while (!baidu.dom.hasClass(row, "gridrow") && row!=g._rs.table) { + row = row.parentNode; + } + } + if(null==row || (!baidu.dom.hasClass(row, "gridrow"))){ + dragend(); + return ; + } + g.clearSelection(); + if(row!=g._rs.row){ + row.parentNode.insertBefore(g._rs.row, (down ? row.nextSibling : row)); + } + g._rs.y=y; + g.dispatchEvent("rowsortable-draggging"); + } + }, + _rs_dragend:function(e){ + var g = this; + if(g._rs){ + if(g._rs.row)baidu.dom.removeClass(g._rs.row,"row-dragging"); + delete g._rs; + g.dispatchEvent("rowsortable-dragend"); + g._webkit(); + } + } +}); diff --git a/src/tangramgrid/tangram/tangram.grid.treegrid.js b/src/tangramgrid/tangram/tangram.grid.treegrid.js new file mode 100644 index 0000000..0c2e135 --- /dev/null +++ b/src/tangramgrid/tangram/tangram.grid.treegrid.js @@ -0,0 +1,278 @@ +/*! + * Tree Grid addon + * @author yanghengfeng + */ +baidu.ui.Grid.register(function(g){ + g.addEventListener("beforeload",function(griddata){ + var list = griddata.data.list,treelist=[],expandNodes=[]; + if (g.treeoption) { + g.treedata = {root:{children:[],rendered:true,expand:true,deep:0}};//一级节点默认展开 + g._originlist = list.slice();//copy list as _originlist + //解析树形数据:http://www.blogjava.net/Hafeyang/archive/2011/01/13/how_to_parse_flat_tree_data_to_hierarchy.html + var o = g.treeoption,d= g.treedata; + for (var i = 0, l = list.length; i < l; i++) { + var row = list[i],idv=row[o.idfield],parentv=row[o.parentfield]; + if (!parentv) { + d.root.children.push(i); + }else { + if (!d[parentv]) {//父节点不存在,新建父节点 + d[parentv] = {children: [],rendered: false,expand: false}; + } + d[parentv].children.push(i); + } + if(!d[idv]){ + d[idv]={children: [],rendered: false,expand: false,rowIndex:i}; + }else{ + d[idv].rowIndex=i; + } + d[idv].parent=parentv; + //expandBy + if(typeof(o.treecol.expandBy)=="function" && o.treecol.expandBy.call(g,{cellvalue:row[o.treecol.field],rowdata:row})===true){ + d[idv].expand=true; + expandNodes.push(idv); + } + } + //节点展开,父节点也需要展开 + for (var i = 0, l = expandNodes.length; i < l; i++) { + var n = expandNodes[i],c=n; + while(c){ + d[c].expand=true; + c= d[c].parent; + } + } + function traversal(node){ + if(typeof(node.rowIndex)!="undefined"){ + treelist.push(g._originlist[node.rowIndex]); + } + if (node.expand) { + for (var i = 0, l = node.children.length; i < l; i++) { + var subNodeRowIndex = node.children[i], subNodeRow = g._originlist[subNodeRowIndex], subNode = d[subNodeRow[o.idfield]]; + traversal(subNode); + } + node.rendered = true;//rendered:子节点是否都呈现 + } + } + traversal(d.root); + griddata.data.list = treelist; + + } + }); +}); +baidu.ui.Grid.extend({ + /** + * 获取原始数据行 + */ + getOriginList:function(){ + return this.getData().data._originlist; + }, + /** + * 获取节点的深度 + * @param {Object} idvalue id字段值 + */ + getNodeDeep:function(idvalue){ + var g =this,d= g.treedata,deep=0,c=idvalue; + if(!d[idvalue]){return deep;} + if (typeof(d[idvalue].deep) == "undefined") { + while (c) { + deep++; + c = d[c].parent; + } + d[idvalue].deep=deep; //cache + } + return d[idvalue].deep; + }, + /** + * 展开/收缩节点 + * @param {Object} idvalue id字段值 + */ + toggleNode:function(idvalue){ + var g= this,d= g.treedata; + if(d[idvalue].expand){ + g.unExpandNode(idvalue); + }else{ + g.expandNode(idvalue); + } + }, + /** + * 呈现节点未呈现的子节点,默认的子节点处于性能考虑不呈现。确保该节点已经呈现 + * @param {Object} idvalue 节点的id字段值 + * @return 如果该节点已经呈现所有的子节点,返回该节点的rowIndex,否则返回该节点的最后一个子节点的rowIndex + */ + _renderChildren:function(idvalue){ + var g= this,d= g.treedata,subNodes= d[idvalue].children; + if (!d[idvalue].expand) { + if (!d[idvalue].rendered) {//render sub rows/nodes + var row=baidu.dom.query("table:eq(0) .gridrow:has([refidv=" + idvalue + "])", g.ref.gbody), + rowIndex = (row.length>0 && row[0].nextSibling)?parseInt(row[0].nextSibling.getAttribute("rowindex")):undefined; + //if(rowIndex==-1) return ; + for (var ni = 0, nl = subNodes.length; ni < nl; ni++) { + var rowdata = g._originlist[subNodes[ni]]; + rowIndex = g.addDOMRow(rowdata, rowIndex); + } + d[idvalue].rendered = true; + } + //change expander status + var expanders = baidu.dom.query(".expander[refidv=" + idvalue + "]", g.ref.gbody); + baidu.array.each(expanders, function(expander){ + baidu.dom.addClass(expander, "expanded"); + expander.innerHTML = "-"; + }); + d[idvalue].expand = true; + } + return rowIndex; + }, + /** + * 展开节点 + * @param {Object} idvalue id字段值 + * @param {Object} recursive 是否展开所有的子节点,默认为false + */ + expandNode:function(idvalue,recursive){ + var g= this,d= g.treedata,subNodes= d[idvalue].children; + //rowIndex= parseInt(baidu.dom.query("table:eq(0) .gridrow:has([refidv="+idvalue+"])",g.ref.gbody)[0].getAttribute("rowindex")); + if(!d[idvalue]) return false; + //可能节点的父节点还没有展开,所以先展开父节点 + var c=idvalue,nodesToExpand=[]; + while(c){ + c= d[c].parent; + if(c && d[c] && (!d[c].expand)){ + nodesToExpand.unshift(c); + } + } + for(var i=0,l=nodesToExpand.length;i0?parseInt(parentrow[0].getAttribute("rowindex")):-1; + if(parentRowIndex!=-1) g.updateDOMRow(olist[parent.rowIndex],parentRowIndex); + + } + }, + /** + * 删除节点,删除节点将递归删除所有的子节点 + */ + deleteNode:function(idvalue){ + var g = this,d= g.treedata,o= g.treeoption,node = d[idvalue],olist = g._originlist; + if(!node) return ; + //删除子节点 + var l = node.children.length; + while(l--){ + var subIdValue=olist[node.children[l]][o.idfield]; + g.deleteNode(subIdValue); + } + //删除单独节点 + var parentIdValue = node.parent||"root",parent= d[parentIdValue],nodeOriginRowIndex = node.rowIndex, + row= baidu.dom.query("table:eq(0) .gridrow:has([refidv="+idvalue+"])",g.ref.gbody), + rowIndex = row.length>0?parseInt(row[0].getAttribute("rowindex")):-1; + if (rowIndex != -1) { + g.deleteDOMRow(rowIndex); + } + baidu.array.remove(parent.children,nodeOriginRowIndex);//从父节点的子节点移除 + delete node; + //更新父节点行显示 + var parentRow=baidu.dom.query("table:eq(0) .gridrow:has([refidv="+parentIdValue+"])",g.ref.gbody), + parentRowIndex = parentRow.length>0?parseInt(parentRow[0].getAttribute("rowindex")):-1; + if (parentRowIndex != -1) { + g.updateDOMRow(olist[parent.rowIndex], parentRowIndex); + } + } +}); +baidu.ui.Grid.ext.coltype.tree={ + headerformat:function (header,colopt,colIndex){ + return header; + }, + format:function(data){ + var g=this,t = [],idv = data.rowdata[g.treeoption.idfield],node = g.treedata[idv],deep=g.getNodeDeep(idv); + for(var i=0;i"); + } + if(node.children.length>0){ + var expander=""+(node.expand?"-":"+")+""; + t[t.length-1]= expander; + } + t.push(""+data.cellvalue+""); + return t.join(""); + }, + init:function(col){ + var g = this; + if (col.idfield && col.parentfield) { + g.treeoption = { + idfield: col.idfield, + parentfield: col.parentfield, + treecol:col + } + } + g.addEventListener("cellclick",function(e,data){ + var s = data.ref.src; + if(baidu.dom.hasClass(s,"expander")){//expander + g.toggleNode(s.getAttribute("refidv")); + } + }); + } +}; \ No newline at end of file diff --git a/src/tangramgrid/tangram/yuicompressor-2.4.6.jar b/src/tangramgrid/tangram/yuicompressor-2.4.6.jar new file mode 100644 index 0000000000000000000000000000000000000000..61f6318668e1bd1cda395c4f010a549c5062dc13 GIT binary patch literal 852834 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%0A?q8SvY1EP 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 z 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 z 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
@%=9L2;!MlN4&Ih{P8eM9|*%DY~nL~$-g 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


F}L`yuDr&jBAO=J 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

982W$MIrA!^$&Y*9VtUU{m4c$5W6=7Gx8q+lpCv zk*-sK&8j5uJMb;>EvctVIZz5Xu>_o##UJZA0Pu>);o-HTR1kUyPmUBXwYAm_rlHqWaLsydvFnID0M zWVGueWCOB#V6Ou(?>|go|c!pQglMEK#3D9_{62_m; z$}X5}dUeZ?4Tqtt;NLm2r||MQ2jq=#H09T0Kz8aygSIujNQ@IVhG`9PkQ1b$rt$J^ zQHisW(%H285%w%_4>@wePeGvP+&43$9Er3_NiuIP(-JBKwnS7CiBp2Ttd;ED%&@;8 zC_oJ;q`46xzwNR?2SMX9K6%Nh9% zR6s`xKNxgh{&fQGUITkQ#wj2)*Azg-q&Bk3*6?A!p54?dpMdBC)Xxngy;t$o{t{?_ z)0^eT=xfV*b%E3U0PsDZ04=Zsr`v=CAQ1h6ANb-0L+$YkzcxHSXmX_VNo{@*H6_=9 z*qsVy$H{@ilS8Jcq<}(|mhVu$b-bs1%%O6vHW(JSCuAv;$YPjpF{mL3%!bV|BUXyB z4m>V%{?iG+R4fu1{oY~L_XTv9O6w=*&Sk}5>j!6m;AQXl8YJUY@^+`H(0k5#<4IsM z!f!sGg^7(elTCAA28Palh>qr>NpMHnu&ej$fHD=6e4-i3=tLr6Dj;UMC zcd4bDt{1VYxoQDzHer8@&F+wXia!SfVT0Sy257A z-Pe+nay2m=%3{9b$?fxdS1j}ozJ4|2oCUGov_O4@@NzkXm^YA`2@(+?`j=*C*B1 zOw9u5rz)V|rzGT!)?KLKOym3;mM_3vT~bFN@1QRlFufxHe7STj_lP>9G&VrbPV6zm z*Y*ON`0wC+nOw%i9_9JqI8@+TC~$q<3TLGM@=cky%JqCC*3Q3f4_k7TX%jd8#Z30@ z_J;U;&X{x6(B+ZHZb0Bg4dE#kRk=Uo+8GVU(-Z&&3%Ed}mr@L}e{Sg~`Y45Tq;~bC{Ly&ls*I zBr;$lp=VYnZn;%e4lcE2`t@keFu^aiDv1#}a>cAgWVtOZ8GKgB7{`U(D$1PA0~myG zvwpJ%OoYBgn~lx8_&xHwyE*EIpRqFjxB{7uZL9e_PiHf$dt&`@NlnJ8^Tp+hYEZAE zaba%+9qBpX1N!Do1x-9qaTI2Ai?FcV@g7?tZe%j10+vQXWIV>tQ|2RNC9!IolW&-R zZofS^=Gg$Ugaz!LSz_2S4Jr_$M`Bw;Ax&Yxa#HSS{5&MmPcIno1DBcwCt!#ite?}= z9jCHsM#R;pCUxmXOB)EgSGLlqFv;~hLm>~bBvDA%KU^3LInQMm^wb4(m=3sBSyk9B zW7gQx{qB{Yu%8yRHj7GvpZ~nuh?a(FV~udI$Zs}E>BVv`yQ&N5^chaP}no|;Yyrl0MKQ8)R()ZsaDHwjnJz#P_ z(bpv@r~K||-GVi<36Bu(zrW(V9;s61b2y}G?qJ`UeP5hNVpKV0eDSZ4q%Fr5gG6sOHC?T30+Qc;ahSss^ z=9cZsn$rZ=lepzKh7y`GT*IGPv&*-J^sGWl%y^GOpJ7uh=9~`^V zO-@<46>W|ao}RcRV;qXIkIlanva58493CxNRemsMmR|0-zX)blZuY_68AcvGURk~% z*-v-&MZVOuOM7~y-y=NRztQQLif{D`{AXCob%pugcNS3LcfsrfB#dSAb2}AD8<@J| zo)>_bSb4SU;|u-Wn=-y7o;bFt;FE?yp9qY}`F`iD7YW(&WYF`qy@4eDJGS-?VdOfL ziBQicsB|Dn(*`8l<%M-Xj}APVShR!10zXTW^970UdGm(O=;E+czLSXYFW<4=!G~$A zcy)wb0;v46YH|tXhB(|X#}>r%TMi_dbepy-ha#CYPq5w`&*MDXLO?(P8`-Ihy?pa0 z6ApW#%p^beZH0GCi@zr1;VKC-R26bE*6g*@>dp+J^Ygw6(4(5{A8feADQ`@@5-fGQ(|fm z*Hu?r2tkt@6roJhwOx!ez8Kg%{-RBDbs-XU0$2NGefAp(D-FQ)C^@nK9X{=CKGM#( z;`<<_J`8zO`Y5ng3YfMebUXj)!B5W2!lg}dI~mF^`oKX&vu0=td|`RV&7yKFURo7D zB6!n@wL)5xgl0{>xnuC~X!Sd7BNTe)t{Jbi&73Cq%<3|xBKYMweZ0GqN*wnT7}o*l zXjwQFbi|xLCch7|!UtL*#-9~pTjp811B(khD+gWRUZ{(b_jAn{CSxo3v}F9+GeMj< z!Oj!!^ZDR-cB$m5h!jydK!og3S8H$(5+Y7Z0Qoh(vG;0c=t9Fd6ew&;a}Rl1sFBl9 zzlj^K`)cd-Z%-HA)~%C&LErG1UXw)77l?au3OqoUA5)v*T?&=W0BWuTTMA^+cdg88xX z!(bEMlUUfELtSN?Y6fTKId$jxx9VQ|D~~F0+2?k}ZT7>5`jI?hn=(~RMS)Q>#3uiv z_9MDG{yWhl@Z*pkHBMvHKq3%BU{!FguVyQUX5w#ZYl?bMMx9nuR2`&O&s}B*gZ=aS zWn0@Q0KH{(9nVyN=s`2N{ckI0quUMb+rq=M!hxQ5w`czXKuFVOWa&I~(hrL1SQ# z;KW-;V>W)tzgY6-Ta?8a-olDEaqb2mDfWBWQ)BP&=R4Umc<=P$DP;*}GoYqY zC0Q7Xfbd5k|E@4P5iNHhP03Q+r88jPe*5)M>?fe>g9*r79jfjTisDxgF(bPsm0GS$ zI4U`7IY0XV=ta0`EAS^Cv|vId?HOvN%<;%~Ri*`~M_Hx5cvml+{GWIU_>WJKwdbK9 z(EmI!peO#PNeKlA$decdi2DEM3paN#p#Og?;c76tOHN%so(t4yb9EPph0y?h?22Gnr^T2(V}k_~&R)E5D@t;ua8 zgsFD73+IdEmW;ILx9{(hNX8KNn%1A2r!TLanw{sxiWqMAT!m~{J(O?MULT0t6GWO% z(q9PL(7QeYw+A)vZ#x9MJ}~=6pIgJ!?XMwGs!xZk+h~Cd@+2h5t^%%Voxc!suHT@D z{1BfHYJlsU$T4H(Adx>y4VLPgWJoCp0z26V=;jA5cY= zc+m*U65pC>X6^E5BOD(?T_5WH<#QV}T6_EwHw~-K} z1lP(eDbr6pHe^bcEzN}cRxa8lX=_+bU?-JKCr>C5S|p9Qm#bh~nk{BIHCMJA-TP`H z2{g>#Pk>J=O?a3HX%=VKgR2+k~S%1s0;bUJ)l6EAkjwzwG z;L=Z%!h^91sjqYN;NHNzh=l2XaxbYTPPVMsj4g7#3Z$?lTpm$(9$trHX=lwIBa5%I zBudhZBUrjeA5s&TC*_nw;F4d{|eaZo^c}5gY#9!Ig1v7FBl)Kj2wTx?IPZEOQEIIU~Kn>T5-cg*xu6 zOB;14x|b6Bi5Fsut3q;>fJ0cjg3`y`N|I?BWKMI^Du=O7j2?XqZ8U=LIY(8dnd1jJ zb1m*5riQ!>FJT@O>6kZty3?}Do|k4cfJ9flRxWciq3N)9k=&eBEnLi5L^hjGT|kj- zzTaqS(6aruZDKF3uTa<;Th4oNDAsP{n#f2bPdvL0FM;ETGMu~wNaVr%U0GW~x``xj z;BIC*^bVIS;>tK34Qpp?V$N2YQG9lWYftrC#jzPHe$=(pM~ovxC-1&pM#32qtRGCs zbxt>^%3vBMjF1q0MkP%4&kSQLY+s-~M;Kd#xBlqRH&Y;9p{yqBctI%}SB?yK+FGl= zrnwt5$dX`+Q@{=&aJmRKpIqrAuh>-ANLg?$ySCI2*s^|9!(=dYu5MPrDmy_a;Ph7uz8G3CFSMP~Be{1Ts^2J+#H(ay4p9m=HGLLa z#*=TYiu|Q#-)vA-MYhGXFWSmo|KJK>erzN_tB_F<^*}|A`fY#5-OhKN3hv~PtGk?0 zoAP34@dENSS+b^?&_)Go-d`qXE6ViRrTd-{RHeHfI~dEvN4;-F7h8WOrqYg!^Y5eo zl8l@U;sbVwLsESyguTkWD%jmf|q!u@zW(RH()Mu8fmDw|J zgS#fEGCK1F>{dd2(=RT%P3wW{354%>2;Mf=r)tM1cjrT$bEx`nB(QrZ{cKn8wU+oM z=_M;;o)fxQVf|#6%~J>n0)GfMdb6;R^nCQ=$QYvK0KQLXNs;`)&EG7FDwmFmMGp59 zyC;tv?gjBU?$ntLIr=h1;}l)Ky^Ghp`LugZQyg-%D%z8;v-ADZHGZz1*KX0jHynFoCWd z4dqtK`RL&XQqxJSJp1iWai=_wL&eLq{4hc=3j67K!G}r396Y73*zs)=`#!-nWhdYVCr)b#V&Pk~C@!SFlqt@ZB-^9Io&)4fxpC%o80O>!-2zU~azm${hE(o^x>_ zEQ>zjCSVEE$_tAjJ%^)6oadvAp6Nlxf%C_^!byh{_6E^QxSSR7Gi=hd(cCm!kI8vT zo9{@m2hoobI(+Y7iaWKzhmkw+=hvpv#?%U0cZI|{eS*>4M4-{!<=8wlF`W0U#lZvi z{c#EArR0YdCc<$VxM?vP3T7=5fqz-B@5kIc&qBfUO);;>3=gsz;iz9{^?S56KKoP% z7*;8CK9|o&#gs;(d^1X?4Dti8?}lB-M*~_KWhUhIp8t}i{4?W((4M06?C4K3Tdo8j z3v}a3%q%Tue;vV>RzU8wHvZ+SJ$sv!ZO_ft`y?@2a;>Ah_KU`Do0y`Mqf3R1mi!C?S7Zyua(W3v zx&v=5YG#FeS|nK;xuMe{^(5QR+k>a$#bv1zD*Dtj>*+&@{=oV6b|jwB>Ee4M!Kt3R z%WN;tvx{~(RxM!MGQy`KpPj_9Eh>IrM}u!h&!d!Cw>U z%w^HnmYY^_ z#)6~C`Rs*AOYo`D;_1lC-O1OvP1h1ED=TNhR+#sk0D|jb;A#Z>CxXsEP&WA9oy8D7 zFE=&%%O;}|JH597NIbqZ#=!o9=swOU#yx-UNb7f|OuW~&g$Twkip!zDvb_D;-?zi9 z+L65fgR*lB&MfTKbULDadU#kVU!F~A2Y2GojFY%aK&60+v=Z*TPb0A2hV=K z*QC9k99#n8k%BGXmvpAILbrcG5k1Eb zmj$)06ywA@1wB>3ug2WZ^R9o`!o!R~8s5nD?O>=%RWERoJGg+j=7j}Q89k@!f`2mp z2Le8#sCD(A@)r3iwk?85aEJCb5gGZpLcdu%!@yVbMZeF33^#KnwkCusHgIINFFNqR z$@NDu{e?47IIK)lVaGh2IUwAmfB-GzK8e_#f!e!rqj2x-?E+>S)W1;MQkc5rkcw2z_6NqR zhrrK94fzve$$V*Oa6MbI*>R=XisJnvbE3AQ(GqugC&{G)+V6Eu1nOf*;QMs4GBbuq z-Ge7U64o`YiA@A4PcRo^7ca2dD6RL1Zp?%&j6N;Q0G**CN46kO9J77w$)P6LHOxdA zmXty?*D#j0#yi&OCAUUni0w%E%_vepaX7<3?{tD42S6{h)PXOjk4NgC?kg8j?f~2? zn%&{VKHn?ec4&_QfnJ}S2OP(Q#$_s`UA&QxAoZwGtGiww$+HqR}S z)WN}gbjJ}mZrm5=Xy_TmA^j!^!mhFtZfFs~%ed4gg#z;NMXP>yG`=TzZYsttm?sj# zD8XG`XB2}LKCel1e`+N$Ze7V<85_<>Wt)!reyeJ*-i7UH%lR!@1%9kn=3Uy88?S}! z08|AUMU|V+(s~d@RTrn}*54ZCiqb0WJGKjYUQ@hbj>?Z)x(m*3TfV^3ss)c>FYKKr zzrQz{J-rB(7d~Uc;ZL{m$#|D$Qa2j?@3k2W4tvA=TpXqK(NqAWT6&~`El5ahDQDhe9B?XtEXu-mfnT%2s1UqEy|6Ct(|CaT zog3qV-%LH)6n>df|_l)uFM8IF)^a|!}S94dwv%S4>&v0+o#6U(3K zlCXtPcNGj#XyQVz_!!hj;=*LR#&j|9+|$0(^FU@@*B8T;?!2Xkb;Bvu8ow(_UgU&2 zST9M@lGCsilafg@U`IM90bQI|oULb5t%Dm%qk76=0mft~Ch{&NxnW507 z{Sh-LgG|smUEx+KXa|a*BgDiBL#&x1#X(ZWU%t#pv7@BCLK&qd%-tl)ca^dO_J_Qk zqzhw1Z-}=S`GZ3K-SUmj_ zSTeVj!~FMXDc>n}{fDSfC8<8L7hbUk_BmWU;ldF0j4)nY$tQm&*%EaJ*emVdgXp_SpE9Uqg08-~SUfExKV2{;rSvl}Br@&$s4?#j3 zZqj?}9yw&I^_3IxjX=&z_Eikhq=H<0}ePt7JZK6xIWLzF0eCnR@j0{YM6dC|4BC| z8XhN(N~A_@AfJr0nk*1><`n0eP9@VIlsN-VEeH|TB~G1%OTkLi5j2co!WS5f4RigK z{Av98w?U>1RkbI?TUU=L3!tS+Brw#_CVP*%guB~nq-Qw9w7DAj!Z^7G+|}~ixFl=t zi@zoFY;l)A*a$_MAC9aigd`br(Qzjk=_bBUltp_(S2H-Svc$%kQXS81+>|o8NrUt$ zsrc7~Nmslf+!=$B?l+d_0=V}OVGoVQ?;cB~Md$-z^rMPlh9BT{A?pb#3*bv1nWJkuO$#Fp~ospC=CaI9nP$(`2F<^k$%y zW%1s=2EDDuz}Ezs;olmf#7GVCMo>>m>EJtKw4-w&HXU2y7<;RfcnXbu+Ic6Lj8te( z!&*v}JJDp*2O_oS_fCdvm!`wGPWzMl?&6->nZ4DCJvK7dw&KeG#E0KdYimDW$uZ$+e8X|fkMn+uLvT;%L3!KvcK7}kpv|iH^3|^J4e0Y^w$_FH#wgOioF1b+ zAI`Qo%ni#L$%s5fG_s{^0)Qz6WLB?6JdLF@s`^oanveU}&PV1N1eJ8NH(K5x`N`LM zx~72tv(6{!%^@q@Q#*1pQyUtMX_XEo%`vz7Si{MmHx%DNf#Dm9lYJLv>|BMBeS%Vq z!rUz!K_8Xkr4kRiY5uH;gTvP$?@#{(T&DLWrSL`6WNK=fNgWlLt1=i(YQu{)j$~x_ zPR0Gn&+-SI2!tov6#(ZFfVvVIRuFDcES3=AvmA=qWjhJ1I`wwB%;ZqtFZcdABvnZORUUl45z|i z$a{xbcDFiS3Q?J8tdi!dph*sI|M@40!5}yPg7rY(H{e7|JPSyZs<0&(`d_H^_m zX6A;JX=&Wj?AQ5J_TQNJPc*9LcQdS z$&or#5K=SLzX_cLgdWEj8);J$YKr5)U=+%!Ao%P$BX;R&+F!Z%rxojcsA(* zsHDCzuvIhvi)n73QE!f*|IlEl*H@1SclzQ>-X?%X`Dhjq*n&qRsE3r7di?d)WNeqxB#HhO} zJvJ$XIUayjK!${Z9C2?~c$HAEe%!X^@cavvLE7=ebX{o?_3euUI{^riU;0pTK`~DI zJ-bXmwjHl{R9uO>knoNZt3M|m5do{ezTnTzYCy6vlyuXyDKsL*T0|sxkO(_wc7R4b zyC2|N_o6r|w~NW>JpNRr8{`vBN%OJa|T=tPS|l#>!)DIK}}_c{h}bsl5>jLZIZ z`R>6(i}%G#L$WSu84=|`m?^c?5OMsGaOc~->@Lf54PmBtIHu+zjbs|ly7k?L z;~?E+?=J2wrg>A*2`EBKsr`z))WKOO*^OHE4g zHF}<~xXjWdlYA0Re{E7-s7n5=PK@AQA831<5wip2BiGZ3PMQpq*XpRjE|pNTAL8lz zrNp@!OIM#V|LW@T5d4kx*~I|9TZ?}8pr#G_)`j-Tne{owzAo+}a1dzwhb3k@iryz| z;h?Z^CpPwuukVGd+kg0l;q}|2F}U`GMHOvmeVXe?${jO7-yVFVhX78`*Y>vSt z9Mw-Y_uyHP6=Sjj^gis{o@bw-07@p`HGr4;p@>TV9)9H}EB+}vWoS-M$2Z;T+lbfqBgfAw%jQU~M=Z*Yty};cKkFD(@uw$c$?#WPul!N(V z3wJVFs(US{JFhXsR{pMaEB(Xbz~u#a-^WurA?DOA^C||6Z^NK;)U4%HU@V=-ucW>} zII>$jr0D*M`C#EoN?1dT1;Hp+LRuTX_o5OohUHd9)6P10HRDBWiVb^Jo|; zNknc(`gdV%<&W39nM9+B2k~e6A@MeAqmB{0kw_05(yr?R|27RsftRp6tCDH|A1mI& zcUaPkBsG6psu>yZ;W9DYlHCF_XK&O(GOqFln#GlfIR4KDIb1G!zCF8~8S@4{(zX@H z$1R}+jnnxr1b*#qo%94R74u*8yJ$K{ClP)1dx(G=SON@!YI2Md{rGt!FGpW4>;np; zdLB>48-^;&-Gf&rXq`SdC2zQ3mDP@WS25oh7Nn zyiGK;+{wx)Mrmm1Unf>~QEur3^>_~Vcg(&FAp@l%&+K5VyrZlzTK8Br*T)4C3XF|;nQckc5?$RlAgF$#!Ec)T( z5NZ>usrd$*Nf?x62TO~ovDtlFx|tnky`%DEkj|YwqQ&s~P3R}3)zN;>H$rAiaMyS= z9r3m0M9<*-l1?-)~i{>EpU)Vc>?00hJls-J_YPJ0&!;VEPA zL)z}^Y7cIshu4mGTi_mwz+=1)rFcA!xB+8tORx7^4y^pwBLoWXDuM)P2TU>XUMT7`E?*w_Rk*C&j-d)Yol!{ zMNj3OChhsZR|frCSprI-)h))xf1#S0TpFGptoeI(ovjt|)vy*&yfIeNRG`Z|WcJwq zOu1Y{$Y~6|e}OTm#P2H1zctGoW~P!PRE|IV{aV|kwuIM7r&c4?`dXjXr4Tw|L_ zlVdyg#72S?9fOo_S~h#zVzWgQ)m9({q(%QD+n&#Km0Hn9Yq{}ry$VGrN6k?o(x!!} z$pqQZ3SaOT?K_j|v@97OE@ZWSaO8QwP@;eF@oz}YiuP{#BDFkcWff!A^*WLGyzY;w z={l|Uh*U@$bN@ut`};u||HrS2oPOi!ZQzLIwI5O-Sg8kmCI2%jF|k8QgBimmv>@JnmR}UooHpkh)-O6I2;--^yRuf;g4eHSQ zm?Woi<_C?jkZh$f3Jj%6SBwHPC%RB z5MmY|6CjQu=+WL{ZLsa=*1OHm!V34MYnfM(O`P_s9p1fNZl^IeNInTtM-e_3YW7R_ zM)s<#tL%5=C3hEBGBCY1o%CY0Vio(zYD-{WAR zX&u4pcGWD9&2;0kV1**7+(%b=JFvy=8Y`-_a!JXyX7f)Uq7zagaqKR*0U-byL`OPT z3pSD5HP-6%p5gT?cI~TcLOZeM`2GboS=+(`Z#(MOg)OZQfw;Yh5jap=d_fcCdD0^_ zEJSU^@~K&?rMM884qGS@SW*Vi1`Uqfk(?v0l^VfK?;swmcFkVgEEi#hQ^CHM5fFL< z0y2u3oG*<3lv`lQ(@+)uaF~8$00D9SzbZOs3sW1LA7qK0v%QU}im8W-kdvw5f7|h? zLwTqyp?%vkC#K8l2}7C$iH0F(!%oyvHWN~U*Ur^a{t|6xoaF5vWn`J|tkrB(LAZ5I6|GoK2jh>gV=-)MvPbDJeAGR)9$^{ z&w{oogg;1p3>q9>RVUiv?`k8$i466s0AC438WirZd9PikL3*Z8%}Rpg-yqk`iPStf zxVZTh4jo(vFOy%dYWF_C^zT!Y(~7PZ+01|q3T8@FIG++Xn;<6hBi{54?QbFUfKwFfz{#Y; zTLUAN-{AFfO3}o_1#XXftEFEwU@sNlKrCzdIm2mw#Imf+B!rtCz=K-^zA<^J&S^D) zAfqTMhDKy=ZY+-kw?r-+C;!@~+`9w~Q4^eSsZRc5#u`#6D`{=WiyC)CY0uzm`wQ#g zkdV!XEZJlu0_`xDQGH}N4eMK+H$@gkd$gAUuDVEbQt^0o%}$H1(Z8vM3PY(Yp&|_R zfi(I-%8Q~tZZbjVnKsOoH1PPc_HbyHzmH#@9>)VMCEy4WTZ63O#xOkqD5XyRNlq7J zr_UX2*nbO~G)teQ7RVMHy&(E*7Qu$dYpa)-mfe9EePIHmL{uLfi%P~JL3m2gb*xv( zXQLPARb>0C(}wM~hm(@>ZEEVc>%dV+ctmPZZUGBT&lu1GRZXOVU73;`RsA`1d zX5h`6_V4r3Iy}2XB%FxQSN4BIx+^_QM_HShw{J{$k-n05_0**kO33g$9ElOl^Ph4^ zGnc+p{5mWff;8N!RSxS?@TRKLN-Wq4ua>2^W;LL7H<1`1Q&Lg_I$}26z>V?x*KLPv z@@ehUomNX{6z4RN7Mitc_}T2=##{=`P9#G(B=6uzk$-hJq0-u#A(=jvKo1`2uG>_o zpoWb+SqC_a6_H5oE`hKTM-(&btTE6Z>9Ce+YiKxa#1xQj^^YUVGlN!%(lWC&vzJHr zF{>fV(`#Vq8LoK;6$d@;?cQ3+`ea^CbgVW$W#_ZmS+47wXH(xn8sCGS@h{RQxQT(c z*rolQuhfSu78>VK6zE2WCFw4}Sl`Y`Z7$_8hAZ*$$I6>I>|#qV#<|7|tF%PIevR61b*h|Wm1U)&+=a&FqHZz#<1J639gyMyweV@|v#&L9FqfnLz8 z@WNXWuTxsBe>Uq6xZC`(FARjC1alfEiSHv>wu1_<9gqS;@H%C3rz9hApEbvDOvlre zOzy-XoQ||+uvvkij!{YAsqAJTH=I(gIb{pnUJT+?vKyh|)V{Zyb1G|^6e1Rvdbs<7 z7`)23O^c0|m-w&E`BCO}*v2l<#y-pnhLx|z2-H%HG5$S>C5+qZOhm!q{Mvs!B1!An zq{yjosr97x7@1ZTu?Hq{ZEM#)!NL86;xGn!$#}O&30io2lBDfJ2(+27QVqeIfA?L% zPReh0WJ%u`BwZC*y6@@e7Y5i ze7L0HtrO*-N)AF_&RM>GoyUj2P}^?P>riZD8Qbm3#Kw9RI)uN64S|y3rvh_dpI=AG@edLvY6s5DROS_)Y-|P zPA(WBYx61b>KM|_FxthD=i^=3tCSq2r9*Zi%o1eG427q{=_gQAzqSMFy87fC->tH{ z7?-%g7G3%hFt*U9xC-9AjL<~6Vg*8^aBE6;?DIz43*kBD8#wj|FNIKy{c%sF9u1)F zhG{QN7q|PFJ7dY7)zDWqFtOZg&$otNJ2HQJA{gK5p$C1WUB0k<6Bx(}NKPXp4v=j6 zqADou%Xr}0??H8&3xvnsqVf+d_&oWFqaA2=*YcN^-*#fhV5pGjsrYpkmF%0c;nb9| zca{r#$PL}KbEDapExi45;NMnB-KA?nv#+@FnMjq??bG6emta&#VIsLM#771MC%OHZ z#(*g9cmgDTmjAqvkJn0*eBIvZNw`pMva*MKyO|W1xz4!#?a1#nPoZ6?G6f%|lSXG^ zJr_3&70GDUw&ElAvS{E*DR*_-_xYL=UeX;1YLWfJys*b6Zldo#qej{Cpw>jQ;(moN z(INv^2B>m?Try7OzB&g+xU{@;GE}Ihq)W3{$KAxSMw+yXvA>INI#88*7-5}%vn!ozMb!dVz9in`XwUETx6UIMSpSyTeX(TF#1 zIDBx7nqNDw+%YxJge!`5@Z)cLeNq{YEu}shlsp=5CSaa`w$Gc!p&A!+-sqoT{7WZ8 zoEH$E6;MY7XROr2D1K_b#Y{zqjd&4}__d>ZIewao(I!rqX!@`#!q*Jz~U9n@%=|dBo@{OlLM6AL_(jB57+En&?pwVK$ zEDn9^Pp&B)qaq{V{a27>p&gQd`M(y;*C%Xj`6)QxRo25X_mVZr=Y`0RHr}$EqhUV= z{rQ`t`|i}t_pVPFxu&z8|4jV7=TZYg|J#|J?SGW`t202OzPapy5%QaBoa~YF-ulAOXa_h92 znwK9Mcmw}B<6;192wv1H=1^LwBLWIOIo5iWM{S4rU)TyV+wxCw0qJ64KfLW=$DvW} ziK=Dldp?{l_G+9i_k&rO*ivn|O z%19scj>rDA?WeE6pra5L5)wcJ+4v>Evc@3+EoGCl3y;1k-RNjC+Zn|NTBu81bS-|R zuxlUfqk?-i7sbg9j|P~$MW-Yjj}c1KipW^$m&BJPmx1@JLppbGm7M}F*U~XjUkpv0 zcTW^n@R7fWfQlw&2&UP9bfhd?kWvhzE+ex}kLdrgGYG*rEbz^a#F+33#Q!(8VA_Qy zPE3wa?sz(TI?LJYx@*VZ?+aW|LS7879i=Q7e?$x|{{9%*J5}|*x^`t?TlKlR?kxJC z9U6{9Wm8liw`ISTPVp+!`umSHHZY&(i0*7^mil}>>{oD|kq4MM{YU!^XG*DeWQpmS z=EyVdL>6SlJ81c_^iaVWH13RZv>n!SApdp8ydEa(x5G4@rA&{09)~Al!eWvj>&0Xy zaFeHHCW4HNa|w^(q$Vn0h6ijQgIQB!L~$I?UeNy9N+Ru$NSOc++y{j3m@G7O9Nk3lwEv7ivY&AGV!!w$?@hmQN2?`N%#^Lm#b)7%i1Tfv0&AEVk*l@>g zDn;f&%}P@&EuRDIDR%(l`10ZDS7>f1&0)ZdVUjA7gYRorHGV0 z5pzTMDYsE>VEuu~1riyLBzq(%o;^s2Lm;u-kr8Vl7$h$_3TLodqpdO}(UAF|*0x=q zReQ0#Z!G8UVHzs&JYtD)0z|QI0#u4Qd?lB^sP<)%m{ovf>$zcz4G0%z^%AD_0h>-c zlqwoD#P`3mRByOGezwCjvcB&+3!i zwvR?Cvh#%~ZUR+hsZM0DD}GhiKMbe<@#asPkLJQzG&xC0l1ok#w9*ji&~^n3!iQns z3Xnz5xcwRw1`5u#guKmi;%q6bl$d(JUK5-`Z^XJ!o+O9&?b{nKOc!B;c42*3%x}A} z;1-Ut8kZwM8Ra2Z)O&^d&(p^yfher~L#5(D{Qsa*{Z~Up%+Afy$==S^)XwGqP^qld zaaPc_f^x!snh9Z2;dOXnWC4E{j*i7L*oWfw17!o@>K541jsDbyVwswW_Ia|&&9h4_ zyi8bTc8d_$MP`FKYz|&wm{)xVeusYt_*rz!Sj2&<+2U3er}MnzG|Y6LxZVhSKWsw) zz26DJa!-poumh8XaMKPV{?UwOt)zrz>duWI0^tFs0OklulVt6UDxiFbBz_}9(vC31 zIwAJpjxfir#hDpDbS8fAfz=;|VZJ}^CJtm+Rz4(4_tsSFp?21f+`I4)!>+0#F%-=&6YcFw&=jpGW)I;%SCv^^i_|*_pKxua0qB)0!oNZ%{?qP5g32gi~ zSaeXzSu58<_9T`V-Q&&d5)H^dA75#q3Z9zijTGy)2{7Bi#4&4V_-L(XoqvI@@*Gh* z|I#;&rpGqC`mWsRCLG?gJ*ODoLnpa7N2gy6t?bc^wC6q}uTJZ=`a)>8 zbRh$NiL4Lgm5r@mF88Q?aSG84KVj_7kV*Igwtfv?8 zLv{IL03fisPE*V*-1Pj=b>uM$Do=R68VfYgtEsvUDjcflo1@2Pdk`L@>3oIv+3f~n?+nX7om(uvhKqxuQlqf+~?Bz!0im7S*~!jZRpU)@7_=!6lwuSWF~ zyhrs8T}|Z^zDNBI0#}tO;DGu&42JsquYklYM!Ke|BU0+=$yGX1-v;$|UkCMaZM6|d zs%mE_O=g0sXTg4rhyIYIEFdjO0$!O+eOvfO&A}m*&o)x|D+V{c=~Br*lIiyd>&V!Y z6hT#T9&L}e`)n^nwT#J}&Ch&_*F5o76o9tVghDxY*`2>?EVi%|?9cK>&;nh!USK8} z@6C6WGP+DTIBrPz$gyB1LrIZ>r>!SkDA@JjCqWH5 zv9Oq?H*3YjdB+syF7U1*amQHJ@*1_H&s2#;vy?_qQQ-7v2Y53U`R2tBKpM!UHn*=UBb6;vZ}G znKPa`OFqz92Y4)$OXvy?Y%iuk6r`j$4sOH{Uu~=7l{Qv3l`hX^DQ%0%oZ~h6gjrAz z-3>8oh3|6)vTDal%mt3j4tMJc+1Ci~xJ=_DA>8{afMx5gF5%d(3;I;vV7I@2$84R{ zmEPE|X3G^HRGm#&!2Hp-wy4n%=tTsg@VQ8|=tr#*i1FnN$ImL*n(>xZN;)NKkvRQX z_L%#B5bGTR0r! zmy$1?lhv*3tSQoOUXhwH=j(CV$6O2J%Zcgk!l0z{J6kiVF;=}aU0BI0S$6RD0wK`u z`a3NxX>YC=poyJRXoy$EIgrISK}VO=qA<%Gp2HlDpDRk^#^j)xp?-+@e8%aQ*6za{ zU6iOdf=6Sq-Mg)ae5N(f4Up#D&v{iQHFCZ*Vu(-$Z6E*Nj}I_2x6nVCx!bsBsLETJ z`wPDe9Mh0Xf{s8CiWNum<{M^@0iM_tRtY|6hF|VgpD+4nY`8uI;ShmmF}v6aczqGE z(tvtV;tAPg=gpgi#|;+FFmug~878Ehmoj{MtVaO&n@`r*Ah;Yr*(1=RBhEm}H$Vl! z@i`LKBkrPfqA2#Y80Do4-87+8?d`Oxma2F>^6(KE`_4(VZE)f!p@YasUv5x6?3Efx zzajuLd4sSRjOoI?)WZs7oO(l1a9z;>FTWy3K2EP}W1cZ&LYG2z6U&1CnYM1%T`>5K z!sqxO#D8AaW=iP}(LY5H$4|P<^#7MCOW4>O8QPFC{nt&Mth6Bw!i30YSz*2M;gH*F)-b<{+TSAhE6s#u2vueZA6#F|QUBI@L^P|D~vSEb>sj(p5F(IH51+n2d zsh-p|p0KAiC}H*PUP;7V_$i$#^;|EY&6GIx^kC}&ZDd< z9sNr0c$7n^TE^fMVyM!y>Nq7~-*_g1ZNYNm$GVOO@Dfkh31DqLlINWojx(>veD@hu zA@!HVW6JmrGsP7oS$oC0|7UFZqeVNL$$)^&6@h>l{wJ~hugDI0{cpb1KdzUl$xK;t zA}mRRKZ0?2L{Q-cfv|Do<#UK}wV0cj2~uI?>6|P=iWdX^JYE`yN?W(p-RZI8(az6C*$PIxl|9$!R`HcF$Y%(jz{-SzxtMs6M;_`mu5 zPY(oc3A#QhJl`bI{b;)sieAhK{Ks>PA5K1lJN>Ap^o!ocNAw>!0xxR#wMP6=K6kv{ zc;csbx;_!o-%2}u?C*Q#&m_P5CIm7*Z(PdvbxVkAjQ&s_se;c^r2;njwP*u%N_k6| zeO(&wr4z}cXDa69z~%@>wB?fb3Q<%_6yTIJ=U+jE+_=S5dR2nt*hIIT=UOE zySXnb0BfOXP@!q{u*$@tXB6wm_@-n1tA}znVMU4z3i}dtA_Kc>Rcvz^x3ZXtXV=&Z z^e?#iN>N*8~N&v17S%%?xx+L^jomSUu!Fsf%NJXedO(zK@jlPxlS8 zJ<@6AQxf)Ns`FXI)@m^KZ1Y*vQGs=uvvvw&l)g_51M} z#;ul8r0Dih&9v2NQ-czWrjrrPgD86`g9#4G+Jk&=3mFEtV|Dh7=`=V8;TAS<%0i~B z%Zkgmd`)!#Djhc?4^>V*9BUi7B-LP)=n7&Mqq^G+fb8~g%DE^lvYpvD0JW@s*g{iG z##*}{8(dPW@q-M@OsKMs42m2%(skhVAl^Z_sG9q?`dTaSBfYV-y^W>ppV(n#5?9&o z#0_i|7Aut9FhHdMH_Duaawly!^ZcTUTT%m%ck&W@@WCB0Elq7I+9NH^>;&{>B!#++IpZy=J`zWwqWyf(Dip>oRln7Rj*Hm%+U(3jKI`RR5h!nodK3D^iJ2 zax`6hdGj$^{A$5%1bGxFbzzgDCT7Gy2j8i*AdBn}$lfwB4r>hEB?9idf~Xor2{ci; z8=La?Heot*@MmFys6d_mU#ub3g#7`{lNP(72bgj(X~hG#p!Nfb(d}m5V=OO`#Rq zCZ_KNuE;0G0Se30G6%bu)??9c0_Ss|v*Q-Bgc(BjPWE-^S*owQ>s@N0 zA7->C-fE3)T${jx#>r{jj!Guce=WXl^OlhML~D6@arMLB zhPjELZ@l`qEP`S6TdUqPx5*G#->{%Bj-r)#4+bJMDWXWY8Zid z*UI1Q^`$LY!j1G#r7_zg*NWLXXWwGZ!S*Hn5yr#-Gwfu`0wU>NPu|1)#25NyZR+JH z+q+T3hVuJwBM3#H5T`I0Ds!WQkHA*Q<9PqfR5tn)C2U#XNH#(szomNRbTXkjZYaZY^_d1+nRWuX0wRxIqo_r z_^A_U-BYNbW7MtuS8)~$wl+!3h?Lhx*ZR^rWqets!OcktwSgsHOu zHqH9^1({Bnv6=AKQ=LV_z#o}y#>6nk^SC(6UrnOOrjZzG%H4 zE)*L)cb0+WAV<5 zP^`{G|HLwueU)o76F5kS>(-JC!1OUV24a@0%VwcJkQ0zYDa;09H{iO7pGv}y)#~yz zDSa;6txMP|tbA`h3!a`b(gbPev7^ZxPD!ydNx~$5+tmNl)3^wcuh(^V?#vfn7461H z;4p|x2VoBF%6kI3f(`%1ui(Bw67-jBSH^032eOO{d@V1uty>Q(o^qkNO&$mC;m+kj z(tS>uVvIij1&FZ9TZ{LCkt97<$0&pOdQ@;l!hYXY(4SlJa~qhq$SoROT12&kv2eGYs0$!IGl=6*~22MsZ3VU5|xkgADan2<-X7yzG-mne~*2C{^{hrJ1FrlJ?=6YSk5?K<}RZ+lAaSWdUCjCHn(aKRY8) zMh2Tw6>47Ps-O^$Ai(<9xtD7^!0y(W-WTEP@WYd`vBXY=!w|Y$nWN&VqM6N zv$Bh%kjBZ>&Lr-4)wC_V4PC2*jV zk{xVDMQ$F5mC(DuhGnX>VQu^P&}7dd9J2X>M4XfLyNdLlE7UQieC(hl;qJ@5+A(~W z>9X{{q;;OfpE3yFngDt)6&$QN-AvQmXkX_X=W>?Y31S%M<&a(v4@aLY6()1`>UT4H znclQ+pIIXM@A0z*Eh=6Wp3(YURoi_+n>>-WwS!I^3x3{9KQfrLxq*mQB^*nJ=yhjL zs^fjB=R57+%VGF=*IwiC?YSgAa8|e5gk=CP!o`krcfa>2{+9<>)<-bTqMq4QkcPJF ziq-h~pxs8dvuZ(USKk};8$hP)Q@6fvo*zT}wTR`nLAk*DQf}*94S&M1@e|a--+z?B zp|x+k0yScV-<8*wuH~iW)Su_db@?-gDz7>j45+WTS;X!y6+LA&pXb&{4l_PZgP3iZ zQ;*>=JH7wBDBS$6cRNhZYy6%#p6C|hRK_@Bo({8CYr2*FIhF)I&vS)8UL<8+-L_}p zOd(hVb}GNYlrY2!-)OLLTqGxB2NXo!_CW+js|EU3m1>O^z<=kED*i*KzIm?D1&5mF z`2xoox5o^buy2J!FfmK>8?Y|=wR*dU%0BS@1tKvI> zD3gXX;=Kf(e@ul5sJ>_)dsOZ#$65bXFOeP}U7WT;0UA%LMZ8wRmt$vfo<~3*MM0Ew zL{60M_+zn<>e>S@aVkWU!LANet7Wj=ZSyx-0nwT0K9gx@~ zeYJ(&WCdbSjI7<%Czk4>|B4e_PeN*34E%-2hEs7srPcw>cKmIm!rb@J@5Gh0ZKXS{ z@pLrzFR}&>AToX!uzGB_O-|E*eZaDRHyncgE4?CdgDAK|WSm2*Rd~jHD)s^1PMOT9=hHD`e&W6=_z~nHUQGbpqsbqWWD$$`51`( z5AeJz)nfKwapMTtJBuPKe0yn0cL@Hj-ZY?VqXqio9FPg?A?fa}2_5lmUO(~I4E?V$ zrHgG>6bGAK|1Z|gDM*vAS@%8DeA~8do71*!+qP}nw#{i{+O}F0VMD~^3))(9vB_{QnE1fEMX!pSE@!YY%I zcl|E|ry%rW1W)>@i=0MLUsi;I$TyBy1rrJrA}#agv?L=16bHxOjM$m+bz7zk#)E_~ z`0hIF@|_9?@YGr=^<0!;_UZ2idDg-kQ?~kp*ig1+WjzL)tyS^OlCf4mDLIcHP6(lM^;L%)ul;n_oG%7YT3lzWRg1Y5ty^W(p(OYm&X&x zpS(BXtaR8Zsdk8F`?ZF>+g^%(w}LWs>a^^n?Bov+P>ZPEoij{TJu&BKt~f>QeZYar za+-hsBFk29-B|{;EPmJ$G_>eBOw_MTRP^vAv{AuKT=d{2JoIQ*qPSRACVH^Tyk1_j z#-E0j$0*6%VxU~+a(Y^5mzwwRC{A(UL{~CvwPlfzZ1ZmVb!8Rga@;=xN${sniU8|n z4+xZ0kQZRBvv;Tl!X|BbtX*`v1pBgmc!tYIwZMh_Q{L!oVBz;B3o%;`zjn=5yD zRxswB?8~H5ExR{yc(L#BWY6)pt>bw&pL=5Xli5UydmLvfO8g4jbu4AwOe^NE$({eK zAg8&6c#Nk3TChM)9@RlZ9Jv!2_%H0_8K{gMhp3nmXk6n& zjy?j%0Kp@W&N`3?WD?QZtvn{7vUf#Nw)|N~SU(w! z`yORS>61hWqp^0Zw9|L+1JqEzW8a+|2SPP#ieEGqn8gPU$6!_#oX|>YN5R2ThPx;T z>29o4N3&GcpqPAjrhrD^lsms^G)+ytE4yNiLai&h0=M{8>RzH{KEUNJ#i|e#D{>H3 z@V=MRwh9tE__)8i*A-v7MDQV;3OiYWlRbdV4z~T zX}qBTm&Y6bJR8REW_kJ@3Z-5G%Dr;t^iuw}d2`fMOWv4fGrOkm((sa%sAi+JwXq;% zC{Sx;fYO9wZ#-7}FWykU<-qLFd*&(@f_3PrK3tt@NpS&O(Bs28gvfh1tEuA@D|^84 z$XXWEe9fejmh?<>cnn-S%Y4qH)6XLK2djcZ0;aHeUg)h`wI4s+I?7sPSB_S9ykXt= zutgO>qmPKpu<^u^+7UZ4!M7?CUUJTFc$RlPYX+XRGOr2LXf`_F*`D`vZ}N9Mv7=`< zJj@86()*bDo{?{Opzdy6*6CkRv!}0k%iIuD{_r>3^cMz6fK_bG$%y(rULu>9Vqo9> zBE~X9r`F?IY$d`Hvc+0-RRD&inU=ZZ6{8X+j*de}u`UdQI2w%W42%F(?HP79;)0P5 z;BY|7CWbfnC%xRV5jsB-Ei+~kZuV}5yprMMI5~|s=D0|8<8V{|p<5OVvnWp>dV+7` z2dz3M|E+U+5sJ7MZ;Hq~ak9z3XO~d5qtYHAv&2{)Kn=Xf;D{>?jS+Cl7!T$DXeY^Il8=*nf89NMk5fvqO%Ns(7RDlj@h6 zsnQVC7KKZLz(B!y#44}zqWk!{#%%FFU|zXST6XZM6K>i>EIs0=$01FeXUp?1^qx>* zOr#(WKyDgx_WCZedIx8Ac6Kh2%}O_RcC3L$0Vbf1MzI7qNo0bh&U2@U4vr3;C#8%O z*-Qe00fM+iOxMVf+)#9%S-mElohC@xNE4?;j*TU*b89f7%Yxv=or^ z?{|C*>5>w(DY3M4XkeRlj>#laQ!em^1`L{D4#yHzuSN8>!06j>Df}iwxXCRLe`gjr zW@3(Zo!RY5taw$|=%1biymPbMKrIZ?DMaZOu==F?{HdL3f2Zn5(=DWWU0#@~od@#? zyxL_uCGd&F-ETdm@CkLfu{~AxN!>cwo&|sB_3p=;L3<}Ky*uX);u9c!XP9f3jT`og z5PV?DnaU-K^65i)C!ss|eS`QJBD?e30r)Fg^F=e}-qnlqD|>qH`jzk#O?Qm%Ci>lW zD=+O@CE{8Y%vRNAE1&y4<tCRYdMvopj4VpYmHHN_A~JFV zixMmfES22O@tDOm3Wmg-`1CQwrSQX)1bqY#=rNh@?D!5R%76AKixAtL;1=(^CSZr{ zRV@a(!}pg1I^$K&s~G)|-wbs8MiYcp1sp^P8jS9vA*}hMK=JoEc3cSw6>+tD7f+0D zg_#4;@>3^uSKG~7{)8M=Z2`hW6e2+ugg1G@MKaV zCWoi6PEnB(JJ5r{EKPH~UvEpgExmn`U;yvS|16lv`$yr>sf$*s!Lt~4JbUm{bcX8G zctz%7d0t8UoJ4U`=6r3p!e+3L%e<*;`MIkUbd3ZbtR_{Z^h=ftJ;cRuMdY0G6pZJu zxU2{Z!a<^dPH_ak9^kN2fxeS3Efc~d!mK1iD)|gvqpW0x@gcRc{0&GQ;?{`36)Y*!wB3$kApY?lFk>q!?u=QnsiR@TNIc4rz@ zoRp-5oi}k7$>FO@M@u$0|FQ_hO^NI58?J}5efgB%WtRBBf;zK6cDB+n3Oh6Ef7lAM z3Bd^TxBSqZgt7K&U3BTjzaaE9B|GT}e{+q$r0e10YPQBlXYSH4@9$H*tk9K-K4q&d z9*+aCn`AB&CJ16{2m7hZ)V>yvyHi};dON9&4F95aMg& zt|O>5nf{jEd~JviEOsw#(ccx8m`3|Ul+!hVvptw)MUfp?BOX_Y%}7XhLEXl#Y^i2{ z#zh?Z$(W+*yBB11+`dHz=RF$D>LZpE@J{G7S{am{W;ZgJvjW%!Bv*0&c!G~TnKxkt z2P~({yr{g+#4A{LE@Irmfl*6x}`3*5M2YmE8<`1@)72Fh^UhEFNd6#p`Zy4ntB|dw&7fj*7c9QTWF5iLn zI+Ey)U%E{N!whE!IUr67J|h$%W+&yd5}Y~D+C8GnOpcgWtqBBMP$idJGs|0-#(6}P zRGONF2pE*R%*CInSEx+SBR&$!%%zf7>6CCjLb8-EmnnD4Sf9ags&n-D}q&qWmhV>@#k=!Hi zTWGuJ`Vjbr+xM({A>YZqi9f}tm1WrG-WESx2!n@)?nBGK*tRfw031b~V+7K+fj$w6 zDd?6GKkiuXgS$kh#CK<~!;Z?{AF{`}!vS#9fJxl%b*8k-256xHEerQLQ`l((v@Uy{ zf$cV}4lI^CQycQ>0%Z^9cl5S@Wt85_Qe;bB=H$X%Uh#W&zCaTj@}5}p@gm8y!(eLm zn&ux1N0{{)-@|P3*sEq6#b1eQ40n(rXr1O1xrbbdXB_vpyZK8?;yU@T<_1C}#U8hx zq>Gytsrsy227_JothcjrMgF;cZeu&Z^x*-G2&4tB&0b&u_#2pAt1dX>FmsG}6YZ+A zc4dR5>hXfRe4=kSFl{tUck1k%t~jIVc@M2QN>6Mo^S>(NFf$rmv0kM}7FNUg1_=diC=!2+A_ zVMv*6CRK=P$eC@Gq?pMNse%hX_hE^U*xI;SUrnQGP`z^A>sO zlv;*Fo5^9KY)iz7TAgCxBlhsa2>ezI>RRu55euPPZ7ij{w2*@ zQV&Je@$-V#gZ=ErwMK@dl!uHK6a$8npB^w1I?~f8$CeKrJ{ketX;1!og+}OPiROdk z>tXZsL_hjkX4wr1s=Wqgb56>?x($WD3=XF_@Rx6H(Dk2V$rF@p7TQv?Wb3 zkLN*$7oE!OVZMtalB!r}a~}H&9h+@YS4^~`7Pm|u{cQ<3KPK+|+(GGU^S@Z%uJh?4 zv?9ZNAq?J|>+q1|JqUG2&hu*Yl_oB|cqV??WZ2H=bONC|5^V>q7CW(TOZoO+c;DPV zdO;26k-=x=ty@K(b=PPN`*Jmj?KsnT_JXS1!eE;9M)dcBntRF!8x zJT)P(%}mFibu)R>+=s=Vo7>HX$-G&sd|oDn#K&msf^Ai2>@Y@%NCC-_ebi*1Ik~jt52H=U zc2%i&lxE(VX8BATjEpZ=)+cO+{szF=MXuQ%4f_kt?!D8z*d8w1U_-JL^LJ4$<}<+q z@2^xWIDuw3{${v&nBhX1U!w(*FR&2u@(j&)+3@x3FVY&(2`svmP@cE_us!27o@8r$ zsJE!Q2Z1Ed6x>nO;=!S*zCV-|=!TqbHd#y1@{B0#;IMAnJagoAloC`MNZ{_=b!(U( z2sml!Mw+{@2U=(3kQb=%Tnp=1}1;aiOO}GQy+5@?V z8~wASeu&3_HX@ z(B!;sZx9+Nl>LOLP^wa-(v0?L!>8eXzI(&LmX!;^^?!oD#eV8rxQfUMR$>*l+gCl$ z8;-KBcYmj+b%Ch4ml?viDA4Jh59H-cR74RR|0E^VC#7GH1Y}%4?du>$if@>T1<|M; z9brf)BQRHc-)=o}uUo8NTb+Vj@tXw;xXmTdT)8iqR8xCVaQF1bRp9*9j|{C5B(JQw z4mpR0IvUcuELbuGp#$Q8hC1wClAVj{g0+Cu(jZRDWoJBATFE~QbX=l}Ez9QKFoQ)#(k^%Z7 zmw(X9GxvodRU~*SlY3+5i@dGh6rJh*SpSq|7Jyyzi~KZ5S3DRKeFzv>5M5?3-(OUX zu`WsrkqS(u-b4>47KXb|5qLVzFs!-QpOF>4#!A71hB8NahS3sL!aBXwvnNdgT9NX* zG#@&+yhcP_N)mLyzrYq92Tq()ZZpSD0~qk5V%zZJ%7=(4gjZk@Z?F;;h|WR@L_DD# zh}hl{T`#ILQMn^F>fiTavJwVrk{XlIe%c$M*yEN47m!B@ePFc`4@P{q9(gK)wm#G(tiKenBU* z6zYi?PYa{3)o%#B35Ne`rjvO|`1!+o&D5bObtql|&HFq(Hf;*IQ_L({HjUb(X_GcV z`+?39NrQ7S7}t1^FBdtRKjMNmp>E7E%p(xOZetktgN(U82vy~Vl(1PWn5Mu52g58v zAU5aDW``63yWpNWdzgG{kVXnYT|})N_mv|<+3@zEcbUmMQqgmu z=SRYO_m{lp?YS-0omtg*{DI))eJ23vI;8j{y@!K5)e_!0Az{4X~2oDqt1^w8A zWnhRVjvJPi)|Oot=Q81(?@Cv=0T0(i1KID#+leLI!oXTVPwY9E{BS$Y^4ywy@A-Iz z0vZ_y0p+G3iY*1O)+-A%2bn?(^C{Vw=IYlPH~zp|rIWDiC9iq z$ZgJCVy`?z5N!80f0y%EBuZxcL;jVro5!0gRX7l5yVhf*WO= z3D`tPhkUF`hYP{zjmyC#YAivW5xu*#lfCI1CzS3R#aD(EaUsk?;J zDPa?zOt&y4Rt{S0d0OWT^Rolzw%M#X%j@{u`|IP39|*9f5eqL8 z@KO~qy^9K(tGYYDtNtDkLEnQun0nBu8=`6a(m=mKI&cXITQ;GlLQlzM2-#CW7{F!Z zUG7rfHp%#KhG1#pA{aHt6E@o7HSHWN0sp% z3Jh*?+$z_ZFTci-sxioecFFY=FfUQX<~U5LGj#+8XxupD3E#76q)%JH_skYd86r(9 zrWl~C&YHEouwPmUkzsEhX#huZKX+hCokt?nm{>WgOSGe=Qk6mujnbl><&cj+DaTMP zH6xRXq-r;sI=~S21VS@@ft%r(XX?26TK7Ybr zPuDQaoXOfnW*1R5Sba?k19i#Z5G{cs%lc7^sncQgT(;Dyg}7|dsK;sAz%$Qq7leTn zTeD1_)Zre;F-AO*+t#T*ow2l*u&)+ODMB*+0GsWd=2O+s+@V&D<{Okv1P!^FKFzpF zZe%gqkUf0)N7_52d%odbB!!;s z2&c4XT^zkLDj-p9zrhJ`nZtE?P{{mb1VN)rw%tr-2n|(;4Fb;o_i&*uK#Es$Y*ZMO zXZokbAIjDAKgNJ=kcqakSvv;W-8_k?7c&va$~XfCU~)vw zSpS*cjCB&>P+cDPV*E5lFAA>s=pz|lcEPMBONwf8-i()KXPg(%5BM&U=S21g7aS2| z$Sj#53_*;?{Eo9E@8$fHT%k$qf@--SBFSt~T8ueletL`h#u$z06d{7srcr3zq*bVR zstj2@bHc1qK6{$9V1`n?bON0}WdvC}aE`($S=b2LX=zp+qMy$hj@NxEn)|diH3zc%*M0wq~s3B60k)(Kv)e^^5Kf@!b z5#|>WW;jflGe*>j=hdY;eJ(FwnV3a4F3avznr8IX({kZJUBq>h?WJ_qWyW!n=E?eS z>u9@>G)EjZu_e9Vr)?}v>_(Sc%vQ)<$|82k=GRSk11fzqr|%1F;paBx%njf37VxfA zVw_|knI2E4;8U$r5pyAM>i5r?1{Y5~SkITl%q?QLpP-vps7?Vw!oZ^In)G)neFveV zXy;CkOJWACR(97XZe-*3$B#c#+fAN!PX==M#@1ca2AZ`-0)i9`5}ODj$*g59++BOj zvbf}zGjN1Qj$Bu%Olv09U@V)dtM3pU+g|S1bp_=xvE?}d*pza6_j_qL<#wWtsMt2p zRI74n&W(TZUkq$2lvP<(|DZ+aBy@9qIf&uSnG7N3IJqoU(*1ZR z9{rM=e;0Hd@LCS_L zLwjH1A(q_mPWXCL3Zm(;s#g)#ISPi3`2$^PLgTS7@zyG)L{IygK1MEb0M z^J|m(vA*B6O{k{Eoh)Y3b&@mC{k_&Mq_dUUD-8h5m5vKS4=VURLQ^H_=y~STUb$17 z>;7_hG<&oGkpF`|mJB!uw4hOzRt(F z4yAtWu|9|2P|n!-PV3|uEn9C1d=*r`qhIH1U?%qmliMKY2px4bXB`ME5wbldrvu?}2WF{n*g=NHwz2jHQqmxguZ8IKTuWw4v`+0!Pb=}r~ z&Eeg&$R=I3mpAdvWk`Viq?P@B;{;puvD@Qcq@bTg7IhzN&rgW~y|F8~{Q5TE)A8B# zyM|AlFDCeORJ@R#qg-V1=8X}xor*!-Jd8D{6SkH*1%;*}_^(^Bjj*BQ{#+oN{ww?1 zoTMgZs_+L*bZLx%I3qHQuy>c7h$r*lE=_dBtQ^K|wXIE2JleG@N#PGv>+e2>Uq;D9 z4K+f7$%BUbVs;fW;;c*65Y0ga{HT}cqN1FbRsfpFrPiR7SOfJ2iZyg=N<;UiaF#60 zMWcR9fvR2qr!tM<%9a*Utgcwn+?FRsl{&c6u}w91pwd_(3U)qkO z_5l+18z%J~YX6Z{<0^eY%XKefr$06r=fg9H^5-LVF{0fb(3_IOb-NHDxPuP3u0*|N z00tdG=qq>VYgn-7)u@yoA?0Jgx)b!@bimGZhUcQAO1z_r*Kbg<2Q}^4wn9R0Tzc-W z2OHhcat1nY;dDF^mg6Fx=dinSQFnlwf{t-s;7M-v&-z8puxg4U?Qk$wB;9qW_B=YU z@k%T0fxB^X^PYDSop5Z5GVPHr2TD(Xc%{K_F*@K{X98cic_Qd$W9xHshN~a2d!(it zMFYM@X8L<3jIOu-FlBE zzR67Q;9zefPZW-D3|GEXxXf%~pDKGnO&`rY;%W`JTKL%O zTk=m0;q&^z-9>LmuHO=PrH%LUuKC5%FZu;GA>tWJ>_cz*TiWCNb!9@!?|wn|6mG-C zd$yt59Af>r*izJjpSmoLzKrKEe$X0$peSTJjeLV8zQY4rQm(=9!dy`Z6B$iWz>j$NrRnT7xqLYJK}CzptaeZfcRVXVUgjDdt)bR#_AjMOFT2dqLba)y&G2$v z@S)2NE!YiPTY+yP!3PcRS?8-C>@CB_fO$6>+s=9$=<_br3#?^(ZZV!wd1(4Q!qx{Z z@L&6u55bmCketEi8>;sO(A9LW!FhYg@$0<-w}i?!vK#SMd_HG%ZmG?%%oR^QpAgyh z>#%^_op~wo?5`+KfUQYxagyvV-}N!|_5Ht{g^cs0)H}b=yYb&J6rTU$SxDbSU+%l7 z$k1KU*wFbKcH{n^xu9yLbD8g4&}T?WO;zQuLqc?fVhOt5fQT^s2>kF8@_LEAX=9A> zxJ%e88Ndsq4xTVl#US4If-vT81f4?$sBIdV9!+GeyH2s)-!DJo0a$v}L2oeAPw826>YOFtv|T5$3o`z`vf^wxei81>`?-r& zimm~<-lMTE(FP5uzP4d_I5w7RlDvz);T~C1$;S$VF`gFJy`?F>Y_d7|1LMGLm*hc^ zk%bbQC@fGNPS5g(-ae@#VGiojF4{BaBdsO1h-~BXr|Y=C-1^#3(@k)O{!5z8%*ZYx zHuxjR3gbBREl0aVvDqY4E+0jzirbA=?rDYO@@-1?FEe*rrW(sWptD(`?c=_z;~;|4 z?6G0H;^8vR`n(G!ry?d6{M?!uNG{^Mvt!?WJ($q1Ky0%$hsC%;OAnbmxk z+5#zn=TWZ=hI@ISo*5(;%;0$hHF-=zdOWBN5))|e7FQt<7Ky95*tX=PD1-JpxQRt# z5leMH`2QL9a%;T4OYj8ErKf` zeQ2MMzH(O|iQAO4v;Bpk&aBL%;8NnJ=F;NlUPr3UdzCbr7c>m8@@qXQo{d=QZu8?k z5#2>RRC#>KaEP4cPTM3fR20R(JERkVqyx2_%}q*y6$TQ@3&VtgZ{sG z#Xl*bW+iLOc{yYso9%{{*-4j<<{m4@=9X1SCrZKyd=!0!Cb?BKzG8K=>(PYxBI8HC z7hPmbA-)&j_Y2*bT!I{=zy<5#LOuNH?&&d(>F($D(vPR}aaABr+=IA*YU+kE#toA) zh6N1fkZ5k!`eHpz|C*f`KTi6K2=kSe*?JoP=8|*gN5SXpqA(vlXz1;S1Nl6*y`+(! zt4}ik4;6fAe<>v&>N?K)8Rwtp>^q!OkJ8U!OX|5vTQMPS#oVeOJg2{}upuTGn7V4{ zsSEw3?WM&=|je% z1hPof9;xpNv3}_hju&lAS6n5COw`#%P^(&;?&#NAzw|756u7&SEJbN)7a3x_s%Q%! zL7}8AOB)G@kR&f7XQbY12*5#kw#)U=Uh_2pn=3XX zvAnqZlZ1Jm0w@s9WcWxK-@G5FK$gGBtcayP}HozDI`K=EI^J|_*NN&Q339= zgPD&xS=lDzdCaRlFsb&zF*n=Vz)CoYARZ%TC*(jxp39Ir9EuddH-bD~Z}9URL8VTB z$TKloCg9%|X6~{yZOeCx^5VN8|GRG+$kxG>&f3<)+{#Ly&f+^RI~qEe+d0uW+1gq; z()|ZLN8*1E*WW38r*As3oUwzoxuc``H?R1=M{oscTOHORC0jF&JnfB{!VlJrEt*p;15`ca9}<^ykPX&p91BBKa5qMyxg|BZliqP z-=A=P#bi=ww5{+*Ndjoe+7fms1=nSZ&$p%PCTFlPE{8mQ@vTU*6GgZ}F4C9!V~|~C z;@VZwJ(Ez$w~L>@b{AUu)elHWZ*DmpliRzpAauR?z40SVSO zFupyX)NE3?{vD3cCZWvdu^$ZFr3zt@?t>y57}iq*snD|bPWqiTA#@7JijlUKycG&T zY>i3W0;EA>)R>wP6*E-VxP&|&Mxe7|sa_WUadp-PjPnSSwe{UNDKAKen)$(fQW3PA z7Pp$kkeNLSsEXAPcrjE%myYsEuXzhS0H02&)@5tz!h4fa38X%;4guNLZQ%#x>_JZv zcE!S2(K2q3VoVjh>?1lnp)tM%a)(wM6aRgHo7x_QIL`d|$w};4MA8bQ_~wZF zAV^r~QhCJI{9&L%Mq}|tKTke31}C6;MNNq~uSmo0vJV(^QRC zx8dqA=9P$Htg{b!YcuAovFK>5h(GT8%^B!RtMc)YK+u$@UNX+69n!PV(UCulU2|x? zxf!v!$b7|abh4I$KxYBN6odvbx|mI2W9lrLwWqX}!nU8HZ#P*?*HDcyE4|r0X-DF) z(%Z68uvV6=?Cj{Kmy*wEL*p0{l4Nri?&T7`&UBW*pJ4ZAZd5#3tGJo2%4ON90P(3D zcc+wCI&s}z&>351{5HwBcDP{)YLk8;P48dOCr85?V+@%I_5Bb8EVA#rCu=IhrmLy| zX&DL~?j}OpkgIuaLx{5RqzXwC2J$|St?~A`jPGogHkkPI5wteD3*nJr2xZUMjITlg zQYPl~>nWstplSOl;?21&J18IJ`8nGFas{Qf+-mb!4AobQ% zxb&&anw&$D*s=stQqzva({d%k?6frTD9F*OfXo-Ufb!mcXUfAbL~P3Z#)`ZiOK5l@ z2WT2mQL%m|P*!X}O#rtDveiyIIxC44g`0mZiC5u{rk7~`Ma&D^Tgprx)fV%DcGV1M zZ61hs=u-#-;V#O+iaJOCjHd@u-d=3j-W4aoAF$T3SmmqXXAQ+K9rf&`tPYtTPv~Qa zC!k}A6GIQx?14@58d}+mVN^lKqK2tp-R{!)BF2TKwkIcx?ME5WsTv{xX0)+GqU8Aj z@TLNS+$<0VEp}URP8_xsJ8?me04b71ij8t~#<+cA#?p+u51wy57vU|E%X9sN6$kBf zf|zbeh+s~1`IJWe2Ofm;Z04>%@xW^XvpByRin8LdhM|{ZEf$Mtf@n)&ej$8psr$We zG1%sV<+eCo0MMEpKwGa(s**B6keM!w?@W^!?DRL@b%IDxPl|YH#L?6Vtl9%ig$~iT zc>244;%9{}5jsuYktv+H->}QVOqvJ_sa&YI2b5Gk%Dj^cnEaYKg@Hc2YBv(sY49Cy z_Mjci@&}SFl4w53wLk`3sEgcRPr&aGr(d;kj44|E3HHEvZfXns-c_kZNO|pKZ%_fY zv*e_Nv|oODdYPy{G!~R?OM%yoW)46_Ze!01*bq*FiFN_~52NP>N-xJwo~O+>o0f zKIsp9{Uf;PIf(x<*_(3NBQSHQx8}~W+)}%ozo&7!9pDwn$zJ578ijB-g}IRvw3tV( zGijJbC%JU^TD`&TeZyR!%#$z*F&W!=LrB4z-Qw&Tzp$$5uBrpKI_!IyDDt|cNF@A0 z93XZvUab_*uqnY(M-RrPVI-y(2@%;!aO+QwapiUqkTh_)z)z z5{_oJW10~B<2k)7cq|S&2?Wj0pwFqurXoVMeI;+%Z7jABL6q+CISjFmtS zjr-WD3e~>U5E^xq1J}5?5hs2CNoDe2D4r#PK><)otVT6bH@k}JBGF{KcIZuHsl2 zT|+{EOIhYIy6+!K?SN}ie>Cey-QhM`cgqLKI1!Z`o$mm9>B#>)5`B_&OY0JBjx#Ls zFx7icMbr;lYrNY)m<#I-~R)rupTX3tuk;M_~s?|K_DDA2P#CeDeD09B)Y`x za2LTLy^3`gz^GW`6{_hTJE2-f#C~{YTEsi&ANbQ7YUva}S|3Ab@cWG(0fyq}$N#iU|21nc z5A!!WD+CY_KI%72@&9(2{_{^)Gk3*O#qb$UVYyQa#~G3-L^j~C$8?X(nkm5#Z3>^G zS+NPjBD3jd#E8BG5JjU$2jJ|?um%gL=8??&LOT)BOeyla9Bg8kNpXA`1or{5ds)Ei z+ifqLMO1H5LVA6f%J$rTc3=LxrTVt+TiXMUAM%^>WMp}ezEBUSk#TD5rQ;`F55ayW zq>-0opP-xCFcBnjR_d)8(6-7A4tL2;=Zg+dY~(Q#V~!Ghe-(NT;=sIt8>!zlR14nd zi$2ga*iBXdzE2T;)IB8a&WOQFc+@e9ke&RnEQ-~@bPy}usGEErY!~sqF(}uqBgSvJ znLyPb*4jUA(!=M70syMZ6Q(JIO&N^UD*fU{#DM4G`HpP*MJtu#O5YWQ#E!`^ULtGu zza-2ep2H+Bh$;%HGn`gMkF#25O*VXaIjrr7m@UkU*s9ioU7nG=rfc{smjfw0D3a>O z(DO=$rVEW0Dvi-mNRHIw6T=Pj9p=NZj;~?Hm}?hlHHTIM={N~9{8IN}*5)3po~`<4 zSE&B7LaG4|R#+P5z7yUMk0BvL4iifAiuDX5taFNj{rzCpA_7IIT|p&PCdOrdo;Zoc zA*2-kHf1>QG)vV49Z_s@m}EZZ@)GH5Hbt1c7B^iD#^B(fLOTr-3>-xUJtk*HzfIuk z3)#C1v5?Vl6_d65E=QG^VvA%4eR4xqFPS?VPO-M9+&@4ZIdd8nD-qG?(|dHI%NAFm zRih6aoMZq^IYI+;8Q(N1PlUjt)j2ege9TA95Id;iBf`_`q?lsG*I+WLD`T#X%m{d7 zlm1p%m2$T+hoCRG2LIYDWV#1rQ6HDSVk|Dr%ka-hQ$ZB`g^EDqM$w?nvXS=aj9>Fv zmzu`QFz!HKQv-dXnYBn!jz^o|tS~eK?P)iBe(*B@L~5I`8UFW`7gjKpN^6%jFaUoIwpm7^`tN{saE28-2&0B)~1Ly!TfI| zF}|zxs9Po|6l@w79}@jbi?t{vuC$fwoe3c{`^)^_1jl51im-9F&_hDh!Rs4OKqh6N zJ3Sjm`8xmm4@ZMEID;RmZj%v_Oti$hhsp{DoEef_A`*0onBrxpVrveB)c6xeSw})3 zwm}`jWyVHiOon9fsP@9cc!6$c*P!+=lAwVq(8chdWPra*M+@&P1oWTSgW_2UcGuAr zDL)_RF3>D;Rry~(Gwuyy^}c=?4Td7xXd;2FhjP9^E=2W0t3N3@VYAHZKG;rgwB0!X zdr0NaE-CLBMl2DgHAx67_E(QzA4WuIJSv=)EwL(iX|A4GEzK$-YOFxdj9_%wv=kJ# z^)%>g7quwY+*&j|MwLhGHBn@UDIG$doEoWU?NF7y`(pE0RD zrBz-f=cgSNS)NX}o?k$NqW;7h5HY!X>jW?CzyjU(W?DhE0tqQI%y3_~<673e)!560 z@%sZs+_5lj$gTX$K(uI2doH}*FU-9A1UUh@*T2>Y55l+ndp_MkP-nD4N^bz%F)G~W z29HOlJk$)4hNDBa1H4{K#Wn*z8~i+&LU2i`#Fs?5xt?gK`BD#)g~kUk+zgl+t$vU8 zx+}{r6*R1&Dhx2qlllX~L1+jWX(PjRwy>85jfSw9d%S&Dmq9jrF`bh*gu|JGCT-y- znc=+nTLZ#-G)3q8z9%Mqi_D?2$mo3T)n5sfu1q{AMMsM41EyP_-D)GZ?pNJI&5>T7 zKQ7%6vfThYZs`lPGm*6k$I=enU`Vz599@@hXF8)BmVNxhGlSXWL~dxNmu?WQiSwf0 zaxu7Np$S@KZx8=0*BRSMH^}GsR)1eBitaS^10;qMWQ>_(i-*{ek zC+!Nc@NwiPSk9G-l{g+Spp1!0#toUlU#oO1JtxA5i% z>)rsPC1*qcrOZt>0@ z<13HbyP67e{_=!|rL)(|drnFU(9ZaDMoTo>nJNxc2l)&|qoW;>*ayLEcpue5nu zztRL!XJ4EtdYeTQZUQ^lxTQAmvMHS8QnPgBf8SV>1-a$2{hUwqeTVxWyXJpwNA$dP zM%=!$QX=1M=l`O3PFmmGhFDzA!Pd?FA6b?1rsKQ_{8#p+T8rFI0J4PN&Kz>qppcg@ z33@<%dBi<`lDK}_QX#pjs8ULR6D+JR6rB4$iizIM%}md2FWyicStqWbffQ3==lbK- zr;Bf^=j+Sq2Op3VbtU@XD>JiJ+_*4Gs-1dHO_7~4m^*y^jLrDDInO3_2by9S&!4NeymL%0( zD*6ELeSEt@RxL6fW<2Fo9Q=A_7AsX*2sAieYOb1Q%9VzWGMn&@+ad-SOB1lEV%1GZ z-ifC=u_?|pf_p?F3#p1Z)yp}uv+wHdi$HhFa3G51!(8LWF4zdO%B)mYdb!R@VjotF%G0g~;Eoh$C9{;9c zThisBcoU$)#H64yZK#=S1GOP71z})J=gOoh-h9G_-smk~E?D*)78LtBQ*KZvf(?7t zK#t|ZL+?I;$X#Nbu(UWe1c}`21z`X)#z3i08%8*Z8GFFKA+z~IWAbk49`kBf6$Z>_ z-VVWj|;1J+9#UHS1c5aZu8U>VCJftb>-d~9?N$3{ z#vx+lYR=PUQq#nkYnbiqydJ=&CDWtQ6vw)&$Jl3HTjpWQkY#P)x+e>IsKn*BVl88o zac6hxd5)b$*Gk=MiB)7e9p}sjENJbl+n7Ip$ksgnAbrq>m;o|4J+z1Y!F*^SG2U5% zFaE1ts@H#`>>axVYu2>EG%9V|wv9^Lwr$(CZQHhO8RIH35+dFp&hv zl_194cK{l;W#NkOhikfg=KQZo9p^iC=~KUG8Rw5+YSy^Gz{wY^)jb1Loh03m zxW*w3R3!P5SD6xbDFez0=FrAVDZIq!DJQj(7u+9~}J)L^50u2<<87Ir5u2 zco;U_UD{X{k z^TrD3d4LLxvw6H2L`gt(t-__rrm3Z?r7oJT_vOWfL27Bw^_H&*`WQ&vHBajI&iB`I zj^{PU?(0mu>)nLsEDlkD`MC{U?FkH+EwfuQ%gd5KEkN48*zP<{`g8MJ-3CO-`)X!WrgP6+$1i%B=yTm z&dz$iLV3;YnL_g#+12*XVtTDfUI@2(E8xb9_HxH~nA1GW%-;G@KS$oRP41n*@RB;> zJu5)cWN`P;((KZ|WEK?J zy1yv9f4B7S#@}@|eEFh8cKtcNzI{Hv?FjqwhyKh@+ZR=MuTM?6m*xIYM7U!zcNfCt zOI>9bv% z&;Cpe{U+!9NDTd^_Wm-s;nL9{`K2)}>Uie!RVnqsHb1d@d<*CP(K_a}y7%1mfUawE z^BzJ-hXYTHCuc=|TuhccSeW%vqos4K62i?5J3)3=hK&(|5kf^LmFLhsp)`oEaExKm z*0=Xd=y;Nw910|m>!!df1hfChMh!ReYHQetRhUqviWNI*w3>Y}%ql-nyG^e85X?M8pZ~0MAI<8W~fP+88b$9(XgZ%liLB6)B;XaGeEy2 z!ZE&H%ypzrUxgYqy1J>Opgsu2FvI81eC2J`BsL%duB9otJeGB1TAP1)nT_}0`Np4M z=SCB( ztwYRLDH%6SYL!5v-~TH|oRl_sL{6hQdDP_0*~NfdpV7gkS+#bqC%KkjEvgx~-`uYz zwv!k=BPg6akzK8#N{GBH z7*Oxh?}&=ACO;M78d}d%+Pr9iV?pURf)pLRVcA6NS~mHV*2sT*q#}W-;3C;yj0^8y zRJcDoT*zyUS{5k z7@3fRP0mARS>nw>*Zyu|jrF&exw4~CV`38ru0?aBdC|w&BKDpU)0%xn)G)hWm=rzg zQiVE(5+55yn5)i{UretXBrsKUFn>jx0=fG93K14T+ORQE#x=jhtblg|$9ys=cfFhd zyJaJAKSO2xE-u?@1QPUE)1>quO2)3vx_mlPpgMa)FBn5x#dWBFD}fX<<)FySwF)K2 zbzEIO1;;2xZb@PmF+#@DjQ4jkf~6>WPOJ~Z?I2W0hLN!-IpQ?-*<^^&l^!LAgfP-l z<8}oCcI4tnB9`N5;t=!x)Z8%oGRo}Mgo72Mf3-%x%quyyV%Aq%p64Vgl}U4TQ-C$6 zUz>4mJUJy!zOc5Vcfui2zYH}Y+hB3}O0M>*>2t&1KX${Kh1zKa_=bWo%1zdv-{~%O z`OL3=eQ*UZbOrZVQ-yk61t;|O1v+Fdr>ZW5H=Pg7l z;0S3U*Ml@ux5*QvE+Tz13|of^Sk%X8~y z#SBEAsh-oK79jF6W%xLoQMi$ue8mdJ1yoZ2BC_7zYHo%qy~Jo;V*Lz3Ip}Yf9PXk( zeWT{!xYMGgXWDcfN5T)GGd={VO6O8tD$x^UPMK4qG-g1#j2GVZ2?$Im)aF!*tL^Ox|@{wDwL?7v1 zhGjPvfAe#2uJN=7x(Ad*v>Pq;6X8Ui0whxJbRFhpcZ&q^>p5NNH`H#6h1N5!l8h<| zDHhP$b1&!qbyBRP$_Zp7sW-N_;&KV)baCC{)bu;q(46uK<=}iuX%sm{eXJtI?Q9id z1h!>nmTe`p3XGBtF>S92xy=t!tiJ;EkZI?LEMQNt#Ewjg%H?nv7A57h%FB8CjYiHT z8O0`<7BOZ^7<1~`znC*EYMN#eRfyn6qZ-y;D@K%{lwjm=)_?+_z+FHL5vai~s*_Dn z>ZF?EzG$0q?$&@FKo3;lqi|uH(<)><+JUWABwahp&o3G7`Dp;n>L!mkpu1p2Khi3c zIh9STNxMaM1Gxr46cb6)JQhF{n;{cEhe1ed_mWFAK=^@@BVm^HDo85Ov_p#f|5ZaIWo2<&38eSh}UO&3Ne9TYAx!tOJP1V+9k9DP;=3gi*gTfAm>aOb)?C zt=qRtrdi$@(K570@EKK14yz%B(5ra67A?C3Q3-dMO1^m~Z$SUyDQ((PQmx1<*HEe~ z-(cUBy9uQE1%E9^kQeJ?c888@Sy8QkHH#$G96dUKRALdpri`vMcC4lEfU}xeq4>dD zP*8HNpqfrua&+W7LxC=1WGdC&S5z=3e*n8?RoB@~RBxm_qJvoQVAHH!va4T_{mXB+ zx`uU$rKCee+qB|hIaJz1JIi4U{>#u5tK=>0jeLrh$=PKTNl_?UTVE2Lc6;CO987a! zjsr?eciU_s_l%BI6&Rlz&fm}SR?c(D1!Q_kEaR85(8!(Aw-E%IF%fy}gw-T}Y2GdA zT=~AgREl;W)7$YwYn_s9vsWhkiBO!t&SP#&#-gB{W zpd+$T&^jYpkpn21CYqiC6?*+~v2FwGmYW6f7K*G|wwhsTHW`>^Yjq6hG4*~Dmn3pA z3}b4q(_tKiaZk38$xeIP-`t4GS3c z$K&Y9bebMoVlwAeXB0JN-k@l`MyJBlA~6{! zd#pLN`3@u2(Cs~;yK2%LDYCAX-zt`gaA^LVwVKIhmj6KNrE}sLEb@)q_I|lFO`|Z) zT9s3qW-tdwjU9BtS7-A=J0Ai0xHv3vhJ`MyU`MbhzNY(ep#IJv=0bs!mOov}N8m9l zds23-gW7@vD~r(rtIaMpNk(u7{$P87=}7lo_uD;{9tXh`3{moboZo`VaHK_B@jye{51MBg(nY`9@ zDS?eH(D;KTvofk)0t>?C^X5aXn|DUsN{X(s7{=}(a>K00WL`F7w-}0o^|rAyX6$Ul3l;^4^!wFbwW{3 ze1RG~Y+Js~={F|pxD#Ix3XFbV|k} zcxKZ08{3Q@e1h$;An_Ki6L%%dSDc$amCts1A`aMEQ2Ib~i}881E_vlMahAU|5+Rhd zDQe=*2b0NTLWg1aMsbZnLy~&eiC_qY%y z#C!)IeOf43Rb6%qAH5;DBcwFteI(jyYW~2>C@;{;i^;@q$i^N!*JhlI5^B!9LHTYr z&>_TpTi#StVsI?{tN^$T4tzPB@jQ?G2CcjR>;%ap=4j4GQxIAnkDI^zVCF%mhSgo{ zO7Bm*?5Y1imFHW!E7%aaQ}Qi#b*yf-6Wq{quy*gX)9_2QxbQ%YPnvR+u|8*9n%tWN zP!&(wUWo%LdrcZI`x^qKP{=;NF_zZNU*f&|FBsW#*LP&1N=}e^SPmf@56rYrPQ)3M z8JF;4dFr41szToGjYx)fQKxdz1*f!@;ZCA|vSnoa5ZGq?xcI8A8pkNB^k&*L#^ z5eIO?=HalqrjI~!_1Wu{>e>7gt_Ri5Qb#zAZ8g0@!COp30rzYqfuWt-0$#>A_q+);or1tT(_EE? zz;ri36wEJ(O1_z!jK3)|cZnHy$vJl^5@!Jwwggn) z5@^usuR_#!<07^L)7y@!z4TgDepbp^_}Z{pzS>4!4I*rd2G06|wK6l8c=OEHN4B|O-MQF|Iu!W5f_<;nacSoH)_RdRMfWgjs_j4Y|2iFN`u*b);JRVPNWr$W=!e zZZGLA{W%nk;=S|%L~~t?5^DCFuiC4m-hkpmi%5zlpk_~#U14h)W+g1qAI_TT# zyl^sR?l_D~6?;`!L%6VMj}TL|(uqSIxFKu;fGM*GZ4A%$j@scKd*Y;BY3SYzc~-Qq zB7eRsZR8dRbGDfo;c>hxPNFSlMzlNXq8xjo>6pha!_t8?zPLz5Rc z8^w^WuFf%d-%s<)Y=uK*mL5B~{y18Z528hZr8O6&7rFkltMkWBB>3N8THn?i@lAh` z=9q3ZFh?%Th-*WCvkgS3&LQ_CRI~^Gv7?$kVXZKX#B_sVapbB#fYlg9=*T*BB5{?6 z(*3>3E`lH5Yd8)G`{r+n4My)Fpd*8e?xvI$Lo2GLVyMX0|)IHof zzv;#F8DpF8`rD5$SNTlWGV*|fK`g98sg$}uaIUYPG#PSL8!1POo zBUIU1O;cD*p?al76gW>wk#-`Z;Qy^4pisu zl!z=bn~>(3>89{K{}y~t5-uV4*|f;8aM66)3^x=x#97+pHz#SY3CWor1F`sllV$OB zq4z_5cao|O#%U>51;S;kGU35im{aA(kID&t?7SpW?ky41<~=^mLnpSklj7IWr&D?3 zg!bvmC7gWmt}?{SmXa|t=Ic)ASfs(452g*b=1x40Bs>Jiri- zGfLb%%NO@I2)shg7treTNxgm`2eVENbI=C{1XjjAQZ(~Br$D}%xhLndL4JwA))E#s zs@zf*@@DbAkiZ%Nv6kcGvDj4c>OcGe{yNR{TkPV>HXLe~4np2MP6UWl_B?1>vo`7Y z=a+@C?>4CiutRSatzNf>FSn3Go}s+OZuR&SqJ76jS%R%3%SzFSV7HKWcas1Qs{kR_ zix6L&D0ggmHMaA_U9$VC`3={8{JoM)uPhnUyM;d*UDc>a2qwRBV~x>({>UkGiWNNYtu<15UdLGO<}B<`HFLY>ow&WcD4oSlWgF^yhf~4Y zU=-P4Oss&hhOoN>t_!wv>)7v4vQJsqc7lr{JO&izrHCcGTOVnM1t&bn9iZn6)ZYOJ z@r@~amPG%f+IL%vuAED=K^Q{@`xb3wJGwvgoJaq{VR>qqmGs4EIn0$f9u{8XR7yocqZN>=D0oV z#HLV^3Yb{zgri%KpGegEhYaHi+H@WBAa+21bt$?COK!ZN@))6QS;JKf9NK^G|jToAyNFCk!YCddMt zQzi4WOViKEJYMr!-%X@(0lp9W6c?A-W z!+U^HO3h~?h$YN~aX)~7l$zap0DyB9mSx{mHupwQiv2JN673wa`_2`4yr>EREUxZ> zl8$P&_Nq`+8&2^HfTtz@1A?cgDl|)a3nZkBTYw4d)UU~B#$=w%rp5twE)na4oq>0G zN$7RiW_M9cA=Se5GCv)nD7UrKCto}VJlNK2mRrKcdw{0K5fu@y0}1vO{^uS1M5nSh<44iQ$1wwK@;8Im$vAiKXIrsYqqvS98WnIg3-fhNQIxkF_Ee zc>(L9vIWxcvawTON5E4V{&tDRsm!v#b9uE>?}i9mz8CZ{AWAWra$1f`wv*cL)36AC zs{{N@5O4L%JlitujT%>c!dLm8@T6`3u=vOfG_G1y`|8LBN zaj_X}>L29o=nsy7=|6jUlry(8Rx)!i);IbWgdjoEc99=`^gGk)V8lL?IX@qc{5ZQ! z8sqTPmLITe!p97KXw`{c5BM*>^1|z3E(ChlW_v(D}q0SLZQen}9A=wqw zt}ASpKl@+BLPNqS5pl7G8cma-n~l78&%qpYa@i1Mvle5-$01AER;r#`_5ifmfXTAlPStg_)RcXeUlighDbo8Y&V{Z-aQy^$y{D1%DMZm6&CYUw$=!YD|*v# zMN_Rzo<=4c1nT6A$1+Do>0p~sT0K=f z7e5SHg(#}*Hta1Xj!X0l>R0u&ck{bp}4?jA|fSMG81+pT^ zH|0vnG#Nj1>w>(^H{ky~d*A*5SUfm}*HeEsUC+<=A8tN*XLBb3L#H1C)qib1=O~6> z1N_LsC!=X)(YONx$Zv3ZBmwvkgaMx&)b@iJ%SWO^h3akqa3m&FRHf)8ZnitQCr|)| zxrEa5L_@11zx27+Unox+ebr8o(auXOwAUkV7E%qa7ycb2tsqZ~gHAqxBI6pd##4fUIdK?H-~BOq~x^z%1ef{vj6&;Pt|DO&IO zIbxvn z9p_6xB*i4zF#_L#-=IkIdjrK#-yyoUhWSv@REOQQ)9}-MaeD>NJv*+u949-jrT2fH ze+Z4xQl;?%Js9SvR==!5){)nviYShyz)bCF1Mkt5?FEK^kUL6IkY$l2C~y5l{);4h zYK$tMqcIm5BN4B2Rcii?sF+MWXd4&%R!QsxaTRJ`88q~Di{Tt+Qw^4iEo#W8yA+Ns z=j!=~o>{60r<*wO4GAW7!r_acuPJ9Unf`;<_VgIET*Pg4NSdebHp6Aqn>ChOH6A%Q zcFB=N0();h6JeSo5t#*Xeuzpu4MN!1+X&n}H{o90xMWq%{#u2FKxZ7im}*Z|gVJML zcApJrF?J;(w9sZ|!vrwaW~+1IM3|g*YC=#Al(d%Uqd^hkPpV2%=4}y{K(9P(a(R!s z`%WC21Tzt|Cr4MtQj;9;=v#|)fi=-JyC~?kOY0D=KECgmQpJ6VA!x1Fy;SLa;g$Zt41)Hmn|kW z^9BNDm`?KoUwC6;KAX*_wPGq#&$^4A>y{J zr@YR~^S^7}uSwT1L| zF7zKZ<-yO#`k&RC|E9eEJ8Dh7|HtDPIjiZcre@iqAMR#_68*O0pm@(5LBH5ddbRGy z;#j<4;Y~FM1kT3~kA$=y4bGF^AJTT`sM~#f^?8&GAjCd|SA+sq5gUP6wITj0BabhA z2J%#j?^l340haw{4eG$weem5>+Z>9jqm5BmE3vbrIV3HVwMEN9tpdeN&I?p)a{O!z zM|HBX3q_JaahV3u_76emk(7-6={O0FQvWhqiSUp2bf~y$bGl8IT4xuP?g$b4WF$Y+ zaArpG%vj0Hpq+ZTregTqG~C1JoO>HR$gtnuLGL2GR428yaev3W1f-Dc-2FA43LG)> zL)uU*fe&!tqHA1hnhXzVJojMC=zc9g=NN!Q{RxJf4POPE&%f37f7ZH53+n5iy3X-K zS>XN;*V@e3%IaTSRS|tdCtHVq;RLgjuN9F@;YWLAA;LLg04R#@3Xy$TiG!Ca%7zsv zNYSI^^MRM;xkhj8vT$9`js+=f-@cvP7Sk~~FQvRqP2WVFJKm2V2+-{_q;j@RZF6U@ zE_r7YeZM{r=>RyW&C!RVL3sO8xu@!*Iv^VXe zwxA3*%QAYjAst>-de!~cq&J%bIs9uLjw1M-1ddl#8?@DHtgFSpH4Uc;BrA^6LmCZU zSZ9R{nb(>sfmXRdp}1$u|5Riy*gH&e)4JK z*|e~W2S=uH0U?pK|2oBjv76UUZ7SGx95jXE<%zohI+1}MV>zpy&}%PtpMOA7u7DZM zn}C~JTyBvm8B?*aHThW-F3R54wFvNEI+n<(i(Y>3p zc^^F_KD&X*%xuN44Szu=7wp^`VJHXdtr?1@MxOv@=A0SDR288St{}`2Y$6ht5J^M@ zIWRZM$%v8Qx5O~XmX<}HA;zz!c!z2yE~5q-Zke)* z4i@&5)|nIW68CM8f#O;=DqV8ddy;CLaU|dxd40mZV>YgyBY4RVMzL%#IFDku$k1^7 z{I_I$^OGRRbdRH~e-d%nPjB+Sc+I<6ThXaWOG%j<5dSMD{5N+!S$entW_OGlUQ0bGyJ|B8Mz+{uP+oakyA-Y4*2!!E<5p_ zWR@;g7J%D|y{=A;A61ey#kvY{N=HE+3Pd`=5R);W!B>E;oU9DnjR(b%!wdo01F1Yj z>ef%MWST@393=Abx;k1Bs1hmLvLIoWgbO#+8#Q;XN36WiFG3O1F;O-$1@kTl0K`UB z0@XDNxrB<#2N|x5zT=Oe-0W5o2m>C)H6`-Sdi?dh&t)7KWdvC>Pjx+~UIkVR2voX~ z(yf>aZ%M@x7T@&oLxDYZosdlu@~)VxbZ#W~iq;XmP~9gS4(kderY{)$+O>R(4X*8l zDmCllvpPMU3M)`^tG7cF;|$laEib@UK7U6=J20s7>bxRvb4jOMhq&ki)VXi*m zo6%x(1~t-CZ1q)XYv>0E)M%<7lKWl0k2C& zA8LCLwy)`(8LLmwA9@XD|Jzebde4)3#Eu3~Xmm=SBIJUB8fxfn0b1)i-cQ~R`0>ha!H%kxDXu zg&9Z1Qk7~_D*;u@LVpd#rSzHlTl>8s@yj~lwDA0+MSI74r12(Wskql-Bc^~&sm%#_ zzM1kEbA<~~tl)i)CS9hDP_;*Ki8a(#7AIxT7Gs8`PX}2{S*?Gp`~zkIf9~}!Y{-uZ z7V4GGP({6UtIC1Kt5sOkHf*;PMMJ3u1CC{w)P()n)JXroc{T&DL>SvBcgJ*@a4*ch)w&jqGU2r0o*ZimqZ+iuIiRDp&^k zfO+&gupc?)&`955IryL#c?x^kX{pQJ98@Mk{S?V3Mkl zI+H!oDyS@Pk`}$q3ermleBkCT!wM0-_Lv{->NcQI#{;l# zC8a)gS&vxQE=q~-Gv#^XLcWXnWSD{?mROB0KX+sggu6du&N$)B@o3(=EHo>f8;8)L z^BSuWci!rXXmG*K1TdoCQ@4jw$~hKoJ3f*rJhP7=H7>z?Ko+kAit&Fv*@cdHNS>K4 zi8)tE=5rKcqwX)#4qTP?gt}3>NZe1(Z@hA4Q_VoFo&Hb^8S1>*Wtaw_j^Pi;o`QE_ zSd#^K31h8NEds_pEcF;Nd7e_4Zh`rJr$3LKu|3o~(9yyYQQF?o*jatS+Oos}Nh zC74AGv8x?+tcixdgVql)huk11y`?}1vFA0an%8`fHBQ@``0Ggg9aR5_e9fI{?878$ zcg`PRz5=~Qx+F_n1K;$9d8Sqx@NOPKKiva?2BQdY$!x;Oy4cXzHrKEoGrdoU0CwxX zHWIFKme*WdCjAj}dZ@D6T;#8EPdj%UnKC7bT&_8VhEi%sj_3>dKN;blE0F@g;5*fy zlrHphRY3XwnGs|SEQ}4E{wpa|Cu#q~cn{e%Z`IbMAU}9kMF7!=dn9txk7nb~A76;j zW7$g6=W3E{**4*_jtKu2?C@EL%j+c<0F>;a z7=CTYF|x|d*iZ#zB*E)~b^9HPkQarjG5yMChF)63b_%&`W+>s>Nht2`66@W4on-Ku z4%omDt2Uev&`r2=mBsH<58T!m_gL4gK5NO!-G{1YE|=pQHTH%+IStH|_R`<-PzVZ1 zi^8L~n@9Szg1kZ%I4=vSWap5I?9x5c<1ZU>d>1~F5k1svlqT+7%B=&+N3eneDRI!l z_7LA8f=3s$1g#_dIf_9o`8R*YEZWVmwva0{ zcfyE5wi#69Ff~HrhFrfUYoaO=5Ql#4v^VtE;S{Tf-c4wA@Z^gHO`H7

ypdWY1^p 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 literal 0 HcmV?d00001 From 81d59a8ab0f29299af0b3e3e3607798e16529802 Mon Sep 17 00:00:00 2001 From: hafeyang Date: Tue, 25 Oct 2011 09:55:17 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0index.html?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tangramgrid/index.html | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/tangramgrid/index.html b/src/tangramgrid/index.html index cf85f21..f7ddb29 100644 --- a/src/tangramgrid/index.html +++ b/src/tangramgrid/index.html @@ -6,8 +6,41 @@

Tangram Grid

-

使用说明

-

Demos

+

使用说明文档

+

功能列表

+
+
基本功能
+
+
    +
  • 基本的表格数据展现,提供方法将json数据加载到grid中
  • +
  • 宽度自适应,设置表格宽度/高度 高度自适应高度,自动拉伸,可设置最小高度
  • +
  • ajax请求数据数据,分页,支持集成自定义分页控件,能适应不同的ajax请求数据
  • +
  • 表格单元格格式自定义,转换器,支持checkbox列
  • +
  • Ajax请求时支持遮罩,也可以自定义遮罩
  • +
  • 点击列头字段排序
  • +
  • 基本事件绑定,行选择,hover ,点击
  • +
  • 新增行/修改行/删除行
  • +
  • 列宽可以拖动
  • +
  • 列头分组
  • +
+
+
扩展功能(插件实现)
+
+
    +
  • 行可以通过拖放改变顺序
  • +
  • 列可以通过拖放改变顺序
  • +
  • 可编辑表格,支持常见的编辑类型,文本框,下拉框等,支持自定义编辑。
  • +
  • 子表格,点击某单元格出现一块区域显示子数据,可以是表格,也可以是自定义内容
  • +
  • 冻结列,列比较多的时候出现横向滚动条,可以冻结左边的n列,这些列不随横向滚动条滚动
  • +
  • 数据显示的分组,统计,以及扩展机制,主要是扩展统计方法,支持从ajax请求结果读取统计数据,也支持javascript做简单统计。
  • +
  • Treegrid,将表格的某个列显示成树形结构,并支持延迟加载
  • +
  • 大数据量解决方案,延迟呈现,或者延迟加载
  • +
  • 键盘事件支持,支持键盘事件,光标操作等
  • +
  • 页内排序
  • +
+
+
+

Demos(必须放在web server下才能加载ajax数据)

  • 基本
  • 列头分组
  • From 68e2e8d352a866f52b150a5ba415781e8a52f0ff Mon Sep 17 00:00:00 2001 From: hafeyang Date: Mon, 28 Nov 2011 12:49:34 +0800 Subject: [PATCH 3/3] 'what?' --- src/tangramgrid/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tangramgrid/index.html b/src/tangramgrid/index.html index f7ddb29..2097efa 100644 --- a/src/tangramgrid/index.html +++ b/src/tangramgrid/index.html @@ -5,6 +5,7 @@ Tangram Grid +

    Tangram Grid

    使用说明文档

    功能列表

k?&b;HYE%(WY)!s{ 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 WEP<60VwBvs^=MKZD&VSdy>a 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 Kj@)F%tAiH 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