Merge branch 'master' into PLT-25
Этот коммит содержится в:
@@ -3,6 +3,7 @@
|
||||
|
||||
var client = require('./client.jsx');
|
||||
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
|
||||
var BrowserStore = require('../stores/browser_store.jsx');
|
||||
var ChannelStore = require('../stores/channel_store.jsx');
|
||||
var PostStore = require('../stores/post_store.jsx');
|
||||
var UserStore = require('../stores/user_store.jsx');
|
||||
@@ -50,18 +51,18 @@ export function getChannels(force, updateLastViewed, checkVersion) {
|
||||
callTracker.getChannels = utils.getTimestamp();
|
||||
|
||||
client.getChannels(
|
||||
function getChannelsSuccess(data, textStatus, xhr) {
|
||||
(data, textStatus, xhr) => {
|
||||
callTracker.getChannels = 0;
|
||||
|
||||
if (checkVersion) {
|
||||
var serverVersion = xhr.getResponseHeader('X-Version-ID');
|
||||
|
||||
if (!UserStore.getLastVersion()) {
|
||||
UserStore.setLastVersion(serverVersion);
|
||||
if (!BrowserStore.getLastServerVersion()) {
|
||||
BrowserStore.setLastServerVersion(serverVersion);
|
||||
}
|
||||
|
||||
if (serverVersion !== UserStore.getLastVersion()) {
|
||||
UserStore.setLastVersion(serverVersion);
|
||||
if (serverVersion !== BrowserStore.getLastServerVersion()) {
|
||||
BrowserStore.setLastServerVersion(serverVersion);
|
||||
window.location.href = window.location.href;
|
||||
console.log('Detected version update refreshing the page'); //eslint-disable-line no-console
|
||||
}
|
||||
@@ -77,7 +78,7 @@ export function getChannels(force, updateLastViewed, checkVersion) {
|
||||
members: data.members
|
||||
});
|
||||
},
|
||||
function getChannelsFailure(err) {
|
||||
(err) => {
|
||||
callTracker.getChannels = 0;
|
||||
dispatchError(err, 'getChannels');
|
||||
}
|
||||
@@ -566,8 +567,8 @@ export function getMe() {
|
||||
}
|
||||
|
||||
callTracker.getMe = utils.getTimestamp();
|
||||
client.getMeSynchronous(
|
||||
function getMeSyncSuccess(data, textStatus, xhr) {
|
||||
client.getMe(
|
||||
(data, textStatus, xhr) => {
|
||||
callTracker.getMe = 0;
|
||||
|
||||
if (xhr.status === 304 || !data) {
|
||||
@@ -579,7 +580,7 @@ export function getMe() {
|
||||
me: data
|
||||
});
|
||||
},
|
||||
function getMeSyncFailure(err) {
|
||||
(err) => {
|
||||
callTracker.getMe = 0;
|
||||
dispatchError(err, 'getMe');
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ var BrowserStore = require('../stores/browser_store.jsx');
|
||||
var TeamStore = require('../stores/team_store.jsx');
|
||||
var ErrorStore = require('../stores/error_store.jsx');
|
||||
|
||||
export function track(category, action, label, prop, val) {
|
||||
global.window.analytics.track(action, {category: category, label: label, property: prop, value: val});
|
||||
export function track(category, action, label, property, value) {
|
||||
global.window.analytics.track(action, {category, label, property, value});
|
||||
}
|
||||
|
||||
export function trackPage() {
|
||||
@@ -232,6 +232,7 @@ export function logout() {
|
||||
track('api', 'api_users_logout');
|
||||
var currentTeamUrl = TeamStore.getCurrentTeamUrl();
|
||||
BrowserStore.clear();
|
||||
ErrorStore.storeLastError(null);
|
||||
window.location.href = currentTeamUrl + '/logout';
|
||||
}
|
||||
|
||||
@@ -399,10 +400,9 @@ export function getAllTeams(success, error) {
|
||||
});
|
||||
}
|
||||
|
||||
export function getMeSynchronous(success, error) {
|
||||
export function getMe(success, error) {
|
||||
var currentUser = null;
|
||||
$.ajax({
|
||||
async: false,
|
||||
cache: false,
|
||||
url: '/api/v1/users/me',
|
||||
dataType: 'json',
|
||||
@@ -416,7 +416,7 @@ export function getMeSynchronous(success, error) {
|
||||
},
|
||||
error: function onError(xhr, status, err) {
|
||||
if (error) {
|
||||
var e = handleError('getMeSynchronous', xhr, status, err);
|
||||
var e = handleError('getMe', xhr, status, err);
|
||||
error(e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,6 @@ module.exports = {
|
||||
|
||||
RECIEVED_MSG: null,
|
||||
|
||||
CLICK_TEAM: null,
|
||||
RECIEVED_TEAM: null,
|
||||
|
||||
RECIEVED_CONFIG: null,
|
||||
@@ -140,7 +139,7 @@ module.exports = {
|
||||
sidebarText: '#333333',
|
||||
sidebarUnreadText: '#333333',
|
||||
sidebarTextHoverBg: '#e6f2fa',
|
||||
sidebarTextActiveBg: '#e1e1e1',
|
||||
sidebarTextActiveBorder: '#378FD2',
|
||||
sidebarTextActiveColor: '#111111',
|
||||
sidebarHeaderBg: '#2389d7',
|
||||
sidebarHeaderTextColor: '#ffffff',
|
||||
@@ -162,7 +161,7 @@ module.exports = {
|
||||
sidebarText: '#fff',
|
||||
sidebarUnreadText: '#fff',
|
||||
sidebarTextHoverBg: '#136197',
|
||||
sidebarTextActiveBg: '#136197',
|
||||
sidebarTextActiveBorder: '#7AB0D6',
|
||||
sidebarTextActiveColor: '#FFFFFF',
|
||||
sidebarHeaderBg: '#2f81b7',
|
||||
sidebarHeaderTextColor: '#FFFFFF',
|
||||
@@ -184,7 +183,7 @@ module.exports = {
|
||||
sidebarText: '#fff',
|
||||
sidebarUnreadText: '#fff',
|
||||
sidebarTextHoverBg: '#4A5664',
|
||||
sidebarTextActiveBg: '#39769C',
|
||||
sidebarTextActiveBorder: '#39769C',
|
||||
sidebarTextActiveColor: '#FFFFFF',
|
||||
sidebarHeaderBg: '#1B2C3E',
|
||||
sidebarHeaderTextColor: '#FFFFFF',
|
||||
@@ -206,7 +205,7 @@ module.exports = {
|
||||
sidebarText: '#fff',
|
||||
sidebarUnreadText: '#fff',
|
||||
sidebarTextHoverBg: '#302e30',
|
||||
sidebarTextActiveBg: '#484748',
|
||||
sidebarTextActiveBorder: '#196CAF',
|
||||
sidebarTextActiveColor: '#FFFFFF',
|
||||
sidebarHeaderBg: '#1f1f1f',
|
||||
sidebarHeaderTextColor: '#FFFFFF',
|
||||
@@ -249,8 +248,8 @@ module.exports = {
|
||||
uiName: 'Sidebar Text Hover BG'
|
||||
},
|
||||
{
|
||||
id: 'sidebarTextActiveBg',
|
||||
uiName: 'Sidebar Text Active BG'
|
||||
id: 'sidebarTextActiveBorder',
|
||||
uiName: 'Sidebar Text Active Border'
|
||||
},
|
||||
{
|
||||
id: 'sidebarTextActiveColor',
|
||||
|
||||
@@ -2,27 +2,27 @@
|
||||
// See License.txt for license information.
|
||||
|
||||
const emoticonPatterns = {
|
||||
smile: /(^|\s)(:-?\))($|\s)/g, // :)
|
||||
wink: /(^|\s)(;-?\))($|\s)/g, // ;)
|
||||
open_mouth: /(^|\s)(:o)($|\s)/gi, // :o
|
||||
scream: /(^|\s)(:-o)($|\s)/gi, // :-o
|
||||
smirk: /(^|\s)(:-?])($|\s)/g, // :]
|
||||
grinning: /(^|\s)(:-?d)($|\s)/gi, // :D
|
||||
stuck_out_tongue_closed_eyes: /(^|\s)(x-d)($|\s)/gi, // x-d
|
||||
stuck_out_tongue: /(^|\s)(:-?p)($|\s)/gi, // :p
|
||||
rage: /(^|\s)(:-?[\[@])($|\s)/g, // :@
|
||||
frowning: /(^|\s)(:-?\()($|\s)/g, // :(
|
||||
sob: /(^|\s)(:['’]-?\(|:'\(|:'\()($|\s)/g, // :`(
|
||||
kissing_heart: /(^|\s)(:-?\*)($|\s)/g, // :*
|
||||
pensive: /(^|\s)(:-?\/)($|\s)/g, // :/
|
||||
confounded: /(^|\s)(:-?s)($|\s)/gi, // :s
|
||||
flushed: /(^|\s)(:-?\|)($|\s)/g, // :|
|
||||
relaxed: /(^|\s)(:-?\$)($|\s)/g, // :$
|
||||
mask: /(^|\s)(:-x)($|\s)/gi, // :-x
|
||||
heart: /(^|\s)(<3|<3)($|\s)/g, // <3
|
||||
broken_heart: /(^|\s)(<\/3|</3)($|\s)/g, // </3
|
||||
thumbsup: /(^|\s)(:\+1:)($|\s)/g, // :+1:
|
||||
thumbsdown: /(^|\s)(:\-1:)($|\s)/g // :-1:
|
||||
smile: /(^|\s)(:-?\))(?=$|\s)/g, // :)
|
||||
wink: /(^|\s)(;-?\))(?=$|\s)/g, // ;)
|
||||
open_mouth: /(^|\s)(:o)(?=$|\s)/gi, // :o
|
||||
scream: /(^|\s)(:-o)(?=$|\s)/gi, // :-o
|
||||
smirk: /(^|\s)(:-?])(?=$|\s)/g, // :]
|
||||
grinning: /(^|\s)(:-?d)(?=$|\s)/gi, // :D
|
||||
stuck_out_tongue_closed_eyes: /(^|\s)(x-d)(?=$|\s)/gi, // x-d
|
||||
stuck_out_tongue: /(^|\s)(:-?p)(?=$|\s)/gi, // :p
|
||||
rage: /(^|\s)(:-?[\[@])(?=$|\s)/g, // :@
|
||||
frowning: /(^|\s)(:-?\()(?=$|\s)/g, // :(
|
||||
sob: /(^|\s)(:['’]-?\(|:'\(|:'\()(?=$|\s)/g, // :`(
|
||||
kissing_heart: /(^|\s)(:-?\*)(?=$|\s)/g, // :*
|
||||
pensive: /(^|\s)(:-?\/)(?=$|\s)/g, // :/
|
||||
confounded: /(^|\s)(:-?s)(?=$|\s)/gi, // :s
|
||||
flushed: /(^|\s)(:-?\|)(?=$|\s)/g, // :|
|
||||
relaxed: /(^|\s)(:-?\$)(?=$|\s)/g, // :$
|
||||
mask: /(^|\s)(:-x)(?=$|\s)/gi, // :-x
|
||||
heart: /(^|\s)(<3|<3)(?=$|\s)/g, // <3
|
||||
broken_heart: /(^|\s)(<\/3|</3)(?=$|\s)/g, // </3
|
||||
thumbsup: /(^|\s)(:\+1:)(?=$|\s)/g, // :+1:
|
||||
thumbsdown: /(^|\s)(:\-1:)(?=$|\s)/g // :-1:
|
||||
};
|
||||
|
||||
function initializeEmoticonMap() {
|
||||
@@ -127,28 +127,28 @@ const emoticonMap = initializeEmoticonMap();
|
||||
export function handleEmoticons(text, tokens) {
|
||||
let output = text;
|
||||
|
||||
function replaceEmoticonWithToken(match, prefix, name, suffix) {
|
||||
function replaceEmoticonWithToken(fullMatch, prefix, matchText, name) {
|
||||
if (emoticonMap[name]) {
|
||||
const index = tokens.size;
|
||||
const alias = `MM_EMOTICON${index}`;
|
||||
|
||||
tokens.set(alias, {
|
||||
value: `<img align="absmiddle" alt="${match}" class="emoji" src="${getImagePathForEmoticon(name)}" title="${match}" />`,
|
||||
originalText: match
|
||||
value: `<img align="absmiddle" alt="${matchText}" class="emoji" src="${getImagePathForEmoticon(name)}" title="${matchText}" />`,
|
||||
originalText: fullMatch
|
||||
});
|
||||
|
||||
return prefix + alias + suffix;
|
||||
return prefix + alias;
|
||||
}
|
||||
|
||||
return match;
|
||||
return fullMatch;
|
||||
}
|
||||
|
||||
output = output.replace(/(^|\s):([a-zA-Z0-9_-]+):($|\s)/g, replaceEmoticonWithToken);
|
||||
output = output.replace(/(^|\s)(:([a-zA-Z0-9_-]+):)(?=$|\s)/g, (fullMatch, prefix, matchText, name) => replaceEmoticonWithToken(fullMatch, prefix, matchText, name));
|
||||
|
||||
$.each(emoticonPatterns, (name, pattern) => {
|
||||
// this might look a bit funny, but since the name isn't contained in the actual match
|
||||
// like with the named emoticons, we need to add it in manually
|
||||
output = output.replace(pattern, (match, prefix, emoticon, suffix) => replaceEmoticonWithToken(match, prefix, name, suffix));
|
||||
output = output.replace(pattern, (fullMatch, prefix, matchText) => replaceEmoticonWithToken(fullMatch, prefix, matchText, name));
|
||||
});
|
||||
|
||||
return output;
|
||||
|
||||
@@ -118,7 +118,7 @@ export function notifyMe(title, body, channel) {
|
||||
}
|
||||
|
||||
if (permission === 'granted') {
|
||||
var notification = new Notification(title, {body: body, tag: body, icon: '/static/images/icon50x50.gif'});
|
||||
var notification = new Notification(title, {body: body, tag: body, icon: '/static/images/icon50x50.png'});
|
||||
notification.onclick = function onClick() {
|
||||
window.focus();
|
||||
if (channel) {
|
||||
@@ -425,18 +425,14 @@ export function applyTheme(theme) {
|
||||
changeCss('@media(max-width: 768px){.settings-modal .settings-table .nav>li:hover a', 'background:' + theme.sidebarTextHoverBg, 1);
|
||||
}
|
||||
|
||||
if (theme.sidebarTextActiveBg) {
|
||||
changeCss('.sidebar--left .nav-pills__container li.active a, .sidebar--left .nav-pills__container li.active a:hover, .sidebar--left .nav-pills__container li.active a:focus, .settings-modal .nav-pills>li.active a, .settings-modal .nav-pills>li.active a:hover, .settings-modal .nav-pills>li.active a:active', 'background:' + theme.sidebarTextActiveBg, 1);
|
||||
if (theme.sidebarTextActiveBorder) {
|
||||
changeCss('.sidebar--left .nav li.active a:before, .settings-modal .nav-pills>li.active a:before', 'background:' + theme.sidebarTextActiveBorder, 1);
|
||||
}
|
||||
|
||||
if (theme.sidebarTextActiveColor) {
|
||||
changeCss('.sidebar--left .nav-pills__container li.active a, .sidebar--left .nav-pills__container li.active a:hover, .sidebar--left .nav-pills__container li.active a:focus, .settings-modal .nav-pills>li.active a, .settings-modal .nav-pills>li.active a:hover, .settings-modal .nav-pills>li.active a:active', 'color:' + theme.sidebarTextActiveColor, 2);
|
||||
}
|
||||
|
||||
if (theme.sidebarTextActiveBg === theme.onlineIndicator) {
|
||||
changeCss('.sidebar--left .nav-pills__container li.active a .status .online--icon', 'fill:' + theme.sidebarTextActiveColor, 1);
|
||||
}
|
||||
|
||||
if (theme.sidebarHeaderBg) {
|
||||
changeCss('.sidebar--left .team__header, .sidebar--menu .team__header', 'background:' + theme.sidebarHeaderBg, 1);
|
||||
changeCss('.modal .modal-header', 'background:' + theme.sidebarHeaderBg, 1);
|
||||
@@ -873,7 +869,7 @@ export function getFileUrl(filename) {
|
||||
if (url.indexOf('/api/v1/files/get') !== -1) {
|
||||
url = filename.split('/api/v1/files/get')[1];
|
||||
}
|
||||
url = getWindowLocationOrigin() + '/api/v1/files/get' + url;
|
||||
url = getWindowLocationOrigin() + '/api/v1/files/get' + url + '?' + getSessionIndex();
|
||||
|
||||
return url;
|
||||
}
|
||||
@@ -884,6 +880,14 @@ export function getFileName(path) {
|
||||
return split[split.length - 1];
|
||||
}
|
||||
|
||||
export function getSessionIndex() {
|
||||
if (global.window.mm_session_token_index >= 0) {
|
||||
return 'session_token_index=' + global.window.mm_session_token_index;
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
// Generates a RFC-4122 version 4 compliant globally unique identifier.
|
||||
export function generateId() {
|
||||
// implementation taken from http://stackoverflow.com/a/2117523
|
||||
|
||||
Ссылка в новой задаче
Block a user