summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-05-19 20:31:13 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-05-19 20:31:13 +0900
commit254fbbbc753fd1a0496f67204d3058f7cada107e (patch)
tree47903f815bf335f43d263e25355a2274197668cc /src
parentRevert "Rename" (diff)
downloadsharkey-254fbbbc753fd1a0496f67204d3058f7cada107e.tar.gz
sharkey-254fbbbc753fd1a0496f67204d3058f7cada107e.tar.bz2
sharkey-254fbbbc753fd1a0496f67204d3058f7cada107e.zip
[wip] better mobile setting
Diffstat (limited to 'src')
-rw-r--r--src/client/app/mobile/script.ts13
-rw-r--r--src/client/app/mobile/style.styl7
-rw-r--r--src/client/app/mobile/views/pages/settings.vue65
-rw-r--r--src/client/app/mobile/views/pages/settings/settings.profile.vue126
-rw-r--r--src/client/md.scss13
5 files changed, 209 insertions, 15 deletions
diff --git a/src/client/app/mobile/script.ts b/src/client/app/mobile/script.ts
index 1405139be6..427c177a14 100644
--- a/src/client/app/mobile/script.ts
+++ b/src/client/app/mobile/script.ts
@@ -2,11 +2,17 @@
* Mobile Client
*/
+import Vue from 'vue';
import VueRouter from 'vue-router';
+import { MdCard, MdButton, MdField, MdMenu, MdList, MdSwitch } from 'vue-material/dist/components';
+import 'vue-material/dist/vue-material.min.css';
+import 'vue-material/dist/theme/default.css';
+
// Style
import './style.styl';
import '../../element.scss';
+import '../../md.scss';
import init from '../init';
@@ -34,6 +40,13 @@ import MkSettings from './views/pages/settings.vue';
import MkProfileSetting from './views/pages/profile-setting.vue';
import MkOthello from './views/pages/othello.vue';
+Vue.use(MdCard);
+Vue.use(MdButton);
+Vue.use(MdField);
+Vue.use(MdMenu);
+Vue.use(MdList);
+Vue.use(MdSwitch);
+
/**
* init
*/
diff --git a/src/client/app/mobile/style.styl b/src/client/app/mobile/style.styl
index 847ae8eec5..d1ab044eaf 100644
--- a/src/client/app/mobile/style.styl
+++ b/src/client/app/mobile/style.styl
@@ -8,10 +8,13 @@
html
height 100%
- background #ececed
+ background #ececed !important
+
+ // for md
+ transition none !important
&[data-darkmode]
- background #191B22
+ background #191B22 !important
body
display flex
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index 0e9c5ea962..b16860d62c 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -1,18 +1,29 @@
<template>
<mk-ui>
<span slot="header">%fa:cog%%i18n:@settings%</span>
- <div :class="$style.content">
+ <main>
<p v-html="'%i18n:!@signed-in-as%'.replace('{}', '<b>' + name + '</b>')"></p>
- <ul>
- <li><router-link to="./settings/profile">%fa:user%%i18n:@profile%%fa:angle-right%</router-link></li>
- <li><router-link to="./settings/twitter">%fa:B twitter%%i18n:@twitter%%fa:angle-right%</router-link></li>
- <li><router-link to="./settings/signin-history">%fa:sign-in-alt%%i18n:@signin-history%%fa:angle-right%</router-link></li>
- </ul>
- <ul>
- <li><a @click="signout">%fa:power-off%%i18n:@signout%</a></li>
- </ul>
+ <div>
+ <x-profile/>
+
+ <md-card class="md-layout-item md-size-50 md-small-size-100">
+ <md-card-header>
+ <div class="md-title">%i18n:@design%</div>
+ </md-card-header>
+
+ <md-card-content>
+ <div>
+ <md-switch v-model="darkmode">%i18n:@dark-mode%</md-switch>
+ </div>
+
+ <div>
+ <md-switch v-model="clientSettings.circleIcons" @change="onChangeCircleIcons">%i18n:@circle-icons%</md-switch>
+ </div>
+ </md-card-content>
+ </md-card>
+ </div>
<p><small>ver {{ version }} ({{ codename }})</small></p>
- </div>
+ </main>
</mk-ui>
</template>
@@ -20,31 +31,59 @@
import Vue from 'vue';
import { version, codename } from '../../../config';
+import XProfile from './settings/settings.profile.vue';
+
export default Vue.extend({
+ components: {
+ XProfile
+ },
+
data() {
return {
version,
- codename
+ codename,
+ darkmode: localStorage.getItem('darkmode') == 'true'
};
},
+
computed: {
name(): string {
return Vue.filter('userName')((this as any).os.i);
}
},
+
+ watch: {
+ darkmode() {
+ (this as any)._updateDarkmode_(this.darkmode);
+ }
+ },
+
mounted() {
document.title = 'Misskey | %i18n:@settings%';
},
+
methods: {
signout() {
(this as any).os.signout();
+ },
+
+ onChangeCircleIcons(v) {
+ this.$store.dispatch('settings/set', {
+ key: 'circleIcons',
+ value: v
+ });
}
}
});
</script>
-<style lang="stylus" module>
-.content
+<style lang="stylus" scoped>
+main
+ padding 0 16px
+
+ > div
+ > *
+ margin-bottom 16px
> p
display block
diff --git a/src/client/app/mobile/views/pages/settings/settings.profile.vue b/src/client/app/mobile/views/pages/settings/settings.profile.vue
new file mode 100644
index 0000000000..6b5d07cce9
--- /dev/null
+++ b/src/client/app/mobile/views/pages/settings/settings.profile.vue
@@ -0,0 +1,126 @@
+<template>
+ <md-card class="md-layout-item md-size-50 md-small-size-100">
+ <md-card-header>
+ <div class="md-title">%i18n:@title%</div>
+ </md-card-header>
+
+ <md-card-content>
+ <md-field>
+ <label>%i18n:@name%</label>
+ <md-input v-model="name" :disabled="saving"/>
+ </md-field>
+
+ <md-field>
+ <label>%i18n:@location%</label>
+ <md-input v-model="location" :disabled="saving"/>
+ </md-field>
+
+ <md-field>
+ <label>%i18n:@description%</label>
+ <md-textarea v-model="description" :disabled="saving"/>
+ </md-field>
+
+ <md-field>
+ <label>%i18n:@birthday%</label>
+ <md-input type="date" v-model="birthday" :disabled="saving"/>
+ </md-field>
+
+ <div>
+ <div class="md-body-2">%i18n:@avatar%</div>
+ <md-menu md-direction="bottom-end" :md-close-on-select="true">
+ <md-button md-menu-trigger>%i18n:@set-avatar%</md-button>
+ <md-menu-content>
+ <md-menu-item @click="uploadAvatar">%i18n:@upload-avatar%</md-menu-item>
+ <md-menu-item @click="chooseAvatar">%i18n:@choose-avatar%</md-menu-item>
+ </md-menu-content>
+ </md-menu>
+ </div>
+
+ <div>
+ <div class="md-body-2">%i18n:@banner%</div>
+ <md-menu md-direction="bottom-end" :md-close-on-select="true">
+ <md-button md-menu-trigger>%i18n:@set-banner%</md-button>
+ <md-menu-content>
+ <md-menu-item @click="uploadAvatar">%i18n:@upload-banner%</md-menu-item>
+ <md-menu-item @click="chooseAvatar">%i18n:@choose-banner%</md-menu-item>
+ </md-menu-content>
+ </md-menu>
+ </div>
+ </md-card-content>
+
+ <md-card-actions>
+ <md-button class="md-primary" :disabled="saving" @click="save">%i18n:@save%</md-button>
+ </md-card-actions>
+ </md-card>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+
+export default Vue.extend({
+ data() {
+ return {
+ name: null,
+ location: null,
+ description: null,
+ birthday: null,
+ saving: false
+ };
+ },
+ created() {
+ this.name = (this as any).os.i.name || '';
+ this.location = (this as any).os.i.profile.location;
+ this.description = (this as any).os.i.description;
+ this.birthday = (this as any).os.i.profile.birthday;
+ },
+ methods: {
+ chooseAvatar() {
+ (this as any).apis.chooseDriveFile({
+ multiple: false
+ }).then(file => {
+ this.avatarSaving = true;
+
+ (this as any).api('i/update', {
+ avatarId: file.id
+ }).then(() => {
+ this.avatarSaving = false;
+ alert('%i18n:!@avatar-saved%');
+ });
+ });
+ },
+ chooseBanner() {
+ (this as any).apis.chooseDriveFile({
+ multiple: false
+ }).then(file => {
+ this.bannerSaving = true;
+
+ (this as any).api('i/update', {
+ bannerId: file.id
+ }).then(() => {
+ this.bannerSaving = false;
+ alert('%i18n:!@banner-saved%');
+ });
+ });
+ },
+ uploadAvatar() {
+ // a
+ },
+ uploadBanner() {
+ // a
+ },
+ save() {
+ this.saving = true;
+
+ (this as any).api('i/update', {
+ name: this.name || null,
+ location: this.location || null,
+ description: this.description || null,
+ birthday: this.birthday || null
+ }).then(() => {
+ this.saving = false;
+ alert('%i18n:!@saved%');
+ });
+ }
+ }
+});
+</script>
diff --git a/src/client/md.scss b/src/client/md.scss
new file mode 100644
index 0000000000..d850863efd
--- /dev/null
+++ b/src/client/md.scss
@@ -0,0 +1,13 @@
+/* SEE: https://vuematerial.io/themes/configuration */
+
+@import '../const.json';
+
+@import "~vue-material/dist/theme/engine";
+
+@include md-register-theme("default", (
+ primary: $themeColor,
+ accent: md-get-palette-color(red, A200)
+));
+
+@import "~vue-material/dist/components/MdButton/theme";
+@import "~vue-material/dist/components/MdField/theme";