## 应用程序池（apps）

应用程序池是一系列应用（APP）的集合，而APP是YLUI的主要管理对象。

```javascript
"apps": {
    "app1": {...},
    "app2": {...},
    "app3": {...},
    ...
}
```

其中，`app1`,`app2`,`app3`是APP的id。

> 可以说是很关键的 一章了。



### APP

每个APP需要一个永不重复的id（很重要），如果开发者想要自建APP，请确保有一个合理的id分配方案。

每个APP是用`json`格式描述的，其完整描述形式如下

```javascript
			{
                "addressBar": false,
                "autoRun": 0,
                "background": false,
                "badge": 0,
                "desc": '',
                "icon": {
                    "type": "fa",
                    "content": "wpforms",
                    "bg": 'green'
                },
                "openMode": "normal",
                "plugin": false,
                "position": {
                    "autoOffset": true,
                    "left": true,
                    "top": true,
                    "x": "x*0.05",
                    "y": "y*0.05"
                },
                "version":"1.0.0",
                "poweredBy": "",
                "resizable": true,
                "single": false,
                "size": {
                    "height": "y*0.8-80",
                    "width": "x*0.8"
                },
                "title": "",
                "url": "",
                "customTile": "",
                "urlRandomToken": true
            }
```

| 字段           | 类型   | 描述                                                       |
| -------------- | ------ | ---------------------------------------------------------- |
| addressBar     | bool   | 是否显示地址栏                                             |
| autoRun        | int    | 自启动。0表示不自启动，数字越大启动顺序越靠后。            |
| background     | bool   | 是否后置模式                                               |
| badge          | int    | 角标                                                       |
| desc           | string | 说明性文字                                                 |
| icon           | json   | 图标形式描述                                               |
| openMode       | string | 打开方式。normal,max,min,outer                             |
| plugin         | bool   | 是否是插件型窗口                                           |
| position       | json   | 窗口位置描述                                               |
| version        | string | 版本号                                                     |
| powerdBy       | string | 应用版权声明                                               |
| resizable      | bool   | 是否可变窗体尺寸                                           |
| single         | bool   | 是否单例模式（不能多开）                                   |
| size           | json   | 描述窗体大小                                               |
| title          | string | 标题，应用名                                               |
| url            | string | url地址，推荐使用绝对地址，并以`//`开头                    |
| customTile     | string | 自定义磁贴的url地址，留空则使用默认磁贴样式                |
| urlRandomToken | bool   | 是否为url自动添加随机token（减少浏览器读取页面缓存的概率） |

1. `title`和`url`字段是必须的

2. icon支持三种模式

   a. `"type":"fa"`使用font-awesome字体图标，`"content"`字段填写图标名（如`"star"`，表示星星图标）。fa图标库可于fa官网查看 http://www.fontawesome.com.cn。

   b.` "type":"img"`使用图片图标，`"content"`字段填写图标的url。

   c. `"type":"str"`使用文字图标，`"content"`字段填写文字 。在一时找不到合适图标的情况下，算是一种偷懒的办法了。

   `"bg"`字段填写图标背景色，符合css3规范即可，如`"red"`。

3. position 描述窗口位置

   * `autoOffset` bool，表示是否启用自动偏移。自动偏移会给窗口位置偏移`5px`左右，防止重复打开多个窗口的时候完全重叠在一起。
   * `left` bool，是否左对齐。false表示右对齐。
   * `top` bool，是否顶部对齐。false表示底部对齐。
   * `x` int/string，横向位移量，支持尺寸表达式，单位px。
   * `y` int/string，纵向位移量，支持尺寸表达式，单位px。

4. size描述窗口尺寸

   * `width` int/string，宽度，支持尺寸表达式，单位px。
   * `height` int/string，高度，支持尺寸表达式，单位px。

5. 尺寸表达式 

   一种很简单的表达式用来计算动态尺寸，可以使用简单的四则运算表达式，其中x代表屏幕宽度，y表示屏幕高度。

   以`"x*0.8"`为例，假如屏幕尺寸1000px，那么计算结果为800px。

   如果你希望一个宽200px，高100px应用打开后位于屏幕正中央，只需要在`position`中设置： `"x": "(x-200)/2"` `"y": "(y-100)/2"`

   > 为什么不设置类似"center","topLeft"这种预定义的位置描述呢？因为我认为给出一个表达式解析是最万能的解决方案。