Resolved #211 - New Component: BlockUI
parent
d859434b29
commit
1ef72bf163
|
@ -0,0 +1 @@
|
||||||
|
export * from './components/blockui/BlockUI';
|
|
@ -0,0 +1,2 @@
|
||||||
|
'use strict';
|
||||||
|
module.exports = require('./components/blockui/BlockUI.vue');
|
|
@ -136,6 +136,7 @@
|
||||||
<span>Misc</span>
|
<span>Misc</span>
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
|
<router-link to="/blockui">BlockUI</router-link>
|
||||||
<router-link to="/inplace">Inplace</router-link>
|
<router-link to="/inplace">Inplace</router-link>
|
||||||
<router-link to="/progressbar">ProgressBar</router-link>
|
<router-link to="/progressbar">ProgressBar</router-link>
|
||||||
<router-link to="/progressspinner">ProgressSpinner</router-link>
|
<router-link to="/progressspinner">ProgressSpinner</router-link>
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
import Vue, { VNode } from 'vue';
|
||||||
|
|
||||||
|
export declare class BlockUI extends Vue {
|
||||||
|
blocked?: boolean;
|
||||||
|
fullScreen?: boolean;
|
||||||
|
baseZIndex?: number;
|
||||||
|
autoZIndex?: boolean;
|
||||||
|
$emit(eventName: 'block'): this;
|
||||||
|
$emit(eventName: 'unblock'): this;
|
||||||
|
$slots: {
|
||||||
|
'': VNode[];
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
<template>
|
||||||
|
<div class="p-blockui-container">
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import DomHandler from '../utils/DomHandler';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
blocked: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
fullScreen: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
baseZIndex: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
autoZIndex: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mask: null,
|
||||||
|
mounted() {
|
||||||
|
if (this.blocked) {
|
||||||
|
this.block();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
blocked(newValue) {
|
||||||
|
if (newValue === true)
|
||||||
|
this.block();
|
||||||
|
else
|
||||||
|
this.unblock();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
block() {
|
||||||
|
if (this.fullScreen) {
|
||||||
|
this.mask = document.createElement('div');
|
||||||
|
this.mask.setAttribute('class', 'p-blockui p-component-overlay p-blockui-document');
|
||||||
|
document.body.appendChild(this.mask);
|
||||||
|
DomHandler.addClass(document.body, 'p-overflow-hidden');
|
||||||
|
document.activeElement.blur();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const target = this.$children ? this.$children[0]: null;
|
||||||
|
if (target) {
|
||||||
|
this.mask = document.createElement('div');
|
||||||
|
|
||||||
|
this.mask.setAttribute('class', 'p-blockui p-component-overlay');
|
||||||
|
target.$el.appendChild(this.mask);
|
||||||
|
target.$el.style.position = 'relative';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.mask && this.autoZIndex) {
|
||||||
|
this.mask.style.zIndex = String(this.baseZIndex + DomHandler.generateZIndex());
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$emit('block');
|
||||||
|
},
|
||||||
|
unblock() {
|
||||||
|
if (this.fullScreen) {
|
||||||
|
document.body.removeChild(this.mask);
|
||||||
|
DomHandler.removeClass(document.body, 'p-overflow-hidden');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.$children[0].$el.removeChild(this.mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$emit('unblock');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.p-blockui {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-blockui.p-component-overlay {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-blockui-document.p-component-overlay {
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -4,6 +4,7 @@ import router from './router';
|
||||||
import AutoComplete from './components/autocomplete/AutoComplete';
|
import AutoComplete from './components/autocomplete/AutoComplete';
|
||||||
import Accordion from './components/accordion/Accordion';
|
import Accordion from './components/accordion/Accordion';
|
||||||
import AccordionTab from './components/accordiontab/AccordionTab';
|
import AccordionTab from './components/accordiontab/AccordionTab';
|
||||||
|
import BlockUI from './components/blockui/BlockUI';
|
||||||
import Breadcrumb from './components/breadcrumb/Breadcrumb';
|
import Breadcrumb from './components/breadcrumb/Breadcrumb';
|
||||||
import Button from './components/button/Button';
|
import Button from './components/button/Button';
|
||||||
import Calendar from './components/calendar/Calendar';
|
import Calendar from './components/calendar/Calendar';
|
||||||
|
@ -90,6 +91,7 @@ Vue.config.productionTip = false;
|
||||||
Vue.component('Accordion', Accordion);
|
Vue.component('Accordion', Accordion);
|
||||||
Vue.component('AccordionTab', AccordionTab);
|
Vue.component('AccordionTab', AccordionTab);
|
||||||
Vue.component('AutoComplete', AutoComplete);
|
Vue.component('AutoComplete', AutoComplete);
|
||||||
|
Vue.component('BlockUI', BlockUI);
|
||||||
Vue.component('Breadcrumb', Breadcrumb);
|
Vue.component('Breadcrumb', Breadcrumb);
|
||||||
Vue.component('Button', Button);
|
Vue.component('Button', Button);
|
||||||
Vue.component('Calendar', Calendar);
|
Vue.component('Calendar', Calendar);
|
||||||
|
|
|
@ -41,6 +41,11 @@ export default new Router({
|
||||||
name: 'autocomplete',
|
name: 'autocomplete',
|
||||||
component: () => import('./views/autocomplete/AutoCompleteDemo.vue')
|
component: () => import('./views/autocomplete/AutoCompleteDemo.vue')
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/blockui',
|
||||||
|
name: 'blockui',
|
||||||
|
component: () => import('./views/blockui/BlockUIDemo.vue')
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/breadcrumb',
|
path: '/breadcrumb',
|
||||||
name: 'breadcrumb',
|
name: 'breadcrumb',
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="content-section introduction">
|
||||||
|
<div class="feature-intro">
|
||||||
|
<h1>BlockUI</h1>
|
||||||
|
<p>BlockUI can either block other components or the whole page.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content-section implementation">
|
||||||
|
<h3 class="first">Document</h3>
|
||||||
|
<BlockUI :blocked="blockedDocument" :fullScreen="true"></BlockUI>
|
||||||
|
|
||||||
|
<Button type="button" label="Block" @click="blockDocument()"></Button>
|
||||||
|
|
||||||
|
<h3>Panel</h3>
|
||||||
|
<Button type="button" label="Block" @click="blockPanel()"></Button>
|
||||||
|
<Button type="button" label="Unblock" @click="unblockPanel()"></Button>
|
||||||
|
|
||||||
|
<BlockUI :blocked="blockedPanel">
|
||||||
|
<Panel header="Godfather I" style="margin-top: 20px">
|
||||||
|
<p>The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding.
|
||||||
|
His beloved son Michael has just come home from the war, but does not intend to become part of his father's business.
|
||||||
|
Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family,
|
||||||
|
kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.</p>
|
||||||
|
</Panel>
|
||||||
|
</BlockUI>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<BlockUIDoc />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BlockUIDoc from './BlockUIDoc';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
blockedPanel: false,
|
||||||
|
blockedDocument: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
blockDocument() {
|
||||||
|
this.blockedDocument = true;
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
this.blockedDocument = false;
|
||||||
|
}, 3000);
|
||||||
|
},
|
||||||
|
blockPanel() {
|
||||||
|
this.blockedPanel = true;
|
||||||
|
},
|
||||||
|
unblockPanel() {
|
||||||
|
this.blockedPanel = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
'BlockUIDoc': BlockUIDoc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.p-panel p {
|
||||||
|
line-height: 1.5;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
margin-right: .5em;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,192 @@
|
||||||
|
<template>
|
||||||
|
<div class="content-section documentation">
|
||||||
|
<TabView>
|
||||||
|
<TabPanel header="Documentation">
|
||||||
|
<h3>Import</h3>
|
||||||
|
<CodeHighlight lang="javascript">
|
||||||
|
import BlockUI from 'primevue/blockui';
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<h3>Getting Started</h3>
|
||||||
|
<p>BlockUI is controlled using the <i>blocked</i> property, by default target element to block is the child component. In example below, panel gets blocked
|
||||||
|
with a mask when blockedPanel is enabled and gets unblock when the bound variable is set to false.
|
||||||
|
</p>
|
||||||
|
<CodeHighlight>
|
||||||
|
<BlockUI :blocked="blockedPanel">
|
||||||
|
<Panel header="Header">
|
||||||
|
Panel Content
|
||||||
|
</Panel>
|
||||||
|
</BlockUI>
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<CodeHighlight lang="js">
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
blockedPanel: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
blockPanel() {
|
||||||
|
this.blockedPanel = true;
|
||||||
|
},
|
||||||
|
unblockPanel() {
|
||||||
|
this.blockedPanel = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<h3>Full Screen</h3>
|
||||||
|
<p>In full screen mode, instead of a particular element, the whole document gets blocked. Set <i>fullScreen</i> as true in order to enable this functionality.</p>
|
||||||
|
|
||||||
|
<CodeHighlight>
|
||||||
|
<BlockUI :blocked="blockedDocument" :fullScreen="true"></BlockUI>
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<h3>Properties</h3>
|
||||||
|
<p>Any property as style and class are passed to the main container element. Following are the additional properties to configure the component.</p>
|
||||||
|
<div class="doc-tablewrapper">
|
||||||
|
<table class="doc-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Default</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>blocked</td>
|
||||||
|
<td>array</td>
|
||||||
|
<td>null</td>
|
||||||
|
<td>Controls the blocked state.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>fullscreen</td>
|
||||||
|
<td>menuitem</td>
|
||||||
|
<td>null</td>
|
||||||
|
<td>When enabled, the whole document gets blocked.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>baseZIndex</td>
|
||||||
|
<td>number</td>
|
||||||
|
<td>0</td>
|
||||||
|
<td>Base zIndex value to use in layering.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>autoZIndex</td>
|
||||||
|
<td>boolean</td>
|
||||||
|
<td>true</td>
|
||||||
|
<td>Whether to automatically manage layering.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Events</h3>
|
||||||
|
<div class="doc-tablewrapper">
|
||||||
|
<table class="doc-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Parameters</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>block</td>
|
||||||
|
<td>-</td>
|
||||||
|
<td>Fired when the element gets blocked.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>show</td>
|
||||||
|
<td>-</td>
|
||||||
|
<td>Fired when the element gets unblocked.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Styling</h3>
|
||||||
|
<p>Following is the list of structural style classes, for theming classes visit <router-link to="/theming">theming</router-link> page.</p>
|
||||||
|
<div class="doc-tablewrapper">
|
||||||
|
<table class="doc-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Element</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>p-blockui</td>
|
||||||
|
<td>Mask element.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>p-blockui-document</td>
|
||||||
|
<td>Mask element in full screen mode.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Dependencies</h3>
|
||||||
|
<p>None.</p>
|
||||||
|
</TabPanel>
|
||||||
|
|
||||||
|
<TabPanel header="Source">
|
||||||
|
<a href="https://github.com/primefaces/primevue/tree/master/src/views/blockui" class="btn-viewsource" target="_blank" rel="noopener noreferrer">
|
||||||
|
<span>View on GitHub</span>
|
||||||
|
</a>
|
||||||
|
<CodeHighlight>
|
||||||
|
<h3>Document</h3>
|
||||||
|
<BlockUI :blocked="blockedDocument" :fullScreen="true"></BlockUI>
|
||||||
|
|
||||||
|
<Button type="button" label="Block" @click="blockDocument()"></Button>
|
||||||
|
|
||||||
|
<h3>Panel</h3>
|
||||||
|
<Button type="button" label="Block" @click="blockPanel()"></Button>
|
||||||
|
<Button type="button" label="Unblock" @click="unblockPanel()"></Button>
|
||||||
|
|
||||||
|
<BlockUI :blocked="blockedPanel">
|
||||||
|
<Panel header="Godfather I" style="margin-top: 20px">
|
||||||
|
<p>The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding.
|
||||||
|
His beloved son Michael has just come home from the war, but does not intend to become part of his father's business.
|
||||||
|
Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family,
|
||||||
|
kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.</p>
|
||||||
|
</Panel>
|
||||||
|
</BlockUI>
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<CodeHighlight lang="javascript">
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
blockedPanel: false,
|
||||||
|
blockedDocument: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
blockDocument() {
|
||||||
|
this.blockedDocument = true;
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
this.blockedDocument = false;
|
||||||
|
}, 3000);
|
||||||
|
},
|
||||||
|
blockPanel() {
|
||||||
|
this.blockedPanel = true;
|
||||||
|
},
|
||||||
|
unblockPanel() {
|
||||||
|
this.blockedPanel = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</CodeHighlight>
|
||||||
|
</TabPanel>
|
||||||
|
</TabView>
|
||||||
|
</div>
|
||||||
|
</template>
|
|
@ -66,7 +66,7 @@ export default {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3>Styling</h3>
|
<h3>Styling</h3>
|
||||||
<p>Following is the list of structural style classes, for theming classes visit <router-link to="/menumodel">theming</router-link> page.</p>
|
<p>Following is the list of structural style classes, for theming classes visit <router-link to="/theming">theming</router-link> page.</p>
|
||||||
<div class="doc-tablewrapper">
|
<div class="doc-tablewrapper">
|
||||||
<table class="doc-table">
|
<table class="doc-table">
|
||||||
<thead>
|
<thead>
|
||||||
|
|
Loading…
Reference in New Issue