Commit a68c11a56566bcfdc5fd669997f640aa644a74c0

Authored by 梁灏
1 parent 825ed580

support Nuxt.js

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