diff options
-rw-r--r-- | i18n/en.json | 2 | ||||
-rw-r--r-- | i18n/es.json | 4 | ||||
-rw-r--r-- | i18n/fr.json | 4 | ||||
-rw-r--r-- | i18n/pt.json | 4 | ||||
-rw-r--r-- | webapp/components/posts_view.jsx | 4 | ||||
-rw-r--r-- | webapp/components/sidebar.jsx | 24 | ||||
-rw-r--r-- | webapp/components/tutorial/tutorial_intro_screens.jsx | 16 | ||||
-rw-r--r-- | webapp/components/tutorial/tutorial_view.jsx | 31 | ||||
-rw-r--r-- | webapp/i18n/en.json | 4 | ||||
-rw-r--r-- | webapp/i18n/es.json | 4 | ||||
-rw-r--r-- | webapp/i18n/fr.json | 4 | ||||
-rw-r--r-- | webapp/i18n/pt.json | 4 | ||||
-rw-r--r-- | webapp/stores/post_store.jsx | 4 | ||||
-rw-r--r-- | webapp/utils/constants.jsx | 2 |
14 files changed, 78 insertions, 33 deletions
diff --git a/i18n/en.json b/i18n/en.json index 821f5c946..52e4fca8a 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -1449,7 +1449,7 @@ }, { "id": "api.user.ldap_to_email.not_ldap_account.app_error", - "translation": "This user account does use LDAP" + "translation": "This user account does not use LDAP" }, { "id": "api.user.login.blank_pwd.app_error", diff --git a/i18n/es.json b/i18n/es.json index 019af088e..52654f4af 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -1448,10 +1448,6 @@ "translation": "LDAP no está disponible en este servidor" }, { - "id": "api.user.ldap_to_email.not_ldap_account.app_error", - "translation": "La cuenta de este usuario utiliza LDAP" - }, - { "id": "api.user.login.blank_pwd.app_error", "translation": "El campo de contraseña no debe quedar en blanco" }, diff --git a/i18n/fr.json b/i18n/fr.json index c52e17af8..984c1ef93 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -1540,10 +1540,6 @@ "translation": "LDAP n'est pas disponible sur ce serveur" }, { - "id": "api.user.ldap_to_email.not_ldap_account.app_error", - "translation": "Ce compte utilisateur utilise LDAP" - }, - { "id": "api.user.ldap_to_email.not_available.app_error", "translation": "LDAP n'est pas disponible sur ce serveur" }, diff --git a/i18n/pt.json b/i18n/pt.json index 476b3150f..631198e1f 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -1452,10 +1452,6 @@ "translation": "LDAP não está disponível neste servidor" }, { - "id": "api.user.ldap_to_email.not_ldap_account.app_error", - "translation": "Está conta de usuário não utiliza LDAP" - }, - { "id": "api.user.login.blank_pwd.app_error", "translation": "Campo senha não pode estar em branco" }, diff --git a/webapp/components/posts_view.jsx b/webapp/components/posts_view.jsx index 917411549..ffe04daa1 100644 --- a/webapp/components/posts_view.jsx +++ b/webapp/components/posts_view.jsx @@ -308,7 +308,7 @@ export default class PostsView extends React.Component { if (this.props.scrollType === PostsView.SCROLL_TYPE_BOTTOM) { this.scrollToBottom(); } else if (this.props.scrollType === PostsView.SCROLL_TYPE_NEW_MESSAGE) { - window.requestAnimationFrame(() => { + window.setTimeout(window.requestAnimationFrame(() => { // If separator exists scroll to it. Otherwise scroll to bottom. if (this.refs.newMessageSeparator) { var objDiv = this.refs.postlist; @@ -316,7 +316,7 @@ export default class PostsView extends React.Component { } else if (this.refs.postlist) { this.refs.postlist.scrollTop = this.refs.postlist.scrollHeight; } - }); + }), 0); } else if (this.props.scrollType === PostsView.SCROLL_TYPE_POST && this.props.scrollPostId) { window.requestAnimationFrame(() => { const postNode = ReactDOM.findDOMNode(this.refs[this.props.scrollPostId]); diff --git a/webapp/components/sidebar.jsx b/webapp/components/sidebar.jsx index b22d3ec34..500e73cf2 100644 --- a/webapp/components/sidebar.jsx +++ b/webapp/components/sidebar.jsx @@ -138,7 +138,9 @@ export default class Sidebar extends React.Component { unreadCounts: JSON.parse(JSON.stringify(ChannelStore.getUnreadCounts())), showTutorialTip: tutorialStep === TutorialSteps.CHANNEL_POPOVER, currentTeam: TeamStore.getCurrent(), - currentUser: UserStore.getCurrentUser() + currentUser: UserStore.getCurrentUser(), + townSquare: ChannelStore.getByName(Constants.DEFAULT_CHANNEL), + offTopic: ChannelStore.getByName(Constants.OFFTOPIC_CHANNEL) }; } @@ -290,6 +292,16 @@ export default class Sidebar extends React.Component { createTutorialTip() { const screens = []; + let townSquareDisplayName = Constants.DEFAULT_CHANNEL_UI_NAME; + if (this.state.townSquare) { + townSquareDisplayName = this.state.townSquare.display_name; + } + + let offTopicDisplayName = Constants.OFFTOPIC_CHANNEL_UI_NAME; + if (this.state.offTopic) { + offTopicDisplayName = this.state.offTopic.display_name; + } + screens.push( <div> <FormattedHTMLMessage @@ -303,10 +315,14 @@ export default class Sidebar extends React.Component { <div> <FormattedHTMLMessage id='sidebar.tutorialScreen2' - defaultMessage='<h4>"Town Square" and "Off-Topic" channels</h4> + defaultMessage='<h4>"{townsquare}" and "{offtopic}" channels</h4> <p>Here are two public channels to start:</p> - <p><strong>Town Square</strong> is a place for team-wide communication. Everyone in your team is a member of this channel.</p> - <p><strong>Off-Topic</strong> is a place for fun and humor outside of work-related channels. You and your team can decide what other channels to create.</p>' + <p><strong>{townsquare}</strong> is a place for team-wide communication. Everyone in your team is a member of this channel.</p> + <p><strong>{offtopic}</strong> is a place for fun and humor outside of work-related channels. You and your team can decide what other channels to create.</p>' + values={{ + townsquare: townSquareDisplayName, + offtopic: offTopicDisplayName + }} /> </div> ); diff --git a/webapp/components/tutorial/tutorial_intro_screens.jsx b/webapp/components/tutorial/tutorial_intro_screens.jsx index bad426cfc..0358a6a65 100644 --- a/webapp/components/tutorial/tutorial_intro_screens.jsx +++ b/webapp/components/tutorial/tutorial_intro_screens.jsx @@ -19,6 +19,12 @@ const NUM_SCREENS = 3; import React from 'react'; export default class TutorialIntroScreens extends React.Component { + static get propTypes() { + return { + townSquare: React.PropTypes.object, + offTopic: React.PropTypes.object + }; + } constructor(props) { super(props); @@ -153,6 +159,11 @@ export default class TutorialIntroScreens extends React.Component { ); } + let townSquareDisplayName = Constants.DEFAULT_CHANNEL_UI_NAME; + if (this.props.townSquare) { + townSquareDisplayName = this.props.townSquare.display_name; + } + return ( <div> <h3> @@ -171,7 +182,10 @@ export default class TutorialIntroScreens extends React.Component { {supportInfo} <FormattedMessage id='tutorial_intro.end' - defaultMessage='Click “Next” to enter Town Square. This is the first channel teammates see when they sign up. Use it for posting updates everyone needs to know.' + defaultMessage='Click “Next” to enter {channel}. This is the first channel teammates see when they sign up. Use it for posting updates everyone needs to know.' + values={{ + channel: townSquareDisplayName + }} /> {circles} </div> diff --git a/webapp/components/tutorial/tutorial_view.jsx b/webapp/components/tutorial/tutorial_view.jsx index d9e0ef40d..5f2c1a257 100644 --- a/webapp/components/tutorial/tutorial_view.jsx +++ b/webapp/components/tutorial/tutorial_view.jsx @@ -1,18 +1,43 @@ // Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. -import React from 'react'; - import TutorialIntroScreens from './tutorial_intro_screens.jsx'; +import ChannelStore from 'stores/channel_store.jsx'; +import Constants from 'utils/constants.jsx'; + +import React from 'react'; + export default class TutorialView extends React.Component { + constructor(props) { + super(props); + + this.handleChannelChange = this.handleChannelChange.bind(this); + + this.state = { + townSquare: ChannelStore.getByName(Constants.DEFAULT_CHANNEL) + }; + } + componentDidMount() { + ChannelStore.addChangeListener(this.handleChannelChange); + } + componentWillUnmount() { + ChannelStore.removeChangeListener(this.handleChannelChange); + } + handleChannelChange() { + this.setState({ + townSquare: ChannelStore.getByName(Constants.DEFAULT_CHANNEL) + }); + } render() { return ( <div id='app-content' className='app__content' > - <TutorialIntroScreens/> + <TutorialIntroScreens + townSquare={this.state.townSquare} + /> </div> ); } diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json index d58d282bc..3c543a7c5 100644 --- a/webapp/i18n/en.json +++ b/webapp/i18n/en.json @@ -1039,7 +1039,7 @@ "sidebar.pg": "Private Groups", "sidebar.removeList": "Remove from list", "sidebar.tutorialScreen1": "<h4>Channels</h4><p><strong>Channels</strong> organize conversations across different topics. They’re open to everyone on your team. To send private communications use <strong>Direct Messages</strong> for a single person or <strong>Private Groups</strong> for multiple people.</p>", - "sidebar.tutorialScreen2": "<h4>\"Town Square\" and \"Off-Topic\" channels</h4><p>Here are two public channels to start:</p><p><strong>Town Square</strong> is a place for team-wide communication. Everyone in your team is a member of this channel.</p><p><strong>Off-Topic</strong> is a place for fun and humor outside of work-related channels. You and your team can decide what other channels to create.</p>", + "sidebar.tutorialScreen2": "<h4>\"{townsquare}\" and \"{offtopic}\" channels</h4><p>Here are two public channels to start:</p><p><strong>{townsquare}</strong> is a place for team-wide communication. Everyone in your team is a member of this channel.</p><p><strong>{offtopic}</strong> is a place for fun and humor outside of work-related channels. You and your team can decide what other channels to create.</p>", "sidebar.tutorialScreen3": "<h4>Creating and Joining Channels</h4><p>Click <strong>\"More...\"</strong> to create a new channel or join an existing one.</p><p>You can also create a new channel or private group by clicking the <strong>\"+\" symbol</strong> next to the channel or private group header.</p>", "sidebar.unreadAbove": "Unread post(s) above", "sidebar.unreadBelow": "Unread post(s) below", @@ -1188,7 +1188,7 @@ "textbox.quote": ">quote", "textbox.strike": "strike", "tutorial_intro.allSet": "You’re all set", - "tutorial_intro.end": "Click “Next” to enter Town Square. This is the first channel teammates see when they sign up. Use it for posting updates everyone needs to know.", + "tutorial_intro.end": "Click “Next” to enter {channel}. This is the first channel teammates see when they sign up. Use it for posting updates everyone needs to know.", "tutorial_intro.invite": "Invite teammates", "tutorial_intro.next": "Next", "tutorial_intro.screenOne": "<h3>Welcome to:</h3><h1>Mattermost</h1><p>Your team communication all in one place, instantly searchable and available anywhere</p><p>Keep your team connected to help them achieve what matters most.</p>", diff --git a/webapp/i18n/es.json b/webapp/i18n/es.json index 6331b53a1..8cc9e5db6 100644 --- a/webapp/i18n/es.json +++ b/webapp/i18n/es.json @@ -1039,7 +1039,7 @@ "sidebar.pg": "Grupos Privados", "sidebar.removeList": "Remover de la lista", "sidebar.tutorialScreen1": "<h4>Canales</h4><p><strong>Canales</strong> organizan las conversaciones en diferentes tópicos. Son abiertos para cualquier persona de tu equipo. Para enviar comunicaciones privadas con una sola persona utiliza <strong>Mensajes Directos</strong> o con multiples personas utilizando <strong>Grupos Privados</strong>.</p>", - "sidebar.tutorialScreen2": "<h4>Los canal \"General\" y \"Fuera de Tópico\"</h4><p>Estos son dos canales para comenzar:</p><p><strong>General</strong> es el lugar para tener comunicación con todo el equipo. Todos los integrantes de tu equipo son miembros de este canal.</p><p><strong>Fuera de Tópico</strong> es un lugar para diversión y humor fuera de los canales relacionados con el trabajo. Tu y tu equipo pueden decidir que otros canales crear.</p>", + "sidebar.tutorialScreen2": "<h4>Los canal \"{townsquare}\" y \"{offtopic}\"</h4><p>Estos son dos canales para comenzar:</p><p><strong>{townsquare}</strong> es el lugar para tener comunicación con todo el equipo. Todos los integrantes de tu equipo son miembros de este canal.</p><p><strong>{offtopic}</strong> es un lugar para diversión y humor fuera de los canales relacionados con el trabajo. Tu y tu equipo pueden decidir que otros canales crear.</p>", "sidebar.tutorialScreen3": "<h4>Creando y Uniendose a Canales</h4><p>Pincha en <strong>\"Más...\"</strong> para crear un nuevo canal o unirte a uno existente.</p><p>También puedes crear un nuevo canal o grupo privado al pinchar el simbolo de <strong>\"+\"</strong> que se encuentra al lado del encabezado de Canales o Grupos Privados.</p>", "sidebar.unreadAbove": "Mensaje(s) sin leer ▲", "sidebar.unreadBelow": "Mensaje(s) sin leer ▼", @@ -1188,7 +1188,7 @@ "textbox.quote": ">cita", "textbox.strike": "tachado", "tutorial_intro.allSet": "Ya estás listo para comenzar", - "tutorial_intro.end": "Pincha “Siguiente” para entrar al Canal General. Este es el primer canal que ven tus compañeros cuando ingresan. Utilizalo para mandar mensajes que todos deben leer.", + "tutorial_intro.end": "Pincha “Siguiente” para entrar al {channel}. Este es el primer canal que ven tus compañeros cuando ingresan. Utilizalo para mandar mensajes que todos deben leer.", "tutorial_intro.invite": "Invitar compañeros", "tutorial_intro.next": "Siguiente", "tutorial_intro.screenOne": "<h3>Bienvenido a:</h3> <h1>Mattermost</h1> <p>Las comunicaciones de tu equipo en un solo lugar, con búsquedas instantáneas y disponible desde donde sea.</p> <p>Mantén a tu equipo conectado para ayudarlos a conseguir lo que realmente importa.</p>", diff --git a/webapp/i18n/fr.json b/webapp/i18n/fr.json index f05987e15..be207f0da 100644 --- a/webapp/i18n/fr.json +++ b/webapp/i18n/fr.json @@ -986,7 +986,7 @@ "sidebar.pg": "Groupes privés", "sidebar.removeList": "Retirer de la liste", "sidebar.tutorialScreen1": "<h4>Canaux</h4><p><strong>Les canaux</strong> organisent les conversations en sujets distincts. Ils sont ouverts à tout le monde dans votre équipe. Pour envoyer des messages privés, utilisez <strong>Messages Privés</strong> pour une personne ou <strong>Groupes Privés</strong> pour plusieurs personnes.</p>", - "sidebar.tutorialScreen2": "<h4>Canaux \"Town Square\" et \"Off-Topic\"</h4><p>Voici deux canaux publics pour commencer :</p><p><strong>Town Square</strong> (\"centre-ville\") est l'endroit idéal pour communiquer avec toute l'équipe. Tous les membres de votre équipe sont membres de ce canal.</p><p><strong>Off-Topic</strong> (\"hors-sujet\") est l'endroit pour se détendre et parler d'autre chose que de travail. Vous et votre équipe décidez des autres canaux à créer.</p>", + "sidebar.tutorialScreen2": "<h4>Canaux \"{townsquare}\" et \"{offtopic}\"</h4><p>Voici deux canaux publics pour commencer :</p><p><strong>{townsquare}</strong> (\"centre-ville\") est l'endroit idéal pour communiquer avec toute l'équipe. Tous les membres de votre équipe sont membres de ce canal.</p><p><strong>{offtopic}</strong> (\"hors-sujet\") est l'endroit pour se détendre et parler d'autre chose que de travail. Vous et votre équipe décidez des autres canaux à créer.</p>", "sidebar.tutorialScreen3": "<h4>Créer et rejoindre des canaux</h4><p>Cliquez sur <strong>\"Plus...\"</strong> pour créer un nouveau canal ou rejoindre un canal existant.</p><p>Vous pouvez aussi créer un nouveau canal ou un groupe privé en cliquant sur le symbole <strong>\"+\"</strong> à côté du nom du canal ou de l'en-tête du groupe privé.</p>", "sidebar.unreadAbove": "Message(s) non-lu(s) ci-dessus", "sidebar.unreadBelow": "Message(s) non-lu(s) ci-dessous", @@ -1134,7 +1134,7 @@ "textbox.quote": ">citation", "textbox.strike": "barré", "tutorial_intro.allSet": "C'est parti !", - "tutorial_intro.end": "Cliquez sur \"Suivant\" pour entrer dans Town Square. C'est le premier canal que les membres voient quand ils s'inscrivent. Utilisez-le pour poster des messages que tout le monde doit lire en premier.", + "tutorial_intro.end": "Cliquez sur \"Suivant\" pour entrer dans {channel}. C'est le premier canal que les membres voient quand ils s'inscrivent. Utilisez-le pour poster des messages que tout le monde doit lire en premier.", "tutorial_intro.invite": "Inviter des membres", "tutorial_intro.next": "Suivant", "tutorial_intro.screenOne": "<h3>Bienvenue sur :</h3><h1>Mattermost</h1><p>Toute la communication de votre équipe à un seul endroit, Your team communication all in one place, instantanément consultable et disponible partout.</p><p>Gardez le lien avec votre équipe pour accomplir les tâches les plus importantes.</p>", diff --git a/webapp/i18n/pt.json b/webapp/i18n/pt.json index 0614ad39e..7525306e6 100644 --- a/webapp/i18n/pt.json +++ b/webapp/i18n/pt.json @@ -1031,7 +1031,7 @@ "sidebar.pg": "Grupos Privados", "sidebar.removeList": "Remover da lista", "sidebar.tutorialScreen1": "<h4>Canais</h4><p><strong>Canais</strong> organizar conversas em diferentes tópicos. Eles estão abertos a todos em sua equipe. Para enviar comunicações privadas utilize <strong>Mensagens Diretas</strong> para uma única pessoa ou <strong>Grupos Privados</strong> para várias pessoas.</p>", - "sidebar.tutorialScreen2": "<h4>Canais \"Town Square\" e \"Off-Topic\"</h4><p>Aqui estão dois canais públicos para começar:</p><p><strong>Town Square</strong> é um lugar comunicação de toda equipe. Todo mundo em sua equipe é um membro deste canal.</p><p><strong>Off-Topic</strong> é um lugar para diversão e humor fora dos canais relacionados com o trabalho. Você e sua equipe podem decidir qual outros canais serão criados.</p>", + "sidebar.tutorialScreen2": "<h4>Canais \"{townsquare}\" e \"{offtopic}\"</h4><p>Aqui estão dois canais públicos para começar:</p><p><strong>{townsquare}</strong> é um lugar comunicação de toda equipe. Todo mundo em sua equipe é um membro deste canal.</p><p><strong>{offtopic}</strong> é um lugar para diversão e humor fora dos canais relacionados com o trabalho. Você e sua equipe podem decidir qual outros canais serão criados.</p>", "sidebar.tutorialScreen3": "<h4>Criando e participando de Canais</h4><p>Clique em <strong>\"Mais...\"</strong> para criar um novo canal ou participar de um já existente.</p><p>Você também pode criar um novo canal ou grupo privado ao clicar em <strong>no símbolo \"+\"</strong> ao lado do canal ou grupo privado no cabeçalho.</p>", "sidebar.unreadAbove": "Post(s) não lidos abaixo", "sidebar.unreadBelow": "Post(s) não lidos abaixo", @@ -1179,7 +1179,7 @@ "textbox.quote": ">citar", "textbox.strike": "tachado", "tutorial_intro.allSet": "Está tudo pronto", - "tutorial_intro.end": "Clique em “Próximo” para entrar Town Square. Este é o primeiro canal que sua equipe de trabalho vê quando eles se inscrevem. Use para postar atualizações que todos precisam saber.", + "tutorial_intro.end": "Clique em “Próximo” para entrar {channel}. Este é o primeiro canal que sua equipe de trabalho vê quando eles se inscrevem. Use para postar atualizações que todos precisam saber.", "tutorial_intro.invite": "Convidar pessoas para equipe", "tutorial_intro.next": "Próximo", "tutorial_intro.screenOne": "<h3>Bem vindo ao:</h3><h1>Mattermost</h1><p>Sua equipe de comunicação em um só lugar, pesquisas instantâneas disponível em qualquer lugar</p><p>Mantenha sua equipe conectada para ajudá-los a conseguir o que mais importa.</p>", diff --git a/webapp/stores/post_store.jsx b/webapp/stores/post_store.jsx index f328ca306..3f2f75796 100644 --- a/webapp/stores/post_store.jsx +++ b/webapp/stores/post_store.jsx @@ -96,7 +96,7 @@ class PostStoreClass extends EventEmitter { let post = null; if (posts.posts.hasOwnProperty(postId)) { - post = Object.assign({}, posts.posts[postId]); + post = posts.posts[postId]; } return post; @@ -104,7 +104,7 @@ class PostStoreClass extends EventEmitter { getAllPosts(id) { if (this.postsInfo.hasOwnProperty(id)) { - return Object.assign({}, this.postsInfo[id].postList); + return this.postsInfo[id].postList; } return null; diff --git a/webapp/utils/constants.jsx b/webapp/utils/constants.jsx index 68df771f9..72c4404c7 100644 --- a/webapp/utils/constants.jsx +++ b/webapp/utils/constants.jsx @@ -192,7 +192,9 @@ export default { MOBILE_VIDEO_WIDTH: 480, MOBILE_VIDEO_HEIGHT: 360, DEFAULT_CHANNEL: 'town-square', + DEFAULT_CHANNEL_UI_NAME: 'Town Square', OFFTOPIC_CHANNEL: 'off-topic', + OFFTOPIC_CHANNEL_UI_NAME: 'Off-Topic', GITLAB_SERVICE: 'gitlab', GOOGLE_SERVICE: 'google', EMAIL_SERVICE: 'email', |