The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/packages/rocketchat-autotranslate/client/views/autoTranslateFlexTab.js

167 lines
5.1 KiB

/* globals ChatSubscription */
import _ from 'underscore';
import toastr from 'toastr';
Template.autoTranslateFlexTab.helpers({
autoTranslate() {
const sub = ChatSubscription.findOne({
rid: Template.instance().rid
}, {
fields: {
autoTranslate: 1
}
});
return sub && sub.autoTranslate ? true : false;
},
autoTranslateValue() {
const sub = ChatSubscription.findOne({
rid: Template.instance().rid
}, {
fields: {
autoTranslate: 1
}
});
return sub && sub.autoTranslate ? t('True') : t('False');
},
autoTranslateLanguage() {
const sub = ChatSubscription.findOne({
rid: Template.instance().rid
}, {
fields: {
autoTranslateLanguage: 1
}
});
const autoTranslateLanguage = sub && sub.autoTranslateLanguage || Meteor.user().language || window.defaultUserLanguage() || '';
const supportedLanguages = Template.instance().supportedLanguages.get();
let language = _.findWhere(supportedLanguages, { language: autoTranslateLanguage });
if (language) {
return language.language;
} else if (autoTranslateLanguage.indexOf('-') !== -1) {
language = _.findWhere(supportedLanguages, { language: autoTranslateLanguage.substr(0, 2) });
return language && language.language;
}
},
editing(field) {
return Template.instance().editing.get() === field;
},
supportedLanguages() {
return Template.instance().supportedLanguages.get();
},
languageName(targetLanguage) {
if (targetLanguage) {
const supportedLanguages = Template.instance().supportedLanguages.get();
let language = _.findWhere(supportedLanguages, { language: targetLanguage });
if (language) {
return language.name;
} else if (targetLanguage.indexOf('-') !== -1) {
language = _.findWhere(supportedLanguages, { language: targetLanguage.substr(0, 2) });
return language && language.name;
}
}
}
});
Template.autoTranslateFlexTab.onCreated(function() {
this.rid = Template.currentData().rid;
this.editing = new ReactiveVar();
this.supportedLanguages = new ReactiveVar([]);
const userLanguage = Meteor.user().language || window.defaultUserLanguage();
Meteor.call('autoTranslate.getSupportedLanguages', userLanguage, (err, languages) => {
this.supportedLanguages.set(languages || []);
});
this.validateSetting = (field) => {
let value;
switch (field) {
case 'autoTranslate':
return true;
case 'autoTranslateLanguage':
value = this.$(`select[name=${ field }]`).val();
if (!_.findWhere(this.supportedLanguages.get(), { language: value })) {
toastr.error(t('Invalid_setting_s', value || ''));
return false;
}
return true;
}
};
this.saveSetting = () => {
const field = this.editing.get();
const subscription = RocketChat.models.Subscriptions.findOne({ rid: this.rid, 'u._id': Meteor.userId() });
const previousLanguage = subscription.autoTranslateLanguage;
let value;
switch (field) {
case 'autoTranslate':
value = this.$(`input[name=${ field }]`).prop('checked') ? '1' : '0';
break;
case 'autoTranslateLanguage':
value = this.$(`select[name=${ field }]`).val();
break;
}
if (this.validateSetting(field)) {
Meteor.call('autoTranslate.saveSettings', this.data.rid, field, value, { defaultLanguage: Meteor.user().language || window.defaultUserLanguage() }, (err/*, result*/) => {
if (err) {
return handleError(err);
}
const query = { rid: this.data.rid, 'u._id': { $ne: Meteor.userId() } };
if (field === 'autoTranslateLanguage') {
query.$or = [ { [`translations.${ previousLanguage }`]: { $exists: 1 } }, { [`translations.${ value }`]: { $exists: 1 } }, { [`attachments.translations.${ previousLanguage }`]: { $exists: 1 } }, { [`attachments.translations.${ value }`]: { $exists: 1 } } ];
} else {
query.$or = [ { [`translations.${ subscription.autoTranslateLanguage }`]: { $exists: 1 } }, { [`attachments.translations.${ subscription.autoTranslateLanguage }`]: { $exists: 1 } } ];
}
if (field === 'autoTranslate' && value === '0') {
RocketChat.models.Messages.update(query, { $unset: { autoTranslateShowInverse: 1 } }, { multi: true });
}
const display = field === 'autoTranslate' ? true : subscription && subscription.autoTranslate;
if (display) {
query.autoTranslateShowInverse = { $ne: true };
} else {
query.autoTranslateShowInverse = true;
}
RocketChat.models.Messages.update(query, { $set: { random: Random.id() } }, { multi: true });
this.editing.set();
});
}
};
});
Template.autoTranslateFlexTab.events({
'keydown input[type=text]'(e, instance) {
if (e.keyCode === 13) {
e.preventDefault();
instance.saveSetting();
}
},
'click [data-edit]'(e, instance) {
e.preventDefault();
instance.editing.set($(e.currentTarget).data('edit'));
setTimeout(function() { instance.$('input.editing').focus().select(); }, 100);
},
'change [type=checkbox]'(e, instance) {
instance.editing.set($(e.currentTarget).attr('name'));
instance.saveSetting();
},
'click .cancel'(e, instance) {
e.preventDefault();
instance.editing.set();
},
'click .save'(e, instance) {
e.preventDefault();
instance.saveSetting();
}
});