summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rw-r--r--api/command_loadtest_test.go4
-rw-r--r--i18n/es.json4
-rw-r--r--tests/test-emoticons.md22
-rw-r--r--tests/test-emoticons1.md12
-rw-r--r--tests/test-emoticons2.md2
-rw-r--r--tests/test-emoticons3.md3
-rw-r--r--tests/test-emoticons4.md2
-rw-r--r--web/react/components/channel_header.jsx17
-rw-r--r--web/react/components/channel_loader.jsx14
-rw-r--r--web/react/components/error_bar.jsx16
-rw-r--r--web/react/components/member_list.jsx11
-rw-r--r--web/react/components/suggestion/at_mention_provider.jsx2
-rw-r--r--web/react/components/suggestion/command_provider.jsx2
-rw-r--r--web/react/components/textbox.jsx4
-rw-r--r--web/react/components/user_settings/manage_command_hooks.jsx2
-rw-r--r--web/react/components/user_settings/manage_incoming_hooks.jsx2
-rw-r--r--web/react/components/user_settings/manage_outgoing_hooks.jsx2
-rw-r--r--web/react/stores/error_store.jsx20
-rw-r--r--web/react/stores/socket_store.jsx16
-rw-r--r--web/react/utils/async_client.jsx4
-rw-r--r--web/react/utils/client.jsx28
-rw-r--r--web/react/utils/utils.jsx2
-rw-r--r--web/sass-files/sass/partials/_responsive.scss2
-rw-r--r--web/static/i18n/en.json9
-rw-r--r--web/static/i18n/es.json14
-rw-r--r--web/static/i18n/pt.json3
27 files changed, 126 insertions, 96 deletions
diff --git a/README.md b/README.md
index eb2ba9d8a..c329df925 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,8 @@ Learn More:
- **End User Help** - View our [guide for new users to Mattermost](http://docs.mattermost.com/help/getting-started/signing-in.html).
- **Install Guides** - See [step-by-step setup on Ubuntu, RHEL/Oracle Linux/CentOS, Debian, plus Docker for preview](http://docs.mattermost.com/install/requirements.html)
- **Deployment Guide** - Review [Mattermost components and deployment on a single-machine or cluster](http://docs.mattermost.com/deployment/deployment.html).
-- **Developer Guide** - Learn [how developers can extend Mattermost](http://docs.mattermost.com/developer/api.html).
+- **Developer Guide** - Learn [how developers can extend Mattermost](http://docs.mattermost.com/developer/developer-setup.html).
+- **API Options** - Underestand API options via [webhooks, slash commands, drivers and RESTful Web Service](http://docs.mattermost.com/developer/api.html).
- **Localization Guide** - Learn [how Mattermost supports different languages](http://docs.mattermost.com/developer/localization.html).
Any other questions, mail us at info@mattermost.com. We’d love to meet you!
diff --git a/api/command_loadtest_test.go b/api/command_loadtest_test.go
index 7cb77cf18..1debc766a 100644
--- a/api/command_loadtest_test.go
+++ b/api/command_loadtest_test.go
@@ -201,12 +201,12 @@ func TestLoadTestUrlCommands(t *testing.T) {
t.Fatal("/loadtest url for README.md should've executed")
}
- command = "/loadtest url test-emoticons.md"
+ command = "/loadtest url test-emoticons1.md"
if r := Client.Must(Client.Command(channel.Id, command, false)).Data.(*model.CommandResponse); r.Text != "Loading data..." {
t.Fatal("/loadtest url for test-emoticons.md should've executed")
}
- command = "/loadtest url test-emoticons"
+ command = "/loadtest url test-emoticons1"
if r := Client.Must(Client.Command(channel.Id, command, false)).Data.(*model.CommandResponse); r.Text != "Loading data..." {
t.Fatal("/loadtest url for test-emoticons should've executed")
}
diff --git a/i18n/es.json b/i18n/es.json
index c289d9e25..b290d3854 100644
--- a/i18n/es.json
+++ b/i18n/es.json
@@ -3037,11 +3037,11 @@
},
{
"id": "store.sql_user.get_by_auth.app_error",
- "translation": "No pudimos encontrar una cuenta existente que coincida con tu tipo de autenticación para este equipo. Es posible que necesites una invitación por aprte del dueño del equipo para unirte."
+ "translation": "No pudimos encontrar una cuenta existente que coincida con tu tipo de autenticación para este equipo. Es posible que necesites una invitación por parte del dueño del equipo para unirte."
},
{
"id": "store.sql_user.get_by_username.app_error",
- "translation": "No pudimos encontrar una cuenta existente que coincida con tu nombre de usuario para este equipo. Es posible que necesites una invitación por aprte del dueño del equipo para unirte."
+ "translation": "No pudimos encontrar una cuenta existente que coincida con tu nombre de usuario para este equipo. Es posible que necesites una invitación por parte del dueño del equipo para unirte."
},
{
"id": "store.sql_user.get_for_export.app_error",
diff --git a/tests/test-emoticons.md b/tests/test-emoticons.md
deleted file mode 100644
index fc2594d9e..000000000
--- a/tests/test-emoticons.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Emoticon Testing
-Verify that all emoticons render. This test should render in three separate messages since it's ~11000 characters.
-
-### Emoticon - Punctuation
-
-:) :-) ;) ;-) :o :O :-o :-O :] :-] :d :-D x-d x-D :p :-P :@ :( :-( :'( :/ :-/ :s :-s :| :-| :$ :-$ :-x <3 :+1: :-1:
-
-### Emoticons - People
-:bowtie: :smile: :laughing: :blush: :smiley: :relaxed: :smirk: :heart_eyes: :kissing_heart: :kissing_closed_eyes: :flushed: :relieved: :satisfied: :grin: :wink: :stuck_out_tongue_winking_eye: :stuck_out_tongue_closed_eyes: :grinning: :kissing: :kissing_smiling_eyes: :stuck_out_tongue: :sleeping: :worried: :frowning: :anguished: :open_mouth: :grimacing: :confused: :hushed: :expressionless: :unamused: :sweat_smile: :sweat: :disappointed_relieved: :weary: :pensive: :disappointed: :confounded: :fearful: :cold_sweat: :persevere: :cry: :sob: :joy: :astonished: :scream: :neckbeard: :tired_face: :angry: :rage: :triumph: :sleepy: :yum: :mask: :sunglasses: :dizzy_face: :imp: :smiling_imp: :neutral_face: :no_mouth: :innocent: :alien: :yellow_heart: :blue_heart: :purple_heart: :heart: :green_heart: :broken_heart: :heartbeat: :heartpulse: :two_hearts: :revolving_hearts: :cupid: :sparkling_heart: :sparkles: :star: :star2: :dizzy: :boom: :collision: :anger: :exclamation: :question: :grey_exclamation: :grey_question: :zzz: :dash: :sweat_drops: :notes: :musical_note: :fire: :hankey: :poop: :shit: :+1: :thumbsup: :-1: :thumbsdown: :ok_hand: :punch: :facepunch: :fist: :v: :wave: :hand: :raised_hand: :open_hands: :point_up: :point_down: :point_left: :point_right: :raised_hands: :pray: :point_up_2: :clap: :muscle: :metal: :fu: :runner: :running: :couple: :family: :two_men_holding_hands: :two_women_holding_hands: :dancer: :dancers: :ok_woman: :no_good: :information_desk_person: :raising_hand: :bride_with_veil: :person_with_pouting_face: :person_frowning: :bow: :couplekiss: :couple_with_heart: :massage: :haircut: :nail_care: :boy: :girl: :woman: :man: :baby: :older_woman: :older_man: :person_with_blond_hair: :man_with_gua_pi_mao: :man_with_turban: :construction_worker: :cop: :angel: :princess: :smiley_cat: :smile_cat: :heart_eyes_cat: :kissing_cat: :smirk_cat: :scream_cat: :crying_cat_face: :joy_cat: :pouting_cat: :japanese_ogre: :japanese_goblin: :see_no_evil: :hear_no_evil: :speak_no_evil: :guardsman: :skull: :feet: :lips: :kiss: :droplet: :ear: :eyes: :nose: :tongue: :love_letter: :bust_in_silhouette: :busts_in_silhouette: :speech_balloon: :thought_balloon: :feelsgood: :finnadie: :goberserk: :godmode: :hurtrealbad: :rage1: :rage2: :rage3: :rage4: :suspect: :trollface:
-
-### Emoticons - Nature
-:sunny: :umbrella: :cloud: :snowflake: :snowman: :zap: :cyclone: :foggy: :ocean: :cat: :dog: :mouse: :hamster: :rabbit: :wolf: :frog: :tiger: :koala: :bear: :pig: :pig_nose: :cow: :boar: :monkey_face: :monkey: :horse: :racehorse: :camel: :sheep: :elephant: :panda_face: :snake: :bird: :baby_chick: :hatched_chick: :hatching_chick: :chicken: :penguin: :turtle: :bug: :honeybee: :ant: :beetle: :snail: :octopus: :tropical_fish: :fish: :whale: :whale2: :dolphin: :cow2: :ram: :rat: :water_buffalo: :tiger2: :rabbit2: :dragon: :goat: :rooster: :dog2: :pig2: :mouse2: :ox: :dragon_face: :blowfish: :crocodile: :dromedary_camel: :leopard: :cat2: :poodle: :paw_prints: :bouquet: :cherry_blossom: :tulip: :four_leaf_clover: :rose: :sunflower: :hibiscus: :maple_leaf: :leaves: :fallen_leaf: :herb: :mushroom: :cactus: :palm_tree: :evergreen_tree: :deciduous_tree: :chestnut: :seedling: :blossom: :ear_of_rice: :shell: :globe_with_meridians: :sun_with_face: :full_moon_with_face: :new_moon_with_face: :new_moon: :waxing_crescent_moon: :first_quarter_moon: :waxing_gibbous_moon: :full_moon: :waning_gibbous_moon: :last_quarter_moon: :waning_crescent_moon: :last_quarter_moon_with_face: :first_quarter_moon_with_face: :crescent_moon: :earth_africa: :earth_americas: :earth_asia: :volcano: :milky_way: :partly_sunny: :octocat: :squirrel:
-
-### Emoticons - Objects
-:bamboo: :gift_heart: :dolls: :school_satchel: :mortar_board: :flags: :fireworks: :sparkler: :wind_chime: :rice_scene: :jack_o_lantern: :ghost: :santa: :christmas_tree: :gift: :bell: :no_bell: :tanabata_tree: :tada: :confetti_ball: :balloon: :crystal_ball: :cd: :dvd: :floppy_disk: :camera: :video_camera: :movie_camera: :computer: :tv: :iphone: :phone: :telephone: :telephone_receiver: :pager: :fax: :minidisc: :vhs: :sound: :speaker: :mute: :loudspeaker: :mega: :hourglass: :hourglass_flowing_sand: :alarm_clock: :watch: :radio: :satellite: :loop: :mag: :mag_right: :unlock: :lock: :lock_with_ink_pen: :closed_lock_with_key: :key: :bulb: :flashlight: :high_brightness: :low_brightness: :electric_plug: :battery: :calling: :email: :mailbox: :postbox: :bath: :bathtub: :shower: :toilet: :wrench: :nut_and_bolt: :hammer: :seat: :moneybag: :yen: :dollar: :pound: :euro: :credit_card: :money_with_wings: :e-mail: :inbox_tray: :outbox_tray: :envelope: :incoming_envelope: :postal_horn: :mailbox_closed: :mailbox_with_mail: :mailbox_with_no_mail: :package: :door: :smoking: :bomb: :gun: :hocho: :pill: :syringe: :page_facing_up: :page_with_curl: :bookmark_tabs: :bar_chart: :chart_with_upwards_trend: :chart_with_downwards_trend: :scroll: :clipboard: :calendar: :date: :card_index: :file_folder: :open_file_folder: :scissors: :pushpin: :paperclip: :black_nib: :pencil2: :straight_ruler: :triangular_ruler: :closed_book: :green_book: :blue_book: :orange_book: :notebook: :notebook_with_decorative_cover: :ledger: :books: :bookmark: :name_badge: :microscope: :telescope: :newspaper: :football: :basketball: :soccer: :baseball: :tennis: :8ball: :8ball: :rugby_football: :bowling: :golf: :mountain_bicyclist: :bicyclist: :horse_racing: :snowboarder: :swimmer: :surfer: :ski: :spades: :hearts: :clubs: :diamonds: :gem: :ring: :trophy: :musical_score: :musical_keyboard: :violin: :space_invader: :video_game: :black_joker: :flower_playing_cards: :game_die: :dart: :mahjong: :clapper: :memo: :pencil: :book: :art: :microphone: :headphones: :trumpet: :saxophone: :guitar: :shoe: :sandal: :high_heel: :lipstick: :boot: :shirt: :tshirt: :necktie: :womans_clothes: :dress: :running_shirt_with_sash: :jeans: :kimono: :bikini: :ribbon: :tophat: :crown: :womans_hat: :mans_shoe: :closed_umbrella: :briefcase: :handbag: :pouch: :purse: :eyeglasses: :fishing_pole_and_fish: :coffee: :tea: :sake: :baby_bottle: :beer: :beers: :cocktail: :tropical_drink: :wine_glass: :fork_and_knife: :pizza: :hamburger: :fries: :poultry_leg: :meat_on_bone: :spaghetti: :curry: :fried_shrimp: :bento: :sushi: :fish_cake: :rice_ball: :rice_cracker: :rice: :ramen: :stew: :oden: :dango: :egg: :bread: :doughnut: :custard: :icecream: :ice_cream: :shaved_ice: :birthday: :cake: :cookie: :chocolate_bar: :candy: :lollipop: :honey_pot: :apple: :green_apple: :tangerine: :lemon: :cherries: :grapes: :watermelon: :strawberry: :peach: :melon: :banana: :pear: :pineapple: :sweet_potato: :eggplant: :tomato: :corn:
-
-### Emoticons - Places
-
-:house: :house_with_garden: :school: :office: :post_office: :hospital: :bank: :convenience_store: :love_hotel: :hotel: :wedding: :church: :department_store: :european_post_office: :city_sunrise: :city_sunset: :japanese_castle: :european_castle: :tent: :factory: :tokyo_tower: :japan: :mount_fuji: :sunrise_over_mountains: :sunrise: :stars: :statue_of_liberty: :bridge_at_night: :carousel_horse: :rainbow: :ferris_wheel: :fountain: :roller_coaster: :ship: :speedboat: :boat: :sailboat: :rowboat: :anchor: :rocket: :airplane: :helicopter: :steam_locomotive: :tram: :mountain_railway: :bike: :aerial_tramway: :suspension_railway: :mountain_cableway: :tractor: :blue_car: :oncoming_automobile: :car: :red_car: :taxi: :oncoming_taxi: :articulated_lorry: :bus: :oncoming_bus: :rotating_light: :police_car: :oncoming_police_car: :fire_engine: :ambulance: :minibus: :truck: :train: :station: :train2: :bullettrain_front: :bullettrain_side: :light_rail: :monorail: :railway_car: :trolleybus: :ticket: :fuelpump: :vertical_traffic_light: :traffic_light: :warning: :construction: :beginner: :atm: :slot_machine: :busstop: :barber: :hotsprings: :checkered_flag: :crossed_flags: :izakaya_lantern: :moyai: :circus_tent: :performing_arts: :round_pushpin: :triangular_flag_on_post: :jp: :kr: :cn: :us: :fr: :es: :it: :ru: :gb: :uk: :de:
-
-### Emoticons - Symbols
-:one: :two: :three: :four: :five: :six: :seven: :eight: :nine: :keycap_ten: :1234: :zero: :hash: :symbols: :arrow_backward: :arrow_down: :arrow_forward: :arrow_left: :capital_abcd: :abcd: :abc: :arrow_lower_left: :arrow_lower_right: :arrow_right: :arrow_up: :arrow_upper_left: :arrow_upper_right: :arrow_double_down: :arrow_double_up: :arrow_down_small: :arrow_heading_down: :arrow_heading_up: :leftwards_arrow_with_hook: :arrow_right_hook: :left_right_arrow: :arrow_up_down: :arrow_up_small: :arrows_clockwise: :arrows_counterclockwise: :rewind: :fast_forward: :information_source: :ok: :twisted_rightwards_arrows: :repeat: :repeat_one: :new: :top: :up: :cool: :free: :ng: :cinema: :koko: :signal_strength: :u5272: :u5408: :u55b6: :u6307: :u6708: :u6709: :u6e80: :u7121: :u7533: :u7a7a: :u7981: :sa: :restroom: :mens: :womens: :baby_symbol: :no_smoking: :parking: :wheelchair: :metro: :baggage_claim: :accept: :wc: :potable_water: :put_litter_in_its_place: :secret: :congratulations: :m: :passport_control: :left_luggage: :customs: :ideograph_advantage: :cl: :sos: :id: :no_entry_sign: :underage: :no_mobile_phones: :do_not_litter: :non-potable_water: :no_bicycles: :no_pedestrians: :children_crossing: :no_entry: :eight_spoked_asterisk: :sparkle: :eight_pointed_black_star: :heart_decoration: :vs: :vibration_mode: :mobile_phone_off: :chart: :currency_exchange: :aries: :taurus: :gemini: :cancer: :leo: :virgo: :libra: :scorpius: :sagittarius: :capricorn: :aquarius: :pisces: :ophiuchus: :six_pointed_star: :negative_squared_cross_mark: :a: :b: :ab: :o2: :diamond_shape_with_a_dot_inside: :recycle: :end: :back: :on: :soon: :clock1: :clock130: :clock10: :clock1030: :clock11: :clock1130: :clock12: :clock1230: :clock2: :clock230: :clock3: :clock330: :clock4: :clock430: :clock5: :clock530: :clock6: :clock630: :clock7: :clock730: :clock8: :clock830: :clock9: :clock930: :heavy_dollar_sign: :copyright: :registered: :tm: :x: :heavy_exclamation_mark: :bangbang: :interrobang: :o: :heavy_multiplication_x: :heavy_plus_sign: :heavy_minus_sign: :heavy_division_sign: :white_flower: :100: :heavy_check_mark: :ballot_box_with_check: :radio_button: :link: :curly_loop: :wavy_dash: :part_alternation_mark: :trident: :black_small_square: :white_small_square: :black_medium_small_square: :white_medium_small_square: :black_medium_square: :white_medium_square: :black_large_square: :white_large_square: :white_check_mark: :black_square_button: :white_square_button: :black_circle: :white_circle: :red_circle: :large_blue_circle: :large_blue_diamond: :large_orange_diamond: :small_blue_diamond: :small_orange_diamond: :small_red_triangle: :small_red_triangle_down: :shipit:
diff --git a/tests/test-emoticons1.md b/tests/test-emoticons1.md
new file mode 100644
index 000000000..855edbb1c
--- /dev/null
+++ b/tests/test-emoticons1.md
@@ -0,0 +1,12 @@
+# Emoticon Testing
+Verify that all emoticons render. This test should render in three separate messages since it's ~11000 characters.
+
+### Emoticon - Punctuation
+
+:) :-) ;) ;-) :o :O :-o :-O :] :-] :d :-D x-d x-D :p :-P :@ :( :-( :'( :/ :-/ :s :-s :| :-| :$ :-$ :-x <3 :+1: :-1:
+
+### Emoticons - People
+:bowtie: :smile: :laughing: :blush: :smiley: :relaxed: :smirk: :heart_eyes: :kissing_heart: :kissing_closed_eyes: :flushed: :relieved: :satisfied: :grin: :wink: :stuck_out_tongue_winking_eye: :stuck_out_tongue_closed_eyes: :grinning: :kissing: :kissing_smiling_eyes: :stuck_out_tongue: :sleeping: :worried: :frowning: :anguished: :open_mouth: :grimacing: :confused: :hushed: :expressionless: :unamused: :sweat_smile: :sweat: :disappointed_relieved: :weary: :pensive: :disappointed: :confounded: :fearful: :cold_sweat: :persevere: :cry: :sob: :joy: :astonished: :scream: :neckbeard: :tired_face: :angry: :rage: :triumph: :sleepy: :yum: :mask: :sunglasses: :dizzy_face: :imp: :smiling_imp: :neutral_face: :no_mouth: :innocent: :alien: :yellow_heart: :blue_heart: :purple_heart: :heart: :green_heart: :broken_heart: :heartbeat: :heartpulse: :two_hearts: :revolving_hearts: :cupid: :sparkling_heart: :sparkles: :star: :star2: :dizzy: :boom: :collision: :anger: :exclamation: :question: :grey_exclamation: :grey_question: :zzz: :dash: :sweat_drops: :notes: :musical_note: :fire: :hankey: :poop: :shit: :+1: :thumbsup: :-1: :thumbsdown: :ok_hand: :punch: :facepunch: :fist: :v: :wave: :hand: :raised_hand: :open_hands: :point_up: :point_down: :point_left: :point_right: :raised_hands: :pray: :point_up_2: :clap: :muscle: :metal: :fu: :runner: :running: :couple: :family: :two_men_holding_hands: :two_women_holding_hands: :dancer: :dancers: :ok_woman: :no_good: :information_desk_person: :raising_hand: :bride_with_veil: :person_with_pouting_face: :person_frowning: :bow: :couplekiss: :couple_with_heart: :massage: :haircut: :nail_care: :boy: :girl: :woman: :man: :baby: :older_woman: :older_man: :person_with_blond_hair: :man_with_gua_pi_mao: :man_with_turban: :construction_worker: :cop: :angel: :princess: :smiley_cat: :smile_cat: :heart_eyes_cat: :kissing_cat: :smirk_cat: :scream_cat: :crying_cat_face: :joy_cat: :pouting_cat: :japanese_ogre: :japanese_goblin: :see_no_evil: :hear_no_evil: :speak_no_evil: :guardsman: :skull: :feet: :lips: :kiss: :droplet: :ear: :eyes: :nose: :tongue: :love_letter: :bust_in_silhouette: :busts_in_silhouette: :speech_balloon: :thought_balloon: :feelsgood: :finnadie: :goberserk: :godmode: :hurtrealbad: :rage1: :rage2: :rage3: :rage4: :suspect: :trollface:
+
+### Emoticons - Nature
+:sunny: :umbrella: :cloud: :snowflake: :snowman: :zap: :cyclone: :foggy: :ocean: :cat: :dog: :mouse: :hamster: :rabbit: :wolf: :frog: :tiger: :koala: :bear: :pig: :pig_nose: :cow: :boar: :monkey_face: :monkey: :horse: :racehorse: :camel: :sheep: :elephant: :panda_face: :snake: :bird: :baby_chick: :hatched_chick: :hatching_chick: :chicken: :penguin: :turtle: :bug: :honeybee: :ant: :beetle: :snail: :octopus: :tropical_fish: :fish: :whale: :whale2: :dolphin: :cow2: :ram: :rat: :water_buffalo: :tiger2: :rabbit2: :dragon: :goat: :rooster: :dog2: :pig2: :mouse2: :ox: :dragon_face: :blowfish: :crocodile: :dromedary_camel: :leopard: :cat2: :poodle: :paw_prints: :bouquet: :cherry_blossom: :tulip: :four_leaf_clover: :rose: :sunflower: :hibiscus: :maple_leaf: :leaves: :fallen_leaf: :herb: :mushroom: :cactus: :palm_tree: :evergreen_tree: :deciduous_tree: :chestnut: :seedling: :blossom: :ear_of_rice: :shell: :globe_with_meridians: :sun_with_face: :full_moon_with_face: :new_moon_with_face: :new_moon: :waxing_crescent_moon: :first_quarter_moon: :waxing_gibbous_moon: :full_moon: :waning_gibbous_moon: :last_quarter_moon: :waning_crescent_moon: :last_quarter_moon_with_face: :first_quarter_moon_with_face: :crescent_moon: :earth_africa: :earth_americas: :earth_asia: :volcano: :milky_way: :partly_sunny: :octocat: :squirrel:
diff --git a/tests/test-emoticons2.md b/tests/test-emoticons2.md
new file mode 100644
index 000000000..e95235af2
--- /dev/null
+++ b/tests/test-emoticons2.md
@@ -0,0 +1,2 @@
+### Emoticons - Objects
+:bamboo: :gift_heart: :dolls: :school_satchel: :mortar_board: :flags: :fireworks: :sparkler: :wind_chime: :rice_scene: :jack_o_lantern: :ghost: :santa: :christmas_tree: :gift: :bell: :no_bell: :tanabata_tree: :tada: :confetti_ball: :balloon: :crystal_ball: :cd: :dvd: :floppy_disk: :camera: :video_camera: :movie_camera: :computer: :tv: :iphone: :phone: :telephone: :telephone_receiver: :pager: :fax: :minidisc: :vhs: :sound: :speaker: :mute: :loudspeaker: :mega: :hourglass: :hourglass_flowing_sand: :alarm_clock: :watch: :radio: :satellite: :loop: :mag: :mag_right: :unlock: :lock: :lock_with_ink_pen: :closed_lock_with_key: :key: :bulb: :flashlight: :high_brightness: :low_brightness: :electric_plug: :battery: :calling: :email: :mailbox: :postbox: :bath: :bathtub: :shower: :toilet: :wrench: :nut_and_bolt: :hammer: :seat: :moneybag: :yen: :dollar: :pound: :euro: :credit_card: :money_with_wings: :e-mail: :inbox_tray: :outbox_tray: :envelope: :incoming_envelope: :postal_horn: :mailbox_closed: :mailbox_with_mail: :mailbox_with_no_mail: :package: :door: :smoking: :bomb: :gun: :hocho: :pill: :syringe: :page_facing_up: :page_with_curl: :bookmark_tabs: :bar_chart: :chart_with_upwards_trend: :chart_with_downwards_trend: :scroll: :clipboard: :calendar: :date: :card_index: :file_folder: :open_file_folder: :scissors: :pushpin: :paperclip: :black_nib: :pencil2: :straight_ruler: :triangular_ruler: :closed_book: :green_book: :blue_book: :orange_book: :notebook: :notebook_with_decorative_cover: :ledger: :books: :bookmark: :name_badge: :microscope: :telescope: :newspaper: :football: :basketball: :soccer: :baseball: :tennis: :8ball: :8ball: :rugby_football: :bowling: :golf: :mountain_bicyclist: :bicyclist: :horse_racing: :snowboarder: :swimmer: :surfer: :ski: :spades: :hearts: :clubs: :diamonds: :gem: :ring: :trophy: :musical_score: :musical_keyboard: :violin: :space_invader: :video_game: :black_joker: :flower_playing_cards: :game_die: :dart: :mahjong: :clapper: :memo: :pencil: :book: :art: :microphone: :headphones: :trumpet: :saxophone: :guitar: :shoe: :sandal: :high_heel: :lipstick: :boot: :shirt: :tshirt: :necktie: :womans_clothes: :dress: :running_shirt_with_sash: :jeans: :kimono: :bikini: :ribbon: :tophat: :crown: :womans_hat: :mans_shoe: :closed_umbrella: :briefcase: :handbag: :pouch: :purse: :eyeglasses: :fishing_pole_and_fish: :coffee: :tea: :sake: :baby_bottle: :beer: :beers: :cocktail: :tropical_drink: :wine_glass: :fork_and_knife: :pizza: :hamburger: :fries: :poultry_leg: :meat_on_bone: :spaghetti: :curry: :fried_shrimp: :bento: :sushi: :fish_cake: :rice_ball: :rice_cracker: :rice: :ramen: :stew: :oden: :dango: :egg: :bread: :doughnut: :custard: :icecream: :ice_cream: :shaved_ice: :birthday: :cake: :cookie: :chocolate_bar: :candy: :lollipop: :honey_pot: :apple: :green_apple: :tangerine: :lemon: :cherries: :grapes: :watermelon: :strawberry: :peach: :melon: :banana: :pear: :pineapple: :sweet_potato: :eggplant: :tomato: :corn:
diff --git a/tests/test-emoticons3.md b/tests/test-emoticons3.md
new file mode 100644
index 000000000..e16026824
--- /dev/null
+++ b/tests/test-emoticons3.md
@@ -0,0 +1,3 @@
+### Emoticons - Places
+
+:house: :house_with_garden: :school: :office: :post_office: :hospital: :bank: :convenience_store: :love_hotel: :hotel: :wedding: :church: :department_store: :european_post_office: :city_sunrise: :city_sunset: :japanese_castle: :european_castle: :tent: :factory: :tokyo_tower: :japan: :mount_fuji: :sunrise_over_mountains: :sunrise: :stars: :statue_of_liberty: :bridge_at_night: :carousel_horse: :rainbow: :ferris_wheel: :fountain: :roller_coaster: :ship: :speedboat: :boat: :sailboat: :rowboat: :anchor: :rocket: :airplane: :helicopter: :steam_locomotive: :tram: :mountain_railway: :bike: :aerial_tramway: :suspension_railway: :mountain_cableway: :tractor: :blue_car: :oncoming_automobile: :car: :red_car: :taxi: :oncoming_taxi: :articulated_lorry: :bus: :oncoming_bus: :rotating_light: :police_car: :oncoming_police_car: :fire_engine: :ambulance: :minibus: :truck: :train: :station: :train2: :bullettrain_front: :bullettrain_side: :light_rail: :monorail: :railway_car: :trolleybus: :ticket: :fuelpump: :vertical_traffic_light: :traffic_light: :warning: :construction: :beginner: :atm: :slot_machine: :busstop: :barber: :hotsprings: :checkered_flag: :crossed_flags: :izakaya_lantern: :moyai: :circus_tent: :performing_arts: :round_pushpin: :triangular_flag_on_post: :jp: :kr: :cn: :us: :fr: :es: :it: :ru: :gb: :uk: :de:
diff --git a/tests/test-emoticons4.md b/tests/test-emoticons4.md
new file mode 100644
index 000000000..87c088fc8
--- /dev/null
+++ b/tests/test-emoticons4.md
@@ -0,0 +1,2 @@
+### Emoticons - Symbols
+:one: :two: :three: :four: :five: :six: :seven: :eight: :nine: :keycap_ten: :1234: :zero: :hash: :symbols: :arrow_backward: :arrow_down: :arrow_forward: :arrow_left: :capital_abcd: :abcd: :abc: :arrow_lower_left: :arrow_lower_right: :arrow_right: :arrow_up: :arrow_upper_left: :arrow_upper_right: :arrow_double_down: :arrow_double_up: :arrow_down_small: :arrow_heading_down: :arrow_heading_up: :leftwards_arrow_with_hook: :arrow_right_hook: :left_right_arrow: :arrow_up_down: :arrow_up_small: :arrows_clockwise: :arrows_counterclockwise: :rewind: :fast_forward: :information_source: :ok: :twisted_rightwards_arrows: :repeat: :repeat_one: :new: :top: :up: :cool: :free: :ng: :cinema: :koko: :signal_strength: :u5272: :u5408: :u55b6: :u6307: :u6708: :u6709: :u6e80: :u7121: :u7533: :u7a7a: :u7981: :sa: :restroom: :mens: :womens: :baby_symbol: :no_smoking: :parking: :wheelchair: :metro: :baggage_claim: :accept: :wc: :potable_water: :put_litter_in_its_place: :secret: :congratulations: :m: :passport_control: :left_luggage: :customs: :ideograph_advantage: :cl: :sos: :id: :no_entry_sign: :underage: :no_mobile_phones: :do_not_litter: :non-potable_water: :no_bicycles: :no_pedestrians: :children_crossing: :no_entry: :eight_spoked_asterisk: :sparkle: :eight_pointed_black_star: :heart_decoration: :vs: :vibration_mode: :mobile_phone_off: :chart: :currency_exchange: :aries: :taurus: :gemini: :cancer: :leo: :virgo: :libra: :scorpius: :sagittarius: :capricorn: :aquarius: :pisces: :ophiuchus: :six_pointed_star: :negative_squared_cross_mark: :a: :b: :ab: :o2: :diamond_shape_with_a_dot_inside: :recycle: :end: :back: :on: :soon: :clock1: :clock130: :clock10: :clock1030: :clock11: :clock1130: :clock12: :clock1230: :clock2: :clock230: :clock3: :clock330: :clock4: :clock430: :clock5: :clock530: :clock6: :clock630: :clock7: :clock730: :clock8: :clock830: :clock9: :clock930: :heavy_dollar_sign: :copyright: :registered: :tm: :x: :heavy_exclamation_mark: :bangbang: :interrobang: :o: :heavy_multiplication_x: :heavy_plus_sign: :heavy_minus_sign: :heavy_division_sign: :white_flower: :100: :heavy_check_mark: :ballot_box_with_check: :radio_button: :link: :curly_loop: :wavy_dash: :part_alternation_mark: :trident: :black_small_square: :white_small_square: :black_medium_small_square: :white_medium_small_square: :black_medium_square: :white_medium_square: :black_large_square: :white_large_square: :white_check_mark: :black_square_button: :white_square_button: :black_circle: :white_circle: :red_circle: :large_blue_circle: :large_blue_diamond: :large_orange_diamond: :small_blue_diamond: :small_orange_diamond: :small_red_triangle: :small_red_triangle_down: :shipit:
diff --git a/web/react/components/channel_header.jsx b/web/react/components/channel_header.jsx
index 727f84e8e..51be13dcf 100644
--- a/web/react/components/channel_header.jsx
+++ b/web/react/components/channel_header.jsx
@@ -194,6 +194,17 @@ export default class ChannelHeader extends React.Component {
);
}
+ let popoverListMembers;
+ if (!isDirect) {
+ popoverListMembers = (
+ <PopoverListMembers
+ members={this.state.users}
+ memberCount={this.state.userCount}
+ channelId={channel.id}
+ />
+ );
+ }
+
const dropdownContents = [];
if (isDirect) {
dropdownContents.push(
@@ -442,11 +453,7 @@ export default class ChannelHeader extends React.Component {
</div>
</th>
<th>
- <PopoverListMembers
- members={this.state.users}
- memberCount={this.state.userCount}
- channelId={channel.id}
- />
+ {popoverListMembers}
</th>
<th className='search-bar__container'><NavbarSearchBox/></th>
<th>
diff --git a/web/react/components/channel_loader.jsx b/web/react/components/channel_loader.jsx
index f3000ee05..e47f2aa50 100644
--- a/web/react/components/channel_loader.jsx
+++ b/web/react/components/channel_loader.jsx
@@ -6,6 +6,7 @@
AsyncClient with requests. */
import * as AsyncClient from '../utils/async_client.jsx';
+import * as Client from '../utils/client.jsx';
import SocketStore from '../stores/socket_store.jsx';
import ChannelStore from '../stores/channel_store.jsx';
import PostStore from '../stores/post_store.jsx';
@@ -45,6 +46,14 @@ const holders = defineMessages({
wrote: {
id: 'channel_loader.wrote',
defaultMessage: ' wrote: '
+ },
+ connectionError: {
+ id: 'channel_loader.connection_error',
+ defaultMessage: 'There appears to be a problem with your internet connection.'
+ },
+ unknownError: {
+ id: 'channel_loader.unknown_error',
+ defaultMessage: 'We received an unexpected status code from the server.'
}
});
@@ -67,6 +76,11 @@ class ChannelLoader extends React.Component {
wrote: formatMessage(holders.wrote)
});
+ Client.setTranslations({
+ connectionError: formatMessage(holders.connectionError),
+ unknownError: formatMessage(holders.unknownError)
+ });
+
this.state = {};
}
componentDidMount() {
diff --git a/web/react/components/error_bar.jsx b/web/react/components/error_bar.jsx
index f04185b46..9a114c544 100644
--- a/web/react/components/error_bar.jsx
+++ b/web/react/components/error_bar.jsx
@@ -38,25 +38,9 @@ export default class ErrorBar extends React.Component {
return false;
}
- if (s.connErrorCount && s.connErrorCount >= 1 && s.connErrorCount < 7) {
- return false;
- }
-
return true;
}
- isConnectionError(s) {
- if (!s.connErrorCount || s.connErrorCount === 0) {
- return false;
- }
-
- if (s.connErrorCount > 7) {
- return true;
- }
-
- return false;
- }
-
componentWillMount() {
if (global.window.mm_config.SendEmailNotifications === 'false') {
ErrorStore.storeLastError({message: this.props.intl.formatMessage(messages.preview)});
diff --git a/web/react/components/member_list.jsx b/web/react/components/member_list.jsx
index e6737087b..62d600279 100644
--- a/web/react/components/member_list.jsx
+++ b/web/react/components/member_list.jsx
@@ -3,6 +3,8 @@
import MemberListItem from './member_list_item.jsx';
+import {FormattedMessage} from 'mm-intl';
+
export default class MemberList extends React.Component {
render() {
var members = [];
@@ -13,7 +15,14 @@ export default class MemberList extends React.Component {
var message = null;
if (members.length === 0) {
- message = <tr><td>No users to add.</td></tr>;
+ message = (
+ <tr><td>
+ <FormattedMessage
+ id='member_list.noUsersAdd'
+ defaultMessage='No users to add.'
+ />
+ </td></tr>
+ );
}
return (
diff --git a/web/react/components/suggestion/at_mention_provider.jsx b/web/react/components/suggestion/at_mention_provider.jsx
index 4dc72f69a..064b75ac5 100644
--- a/web/react/components/suggestion/at_mention_provider.jsx
+++ b/web/react/components/suggestion/at_mention_provider.jsx
@@ -89,7 +89,7 @@ export default class AtMentionProvider {
for (const id of Object.keys(users)) {
const user = users[id];
- if (user.username.startsWith(usernamePrefix)) {
+ if (user.username.startsWith(usernamePrefix) && user.delete_at <= 0) {
filtered.push(user);
}
diff --git a/web/react/components/suggestion/command_provider.jsx b/web/react/components/suggestion/command_provider.jsx
index 09c9b9982..21d6d0e0e 100644
--- a/web/react/components/suggestion/command_provider.jsx
+++ b/web/react/components/suggestion/command_provider.jsx
@@ -18,7 +18,7 @@ class CommandSuggestion extends React.Component {
onClick={onClick}
>
<div className='command__title'>
- <string>{item.suggestion}</string>
+ <string>{item.suggestion} {item.hint}</string>
</div>
<div className='command__desc'>
{item.description}
diff --git a/web/react/components/textbox.jsx b/web/react/components/textbox.jsx
index ec299087d..23ecfb57b 100644
--- a/web/react/components/textbox.jsx
+++ b/web/react/components/textbox.jsx
@@ -59,9 +59,9 @@ export default class Textbox extends React.Component {
}
onRecievedError() {
- const errorState = ErrorStore.getLastError();
+ const errorCount = ErrorStore.getConnectionErrorCount();
- if (errorState && errorState.connErrorCount > 0) {
+ if (errorCount > 0) {
this.setState({connection: 'bad-connection'});
} else {
this.setState({connection: ''});
diff --git a/web/react/components/user_settings/manage_command_hooks.jsx b/web/react/components/user_settings/manage_command_hooks.jsx
index bd0659a47..2947138be 100644
--- a/web/react/components/user_settings/manage_command_hooks.jsx
+++ b/web/react/components/user_settings/manage_command_hooks.jsx
@@ -420,7 +420,7 @@ export default class ManageCommandCmds extends React.Component {
<div key='addCommandCmd'>
<FormattedHTMLMessage
id='user.settings.cmds.add_desc'
- defaultMessage='Create slash commands to send events to external integrations and receive a response. For example typing `/patient Joe Smith` could bring back search results from your internal health records management system for the name “Joe Smith”. Please see <a href="http://docs.mattermost.com/developer/slash-commands.html">Slash commands documentation</a> for detailed instructions.'
+ defaultMessage='Create slash commands to send events to external integrations and receive a response. For example typing `/patient Joe Smith` could bring back search results from your internal health records management system for the name “Joe Smith”. Please see <a href="http://docs.mattermost.com/developer/slash-commands.html">Slash commands documentation</a> for detailed instructions. View all slash commands configured on this team below.'
/>
<div><label className='control-label padding-top x2'>
<FormattedMessage
diff --git a/web/react/components/user_settings/manage_incoming_hooks.jsx b/web/react/components/user_settings/manage_incoming_hooks.jsx
index 68e99be7d..79a71b5ac 100644
--- a/web/react/components/user_settings/manage_incoming_hooks.jsx
+++ b/web/react/components/user_settings/manage_incoming_hooks.jsx
@@ -183,7 +183,7 @@ export default class ManageIncomingHooks extends React.Component {
<div key='addIncomingHook'>
<FormattedHTMLMessage
id='user.settings.hooks_in.description'
- defaultMessage='Create webhook URLs for use in external integrations. Please see <a href="http://docs.mattermost.com/developer/webhooks-incoming.html" target="_blank">incoming webhooks documentation</a> to learn more.'
+ defaultMessage='Create webhook URLs for use in external integrations. Please see <a href="http://docs.mattermost.com/developer/webhooks-incoming.html" target="_blank">incoming webhooks documentation</a> to learn more. View all incoming webhooks configured on this team below.'
/>
<div><label className='control-label padding-top x2'>
<FormattedMessage
diff --git a/web/react/components/user_settings/manage_outgoing_hooks.jsx b/web/react/components/user_settings/manage_outgoing_hooks.jsx
index 9c3a60ed5..487254d15 100644
--- a/web/react/components/user_settings/manage_outgoing_hooks.jsx
+++ b/web/react/components/user_settings/manage_outgoing_hooks.jsx
@@ -284,7 +284,7 @@ class ManageOutgoingHooks extends React.Component {
<div key='addOutgoingHook'>
<FormattedHTMLMessage
id='user.settings.hooks_out.addDescription'
- defaultMessage='Create webhooks to send new message events to an external integration. Please see <a href="http://docs.mattermost.com/developer/webhooks-outgoing.html" target="_blank">outgoing webhooks documentation</a> to learn more.'
+ defaultMessage='Create webhooks to send new message events to an external integration. Please see <a href="http://docs.mattermost.com/developer/webhooks-outgoing.html" target="_blank">outgoing webhooks documentation</a> to learn more. View all outgoing webhooks configured on this team below.'
/>
<div><label className='control-label padding-top x2'>
<FormattedMessage
diff --git a/web/react/stores/error_store.jsx b/web/react/stores/error_store.jsx
index 5afcefd12..6928b1e59 100644
--- a/web/react/stores/error_store.jsx
+++ b/web/react/stores/error_store.jsx
@@ -18,7 +18,6 @@ class ErrorStoreClass extends EventEmitter {
this.emitChange = this.emitChange.bind(this);
this.addChangeListener = this.addChangeListener.bind(this);
this.removeChangeListener = this.removeChangeListener.bind(this);
- this.handledError = this.handledError.bind(this);
this.getLastError = this.getLastError.bind(this);
this.storeLastError = this.storeLastError.bind(this);
}
@@ -35,10 +34,6 @@ class ErrorStoreClass extends EventEmitter {
this.removeListener(CHANGE_EVENT, callback);
}
- handledError() {
- BrowserStore.removeItem('last_error');
- }
-
getLastError() {
return BrowserStore.getItem('last_error');
}
@@ -47,8 +42,23 @@ class ErrorStoreClass extends EventEmitter {
BrowserStore.setItem('last_error', error);
}
+ getConnectionErrorCount() {
+ var count = BrowserStore.getItem('last_error_conn');
+
+ if (count == null) {
+ return 0;
+ }
+
+ return count;
+ }
+
+ setConnectionErrorCount(count) {
+ BrowserStore.setItem('last_error_conn', count);
+ }
+
clearLastError() {
BrowserStore.removeItem('last_error');
+ BrowserStore.removeItem('last_error_conn');
}
}
diff --git a/web/react/stores/socket_store.jsx b/web/react/stores/socket_store.jsx
index efb57e226..9b2b049b7 100644
--- a/web/react/stores/socket_store.jsx
+++ b/web/react/stores/socket_store.jsx
@@ -58,6 +58,10 @@ class SocketStoreClass extends EventEmitter {
if (this.failCount === 0) {
console.log('websocket connecting to ' + connUrl); //eslint-disable-line no-console
+ if (ErrorStore.getConnectionErrorCount() > 0) {
+ ErrorStore.setConnectionErrorCount(0);
+ ErrorStore.emitChange();
+ }
}
conn = new WebSocket(connUrl);
@@ -65,10 +69,8 @@ class SocketStoreClass extends EventEmitter {
if (this.failCount > 0) {
console.log('websocket re-established connection'); //eslint-disable-line no-console
- if (ErrorStore.getLastError()) {
- ErrorStore.storeLastError(null);
- ErrorStore.emitChange();
- }
+ ErrorStore.clearLastError();
+ ErrorStore.emitChange();
AsyncClient.getChannels();
AsyncClient.getPosts(ChannelStore.getCurrentId());
@@ -86,7 +88,11 @@ class SocketStoreClass extends EventEmitter {
this.failCount = this.failCount + 1;
- ErrorStore.storeLastError({connErrorCount: this.failCount, message: this.translations.socketError});
+ if (this.failCount > 7) {
+ ErrorStore.storeLastError({message: this.translations.socketError});
+ }
+
+ ErrorStore.setConnectionErrorCount(this.failCount);
ErrorStore.emitChange();
setTimeout(
diff --git a/web/react/utils/async_client.jsx b/web/react/utils/async_client.jsx
index 13b57092d..ca9d81865 100644
--- a/web/react/utils/async_client.jsx
+++ b/web/react/utils/async_client.jsx
@@ -787,11 +787,13 @@ export function getSuggestedCommands(command, suggestionId, component) {
data.forEach((cmd) => {
if (('/' + cmd.trigger).indexOf(command) === 0) {
let s = '/' + cmd.trigger;
+ let hint = '';
if (cmd.auto_complete_hint && cmd.auto_complete_hint.length !== 0) {
- s += ' ' + cmd.auto_complete_hint;
+ hint = cmd.auto_complete_hint;
}
matches.push({
suggestion: s,
+ hint,
description: cmd.auto_complete_desc
});
}
diff --git a/web/react/utils/client.jsx b/web/react/utils/client.jsx
index 81bdb7293..f647e2296 100644
--- a/web/react/utils/client.jsx
+++ b/web/react/utils/client.jsx
@@ -4,6 +4,15 @@ import BrowserStore from '../stores/browser_store.jsx';
import TeamStore from '../stores/team_store.jsx';
import ErrorStore from '../stores/error_store.jsx';
+let translations = {
+ connectionError: 'There appears to be a problem with your internet connection.',
+ unknownError: 'We received an unexpected status code from the server.'
+};
+
+export function setTranslations(messages) {
+ translations = messages;
+}
+
export function track(category, action, label, property, value) {
global.window.analytics.track(action, {category, label, property, value});
}
@@ -23,23 +32,14 @@ function handleError(methodName, xhr, status, err) {
var msg = '';
if (e) {
- msg = 'error in ' + methodName + ' msg=' + e.message + ' detail=' + e.detailed_error + ' rid=' + e.request_id;
+ msg = 'method=' + methodName + ' msg=' + e.message + ' detail=' + e.detailed_error + ' rid=' + e.request_id;
} else {
- msg = 'error in ' + methodName + ' status=' + status + ' statusCode=' + xhr.status + ' err=' + err;
+ msg = 'method=' + methodName + ' status=' + status + ' statusCode=' + xhr.status + ' err=' + err;
if (xhr.status === 0) {
- let errorCount = 1;
- const oldError = ErrorStore.getLastError();
- let connectError = 'There appears to be a problem with your internet connection';
-
- if (oldError && oldError.connErrorCount) {
- errorCount += oldError.connErrorCount;
- connectError = 'Please check connection, Mattermost unreachable. If issue persists, ask administrator to check WebSocket port.';
- }
-
- e = {message: connectError, connErrorCount: errorCount};
+ e = {message: translations.connectionError};
} else {
- e = {message: 'We received an unexpected status code from the server (' + xhr.status + ')'};
+ e = {message: translations.unknownError + ' (' + xhr.status + ')'};
}
}
@@ -279,7 +279,7 @@ export function logout() {
var currentTeamUrl = TeamStore.getCurrentTeamUrl();
BrowserStore.signalLogout();
BrowserStore.clear();
- ErrorStore.storeLastError(null);
+ ErrorStore.clearLastError();
window.location.href = currentTeamUrl + '/logout';
}
diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index 02590bd93..3e531c821 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -158,7 +158,7 @@ export function notifyMe(title, body, channel) {
Notification.requestPermission((permission) => {
if (permission === 'granted') {
try {
- var notification = new Notification(title, {body, tag: body, icon: '/static/images/icon50x50.png'});
+ var notification = new Notification(title, {body: body, tag: body, icon: '/static/images/icon50x50.png'});
notification.onclick = () => {
window.focus();
if (channel) {
diff --git a/web/sass-files/sass/partials/_responsive.scss b/web/sass-files/sass/partials/_responsive.scss
index b724b8ced..ead65af2e 100644
--- a/web/sass-files/sass/partials/_responsive.scss
+++ b/web/sass-files/sass/partials/_responsive.scss
@@ -607,7 +607,7 @@
@include translate3d(0, 0, 0);
}
> div {
- padding-bottom: 0;
+ padding-bottom: 70px;
}
.nav-pills__unread-indicator-bottom {
bottom: 10px;
diff --git a/web/static/i18n/en.json b/web/static/i18n/en.json
index 14d0e2e27..e29df7d70 100644
--- a/web/static/i18n/en.json
+++ b/web/static/i18n/en.json
@@ -543,6 +543,8 @@
"channel_loader.uploadedFile": " uploaded a file",
"channel_loader.uploadedImage": " uploaded an image",
"channel_loader.wrote": " wrote: ",
+ "channel_loader.connection_error": "There appears to be a problem with your internet connection.",
+ "channel_loader.unknown_error": "We received an unexpected status code from the server.",
"channel_members_modal.addNew": " Add New Members",
"channel_members_modal.close": "Close",
"channel_memebers_modal.members": " Members",
@@ -753,6 +755,7 @@
"member_item.makeAdmin": "Make Admin",
"member_item.member": "Member",
"member_item.removeMember": "Remove Member",
+ "member_list.noUsersAdd": "No users to add.",
"member_team_item.confirmDemoteDescription": "If you demote yourself from the System Admin role and there is not another user with System Admin privileges, you'll need to re-assign a System Admin by accessing the Mattermost server through a terminal and running the following command.",
"member_team_item.confirmDemoteRoleTitle": "Confirm demotion from System Admin role",
"member_team_item.confirmDemotion": "Confirm Demotion",
@@ -1072,7 +1075,7 @@
"user.settings.advance.sendTitle": "Send messages on Ctrl + Enter",
"user.settings.advance.title": "Advanced Settings",
"user.settings.cmds.add": "Add",
- "user.settings.cmds.add_desc": "Create slash commands to send events to external integrations and receive a response. For example typing `/patient Joe Smith` could bring back search results from your internal health records management system for the name “Joe Smith”. Please see <a href=\"http://docs.mattermost.com/developer/slash-commands.html\">Slash commands documentation</a> for detailed instructions.",
+ "user.settings.cmds.add_desc": "Create slash commands to send events to external integrations and receive a response. For example typing `/patient Joe Smith` could bring back search results from your internal health records management system for the name “Joe Smith”. Please see <a href=\"http://docs.mattermost.com/developer/slash-commands.html\">Slash commands documentation</a> for detailed instructions. View all slash commands configured on this team below.",
"user.settings.cmds.add_display_name.placeholder": "Example: \"Search patient records\"",
"user.settings.cmds.add_new": "Add a new command",
"user.settings.cmds.add_trigger.placeholder": "Command trigger e.g. \"hello\" not including the slash",
@@ -1185,11 +1188,11 @@
"user.settings.hooks_in.add": "Add",
"user.settings.hooks_in.addTitle": "Add a new incoming webhook",
"user.settings.hooks_in.channel": "Channel: ",
- "user.settings.hooks_in.description": "Create webhook URLs for use in external integrations. Please see <a href=\"http://docs.mattermost.com/developer/webhooks-incoming.html\" target=\"_blank\">incoming webhooks documentation</a> to learn more.",
+ "user.settings.hooks_in.description": "Create webhook URLs for use in external integrations. Please see <a href=\"http://docs.mattermost.com/developer/webhooks-incoming.html\" target=\"_blank\">incoming webhooks documentation</a> to learn more. View all incoming webhooks configured on this team below.",
"user.settings.hooks_in.existing": "Existing incoming webhooks",
"user.settings.hooks_in.none": "None",
"user.settings.hooks_out.add": "Add",
- "user.settings.hooks_out.addDescription": "Create webhooks to send new message events to an external integration. Please see <a href=\"http://docs.mattermost.com/developer/webhooks-outgoing.html\" target=\"_blank\">outgoing webhooks documentation</a> to learn more.",
+ "user.settings.hooks_out.addDescription": "Create webhooks to send new message events to an external integration. Please see <a href=\"http://docs.mattermost.com/developer/webhooks-outgoing.html\" target=\"_blank\">outgoing webhooks documentation</a> to learn more. View all outgoing webhooks configured on this team below.",
"user.settings.hooks_out.addTitle": "Add a new outgoing webhook",
"user.settings.hooks_out.callback": "Callback URLs: ",
"user.settings.hooks_out.callbackDesc": "New line separated URLs that will receive the HTTP POST event",
diff --git a/web/static/i18n/es.json b/web/static/i18n/es.json
index 407994d1a..1f8a2bde7 100644
--- a/web/static/i18n/es.json
+++ b/web/static/i18n/es.json
@@ -17,7 +17,7 @@
"activity_log.moreInfo": "Mas información",
"activity_log.os": "Sistema Operativo: {os}",
"activity_log.sessionId": "Sesión ID: {id}",
- "activity_log.sessionsDescription": "Las sesiones son creadas cuando inicias sesión con tus credenciales en un nuevo navegador desde cualquier dispositivo. Las sesiones te permiten utilizar Mattermost por el período especificado por un Administrador del Sistema sin tener que iniciar sesión nuevamente. Si quieres cerrar tu sesión antes de ese tiempo, utiliza el botón de 'Cerrar Sesión' en la parte de abajo.",
+ "activity_log.sessionsDescription": "Las sesiones son creadas cuando inicias sesión desde un nuevo navegador en un dispositivo. Las Sesiones te permiten utilizar Mattermost sin tener que volver a iniciar sesión por un período de tiempo especificado por el Administrador de Sistema. Si deseas cerrar sesión antes de que se cumpla este tiempo, Utiliza el botón de 'Cerrar Sesión' en la parte de abajo.",
"activity_log_modal.android": "Android",
"activity_log_modal.androidNativeApp": "Android App Nativa",
"activity_log_modal.iphoneNativeApp": "iPhone App Nativa",
@@ -190,7 +190,7 @@
"admin.ldap.lastnameAttrDesc": "El atributo en el servidor LDAP que será utilizado para poblar el apellido de los usuarios en Mattermost.",
"admin.ldap.lastnameAttrEx": "Ej \"sn\"",
"admin.ldap.lastnameAttrTitle": "Atributo Apellido:",
- "admin.ldap.noLicense": "<h4 class=\"banner__heading\">Nota:</h4><p>LDAP es una característica de la edición enterprise. Tu licencia actual no soporta LDAP. Pincha <a href=\"http://mattermost.com\" target=\"_blank\">aquí</a> para información y precios de las licencias enterprise.</p>",
+ "admin.ldap.noLicense": "<h4 class=\"banner__heading\">Nota:</h4><p>LDAP es una característica de la edición enterprise. Tu licencia actual no soporta LDAP. Pincha <a href=\"http://mattermost.com\" target=\"_blank\">aquí</a> para obtener información y precios de las licencias de la edición enterprise.</p>",
"admin.ldap.portDesc": "El puerto que Mattermost utilizará para conectarse al servidor LDAP. El predeterminado es 389.",
"admin.ldap.portEx": "Ej \"389\"",
"admin.ldap.portTitle": "Puerto LDAP:",
@@ -582,7 +582,7 @@
"claim.email_to_sso.pwd": "Contraseña",
"claim.email_to_sso.pwdError": "Por favor introduce tu contraseña.",
"claim.email_to_sso.ssoNote": "Debes tener una cuenta válida con {type}",
- "claim.email_to_sso.ssoType": "Al reclamar tu cuenta, sólo podrás iniciar sesión con {type}",
+ "claim.email_to_sso.ssoType": "Al reclamar tu cuenta, sólo podrás iniciar sesión con {type} SSO",
"claim.email_to_sso.switchTo": "Cambiar cuenta a {uiType}",
"claim.email_to_sso.title": "Cambiar Cuenta de Correo/Contraseña a {uiType}",
"claim.sso_to_email.confirm": "Confirmar Contraseña",
@@ -1059,7 +1059,7 @@
"tutorial_tip.seen": "¿Haz visto esto antes? ",
"upload_overlay.info": "Arrastra un archivo para subirlo.",
"user.settings.advance.embed_preview": "Mostrar la previsualización de enlaces",
- "user.settings.advance.embed_toggle": "Capacidad de Mostrar/Esconder previsualizaciones",
+ "user.settings.advance.embed_toggle": "Capacidad de Mostrar/Esconder las previsualizaciones",
"user.settings.advance.enabled": "habilitada(s)",
"user.settings.advance.feature": " Característica ",
"user.settings.advance.features": " Características ",
@@ -1072,7 +1072,7 @@
"user.settings.advance.sendTitle": "Enviar mensajes con Ctrl + Retorno",
"user.settings.advance.title": "Configuración Avanzada",
"user.settings.cmds.add": "Agregar",
- "user.settings.cmds.add_desc": "Crea comandos de barra para enviar eventos a integraciones externas y recibir una respuesta. Por ejemplo al escribir `/paciente Joe Smith` podría retornar resultados de una búsqueda en tu sistema de adminitración de salud para el nombre “Joe Smith”. Por favor revisa la <a href=\"http://docs.mattermost.com/developer/slash-commands.html\">Documentación de comandos de barra</a> para instrucciones detallas.",
+ "user.settings.cmds.add_desc": "Crea comandos de barra para enviar eventos a integraciones externas recibiendo una respuesta. Por ejemplo al escribir `/paciente Joe Smith` podría retornar los resultados de una búsqueda de los regístros de salud en tu sistema de administración para el nombre “Joe Smith”. Revisa la <a href=\"http://docs.mattermost.com/developer/slash-commands.html\">documentación de Comandos de Barra</a> para instrucciones detalladas. Ver todos los comandos de barra configurados para este equipo en la parte de abajo.",
"user.settings.cmds.add_display_name.placeholder": "Ejemplo: \"Buscar registros del paciente\"",
"user.settings.cmds.add_new": "Agregar un nuevo comando",
"user.settings.cmds.add_trigger.placeholder": "Gatillador del Comando ej. \"hola\" no se debe incluir la barra",
@@ -1185,11 +1185,11 @@
"user.settings.hooks_in.add": "Agregar",
"user.settings.hooks_in.addTitle": "Agregar un nuevo webhook de entrada",
"user.settings.hooks_in.channel": "Canal: ",
- "user.settings.hooks_in.description": "Crea webhooks URLs para utilizarlos con integraciones externas. Por favor revisa <a href=\"http://docs.mattermost.com/developer/webhooks-incoming.html\" target=\"_blank\">documentación de webhook de entrada</a> para conocer más.",
+ "user.settings.hooks_in.description": "Crea URLs para webhooks a utilizar con integraciones externas. Revisa la <a href=\"http://docs.mattermost.com/developer/webhooks-incoming.html\" target=\"_blank\">documentación de webhooks de entrada</a> para conocer más. Ver todos los webhooks de entrada configurados para este equipo en la parte de abajo.",
"user.settings.hooks_in.existing": "Webhooks de entrada existentes",
"user.settings.hooks_in.none": "Ninguno",
"user.settings.hooks_out.add": "Agregar",
- "user.settings.hooks_out.addDescription": "Crea webhooks para enviar los nuevos mensajes a una integración externa. Por favor revisa <a href=\"http://docs.mattermost.com/developer/webhooks-outgoing.html\" target=\"_blank\">documentación de webhook de salida</a> para conocer más.",
+ "user.settings.hooks_out.addDescription": "Crea webhooks para enviar mensajes a ingraciones externas. Revisa la <a href=\"http://docs.mattermost.com/developer/webhooks-outgoing.html\" target=\"_blank\">documentación de webhooks de saldida</a> para conocer más. Ver todos los webhooks de salida configurados para este equipo en la parte de abajo.",
"user.settings.hooks_out.addTitle": "Agregar un nuevo webhook de salida",
"user.settings.hooks_out.callback": "Callback URLs:",
"user.settings.hooks_out.callbackDesc": "Separa por una nueva linea cada URL donde quieres recibir el evento de HTTP POST",
diff --git a/web/static/i18n/pt.json b/web/static/i18n/pt.json
index 99ab8f017..3ffd0cd87 100644
--- a/web/static/i18n/pt.json
+++ b/web/static/i18n/pt.json
@@ -1071,7 +1071,6 @@
"user.settings.advance.sendTitle": "Enviar mensagens Ctrl + Enter",
"user.settings.advance.title": "Configurações Avançadas",
"user.settings.cmds.add": "Adicionar",
- "user.settings.cmds.add_desc": "Criar comandos slash para enviar eventos para integrações externas e receber uma resposta. Por exemplo digitando `/patient Joe Smith` poderia trazer de volta os resultados de pesquisa a partir do seu sistema de gestão de registos internos de saúde para o nome “Joe Smith”. Por favor veja <a href=\"http://docs.mattermost.com/developer/slash-commands.html\">Documentação comandos Slash</a> para detalhes e instruções.",
"user.settings.cmds.add_display_name.placeholder": "Exemplo: \"Procurar registros de pacientes\"",
"user.settings.cmds.add_new": "Adicionar um novo comando",
"user.settings.cmds.add_trigger.placeholder": "Comando de gatilho ex. \"hello\", não incluí a barra",
@@ -1184,11 +1183,9 @@
"user.settings.hooks_in.add": "Adicionar",
"user.settings.hooks_in.addTitle": "Adicionar um novo webhook entrada",
"user.settings.hooks_in.channel": "Canal: ",
- "user.settings.hooks_in.description": "Criar URLs webhook para usar em integrações externas. Por favor veja <a href=\"http://docs.mattermost.com/developer/webhooks-incoming.html\" target=\"_blank\">documentação webhook entrada</a> para saber mais.",
"user.settings.hooks_in.existing": "Webhooks de entrada existentes",
"user.settings.hooks_in.none": "Nenhum",
"user.settings.hooks_out.add": "Adicionar",
- "user.settings.hooks_out.addDescription": "Criar webhooks para enviar novos mensagens de eventos para uma integração externa. Por favor veja <a href=\"http://docs.mattermost.com/developer/webhooks-outgoing.html\" target=\"_blank\">documentação webhook saída</a> para saber mais.",
"user.settings.hooks_out.addTitle": "Adicionar um novo webhook saída",
"user.settings.hooks_out.callback": "Callback URLs: ",
"user.settings.hooks_out.callbackDesc": "Nova linha separada de URLs que receberá o evento HTTP POST",