diff --git a/build/bin/build-entry.js b/build/bin/build-entry.js index 6294590f1..34d111e49 100644 --- a/build/bin/build-entry.js +++ b/build/bin/build-entry.js @@ -34,8 +34,7 @@ export { }; export default { install, - version, -{{list}} + version }; `; diff --git a/components.json b/components.json index dd4b25daa..705772a32 100644 --- a/components.json +++ b/components.json @@ -36,5 +36,6 @@ "uploader": "./packages/uploader/index.js", "swipe": "./packages/swipe/index.js", "swipe-item": "./packages/swipe-item/index.js", - "datetime-picker": "./packages/datetime-picker/index.js" + "datetime-picker": "./packages/datetime-picker/index.js", + "notice-bar": "./packages/notice-bar/index.js" } diff --git a/docs/examples-docs/notice-bar.md b/docs/examples-docs/notice-bar.md new file mode 100644 index 000000000..eaccdde97 --- /dev/null +++ b/docs/examples-docs/notice-bar.md @@ -0,0 +1,69 @@ + + +## NoticeBar 通告栏 + +### 使用指南 +``` javascript +import { NoticeBar } from 'vant'; + +Vue.component(NoticeBar.name, NoticeBar); +``` + +### 代码演示 + +#### 基础用法 + +:::demo 基础用法 +```html + +``` +::: + +#### 禁用滚动 +文字内容多于一行时,可通过`scrollable`参数控制是否开启滚动 + +:::demo 禁用滚动 +```html + + 足协杯战线连续第2年上演广州德比战,上赛季半决赛上恒大以两回合5-3的总比分淘汰富力。 + +``` +::: + +#### 通告栏模式 +默认模式为空,支持`closeable`和`link`。 + +:::demo 通告栏模式 +```html + + + 足协杯战线连续第2年上演广州德比战,上赛季半决赛上恒大以两回合5-3的总比分淘汰富力。 + + + + + 足协杯战线连续第2年上演广州德比战,上赛季半决赛上恒大以两回合5-3的总比分淘汰富力。 + +``` +::: + +### API + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|-----------|-----------|-----------|-------------|-------------| +| mode | 通告栏模式 | String | `''` | `closeable` `link` | +| delay | 动画延迟时间,单位秒 | Number | `1` | | +| scrollable | 是否滚动 | Boolean | `true` | | +| speed | 滚动速率,单位px | Number | `40` | | + +### Event + +| 事件名 | 说明 | 参数 | +|-----------|-----------|-----------| +| click | 点击事件回调 | - | diff --git a/docs/src/ExamplesDocsApp.vue b/docs/src/ExamplesDocsApp.vue index c8753bf7f..85337be4a 100644 --- a/docs/src/ExamplesDocsApp.vue +++ b/docs/src/ExamplesDocsApp.vue @@ -7,7 +7,6 @@ diff --git a/packages/vant-css/src/index.css b/packages/vant-css/src/index.css index d18b5a74d..6a7bfa8df 100644 --- a/packages/vant-css/src/index.css +++ b/packages/vant-css/src/index.css @@ -30,3 +30,4 @@ @import './toast.css'; @import './uploader.css'; @import './swipe.css'; +@import './notice-bar.css'; diff --git a/packages/vant-css/src/notice-bar.css b/packages/vant-css/src/notice-bar.css new file mode 100644 index 000000000..67f912a1a --- /dev/null +++ b/packages/vant-css/src/notice-bar.css @@ -0,0 +1,36 @@ +@import './common/var.css'; + +.van-notice-bar { + color: #f60; + padding: 9px 10px; + font-size: 12px; + line-height: 1.5; + background-color: #fff7cc; + + &--withicon { + position: relative; + padding-right: 30px; + } + + &__icon { + top: 10px; + right: 10px; + position: absolute; + font-size: 15px; + line-height: 1; + cursor: pointer; + } + + &__content-wrap { + height: 18px; + overflow: hidden; + position: relative; + } + + &__content { + position: absolute; + white-space: nowrap; + transition-property: left; + transition-timing-function: linear; + } +} diff --git a/test/unit/components/notice-bar.vue b/test/unit/components/notice-bar.vue new file mode 100644 index 000000000..7eed57545 --- /dev/null +++ b/test/unit/components/notice-bar.vue @@ -0,0 +1,16 @@ + + + + diff --git a/test/unit/get-webpack-conf.js b/test/unit/get-webpack-conf.js index 6d0818692..3861fd399 100644 --- a/test/unit/get-webpack-conf.js +++ b/test/unit/get-webpack-conf.js @@ -75,7 +75,21 @@ function getWebpackConfig(testFileName) { ] }, { - test: /\.vue$/, + test: /test\/unit\/components\/.*\.vue$|packages\/swipe\/.*\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + loaders: { + css: ['style-loader', 'css-loader', 'postcss-loader'] + } + } + } + ] + }, + { + test: /packages\/.*\.vue$/, + exclude: /packages\/swipe\/.*\.vue$/, use: [ { loader: 'vue-loader', diff --git a/test/unit/index.js b/test/unit/index.js index 9f20bac30..cac038bbe 100644 --- a/test/unit/index.js +++ b/test/unit/index.js @@ -13,4 +13,4 @@ if (process.env.TEST_FILE) { }); } else { testsReq.keys().forEach(testsReq); -} \ No newline at end of file +} diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js index 7c8a89d96..0056f945a 100644 --- a/test/unit/karma.conf.js +++ b/test/unit/karma.conf.js @@ -14,7 +14,8 @@ module.exports = function(config) { reporters: ['spec', 'coverage'], files: ['./index.js'], preprocessors: { - './index.js': ['webpack', 'sourcemap'] + './index.js': ['webpack', 'sourcemap'], + 'test/unit/!(components)/**/*.vue': ['coverage'] }, webpack: getWebpackConfig(getTestFileName()), webpackMiddleware: { diff --git a/test/unit/specs/cell-swipe.spec.js b/test/unit/specs/cell-swipe.spec.js index 89e5ca833..ed142b25f 100644 --- a/test/unit/specs/cell-swipe.spec.js +++ b/test/unit/specs/cell-swipe.spec.js @@ -7,14 +7,14 @@ const defaultProps = { leftWidth: 100, rightWidth: 100 } -} +}; describe('CellSwipe', () => { let wrapper; afterEach(() => { wrapper && wrapper.destroy(); }); - + it('render left or right part when has width', () => { wrapper = mount(CellSwipe, defaultProps); expect(wrapper.find('.van-cell-swipe__left').length).to.equal(1); @@ -97,7 +97,7 @@ describe('CellSwipe', () => { triggerTouch(wrapper, 'touchstart', 0, 0); triggerTouch(wrapper, 'touchmove', 1, 0); - + wrapper.vm.$nextTick(() => { expect(wrapper.vm.offset).to.equal(0); expect(wrapper.vm.opened).to.be.false; diff --git a/test/unit/specs/notice-bar.spec.js b/test/unit/specs/notice-bar.spec.js new file mode 100644 index 000000000..87c796e44 --- /dev/null +++ b/test/unit/specs/notice-bar.spec.js @@ -0,0 +1,61 @@ +import NoticeBar from '../components/notice-bar'; +import { mount } from 'avoriaz'; + +describe('NoticeBar', () => { + let wrapper; + afterEach(() => { + wrapper && wrapper.destroy(); + }); + + it('create a notice-bar', () => { + wrapper = mount(NoticeBar, { + propsData: {}, + attachToDocument: true + }); + + expect(wrapper.find('.van-notice-bar').length).to.equal(1); + }); + + it('mode closeable', () => { + wrapper = mount(NoticeBar, { + propsData: { + mode: 'closeable' + }, + attachToDocument: true + }); + + const icon = wrapper.find('.van-icon-close'); + expect(icon.length).to.equal(1); + + icon[0].trigger('click'); + expect(wrapper.hasStyle('display', 'none')); + }); + + it('mode link', () => { + wrapper = mount(NoticeBar, { + propsData: { + mode: 'link' + }, + attachToDocument: true + }); + + expect(wrapper.find('.van-icon-arrow').length).to.equal(1); + }); + + it('notice-bar transitionend', (done) => { + wrapper = mount(NoticeBar, { + propsData: { + text: '足协杯战线连续第2年上演广州德比战', + speed: 1000, + delay: 0 + }, + attachToDocument: true + }); + + const content = wrapper.find('.van-notice-bar__content')[0]; + setTimeout(() => { + expect(content.hasStyle('transition-delay', '0s')).to.be.true; + done(); + }, 500); + }); +}); diff --git a/yarn.lock b/yarn.lock index 28f96953e..65dac4f42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4819,6 +4819,16 @@ markdown-it@^8.3.2: mdurl "^1.0.1" uc.micro "^1.0.3" +markdown-it@^8.4.0: + version "8.4.0" + resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz#e2400881bf171f7018ed1bd9da441dac8af6306d" + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.3" + math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" @@ -6036,7 +6046,7 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.2.3" -postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.2, postcss@^6.0.3, postcss@^6.0.6, postcss@^6.0.8, postcss@^6.0.9: +postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.2, postcss@^6.0.3, postcss@^6.0.6, postcss@^6.0.9: version "6.0.9" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.9.tgz#54819766784a51c65b1ec4d54c2f93765438c35a" dependencies: @@ -6044,6 +6054,14 @@ postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.2, postcss@^6.0.3, postcss@^6.0.6, source-map "^0.5.6" supports-color "^4.2.1" +postcss@^6.0.10: + version "6.0.10" + resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.10.tgz#c311b89734483d87a91a56dc9e53f15f4e6e84e4" + dependencies: + chalk "^2.1.0" + source-map "^0.5.7" + supports-color "^4.2.1" + precss@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/precss/-/precss-2.0.0.tgz#7f567e3318e06d44c8fdbf9e58452e8358bf4b71" @@ -6848,6 +6866,10 @@ source-map@^0.1.41: dependencies: amdefine ">=0.0.4" +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" @@ -7937,9 +7959,9 @@ yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" -zan-doc@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/zan-doc/-/zan-doc-0.2.2.tgz#ebf8ffda5bd3cf9277cc3e59c48476a3fbf84d9f" +zan-doc@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/zan-doc/-/zan-doc-0.2.5.tgz#4f82e1b75db1a348b57436cd1d4ffb607bc18562" dependencies: cheerio "0.22.0" decamelize "^1.2.0"