Commit a68c11a56566bcfdc5fd669997f640aa644a74c0

Authored by 梁灏
1 parent 825ed580

support Nuxt.js

src/components/base/popper.js
1 /** 1 /**
2 * https://github.com/freeze-component/vue-popper 2 * https://github.com/freeze-component/vue-popper
3 * */ 3 * */
4 -import Popper from 'popper.js'; 4 +import Vue from 'vue';
  5 +const isServer = Vue.prototype.$isServer;
  6 +const Popper = isServer ? function() {} : require('popper.js'); // eslint-disable-line
5 7
6 export default { 8 export default {
7 props: { 9 props: {
@@ -62,6 +64,7 @@ export default { @@ -62,6 +64,7 @@ export default {
62 }, 64 },
63 methods: { 65 methods: {
64 createPopper() { 66 createPopper() {
  67 + if (isServer) return;
65 if (!/^(top|bottom|left|right)(-start|-end)?$/g.test(this.placement)) { 68 if (!/^(top|bottom|left|right)(-start|-end)?$/g.test(this.placement)) {
66 return; 69 return;
67 } 70 }
@@ -87,19 +90,23 @@ export default { @@ -87,19 +90,23 @@ export default {
87 }); 90 });
88 }, 91 },
89 updatePopper() { 92 updatePopper() {
  93 + if (isServer) return;
90 this.popperJS ? this.popperJS.update() : this.createPopper(); 94 this.popperJS ? this.popperJS.update() : this.createPopper();
91 }, 95 },
92 doDestroy() { 96 doDestroy() {
  97 + if (isServer) return;
93 if (this.visible) return; 98 if (this.visible) return;
94 this.popperJS.destroy(); 99 this.popperJS.destroy();
95 this.popperJS = null; 100 this.popperJS = null;
96 }, 101 },
97 destroyPopper() { 102 destroyPopper() {
  103 + if (isServer) return;
98 if (this.popperJS) { 104 if (this.popperJS) {
99 this.resetTransformOrigin(this.popperJS); 105 this.resetTransformOrigin(this.popperJS);
100 } 106 }
101 }, 107 },
102 resetTransformOrigin(popper) { 108 resetTransformOrigin(popper) {
  109 + if (isServer) return;
103 let placementMap = {top: 'bottom', bottom: 'top', left: 'right', right: 'left'}; 110 let placementMap = {top: 'bottom', bottom: 'top', left: 'right', right: 'left'};
104 let placement = popper._popper.getAttribute('x-placement').split('-')[0]; 111 let placement = popper._popper.getAttribute('x-placement').split('-')[0];
105 let origin = placementMap[placement]; 112 let origin = placementMap[placement];
@@ -107,6 +114,7 @@ export default { @@ -107,6 +114,7 @@ export default {
107 } 114 }
108 }, 115 },
109 beforeDestroy() { 116 beforeDestroy() {
  117 + if (isServer) return;
110 if (this.popperJS) { 118 if (this.popperJS) {
111 this.popperJS.destroy(); 119 this.popperJS.destroy();
112 } 120 }
src/components/select/dropdown.vue
@@ -2,8 +2,10 @@ @@ -2,8 +2,10 @@
2 <div class="ivu-select-dropdown" :style="styles"><slot></slot></div> 2 <div class="ivu-select-dropdown" :style="styles"><slot></slot></div>
3 </template> 3 </template>
4 <script> 4 <script>
  5 + import Vue from 'vue';
  6 + const isServer = Vue.prototype.$isServer;
5 import { getStyle } from '../../utils/assist'; 7 import { getStyle } from '../../utils/assist';
6 - import Popper from 'popper.js'; 8 + const Popper = isServer ? function() {} : require('popper.js'); // eslint-disable-line
7 9
8 export default { 10 export default {
9 name: 'Drop', 11 name: 'Drop',
@@ -28,6 +30,7 @@ @@ -28,6 +30,7 @@
28 }, 30 },
29 methods: { 31 methods: {
30 update () { 32 update () {
  33 + if (isServer) return;
31 if (this.popper) { 34 if (this.popper) {
32 this.$nextTick(() => { 35 this.$nextTick(() => {
33 this.popper.update(); 36 this.popper.update();
src/utils/assist.js
  1 +import Vue from 'vue';
  2 +const isServer = Vue.prototype.$isServer;
1 // 判断参数是否是其中之一 3 // 判断参数是否是其中之一
2 export function oneOf (value, validList) { 4 export function oneOf (value, validList) {
3 for (let i = 0; i < validList.length; i++) { 5 for (let i = 0; i < validList.length; i++) {
@@ -52,7 +54,7 @@ export function getScrollBarSize (fresh) { @@ -52,7 +54,7 @@ export function getScrollBarSize (fresh) {
52 } 54 }
53 55
54 // watch DOM change 56 // watch DOM change
55 -export const MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver || false; 57 +export const MutationObserver = isServer ? false : window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver || false;
56 58
57 const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; 59 const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
58 const MOZ_HACK_REGEXP = /^moz([A-Z])/; 60 const MOZ_HACK_REGEXP = /^moz([A-Z])/;
1 import Vue from 'vue'; 1 import Vue from 'vue';
2 -  
3 const isServer = Vue.prototype.$isServer; 2 const isServer = Vue.prototype.$isServer;
4 3
5 /* istanbul ignore next */ 4 /* istanbul ignore next */