Let emoji_store.jsx use Client APIs to resolve URLs (#5302)
Этот коммит содержится в:
коммит произвёл
George Goldberg
родитель
11e0a7daa2
Коммит
432dc9239f
133
webapp/client/browser_web_client.jsx
Обычный файл
133
webapp/client/browser_web_client.jsx
Обычный файл
@@ -0,0 +1,133 @@
|
|||||||
|
// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
|
||||||
|
// See License.txt for license information.
|
||||||
|
|
||||||
|
import Client from './client.jsx';
|
||||||
|
|
||||||
|
import TeamStore from 'stores/team_store.jsx';
|
||||||
|
import BrowserStore from 'stores/browser_store.jsx';
|
||||||
|
|
||||||
|
import * as GlobalActions from 'actions/global_actions.jsx';
|
||||||
|
import {reconnect} from 'actions/websocket_actions.jsx';
|
||||||
|
|
||||||
|
import request from 'superagent';
|
||||||
|
|
||||||
|
const HTTP_UNAUTHORIZED = 401;
|
||||||
|
|
||||||
|
const mfaPaths = [
|
||||||
|
'/mfa/setup',
|
||||||
|
'/mfa/confirm'
|
||||||
|
];
|
||||||
|
|
||||||
|
class WebClientClass extends Client {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.enableLogErrorsToConsole(true);
|
||||||
|
this.hasInternetConnection = true;
|
||||||
|
TeamStore.addChangeListener(this.onTeamStoreChanged.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
onTeamStoreChanged() {
|
||||||
|
this.setTeamId(TeamStore.getCurrentId());
|
||||||
|
}
|
||||||
|
|
||||||
|
track(category, action, label, property, value) {
|
||||||
|
if (global.window && global.window.analytics) {
|
||||||
|
global.window.analytics.track(action, {category, label, property, value});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trackPage() {
|
||||||
|
if (global.window && global.window.analytics) {
|
||||||
|
global.window.analytics.page();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handleError(err, res) {
|
||||||
|
if (res && res.body && res.body.id === 'api.context.mfa_required.app_error') {
|
||||||
|
if (mfaPaths.indexOf(window.location.pathname) === -1) {
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err.status === HTTP_UNAUTHORIZED && res.req.url !== this.getUsersRoute() + '/login') {
|
||||||
|
GlobalActions.emitUserLoggedOutEvent('/login');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err.status == null) {
|
||||||
|
this.hasInternetConnection = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handleSuccess = (res) => { // eslint-disable-line no-unused-vars
|
||||||
|
if (res && !this.hasInternetConnection) {
|
||||||
|
reconnect();
|
||||||
|
this.hasInternetConnection = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// not sure why but super.login doesn't work if using an () => arrow functions.
|
||||||
|
// I think this might be a webpack issue.
|
||||||
|
webLogin(loginId, password, token, success, error) {
|
||||||
|
this.login(
|
||||||
|
loginId,
|
||||||
|
password,
|
||||||
|
token,
|
||||||
|
(data) => {
|
||||||
|
this.track('api', 'api_users_login_success', '', 'login_id', loginId);
|
||||||
|
BrowserStore.signalLogin();
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
this.track('api', 'api_users_login_fail', '', 'login_id', loginId);
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
webLoginByLdap(loginId, password, token, success, error) {
|
||||||
|
this.loginByLdap(
|
||||||
|
loginId,
|
||||||
|
password,
|
||||||
|
token,
|
||||||
|
(data) => {
|
||||||
|
this.track('api', 'api_users_login_success', '', 'login_id', loginId);
|
||||||
|
BrowserStore.signalLogin();
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
this.track('api', 'api_users_login_fail', '', 'login_id', loginId);
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
getYoutubeVideoInfo(googleKey, videoId, success, error) {
|
||||||
|
request.get('https://www.googleapis.com/youtube/v3/videos').
|
||||||
|
query({part: 'snippet', id: videoId, key: googleKey}).
|
||||||
|
end((err, res) => {
|
||||||
|
if (err) {
|
||||||
|
return error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!res.body) {
|
||||||
|
console.error('Missing response body for getYoutubeVideoInfo'); // eslint-disable-line no-console
|
||||||
|
}
|
||||||
|
|
||||||
|
return success(res.body);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var WebClient = new WebClientClass();
|
||||||
|
export default WebClient;
|
||||||
@@ -1,133 +1,10 @@
|
|||||||
// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
|
// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
|
||||||
// See License.txt for license information.
|
// See License.txt for license information.
|
||||||
|
|
||||||
|
// This file is only for testing on non-browser environments.
|
||||||
|
// See browser_web_client.jsx for the actual implementation for browsers.
|
||||||
|
|
||||||
import Client from './client.jsx';
|
import Client from './client.jsx';
|
||||||
|
|
||||||
import TeamStore from 'stores/team_store.jsx';
|
var WebClient = new Client();
|
||||||
import BrowserStore from 'stores/browser_store.jsx';
|
|
||||||
|
|
||||||
import * as GlobalActions from 'actions/global_actions.jsx';
|
|
||||||
import {reconnect} from 'actions/websocket_actions.jsx';
|
|
||||||
|
|
||||||
import request from 'superagent';
|
|
||||||
|
|
||||||
const HTTP_UNAUTHORIZED = 401;
|
|
||||||
|
|
||||||
const mfaPaths = [
|
|
||||||
'/mfa/setup',
|
|
||||||
'/mfa/confirm'
|
|
||||||
];
|
|
||||||
|
|
||||||
class WebClientClass extends Client {
|
|
||||||
constructor() {
|
|
||||||
super();
|
|
||||||
this.enableLogErrorsToConsole(true);
|
|
||||||
this.hasInternetConnection = true;
|
|
||||||
TeamStore.addChangeListener(this.onTeamStoreChanged.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
onTeamStoreChanged() {
|
|
||||||
this.setTeamId(TeamStore.getCurrentId());
|
|
||||||
}
|
|
||||||
|
|
||||||
track(category, action, label, property, value) {
|
|
||||||
if (global.window && global.window.analytics) {
|
|
||||||
global.window.analytics.track(action, {category, label, property, value});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
trackPage() {
|
|
||||||
if (global.window && global.window.analytics) {
|
|
||||||
global.window.analytics.page();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
handleError(err, res) {
|
|
||||||
if (res && res.body && res.body.id === 'api.context.mfa_required.app_error') {
|
|
||||||
if (mfaPaths.indexOf(window.location.pathname) === -1) {
|
|
||||||
window.location.reload();
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err.status === HTTP_UNAUTHORIZED && res.req.url !== this.getUsersRoute() + '/login') {
|
|
||||||
GlobalActions.emitUserLoggedOutEvent('/login');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err.status == null) {
|
|
||||||
this.hasInternetConnection = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
handleSuccess = (res) => { // eslint-disable-line no-unused-vars
|
|
||||||
if (res && !this.hasInternetConnection) {
|
|
||||||
reconnect();
|
|
||||||
this.hasInternetConnection = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// not sure why but super.login doesn't work if using an () => arrow functions.
|
|
||||||
// I think this might be a webpack issue.
|
|
||||||
webLogin(loginId, password, token, success, error) {
|
|
||||||
this.login(
|
|
||||||
loginId,
|
|
||||||
password,
|
|
||||||
token,
|
|
||||||
(data) => {
|
|
||||||
this.track('api', 'api_users_login_success', '', 'login_id', loginId);
|
|
||||||
BrowserStore.signalLogin();
|
|
||||||
|
|
||||||
if (success) {
|
|
||||||
success(data);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
this.track('api', 'api_users_login_fail', '', 'login_id', loginId);
|
|
||||||
if (error) {
|
|
||||||
error(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
webLoginByLdap(loginId, password, token, success, error) {
|
|
||||||
this.loginByLdap(
|
|
||||||
loginId,
|
|
||||||
password,
|
|
||||||
token,
|
|
||||||
(data) => {
|
|
||||||
this.track('api', 'api_users_login_success', '', 'login_id', loginId);
|
|
||||||
BrowserStore.signalLogin();
|
|
||||||
|
|
||||||
if (success) {
|
|
||||||
success(data);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
this.track('api', 'api_users_login_fail', '', 'login_id', loginId);
|
|
||||||
if (error) {
|
|
||||||
error(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
getYoutubeVideoInfo(googleKey, videoId, success, error) {
|
|
||||||
request.get('https://www.googleapis.com/youtube/v3/videos').
|
|
||||||
query({part: 'snippet', id: videoId, key: googleKey}).
|
|
||||||
end((err, res) => {
|
|
||||||
if (err) {
|
|
||||||
return error(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!res.body) {
|
|
||||||
console.error('Missing response body for getYoutubeVideoInfo'); // eslint-disable-line no-console
|
|
||||||
}
|
|
||||||
|
|
||||||
return success(res.body);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var WebClient = new WebClientClass();
|
|
||||||
export default WebClient;
|
export default WebClient;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "mattermost-webapp",
|
"name": "mattermost-webapp",
|
||||||
|
"browser": {"./client/web_client.jsx": "./client/browser_web_client.jsx"},
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
|
// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
|
||||||
// See License.txt for license information.
|
// See License.txt for license information.
|
||||||
|
|
||||||
|
import Client from '../client/web_client.jsx';
|
||||||
import AppDispatcher from '../dispatcher/app_dispatcher.jsx';
|
import AppDispatcher from '../dispatcher/app_dispatcher.jsx';
|
||||||
import Constants from 'utils/constants.jsx';
|
import Constants from 'utils/constants.jsx';
|
||||||
import EventEmitter from 'events';
|
import EventEmitter from 'events';
|
||||||
@@ -148,8 +149,7 @@ class EmojiStore extends EventEmitter {
|
|||||||
|
|
||||||
getEmojiImageUrl(emoji) {
|
getEmojiImageUrl(emoji) {
|
||||||
if (emoji.id) {
|
if (emoji.id) {
|
||||||
// must match Client.getCustomEmojiImageUrl
|
return Client.getCustomEmojiImageUrl(emoji.id);
|
||||||
return `/api/v3/emoji/${emoji.id}`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const filename = emoji.filename || emoji.aliases[0];
|
const filename = emoji.filename || emoji.aliases[0];
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user