diff --git a/docs/demos/index.js b/docs/demos/index.js index 9976b69d0..2403dd8a1 100644 --- a/docs/demos/index.js +++ b/docs/demos/index.js @@ -44,6 +44,7 @@ export default { 'image-preview': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/image-preview'), 'image-preview')), 'image-preview')), 'layout': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/layout'), 'layout')), 'layout')), 'lazyload': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/lazyload'), 'lazyload')), 'lazyload')), + 'list': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/list'), 'list')), 'list')), 'loading': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/loading'), 'loading')), 'loading')), 'nav-bar': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/nav-bar'), 'nav-bar')), 'nav-bar')), 'notice-bar': asyncWrapper(r => require.ensure([], () => r(componentWrapper(require('./views/notice-bar'), 'notice-bar')), 'notice-bar')), diff --git a/docs/demos/views/list.vue b/docs/demos/views/list.vue new file mode 100644 index 000000000..36f31ee20 --- /dev/null +++ b/docs/demos/views/list.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/docs/demos/views/waterfall.vue b/docs/demos/views/waterfall.vue index 3c63a8213..8e7972a25 100644 --- a/docs/demos/views/waterfall.vue +++ b/docs/demos/views/waterfall.vue @@ -1,5 +1,6 @@ diff --git a/docs/src/doc.config.js b/docs/src/doc.config.js index 334e3d7f9..ab0d46bfb 100644 --- a/docs/src/doc.config.js +++ b/docs/src/doc.config.js @@ -104,6 +104,10 @@ module.exports = { path: '/lazyload', title: 'Lazyload - 图片懒加载' }, + { + path: '/list', + title: 'List - 列表' + }, { path: '/loading', title: 'Loading - 加载' @@ -394,6 +398,10 @@ module.exports = { path: '/lazyload', title: 'Lazyload' }, + { + path: '/list', + title: 'List' + }, { path: '/loading', title: 'Loading' diff --git a/package.json b/package.json index 9d33e151e..cd5b447e1 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "license": "MIT", "dependencies": { "babel-runtime": "6.x", - "vue-lazyload": "^1.2.1" + "vue-lazyload": "^1.2.2" }, "peerDependencies": { "vue": ">= 2.5.0" @@ -54,7 +54,7 @@ "avoriaz": "2.0.0", "babel-cli": "^6.26.0", "babel-core": "^6.26.0", - "babel-loader": "^7.1.3", + "babel-loader": "^7.1.4", "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-plugin-transform-runtime": "^6.15.0", "babel-polyfill": "^6.26.0", @@ -71,7 +71,7 @@ "fast-vue-md-loader": "^1.0.3", "friendly-errors-webpack-plugin": "^1.6.1", "gh-pages": "^1.0.0", - "html-webpack-plugin": "^3.0.4", + "html-webpack-plugin": "^3.0.6", "isparta-loader": "^2.0.0", "karma": "^1.7.1", "karma-chrome-launcher": "^2.2.0", @@ -92,16 +92,16 @@ "shelljs": "^0.8.1", "sinon": "^2.4.1", "sinon-chai": "^2.12.0", - "style-loader": "^0.20.2", + "style-loader": "^0.20.3", "uppercamelcase": "^3.0.0", "url-loader": "^1.0.1", "vant-doc": "1.0.4", - "vue": "^2.5.13", - "vue-loader": "^14.1.1", + "vue": "^2.5.15", + "vue-loader": "^14.2.1", "vue-router": "^3.0.1", "vue-sfc-compiler": "^0.0.8", "vue-style-loader": "^4.0.2", - "vue-template-compiler": "^2.5.13", + "vue-template-compiler": "^2.5.15", "vue-template-es2015-compiler": "^1.6.0", "webpack": "^3.11.0", "webpack-dev-server": "2.11.1", diff --git a/packages/index.js b/packages/index.js index 8930ee40d..1fc0b9a57 100644 --- a/packages/index.js +++ b/packages/index.js @@ -30,6 +30,7 @@ import GoodsActionMiniBtn from './goods-action-mini-btn'; import Icon from './icon'; import ImagePreview from './image-preview'; import Lazyload from './lazyload'; +import List from './list'; import Loading from './loading'; import Locale from './locale'; import NavBar from './nav-bar'; @@ -96,6 +97,7 @@ const components = [ GoodsActionBigBtn, GoodsActionMiniBtn, Icon, + List, Loading, NavBar, NoticeBar, @@ -173,6 +175,7 @@ export { Icon, ImagePreview, Lazyload, + List, Loading, Locale, NavBar, diff --git a/packages/list/index.vue b/packages/list/index.vue new file mode 100644 index 000000000..8b3d085b1 --- /dev/null +++ b/packages/list/index.vue @@ -0,0 +1,118 @@ + + + diff --git a/packages/locale/lang/en-US.js b/packages/locale/lang/en-US.js index d3fe13f4c..c99646601 100644 --- a/packages/locale/lang/en-US.js +++ b/packages/locale/lang/en-US.js @@ -3,6 +3,7 @@ export default { cancel: 'Cancel', save: 'Save', complete: 'Complete', + loadingTip: 'Loading...', vanContactCard: { name: 'Name', tel: 'Phone', @@ -31,8 +32,7 @@ export default { }, vanPullRefresh: { pullingText: 'Pull to refresh...', - loosingText: 'Loose to refresh...', - loadingText: 'Loading...' + loosingText: 'Loose to refresh...' }, vanSubmitBar: { label: 'Total:' diff --git a/packages/locale/lang/zh-CN.js b/packages/locale/lang/zh-CN.js index 582b3c79a..6fc73ab27 100644 --- a/packages/locale/lang/zh-CN.js +++ b/packages/locale/lang/zh-CN.js @@ -3,6 +3,7 @@ export default { cancel: '取消', save: '保存', complete: '完成', + loadingTip: '加载中...', vanContactCard: { name: '联系人', tel: '联系电话', @@ -34,8 +35,7 @@ export default { }, vanPullRefresh: { pullingText: '下拉即可刷新...', - loosingText: '释放即可刷新...', - loadingText: '加载中...' + loosingText: '释放即可刷新...' }, vanSubmitBar: { label: '合计:' diff --git a/packages/pull-refresh/index.vue b/packages/pull-refresh/index.vue index 72c1a00d1..c895dcd36 100644 --- a/packages/pull-refresh/index.vue +++ b/packages/pull-refresh/index.vue @@ -19,7 +19,7 @@
- {{ loadingText || $t('loadingText') }} + {{ loadingText || $t('loadingTip') }}
diff --git a/packages/vant-css/src/index.css b/packages/vant-css/src/index.css index e66642101..6cd288e97 100644 --- a/packages/vant-css/src/index.css +++ b/packages/vant-css/src/index.css @@ -4,17 +4,18 @@ /* base */ @import './base.css'; +@import './icon.css'; +@import './loading.css'; +@import './button.css'; +@import './cell.css'; /* common components */ -@import './icon.css'; @import './col.css'; @import './row.css'; @import './badge.css'; -@import './button.css'; -@import './cell.css'; @import './circle.css'; @import './collapse.css'; -@import './loading.css'; +@import './list.css'; @import './nav-bar.css'; @import './notice-bar.css'; @import './popup.css'; diff --git a/packages/vant-css/src/list.css b/packages/vant-css/src/list.css new file mode 100644 index 000000000..81a15fd20 --- /dev/null +++ b/packages/vant-css/src/list.css @@ -0,0 +1,25 @@ +@import './common/var.css'; + +.van-list { + &__loading { + text-align: center; + + .van-loading, + &-text { + display: inline-block; + vertical-align: middle; + } + + .van-loading { + width: 16px; + height: 16px; + margin-right: 5px; + } + + &-text { + font-size: 13px; + color: $gray-dark; + line-height: 50px; + } + } +} diff --git a/packages/vant-css/src/pull-refresh.css b/packages/vant-css/src/pull-refresh.css index 4b8833e66..d903d42b4 100644 --- a/packages/vant-css/src/pull-refresh.css +++ b/packages/vant-css/src/pull-refresh.css @@ -25,13 +25,13 @@ .van-loading { width: 16px; height: 16px; - display: inline-block; - margin-right: 10px; + margin-right: 5px; } span, .van-loading { vertical-align: middle; + display: inline-block; } } diff --git a/test/specs/list.spec.js b/test/specs/list.spec.js new file mode 100644 index 000000000..548c96a9c --- /dev/null +++ b/test/specs/list.spec.js @@ -0,0 +1,68 @@ +import List from 'packages/list'; +import { mount } from 'avoriaz'; + +describe('List', () => { + let wrapper; + + afterEach(() => { + wrapper && wrapper.destroy(); + }); + + it('load event', done => { + wrapper = mount(List); + + const spy = sinon.spy(); + wrapper.vm.$on('load', spy); + wrapper.vm.$on('input', val => { + wrapper.vm.loading = val; + }); + + expect(spy.calledOnce).to.be.false; + wrapper.vm.$nextTick(() => { + expect(spy.calledOnce).to.be.true; + done(); + }); + }); + + it('finished', done => { + wrapper = mount(List, { + propsData: { + finished: true + } + }); + + const spy = sinon.spy(); + wrapper.vm.$on('load', spy); + + wrapper.vm.$nextTick(() => { + expect(spy.calledOnce).to.be.false; + + wrapper.vm.finished = false; + + setTimeout(() => { + expect(spy.calledOnce).to.be.true; + done(); + }, 50); + }); + }); + + it('immediate check false', done => { + wrapper = mount(List, { + propsData: { + immediateCheck: false + } + }); + + const spy = sinon.spy(); + wrapper.vm.$on('load', spy); + wrapper.vm.$on('input', val => { + wrapper.vm.loading = val; + }); + + expect(spy.calledOnce).to.be.false; + wrapper.vm.$nextTick(() => { + expect(spy.calledOnce).to.be.false; + done(); + }); + }); +}); diff --git a/yarn.lock b/yarn.lock index d7dd16644..f9747a923 100644 --- a/yarn.lock +++ b/yarn.lock @@ -507,9 +507,9 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-loader@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.3.tgz#ff5b440da716e9153abb946251a9ab7670037b16" +babel-loader@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@ -3325,9 +3325,9 @@ html-minifier@^3.2.3: relateurl "0.2.x" uglify-js "3.3.x" -html-webpack-plugin@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.0.4.tgz#498c10f40f99a339fbf3d87c5a80acf8cbea8e9b" +html-webpack-plugin@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.0.6.tgz#d35b0452aae129a8a9f3fac44a169a625d8cf3fa" dependencies: html-minifier "^3.2.3" loader-utils "^0.2.16" @@ -6149,6 +6149,13 @@ schema-utils@^0.4.0, schema-utils@^0.4.2, schema-utils@^0.4.3: ajv "^5.0.0" ajv-keywords "^2.1.0" +schema-utils@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -6641,12 +6648,12 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -style-loader@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.2.tgz#851b373c187890331776e9cde359eea9c95ecd00" +style-loader@^0.20.3: + version "0.20.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.3.tgz#ebef06b89dec491bcb1fdb3452e913a6fd1c10c4" dependencies: loader-utils "^1.1.0" - schema-utils "^0.4.3" + schema-utils "^0.4.5" stylus-lookup@^1.0.1: version "1.0.2" @@ -7151,13 +7158,13 @@ vue-hot-reload-api@^2.2.0: version "2.2.4" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.2.4.tgz#683bd1d026c0d3b3c937d5875679e9a87ec6cd8f" -vue-lazyload@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/vue-lazyload/-/vue-lazyload-1.2.1.tgz#baa7356bdc1483777fd16007fbe2dddc16e98298" +vue-lazyload@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/vue-lazyload/-/vue-lazyload-1.2.2.tgz#73335ed32db25264f5957df1a21d277823423743" -vue-loader@^14.1.1: - version "14.1.1" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-14.1.1.tgz#331f197fcea790d6b8662c29b850806e7eb29342" +vue-loader@^14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-14.2.1.tgz#3ace19f98187b1fa9e0709defa963a0a2396b6b3" dependencies: consolidate "^0.14.0" hash-sum "^1.0.2" @@ -7197,9 +7204,9 @@ vue-style-loader@^4.0.2: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@^2.5.13: - version "2.5.13" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.13.tgz#12a2aa0ecd6158ac5e5f14d294b0993f399c3d38" +vue-template-compiler@^2.5.15: + version "2.5.15" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.15.tgz#cc004097e37167be8b85ea22ab2840d8e8cca1c0" dependencies: de-indent "^1.0.2" he "^1.1.0" @@ -7208,9 +7215,9 @@ vue-template-es2015-compiler@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18" -vue@^2.5.13: - version "2.5.13" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.13.tgz#95bd31e20efcf7a7f39239c9aa6787ce8cf578e1" +vue@^2.5.15: + version "2.5.15" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.15.tgz#fdb67861dde967cd8d1b53116380f2f269b45202" watchpack@^1.4.0: version "1.4.0"