From bf7b27bd9c2944fcba3a712a2f1693f71628edf7 Mon Sep 17 00:00:00 2001 From: chenyulin Date: Fri, 25 May 2018 12:54:09 +0800 Subject: [PATCH 1/5] Add my project --- projects/lottery/chenyulin/.gitignore | 3 + projects/lottery/chenyulin/.prettierignore | 1 + projects/lottery/chenyulin/.prettierrc | 25 ++ projects/lottery/chenyulin/LICENSE | 21 ++ projects/lottery/chenyulin/README.md | 200 ++++++++++++ .../lottery/chenyulin/client/assets/.gitkeep | 0 .../lottery/chenyulin/client/assets/2.png | Bin 0 -> 70860 bytes .../lottery/chenyulin/client/assets/3.png | Bin 0 -> 205752 bytes .../chenyulin/client/assets/global.styl | 74 +++++ .../chenyulin/client/assets/group-2@3x.png | Bin 0 -> 566391 bytes .../chenyulin/client/assets/helper.styl | 50 +++ .../lottery/chenyulin/client/assets/lark.png | Bin 0 -> 116731 bytes .../chenyulin/client/assets/reset.styl | 195 ++++++++++++ .../chenyulin/client/layouts/default.vue | 52 +++ .../lottery/chenyulin/client/pages/detail.vue | 47 +++ .../lottery/chenyulin/client/pages/index.vue | 299 ++++++++++++++++++ projects/lottery/chenyulin/config/.gitkeep | 0 .../lottery/chenyulin/config/nuxt.config.js | 3 + .../lottery/chenyulin/config/polyfills.js | 1 + .../chenyulin/config/postcss.config.js | 23 ++ .../lottery/chenyulin/config/proxy.config.js | 16 + projects/lottery/chenyulin/fe.json | 5 + projects/lottery/chenyulin/index.js | 16 + projects/lottery/chenyulin/package-lock.json | 135 ++++++++ projects/lottery/chenyulin/package.json | 21 ++ projects/lottery/chenyulin/public/.gitkeep | 0 projects/lottery/chenyulin/public/lark.png | Bin 0 -> 116731 bytes .../server/modules/lottery/config.json | 15 + .../server/modules/lottery/default.js | 0 .../chenyulin/server/modules/lottery/index.js | 28 ++ .../chenyulin/server/modules/user/index.js | 7 + projects/lottery/chenyulin/yarn.lock | 89 ++++++ 32 files changed, 1326 insertions(+) create mode 100644 projects/lottery/chenyulin/.gitignore create mode 100644 projects/lottery/chenyulin/.prettierignore create mode 100644 projects/lottery/chenyulin/.prettierrc create mode 100644 projects/lottery/chenyulin/LICENSE create mode 100644 projects/lottery/chenyulin/README.md create mode 100644 projects/lottery/chenyulin/client/assets/.gitkeep create mode 100644 projects/lottery/chenyulin/client/assets/2.png create mode 100644 projects/lottery/chenyulin/client/assets/3.png create mode 100644 projects/lottery/chenyulin/client/assets/global.styl create mode 100644 projects/lottery/chenyulin/client/assets/group-2@3x.png create mode 100644 projects/lottery/chenyulin/client/assets/helper.styl create mode 100644 projects/lottery/chenyulin/client/assets/lark.png create mode 100644 projects/lottery/chenyulin/client/assets/reset.styl create mode 100644 projects/lottery/chenyulin/client/layouts/default.vue create mode 100644 projects/lottery/chenyulin/client/pages/detail.vue create mode 100644 projects/lottery/chenyulin/client/pages/index.vue create mode 100644 projects/lottery/chenyulin/config/.gitkeep create mode 100644 projects/lottery/chenyulin/config/nuxt.config.js create mode 100644 projects/lottery/chenyulin/config/polyfills.js create mode 100644 projects/lottery/chenyulin/config/postcss.config.js create mode 100644 projects/lottery/chenyulin/config/proxy.config.js create mode 100644 projects/lottery/chenyulin/fe.json create mode 100644 projects/lottery/chenyulin/index.js create mode 100644 projects/lottery/chenyulin/package-lock.json create mode 100644 projects/lottery/chenyulin/package.json create mode 100644 projects/lottery/chenyulin/public/.gitkeep create mode 100644 projects/lottery/chenyulin/public/lark.png create mode 100644 projects/lottery/chenyulin/server/modules/lottery/config.json create mode 100644 projects/lottery/chenyulin/server/modules/lottery/default.js create mode 100644 projects/lottery/chenyulin/server/modules/lottery/index.js create mode 100644 projects/lottery/chenyulin/server/modules/user/index.js create mode 100644 projects/lottery/chenyulin/yarn.lock diff --git a/projects/lottery/chenyulin/.gitignore b/projects/lottery/chenyulin/.gitignore new file mode 100644 index 0000000..5f99b9b --- /dev/null +++ b/projects/lottery/chenyulin/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +node_modules/ +build/ diff --git a/projects/lottery/chenyulin/.prettierignore b/projects/lottery/chenyulin/.prettierignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/projects/lottery/chenyulin/.prettierignore @@ -0,0 +1 @@ +node_modules/ diff --git a/projects/lottery/chenyulin/.prettierrc b/projects/lottery/chenyulin/.prettierrc new file mode 100644 index 0000000..a822f83 --- /dev/null +++ b/projects/lottery/chenyulin/.prettierrc @@ -0,0 +1,25 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": false, + "parser": "babylon", + "singleQuote": true, + "trailingComma": "none", + "bracketSpacing": true, + "jsxBracketSameLine": false, + "overrides": [ + { + "files": ".prettierrc", + "options": { "parser": "json", "trailingComma": "none" } + }, + { + "files": ".babelrc", + "options": { "parser": "json", "trailingComma": "none" } + }, + { + "files": "*.json", + "options": { "trailingComma": "none" } + } + ] +} diff --git a/projects/lottery/chenyulin/LICENSE b/projects/lottery/chenyulin/LICENSE new file mode 100644 index 0000000..e0c64ad --- /dev/null +++ b/projects/lottery/chenyulin/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 fe-boilerplate + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/projects/lottery/chenyulin/README.md b/projects/lottery/chenyulin/README.md new file mode 100644 index 0000000..489b848 --- /dev/null +++ b/projects/lottery/chenyulin/README.md @@ -0,0 +1,200 @@ +# lottery + +A basic FE project. + +> psm: xx.xx.xx + +### 0.0 线上入口 + +- http://??? + +### 0.1 相关人员 + +负责人 + +| 角色 | 人员 | +| -------- | ----------- | +| 产品经理 | xxx,yyy | +| 前端开发 | xxx | +| 后台开发 | xxx,yyy,zzz | +| 交互设计 | xxx,yyy | + +### 0.2 需求 & 设计图 + +* [需求文档](xxx) +* [设计图](xxx) + +---- + +## 1. 如何运行 + +### 1.0 安装依赖 + +```sh + +# 安装 node +$ brew install node + +# 安装 fe +$ npm i fe -g + +# 安装 yarn (可选) +$ npm i yarn -g +``` + +> node 版本 [8.0+] + +严格使用 [prettier](https://prettier.io/), 请基于自己的编辑器配置 [Editor Support](https://prettier.io/docs/en/editors.html) + +### 1.1 开发环境配置 + +#### 1.1.1 项目配置 + +`fe.json` + +示例: + +```json +{ + "CLIENT_DIR": "client", + "ENTRY_FILE": "index.js", + "CLIENT_MODE": "vue" +} +``` + +参考完整配置: https://code.byted.org/fe/fe/blob/master/config/fe.json + +#### 1.1.2 生产环境配置 + +所有生产环境变量请在 `.env` 中配置 + +```yaml +## .env + +# production | development +NODE_ENV=production +SERVER_PORT=4000 +SERVER_IP=127.0.0.1 +CORS_ORIGIN=* +CORS_METHODS=GET,HEAD,PUT,PATCH,POST,DELETE +``` + +### 1.2 开发过程 + +工作流 + +`fe dev` > `fe build` > `fe start` + +升级依赖 + +```sh +# 查看更新版本 +$ yarn outdated +# 安全升级 +$ yarn update +# 升级到 latest +$ yarn upgrade --latest +``` + +#### 1.2.1 命令 + +```sh +$ cd lottery + +# 开发 +$ fe dev + +# 编译 +$ fe build + +# 在生产环境启动(自动编译) +$ fe start +``` + +#### 1.2.2 代理配置 + +`config/proxy.config.js` + +```js +// Proxies for devServer +// usage @see http-proxy-middleware +module.exports = (config, runtime) => { + const dev = process.env.NODE_ENV !== 'production' + + // Only in dev mode + // For production use `app.use(proxy)` in business modules + dev && + Object.assign(config, { + '/__api': { + target: 'http://localhost:3000', + pathRewrite: { '^/__api': '/api' } + } + }) + return config +} +``` + +#### 1.2.3 自定义 postcss + +`config/postcss.config.js` + +```js +module.exports = (config, runtime) => { + config.plugins = config.plugins.concat([ + // require('postcss-write-svg')({ + // utf8: false + // }), + require('postcss-px-to-viewport')({ + viewportWidth: 750, + viewportHeight: 1334, + unitPrecision: 3, + viewportUnit: 'vw', + selectorBlackList: ['.nvw', '.hairlines'], + minPixelValue: 1, + mediaQuery: false + }), + require('postcss-viewport-units')() + // require('cssnano')({ + // preset: 'advanced', + // autoprefixer: false, + // 'postcss-zindex': false + // }) + ]) + return config +} +``` + +> 注意: 使用的插件请安装并保存到 `package.json` + +#### 1.2.4 自定义 polyfills + +`config/polyfills.js` + +默认已集成: + +- Promise +- fetch +- Object.assign +- vh|vw|vmin|vmax + +#### 1.2.5 自定义 nuxt + +`config/nuxt.config.js` + +示例: + +```js +module.exports = (config, runtime) => { + return config +} +``` + +参考完整配置: https://code.byted.org/fe/fe/blob/master/config/plugins/nuxt.config.js + +### 1.3 发布 + +> TODO + +### 1.4 错误告警及监控 + +> TODO diff --git a/projects/lottery/chenyulin/client/assets/.gitkeep b/projects/lottery/chenyulin/client/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/projects/lottery/chenyulin/client/assets/2.png b/projects/lottery/chenyulin/client/assets/2.png new file mode 100644 index 0000000000000000000000000000000000000000..4552841c03b31ab7a39687a7b5a26f37ebf5b2f8 GIT binary patch literal 70860 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 -
+
{{result}}
@@ -69,56 +69,51 @@ export default { let angle = 360 / this.gifts.length return `rotate(${360 / (2 * this.gifts.length) - 90 + angle * index}deg)` }, - async chou() { + async lucky() { let myPanel = document.getElementsByClassName('lottery-box')[0] let myMain = document.querySelector('.main') myMain.style.height = document.querySelector('body').height this.illumination = 'illumination2' myPanel.style.transition = 'none' myPanel.style.transform = 'rotate(0)' - await axios - .get('api/lottery/lottery') - .then(response => { - let n = parseInt(response.data.result) - let myResult = '' - this.result = '结果马上出来~' - let deg = 0 //实际要转的角度 - window.setTimeout(() => { - this.illumination = 'illumination1' - }, 7000) - switch (n) { - case 0: //给指针定到转多少度时是安慰奖 - deg += [0, 144, 252][Math.floor(Math.random() * 3)] + 72 - myResult = '😄谢谢参与,也许好运就在下次哦😄' - break - case 1: //给指针定到转多少度时是一等奖(100元话费) - deg = 180 + 72 - myResult = '😊牛逼了!恭喜获得:100元话费😊' - break - case 2: //给指针定到转多少度时是二等奖(1元现金) - deg = 36 * 11 + 72 - myResult = '🌹恭喜获得:1元现金🌹' - break - case 3: //给指针定到转多少度时是三等奖(10元话费) - deg = -36 * 2 + 72 - myResult = '✨恭喜获得:10元话费✨' - break - case 4: - deg = -36 + 72 - myResult = '✨哎呦不错哦,恭喜获得:50积分✨' - break - } - window.setTimeout(() => { - this.result = myResult - }, 5000) - //使指针最后不指在中间 - this.deg = deg + 1080 - 360 + (Math.random() - 0.5) * 32 - myPanel.style.transition = '5s ease' - myPanel.style.transform = 'rotate(' + this.deg + 'deg)' - }) - .catch(function(error) { - console.log(error) - }) + const response = await this.$axios.$get('api/lottery/lottery') + console.log(response) + let n = parseInt(response.result) + let myResult = '' + this.result = '结果马上出来~' + let deg = 0 //实际要转的角度 + window.setTimeout(() => { + this.illumination = 'illumination1' + }, 7000) + switch (n) { + case 0: //给指针定到转多少度时是安慰奖 + deg += [0, 144, 252][Math.floor(Math.random() * 3)] + 72 + myResult = '😄谢谢参与,也许好运就在下次哦😄' + break + case 1: //给指针定到转多少度时是一等奖(100元话费) + deg = 180 + 72 + myResult = '😊牛逼了!恭喜获得:100元话费😊' + break + case 2: //给指针定到转多少度时是二等奖(1元现金) + deg = 36 * 11 + 72 + myResult = '🌹恭喜获得:1元现金🌹' + break + case 3: //给指针定到转多少度时是三等奖(10元话费) + deg = -36 * 2 + 72 + myResult = '✨恭喜获得:10元话费✨' + break + case 4: + deg = -36 + 72 + myResult = '✨哎呦不错哦,恭喜获得:50积分✨' + break + } + window.setTimeout(() => { + this.result = myResult + }, 5000) + //使指针最后不指在中间 + this.deg = deg + 1080 - 360 + (Math.random() - 0.5) * 32 + myPanel.style.transition = '5s ease' + myPanel.style.transform = 'rotate(' + this.deg + 'deg)' } }, async asyncData({ req, app }) { From 8d8189cb61949a616e09ebb95a80f18d4ae76371 Mon Sep 17 00:00:00 2001 From: chenyulin Date: Fri, 25 May 2018 16:51:45 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=E7=BC=BA=E9=99=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- projects/lottery/chenyulin/client/pages/index.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/projects/lottery/chenyulin/client/pages/index.vue b/projects/lottery/chenyulin/client/pages/index.vue index 2134d67..1ba662e 100644 --- a/projects/lottery/chenyulin/client/pages/index.vue +++ b/projects/lottery/chenyulin/client/pages/index.vue @@ -133,7 +133,6 @@ body, #__nuxt, #__layout { width: 100%; - height: 100%; } @@ -189,7 +188,7 @@ body, position: relative; overflow: hidden; width: auto; - height: 100%; + min-height : 1332px; background-color: rgb(215, 73, 73); background: radial-gradient(white, red); .title From 05929a4eb66439b5549f337ec3713b4881436e16 Mon Sep 17 00:00:00 2001 From: chenyulin Date: Fri, 22 Jun 2018 19:16:28 +0800 Subject: [PATCH 4/5] infiniteload first commit --- .../chenyulin/.vscode/launch.json | 14 + projects/infiniteLoad/chenyulin/README.md | 5 + projects/infiniteLoad/chenyulin/config.json | 20 ++ projects/infiniteLoad/chenyulin/infinite.js | 29 ++ .../infiniteLoad/chenyulin/package-lock.json | 329 ++++++++++++++++++ projects/infiniteLoad/chenyulin/package.json | 16 + .../infiniteLoad/chenyulin/www/assets/2.png | Bin 0 -> 7203 bytes .../infiniteLoad/chenyulin/www/assets/3.png | Bin 0 -> 21096 bytes .../chenyulin/www/css/infinite.css | 29 ++ .../infiniteLoad/chenyulin/www/infinite.html | 193 ++++++++++ 10 files changed, 635 insertions(+) create mode 100644 projects/infiniteLoad/chenyulin/.vscode/launch.json create mode 100644 projects/infiniteLoad/chenyulin/README.md create mode 100644 projects/infiniteLoad/chenyulin/config.json create mode 100644 projects/infiniteLoad/chenyulin/infinite.js create mode 100644 projects/infiniteLoad/chenyulin/package-lock.json create mode 100644 projects/infiniteLoad/chenyulin/package.json create mode 100644 projects/infiniteLoad/chenyulin/www/assets/2.png create mode 100644 projects/infiniteLoad/chenyulin/www/assets/3.png create mode 100644 projects/infiniteLoad/chenyulin/www/css/infinite.css create mode 100644 projects/infiniteLoad/chenyulin/www/infinite.html diff --git a/projects/infiniteLoad/chenyulin/.vscode/launch.json b/projects/infiniteLoad/chenyulin/.vscode/launch.json new file mode 100644 index 0000000..00742d3 --- /dev/null +++ b/projects/infiniteLoad/chenyulin/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "启动程序", + "program": "${file}" + } + ] +} \ No newline at end of file diff --git a/projects/infiniteLoad/chenyulin/README.md b/projects/infiniteLoad/chenyulin/README.md new file mode 100644 index 0000000..79dba0e --- /dev/null +++ b/projects/infiniteLoad/chenyulin/README.md @@ -0,0 +1,5 @@ +# 无限加载组件 +* 前端模板为template.js,在html的script标签里面,可以在这里定制专属内容 +* 基础样式部分写在css/infinite.css文件里,可以在这里定制样式 +* config.json为传入前端的展示数据 + diff --git a/projects/infiniteLoad/chenyulin/config.json b/projects/infiniteLoad/chenyulin/config.json new file mode 100644 index 0000000..a2dc423 --- /dev/null +++ b/projects/infiniteLoad/chenyulin/config.json @@ -0,0 +1,20 @@ +{ + "data": [ + { + "id": "hhh1", + "index": 0, + "title": "我是标题,要短", + "desc": "我是描述,我很长。", + "pic": "./assets/3.png", + "date": "" + }, + { + "id": "hhh2", + "index": 0, + "title": "我是标题,要短", + "desc": "我是描述,我很长。", + "pic": "./assets/2.png", + "date": "" + } + ] +} \ No newline at end of file diff --git a/projects/infiniteLoad/chenyulin/infinite.js b/projects/infiniteLoad/chenyulin/infinite.js new file mode 100644 index 0000000..7bae8a1 --- /dev/null +++ b/projects/infiniteLoad/chenyulin/infinite.js @@ -0,0 +1,29 @@ +const serve = require('koa-static') +const Koa = require('koa') +const app = new Koa() +const myjson = require('./config.json') + +function rnd(n, m) { + return Math.floor(Math.random() * (m - n) + n) +} + +app.use(function* (next) { + if (this.req.url == '/load') { + this.body = myjson + } else { + yield next + } +}) + +// $ GET /package.json +app.use(serve('.')) + +// // $ GET /1.html +// app.use(serve('www')) + +// or use absolute paths +app.use(serve(__dirname + '/www')) + +app.listen(3000) + +console.log('listening on port 3000') diff --git a/projects/infiniteLoad/chenyulin/package-lock.json b/projects/infiniteLoad/chenyulin/package-lock.json new file mode 100644 index 0000000..a3230e5 --- /dev/null +++ b/projects/infiniteLoad/chenyulin/package-lock.json @@ -0,0 +1,329 @@ +{ + "name": "endless-loading", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookies": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.1.tgz", + "integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=", + "requires": { + "depd": "1.1.2", + "keygrip": "1.0.2" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "error-inject": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", + "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "http-assert": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.3.0.tgz", + "integrity": "sha1-oxpc+IyHPsu1eWkH1NbxMujAHko=", + "requires": { + "deep-equal": "1.0.1", + "http-errors": "1.6.3" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "is-generator-function": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", + "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==" + }, + "keygrip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.2.tgz", + "integrity": "sha1-rTKXxVcGneqLz+ek+kkbdcXd65E=" + }, + "koa": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.5.1.tgz", + "integrity": "sha512-cchwbMeG2dv3E2xTAmheDAuvR53tPgJZN/Hf1h7bTzJLSPcFZp8/t5+bNKJ6GaQZoydhZQ+1GNruhKdj3lIrug==", + "requires": { + "accepts": "1.3.5", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookies": "0.7.1", + "debug": "3.1.0", + "delegates": "1.0.0", + "depd": "1.1.2", + "destroy": "1.0.4", + "error-inject": "1.0.0", + "escape-html": "1.0.3", + "fresh": "0.5.2", + "http-assert": "1.3.0", + "http-errors": "1.6.3", + "is-generator-function": "1.0.7", + "koa-compose": "4.1.0", + "koa-convert": "1.2.0", + "koa-is-json": "1.0.0", + "mime-types": "2.1.18", + "on-finished": "2.3.0", + "only": "0.0.2", + "parseurl": "1.3.2", + "statuses": "1.5.0", + "type-is": "1.6.16", + "vary": "1.1.2" + } + }, + "koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + }, + "koa-convert": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", + "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "requires": { + "co": "4.6.0", + "koa-compose": "3.2.1" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "1.3.0" + } + } + } + }, + "koa-is-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" + }, + "koa-send": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.0.tgz", + "integrity": "sha512-90ZotV7t0p3uN9sRwW2D484rAaKIsD8tAVtypw/aBU+ryfV+fR2xrcAwhI8Wl6WRkojLUs/cB9SBSCuIb+IanQ==", + "requires": { + "debug": "3.1.0", + "http-errors": "1.6.3", + "mz": "2.7.0", + "resolve-path": "1.4.0" + } + }, + "koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", + "requires": { + "debug": "3.1.0", + "koa-send": "5.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "1.3.0", + "object-assign": "4.1.1", + "thenify-all": "1.6.0" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "requires": { + "http-errors": "1.6.3", + "path-is-absolute": "1.0.1" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "template_js": { + "version": "0.7.1-1", + "resolved": "https://registry.npmjs.org/template_js/-/template_js-0.7.1-1.tgz", + "integrity": "sha512-ayCxgG3RH8rvnpmTJgvq0O3s07pE99NzxUTtqq964CTTWyYyxuEDeJdwtyHNmpvxKpdOvz/jkGfxCSLQbhe3Yw==" + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "1.3.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": "3.3.0" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + } + } +} diff --git a/projects/infiniteLoad/chenyulin/package.json b/projects/infiniteLoad/chenyulin/package.json new file mode 100644 index 0000000..df65ac6 --- /dev/null +++ b/projects/infiniteLoad/chenyulin/package.json @@ -0,0 +1,16 @@ +{ + "name": "endless-loading", + "version": "1.0.0", + "description": "", + "main": "1.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "koa": "^2.5.1", + "koa-static": "^5.0.0", + "template_js": "^0.7.1-1" + } +} diff --git a/projects/infiniteLoad/chenyulin/www/assets/2.png b/projects/infiniteLoad/chenyulin/www/assets/2.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ccfe246d46c2ce92334b555e1a22bb5056270d GIT binary patch literal 7203 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 literal 0 HcmV?d00001 diff --git a/projects/infiniteLoad/chenyulin/www/assets/3.png b/projects/infiniteLoad/chenyulin/www/assets/3.png new file mode 100644 index 0000000000000000000000000000000000000000..81f1a22b4caba4a6df79de461ced5d212a1ad045 GIT binary patch literal 21096 zcmbTdbx>Ph6z>~~OL5mytVN4E6ewOw@uDei1&Rj?R-m{;kwPiOCB=&rcX#(7#S=6@ z2sgib@7z1{{(A52oRi5+&e^lRd+)Q?TA!>uELp${TFT)h9T`2W@(I{{>PfI+|@CdPBX6EX};GK|Mw01E(sfsMBIKZE~w!+3&; zg^hzYiGUD&K?5n;d`!$IXk)Rlu+Ucrp}z-Ukztdw3M$}G=vd-Dcc&BzO)kJ=Q>^Kt z(w%~_3tM@F;S*5P(9+R!aB{tP$t@x(CN3cqp(CCA)iM5TboxOvj zlc$%rk1xp2Km1EXWYpK_n3UAC^o-1JS=m1ee-#y%l$Mp(*3~yOHvMUC>F(+6>mL{# z8lIk+ots}+Tw31RhVJa{?f*MCgr8qrUR~cHZtwong#p0)U$Xv>vj2xJGPJHI=sCc` z{ZALh6JPX+Nrr{ZDu_d_po44aPVrnQ6pvCdxuB*CpG{a7MrGwOML^9ivc&=aPul-f z_Ww>;*#9qO|3}#W)wK*D!o)yN9wr$;9`F!H$3()J$)4gFey68I(ONLzWR@3R1}U>2 zQBEWRb@lOYe@LC6?Bn8^BvVmTri*(E@D@FrV&`-t4Pi@ouG{l#{nDoQcmm_#I#=wZ%;AN?vUe~=S=`eP|l*Zprz#nK_rD~&i-^B_ps$o5mM3$SjYS);L;M*ki z_7SqV>MHarT;7zoWE2pmmQ48ix<4%{Di^8K68@4v`Ce06a7!Pc&h-N_ASn9Xv3bN4 zxpZ&G953}=|Db~7oWa}k>G%4&G4{_&1T-n?wA?B`Y-+ed09Yyh1aKDmM?jZCAmP@^ zLbzrI6e##x$(zp9l<3~glY3qJpc4sl)Cgw~Uqig>JmGY~{5WMm z&QB7RSH1MFOYZw#-;_TB>V11FAQ8cY0u7pYCYpQC@i-RQHN`%9N|)Ua$Ivxyo_?%A z8o*Ba|N43R$+l{jeHcCE`V%(2xN*2ZguKnvO?TM#J-V>{x)1ut!#Cn&XYrtJA~ZrflR@BqScda~axT>7jHA@n16p+-{_$=Ij|I9Pg zyy$!1eCjr#thMH>C?AdKOjA&*?u@I&{P~KHIQQT$^0?P)46gClA%~q-9WrMkCvuu% zQYoO3w~5bkVk@%pI0je~=2O_ax`>7W5^PwQKx5QU2aT)TGlZNLoBk||!Mq49l-@s6d>cgCBK8f8--)#sD3J?tW0OTd$BxB((52(MFG5Yd|f8vtidb+Lxc z53KY-v$euQWe1-K6i>%SGzkk8_t}$JJ$yA@-zAW5OMS}<(j!0PPwdDngXP+H&%!3} z_K3w2mo-bW`2!sg6t=Kbs7qq3*CP2skHxE5@(qJHj9o{m+>%d51b@kS%JAYlH_c>R z!t9eXXHL=_=ezKUjAn|R|H6a6)IS245I~(NZ)e-q8Bu5Z`j#&#?KZBhAD&3+g?G_D z+l(W98rWPK=roIBILt(mE$n0*S-^TY8v1r(C=Wl^?yX;944hfheUvaZ)MxSdiv;uF zr_PkcW$)_xy7iYP>3#z4TTfu}wnUEDSY2LVp3rxR zqK3;0IaTp)z5c!~eit!0Yq*W#ydRY++X|(TIvm(J^Uv2q)x&@zF5P{yj7gd5!Mzj3 zZToq+;9Z@Qv%3G4e6DA1ELl|Fa87(HOR4)6v?SQy9aoYau7!GrzvENlM%Q&@!TvMY zNKBGshVt|aysNn1GyT+YzhJ^Y>&-H+z7nhcd*j7TfN<&o5F53~(m1-oQVnTi+8on` zsv`W{Bpc@gRh=ah+{k|J+D6VzMkWlsQyQh{iSB6swc#3|S| zYK+k)J-GX{f6vlwn1HEdN%tPR4_Onz$M!S>mNfOeEomH#8GT_=8~4w0cL)#Zd4V!m zyK|Wz*nm}QDi71f>F%YqJ?p^ z;o23UO(D)FySSONJYw^hD>4F`LDJpX&ZZ`vzuw9RvF8hqq2QO-2WE-KS1{B@*E(h0 zOCrP1-@f<<#l2Rgsw8+4pPWGX5u6 z0F`wHs5T;c9}L4POpWCuP$A%cgX4<{klta@w$)Bv1jWr8oHlgD{#d@c|B)h3b&pHy!i{8t8T8Ca4&XT z0BfwQm~o~0db6K2(q1#B@vF(iRd3?qK6B=-D{tOg(bV$3WlGM~ZBZ44t9C)45F87~ z8X0#jLBr?`X{9nOdnR1kG0=7TJ*Tr?l7K+{z5bAlYZ~e`#@)h~*4By#^6(wZlNi#$9LTp_#&Pa- zZ(2}t`0IQ5r)rIXm)1+x!Q9r501L#Kg(-}s-vg-aeQirZyvkZ7F)+b zEb4M|K0SmR-l}*GQ0_j9o7H3`jDx>Znq>UAa7-Tkpr1YoTQOzh672&|%QJaB0+t|~ zM$v)pWpDUDPP+JZeFA>`+wAk9>f|PvBultIB9VZ$W|RIzN*ohlG#*^98a{ENbZ>>g z+?tzppV*v;GPK?%iTUB4*8V4Xw|?q)rA7tRfd5OcOO29LDF)i-c`r^MOflsLgp7FB z;o`N#=5LvFD2;;&K%}VQ4$P~GWtst4NsJuFQBuQrGWO)FRBx~Wn*lE8Oa2|uT!OHh z6ZtbL-S->P2mXQcuO>KlSF`gDmW z#eX(v15I0C!J$aaGK&$}QJkeS{;yUx?zH>{xLOkt7T-fkmm;SI)ttfq}2Z@ItSxdM^`M+JxI z9LfMp0%9NH#dqI6(J*YA<)>3p$s`Y%c_sUfm`wpG*c;y9Az#meq|`J)*q5&$0(vrf zdM(5kPM-Gty_e6)olu8rxLSBr6B5CQ@+8l z`Oz*)HiY$`KkRPlOMgF!;iQ8O*)kBR@H(xB zjC$i!*E4<@O=!H&n*_f?GjpdVevQ5-FS-abUs67URcbQUHT!fxPc*l7J|DGoBY#x1u$7DC-%cIo^{KL#G!m1D}~#+kI-!q|Jr8isvYaEC6{gQ<*Z zKd@FHnsYvop*qmK^-pa_^V+r@tSk+C`qLJxOT-;fIPV4dHrcsKqesP=Pp?kkGepWp zy;0u;sncOiQzR1G`ys33NwedXc&yh&%~cFO`73FLXz38=X?a(|cxNc^M0T5mz`^6o z0{9uIodoYdS3QIJw@D9?kR%f{LBUrVV`cQJ@;mNp*jX0|5#r}l@-bd7J^_ol6uf~A zudq|o4@-$~wW*bX=0x7!yy9lKsMUc~xfqa$e96W4$VFBQR+IYKXnts9q88OkhWvy$ zDM7xNap9T;Pn9{fe3?ABGt9xqfxiEf-21sZ>lwf-G&KZA`?dQ?2Nu$uGt`M4PW`K; zy`y}Bh=!t%pf|2FaGdmWa@eB5P6%K~QuI8yXCtg7F#-G>!L?lyUHEONLaV|_jya?i zZ?mpZzgD=`S6ItuTgbD4SLx*g9HI+1iaB)={Y&wBs!G10&3LzjP(w=%diTCC8hXJ&;34UF1 znzJVZeA_IzkYo70FKD9staPLdxaznpzI?{?jbm)bheudOr%pVT%+Y3rRKmU6+3@0%<_(TzL!?{E;x99I=48{skEIf7}D(Kh6Chjth}$Q}}AP``eC zeD?jdq#J^>BkB|CIe5JG!2fGfV>rZ#pq03P*>&Gm*F8y0$m^2oQgoxcO1cO9biSZI zeyya*?x`SgS2_b0BN20e(O57{wL@;A3oJeDns79R+v`hjJ2Z4#6v<%Y^9Tr)utUEY zEr};p_5CUZ5&vQdjOqF6Bmph=kY&nWPn8)o%ynTnK&ci5cfCZai6$-?)Hj;ff`GkJ zd3ohS;ioiELR}a;uiX|XOkM<-oJo;a`aTSQKIp_XLURd5i084dCdpUT!IE()4$qLY1 z7wafAz}Cf^jl}Lx%I1ToMNqkeQxAc}LCl@%^&)IG7&b4}*R6tSj<8lupLqSj%qbZa zpyPM>q%HDBQ=k2Wj;Up@BM(%kwrkbwU&Z*mY9qj-1{Ca}}8#JLR+Rt1-&oNM{c0v1V8U$o!&R@3KLtcR$5(HQ=muAn})1?H%#NI69nds`yDGjQcT{kc7K07PN>4 zxW=J+Ak=<4-eg->zk1qE2z!6Z7{{M%aJwzw+5^G+2*Bs%yK=6PJ_@Fk5hz6Lzt2`2 z@Ll1UeM1%p!}6J0DaQ4->*RI5T@mXZZWLyS$(Y^PUd!C_ykp_)Rf#0TjY?ce+${7( ze0S>;peqSMQU#QLq)S(PT~esFDlm&VbWL?3&=aqK?s+qIB+7og@y+;HiixS|H~sv| zlpjdv`C#WNW$4tUvogD?$Qh4y`y3$npGvzQOgt=50ba2^y3PQrPf8>|G^x(|`7d%? zMUC$)eSVjpvDAu9iCdl3fXn7-SD$qcf{I(Hv?(K>FJX0pd`n`W2`T?C$P*Uu9?lip z;pQTU)Q2o+X(jX>z(%$+A z2orHwSdgPaj6e?Wy!+!T*Fo3j)Mwh?o8yT{-C$)j@)G-J-vir&f(xz_1K3BTJR%d$wsjM3Ics>)mnSzJC~qw?9eqk~`d9j`L2`}*tucpv zzgP&vk1=qVad4Lq_$k7~;1UkJAug(Y zbUaKh7lk%Z8DUwrwx}r<4t2hs`_aO3STN^x!h9_j{XpBDk)k5ilqxuIIs}1iHpf8a zOba76(?4y_>odelzC3#g+)2^A5**mxck(C_sD&J%A*uWA#XV;rQ^p92AT!vqbk*rD z8Dam+Ssb?RR9$NUG+SNcX!F%=DX);pxFN5xeUI;&mxq0C*XOsTO@LH@?S`CRdBck< ziaV=cQLCTr{Rw%X;|h(cBY2R6EgY}dZwV}q^s!J>R(}nq1NqOW&+=yBu;tC`>Uz1| zIZ|*-$jVL7(XF~)pm7H7H4U7k7m~<~32*ws+tDDhrrMXs@(B3Ss;xrESLw5mEO4Fu z1nfoXu~BVr{5I-y3>3fDL{w}q zd~L&rvXCN-dKz)nYUjOjSQ@$t%-#~!)j=2(O)6gxC5L)GyNxB4+dwb1Oz^nL#z0~y zxsx14Q^rld1)1Yn{k??2+vR$4#i=!8R;yR%tVZuXPj`_@U?mR(cafh|aXv(xh_=#g zWy_O+Vh!3ZtOnP1&4Q9W^E_*pf&}}#bbe%T7IRc*+^_HH4)om1iQLSO`LU3qA-En` z_@5ZCfhSN0rczhzd}mR%74X#4i&qo3HswS0Pp>Vg`zOBfc|fAzyH_ef+G=xEZ3;!E zz-5g(6QE*UC$zATDEyZGjsiu%_XxoH0n0zJ-eN!pmk7;w4Y2**BL>sN+ObcD%M(Cj z{o8q8$N2pAq25hgW0@w8!y=NssN);B-as&}9PtN)Y4191`(zQ>szRZbe`NpDm}JAdHd1%=p~Qf)cQ%piM$?_7ReM>8tpqY$B({O1T4TkyZT4itVvKuM1~ zT=s!>Hqj&^BCnX_)(3As3YB3$|i=0zO^nx=tHC~np>C#Ic-lb(^@BeJvqgmCh|%mvcK#Lv~W?- zq+wq>PPtD3797rWmM7~4dCR4uCs1v0D$oQ`g>SjrnEIm~M+Gm(0QYiW7w948lW36+ z8$gn4kLEzN`#gMa)qnm2*aWu5_g8B}L*zB?3nF2!J0F~Hh$*yeDFv2LpO9{GnMj_w zTd>-#{B;T}7sdThgjC`#6cKA@m@33|V~FoB?FGL92Wy8|7r(Be`L0!aWu{`R z86p|VP;9`P>C-4VB>CawdFCTP@sH&|k^PYz=FEw;pS=Ok0>EAr-lo+VyezsO7gxDk z(F`+=B+09AyhbLUb1a1Ig)Y{=o@8k# zR(P&nxa+uw@QJa8xY(D((G3K5NmMnM1*wksc|?~WPvI!m{=DY%EA}-4qu(gA2`HZeJ z9`bFPVMPTU@QyDT&fmp`)SgzZs8O0bZsuVQ*7ULaZH~DSq)>fZ5Wbgj_zd1)fvL+! zWn5=R{LMgb`*>HCQm#e3pN1?e9Y4)i@IcnjM;lL5Ui8owrGq%zN$7fMIThi;_IQh>*D21AyFr@wzNad1U)Y>KS!;yqoAqF=>!g`Iexgf!fq z#pnioO_(BS3-K1c?I2Oq-<4r9aO^*T$WBbvHFKvGSfsX@H(bg8aG~j5wvRd!mChk# zFqMvX{RccGp|pIuJCMpK=M1g5eczjP_{RCb;Hnt*2ncs`l~FDGPNUY`+!WdEVtDYg z$xalOwR6rdOU8mL>+ zvMW<{WbO9i|ThE9eAKWP;}4 z)gis@UVg=ry_b<#s;WEwC$e;J4$m+Zg@4-C#(4xeZ)Y2LT65GmXCPY-eOGZYmnlhqR7DkM%1Xtk`x!rsqlcJ3T_Xmb(p1=Td2q{|oScXE>|R%hk&z-?gE9qw zCq~zAXoz`kI8(9G#yLCvp=kE~;)kHJRaaj>nLkh#3w62foGl>k0hnNVuW{-!Ui?ki z>0!X_$?-=utAMN>N4vE05W*og;W}&HQT3fvpbYw{c_Y7Bn1}TcQdLhEXb*7?{se#K zH7z5$RrS)X;lxSbmT1t%lJax)F4iC2(a)7?JV0s3M*z$tKU9PvRXzcQiwuHMM~+j8 z28>~FHYxO*yd8{qJppr*A8vVt;5ASi_9`3JInBrpwy-gPyu(+nZ+`^zKCmmK%Mj(w zZFMx>9G}3BwrP&9pwUR9;+2Czwjl2-XJs|FDz~jBG9_=uh|2JZgejM(ch0Bm*-SjkQHCL zmDpCGnL0^$Y9|Xx{ZpLhbRt?(>z!hPZGGeg)~6b&CLjXo&ABpt9@`eol{kG8I*Idqo7;GM-wVZD z;^3;lHMAowgpD|M)aEYFlo`T(qeW%4Fla}0hIya66{^}KkQBz;$j7X|$my0RxzfCU zod{0)_9^*~F~99|3DSF!>Toz@!$ay_q_HB2H#XwvE`MTG)o8`8Av@S9hs-mq#K04W}de14L6ID|w5G(hbTFN=XTX)r3g0m@AJ9eun^m2`R zQOgr2*`6xx?S{W{{1Y7OL-*8E=k9hcC-J-M0`_UP(s95sPcJlZ8$^U#TgWi3v2apc zc`M`MP`tFeLD3MAzQg&JdO~u@TKPRZGQyp^hBefBp^6F_8&f9W%w=#Gm>~4sadt0k z^8VK!iDw>;3eRkq8|WnIWUMl2WvoR}X&!myK8xSP^){-c**%;9J)e&zaC7xzIkT5?<`E(DI5S%5V!~PKvg?bJbMT(g)N0&Sl8qcoJuUQKZ?|Y@VC}eS^ z4>A#|ol4bICy8T``a#C>5j^=PJ@V1*oF4+2U|MTm?&9P6(GQAkfV1hpcKg50$9y8Q zw<|K5zU+c=BIMTH<8>ruTWiXddCBG*w|pDPC$_Y7P(iXE_2xnHRc#Z*@ZjEHgf`L$ zj=9Zuf`Dy&t#>ZYH=i54H%K4rDa+R4{t$|@Ev>e`jAdi_yk_wWiy%uUm=Cm05^cCF z@b&m|ET9uCKXXMWtF4v6U^urGt8Z*Aw#VjL#cItz>#!4znStTaNk5A?aSMiJ_BQ4d zpYicu2IC{Bcy|(b$^zF^&FAE}8<4r;mcoZ!Jc&PQkkblX*<(~Rv|MbL#bFp-fK+3HT~Akn!P}h$h37;Z zjEuyxxSKC`BCLlf*LrRCB}L&;NJ?^OZ$7!4+&>h{4EP!1tV@a{!t2}F=}8-3g?f>8 z#oC%CcWEAI{DM-)6c!towYVRu%uKT26POrv=n8uc^&@OuLeGYJvU}rIiaL9W9t%+JWa>4BzW>ch z#JzPnYHVgogc1oJ=R-rU+!WXUC2%!psH?X*05@n7X|_ zXui7TH(->%SJvX-&)?tkUG|MlDBD)Qtg#o-{jk*I2|7MBTsHPFTs`3u!qy#N#D3vN z{8SsVZsvH$)Z6GT+IRmVVVqRRzS)B<@|ASm;P4M$UTl4s_7`iIMf|m;JKw|F>V#i# zzzaf-hY@ICB`$%4fdS+5=g+p31ALDKV4>|osM$OG>^08GHoU^#>}0UQAM8}^uZemR z0U`b*zw>o0-T^Z!U8VBK^TrO58C4G}%>D8VjGXkK=!f*+bD$VFB9I&5W)HL8@{Md` zDH*h_fmNrw6n3%F3bB(`DonJx4Bc=x=TkZ*Lfv9BTJ#x!Z(+HLcekO~CU*wU*I6pv z={P_7;b_{OW&dk`0lEUSAk3>R8&Q*U0vx8YLcMbR9W9@Il=FrG_C6@QX;qn*mHAi* zCv8FpvX#}fU&70BfVT?BqiO)1n7VWDTKy0~JdwIebsuav7Q(BDV z#YN3qs8m?Zg=Luqj#ltx|FNTFeOs-T}G*7#egcFv8*AzIRY zMCx6o=}n~goMDJ(m`TnzS$x`b(&Uk=?<8c)y0yRM#^njV=lx!ntJieGzMnc~FChFu znpx@ID9|1r71kzP{sAO5KhaY>@h;=u7=H8BisuJ{e@Z8-I)m43wmOZ6vN874#}K;= z!3OqQ>1%9sV&?4#B=CBw3WfB>6Y4gY2BG;F3yJd^?Fub7*GSN5gE1apywAejiBgra z_U!X`GP}Gh(hi}YPk&tRLZW{!(oU(R!lz_foBZv&0pDQ8`fSK6OL0QVlqaukqefUW zRH$<9?aU8=upuCYp80(J8afqf6E6FpUg|^>?dV1^;mqqmRIL~`+KG{y@|sQ*x(%ye z{qB@8<9zubU(tHt=8Kt7_KtZtA;DkT%^K#peb!Hh5=MH>K)gYQe4hQ;@f)$;cwdU& zG`Uo9Wu}f`XME_sq>TyzJZXs7%zQmxr6i)%`&<6L6o*RjPW&eOnaq|1*y250br$rOR_z;F3b@SjZB`>!`G)D0f0Dv;zhYf5ShL#LClaD>a-yZp3Wng-5 zD5JLbirzs%fWh?>?GocdNbM5|HhB${HJA%&s*Q&lM-j~OSvc@3?`0>~6T>GQu7Aly za_KTlQg#l~85^q)vQ>f6^+R1R9|50$aVXJ;JPtUp*U}oz@qtGqZd;mTiaVyx%XzuB zq&>o|5i#cHmR1)rLt@8SB!f1)8Okx``?@hLvAzcljaTjKCEueVDrqTcRbCy;`D~X0 ztWh%A=%qpM2~vER)b&D~-e8$gwqXIt zQ9ijVBE1!J#X2Ra{4JZ022ry{@$cSIQMMEZ(BXKTuiCh~n+-WEcuj;4-Qr7jKJcu` ze{{oB=g-;JX3!$!Xz$>a0;e4pY4v??`u6rHuZ;cTE#;+c#0T=qr@msrHNia+0?<5d zBEIGBmHFihown9GEdMUvDl*L4v}Zn42a9Uk?*Z>a06zef7@eK}1kJDDzjGyZt^>9E zFYAa{=3Y&@>oy7d98{%47Rth*6I9MpRKElrESU0pP12`W$Y&Jkw8*@ga%hNhE^Dp2;34otP{KB7JkpMJs+UYYFH^!u|$8@&gqa$k3n(mRDn zw$2O2SBZmFQtn2jkfT~)=Gev{q7utlLqh^|w7!6x$U-mJjtDT`L%NLd!*_4!1{D&B z=w#!RwmrXG6Ylx>hSm1F)%LHSF_wA8-GSo9QoJK9} zN#9abtTf}N%>>!gtg}xl<(@g!fuybvOqJ%mzgo7oCpq>zikyheuabxv+p&2i_iu1s z=?iPXd+7ZVe!#YCs18*Z-zWC%6ngJ8HJR2O!Db8J$<4Q&E?8_7OdeWDPG4438Pe^0 z+;LwIVAwq<%o3X0hnh>VSBs~sBt$7Sm$T-V~VUh8CJ4r0`lav_JA;Mt&;iH-Yn-r_IK z2qep6Mm?AmokXdYu_v$gxXv$o7hcX-c@!%yZjQ0)ulf;`k_E@-gUIp4@`P;BfGiVK1i5C4pit6#FJe--%?6xc9hKL5dTkK2cpxS$JTzj3Hyis(_h zVn{xlQf~daCvKhc4qV^NI592GH}{vN{Q?E#50#Z=!n~M^Ieb z=AjFL38;Z&ZN83dE2|1_9xADY8qGxf)f93zF+DhV>Yo*i9Ns+z>mUOkirf6|4G`_J zZrdc$Zf(kbuA}pxr8i4}IN+0)8_r0*t?1Sm-qwO!4*4*3I&51N^9eGx+HQ zFA^PBC7$krf599<9owkb%{6YG%cmXw`$Ow2%$!+UR3C5%!|IRgEkRQ52v zQiJfr&-%2K`X2%0kjgeb$5M-<_7`xnHgC0_wx&dH@7kmh_ZSt?jB-EBf0i{jc5UHvh*uH5#xK8J zv!AD0^0OsLVS}AQ$zePi-uXO5BI#GPD|c7&{G$g}tOn(O>5y08sdgd6%sn8u>kTrv za^=W>AO!qu46=@{y!&M)q)@uDW+vO~!LKqB>qynL^!)c`#S2?omP#N@Qve|W(Re7R zKhnlS+G+_X!Dm&6W8eRd>vE|~cv9P~&g?Ej`_pAq?R=X}I*1KL5Q?T0hf~3u1sxbR zGnB>$>$0#*4|H+lhh)XCMQnVI!ru2Hy@239D>i@=Tep4dZGoOK-!1tB(O^PEzIxk~ z=mYWY@zqngQ`wXijgoY>f-5YWSI@!}uwZt^oGc6)V;(~;94(Ik5ng^NFRt;1L<7$| z`0t0(K&oIj_9UkT-L|*nYAWe|*I$SJ(F^d5G6humah)im0jMKF`JN3Va+D|74Ckn- zt5M^N%y2n_(2|Pvxp+*Dap|N~)Dx>?W}}QQJE#v^sOnahoU*^Cw-SjM-srwbkj2x* zkv!1c(y^6~6Iqzu7N^#;=oU~phw!Q>U*MpAq)*7IIPaFi%-ot%k*iaK~`EQd>B4y=h z+s4j(2COtvsPSsk%(sk#Mde4NQ#kduGmL_y}4(nxNn{uklakc8RGD}d%@^SADzy#&v?;4 z<1`r~vMApX{&+v?(+^uG#2$e@N#k1Ow^RJ%X}#G!#vPCSZAEJB4O90H00I2c%SJ-4!P50=e6R%SjG(E z*>qcs+6G4dm_p+I8iSfLF)#gCKye=VSNiw_FW>!mDVmW}Qq!dOc{$KFjQ{Mn(&s_M zdP4k6aFQ^><~>jI1r$rzzq=Zo zp-biDxmK!DeVZ?vGoF)$^_2KBooyiJQSFgYoj_ucb{7!u(uJjq{*%9aWc}ju`ufPQ z!)}9pLP{>1h8B4szExX-dm038Hl(VV%%z?E%&*MMwBjp?a-mLQ^frQ#s$W4qBM z$+52pA~x91K|Di8F{p&#%`z|tGY#6UxgbGp&n`C24Oc&I?m63k0oM|sJlY8szoDp| z#Om0dADVo5f%(}&GVs^9EZ*AHUVDIGaEFBsaxHNtP&(}Tyz~xursE^~WJ7<>s)lC4 z(5J$&X$(}5p1n=k@1a0zh09K4o$D$a=zARo>ub+~bK|FIbFY}hNUqKK9$W1)g(b9E z{+3D!a^BcB8xBdrxPkn51Z>90|Mm)Q7&yt6SMqMzA%=)f=wAtPq){mMfZT=obs-t8e{P-IlCPWSnFg|x=~@|{Q3vbJvxvKz6# z6`2ZM`M4b48uU}}%b(~PZj!f`Y>VOMiN~Vw*a09+`z$8h2-aV`d=q}9{(7NJ)SER@ z8Uas~k}JYjOjKKt*|{-dv9p+lgbIxX!lK9SOrc3zxZRk0Uvj5eq)&2;Y?ugN=N{mPy@p1F|s zlEH>*iErD7T;@|ch-;RC0?fXceOT}Rr7C3;zEH@6W2iS=`}-NGav(bP!bVqjhG`!> z0-9*TZQv7M#`03(dObe8WV>FG8@-KFWtPs;H3TW8SjxhTM8_T!&VBHx?unJ~?VICF z@{&-QfGUS}#+FQ)7MWy);NshqSInTs<^;95Zz0u#lt~H`xbm7vbc_&|7O4ABA*$Za zybkj1mP(pubuT;2HWQ~7Hwg-Zp6F6tSn%};#h$;|c%E1^w?lnv47 zC2zH%B9|TNAJ;oj_%I!?Ahfa-@!gcD&?9*<;p)K})$PygiIi=dcl%=G-xPaX<>u|k zLSBjTkjb~(4|gL?8lVrF4A0H50^1=59sxKz;PDOy5g?7DiG1XhTcib>x$XE+$~^F)suUJ`AP^xr7o^fCFG$H0D85+iAA4nbhuwa-KL zmB4b;_TRIC;IGWIty6(7w_9nc_swQbuxRKr@@aXf>hVUKet*C=5L$0jbdJDC{urvW zuqelhc8G#V?O&*2W?F>tCK@Nu8^i(`GvnI#=Z>vD|T*Hx@(!$XBRm9HEt|&rc0g(DGg_A zX^N<S;2F^GuE0aPVYM2#SSq~Op|br)Ee(DQ4_3Q zIu4Cpx#}9ajV&EaQMkTL5l)={)~Au=hm$&vDT#Tfry1v&$Fow`UUCuRpR)5YIn2TF zN%)b@=^?RU_J@5yg2dfy{VBd#x-C|cwut_VosS9aX}X^zflAo9JVZn>GCc`xc}@Z% z9{$j5#eE5hE=Wt7c5;mUe@xR1LY_#B9uF?Cux2{vzIIKGS#B_7_IL}rL9D$6jFO{+ zjnXfK$Vke3a)Izwy5!+c+Ax(@k}V)+eBKe`9qV5JYtY@e6W2U^M@PWr@LUY^{^M{Y z#aF}Vfm1;F=MgXnECSOW1lJ27pLdX49x1EwU(s%UD6qv+CWtE~CpiP)Vut7Lc<}6A zsFzxCfJd(6O=0JM2}H^@$&b-}5(cYXB9NBM-)v$HmP*#%#B=)EF+?b2I4oX4%X42{ z_TxXGllQQIKxKp*+Jdr&WaLwKIIxdiJKTP@zHv?z^Rwof`Njmf+GHP=WzqNT#E~en zLel3{NEoQZyd9oCn(8F3Yo;ZXj@_a{Vrvl+#8ZLDfusM>@lb@4M8x*5KW~|BVA3@7 zU`^PDpSJhlf2t&F%}-(fSN;mu(n2x!$Rbyy{VYI0K)5yLBHHSuN;X0d3~`xQegvQ? zAIwKJ>at34Z(_^7+uYP5Mr?(-Y&%{{q&F2e!}J5SJ-4dXbpPskVUb7h(~iv(Ejw9b zy?!88eRCya{PaJI=P8mmR+-F(s$c>*fFgYp%H)ocaiDPtGF!tp`j=a;zeGogS7TQUFwa%s` z-k$+Ks1O#z>1!swPEeP?-^Xz~UFb#IY%Gu9XaSFA&u&o3F&!Wfw$-Zw*VQ@BXjWA; zTlu8TQUyD1^tHw0V3!=Up9XF?u>FQO!gVv5kchlPXkjTIrtOB{V@Z&=F{OgND`5vx zv=bc)$|h88y0|LBb0qbD)hrEfHnbZgp58_@55JV|C&ZM}&W>x&w0B14ZA6XU2+5o_ zntwGYbD8sU7>NHB(VMKvOWv!*UQ?qQA3A8umejc!zKAY6N4VdA?7LSDBxpqpRQ#J% zsQhO^CuLE8Ch|UbELDxHi4>Ci=uX+!_}e z3=^F`7_Uz7u2^xMY4Uoy2u#sP+m2~bUF?8qY9n}5zlg|3wHSSoV^j6ss?yV#s`{94w>%zj#Pe^xU8f$nQ|x9Sz~rI{BLoo!{I$vcbd}57%b+Hk-BFfAw5pe zzmcn!Keo%UX|FHU(=8m6@tFBPDue_aIB~^zZPn$!g)A1v#xxTV@+r%0>>aVm zCl~;7#9&|oM=9`Y#oDKi{0*d9X?D_0dm;;Hqql|RmO=*scMeWFD#(A?ueX0@ulOe= zm%?2tPl(?g^$T4W!@63Fuk5>t14(-19jiVvz#M=fT+1QC5P*4Y$C_~lQ;=a5dhJEa zXsu^A(lJ}NeYzv`JT_s&oGF$;;9{cYlUCMqZ7r7VzquX9{18&$S$NChY*IQ;b*Sm~ z7eZAbwyI4!mB{W(sW{{11EPxkC|SrHa(jyW?Ee6QJNU;#@o()X@t;uAU^;E4rmKIY zT6t?4HKe!K4%<~p3+3;DNC#*#U}Ox}=t|9i4h{`|v5;4F^6E9E7Z)g|;`fVs+4-)g z@Q06eT~0BtQP1BA4021h&Wb@PWr|txh4?QY~m#`oa(w?&w;GBbAlZCcF z98xXvMtCIAjx)_yS@#Y|;-vFIBPSy~`_yu?NRQ`{gO6G%q4?t*(Md$B9N(HxJPJPc zNx{uPB^e{Jsa8x35(pLdjUOQyBjGRjIO;_o@JvlrSu$V68bYZj7(Q%=KKued9QLp0 zyKZ8LWEE#Wh~~ec5BNCV;79)e1jp47whX>0(iC;)5=eiidj5RX2#(y5!DIZ1uZqsq z@lVkopm5{=0Aqfy^dh)Mwv3e|p#Bcy>HZYY18WJS>P;M^h^_!q$Fb~cd$rvW0FX&s zeqyjNK_qo2HRs_Z(>gPiq+*X#$-w74aX?UVGsjP3Sl$cQf3>vp6pfkf_~-bSpf$8` zI+Ks3dkNoEeA`Vs9AAvQG4>hF&Ae^oKQ0GI&-4|~Z9Fi_u z^d9D@Uieo})LYDJbp`p|8Q2fM99DCpp0_oPO*Jxn8Sz5gDZ0Q~PfeDnLVKjNp z)(5T*59eKODQC26Xx>d zAny7Rj32FO{4enRr;Pk>VPkg0+R46GOyJ41XK&}%=xgWrf`lF#e%)R+cmBJdsrX-- z=2WwcEgZIXsqG`mo3w8yZG4(`en-^*01sdjLEJ#t_8 zCb!2c4Us|N9c^P6#?5C(nN)gidCMQfn*6H;#rYNrKU1%Zry0iAQj$$|S5LZU`Zj2D9CEC!v^N9|gCO7><0Cm9?WF$z!7M&CYjedN-k6$vavz>c-FnI-h{cs42%NLmTV2iKopN3_!VQM>2m59NVdrsRFF!}3dhuN zPYc(zTKKQ~L22F$jN2r#Np$LQ3NHt*mAaoT^rO zCsDadE3&@J(%xsz;5ciCxMK}0>o%zr%(8;CP>iWtiphYMf%Ao8DZl`_|~J z?60kr-L^d#&75>NrwfcP01!RuuHp`J)Y6_ZK?gP2%6?N9V%eCe$RvYOM>zl!+Np0~ zMoHV8)5D%dK?l;M$GM`Bc_t5lc%rH+?dWs*QBvuaq+y1^=ZaO7=iJmq^O8xy^rg-l zaqC}X=6pmX(eZ!$935zHzu=ahF_0>`wAM6fa(b?H2$Lh<=f}{R{&_LDT7iHM{{Rwe z`X>JXg80a*{{RH5_>H@g*P1TgGtc(Dr{%_L`P^0g-MBkW(~SCXYvePv{?NS<`WFn; z{{Urvuk<6iY$A*d?qB@~RvfAZKmZJy-nwOvVJ85(_4?LASxWfKasYn{@~FFAo{noy zQ?i1%?GI6tNxzO{&R2#~dXD0{n-3W_sjJ)D!vI8;zGh>SjCQV8T|Q(b{GtMmc^xZ5 z!rFv7ZnGTIF<8}4AZHmB-AbZuCiFZiv}YfUSnky9#sLPoe-hl-qsZ2`Q$ch(h)MFZ z?m7>`tN4q>uc&4i3&n4YardPE0PA~KxcGDSL(=>!@YhY(d`e}yzrRs5w!z9pYOK4F zK3o=jbvedP0OKc{GtBAXsLHhVUw_E^j}QDf&A77{EH+q@P+ZfLoud`z(r)jfNxd2K z^7y+^fkL&;cK5)|dQZSl38=J>RWgOTzIi;CE0Gh%LC5?E7SFXW#*YhGcz?pKx^9bO zVFJ$(d4BZmxG@W!!-1YpQC+|67w}KSAGCg{t9VyMwRxq}Et_9=^O7Q#i8L@=GM7Iw z26XvGN!&;W2Om9Ft$gPLY!qGPB(0-%{<U1I#Mo;r`y`ZZPvot7IGs1v0_Y; zO2wFx+q(=X`pxCjyd|c|F$WBf!+9)m zUqrrGpLg#9hUi&U##H3@^{(Cw@Y9F5LaWR$R9xnlE1aJ+l9O947Pi*OGv<6o@TUVt zmKP_=u_~S}vy`Id-@WY8ym^(BU%Z<4b!yi+ZwPqTUANG7ok8Mjq8z+&M;zD#kKP5| zKj0*FsjPe}tN4ZqA57Bq8}$xEv)kIqIz-2xn5a2poZ$8AUXAc~_F%Wxd`Bg|rL131 zrdvj2SR+MA90CAR_~3KS06v6Q(s~Y$r}$>h(@E1UptOh)9kr|@=5{@T{pMnRq@Pn? zuh7qM5u@!esU_E^-h7@x;0F`ub93VSWU11otrgGhB>dIiELWS=_Ud?t?7Q$kRPdjU zG+!EP5YJ%V7{9mF^y^!c9%aSEGOVd2s6oVGlpTydW7KUJZ|PQP1Kh~jJh44<-oGRM z5&pzpHSvFm{5JaLlzcI#>N=&QcGkMGd3XBSiP5Ky8&X87i2#yGC6Fjc)RhiTAFR^c z2`6Vc8;L)iba4K6Lo`)tVdkWvE?qTA+f{v=T3r0c#@vU7@)=;Ve1dAEp&7cfx^7aF zjjq<3S=lWYt;xiPaORY`8NmRWhs_EB%^qe{6U}?hC*g`p#NKBhV}VMpQ~}WbRRNF; z@F)_E!#ol1S+-JTnC3p1{ZxG3wT2x6m%`JuCUk-aLgWLo{wqGs(dt6j5I%o=N*< z>H432!rI~Fyx-)88;IndCsz%S+~=oCaglfdhp%2JqP#=u=)3MU?xIc_NXC6yvRR`^ zTqCO>JRaDhis+zt`Lyq7o!9K=;1&3l@lQ>&bq{F-i#+4A07eJmdHMriZhS>sd+jCd zpUINm+AvxyjF)!u;`{+D-&GV*UpboAl(7?o*(Ld0{_grYWjJg<1J4;sKK*IWnfK+< zFGbtU_dJ8+ufmNYFNAuOkO`E)bm_*~G6EG;$<9wudCz*6_7VN3G%wkE;*3*j-XGGn zO(S2D*GJZFFG;wD4IQrS<-0>_(a4i$$VdCT{{VJCIcg}cq~VJ4qZxZNmc5VX-=!v5 zhyL2b!7C|ISF^U$pKthM+Way900k@3wV&FG%f#|ncmu;88}Q_&BmJSKPk7q)n+4L# zX=@d{Hj+mKiMM#%k%PH|$_^_Z_PzbSd?WEUP0{ZDAKYrOEE7u&_M5HfHX3%NJb(gq zNv~{|Wz?5U%+DSo@`@^jaH3WyudBr4>Qj?OosO z?eWep*^}bk#jWkOk*|0sQ@V=N#2RL=rKYiMb!e_xW)L$b>ERB|8!M}F%bYm`qP{;J zfWzWBur(mPoZ%$W)2wyA_gx=GedSIe%yIZC*~T`ss$wbCq@y`D+D7M-f;UkttqYqlD#vd?FGZ4i#y>K8!K$bj2QHn1S@PY1nwPk??1j{!>Z zXu3zk{{R5RI3jiM)`=Lpm$3f;NGlrg{?rZlQAK~2x#tvS6fyXW5~$@EPH|k)l(bT5 zT{&|82kQ9z%M)IeInLyi;jz_Znt_1kl>*_fnbeHGA0s zibqFoe28KaMmFL$dxvXDXc?m!bm4Boo$D!0QAK2t SNs=s~fXNx6iYif}XaCt0em-IV literal 0 HcmV?d00001 diff --git a/projects/infiniteLoad/chenyulin/www/css/infinite.css b/projects/infiniteLoad/chenyulin/www/css/infinite.css new file mode 100644 index 0000000..cc09eef --- /dev/null +++ b/projects/infiniteLoad/chenyulin/www/css/infinite.css @@ -0,0 +1,29 @@ +body { + margin: 0; + font-size: 30px; +} +ul { + width: 100%; + padding:0 +} +li { + list-style: none; + display: flex; +} + +.writer { + display: flex; + flex-direction: column; +} +.writer span, +.writer strong { + display: block; + /* flex: 1; */ +} +/* .slide { + box-shadow: 0 0 10px 10px #000; +} */ +#loadingLi{ + font-size: 30px; + text-align: center; +} diff --git a/projects/infiniteLoad/chenyulin/www/infinite.html b/projects/infiniteLoad/chenyulin/www/infinite.html new file mode 100644 index 0000000..b14b58d --- /dev/null +++ b/projects/infiniteLoad/chenyulin/www/infinite.html @@ -0,0 +1,193 @@ + + + + + + 无限加载 + + + + +
+
    +
+
+
+ + + + + + + + + \ No newline at end of file From ba5888771004a879fa9a64a45b22067275ddde95 Mon Sep 17 00:00:00 2001 From: "chenyulin.1022" Date: Tue, 3 Jul 2018 17:24:34 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=8A=BD=E8=B1=A1=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- projects/infiniteLoad/chenyulin/README.md | 6 +- projects/infiniteLoad/chenyulin/infinite.js | 5 +- .../infiniteLoad/chenyulin/www/example.html | 56 +++++ .../infiniteLoad/chenyulin/www/infinite.html | 193 ------------------ .../chenyulin/www/infiniteLoader.js | 185 +++++++++++++++++ 5 files changed, 248 insertions(+), 197 deletions(-) create mode 100644 projects/infiniteLoad/chenyulin/www/example.html delete mode 100644 projects/infiniteLoad/chenyulin/www/infinite.html create mode 100644 projects/infiniteLoad/chenyulin/www/infiniteLoader.js diff --git a/projects/infiniteLoad/chenyulin/README.md b/projects/infiniteLoad/chenyulin/README.md index 79dba0e..f6a0424 100644 --- a/projects/infiniteLoad/chenyulin/README.md +++ b/projects/infiniteLoad/chenyulin/README.md @@ -1,5 +1,5 @@ # 无限加载组件 -* 前端模板为template.js,在html的script标签里面,可以在这里定制专属内容 -* 基础样式部分写在css/infinite.css文件里,可以在这里定制样式 -* config.json为传入前端的展示数据 +- 前端模板为 template.js,在 html 的 script 标签里面,可以在这里定制专属内容 +- 基础样式部分写在 css/infinite.css 文件里,可以在这里定制样式 +- config.json 为传入前端的展示数据 diff --git a/projects/infiniteLoad/chenyulin/infinite.js b/projects/infiniteLoad/chenyulin/infinite.js index 7bae8a1..b3e884b 100644 --- a/projects/infiniteLoad/chenyulin/infinite.js +++ b/projects/infiniteLoad/chenyulin/infinite.js @@ -1,3 +1,6 @@ +/** + * mock数据用 + */ const serve = require('koa-static') const Koa = require('koa') const app = new Koa() @@ -7,7 +10,7 @@ function rnd(n, m) { return Math.floor(Math.random() * (m - n) + n) } -app.use(function* (next) { +app.use(function*(next) { if (this.req.url == '/load') { this.body = myjson } else { diff --git a/projects/infiniteLoad/chenyulin/www/example.html b/projects/infiniteLoad/chenyulin/www/example.html new file mode 100644 index 0000000..a398b2f --- /dev/null +++ b/projects/infiniteLoad/chenyulin/www/example.html @@ -0,0 +1,56 @@ + + + + + + 无限加载 + + + + +
+
    +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/projects/infiniteLoad/chenyulin/www/infinite.html b/projects/infiniteLoad/chenyulin/www/infinite.html deleted file mode 100644 index b14b58d..0000000 --- a/projects/infiniteLoad/chenyulin/www/infinite.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - 无限加载 - - - - -
-
    -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/projects/infiniteLoad/chenyulin/www/infiniteLoader.js b/projects/infiniteLoad/chenyulin/www/infiniteLoader.js new file mode 100644 index 0000000..ee3e18b --- /dev/null +++ b/projects/infiniteLoad/chenyulin/www/infiniteLoader.js @@ -0,0 +1,185 @@ +;(function(win, doc) { + let defaultSettings = { + container: '#tpl', + myinterface: '/load', + dataList: '', + loadingContainer: '#result', + loadingContent: "
加载中...
", + loadingID: '#loadingLi' + } + + function infiniteLoader(options) { + let self = this + if (!options) { + throw new Error('请传入配置参数') + } + self = Object.assign(self, defaultSettings, options) + self.container = + doc.querySelector(self.container) || doc.querySelectorAll(self.container) + self.loadingContainer = + doc.querySelector(self.loadingContainer) || + doc.querySelectorAll(self.loadingContainer) + self.myLoad() + } + + infiniteLoader.prototype = { + myLoad: function() { + let self = this + let fetching = false + let page = 1 + let slideCache = [] + let lastScrollY = window.pageYOffset + let scrollY = window.pageYOffset + let innerHeight + let topViewPort + let bottomViewPort + let idflag = 0 + function isVisible(id) { + let offTop + let offsetHeight + let data + let node + + // 设置该节点,并且设置节点属性:node,offTop,offsetHeight + node = document.getElementById(id) + // offsetHeight是自身元素的高度 + offsetHeight = parseInt(node.offsetHeight) + // 元素的上外缘距离最近采用定位父元素内壁的距离 + offTop = parseInt(node.offsetTop) + + if (offTop + offsetHeight > topViewPort && offTop < bottomViewPort) { + return true + } else { + return false + } + } + + /** + * 更新DOM缓存 + **/ + function updateItemCache(node) { + let list = node.querySelectorAll('.slide') + let len = list.length + slideCache = [] + let obj + for (let i = 0; i < len; i++) { + obj = { + node: list[i], + img: list[i].querySelector('.img') + } + obj.img.src = obj.img.getAttribute('data-src') + slideCache.push(obj) + } + } + + /** + * 动态加载内容 + **/ + function fetchContent() { + if (self.loadingContainer) { + let Loading = document.querySelector(self.loadingID) + if (!Loading) { + let result = self.loadingContainer + result.innerHTML = self.loadingContent + } + } + if (fetching) { + return + } else { + fetching = true + } + // 如果用数据接口的方式获取数据 + if (self.myinterface) { + axios + .get(self.myinterface) + .then(function(result) { + let dataList = result.data.data + let len = dataList.length + let ulContainer = document.getElementById('expList') + let frag = document.createElement('div') + frag.setAttribute('id', idflag++) + frag.setAttribute('class', 'father') + + let tpl = self.container.innerHTML + frag.innerHTML = template(tpl, { dataList }) + ulContainer.appendChild(frag) + + // 更新缓存 + updateItemCache(frag) + // 已经拉去完毕,设置标识为true + fetching = false + // 强制触发 + handleScroll(null, true) + page++ + }) + .catch(function(error) { + console.log(error) + }) + } + } + + /** + * 懒加载实现 + **/ + function handleDefer() { + // 获取dom缓存 + let list = slideCache + // 对于遍历list里的每一项,都使用一个变量,而不是在循环内部声明。节省内存,把性能高效,做到极致。 + let thisImg + for (let i = 0, len = list.length; i < len; i++) { + thisImg = list[i].img + + let deferSrc = list[i].img.src + if (isVisible(list[i].node.parentNode.id)) { + // 这个函数是图片onload逻辑 + let handler = function() { + if (thisImg) { + } + let node = thisImg + let src = deferSrc + return function() { + node.src = src + node.style.opacity = 1 + } + } + let img = new Image() + img.onload = handler() + img.src = list[i].img.src + } + } + } + + /** + * 处理滚动 + **/ + function handleScroll(e, force) { + // 如果时间间隔内,没有发生滚动,且并未强制触发加载,则do nothing,再次间隔100毫秒之后查询 + if (!force && lastScrollY === window.scrollY) { + window.setTimeout(handleScroll, 100) + return + } else { + // 更新文档滚动位置 + lastScrollY = window.scrollY + } + scrollY = window.scrollY + // 浏览器窗口的视口(viewport)高度赋值 + innerHeight = window.innerHeight + // 计算isVisible上下阈值 + topViewPort = scrollY - 1000 + bottomViewPort = scrollY + innerHeight + 600 + + // 判断是否需要加载 + // document.body.offsetHeight;返回当前网页高度 + if (window.scrollY + innerHeight + 200 > document.body.offsetHeight) { + fetchContent() + } + // 实现懒加载 + handleDefer() + window.setTimeout(handleScroll, 100) + } + window.setTimeout(handleScroll, 100) + fetchContent() + } + } + win.infiniteLoader = infiniteLoader +})(window, document)