Merge branch 'release/2.5.0' into develop
This commit is contained in:
@@ -398,8 +398,8 @@
|
||||
"MESSENGER_SUB_HEAD": "ضع هذا الكود داخل وسم الـ body في موقعك",
|
||||
"INBOX_AGENTS": "موظف الدعم",
|
||||
"INBOX_AGENTS_SUB_TEXT": "إضافة أو إزالة موظفين من قناة التواصل هذه",
|
||||
"AGENT_ASSIGNMENT": "Conversation Assignment",
|
||||
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
|
||||
"AGENT_ASSIGNMENT": "إسناد المحادثات",
|
||||
"AGENT_ASSIGNMENT_SUB_TEXT": "تحديث إعدادات إسناد المحادثات",
|
||||
"UPDATE": "تحديث",
|
||||
"ENABLE_EMAIL_COLLECT_BOX": "تفعيل صندوق جمع البريد الإلكتروني",
|
||||
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "تمكين أو تعطيل مربع جمع البريد الإلكتروني في محادثة جديدة",
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
},
|
||||
"SIDEBAR": {
|
||||
"CURRENTLY_VIEWING_ACCOUNT": "مشاهدة حاليا:",
|
||||
"SWITCH": "Switch",
|
||||
"SWITCH": "تبديل",
|
||||
"CONVERSATIONS": "المحادثات",
|
||||
"ALL_CONVERSATIONS": "كل المحادثات",
|
||||
"MENTIONED_CONVERSATIONS": "الإشارات",
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
</span>
|
||||
<contact-info
|
||||
:show-avatar="showAvatar"
|
||||
show-new-message
|
||||
:contact="contact"
|
||||
@panel-close="onClose"
|
||||
/>
|
||||
|
||||
@@ -65,7 +65,6 @@
|
||||
</div>
|
||||
<div class="contact-actions">
|
||||
<woot-button
|
||||
v-if="showNewMessage"
|
||||
v-tooltip="$t('CONTACT_PANEL.NEW_MESSAGE')"
|
||||
title="$t('CONTACT_PANEL.NEW_MESSAGE')"
|
||||
class="new-message"
|
||||
@@ -172,10 +171,6 @@ export default {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
showNewMessage: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
showAvatar: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
|
||||
@@ -52,6 +52,10 @@ export default {
|
||||
},
|
||||
async onSubmit(contactItem) {
|
||||
await this.$store.dispatch('contacts/update', contactItem);
|
||||
await this.$store.dispatch(
|
||||
'contacts/fetchContactableInbox',
|
||||
this.contact.id
|
||||
);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -39,6 +39,7 @@ import {
|
||||
} from '../dashboard/helper/scriptHelpers';
|
||||
import FluentIcon from 'shared/components/FluentIcon/DashboardIcon';
|
||||
import VueDOMPurifyHTML from 'vue-dompurify-html';
|
||||
import { domPurifyConfig } from '../shared/helpers/HTMLSanitizer';
|
||||
|
||||
Vue.config.env = process.env;
|
||||
|
||||
@@ -55,7 +56,8 @@ if (window.analyticsConfig) {
|
||||
api_host: window.analyticsConfig.host,
|
||||
});
|
||||
}
|
||||
Vue.use(VueDOMPurifyHTML);
|
||||
|
||||
Vue.use(VueDOMPurifyHTML, domPurifyConfig);
|
||||
Vue.use(VueRouter);
|
||||
Vue.use(VueI18n);
|
||||
Vue.use(WootUiKit);
|
||||
|
||||
@@ -9,9 +9,10 @@ import ActionCableConnector from '../widget/helpers/actionCable';
|
||||
import i18n from '../widget/i18n';
|
||||
import { isPhoneE164OrEmpty } from 'shared/helpers/Validators';
|
||||
import router from '../widget/router';
|
||||
import { domPurifyConfig } from '../shared/helpers/HTMLSanitizer';
|
||||
Vue.use(VueI18n);
|
||||
Vue.use(Vuelidate);
|
||||
Vue.use(VueDOMPurifyHTML);
|
||||
Vue.use(VueDOMPurifyHTML, domPurifyConfig);
|
||||
|
||||
const i18nConfig = new VueI18n({
|
||||
locale: 'en',
|
||||
|
||||
@@ -6,3 +6,15 @@ export const escapeHtml = (unsafe = '') => {
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, ''');
|
||||
};
|
||||
|
||||
export const afterSanitizeAttributes = currentNode => {
|
||||
if ('target' in currentNode) {
|
||||
currentNode.setAttribute('target', '_blank');
|
||||
}
|
||||
};
|
||||
|
||||
export const domPurifyConfig = {
|
||||
hooks: {
|
||||
afterSanitizeAttributes,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { marked } from 'marked';
|
||||
import DOMPurify from 'dompurify';
|
||||
import { escapeHtml } from './HTMLSanitizer';
|
||||
import { escapeHtml, afterSanitizeAttributes } from './HTMLSanitizer';
|
||||
|
||||
const TWITTER_USERNAME_REGEX = /(^|[^@\w])@(\w{1,15})\b/g;
|
||||
const TWITTER_USERNAME_REPLACEMENT =
|
||||
@@ -48,9 +48,7 @@ class MessageFormatter {
|
||||
const markedDownOutput = marked(withHash);
|
||||
return markedDownOutput;
|
||||
}
|
||||
DOMPurify.addHook('afterSanitizeAttributes', node => {
|
||||
if ('target' in node) node.setAttribute('target', '_blank');
|
||||
});
|
||||
DOMPurify.addHook('afterSanitizeAttributes', afterSanitizeAttributes);
|
||||
return DOMPurify.sanitize(
|
||||
marked(this.message, { breaks: true, gfm: true })
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user