Commit 9c5a713f authored by baiyaaaaa's avatar baiyaaaaa Committed by GitHub

Merge pull request #1039 from Leopoldthecoder/loading-css

Loading: remove unnecessary inline styles
parents 29975ee5 940b189b
import Vue from 'vue'; import Vue from 'vue';
import { addClass, removeClass } from 'wind-dom/src/class';
let Spinner = Vue.extend(require('./spinner.vue')); let Spinner = Vue.extend(require('./spinner.vue'));
exports.install = Vue => { exports.install = Vue => {
...@@ -9,14 +10,14 @@ exports.install = Vue => { ...@@ -9,14 +10,14 @@ exports.install = Vue => {
el.originalPosition = document.body.style.position; el.originalPosition = document.body.style.position;
el.originalOverflow = document.body.style.overflow; el.originalOverflow = document.body.style.overflow;
['top', 'right', 'bottom', 'left'].forEach(property => { addClass(el.mask, 'is-fullscreen');
el.maskStyle[property] = '0'; addClass(el.spinner, 'is-fullscreen');
});
el.maskStyle.position = 'fixed';
el.spinnerStyle.position = 'fixed';
insertDom(document.body, el, binding); insertDom(document.body, el, binding);
} else { } else {
removeClass(el.mask, 'is-fullscreen');
removeClass(el.spinner, 'is-fullscreen');
if (binding.modifiers.body) { if (binding.modifiers.body) {
el.originalPosition = document.body.style.position; el.originalPosition = document.body.style.position;
...@@ -31,11 +32,6 @@ exports.install = Vue => { ...@@ -31,11 +32,6 @@ exports.install = Vue => {
insertDom(document.body, el, binding); insertDom(document.body, el, binding);
} else { } else {
el.originalPosition = el.style.position; el.originalPosition = el.style.position;
['top', 'right', 'bottom', 'left'].forEach(property => {
el.maskStyle[property] = '0';
});
insertDom(el, el, binding); insertDom(el, el, binding);
} }
} }
...@@ -63,10 +59,6 @@ exports.install = Vue => { ...@@ -63,10 +59,6 @@ exports.install = Vue => {
directive.mask.style[property] = directive.maskStyle[property]; directive.mask.style[property] = directive.maskStyle[property];
}); });
Object.keys(directive.spinnerStyle).forEach(property => {
directive.spinner.style[property] = directive.spinnerStyle[property];
});
if (directive.originalPosition !== 'absolute') { if (directive.originalPosition !== 'absolute') {
parent.style.position = 'relative'; parent.style.position = 'relative';
} }
...@@ -87,12 +79,7 @@ exports.install = Vue => { ...@@ -87,12 +79,7 @@ exports.install = Vue => {
bind: function(el, binding) { bind: function(el, binding) {
el.mask = document.createElement('div'); el.mask = document.createElement('div');
el.mask.className = 'el-loading-mask'; el.mask.className = 'el-loading-mask';
el.maskStyle = { el.maskStyle = {};
position: 'absolute',
zIndex: '10000',
backgroundColor: 'rgba(255, 255, 255, .9)',
margin: '0'
};
let spinner = new Spinner({ let spinner = new Spinner({
data: { data: {
...@@ -102,9 +89,6 @@ exports.install = Vue => { ...@@ -102,9 +89,6 @@ exports.install = Vue => {
}); });
spinner.$mount(el.mask); spinner.$mount(el.mask);
el.spinner = spinner.$el; el.spinner = spinner.$el;
el.spinnerStyle = {
position: 'absolute'
};
toggleLoading(el, binding); toggleLoading(el, binding);
}, },
......
@charset "UTF-8"; @charset "UTF-8";
@import "./common/var.css"; @import "./common/var.css";
.el-loading-spinner { @component-namespace el {
top: 50%; @b loading-mask {
margin-top: calc(- var(--loading-spinner-size) / 2); position: absolute;
width: 100%; z-index: 10000;
text-align: center; background-color: rgba(255, 255, 255, .9);
margin: 0;
.el-loading-text { top: 0;
color: var(--color-primary); right: 0;
margin: 3px 0; bottom: 0;
font-size: 14px; left: 0;
}
.circular { @when fullscreen {
width: var(--loading-spinner-size); position: fixed;
animation: rotate 2s linear infinite; }
} }
.path { @b loading-spinner {
stroke-dasharray: 1, 100; top: 50%;
stroke-dashoffset: 0; margin-top: calc(- var(--loading-spinner-size) / 2);
stroke-width: 2; width: 100%;
stroke: var(--color-primary); text-align: center;
animation: dash 1.5s ease-in-out infinite; position: absolute;
stroke-linecap: round;
}
@when full-screen { @when fullscreen {
margin-top: calc(- var(--loading-fullscreen-spinner-size) / 2); position: fixed;
}
.el-loading-text {
color: var(--color-primary);
margin: 3px 0;
font-size: 14px;
}
.circular { .circular {
width: var(--loading-fullscreen-spinner-size); width: var(--loading-spinner-size);
animation: rotate 2s linear infinite;
}
.path {
animation: dash 1.5s ease-in-out infinite;
stroke-dasharray: 1, 100;
stroke-dashoffset: 0;
stroke-width: 2;
stroke: var(--color-primary);
stroke-linecap: round;
}
@when full-screen {
margin-top: calc(- var(--loading-fullscreen-spinner-size) / 2);
.circular {
width: var(--loading-fullscreen-spinner-size);
}
} }
} }
} }
......
...@@ -106,9 +106,7 @@ describe('Loading', () => { ...@@ -106,9 +106,7 @@ describe('Loading', () => {
Vue.nextTick(() => { Vue.nextTick(() => {
const mask = document.querySelector('.el-loading-mask'); const mask = document.querySelector('.el-loading-mask');
expect(mask.parentNode === document.body).to.true; expect(mask.parentNode === document.body).to.true;
expect(mask.style.left).to.equal('0px'); expect(mask.classList.contains('is-fullscreen')).to.true;
expect(mask.style.right).to.equal('0px');
expect(mask.style.position).to.equal('fixed');
vm.loading = false; vm.loading = false;
document.body.removeChild(mask); document.body.removeChild(mask);
document.body.removeChild(vm.$el); document.body.removeChild(vm.$el);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment