diff --git a/frontend_tests/node_tests/settings_org.js b/frontend_tests/node_tests/settings_org.js
index 438ee19306..3a52460cb5 100644
--- a/frontend_tests/node_tests/settings_org.js
+++ b/frontend_tests/node_tests/settings_org.js
@@ -36,7 +36,7 @@ const _channel = {};
const _templates = {
render: function (name, data) {
- if (name === 'admin-realm-domains-list') {
+ if (name === 'settings/admin-realm-domains-list') {
assert(data.realm_domain.domain);
return 'stub-domains-list';
}
diff --git a/frontend_tests/node_tests/templates.js b/frontend_tests/node_tests/templates.js
index 5b2e3d308b..7e1908005d 100644
--- a/frontend_tests/node_tests/templates.js
+++ b/frontend_tests/node_tests/templates.js
@@ -20,13 +20,13 @@ function render(template_name, args) {
run_test('finding_partials', () => {
var fns = global.find_included_partials('settings_tab');
assert.deepEqual(fns, [
- 'account-settings',
- 'display-settings',
- 'notification-settings',
- 'bot-settings',
- 'alert-word-settings',
- 'attachments-settings',
- 'muted-topics-settings',
+ 'settings/account-settings',
+ 'settings/display-settings',
+ 'settings/notification-settings',
+ 'settings/bot-settings',
+ 'settings/alert-word-settings',
+ 'settings/attachments-settings',
+ 'settings/muted-topics-settings',
]);
});
@@ -91,7 +91,7 @@ run_test('admin_realm_domains_list', () => {
allow_subdomains: true,
},
};
- html += render("admin-realm-domains-list", args);
+ html += render("settings/admin-realm-domains-list", args);
html += "";
var button = $(html).find('.button');
@@ -115,7 +115,7 @@ run_test('admin_realm_dropdown_stream_list', () => {
stream_id: 18,
},
};
- html += render("admin-realm-dropdown-stream-list", args);
+ html += render("settings/admin-realm-dropdown-stream-list", args);
html += "";
var link = $(html).find("a");
@@ -442,7 +442,7 @@ run_test('bankruptcy_modal', () => {
assert.equal(count.text(), 99);
});
-run_test('admin_auth_methods_list', () => {
+run_test('settings/admin_auth_methods_list', () => {
var args = {
method: "Email",
enabled: false,
@@ -450,7 +450,7 @@ run_test('admin_auth_methods_list', () => {
var html = '';
html += '
';
- html += render('admin_auth_methods_list', args);
+ html += render('settings/admin_auth_methods_list', args);
html += '';
var method = $(html).find('tr.method_row').first().find('span.method');
@@ -590,7 +590,7 @@ run_test('compose_private_stream_alert', () => {
run_test('custom_user_profile_field', () => {
var field = {name: "GitHub user name", id: 2, hint: "Or link to profile"};
var args = {field: field, field_value: {value: "@GitHub", rendered_value: "@GitHub
"}, field_type: "text"};
- var html = render('custom-user-profile-field', args);
+ var html = render('settings/custom-user-profile-field', args);
assert.equal($(html).attr('data-field-id'), 2);
assert.equal($(html).find('.custom_user_field_value').val(), "@GitHub");
assert.equal($(html).find('.field_hint').text(), "Or link to profile");
@@ -602,7 +602,7 @@ run_test('deactivate_stream_modal', () => {
stream_name: "Public stream",
stream_id: 1,
};
- var html = render('deactivation-stream-modal', args);
+ var html = render('settings/deactivation-stream-modal', args);
var modal_header = $(html).find("#deactivation_stream_modal_label");
assert.equal(modal_header.text(), "translated: Delete stream " + args.stream_name);
@@ -612,8 +612,8 @@ run_test('deactivate_stream_modal', () => {
assert.equal(button.data('stream-id'), args.stream_id);
});
-run_test('dev_env_email_access', () => {
- render('dev_env_email_access');
+run_test('settings/dev_env_email_access', () => {
+ render('settings/dev_env_email_access');
});
run_test('draft_table_body', () => {
@@ -1097,7 +1097,7 @@ run_test('revoke_invite_modal', () => {
};
var html = "";
- html += render('revoke-invite-modal', args);
+ html += render('settings/revoke-invite-modal', args);
html += "
";
assert.equal($(html).find("p strong").text(), "iago@zulip.com");
});
@@ -1471,7 +1471,7 @@ run_test('upload_space_stats', () => {
percent_used: 50,
upload_quota: "1 GB",
};
- var html = render('upload-space-stats', args);
+ var html = render('settings/upload-space-stats', args);
assert.equal($(html).text().trim(), "translated: Organization using 50% of 1 GB.\n translated: Upgrade for more space.");
args = {
@@ -1479,7 +1479,7 @@ run_test('upload_space_stats', () => {
percent_used: 10,
upload_quota: "5 GB",
};
- html = render('upload-space-stats', args);
+ html = render('settings/upload-space-stats', args);
assert.equal($(html).text().trim(), "translated: Organization using 10% of 5 GB.");
});
@@ -1678,7 +1678,7 @@ run_test('edit_outgoing_webhook_service', () => {
service: {base_url: "http://www.foo.bar",
interface: "1"},
};
- var html = render('edit-outgoing-webhook-service', args);
+ var html = render('settings/edit-outgoing-webhook-service', args);
assert.equal($(html).find('#edit_service_base_url').val(), args.service.base_url);
assert.equal($(html).find('#edit_service_interface').val(), args.service.interface);
});
@@ -1688,7 +1688,7 @@ run_test('edit_embedded_bot_service', () => {
service: {service_name: "giphy",
config_data: {key: "abcd1234"}},
};
- var html = render('edit-embedded-bot-service', args);
+ var html = render('settings/edit-embedded-bot-service', args);
assert.equal($(html).find('#embedded_bot_key_edit').attr('name'), 'key');
assert.equal($(html).find('#embedded_bot_key_edit').val(), 'abcd1234');
});
diff --git a/frontend_tests/node_tests/voting_widget.js b/frontend_tests/node_tests/voting_widget.js
index 4de45e8ee8..e73fff3e3b 100644
--- a/frontend_tests/node_tests/voting_widget.js
+++ b/frontend_tests/node_tests/voting_widget.js
@@ -141,11 +141,11 @@ run_test('poll_data_holder my question', () => {
run_test('activate another person poll', () => {
people.is_my_user_id = return_false;
templates.render = (template_name) => {
- if (template_name === 'poll-widget') {
- return 'poll-widget';
+ if (template_name === 'widgets/poll-widget') {
+ return 'widgets/poll-widget';
}
- if (template_name === 'poll-widget-results') {
- return 'poll-widget-results';
+ if (template_name === 'widgets/poll-widget-results') {
+ return 'widgets/poll-widget-results';
}
};
@@ -234,8 +234,8 @@ run_test('activate another person poll', () => {
poll_widget.activate(opts);
- assert.equal(widget_elem.html(), 'poll-widget');
- assert.equal(widget_option_container.html(), 'poll-widget-results');
+ assert.equal(widget_elem.html(), 'widgets/poll-widget');
+ assert.equal(widget_option_container.html(), 'widgets/poll-widget-results');
assert.equal(poll_question_header.text(), 'What do you want?');
const e = {
@@ -306,11 +306,11 @@ run_test('activate own poll', () => {
people.is_my_user_id = return_true;
templates.render = (template_name) => {
- if (template_name === 'poll-widget') {
- return 'poll-widget';
+ if (template_name === 'widgets/poll-widget') {
+ return 'widgets/poll-widget';
}
- if (template_name === 'poll-widget-results') {
- return 'poll-widget-results';
+ if (template_name === 'widgets/poll-widget-results') {
+ return 'widgets/poll-widget-results';
}
};
@@ -396,8 +396,8 @@ run_test('activate own poll', () => {
poll_widget.activate(opts);
- assert.equal(widget_elem.html(), 'poll-widget');
- assert.equal(widget_option_container.html(), 'poll-widget-results');
+ assert.equal(widget_elem.html(), 'widgets/poll-widget');
+ assert.equal(widget_option_container.html(), 'widgets/poll-widget-results');
assert.equal(poll_question_header.text(), 'Where to go?');
{
diff --git a/frontend_tests/zjsunit/render.js b/frontend_tests/zjsunit/render.js
index 4a37fb1d6e..77831e075b 100644
--- a/frontend_tests/zjsunit/render.js
+++ b/frontend_tests/zjsunit/render.js
@@ -7,7 +7,7 @@ var _ = require('underscore/underscore.js');
var Handlebars = require('handlebars');
function template_dir() {
- return __dirname + '/../../static/templates/';
+ return __dirname + '/../../static/templates';
}
exports.init = function () {
@@ -53,10 +53,10 @@ exports.walk = function (dir, filelist) {
if (fs.statSync(dir + "/" + file).isDirectory()) {
filelist = exports.walk(dir + "/" + file, filelist);
} else {
- filelist.push({
- url: dir + "/" + file,
- name: file,
- });
+ var url = dir + "/" + file;
+ // Get the file path starting after static/templates/
+ var name = url.replace(/^.+static\/templates\//, '');
+ filelist.push({ url, name });
}
});
diff --git a/static/js/attachments_ui.js b/static/js/attachments_ui.js
index d5324a9c34..a45314b064 100644
--- a/static/js/attachments_ui.js
+++ b/static/js/attachments_ui.js
@@ -38,7 +38,7 @@ function set_upload_space_stats() {
percent_used: exports.percentage_used_space(upload_space_used),
upload_quota: attachments_ui.bytes_to_size(page_params.realm_upload_quota, true),
};
- var rendered_upload_stats_html = templates.render("upload-space-stats", args);
+ var rendered_upload_stats_html = templates.render("settings/upload-space-stats", args);
$("#attachment-stats-holder").html(rendered_upload_stats_html);
}
diff --git a/static/js/invite.js b/static/js/invite.js
index 7f72dbe782..4a9ce192e2 100644
--- a/static/js/invite.js
+++ b/static/js/invite.js
@@ -56,7 +56,7 @@ function submit_invitation_form() {
invitee_emails.val('');
if (page_params.development_environment) {
- var rendered_email_msg = templates.render('dev_env_email_access');
+ var rendered_email_msg = templates.render('settings/dev_env_email_access');
$('#dev_env_msg').html(rendered_email_msg).addClass('alert-info').show();
}
diff --git a/static/js/poll_widget.js b/static/js/poll_widget.js
index 27fa11258f..15395f5aa3 100644
--- a/static/js/poll_widget.js
+++ b/static/js/poll_widget.js
@@ -285,7 +285,7 @@ exports.activate = function (opts) {
}
function build_widget() {
- var html = templates.render('poll-widget');
+ var html = templates.render('widgets/poll-widget');
elem.html(html);
elem.find('input.poll-question').on('keyup', function (e) {
@@ -346,7 +346,7 @@ exports.activate = function (opts) {
function render_results() {
var widget_data = poll_data.get_widget_data();
- var html = templates.render('poll-widget-results', widget_data);
+ var html = templates.render('widgets/poll-widget-results', widget_data);
elem.find('ul.poll-widget').html(html);
elem.find("button.poll-vote").off('click').on('click', function (e) {
diff --git a/static/js/settings_account.js b/static/js/settings_account.js
index 2d45a33f72..54f629e619 100644
--- a/static/js/settings_account.js
+++ b/static/js/settings_account.js
@@ -112,7 +112,7 @@ exports.append_custom_profile_fields = function (element_id, user_id) {
}
}
- var html = templates.render("custom-user-profile-field", {
+ var html = templates.render("settings/custom-user-profile-field", {
field: field,
field_type: all_field_template_types[field.type],
field_value: field_value,
diff --git a/static/js/settings_emoji.js b/static/js/settings_emoji.js
index d8601aa7d8..901376be93 100644
--- a/static/js/settings_emoji.js
+++ b/static/js/settings_emoji.js
@@ -34,7 +34,7 @@ function can_admin_emoji(emoji) {
}
exports.update_custom_emoji_ui = function () {
- var rendered_tip = templates.render("emoji-settings-tip", {
+ var rendered_tip = templates.render("settings/emoji-settings-tip", {
realm_add_emoji_by_admins_only: page_params.realm_add_emoji_by_admins_only,
});
$('#emoji-settings').find('.emoji-settings-tip-container').html(rendered_tip);
diff --git a/static/js/settings_invites.js b/static/js/settings_invites.js
index 29c13e6de4..9f957c8460 100644
--- a/static/js/settings_invites.js
+++ b/static/js/settings_invites.js
@@ -146,7 +146,7 @@ exports.on_load_success = function (invites_data, initialize_event_handlers) {
meta.invite_id = $(e.currentTarget).attr("data-invite-id");
meta.is_multiuse = $(e.currentTarget).attr("data-is-multiuse");
var ctx = {is_multiuse: meta.is_multiuse === "true", email: email, referred_by: referred_by};
- var rendered_revoke_modal = templates.render("revoke-invite-modal", ctx);
+ var rendered_revoke_modal = templates.render("settings/revoke-invite-modal", ctx);
$("#revoke_invite_modal_holder").html(rendered_revoke_modal);
$("#revoke_invite_modal #do_revoke_invite_button").attr("data-invite-id", meta.invite_id);
$("#revoke_invite_modal #do_revoke_invite_button").attr("data-is-multiuse", meta.is_multiuse);
diff --git a/static/js/settings_org.js b/static/js/settings_org.js
index 295a63e828..c718c1d467 100644
--- a/static/js/settings_org.js
+++ b/static/js/settings_org.js
@@ -325,7 +325,7 @@ exports.populate_realm_domains = function (realm_domains) {
var realm_domains_table_body = $("#realm_domains_table tbody").expectOne();
realm_domains_table_body.find("tr").remove();
_.each(realm_domains, function (realm_domain) {
- realm_domains_table_body.append(templates.render("admin-realm-domains-list", {realm_domain: realm_domain}));
+ realm_domains_table_body.append(templates.render("settings/admin-realm-domains-list", {realm_domain: realm_domain}));
});
};
function sort_object_by_key(obj) {
@@ -344,7 +344,7 @@ exports.populate_auth_methods = function (auth_methods) {
auth_methods = sort_object_by_key(auth_methods);
var rendered_auth_method_rows = "";
_.each(auth_methods, function (value, auth_method) {
- rendered_auth_method_rows += templates.render('admin_auth_methods_list', {
+ rendered_auth_method_rows += templates.render('settings/admin_auth_methods_list', {
method: auth_method,
enabled: value,
is_admin: page_params.is_admin,
@@ -357,7 +357,7 @@ function insert_tip_box() {
if (page_params.is_admin) {
return;
}
- var tip_box = templates.render("organization-settings-tip", {is_admin: page_params.is_admin});
+ var tip_box = templates.render("settings/organization-settings-tip", {is_admin: page_params.is_admin});
$(".organization-box").find(".settings-section:not(.can-edit)")
.not("#emoji-settings")
.not("#user-groups-admin")
@@ -388,7 +388,7 @@ exports.populate_notifications_stream_dropdown = function (stream_list) {
list_render.create(dropdown_list_body, stream_list, {
name: "admin-realm-notifications-stream-dropdown-list",
modifier: function (item) {
- return templates.render("admin-realm-dropdown-stream-list", { stream: item });
+ return templates.render("settings/admin-realm-dropdown-stream-list", { stream: item });
},
filter: {
element: search_input,
@@ -417,7 +417,7 @@ exports.populate_signup_notifications_stream_dropdown = function (stream_list) {
list_render.create(dropdown_list_body, stream_list, {
name: "admin-realm-signup-notifications-stream-dropdown-list",
modifier: function (item) {
- return templates.render("admin-realm-dropdown-stream-list", { stream: item });
+ return templates.render("settings/admin-realm-dropdown-stream-list", { stream: item });
},
filter: {
element: search_input,
diff --git a/static/js/settings_profile_fields.js b/static/js/settings_profile_fields.js
index 55fe2fdf8f..b5dff65f5d 100644
--- a/static/js/settings_profile_fields.js
+++ b/static/js/settings_profile_fields.js
@@ -92,7 +92,7 @@ function update_choice_delete_btn(container, display_flag) {
function create_choice_row(container) {
var context = {};
- var row = templates.render("profile-field-choice", context);
+ var row = templates.render("settings/profile-field-choice", context);
$(container).append(row);
}
@@ -194,7 +194,7 @@ function set_up_choices_field_edit_form(profile_field, field_data) {
_.each(choices_data, function (choice) {
choice_list.append(
- templates.render("profile-field-choice", {
+ templates.render("settings/profile-field-choice", {
text: choice.text,
})
);
diff --git a/static/js/stream_edit.js b/static/js/stream_edit.js
index dd5153532b..65f67f1a0e 100644
--- a/static/js/stream_edit.js
+++ b/static/js/stream_edit.js
@@ -617,7 +617,7 @@ exports.initialize = function () {
return;
}
var stream_name = stream_data.maybe_get_stream_name(stream_id);
- var deactivate_stream_modal = templates.render("deactivation-stream-modal", {
+ var deactivate_stream_modal = templates.render("settings/deactivation-stream-modal", {
stream_name: stream_name,
stream_id: stream_id,
});
diff --git a/static/js/templates.js b/static/js/templates.js
index a15f673007..a86547aebb 100644
--- a/static/js/templates.js
+++ b/static/js/templates.js
@@ -2,21 +2,16 @@ var templates = (function () {
var exports = {};
-var template_context = require.context('../templates', true, /\.handlebars$/);
-var template_paths = ['./', './settings/', './widgets/'];
-
exports.render = function (name, arg) {
- for (var i = 0; i < template_paths.length; i += 1) {
- var template;
- try {
- template = template_context(template_paths[i] + name + '.handlebars');
- } catch (_e) {
- continue;
- }
- return template(arg);
+ var template;
+ try {
+ template = require('../templates/' + name + '.handlebars');
+ } catch (_e) {
+ throw new Error('Cannot find template static/templates/' + name
+ + '.handlebars.');
}
- throw new Error('Cannot find template ' + name + '.handlebars anywhere '
- + 'under the static/templates/ folder.');
+
+ return template(arg);
};
// Below, we register Zulip-specific extensions to the handlebars API.
diff --git a/static/js/tictactoe_widget.js b/static/js/tictactoe_widget.js
index c5f31d9f5f..89d7def044 100644
--- a/static/js/tictactoe_widget.js
+++ b/static/js/tictactoe_widget.js
@@ -127,7 +127,7 @@ exports.activate = function (opts) {
function render() {
var widget_data = tictactoe_data.get_widget_data();
- var html = templates.render('tictactoe-widget', widget_data);
+ var html = templates.render('widgets/tictactoe-widget', widget_data);
elem.html(html);
elem.find("button.tictactoe-square").on('click', function (e) {
diff --git a/static/js/todo_widget.js b/static/js/todo_widget.js
index 1ef3f7a330..9a003be97f 100644
--- a/static/js/todo_widget.js
+++ b/static/js/todo_widget.js
@@ -122,7 +122,7 @@ exports.activate = function (opts) {
var task_data = exports.task_data_holder();
function render() {
- var html = templates.render('todo-widget');
+ var html = templates.render('widgets/todo-widget');
elem.html(html);
elem.find("button.add-task").on('click', function (e) {
@@ -149,7 +149,7 @@ exports.activate = function (opts) {
function render_results() {
var widget_data = task_data.get_widget_data();
- var html = templates.render('todo-widget-tasks', widget_data);
+ var html = templates.render('widgets/todo-widget-tasks', widget_data);
elem.find('ul.todo-widget').html(html);
elem.find(".widget-error").text('');
diff --git a/static/js/zform.js b/static/js/zform.js
index ceacc27a50..8e62d1393a 100644
--- a/static/js/zform.js
+++ b/static/js/zform.js
@@ -64,7 +64,7 @@ exports.activate = function (opts) {
choice.idx = idx;
});
- var html = templates.render('zform-choices', data);
+ var html = templates.render('widgets/zform-choices', data);
var elem = $(html);
elem.find('button').on('click', function (e) {
diff --git a/static/templates/admin-settings-modals.handlebars b/static/templates/admin-settings-modals.handlebars
index b4733c1c99..115f647779 100644
--- a/static/templates/admin-settings-modals.handlebars
+++ b/static/templates/admin-settings-modals.handlebars
@@ -1,9 +1,9 @@
-{{ partial "deactivation-user-modal" }}
+{{ partial "settings/deactivation-user-modal" }}
-{{ partial "realm-domains-modal" }}
+{{ partial "settings/realm-domains-modal" }}
-{{ partial "revoke-invite-modal" }}
+{{ partial "settings/revoke-invite-modal" }}
-{{ partial "resend-invite-modal" }}
+{{ partial "settings/resend-invite-modal" }}
diff --git a/static/templates/admin_profile_field_list.handlebars b/static/templates/admin_profile_field_list.handlebars
index 0fd8d34e5e..01032be962 100644
--- a/static/templates/admin_profile_field_list.handlebars
+++ b/static/templates/admin_profile_field_list.handlebars
@@ -42,7 +42,7 @@
{{#each choices}}
- {{partial "profile-field-choice" }}
+ {{partial "settings/profile-field-choice" }}
{{/each}}
diff --git a/static/templates/admin_tab.handlebars b/static/templates/admin_tab.handlebars
index d458cdc1e1..41c1298854 100644
--- a/static/templates/admin_tab.handlebars
+++ b/static/templates/admin_tab.handlebars
@@ -3,28 +3,28 @@
{{ partial "admin-settings-modals"}}
-{{ partial "organization-profile-admin" }}
+{{ partial "settings/organization-profile-admin" }}
-{{ partial "organization-settings-admin" }}
+{{ partial "settings/organization-settings-admin" }}
-{{ partial "organization-permissions-admin" }}
+{{ partial "settings/organization-permissions-admin" }}
-{{ partial "emoji-settings-admin" }}
+{{ partial "settings/emoji-settings-admin" }}
-{{ partial "user-list-admin" }}
+{{ partial "settings/user-list-admin" }}
-{{ partial "deactivated-users-admin" }}
+{{ partial "settings/deactivated-users-admin" }}
-{{ partial "bot-list-admin" }}
+{{ partial "settings/bot-list-admin" }}
-{{ partial "default-streams-list-admin" }}
+{{ partial "settings/default-streams-list-admin" }}
-{{ partial "auth-methods-settings-admin" }}
+{{ partial "settings/auth-methods-settings-admin" }}
-{{ partial "linkifier-settings-admin" }}
+{{ partial "settings/linkifier-settings-admin" }}
-{{ partial "invites-list-admin" }}
+{{ partial "settings/invites-list-admin" }}
{{ partial "user-groups-admin" }}
-{{ partial "profile-field-settings-admin" }}
+{{ partial "settings/profile-field-settings-admin" }}
diff --git a/static/templates/settings/auth-methods-settings-admin.handlebars b/static/templates/settings/auth-methods-settings-admin.handlebars
index 72fbf221e1..4d787014eb 100644
--- a/static/templates/settings/auth-methods-settings-admin.handlebars
+++ b/static/templates/settings/auth-methods-settings-admin.handlebars
@@ -3,7 +3,7 @@
diff --git a/static/templates/settings/display-settings.handlebars b/static/templates/settings/display-settings.handlebars
index 4633bc87d6..48c904c033 100644
--- a/static/templates/settings/display-settings.handlebars
+++ b/static/templates/settings/display-settings.handlebars
@@ -24,7 +24,7 @@
{{#each display_settings.settings.user_display_settings}}
- {{partial "settings_checkbox"
+ {{partial "settings/settings_checkbox"
"setting_name" this
"is_checked" (lookup ../page_params this)
"label" (lookup ../settings_label this)
@@ -49,7 +49,7 @@
{{t "Time settings" }}
- {{partial "settings_checkbox"
+ {{partial "settings/settings_checkbox"
"setting_name" "twenty_four_hour_time"
"is_checked" page_params.twenty_four_hour_time
"label" settings_label.twenty_four_hour_time}}
@@ -93,7 +93,7 @@
- {{partial "settings_checkbox"
+ {{partial "settings/settings_checkbox"
"setting_name" "translate_emoticons"
"is_checked" page_params.translate_emoticons
"label" settings_label.translate_emoticons}}
diff --git a/static/templates/settings/emoji-settings-admin.handlebars b/static/templates/settings/emoji-settings-admin.handlebars
index 29e6c63324..b64b654fad 100644
--- a/static/templates/settings/emoji-settings-admin.handlebars
+++ b/static/templates/settings/emoji-settings-admin.handlebars
@@ -1,6 +1,6 @@
- {{partial "emoji-settings-tip"}}
+ {{partial "settings/emoji-settings-tip"}}