diff --git a/CHANGELOG.en-US.md b/CHANGELOG.en-US.md index c017b5235..4ddb7ba3f 100644 --- a/CHANGELOG.en-US.md +++ b/CHANGELOG.en-US.md @@ -1,5 +1,28 @@ ## Changelog +### 1.4.6 + +*2017-09-27* + +- Fixed Slider's button jumping to previous position when clicked, #7190 +- Fixed Tooltip `disabled` regression, #7198 +- Fixed Cascader not correctly filter options when `props` is set, #7225 +- Fixed an error when range typed DatePicker has an initial value of `[]`, #7233 + +### 1.4.5 + +*2017-09-24* + +- Rate's `colors` attribute now supports dynamic updates, #6872 @lukaszb +- Fixed Tree not highlighting tree node whose value of `node-key` is 0, #6917 +- Fixed initially disabled Dropdown not showing menu when it's enabled, #6969 +- Added `hide-after` attribute for Tooltip, #6401 @ryatziv +- Fixed cancel button of TimePicker not cancel picked value when clicked, #7028 +- Added `selectWhenUnmatched` attribute for Autocomplete, #6428 @ryatziv +- Fixed when `beforeUpload` of a file returns false, other files are aborted by Upload, #7077 +- Fixed disabled dates of DatePicker in month view and year view not displayed correctly in the west hemisphere, #7114 +- `default-value` of DatePicker now supports daterange type, #7073 @wacky6 + ### 1.4.4 *2017-09-05* diff --git a/CHANGELOG.zh-CN.md b/CHANGELOG.zh-CN.md index 765e14ec3..37418a7e7 100644 --- a/CHANGELOG.zh-CN.md +++ b/CHANGELOG.zh-CN.md @@ -1,5 +1,26 @@ ## 更新日志 +### 1.4.6 +*2017-09-27* + +- 修复点击 Slider 的按钮会使其返回上一个位置的问题,#7190 +- 修复 Tooltip 无法正确切换 `disabled` 的问题,#7198 +- 修复 Cascader 的过滤功能在配置了 `props` 的情况下的异常问题,#7225 +- 修复 DatePicker 的范围选择在初始值为空数组时会报错的问题,#7233 + +### 1.4.5 +*2017-09-24* + +- Rate 的 `colors` 属性现在可以动态更新了,#6872 @lukaszb +- 修复 Tree 无法高亮 `node-key` 值为 0 的节点的问题,#6917 +- 修复初始状态被禁用的 Dropdown 在取消禁用后无法弹出下拉菜单的问题,#6969 +- Tooltip 新增 `hide-after` 属性,#6401 @ryatziv +- 修复 TimePicker 取消按钮无法正确取消所选值的问题,#7028 +- Autocomplete 新增 `selectWhenUnmatched` 属性,#6428 @ryatziv +- 修复 Upload 中某个文件的 `beforeUpload` 返回 `false` 时会错误地取消其他文件上传的问题,#7077 +- 修复 DatePicker 在西半球使用时月视图和年视图禁用日期显示错误的问题,#7114 +- DatePicker 的 `default-value` 属性支持 daterange 模式,#7073 @wacky6 + ### 1.4.4 *2017-09-05* diff --git a/README.md b/README.md index 4e587cd4a..7fd716446 100644 --- a/README.md +++ b/README.md @@ -18,13 +18,9 @@ > A Vue.js 2.0 UI Toolkit for Web. -

- Special thanks to the generous sponsorship by: -

- - - -

+ + Sponsor + ## Links - [Home Page](http://element.eleme.io/) diff --git a/examples/assets/images/button-d-cn.png b/examples/assets/images/button-d-cn.png new file mode 100644 index 000000000..a3afa111a Binary files /dev/null and b/examples/assets/images/button-d-cn.png differ diff --git a/examples/assets/images/button-d-en.png b/examples/assets/images/button-d-en.png new file mode 100644 index 000000000..521047418 Binary files /dev/null and b/examples/assets/images/button-d-en.png differ diff --git a/examples/assets/images/button-l-cn.png b/examples/assets/images/button-l-cn.png new file mode 100644 index 000000000..e334448d8 Binary files /dev/null and b/examples/assets/images/button-l-cn.png differ diff --git a/examples/assets/images/button-l-en.png b/examples/assets/images/button-l-en.png new file mode 100644 index 000000000..d368df9dd Binary files /dev/null and b/examples/assets/images/button-l-en.png differ diff --git a/examples/assets/images/dialog-close.png b/examples/assets/images/dialog-close.png new file mode 100644 index 000000000..c810eafe4 Binary files /dev/null and b/examples/assets/images/dialog-close.png differ diff --git a/examples/components/side-nav.vue b/examples/components/side-nav.vue index 7fbc9ad1f..ea47e2036 100644 --- a/examples/components/side-nav.vue +++ b/examples/components/side-nav.vue @@ -99,6 +99,10 @@ line-height: 26px; margin-top: 15px; } + + #code-sponsor-widget { + margin: 50px 0 0 -20px; + } } .nav-dropdown-list { width: 120px; @@ -154,6 +158,7 @@ +
<% } %> diff --git a/package.json b/package.json index daef8ff6c..b8d93b351 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "element-ui", - "version": "1.4.4", + "version": "1.4.6", "description": "A Component Library for Vue.js.", "main": "lib/element-ui.common.js", "files": [ diff --git a/packages/autocomplete/src/autocomplete-suggestions.vue b/packages/autocomplete/src/autocomplete-suggestions.vue index c202c4d25..35c166921 100644 --- a/packages/autocomplete/src/autocomplete-suggestions.vue +++ b/packages/autocomplete/src/autocomplete-suggestions.vue @@ -41,7 +41,6 @@ options: { default() { return { - forceAbsolute: true, gpuAcceleration: false }; } diff --git a/packages/cascader/src/menu.vue b/packages/cascader/src/menu.vue index 706754164..6785b78ae 100644 --- a/packages/cascader/src/menu.vue +++ b/packages/cascader/src/menu.vue @@ -10,9 +10,13 @@ arr.forEach(item => { const itemCopy = {}; configurableProps.forEach(prop => { - const propName = props[prop] || prop; - const value = item[propName]; - if (value !== undefined) itemCopy[propName] = value; + let name = props[prop]; + let value = item[name]; + if (value === undefined) { + name = prop; + value = item[name]; + } + if (value !== undefined) itemCopy[name] = value; }); if (Array.isArray(item[childrenProp])) { itemCopy[childrenProp] = copyArray(item[childrenProp], props); diff --git a/packages/date-picker/src/panel/date-range.vue b/packages/date-picker/src/panel/date-range.vue index c2cb142e2..4cb4ed2b0 100644 --- a/packages/date-picker/src/panel/date-range.vue +++ b/packages/date-picker/src/panel/date-range.vue @@ -155,7 +155,7 @@ const calcDefaultValue = defaultValue => { if (Array.isArray(defaultValue)) { - return new Date(defaultValue[0]); + return defaultValue[0] ? new Date(defaultValue[0]) : new Date(); } else { return new Date(defaultValue); } diff --git a/packages/date-picker/src/panel/date.vue b/packages/date-picker/src/panel/date.vue index d40689c2b..ec8c9d4e3 100644 --- a/packages/date-picker/src/panel/date.vue +++ b/packages/date-picker/src/panel/date.vue @@ -496,7 +496,7 @@ dateFormat() { if (this.format) { - return this.format.replace('HH:mm', '').replace(':ss', '').trim(); + return this.format.replace('HH', '').replace(':mm', '').replace(':ss', '').trim(); } else { return 'yyyy-MM-dd'; } diff --git a/packages/form/src/form-item.vue b/packages/form/src/form-item.vue index 9126af929..932796b00 100644 --- a/packages/form/src/form-item.vue +++ b/packages/form/src/form-item.vue @@ -217,11 +217,11 @@ }, getRules() { var formRules = this.form.rules; - var selfRuels = this.rules; + var selfRules = this.rules; formRules = formRules ? formRules[this.prop] : []; - return [].concat(selfRuels || formRules || []); + return [].concat(selfRules || formRules || []); }, getFilteredRule(trigger) { var rules = this.getRules(); diff --git a/packages/loading/src/directive.js b/packages/loading/src/directive.js index 61548ff59..6fe2aef59 100644 --- a/packages/loading/src/directive.js +++ b/packages/loading/src/directive.js @@ -1,10 +1,10 @@ import Vue from 'vue'; import { addClass, removeClass, getStyle } from 'element-ui/src/utils/dom'; -let Mask = Vue.extend(require('./loading.vue')); +const Mask = Vue.extend(require('./loading.vue')); exports.install = Vue => { if (Vue.prototype.$isServer) return; - let toggleLoading = (el, binding) => { + const toggleLoading = (el, binding) => { if (binding.value) { Vue.nextTick(() => { if (binding.modifiers.fullscreen) { @@ -20,7 +20,7 @@ exports.install = Vue => { el.originalPosition = getStyle(document.body, 'position'); ['top', 'left'].forEach(property => { - let scroll = property === 'top' ? 'scrollTop' : 'scrollLeft'; + const scroll = property === 'top' ? 'scrollTop' : 'scrollLeft'; el.maskStyle[property] = el.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] + 'px'; }); ['height', 'width'].forEach(property => { @@ -51,7 +51,7 @@ exports.install = Vue => { } } }; - let insertDom = (parent, el, binding) => { + const insertDom = (parent, el, binding) => { if (!el.domVisible && getStyle(el, 'display') !== 'none' && getStyle(el, 'visibility') !== 'hidden') { Object.keys(el.maskStyle).forEach(property => { el.mask.style[property] = el.maskStyle[property]; @@ -75,7 +75,7 @@ exports.install = Vue => { Vue.directive('loading', { bind: function(el, binding) { - let mask = new Mask({ + const mask = new Mask({ el: document.createElement('div'), data: { text: el.getAttribute('element-loading-text'), diff --git a/packages/select/src/select-dropdown.vue b/packages/select/src/select-dropdown.vue index 80f645f09..516e152dc 100644 --- a/packages/select/src/select-dropdown.vue +++ b/packages/select/src/select-dropdown.vue @@ -29,7 +29,6 @@ popperOptions: { default() { return { - forceAbsolute: true, gpuAcceleration: false }; } diff --git a/packages/slider/src/button.vue b/packages/slider/src/button.vue index 999e252d6..6fc49aac7 100644 --- a/packages/slider/src/button.vue +++ b/packages/slider/src/button.vue @@ -152,6 +152,7 @@ this.startX = event.clientX; } this.startPosition = parseFloat(this.currentPosition); + this.newPosition = this.startPosition; }, onDragging(event) { diff --git a/packages/theme-default/package.json b/packages/theme-default/package.json new file mode 100644 index 000000000..e69de29bb diff --git a/packages/tooltip/src/main.js b/packages/tooltip/src/main.js index 2a9fe2c90..2d9b942c1 100644 --- a/packages/tooltip/src/main.js +++ b/packages/tooltip/src/main.js @@ -48,8 +48,7 @@ export default { data() { return { - timeoutPending: null, - handlerAdded: false + timeoutPending: null }; }, @@ -94,11 +93,10 @@ export default { const nativeOn = vnode.data.nativeOn = vnode.data.nativeOn || {}; data.staticClass = this.concatClass(data.staticClass, 'el-tooltip'); - if (this.handlerAdded) return vnode; - on.mouseenter = this.addEventHandle(on.mouseenter, () => { this.setExpectedState(true); this.handleShowPopper(); }); - on.mouseleave = this.addEventHandle(on.mouseleave, () => { this.setExpectedState(false); this.debounceClose(); }); - nativeOn.mouseenter = this.addEventHandle(nativeOn.mouseenter, () => { this.setExpectedState(true); this.handleShowPopper(); }); - nativeOn.mouseleave = this.addEventHandle(nativeOn.mouseleave, () => { this.setExpectedState(false); this.debounceClose(); }); + on.mouseenter = this.addEventHandle(on.mouseenter, this.show); + on.mouseleave = this.addEventHandle(on.mouseleave, this.hide); + nativeOn.mouseenter = this.addEventHandle(nativeOn.mouseenter, this.show); + nativeOn.mouseleave = this.addEventHandle(nativeOn.mouseleave, this.hide); return vnode; }, @@ -108,9 +106,24 @@ export default { }, methods: { + show() { + this.setExpectedState(true); + this.handleShowPopper(); + }, + + hide() { + this.setExpectedState(false); + this.debounceClose(); + }, + addEventHandle(old, fn) { - this.handlerAdded = true; - return old ? Array.isArray(old) ? old.concat(fn) : [old, fn] : fn; + if (!old) { + return fn; + } else if (Array.isArray(old)) { + return old.indexOf(fn) > -1 ? old : old.concat(fn); + } else { + return old === fn ? old : [old, fn]; + } }, concatClass(a, b) { diff --git a/packages/tree/src/model/node.js b/packages/tree/src/model/node.js index 3fa8355fe..c970b88ea 100644 --- a/packages/tree/src/model/node.js +++ b/packages/tree/src/model/node.js @@ -54,7 +54,8 @@ const getPropertyFromData = function(node, prop) { } else if (typeof config === 'string') { return data[config]; } else if (typeof config === 'undefined') { - return ''; + const dataProp = data[prop]; + return dataProp === undefined ? '' : dataProp; } }; diff --git a/src/index.js b/src/index.js index 705675c0d..b2c1c78fa 100644 --- a/src/index.js +++ b/src/index.js @@ -168,7 +168,7 @@ if (typeof window !== 'undefined' && window.Vue) { }; module.exports = { - version: '1.4.4', + version: '1.4.6', locale: locale.use, i18n: locale.i18n, install,