diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2020-08-01 10:53:23 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-01 10:53:23 +0900 |
| commit | 66b07578c57dbdce81c58e3192b1be3a1279e25a (patch) | |
| tree | 15c3a13ddf739fb264b85818922d2a4285c18c75 /src/client/components | |
| parent | chore: Remove debug code (diff) | |
| download | misskey-66b07578c57dbdce81c58e3192b1be3a1279e25a.tar.gz misskey-66b07578c57dbdce81c58e3192b1be3a1279e25a.tar.bz2 misskey-66b07578c57dbdce81c58e3192b1be3a1279e25a.zip | |
Fold sidebar (#6610)
* wip
* wip
Diffstat (limited to 'src/client/components')
| -rw-r--r-- | src/client/components/sidebar.vue | 136 | ||||
| -rw-r--r-- | src/client/components/ui/radio.vue | 6 |
2 files changed, 86 insertions, 56 deletions
diff --git a/src/client/components/sidebar.vue b/src/client/components/sidebar.vue index 558087f1d8..d64112c52e 100644 --- a/src/client/components/sidebar.vue +++ b/src/client/components/sidebar.vue @@ -9,7 +9,7 @@ </transition> <transition name="nav"> - <nav class="nav" v-show="showing"> + <nav class="nav" :class="{ iconOnly, hidden }" v-show="showing"> <div> <button class="item _button account" @click="openAccountMenu" v-if="$store.getters.isSignedIn"> <mk-avatar :user="$store.state.i" class="avatar"/><mk-acct class="text" :user="$store.state.i"/> @@ -62,6 +62,8 @@ export default Vue.extend({ menuDef: this.$store.getters.nav({ search: this.search }), + iconOnly: false, + hidden: false, faGripVertical, faChevronLeft, faComments, faHashtag, faBroadcastTower, faFireAlt, faEllipsisH, faPencilAlt, faBars, faTimes, faBell, faSearch, faUserCog, faCog, faUser, faHome, faStar, faCircle, faAt, faEnvelope, faListUl, faPlus, faUserClock, faLaugh, faUsers, faTachometerAlt, faExchangeAlt, faGlobe, faChartBar, faCloud, faServer, faProjectDiagram }; }, @@ -85,9 +87,35 @@ export default Vue.extend({ $route(to, from) { this.showing = false; }, + + '$store.state.device.sidebarDisplay'() { + this.calcViewState(); + }, + + iconOnly() { + this.$nextTick(() => { + this.$emit('change-view-mode'); + }); + }, + + hidden() { + this.$nextTick(() => { + this.$emit('change-view-mode'); + }); + } + }, + + created() { + window.addEventListener('resize', this.calcViewState); + this.calcViewState(); }, methods: { + calcViewState() { + this.iconOnly = (window.innerWidth <= 1279) || (this.$store.state.device.sidebarDisplay === 'icon'); + this.hidden = (window.innerWidth <= 650) || (this.$store.state.device.sidebarDisplay === 'hide'); + }, + show() { this.showing = true; }, @@ -314,10 +342,8 @@ export default Vue.extend({ .mvcprjjd { $ui-font-size: 1em; // TODO: どこかに集約したい - $nav-width: 250px; // TODO: どこかに集約したい - $nav-icon-only-width: 80px; // TODO: どこかに集約したい - $nav-icon-only-threshold: 1279px; // TODO: どこかに集約したい - $nav-hide-threshold: 650px; // TODO: どこかに集約したい + $nav-width: 250px; + $nav-icon-only-width: 80px; > .nav-back { z-index: 1001; @@ -331,19 +357,66 @@ export default Vue.extend({ width: $nav-width; box-sizing: border-box; - @media (max-width: $nav-icon-only-threshold) { + &.iconOnly { flex: 0 0 $nav-icon-only-width; width: $nav-icon-only-width; + + &:not(.hidden) { + > div { + width: $nav-icon-only-width; + + > .divider { + margin: 8px auto; + width: calc(100% - 32px); + } + + > .item { + padding-left: 0; + width: 100%; + text-align: center; + font-size: $ui-font-size * 1.2; + line-height: 3.7rem; + + > [data-icon], + > .avatar { + margin-right: 0; + } + + > i { + left: 10px; + } + + > .text { + display: none; + } + + &:first-child { + margin-bottom: 8px; + } + + &:last-child { + margin-top: 8px; + } + } + } + } } - @media (max-width: $nav-hide-threshold) { + &.hidden { position: fixed; top: 0; left: 0; z-index: 1001; + + > div { + > .index, + > .notifications { + display: none; + } + } } - @media (min-width: $nav-hide-threshold + 1px) { + &:not(.hidden) { display: block !important; } @@ -365,25 +438,6 @@ export default Vue.extend({ border-top: solid 1px var(--divider); } - @media (max-width: $nav-icon-only-threshold) and (min-width: $nav-hide-threshold + 1px) { - width: $nav-icon-only-width; - - > .divider { - margin: 8px auto; - width: calc(100% - 32px); - } - - > .item { - &:first-child { - margin-bottom: 8px; - } - - &:last-child { - margin-top: 8px; - } - } - } - > .item { position: relative; display: block; @@ -452,34 +506,6 @@ export default Vue.extend({ margin-top: 16px; border-top: solid 1px var(--divider); } - - @media (max-width: $nav-icon-only-threshold) and (min-width: $nav-hide-threshold + 1px) { - padding-left: 0; - width: 100%; - text-align: center; - font-size: $ui-font-size * 1.2; - line-height: 3.7rem; - - > [data-icon], - > .avatar { - margin-right: 0; - } - - > i { - left: 10px; - } - - > .text { - display: none; - } - } - } - - @media (max-width: $nav-hide-threshold) { - > .index, - > .notifications { - display: none; - } } } } diff --git a/src/client/components/ui/radio.vue b/src/client/components/ui/radio.vue index 0b0fad6773..311cdce32d 100644 --- a/src/client/components/ui/radio.vue +++ b/src/client/components/ui/radio.vue @@ -42,6 +42,7 @@ export default Vue.extend({ }, methods: { toggle() { + if (this.disabled) return; this.$emit('change', this.value); } } @@ -61,7 +62,10 @@ export default Vue.extend({ &.disabled { opacity: 0.6; - cursor: not-allowed; + + &, * { + cursor: not-allowed !important; + } } &.checked { |