localized vue login, added language switcher block
This commit is contained in:
parent
a8c8d04408
commit
1c040f261e
File diff suppressed because one or more lines are too long
|
@ -33,8 +33,39 @@ import 'theme/assets/styles/main.scss'
|
||||||
}
|
}
|
||||||
|
|
||||||
function initUserVBlock(){
|
function initUserVBlock(){
|
||||||
|
let props = {
|
||||||
|
title: ""
|
||||||
|
};
|
||||||
let mount_point = drupalSettings.user.uid !== 0 ? '#block-userblock' : '#block-userlogin';
|
let mount_point = drupalSettings.user.uid !== 0 ? '#block-userblock' : '#block-userlogin';
|
||||||
|
switch (mount_point) {
|
||||||
|
case '#block-userlogin':
|
||||||
|
let $block = document.querySelector(mount_point);
|
||||||
|
props = {
|
||||||
|
title: $block.querySelector('h2').textContent,
|
||||||
|
form: {
|
||||||
|
ph_email: $block.querySelector('input#edit-name').getAttribute('placeholder'),
|
||||||
|
ph_pass: $block.querySelector('input#edit-pass').getAttribute('placeholder'),
|
||||||
|
btn_value: $block.querySelector('input#edit-submit').getAttribute('value'),
|
||||||
|
register: {
|
||||||
|
title: $block.querySelector('a.create-account-link').textContent,
|
||||||
|
href: $block.querySelector('a.create-account-link').getAttribute('href')
|
||||||
|
},
|
||||||
|
reset: {
|
||||||
|
title: $block.querySelector('a.request-password-link').textContent,
|
||||||
|
href: $block.querySelector('a.request-password-link').getAttribute('href')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '#block-userblock':
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
|
||||||
|
}
|
||||||
|
console.log(props);
|
||||||
v_user_block = new Vue({
|
v_user_block = new Vue({
|
||||||
|
// data: data,
|
||||||
store,
|
store,
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
|
@ -47,8 +78,9 @@ import 'theme/assets/styles/main.scss'
|
||||||
this.$store.dispatch('User/getUser')
|
this.$store.dispatch('User/getUser')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
render: h => h(VUserBlock)
|
render: h => h(VUserBlock, {props:props})
|
||||||
}).$mount(mount_point)
|
}).$mount(mount_point)
|
||||||
|
console.log('initUserVBlock', v_user_block);
|
||||||
}
|
}
|
||||||
|
|
||||||
function initTestVContent(){
|
function initTestVContent(){
|
||||||
|
@ -56,7 +88,7 @@ import 'theme/assets/styles/main.scss'
|
||||||
store,
|
store,
|
||||||
render: h => h(VTestContent)
|
render: h => h(VTestContent)
|
||||||
}).$mount('#block-pagetitle')
|
}).$mount('#block-pagetitle')
|
||||||
console.log('initTestVContent', v_test_content);
|
// console.log('initTestVContent', v_test_content);
|
||||||
}
|
}
|
||||||
|
|
||||||
init()
|
init()
|
||||||
|
|
|
@ -30,10 +30,14 @@ header[role="banner"]{
|
||||||
.header-block{
|
.header-block{
|
||||||
min-height: 15px;
|
min-height: 15px;
|
||||||
font-size: 0;
|
font-size: 0;
|
||||||
|
&.header-right{
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
&>*{
|
&>*{
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
font-size: $base_font_size;
|
font-size: $base_font_size;
|
||||||
|
text-align: left;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,21 +32,29 @@ aside.messages{
|
||||||
// |_||_\___\__,_\__,_\___|_|
|
// |_||_\___\__,_\__,_\___|_|
|
||||||
|
|
||||||
header[role="banner"]{
|
header[role="banner"]{
|
||||||
|
padding:0.2em 0 0 0;
|
||||||
#block-sitebranding{
|
#block-sitebranding{
|
||||||
h1{
|
h1{
|
||||||
margin:0;
|
margin:0;
|
||||||
|
line-height: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#block-userlogin{
|
#block-userlogin{
|
||||||
|
width:8em;
|
||||||
|
overflow: visible;
|
||||||
h2{
|
h2{
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
font-size: 1em;
|
||||||
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
&>section{
|
&>section{
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
width:14em;
|
||||||
height:1px;
|
height:1px;
|
||||||
padding:0.01em 1em;
|
padding:0.01em 1em;
|
||||||
|
// margin:0 0 0 -1em;
|
||||||
box-sizing:content-box;
|
box-sizing:content-box;
|
||||||
transition: all 0.4s ease-in-out;
|
transition: all 0.4s ease-in-out;
|
||||||
// outline: 1px solid blue;
|
// outline: 1px solid blue;
|
||||||
|
@ -55,10 +63,62 @@ header[role="banner"]{
|
||||||
&:hover{
|
&:hover{
|
||||||
&>section{
|
&>section{
|
||||||
transition-delay: 0s;
|
transition-delay: 0s;
|
||||||
height:16em;
|
height:12em;
|
||||||
padding:1em 1em;
|
padding:1em 1em;
|
||||||
box-shadow: 0 0 10px #ccc;
|
box-shadow: 0 0 10px #ccc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#block-languageswitcher{
|
||||||
|
h2{
|
||||||
|
margin: 0.1em 0 0 0;
|
||||||
|
font-size: 0.756em;
|
||||||
|
font-weight: 400;
|
||||||
|
padding:0.1em 0.4em 0.2em;
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: #444;
|
||||||
|
color: #fff;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
&>ul.links{
|
||||||
|
// background-color: #fff;
|
||||||
|
overflow: hidden;
|
||||||
|
width:5em;
|
||||||
|
height:1px;
|
||||||
|
padding:0.01em 0;
|
||||||
|
margin:0;
|
||||||
|
box-sizing:content-box;
|
||||||
|
transition: all 0.4s ease-in-out;
|
||||||
|
// outline: 1px solid blue;
|
||||||
|
// transition-delay: 2s;
|
||||||
|
}
|
||||||
|
&:hover{
|
||||||
|
&>ul.links{
|
||||||
|
transition-delay: 0s;
|
||||||
|
height:2em;
|
||||||
|
padding:0.3em 0;
|
||||||
|
// box-shadow: 0 0 10px #ccc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
li{
|
||||||
|
list-style: none;
|
||||||
|
padding:0;
|
||||||
|
&.is-active{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
a{
|
||||||
|
margin: 0;
|
||||||
|
font-size: 0.756em;
|
||||||
|
font-weight: 400;
|
||||||
|
padding:0.2em 0.4em;
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: #444;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,8 +117,8 @@ function materiotheme_preprocess_image_formatter(&$vars){
|
||||||
|
|
||||||
function materiotheme_preprocess_links__language_block(&$vars){
|
function materiotheme_preprocess_links__language_block(&$vars){
|
||||||
// dpm($vars);
|
// dpm($vars);
|
||||||
foreach ($vars['links'] as $lang_code => $link) {
|
// foreach ($vars['links'] as $lang_code => $link) {
|
||||||
$vars['links'][$lang_code]['text'] = $lang_code;
|
// $vars['links'][$lang_code]['text'] = $lang_code;
|
||||||
$vars['links'][$lang_code]['link']['#title'] = $lang_code;
|
// $vars['links'][$lang_code]['link']['#title'] = $lang_code;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<template lang="html">
|
<template lang="html">
|
||||||
<div id="block-userlogin" class="">
|
<div id="block-userlogin" class="">
|
||||||
<h2>Login Hello!</h2>
|
<h2>{{ title }}</h2>
|
||||||
<section>
|
<section>
|
||||||
<input
|
<input
|
||||||
id="edit-name"
|
id="edit-name"
|
||||||
class="form-email"
|
class="form-email"
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Email" name="name"
|
v-bind:placeholder="form.ph_email" name="name"
|
||||||
v-model="mail"
|
v-model="mail"
|
||||||
@keyup.enter="login"
|
@keyup.enter="login"
|
||||||
/>
|
/>
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
id="edit-pass"
|
id="edit-pass"
|
||||||
class="form-text"
|
class="form-text"
|
||||||
type="password"
|
type="password"
|
||||||
placeholder="Password" name="pass"
|
v-bind:placeholder="form.ph_pass" name="pass"
|
||||||
v-model="password"
|
v-model="password"
|
||||||
@keyup.enter="login"
|
@keyup.enter="login"
|
||||||
/>
|
/>
|
||||||
|
@ -23,17 +23,27 @@
|
||||||
class="button"
|
class="button"
|
||||||
@click.stop="login"
|
@click.stop="login"
|
||||||
>
|
>
|
||||||
login
|
{{ form.btn_value }}
|
||||||
</button>
|
</button>
|
||||||
|
<ul>
|
||||||
|
<li><a
|
||||||
|
v-bind:href="form.register.href"
|
||||||
|
>
|
||||||
|
{{ form.register.title }}
|
||||||
|
</a></li>
|
||||||
|
<li><a
|
||||||
|
v-bind:href="form.reset.href"
|
||||||
|
>
|
||||||
|
{{ form.reset.title }}
|
||||||
|
</a></li>
|
||||||
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// https://github.com/alvar0hurtad0/drupal-vuejs-todo
|
// https://github.com/alvar0hurtad0/drupal-vuejs-todo
|
||||||
|
|
||||||
import { mapState, mapActions } from 'vuex'
|
import { mapState, mapActions } from 'vuex'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
@ -41,6 +51,7 @@ export default {
|
||||||
password: ''
|
password: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
props: ['title', 'form'],
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(['User'])
|
...mapState(['User'])
|
||||||
},
|
},
|
||||||
|
@ -48,14 +59,6 @@ export default {
|
||||||
...mapActions({
|
...mapActions({
|
||||||
userLogin: 'User/userLogin'
|
userLogin: 'User/userLogin'
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// usernameInputHandler(input) {
|
|
||||||
// this.username = input;
|
|
||||||
// },
|
|
||||||
// passwordInputHandler(input) {
|
|
||||||
// this.password = input;
|
|
||||||
// },
|
|
||||||
|
|
||||||
login () {
|
login () {
|
||||||
this.userLogin({
|
this.userLogin({
|
||||||
mail: this.mail,
|
mail: this.mail,
|
||||||
|
@ -63,10 +66,29 @@ export default {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
section{
|
||||||
|
max-width:300px;
|
||||||
|
}
|
||||||
|
input{
|
||||||
|
display:block;
|
||||||
|
max-width:100%;
|
||||||
|
margin:0.5em 0 0 0;
|
||||||
|
}
|
||||||
|
button{
|
||||||
|
margin:0.5em 0 0 0;
|
||||||
|
}
|
||||||
|
ul{
|
||||||
|
margin:0; padding:0.5em 0 0 0;
|
||||||
|
}
|
||||||
|
li{
|
||||||
|
list-style:none;
|
||||||
|
margin:0.5em 0 0 0; padding:0;
|
||||||
|
font-size:0.882em;
|
||||||
|
}
|
||||||
|
a{
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template lang="html">
|
<template lang="html">
|
||||||
<UserTools v-if="isloggedin" />
|
<UserTools v-if="isloggedin" />
|
||||||
<Login v-else />
|
<Login v-bind:title="title" v-bind:form="form" v-else />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -10,9 +10,7 @@ import Login from 'vuejs/components/User/Login'
|
||||||
import UserTools from 'vuejs/components/User/UserTools'
|
import UserTools from 'vuejs/components/User/UserTools'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
// data () {
|
props: ['title', 'form'],
|
||||||
// return {}
|
|
||||||
// },
|
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
isloggedin: state => state.User.isloggedin
|
isloggedin: state => state.User.isloggedin
|
||||||
|
|
|
@ -43,7 +43,13 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="css" scoped>
|
<style lang="css" scoped>
|
||||||
|
#user-tools{
|
||||||
|
margin-right:0.5em;
|
||||||
|
padding-right:0.5em;
|
||||||
|
border-right:1px solid #222;
|
||||||
|
}
|
||||||
h4{
|
h4{
|
||||||
|
margin:0;
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
font-size:inherited;
|
font-size:inherited;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue