mirror of
https://github.com/zulip/zulip.git
synced 2025-11-16 11:52:01 +00:00
node tests: Just set i18n every time.
Explicitly stubbing i18n in 48 different files is mostly busy work at this point, and it doesn't provide much signal, since often it's invoked only to satisfy transitive dependencies.
This commit is contained in:
@@ -54,7 +54,6 @@ const _resize = {
|
|||||||
resize_page_components: () => {},
|
resize_page_components: () => {},
|
||||||
};
|
};
|
||||||
|
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('padded_widget', {
|
set_global('padded_widget', {
|
||||||
update_padding: () => {},
|
update_padding: () => {},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
set_global('channel', {});
|
set_global('channel', {});
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ const _page_params = {};
|
|||||||
set_global('blueslip', global.make_zblueslip());
|
set_global('blueslip', global.make_zblueslip());
|
||||||
|
|
||||||
set_global('page_params', _page_params);
|
set_global('page_params', _page_params);
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
zrequire('people');
|
zrequire('people');
|
||||||
zrequire('presence');
|
zrequire('presence');
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('keydown_util');
|
zrequire('keydown_util');
|
||||||
zrequire('components');
|
zrequire('components');
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ set_global('blueslip', global.make_zblueslip());
|
|||||||
const noop = function () {};
|
const noop = function () {};
|
||||||
|
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
const LazySet = zrequire('lazy_set.js').LazySet;
|
const LazySet = zrequire('lazy_set.js').LazySet;
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ set_global('$', global.make_zjquery());
|
|||||||
set_global('compose_pm_pill', {
|
set_global('compose_pm_pill', {
|
||||||
});
|
});
|
||||||
|
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
set_global('hash_util', {
|
set_global('hash_util', {
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
set_global('blueslip', {});
|
set_global('blueslip', {});
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
global.blueslip.warn = function () {};
|
global.blueslip.warn = function () {};
|
||||||
|
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ set_global('document', {
|
|||||||
});
|
});
|
||||||
|
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('blueslip', {});
|
set_global('blueslip', {});
|
||||||
|
|
||||||
const alice = {
|
const alice = {
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
const typeahead = zrequire('typeahead', 'shared/js/typeahead');
|
const typeahead = zrequire('typeahead', 'shared/js/typeahead');
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
zrequire('compose_state');
|
zrequire('compose_state');
|
||||||
zrequire('pm_conversations');
|
zrequire('pm_conversations');
|
||||||
zrequire('emoji');
|
zrequire('emoji');
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('localstorage');
|
zrequire('localstorage');
|
||||||
zrequire('drafts');
|
zrequire('drafts');
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('unread');
|
zrequire('unread');
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
|
|||||||
@@ -59,10 +59,8 @@ const denmark_stream = {
|
|||||||
// prefer to test with a clean slate.
|
// prefer to test with a clean slate.
|
||||||
|
|
||||||
set_global('page_params', {});
|
set_global('page_params', {});
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
run_test('stream_data', () => {
|
run_test('stream_data', () => {
|
||||||
assert.equal(stream_data.get_sub_by_name('Denmark'), undefined);
|
assert.equal(stream_data.get_sub_by_name('Denmark'), undefined);
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('hash_util');
|
zrequire('hash_util');
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ set_global('location', {
|
|||||||
host: 'example.com',
|
host: 'example.com',
|
||||||
});
|
});
|
||||||
set_global('to_$', () => window_stub);
|
set_global('to_$', () => window_stub);
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('people');
|
zrequire('people');
|
||||||
zrequire('hash_util');
|
zrequire('hash_util');
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
set_global('Handlebars', global.make_handlebars());
|
set_global('Handlebars', global.make_handlebars());
|
||||||
zrequire('templates');
|
zrequire('templates');
|
||||||
|
|
||||||
|
// All of our other tests stub out i18n activity;
|
||||||
|
// here we do a quick sanity check on the engine itself.
|
||||||
const i18next = zrequire('i18next', 'i18next');
|
const i18next = zrequire('i18next', 'i18next');
|
||||||
|
|
||||||
global.i18n = i18next;
|
global.i18n = i18next;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
zrequire('input_pill');
|
zrequire('input_pill');
|
||||||
|
|
||||||
set_global('Handlebars', global.make_handlebars());
|
set_global('Handlebars', global.make_handlebars());
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
zrequire('hash_util');
|
zrequire('hash_util');
|
||||||
set_global('katex', zrequire('katex', 'katex/dist/katex.min.js'));
|
set_global('katex', zrequire('katex', 'katex/dist/katex.min.js'));
|
||||||
set_global('marked', zrequire('marked', 'third/marked/lib/marked'));
|
set_global('marked', zrequire('marked', 'third/marked/lib/marked'));
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('fenced_code');
|
zrequire('fenced_code');
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ zrequire('MessageListData', 'js/message_list_data');
|
|||||||
zrequire('MessageListView', 'js/message_list_view');
|
zrequire('MessageListView', 'js/message_list_view');
|
||||||
const MessageList = zrequire('message_list').MessageList;
|
const MessageList = zrequire('message_list').MessageList;
|
||||||
|
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
const with_overrides = global.with_overrides; // make lint happy
|
const with_overrides = global.with_overrides; // make lint happy
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('muting');
|
zrequire('muting');
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
zrequire('hash_util');
|
zrequire('hash_util');
|
||||||
zrequire('hashchange');
|
zrequire('hashchange');
|
||||||
@@ -6,7 +5,6 @@ zrequire('narrow_state');
|
|||||||
zrequire('people');
|
zrequire('people');
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
zrequire('Filter', 'js/filter');
|
zrequire('Filter', 'js/filter');
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('page_params', {
|
set_global('page_params', {
|
||||||
stop_words: ['what', 'about'],
|
stop_words: ['what', 'about'],
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
const util = zrequire('util');
|
const util = zrequire('util');
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
|
|
||||||
zrequire('narrow_state');
|
zrequire('narrow_state');
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('Filter', 'js/filter');
|
zrequire('Filter', 'js/filter');
|
||||||
zrequire('MessageListData', 'js/message_list_data');
|
zrequire('MessageListData', 'js/message_list_data');
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('people');
|
zrequire('people');
|
||||||
zrequire('Filter', 'js/filter');
|
zrequire('Filter', 'js/filter');
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('Filter', 'js/filter');
|
zrequire('Filter', 'js/filter');
|
||||||
zrequire('people');
|
zrequire('people');
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ const _navigator = {
|
|||||||
};
|
};
|
||||||
set_global('navigator', _navigator);
|
set_global('navigator', _navigator);
|
||||||
|
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('alert_words');
|
zrequire('alert_words');
|
||||||
zrequire('muting');
|
zrequire('muting');
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
set_global('zxcvbn', zrequire('zxcvbn', 'zxcvbn'));
|
set_global('zxcvbn', zrequire('zxcvbn', 'zxcvbn'));
|
||||||
zrequire('common');
|
zrequire('common');
|
||||||
|
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
run_test('basics', () => {
|
run_test('basics', () => {
|
||||||
let accepted;
|
let accepted;
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ set_global('settings_org', {});
|
|||||||
set_global('md5', function (s) {
|
set_global('md5', function (s) {
|
||||||
return 'md5-' + s;
|
return 'md5-' + s;
|
||||||
});
|
});
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
const me = {
|
const me = {
|
||||||
email: 'me@example.com',
|
email: 'me@example.com',
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
zrequire('poll_widget');
|
zrequire('poll_widget');
|
||||||
|
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
set_global('people', {});
|
set_global('people', {});
|
||||||
set_global('blueslip', global.make_zblueslip());
|
set_global('blueslip', global.make_zblueslip());
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('hash_util');
|
zrequire('hash_util');
|
||||||
zrequire('narrow');
|
zrequire('narrow');
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ set_global('message_store', {
|
|||||||
user_ids: () => [],
|
user_ids: () => [],
|
||||||
});
|
});
|
||||||
|
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('typeahead_helper');
|
zrequire('typeahead_helper');
|
||||||
set_global('Handlebars', global.make_handlebars());
|
set_global('Handlebars', global.make_handlebars());
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ set_global('message_store', {
|
|||||||
user_ids: () => [],
|
user_ids: () => [],
|
||||||
});
|
});
|
||||||
|
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('typeahead_helper');
|
zrequire('typeahead_helper');
|
||||||
set_global('Handlebars', global.make_handlebars());
|
set_global('Handlebars', global.make_handlebars());
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ const bot_data_params = {
|
|||||||
set_global("avatar", {});
|
set_global("avatar", {});
|
||||||
|
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('bot_data');
|
zrequire('bot_data');
|
||||||
zrequire('settings_bots');
|
zrequire('settings_bots');
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
|
|
||||||
zrequire('settings_muting');
|
zrequire('settings_muting');
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('blueslip', global.make_zblueslip());
|
set_global('blueslip', global.make_zblueslip());
|
||||||
|
|
||||||
const noop = () => {};
|
const noop = () => {};
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ zrequire('user_pill');
|
|||||||
zrequire('settings_user_groups');
|
zrequire('settings_user_groups');
|
||||||
|
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('confirm_dialog', {});
|
set_global('confirm_dialog', {});
|
||||||
|
|
||||||
const noop = function () {};
|
const noop = function () {};
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ set_global('$', function () {
|
|||||||
|
|
||||||
set_global('blueslip', global.make_zblueslip());
|
set_global('blueslip', global.make_zblueslip());
|
||||||
set_global('document', null);
|
set_global('document', null);
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
global.stub_out_jquery();
|
global.stub_out_jquery();
|
||||||
|
|
||||||
zrequire('color_data');
|
zrequire('color_data');
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ const noop = function () {};
|
|||||||
const return_true = function () { return true; };
|
const return_true = function () { return true; };
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('document', 'document-stub');
|
set_global('document', 'document-stub');
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('people');
|
zrequire('people');
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
set_global('document', 'document-stub');
|
set_global('document', 'document-stub');
|
||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('blueslip', global.make_zblueslip());
|
set_global('blueslip', global.make_zblueslip());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('unread_ui');
|
zrequire('unread_ui');
|
||||||
zrequire('Filter', 'js/filter');
|
zrequire('Filter', 'js/filter');
|
||||||
@@ -17,7 +16,6 @@ zrequire('list_cursor');
|
|||||||
zrequire('stream_list');
|
zrequire('stream_list');
|
||||||
zrequire('topic_zoom');
|
zrequire('topic_zoom');
|
||||||
zrequire('ui');
|
zrequire('ui');
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('page_params', {
|
set_global('page_params', {
|
||||||
is_admin: false,
|
is_admin: false,
|
||||||
realm_users: [],
|
realm_users: [],
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
zrequire('stream_sort');
|
zrequire('stream_sort');
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
global.stub_out_jquery();
|
global.stub_out_jquery();
|
||||||
|
|
||||||
set_global('ui', {
|
set_global('ui', {
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
set_global('$', global.make_zjquery());
|
set_global('$', global.make_zjquery());
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('page_params', {
|
set_global('page_params', {
|
||||||
twenty_four_hour_time: true,
|
twenty_four_hour_time: true,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('unread');
|
zrequire('unread');
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ set_global('blueslip', global.make_zblueslip());
|
|||||||
set_global('pm_conversations', {
|
set_global('pm_conversations', {
|
||||||
recent: {},
|
recent: {},
|
||||||
});
|
});
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('muting');
|
zrequire('muting');
|
||||||
zrequire('unread');
|
zrequire('unread');
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ set_global('narrow_state', {});
|
|||||||
set_global('unread', {});
|
set_global('unread', {});
|
||||||
set_global('muting', {});
|
set_global('muting', {});
|
||||||
set_global('message_list', {});
|
set_global('message_list', {});
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('hash_util');
|
zrequire('hash_util');
|
||||||
zrequire('stream_data');
|
zrequire('stream_data');
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('page_params', {realm_is_zephyr_mirror_realm: false});
|
set_global('page_params', {realm_is_zephyr_mirror_realm: false});
|
||||||
set_global('md5', function (s) {
|
set_global('md5', function (s) {
|
||||||
return 'md5-' + s;
|
return 'md5-' + s;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
const ui = zrequire('ui');
|
const ui = zrequire('ui');
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
set_global('navigator', {
|
set_global('navigator', {
|
||||||
userAgent: '',
|
userAgent: '',
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ const rewiremock = require("rewiremock/node");
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
const util = zrequire('util');
|
const util = zrequire('util');
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('document', {
|
set_global('document', {
|
||||||
location: {
|
location: {
|
||||||
protocol: 'http',
|
protocol: 'http',
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
|
|
||||||
zrequire('muting');
|
zrequire('muting');
|
||||||
zrequire('people');
|
zrequire('people');
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ set_global('document', {
|
|||||||
set_global('navigator', {
|
set_global('navigator', {
|
||||||
userAgent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
|
userAgent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
|
||||||
});
|
});
|
||||||
set_global('i18n', global.stub_i18n);
|
|
||||||
set_global('page_params', {
|
set_global('page_params', {
|
||||||
max_file_upload_size: 25,
|
max_file_upload_size: 25,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ global.make_zjquery = require('./zjquery.js').make_zjquery;
|
|||||||
global.make_zblueslip = require('./zblueslip.js').make_zblueslip;
|
global.make_zblueslip = require('./zblueslip.js').make_zblueslip;
|
||||||
|
|
||||||
// Set up fake translation
|
// Set up fake translation
|
||||||
global.stub_i18n = require('./i18n.js');
|
const stub_i18n = require('./i18n.js');
|
||||||
|
|
||||||
// Set up Handlebars
|
// Set up Handlebars
|
||||||
const handlebars = require('./handlebars.js');
|
const handlebars = require('./handlebars.js');
|
||||||
@@ -113,6 +113,7 @@ try {
|
|||||||
_.throttle = immediate;
|
_.throttle = immediate;
|
||||||
_.debounce = immediate;
|
_.debounce = immediate;
|
||||||
|
|
||||||
|
set_global('i18n', stub_i18n);
|
||||||
namespace.clear_zulip_refs();
|
namespace.clear_zulip_refs();
|
||||||
run_one_module(file);
|
run_one_module(file);
|
||||||
namespace.restore();
|
namespace.restore();
|
||||||
|
|||||||
Reference in New Issue
Block a user