stream settings: Deduplicate template rendering.

This commit is contained in:
Yashashvi Dave
2019-06-14 18:12:48 +05:30
committed by Tim Abbott
parent 30821dbcbb
commit 1b9c1a7898
4 changed files with 73 additions and 48 deletions

View File

@@ -3,6 +3,7 @@ zrequire('templates');
zrequire('settings_notifications');
set_global('i18n', global.stub_i18n);
zrequire('stream_edit');
const { JSDOM } = require("jsdom");
const { window } = new JSDOM();
@@ -1267,7 +1268,10 @@ run_test('subscription_settings', () => {
};
var html = '';
html += render('subscription_settings', sub);
html += render('subscription_settings', {
sub: sub,
settings: stream_edit.stream_settings(sub),
});
var div = $(html).find(".subscription-type");
assert(div.text().indexOf('private stream') > 0);

View File

@@ -222,12 +222,52 @@ function show_subscription_settings(sub_row) {
});
}
exports.is_notification_setting = function (setting_label) {
if (setting_label.indexOf("_notifications") > -1) {
return true;
}
return false;
};
var settings_labels = {
is_muted: i18n.t("Mute stream"),
desktop_notifications: i18n.t("Visual desktop notifications"),
audible_notifications: i18n.t("Audible desktop notifications"),
push_notifications: i18n.t("Mobile notifications"),
email_notifications: i18n.t("Email notifications"),
pin_to_top: i18n.t("Pin stream to top of left sidebar"),
};
exports.stream_settings = function (sub) {
var settings = [];
_.each(Object.keys(settings_labels), function (setting) {
if (exports.is_notification_setting(setting)) {
settings.push({
name: setting,
label: settings_labels[setting],
value: sub[setting + "_display"],
is_notification_setting: true,
});
} else {
settings.push({
name: setting,
label: settings_labels[setting],
value: sub[setting],
});
}
});
return settings;
};
exports.show_settings_for = function (node) {
var stream_id = get_stream_id(node);
var sub = stream_data.get_sub_by_id(stream_id);
stream_data.update_calculated_fields(sub);
var html = templates.render('subscription_settings', sub);
var html = templates.render('subscription_settings', {
sub: sub,
settings: exports.stream_settings(sub),
});
ui.get_content_element($('.subscriptions .right .settings')).html(html);
var sub_settings = exports.settings_for_sub(sub);

View File

@@ -0,0 +1,7 @@
<div id="{{prefix}}{{setting_name}}{{suffix}}" class="sub_setting_checkbox {{#if notification_setting}}sub_notification_setting {{#if is_muted}}muted-sub{{/if}}{{/if}}">
<input id="{{setting_name}}_{{stream_id}}" name="{{setting_name}}" class="sub_setting_control" type="checkbox" tabindex="-1" {{#if is_checked}}checked{{/if}} {{#if_and is_muted notification_setting}}disabled="disabled"{{/if_and}}/>
<label class="subscription-control-label">{{label}}</label>
{{#if_equal setting_name "is_muted"}}
<p class="mute-note {{#unless is_muted}}hide-mute-note{{/unless}}">{{t "Muted streams don't show up in \"All messages\" or generate notifications unless you are mentioned." }}</p>
{{/if_equal}}
</div>

View File

@@ -1,7 +1,7 @@
{{#with this}}
<div class="subscription_settings" data-stream-id="{{stream_id}}">
<div class="subscription_settings" data-stream-id="{{sub.stream_id}}">
<div class="inner-box">
<div class="alert stream_change_property_info"></div>
{{#with sub}}
<div class="stream-header">
{{#if invite_only}}
<div class="large-icon lock" style="color: {{color}}">
@@ -45,68 +45,42 @@
</div>
<a class="change-stream-privacy" {{#unless can_change_stream_permissions}}style="display: none;"{{/unless}}>[{{t "Change" }}]</a>
</div>
<div class="regular_subscription_settings collapse {{#subscribed}}in{{/subscribed}}">
{{/with}}
<div class="regular_subscription_settings collapse {{#sub.subscribed}}in{{/sub.subscribed}}">
<div class="subscription-config">
<ul class="grey-box">
{{#each settings}}
<li>
<div id="sub_is_muted_setting" class="sub_setting_checkbox sub-mute-setting">
<input id="is_muted_{{stream_id}}" name="is_muted" class="sub_setting_control" type="checkbox" tabindex="-1" {{#if is_muted}}checked{{/if}} />
<label class="subscription-control-label">{{t "Mute stream" }}</label>
<p class="mute-note {{#unless is_muted}}hide-mute-note{{/unless}}">{{t "Muted streams don't show up in \"All messages\" or generate notifications unless you are mentioned." }}</p>
</div>
</li>
<li>
<div id="sub_desktop_notifications_setting"
class="sub_setting_checkbox sub_notification_setting {{#if is_muted}}muted-sub{{/if}}">
<input id="desktop_notifications_{{stream_id}}" name="desktop_notifications" class="sub_setting_control" type="checkbox" tabindex="-1" {{#if desktop_notifications_display}}checked{{/if}} {{#if is_muted}}disabled="disabled"{{/if}}/>
<label class="subscription-control-label">{{t "Visual desktop notifications" }}</label>
</div>
</li>
<li>
<div id="sub_audible_notifications_setting"
class="sub_setting_checkbox sub_notification_setting {{#if is_muted}}muted-sub{{/if}}">
<input id="audible_notifications_{{stream_id}}" name="audible_notifications" class="sub_setting_control" type="checkbox" tabindex="-1" {{#if audible_notifications_display}}checked{{/if}} {{#if is_muted}}disabled="disabled"{{/if}}/>
<label class="subscription-control-label">{{t "Audible desktop notifications" }}</label>
</div>
</li>
<li>
<div id="sub_push_notifications_setting"
class="sub_setting_checkbox sub_notification_setting {{#if is_muted}}muted-sub{{/if}}">
<input id="push_notifications_{{stream_id}}" name="push_notifications" class="sub_setting_control" type="checkbox" tabindex="-1" {{#if push_notifications_display}}checked{{/if}} {{#if is_muted}}disabled="disabled"{{/if}}/>
<label class="subscription-control-label">{{t "Mobile notifications" }}</label>
</div>
</li>
<li>
<div id="sub_email_notifications_setting"
class="sub_setting_checkbox sub_notification_setting {{#if is_muted}}muted-sub{{/if}}">
<input id="email_notifications_{{stream_id}}" name="email_notifications" class="sub_setting_control" type="checkbox" tabindex="-1" {{#if email_notifications_display}}checked{{/if}} {{#if is_muted}}disabled="disabled"{{/if}}/>
<label class="subscription-control-label">{{t "Email notifications" }}</label>
</div>
</li>
<li>
<div id="sub_pin_to_top_setting" class="sub_setting_checkbox">
<input id="pin_to_top_{{stream_id}}" name="pin_to_top" class="sub_setting_control" type="checkbox" tabindex="-1" {{#if pin_to_top}}checked{{/if}} />
<label class="subscription-control-label">{{t "Pin stream to top of left sidebar" }}</label>
</div>
{{partial "stream-settings-checkbox"
"setting_name" name
"prefix" "sub_"
"suffix" "_setting"
"is_checked" value
"is_muted" (lookup ../sub "is_muted")
"stream_id" (lookup ../sub "stream_id")
"notification_setting" is_notification_setting
"label" label}}
</li>
{{/each}}
<li>
<label for="streamcolor" class="subscription-control-label">{{t "Stream color" }}</label>
<span class="sub_setting_control">
<input stream_id="{{stream_id}}" class="colorpicker" id="streamcolor" type="text" value="{{color}}" tabindex="-1" />
<input stream_id="{{sub.stream_id}}" class="colorpicker" id="streamcolor" type="text" value="{{sub.color}}" tabindex="-1" />
</span>
</li>
</ul>
</div>
<div class="stream-email-box" {{#unless email_address}}style="display: none;"{{/unless}}>
<div class="stream-email-box" {{#unless sub.email_address}}style="display: none;"{{/unless}}>
<div class="sub_settings_title">{{t "Email address" }} <i class="fa fa-question-circle stream-email-hint" aria-hidden="true"></i></div>
<div class="stream-email">
<span class="email-address">{{email_address}}</span>
<span class="email-address">{{sub.email_address}}</span>
</div>
</div>
</div>
{{#with sub}}
<div class="subscription-members-setting">
{{partial "subscription_members"}}
</div>
{{/with}}
</div>
</div>
{{/with}}