### 使用

#### 安装@ali/weex-html5包

可以通过``tnpm``包的方式单独安装@ali/weex-html5包

````
tnpm install @ali/weex-html5
````

通过直接``require('@ali/weex-html5')``即可引入weex-html5模块

#### 通过index.html使用

通过上面``tnpm install``方式安装好包以后，可以看到包的根目录下面有index.html和index.js文件两个文件，其中index.html即为跑一个完整weex-html5示例的入口，注意在index.js中需要另外引入依赖@ali/weex-jsframework

* index.js: 引入``@ali/weex-html5``和``@ali/weex-jsframework``两个模块
* index.html: 项目入口文件，通过引入index.js文件加载运行weex框架

#### url参数：

* ``page`` 指定加载的js bundle的地址，如``page=demo/countdown-demo.js``
* ``loader`` 指定哪种类型的加载器，可选xhr, mtop, jsonp，默认xhr

运行demo目录下的countdown示例：

首先用`gulp transform`命令转换`.we`文件为`.js`bundle文件，然后在地址栏输入:

```
http://localhost/weex-html5/index.html?page=demo/countdown-demo.js&loader=xhr
```

### test

启动casperjs进行e2e测试

测试文件：``test/e2e/*.js``

```
tnpm install -g casperjs
casperjs test style.js
```

### 源码目录说明

#### 入口启动文件

* ``index.html`` weex-html5 demo测试的入口文件
* ``weex.js`` 引用了weex-html5和weex-jsframework两大模块

#### weex-html5源码

* ``api``目录 本地调用(callNative)协议api的实现
* ``bridge``目录
  * ``sender.js`` 对两个通过callJS协议调用framework的方法进行封装（回调和发送事件）
  * ``receiver.js`` 挂载callNative和nativeLog两个协议调用方法到global上供jsFramework调用，通过FrameUpdater帧处理队列里的nativeCall
* ``components``目录 native组件（container、text、image、list、slider、tabheader等组件）的web端实现文件
* ``weapp.js`` 初始化config，加载options.source指定的bundle代码（transform以后的），接着调createApp, 创建root div，放到#weex里，并调global.createInstance解析appCode
* ``protocol.js``
  * components组件的注册
  * api的注册（jsFramework通过callNative进行相应api调用）
* ``loader.js`` mtop/xhr/source三种加载源码文件的方式
* ``FrameUpdater.js`` 通过requestAnimationFrame每帧执行指定任务
* ``config.js`` 配置项，如rootId, bundleUrl, instanceId, weex版本号等

### 使用weex-toolkit查看Demo

建议直接使用weex-toolkit工具:

```
tnpm install -g @ali/weex-toolkit
```

接着运行全局命令``weex``即可自动打开浏览器查看你想要运行的``.we``文件

```
weex test.we
```

### Release Note

#### v0.2.7

* `scroller`/`list`组件作为根节点，仍然采用lib-scroll实现。如果不设置scroller本身的高度，weex-html5会自动为html, body添加高度100%，撑满整个页面.
* 发布目录和文件变更.

**NOTES:** 从v0.2.7版本开始，**发布目录**结构有所变化：

* 发布文件位于`build/`目录下，不再支持`dist/`
* `build/`目录下仅包含两个文件：
  * `weex.js`
  * `weex.min.js`

可以通过cdn方式引用：

* debug: `//g.alicdn.com/weex/weex-html5/{{version}}/weex.js`
* release: `//g.alicdn.com/weex/weex-html5/{{version}}/weex.min.js`

其中`{{version}}`替换为对应版本号，比如`0.2.19`的debug版本引用地址为：`//g.alicdn.com/weex/weex-html5/0.2.19/weex.js`

#### v0.2.12

* add downgrade options for scrollable root like scroller and list
* use plain css instead of sass
* add components refresh, loading, loading-indicator(spinner)
* 'switch' is not scalable now but stick to a initial size 100x60 (in 750-width viewport)
* fix error of flex in horizontal scroller
* fix position 'fixed' in scrollable components
* fix 'removeChild' for scroller
* add component 'web' to simulate a webview
* add component 'embed' to bring a child weex instance into a weex page
* fix size adapter for different device sizes
* add 'timer' api module and api method 'timer.setTimeout'
* add 'navigator' api module
* 'image' support attribute 'resize' and its values 'stetch', 'contain' and 'cover'
* add config item 'embed' for the initiation of embeded weex instance

#### v0.2.13

* 修复slider的图片懒加载
* slider的自动播放默认为false

#### v0.2.15

* 修复fixed元素的replaceholder机制导致insertBefore和remove出错的问题
* 修复image组件重复调用Component构造函数的问题

#### v0.2.17

* 更新jsframework版本到v0.13.10

#### v0.2.18

* add 'fetch' API to 'stream' module
* add logger
* support 'debug' flag in url. **Use 'debug=true' in your url to open debug mode**
* add promise polyfill
* add `vlist` and `hlist` component
* fix slider's default interval time

#### v0.2.22

* fix height of downgraded scrollable root.
* add warnings for scrollable root.
* fix moving elements inside the same parent.
* stop propagation by default and fix `<a>` component's behaviour.
* fix default border style of image.

#### v0.2.24

* fix `<list>`'s direction
* fix updating src of `<embed>`]

#### v0.2.25

* 恢复debug信息（仍需要在url里写明`debug=true`才能开启）

#### v0.2.26

* a标签自动添加spm (如果页面引用了aplus库)

**注：** v0.2.24版本开始，根节点为`scroller`或者`list`时需要注意，将#weex容器的高度设置为固定高度（比如`100%`，此时注意需要将html, body高度也设置为`100%`），如果不设置高度会导致`scroller`或`list`不能滚动。

#### v0.2.29

* 修复refresh抖动的问题
* 修复scrollable组件添加孙元素不自动重新计算高度的问题
* 控制jsfm的log输出（根据url的debug参数）
* 修复scrollable组件滑动回弹问题

#### v0.2.30

* 修复list组件的loadmoreoffset

#### v0.2.32

* appear事件在初始渲染时的正确触发
* 默认阻止事件冒泡
* jsfm升级到v0.14.7

#### v0.3.0

* 开源版本重构，缩减了部分文件体积，提升了组件可扩展性
* 添加 textarea 组件
* 添加 storage, clipboard, globalEvent 模块
* 修复部分 bug
* 根 scrollable 组件（list/scroller）可降级为 droot. 降级方法为以下两种之一：
  * 在初始化方法 `weex.init` 里加入 `downgrade: ['root']` 配置
  * 在 url 参数里加上 `downgrade_root=true`

#### v0.3.1

* 添加 share 模块
* 修复 toast 和 mtop 拉起登录的 bug

#### v0.3.2

* 修复 spinner
* 去掉 loadmore 的触发抑制标志位，只要在 loadmoreoffset 范围内滑动则一直触发 loadmore 事件。业务上需要注意对 loadmore 的事件处理做去重

#### v0.3.4

*  修复图片加载 bug
*  增加 geolocation api

### v0.3.5

* 增加 `slider-neighbor` 组件
* 支持 `dom.addRule` ，以提供使用 iconfont 的能力
* 修改首屏触发 `appear` 事件的时机
* 不再对 png 图片进行后缀处理
* 不再对 `g.alicdn.com` 域名的图片进行域名收敛
* 修复 mtop 模块返回 json 字符串的 bug，改为同一返回 object. 老的 api stream.sendMtop 则仍返回字符串不变
* 修复 `classList.add` 在低版本内核浏览器下仅接受一个参数而忽略其他参数，导致 scroller 样式不全（`.scroll-wrap` 的 overflow 没有生效，scroller 的内容溢出）的 bug

#### Weex HTML5与js-framework版本对照表

**注：从v0.2.7开始，不同版本封装了不同版本的js-framework，具体版本对照参考下表：**

| Weex HTML5 | js-framework |
| :--------: | :----------: |
| v0.2.7  | v0.13.5 |
| v0.2.8  | v0.13.6 |
| v0.2.9  | v0.13.7 |
| v0.2.10 | v0.13.8 |
| v0.2.12 | v0.13.9 |
| v0.2.13 | v0.13.9 |
| v0.2.15 | v0.13.9 |
| v0.2.17 | v0.13.10 |
| v0.2.18 | v0.13.10 |
| v0.2.22 | v0.13.10 |
| v0.2.24 | v0.13.10 |
| v0.2.25 | v0.13.10 |
| v0.2.26 | v0.13.10 |
| v0.2.28 | v0.13.10 |
| v0.2.29 | v0.13.10 |
| v0.2.30 | v0.13.10 |
| v0.2.32 | v0.14.7 |
| v0.3.0 - v0.3.5 | v0.15.2 |
