mirror of
https://github.com/koel/koel
synced 2024-12-23 02:53:20 +00:00
150 lines
4.7 KiB
Vue
150 lines
4.7 KiB
Vue
<template>
|
||
<div id="profileWrapper">
|
||
<h1 class="heading">
|
||
<span>Profile & Preferences</span>
|
||
</h1>
|
||
|
||
<div class="main-scroll-wrap">
|
||
<form @submit.prevent="update">
|
||
<div class="form-row">
|
||
<label for="inputProfileName">Name</label>
|
||
<input type="text" id="inputProfileName" v-model="state.current.name">
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<label for="inputProfileEmail">Email Address</label>
|
||
<input type="email" id="inputProfileEmail" v-model="state.current.email">
|
||
</div>
|
||
|
||
<div class="change-pwd">
|
||
<div class="form-row">
|
||
<p class="help">If you want to change your password, enter it below. <br>
|
||
Otherwise, just leave the next two fields empty. It’s OK – no one will blame you.</p>
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<label for="inputProfilePassword">New Password</label>
|
||
<input v-model="pwd" type="password" id="inputProfilePassword" autocomplete="off">
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<label for="inputProfileConfirmPassword">Confirm Password</label>
|
||
<input v-model="confirmPwd" type="password" id="inputProfileConfirmPassword" autocomplete="off">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<button type="submit">Save</button>
|
||
<span v-show="showStatus" class="status">Saved!</span>
|
||
</div>
|
||
</form>
|
||
|
||
<div class="preferences">
|
||
<div class="form-row">
|
||
<input type="checkbox" v-model="prefs.notify" @change="savePreference()">
|
||
<span @click="prefs.notify = !prefs.notify">Show “Now Playing” song notification</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import $ from 'jquery';
|
||
|
||
import userStore from '../../../stores/user';
|
||
import preferenceStore from '../../../stores/preference';
|
||
|
||
export default {
|
||
data() {
|
||
return {
|
||
state: userStore.state,
|
||
cache: userStore.stub,
|
||
pwd: '',
|
||
confirmPwd: '',
|
||
showStatus: false,
|
||
prefs: preferenceStore.state,
|
||
};
|
||
},
|
||
|
||
methods: {
|
||
/**
|
||
* Update the current user's profile.
|
||
*/
|
||
update() {
|
||
// A little validation put in a small place.
|
||
if ((this.pwd || this.confirmPwd) && this.pwd !== this.confirmPwd) {
|
||
$('#inputProfilePassword, #inputProfileConfirmPassword').addClass('error');
|
||
|
||
return;
|
||
}
|
||
|
||
$('#inputProfilePassword, #inputProfileConfirmPassword').removeClass('error');
|
||
|
||
userStore.updateProfile(this.pwd, () => {
|
||
this.pwd = '';
|
||
this.confirmPwd = '';
|
||
|
||
// "Save!" aaaaaaaand it's gone!
|
||
this.showStatus = true;
|
||
setTimeout(() => {
|
||
this.showStatus = false;
|
||
}, 3000)
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Save the current user's preference.
|
||
* Right now it's only "Song notification."
|
||
*/
|
||
savePreference() {
|
||
preferenceStore.save();
|
||
},
|
||
},
|
||
};
|
||
</script>
|
||
|
||
<style lang="sass">
|
||
@import "resources/assets/sass/partials/_vars.scss";
|
||
@import "resources/assets/sass/partials/_mixins.scss";
|
||
|
||
#profileWrapper {
|
||
input {
|
||
&[type="text"], &[type="email"], &[type="password"] {
|
||
width: 192px;
|
||
}
|
||
|
||
&.error {
|
||
// Chrome won't give up its autofill style, so this is kind of a hack.
|
||
box-shadow: 0 0 0px 1000px #ff867a inset;
|
||
}
|
||
}
|
||
|
||
.change-pwd {
|
||
margin-top: 24px;
|
||
}
|
||
|
||
.status {
|
||
margin-left: 8px;
|
||
color: $colorGreen;
|
||
}
|
||
|
||
.preferences {
|
||
margin-top: 32px;
|
||
border-top: 1px solid $color2ndBgr;
|
||
}
|
||
|
||
|
||
|
||
@media only screen
|
||
and (max-device-width : 667px)
|
||
and (orientation : portrait) {
|
||
input {
|
||
&[type="text"], &[type="email"], &[type="password"] {
|
||
width: 100%;
|
||
height: 32px;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</style>
|