2018-12-06 18:45:40 +00:00
|
|
|
<template>
|
|
|
|
<div class="layout-topbar">
|
2018-12-26 09:36:00 +00:00
|
|
|
<a class="menu-button" @click="$emit('menubutton-click')">
|
|
|
|
<i class="pi pi-bars"></i>
|
|
|
|
</a>
|
2018-12-06 18:45:40 +00:00
|
|
|
<router-link to="/" class="logo">
|
|
|
|
<img alt="logo" src="./assets/images/primevue-logo.png">
|
|
|
|
</router-link>
|
|
|
|
<ul class="topbar-menu">
|
|
|
|
<li><router-link to="/setup">Get Started</router-link></li>
|
2019-12-11 09:35:13 +00:00
|
|
|
<li class="topbar-submenu">
|
2019-05-21 12:54:05 +00:00
|
|
|
<a tabindex="0" @click="toggleThemesMenu($event)" class="themes-menu-link">Themes</a>
|
|
|
|
<transition name="p-input-overlay" @enter="onThemesMenuEnter" @leave="onThemesMenuLeave">
|
2019-12-10 08:05:47 +00:00
|
|
|
<ul v-show="themesMenuVisible">
|
2019-05-21 12:54:05 +00:00
|
|
|
<li class="topbar-submenu-header">THEMING</li>
|
2019-12-10 08:05:47 +00:00
|
|
|
<li><router-link to="/theming" @click.native="hideThemesMenu"><i class="pi pi-fw pi-file"/><span>Guide</span></router-link></li>
|
2019-12-09 11:48:49 +00:00
|
|
|
<li><a href="https://www.primefaces.org/designer/primevue"><i class="pi pi-fw pi-palette" /><span>Designer</span></a></li>
|
2019-12-10 08:05:47 +00:00
|
|
|
<li><router-link to="/icons" @click.native="hideThemesMenu"><i class="pi pi-fw pi-info-circle"/><span>Icons</span></router-link></li>
|
2019-12-09 11:48:49 +00:00
|
|
|
<li class="topbar-submenu-header">FREE COMPONENT THEMES</li>
|
2019-05-21 12:54:05 +00:00
|
|
|
<li><a href="#" @click="changeTheme($event, 'nova-light', false)"><img src="./assets/images/layouts/themeswitcher-nova-light.png" alt="Nova Light" /><span>Nova Light</span></a></li>
|
|
|
|
<li><a @click="changeTheme($event, 'nova-dark', false)"><img src="./assets/images/layouts/themeswitcher-nova-dark.png" alt="Nova Dark" /><span>Nova Dark</span></a></li>
|
|
|
|
<li><a @click="changeTheme($event, 'nova-colored', false)"><img src="./assets/images/layouts/themeswitcher-nova-colored.png" alt="Nova Colored" /><span>Nova Colored</span></a></li>
|
2019-12-20 14:22:50 +00:00
|
|
|
<li><a @click="changeTheme($event, 'nova-vue', false)"><img src="./assets/images/layouts/themeswitcher-nova-vue.png" alt="Nova Vue" /><span>Nova Vue</span></a></li>
|
2019-05-21 12:54:05 +00:00
|
|
|
<li><a @click="changeTheme($event, 'luna-amber', true)"><img src="./assets/images/layouts/themeswitcher-luna-amber.png" alt="Luna Amber" /><span>Luna Amber</span></a></li>
|
|
|
|
<li><a @click="changeTheme($event, 'luna-blue', true)"><img src="./assets/images/layouts/themeswitcher-luna-blue.png" alt="Luna Blue" /><span>Luna Blue</span></a></li>
|
|
|
|
<li><a @click="changeTheme($event, 'luna-green', true)"><img src="./assets/images/layouts/themeswitcher-luna-green.png" alt="Luna Green" /><span>Luna Green</span></a></li>
|
|
|
|
<li><a @click="changeTheme($event, 'luna-pink', true)"><img src="./assets/images/layouts/themeswitcher-luna-pink.png" alt="Luna Pink" /><span>Luna Pink</span></a></li>
|
|
|
|
<li><a @click="changeTheme($event, 'rhea', false)"><img src="./assets/images/layouts/themeswitcher-rhea.png" alt="Rhea" /><span>Rhea</span></a></li>
|
|
|
|
</ul>
|
|
|
|
</transition>
|
2018-12-06 18:45:40 +00:00
|
|
|
</li>
|
2019-12-11 09:35:13 +00:00
|
|
|
<li class="topbar-submenu">
|
2019-12-10 08:05:47 +00:00
|
|
|
<a tabindex="0" @click="toggleTemplatesMenu($event)" class="templates-menu-link">Templates</a>
|
|
|
|
<transition name="p-input-overlay" @enter="onTemplatesMenuEnter" @leave="onTemplatesMenuLeave">
|
|
|
|
<ul v-show="templatesMenuVisible">
|
|
|
|
<li class="topbar-submenu-header">FREE ADMIN TEMPLATE</li>
|
|
|
|
<li><a href="https://www.primefaces.org/sigma-vue"><img src="./assets/images/layouts/themeswitcher-sigma.png" alt="Sigma" /><span>Sigma</span></a></li>
|
|
|
|
<li class="topbar-submenu-header">PREMIUM ADMIN TEMPLATES</li>
|
|
|
|
<li><a href="https://www.primefaces.org/sapphire-vue"><img src="./assets/images/layouts/themeswitcher-sapphire.png" alt="Sapphire" /><span>Sapphire</span><span class="theme-badge material">material</span></a></li>
|
|
|
|
<li><a href="https://www.primefaces.org/avalon-vue"><img src="./assets/images/layouts/themeswitcher-avalon.png" alt="Avalon" /><span>Avalon</span><span class="theme-badge bootstrap">bootstrap</span></a></li>
|
|
|
|
<li><a href="https://www.primefaces.org/babylon-vue"><img src="./assets/images/layouts/themeswitcher-babylon.png" alt="Babylon" /><span>Babylon</span></a></li>
|
2019-12-24 08:45:43 +00:00
|
|
|
<li><a href="https://www.primefaces.org/apollo-vue"><img src="./assets/images/layouts/themeswitcher-apollo.png" alt="Apollo" /><span>Apollo</span><span class="theme-badge darkmode">dark mode</span></a></li>
|
2020-01-07 15:38:02 +00:00
|
|
|
<li><a href="https://www.primefaces.org/roma-vue"><img src="./assets/images/layouts/themeswitcher-roma.jpg" alt="Roma" /><span>Roma</span></a></li>
|
2019-12-10 08:05:47 +00:00
|
|
|
</ul>
|
|
|
|
</transition>
|
|
|
|
</li>
|
2019-12-11 09:35:13 +00:00
|
|
|
<li class="topbar-submenu topbar-resources-submenu">
|
|
|
|
<a tabindex="0" @click="toggleResourcesMenu($event)" class="resources-menu-link">Resources</a>
|
|
|
|
<transition name="p-input-overlay" @enter="onResourcesMenuEnter" @leave="onResourcesMenuLeave">
|
|
|
|
<ul v-show="resourcesMenuVisible">
|
2019-12-11 13:52:07 +00:00
|
|
|
<li><router-link to="/support" @click.native="hideResourcesMenu"><span>Support</span></router-link></li>
|
2019-12-11 09:35:13 +00:00
|
|
|
<li><a href="https://github.com/primefaces/primevue" target="_blank"><span>Source Code</span></a></li>
|
|
|
|
<li><a href="https://www.primefaces.org/store" target="_blank"><span>PrimeStore</span></a></li>
|
|
|
|
<li><a href="https://www.primefaces.org/category/primevue/" target="_blank"><span>Blog</span></a></li>
|
|
|
|
<li><a href="https://twitter.com/primevue?lang=en" target="_blank"><span>Twitter</span></a></li>
|
|
|
|
<li><a href="https://www.primefaces.org/whouses/" target="_blank"><span>Who Uses</span></a></li>
|
|
|
|
<li><a href="https://www.primetek.com.tr" target="_blank"><span>About PrimeTek</span></a></li>
|
|
|
|
</ul>
|
|
|
|
</transition>
|
|
|
|
</li>
|
2018-12-06 18:45:40 +00:00
|
|
|
</ul>
|
|
|
|
</div>
|
2019-05-21 12:54:05 +00:00
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import DomHandler from './components/utils/DomHandler';
|
|
|
|
|
|
|
|
export default {
|
|
|
|
themesMenuOutsideClickListener: null,
|
2019-12-10 08:05:47 +00:00
|
|
|
templatesMenuOutsideClickListener: null,
|
2019-12-11 09:35:13 +00:00
|
|
|
resourcesMenuOutsideClickListener: null,
|
2019-05-21 12:54:05 +00:00
|
|
|
themesMenuElement: null,
|
2019-12-10 08:05:47 +00:00
|
|
|
templatesMenuElement: null,
|
2019-12-11 09:35:13 +00:00
|
|
|
resourcesMenuElement: null,
|
2019-05-21 12:54:05 +00:00
|
|
|
darkDemoStyle: null,
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
theme: 'nova-light',
|
2019-12-10 08:05:47 +00:00
|
|
|
themesMenuVisible: false,
|
2019-12-11 09:35:13 +00:00
|
|
|
templatesMenuVisible: false,
|
|
|
|
resourcesMenuVisible: false
|
2019-05-21 12:54:05 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
changeTheme(event, theme, dark) {
|
|
|
|
let themeElement = document.getElementById('theme-link');
|
|
|
|
themeElement.setAttribute('href', themeElement.getAttribute('href').replace(this.theme, theme));
|
|
|
|
this.theme = theme;
|
2019-10-22 12:38:18 +00:00
|
|
|
const hasBodyDarkTheme = this.hasClass(document.body, 'dark-theme');
|
2019-10-01 13:00:26 +00:00
|
|
|
|
2019-05-21 12:54:05 +00:00
|
|
|
if (dark) {
|
2019-10-22 12:38:18 +00:00
|
|
|
if (!hasBodyDarkTheme) {
|
|
|
|
this.addClass(document.body, 'dark-theme');
|
2019-05-21 12:54:05 +00:00
|
|
|
}
|
|
|
|
}
|
2019-10-22 12:38:18 +00:00
|
|
|
else if(hasBodyDarkTheme) {
|
|
|
|
this.removeClass(document.body, 'dark-theme');
|
2019-05-21 12:54:05 +00:00
|
|
|
}
|
|
|
|
|
2019-05-21 15:42:06 +00:00
|
|
|
this.hideThemesMenu();
|
2019-05-21 12:54:05 +00:00
|
|
|
event.preventDefault();
|
|
|
|
},
|
2019-10-22 12:38:18 +00:00
|
|
|
addClass(element, className) {
|
|
|
|
if (element.classList)
|
|
|
|
element.classList.add(className);
|
|
|
|
else
|
|
|
|
element.className += ' ' + className;
|
|
|
|
},
|
|
|
|
removeClass(element, className) {
|
|
|
|
if (element.classList)
|
|
|
|
element.classList.remove(className);
|
|
|
|
else
|
|
|
|
element.className = element.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
|
|
|
|
},
|
|
|
|
hasClass(element, className) {
|
|
|
|
if (element.classList)
|
|
|
|
return element.classList.contains(className);
|
|
|
|
else
|
|
|
|
return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);
|
|
|
|
},
|
2019-05-21 12:54:05 +00:00
|
|
|
toggleThemesMenu(event) {
|
|
|
|
this.themesMenuVisible = !this.themesMenuVisible;
|
|
|
|
event.preventDefault();
|
|
|
|
},
|
|
|
|
onThemesMenuEnter(el) {
|
|
|
|
this.themesMenuElement = el;
|
|
|
|
this.bindThemesMenuOutsideClickListener();
|
|
|
|
},
|
|
|
|
onThemesMenuLeave() {
|
|
|
|
this.themesMenuElement = null;
|
|
|
|
this.unbindThemesMenuOutsideClickListener();
|
|
|
|
},
|
2019-12-10 08:05:47 +00:00
|
|
|
toggleTemplatesMenu(event) {
|
|
|
|
this.templatesMenuVisible = !this.templatesMenuVisible;
|
|
|
|
event.preventDefault();
|
|
|
|
},
|
|
|
|
onTemplatesMenuEnter(el) {
|
|
|
|
this.templatesMenuElement = el;
|
|
|
|
this.bindTemplatesMenuOutsideClickListener();
|
|
|
|
},
|
|
|
|
onTemplatesMenuLeave() {
|
|
|
|
this.templatesMenuElement = null;
|
|
|
|
this.unbindTemplatesMenuOutsideClickListener();
|
|
|
|
},
|
2019-12-11 09:35:13 +00:00
|
|
|
toggleResourcesMenu(event) {
|
|
|
|
this.resourcesMenuVisible = !this.resourcesMenuVisible;
|
|
|
|
event.preventDefault();
|
|
|
|
},
|
|
|
|
onResourcesMenuEnter(el) {
|
|
|
|
this.resourcesMenuElement = el;
|
|
|
|
this.bindResourcesMenuOutsideClickListener();
|
|
|
|
},
|
|
|
|
onResourcesMenuLeave() {
|
|
|
|
this.resourcesMenuElement = null;
|
|
|
|
this.unbindResourcesMenuOutsideClickListener();
|
|
|
|
},
|
2019-05-21 12:54:05 +00:00
|
|
|
bindThemesMenuOutsideClickListener() {
|
|
|
|
if (!this.themesMenuOutsideClickListener) {
|
|
|
|
this.themesMenuOutsideClickListener = (event) => {
|
2019-12-10 08:05:47 +00:00
|
|
|
if ((this.themesMenuVisible && this.isOutsideOfOverlayMenuClicked(event, this.themesMenuElement, 'themes-menu-link'))) {
|
|
|
|
this.themesMenuVisible = false;
|
2019-05-21 12:54:05 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
document.addEventListener('click', this.themesMenuOutsideClickListener);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
unbindThemesMenuOutsideClickListener() {
|
|
|
|
if (this.themesMenuOutsideClickListener) {
|
|
|
|
document.removeEventListener('click', this.themesMenuOutsideClickListener);
|
|
|
|
this.themesMenuOutsideClickListener = null;
|
|
|
|
}
|
|
|
|
},
|
2019-12-10 08:05:47 +00:00
|
|
|
bindTemplatesMenuOutsideClickListener() {
|
|
|
|
if (!this.templatesMenuOutsideClickListener) {
|
|
|
|
this.templatesMenuOutsideClickListener = (event) => {
|
|
|
|
if ((this.templatesMenuVisible && this.isOutsideOfOverlayMenuClicked(event, this.templatesMenuElement, 'templates-menu-link'))) {
|
|
|
|
this.templatesMenuVisible = false;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
document.addEventListener('click', this.templatesMenuOutsideClickListener);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
unbindTemplatesMenuOutsideClickListener() {
|
|
|
|
if (this.templatesMenuOutsideClickListener) {
|
|
|
|
document.removeEventListener('click', this.templatesMenuOutsideClickListener);
|
|
|
|
this.templatesMenuOutsideClickListener = null;
|
|
|
|
}
|
|
|
|
},
|
2019-12-11 09:35:13 +00:00
|
|
|
bindResourcesMenuOutsideClickListener() {
|
|
|
|
if (!this.resourcesMenuOutsideClickListener) {
|
|
|
|
this.resourcesMenuOutsideClickListener = (event) => {
|
|
|
|
if ((this.resourcesMenuVisible && this.isOutsideOfOverlayMenuClicked(event, this.resourcesMenuElement, 'resources-menu-link'))) {
|
|
|
|
this.resourcesMenuVisible = false;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
document.addEventListener('click', this.resourcesMenuOutsideClickListener);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
unbindResourcesMenuOutsideClickListener() {
|
|
|
|
if (this.resourcesMenuOutsideClickListener) {
|
|
|
|
document.removeEventListener('click', this.resourcesMenuOutsideClickListener);
|
|
|
|
this.resourcesMenuOutsideClickListener = null;
|
|
|
|
}
|
|
|
|
},
|
2019-12-10 08:05:47 +00:00
|
|
|
isOutsideOfOverlayMenuClicked(event, element, style) {
|
|
|
|
return !(DomHandler.hasClass(event.target, style) || element.isSameNode(event.target) || element.contains(event.target));
|
2019-05-21 12:54:05 +00:00
|
|
|
},
|
2019-05-21 15:42:06 +00:00
|
|
|
hideThemesMenu() {
|
|
|
|
this.themesMenuVisible = false;
|
2019-12-11 09:35:13 +00:00
|
|
|
},
|
|
|
|
hideResourcesMenu() {
|
|
|
|
this.resourcesMenuVisible = false;
|
2019-05-21 15:42:06 +00:00
|
|
|
}
|
2019-05-21 12:54:05 +00:00
|
|
|
}
|
|
|
|
}
|
2019-12-20 14:22:50 +00:00
|
|
|
</script>
|