diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/App.js | 2 | ||||
| -rw-r--r-- | src/components/favorite_button/favorite_button.js | 2 | ||||
| -rw-r--r-- | src/components/favorite_button/favorite_button.vue | 10 | ||||
| -rw-r--r-- | src/components/post_status_form/post_status_form.js | 9 | ||||
| -rw-r--r-- | src/components/post_status_form/post_status_form.vue | 5 | ||||
| -rw-r--r-- | src/components/retweet_button/retweet_button.js | 2 | ||||
| -rw-r--r-- | src/components/retweet_button/retweet_button.vue | 10 | ||||
| -rw-r--r-- | src/components/status/status.vue | 23 | ||||
| -rw-r--r-- | src/components/user_card_content/user_card_content.js | 5 | ||||
| -rw-r--r-- | src/components/user_card_content/user_card_content.vue | 20 | ||||
| -rw-r--r-- | src/components/user_settings/user_settings.vue | 2 | ||||
| -rw-r--r-- | src/i18n/messages.js | 23 | ||||
| -rw-r--r-- | src/main.js | 12 | ||||
| -rw-r--r-- | src/modules/chat.js | 2 |
14 files changed, 96 insertions, 31 deletions
@@ -26,7 +26,7 @@ export default { logoStyle () { return { 'background-image': `url(${this.$store.state.config.logo})` } }, style () { return { 'background-image': `url(${this.background})` } }, sitename () { return this.$store.state.config.name }, - chat () { return this.$store.state.chat.channel }, + chat () { return this.$store.state.chat.channel.state === 'joined' }, showInstanceSpecificPanel () { return this.$store.state.config.showInstanceSpecificPanel} }, methods: { diff --git a/src/components/favorite_button/favorite_button.js b/src/components/favorite_button/favorite_button.js index 466e9b84..1266be90 100644 --- a/src/components/favorite_button/favorite_button.js +++ b/src/components/favorite_button/favorite_button.js @@ -1,5 +1,5 @@ const FavoriteButton = { - props: ['status'], + props: ['status', 'loggedIn'], data () { return { animated: false diff --git a/src/components/favorite_button/favorite_button.vue b/src/components/favorite_button/favorite_button.vue index dcf28e35..65d368c7 100644 --- a/src/components/favorite_button/favorite_button.vue +++ b/src/components/favorite_button/favorite_button.vue @@ -1,6 +1,10 @@ <template> - <div> - <i :class='classes' class='favorite-button base09' @click.prevent='favorite()'/> + <div v-if="loggedIn"> + <i :class='classes' class='favorite-button fav-active base09' @click.prevent='favorite()'/> + <span v-if='status.fave_num > 0'>{{status.fave_num}}</span> + </div> + <div v-else> + <i :class='classes' class='favorite-button base09'/> <span v-if='status.fave_num > 0'>{{status.fave_num}}</span> </div> </template> @@ -8,7 +12,7 @@ <script src="./favorite_button.js" ></script> <style lang='scss'> - .favorite-button { + .fav-active { cursor: pointer; animation-duration: 0.6s; &:hover { diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index acc97c86..1f63de25 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -64,14 +64,15 @@ const PostStatusForm = { img: profile_image_url_original })) } else if (firstchar === ':') { - const matchedEmoji = filter(this.emoji, (emoji) => emoji.shortcode.match(this.textAtCaret.slice(1))) + const matchedEmoji = filter(this.emoji.concat(this.customEmoji), (emoji) => emoji.shortcode.match(this.textAtCaret.slice(1))) if (matchedEmoji.length <= 0) { return false } - return map(take(matchedEmoji, 5), ({shortcode, image_url}) => ({ + return map(take(matchedEmoji, 5), ({shortcode, image_url, utf}) => ({ // eslint-disable-next-line camelcase screen_name: `:${shortcode}:`, name: '', + utf: utf || '', img: image_url })) } else { @@ -90,6 +91,9 @@ const PostStatusForm = { }, emoji () { return this.$store.state.config.emoji || [] + }, + customEmoji () { + return this.$store.state.config.customEmoji || [] } }, methods: { @@ -104,6 +108,7 @@ const PostStatusForm = { }, postStatus (newStatus) { if (this.posting) { return } + if (this.submitDisabled) { return } if (this.newStatus.status === '') { if (this.newStatus.files.length > 0) { diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index bb2329f3..8e436428 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -6,8 +6,9 @@ </div> <div style="position:relative;" v-if="candidates"> <div class="autocomplete-panel base05-background"> - <div v-for="candidate in candidates" @click="replace(candidate.screen_name + ' ')" class="autocomplete base02"> - <img :src="candidate.img"></img> + <div v-for="candidate in candidates" @click="replace(candidate.utf || (candidate.screen_name + ' '))" class="autocomplete base02"> + <span v-if="candidate.img"><img :src="candidate.img"></img></span> + <span v-else>{{candidate.utf}}</span> <span> {{candidate.screen_name}} <small class="base02">{{candidate.name}}</small> diff --git a/src/components/retweet_button/retweet_button.js b/src/components/retweet_button/retweet_button.js index 2280f315..4a43542d 100644 --- a/src/components/retweet_button/retweet_button.js +++ b/src/components/retweet_button/retweet_button.js @@ -1,5 +1,5 @@ const RetweetButton = { - props: ['status'], + props: ['status', 'loggedIn'], data () { return { animated: false diff --git a/src/components/retweet_button/retweet_button.vue b/src/components/retweet_button/retweet_button.vue index edbfef32..7a7ea763 100644 --- a/src/components/retweet_button/retweet_button.vue +++ b/src/components/retweet_button/retweet_button.vue @@ -1,6 +1,10 @@ <template> - <div> - <i :class='classes' class='icon-retweet base09' v-on:click.prevent='retweet()'></i> + <div v-if="loggedIn"> + <i :class='classes' class='icon-retweet rt-active base09' v-on:click.prevent='retweet()'></i> + <span v-if='status.repeat_num > 0'>{{status.repeat_num}}</span> + </div> + <div v-else> + <i :class='classes' class='icon-retweet base09'></i> <span v-if='status.repeat_num > 0'>{{status.repeat_num}}</span> </div> </template> @@ -9,7 +13,7 @@ <style lang='scss'> @import '../../_variables.scss'; - .icon-retweet { + .rt-active { cursor: pointer; animation-duration: 0.6s; &:hover { diff --git a/src/components/status/status.vue b/src/components/status/status.vue index d6c8cdb3..f6afaa25 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -8,8 +8,8 @@ <i class="base09 icon-reply" :class="{'icon-reply-active': replying}"></i> </a> </div> - <retweet-button :status=status></retweet-button> - <favorite-button :status=status></favorite-button> + <retweet-button :loggedIn="loggedIn" :status=status></retweet-button> + <favorite-button :loggedIn="loggedIn" :status=status></favorite-button> </div> </div> <post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" v-on:posted="toggleReplying" v-if="replying"/> @@ -105,17 +105,15 @@ </div> </div> - <div v-if="loggedIn"> - <div class='status-actions'> - <div> - <a href="#" v-on:click.prevent="toggleReplying"> - <i class="base09 icon-reply" :class="{'icon-reply-active': replying}"></i> - </a> - </div> - <retweet-button :status=status></retweet-button> - <favorite-button :status=status></favorite-button> - <delete-button :status=status></delete-button> + <div class='status-actions'> + <div v-if="loggedIn"> + <a href="#" v-on:click.prevent="toggleReplying"> + <i class="base09 icon-reply" :class="{'icon-reply-active': replying}"></i> + </a> </div> + <retweet-button :loggedIn="loggedIn" :status=status></retweet-button> + <favorite-button :loggedIn="loggedIn" :status=status></favorite-button> + <delete-button :status=status></delete-button> </div> </div> </div> @@ -248,6 +246,7 @@ img, video { max-width: 100%; max-height: 400px; + vertical-align: middle; object-fit: contain; } diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js index 6e67a321..32d62ebb 100644 --- a/src/components/user_card_content/user_card_content.js +++ b/src/components/user_card_content/user_card_content.js @@ -22,6 +22,11 @@ export default { isOtherUser () { return this.user.id !== this.$store.state.users.currentUser.id }, + subscribeUrl () { + // eslint-disable-next-line no-undef + const serverUrl = new URL(this.user.statusnet_profile_url) + return `${serverUrl.protocol}//${serverUrl.host}/main/ostatus` + }, loggedIn () { return this.$store.state.users.currentUser }, diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index 4c40c55f..ef000c94 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -46,6 +46,15 @@ </button> </span> </div> + <div class="remote-follow" v-if='!loggedIn && user.is_local'> + <form method="POST" :action='subscribeUrl'> + <input type="hidden" name="nickname" :value="user.screen_name"> + <input type="hidden" name="profile" value=""> + <button click="submit" class="remote-button base05 base02-background"> + {{ $t('user_card.remote_follow') }} + </button> + </form> + </div> <div class='block' v-if='isOtherUser && loggedIn'> <span v-if='user.statusnet_blocking'> <button @click="unblockUser" class="base04 base00-background pressed"> @@ -182,6 +191,11 @@ min-height: 28px; } + .remote-follow { + max-width: 220px; + min-height: 28px; + } + .follow { max-width: 220px; min-height: 28px; @@ -191,6 +205,12 @@ width: 92%; height: 100%; } + + .remote-button { + height: 28px !important; + width: 92%; + } + .pressed { border-bottom-color: rgba(255, 255, 255, 0.2); border-top-color: rgba(0, 0, 0, 0.2); diff --git a/src/components/user_settings/user_settings.vue b/src/components/user_settings/user_settings.vue index da78cdc2..1ef52bbf 100644 --- a/src/components/user_settings/user_settings.vue +++ b/src/components/user_settings/user_settings.vue @@ -7,7 +7,7 @@ <div class="setting-item"> <h3>{{$t('settings.name_bio')}}</h3> <p>{{$t('settings.name')}}</p> - <input class='name-changer base03-border' id='username' v-model="newname" :value="user.screen_name"></input> + <input class='name-changer base03-border' id='username' v-model="newname"></input> <p>{{$t('settings.bio')}}</p> <textarea class="bio base03-border" v-model="newbio"></textarea> <button :disabled='newname.length <= 0' class="btn btn-default base05 base02-background" @click="updateProfile">{{$t('general.submit')}}</button> diff --git a/src/i18n/messages.js b/src/i18n/messages.js index f0953a10..f3f1e2d4 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -208,7 +208,8 @@ const en = { muted: 'Muted', followers: 'Followers', followees: 'Following', - per_day: 'per day' + per_day: 'per day', + remote_follow: 'Remote follow' }, timeline: { show_new: 'Show new', @@ -922,7 +923,11 @@ const es = { } const pt = { + chat: { + title: 'Chat' + }, nav: { + chat: 'Chat Local', timeline: 'Linha do tempo', mentions: 'Menções', public_tl: 'Linha do tempo pública', @@ -963,6 +968,12 @@ const pt = { set_new_profile_background: 'Mudar o plano de fundo de perfil', settings: 'Configurações', theme: 'Tema', + presets: 'Predefinições', + theme_help: 'Use cores em códigos hexadecimais (#aabbcc) para personalizar seu esquema de cores.', + background: 'Plano de Fundo', + foreground: 'Primeiro Plano', + text: 'Texto', + links: 'Links', filtering: 'Filtragem', filtering_explanation: 'Todas as postagens contendo estas palavras serão silenciadas, uma por linha.', attachments: 'Anexos', @@ -970,7 +981,12 @@ const pt = { hide_attachments_in_convo: 'Ocultar anexos em conversas', nsfw_clickthrough: 'Habilitar clique para ocultar anexos NSFW', autoload: 'Habilitar carregamento automático quando a rolagem chegar ao fim.', - reply_link_preview: 'Habilitar a pré-visualização de link de respostas ao passar o mouse.' + streaming: 'Habilitar o fluxo automático de postagens quando ao topo da página', + reply_link_preview: 'Habilitar a pré-visualização de link de respostas ao passar o mouse.', + follow_import: 'Importar seguidas', + import_followers_from_a_csv_file: 'Importe os perfis que tu segues apartir de um arquivo CSV', + follows_imported: 'Seguidas importadas! O processamento das mesmas pode demorar um pouco.', + follow_import_error: 'Erro ao importar seguidas' }, notifications: { notifications: 'Notificações', @@ -1000,7 +1016,8 @@ const pt = { error_fetching_user: 'Erro procurando usuário' }, general: { - submit: 'Enviar' + submit: 'Enviar', + apply: 'Aplicar' } } diff --git a/src/main.js b/src/main.js index 359dbf52..a6f7e69f 100644 --- a/src/main.js +++ b/src/main.js @@ -138,7 +138,7 @@ window.fetch('/api/pleroma/emoji.json') const emoji = Object.keys(values).map((key) => { return { shortcode: key, image_url: values[key] } }) - store.dispatch('setOption', { name: 'emoji', value: emoji }) + store.dispatch('setOption', { name: 'customEmoji', value: emoji }) store.dispatch('setOption', { name: 'pleromaBackend', value: true }) }, (failure) => { @@ -148,9 +148,19 @@ window.fetch('/api/pleroma/emoji.json') (error) => console.log(error) ) +window.fetch('/static/emoji.json') + .then((res) => res.json()) + .then((values) => { + const emoji = Object.keys(values).map((key) => { + return { shortcode: key, image_url: false, 'utf': values[key] } + }) + store.dispatch('setOption', { name: 'emoji', value: emoji }) + }) + window.fetch('/instance/panel.html') .then((res) => res.text()) .then((html) => { store.dispatch('setOption', { name: 'instanceSpecificPanelContent', value: html }) }) + diff --git a/src/modules/chat.js b/src/modules/chat.js index b1244ebe..383ac75c 100644 --- a/src/modules/chat.js +++ b/src/modules/chat.js @@ -1,7 +1,7 @@ const chat = { state: { messages: [], - channel: null + channel: {state: ''} }, mutations: { setChannel (state, channel) { |
