mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: enforces ember-template-lint: no-triple-curlies (#9150)
This pr replaces `{{{ }}}` usage by a {{html-safe}} helper. While it doesn't solve the underlying issue, it gives us a path forward without risking breaking too much existing behavior.
Also introduces an htmlSafe computed macro:
```
import { htmlSafe } from "discourse/lib/computed";
htmlDescription: htmlSafe("description")
```
Overtime {{html-safe}} usage should be removed and moved to components properties or specialized components/helpers.
This commit is contained in:
@@ -9,11 +9,11 @@
|
||||
{{icon-or-image model}}
|
||||
<span class="badge-display-name">{{model.name}}</span>
|
||||
{{else}}
|
||||
<span class='badge-placeholder'>{{I18n 'admin.badges.mass_award.no_badge_selected'}}</span>
|
||||
<span class='badge-placeholder'>{{i18n 'admin.badges.mass_award.no_badge_selected'}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div>
|
||||
<h4>{{I18n 'admin.badges.mass_award.upload_csv'}}</h4>
|
||||
<h4>{{i18n 'admin.badges.mass_award.upload_csv'}}</h4>
|
||||
<input type='file' id='massAwardCSVUpload' accept='.csv'>
|
||||
</div>
|
||||
<div>
|
||||
@@ -34,6 +34,6 @@
|
||||
{{/link-to}}
|
||||
</form>
|
||||
{{else}}
|
||||
<span class='badge-required'>{{I18n 'admin.badges.mass_award.no_badge_selected'}}</span>
|
||||
<span class='badge-required'>{{i18n 'admin.badges.mass_award.no_badge_selected'}}</span>
|
||||
{{/if}}
|
||||
{{/d-section}}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
{{#each badgeIntroLinks as |link|}}
|
||||
<a href={{link.href}} class="external-link" target="_blank" rel="noopener">
|
||||
{{d-icon link.icon}}
|
||||
<span>{{I18n link.text}}</span>
|
||||
<span>{{i18n link.text}}</span>
|
||||
</a>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
{{#if backupStats.last_backup_taken_at}}
|
||||
<br>
|
||||
{{{i18n "admin.dashboard.lastest_backup" date=(format-date backupStats.last_backup_taken_at leaveAgo="true")}}}
|
||||
{{i18n "admin.dashboard.lastest_backup" date=(format-date backupStats.last_backup_taken_at leaveAgo="true")}}
|
||||
{{/if}}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -1 +1 @@
|
||||
{{{formatedValue}}}
|
||||
{{html-safe formatedValue}}
|
||||
|
||||
@@ -199,6 +199,6 @@
|
||||
{{/conditional-loading-section}}
|
||||
{{else}}
|
||||
<div class="alert alert-info">
|
||||
{{{disabledLabel}}}
|
||||
{{html-safe disabledLabel}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<div class="form-display">
|
||||
<strong>{{userField.name}}</strong>
|
||||
<br>
|
||||
{{{userField.description}}}
|
||||
{{html-safe userField.description}}
|
||||
</div>
|
||||
<div class="form-display">{{fieldName}}</div>
|
||||
<div class="form-element controls">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<div class='penalty-post-controls'>
|
||||
<label>
|
||||
<div class='penalty-post-label'>
|
||||
{{{i18n 'admin.user.penalty_post_actions'}}}
|
||||
{{i18n 'admin.user.penalty_post_actions'}}
|
||||
</div>
|
||||
</label>
|
||||
{{combo-box
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<div class='reason-controls'>
|
||||
<label>
|
||||
<div class='silence-reason-label'>
|
||||
{{{i18n 'admin.user.silence_reason_label'}}}
|
||||
{{i18n 'admin.user.silence_reason_label'}}
|
||||
</div>
|
||||
</label>
|
||||
{{text-field
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<label>
|
||||
{{input type="checkbox" checked=enabled}}
|
||||
<span>{{{setting.description}}}</span>
|
||||
<span>{{html-safe setting.description}}</span>
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
</label>
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
onChange=(action "onChangeSelectedCategories")
|
||||
}}
|
||||
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
|
||||
@@ -4,4 +4,4 @@
|
||||
onChange=(action (mut value))
|
||||
}}
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -6,4 +6,4 @@
|
||||
onChangeColor=(action "onChangeColor")
|
||||
}}
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
<div class="desc">{{{setting.description}}}</div>
|
||||
<div class="desc">{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -8,4 +8,4 @@
|
||||
}}
|
||||
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -15,5 +15,5 @@
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
|
||||
<div class='desc'>
|
||||
{{{setting.description}}}
|
||||
{{html-safe setting.description}}
|
||||
</div>
|
||||
|
||||
@@ -7,4 +7,4 @@
|
||||
onChange=(action "onChangeGroupListSetting")
|
||||
}}
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{{value-list values=value addKey="admin.site_settings.add_host"}}
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{{value-list values=value inputDelimiter="|" choices=setting.choices}}
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{{secret-value-list setting=setting values=value isSecret=isSecret}}
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -7,4 +7,4 @@
|
||||
{{/if}}
|
||||
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{{tag-chooser tags=selectedTags}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
{{site-settings-image-uploader imageUrl=value placeholderUrl=setting.placeholder type="site_setting"}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
{{d-button label="admin.site_settings.uploaded_image_list.label" action=(action "showUploadModal") actionParam=(hash value=value setting=setting)}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{{value-list values=value addKey="admin.site_settings.add_url"}}
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{{value-list values=value}}
|
||||
{{setting-validation-message message=validationMessage}}
|
||||
<div class='desc'>{{{setting.description}}}</div>
|
||||
<div class='desc'>{{html-safe setting.description}}</div>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<label>
|
||||
<div class='suspend-reason-label'>
|
||||
{{#if siteSettings.hide_suspension_reasons}}
|
||||
{{{i18n 'admin.user.suspend_reason_hidden_label'}}}
|
||||
{{i18n 'admin.user.suspend_reason_hidden_label'}}
|
||||
{{else}}
|
||||
{{{i18n 'admin.user.suspend_reason_label'}}}
|
||||
{{i18n 'admin.user.suspend_reason_label'}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</label>
|
||||
|
||||
@@ -28,14 +28,14 @@
|
||||
|
||||
{{#if displayComponents}}
|
||||
<div class="components-list">
|
||||
<span class="components">{{{childrenString}}}</span>
|
||||
<span class="components">{{html-safe childrenString}}</span>
|
||||
|
||||
{{#if displayHasMore}}
|
||||
<a href {{action "toggleChildrenExpanded"}} class="others-count">
|
||||
{{#if childrenExpanded}}
|
||||
{{I18n "admin.customize.theme.collapse"}}
|
||||
{{i18n "admin.customize.theme.collapse"}}
|
||||
{{else}}
|
||||
{{I18n "admin.customize.theme.and_x_more" count=moreCount}}
|
||||
{{i18n "admin.customize.theme.and_x_more" count=moreCount}}
|
||||
{{/if}}
|
||||
</a>
|
||||
{{/if}}
|
||||
|
||||
@@ -25,9 +25,9 @@
|
||||
<div class="themes-list-item inactive-indicator">
|
||||
<span class="empty">
|
||||
{{#if themesTabActive}}
|
||||
{{I18n "admin.customize.theme.inactive_themes"}}
|
||||
{{i18n "admin.customize.theme.inactive_themes"}}
|
||||
{{else}}
|
||||
{{I18n "admin.customize.theme.inactive_components"}}
|
||||
{{i18n "admin.customize.theme.inactive_components"}}
|
||||
{{/if}}
|
||||
</span>
|
||||
</div>
|
||||
@@ -41,7 +41,7 @@
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="themes-list-item">
|
||||
<span class="empty">{{I18n "admin.customize.theme.empty"}}</span>
|
||||
<span class="empty">{{i18n "admin.customize.theme.empty"}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<div class="themes-intro admin-intro">
|
||||
<img src={{womanArtistEmojiURL}}>
|
||||
<div class="content-wrapper">
|
||||
<h1>{{I18n "admin.customize.theme.themes_intro"}}</h1>
|
||||
<h1>{{i18n "admin.customize.theme.themes_intro"}}</h1>
|
||||
<div class="create-actions">
|
||||
{{d-button action=(route-action "installModal") icon="upload" label="admin.customize.install" class="btn-primary"}}
|
||||
</div>
|
||||
@@ -9,7 +9,7 @@
|
||||
{{#each externalResources as |resource|}}
|
||||
<a href={{resource.link}} class="external-link" rel="noopener" target="_blank">
|
||||
{{d-icon resource.icon}}
|
||||
{{I18n resource.key}}
|
||||
{{i18n resource.key}}
|
||||
</a>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
{{#if showRemoteError}}
|
||||
<div class="error-message">
|
||||
{{d-icon "exclamation-triangle"}} {{I18n "admin.customize.theme.repo_unreachable"}}
|
||||
{{d-icon "exclamation-triangle"}} {{i18n "admin.customize.theme.repo_unreachable"}}
|
||||
</div>
|
||||
<div class="raw-error">
|
||||
<code>{{model.remoteError}}</code>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<div class="problem-messages">
|
||||
<ul>
|
||||
{{#each problems as |problem|}}
|
||||
<li>{{{problem}}}</li>
|
||||
<li>{{html-safe problem}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
filters=trendingSearchFilters
|
||||
isEnabled=logSearchQueriesEnabled
|
||||
disabledLabel=trendingSearchDisabledLabel}}
|
||||
{{{i18n "admin.dashboard.reports.trending_search.more" basePath=basePath}}}
|
||||
{{i18n "admin.dashboard.reports.trending_search.more" basePath=basePath}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
<hr>
|
||||
<div class="text">
|
||||
<h3>{{i18n 'admin.email.advanced_test.text'}}</h3>
|
||||
<pre class="full-reason">{{{text}}}</pre>
|
||||
<pre class="full-reason">{{html-safe text}}</pre>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="elided">
|
||||
<h3>{{i18n 'admin.email.advanced_test.elided'}}</h3>
|
||||
<pre class="full-reason">{{{elided}}}</pre>
|
||||
<pre class="full-reason">{{html-safe elided}}</pre>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
<iframe srcdoc={{model.html_content}} />
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<pre>{{{model.text_content}}}</pre>
|
||||
<pre>{{html-safe model.text_content}}</pre>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
{{#if showSecondary}}
|
||||
<div class='embedding-secondary'>
|
||||
<p>{{{i18n "admin.embedding.sample"}}}</p>
|
||||
<p>{{i18n "admin.embedding.sample"}}</p>
|
||||
{{highlighted-code code=embeddingCode lang="html"}}
|
||||
</div>
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
<td class="col value created-at">{{age-with-tooltip item.created_at}}</td>
|
||||
<td class="col value details">
|
||||
<div>
|
||||
{{{item.formattedDetails}}}
|
||||
{{html-safe item.formattedDetails}}
|
||||
{{#if item.useCustomModalForDetails}}
|
||||
<a href {{action "showCustomDetailsModal" item}}>{{d-icon "info-circle"}} {{i18n 'admin.logs.staff_actions.show'}}</a>
|
||||
{{/if}}
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
{{else}}
|
||||
<p class="grant-count">
|
||||
{{#if count}}
|
||||
{{{i18n "admin.badges.preview.grant_count" count=count}}}
|
||||
{{i18n "admin.badges.preview.grant_count" count=count}}
|
||||
{{else}}
|
||||
{{{i18n "admin.badges.preview.no_grant_count"}}}
|
||||
{{i18n "admin.badges.preview.no_grant_count"}}
|
||||
{{/if}}
|
||||
</p>
|
||||
|
||||
@@ -41,14 +41,14 @@
|
||||
</p>
|
||||
<ul>
|
||||
{{#each processedSample as |html|}}
|
||||
<li>{{{html}}}</li>
|
||||
<li>{{html-safe html}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
|
||||
{{#if hasQueryPlan}}
|
||||
<div class="badge-query-plan">
|
||||
{{{queryPlanHtml}}}
|
||||
{{html-safe queryPlanHtml}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
<div class="popular-theme-buttons">
|
||||
{{#if theme.installed}}
|
||||
<span>{{I18n "admin.customize.theme.installed"}}</span>
|
||||
<span>{{i18n "admin.customize.theme.installed"}}</span>
|
||||
{{else}}
|
||||
{{d-button class='btn-small'
|
||||
label="admin.customize.theme.install"
|
||||
@@ -33,7 +33,7 @@
|
||||
action=(action "installThemeFromList" theme.value)}}
|
||||
|
||||
{{#if theme.preview}}
|
||||
<a href={{theme.preview}} rel="noopener" target="_blank">{{d-icon "desktop"}} {{I18n "admin.customize.theme.preview"}}</a>
|
||||
<a href={{theme.preview}} rel="noopener" target="_blank">{{d-icon "desktop"}} {{i18n "admin.customize.theme.preview"}}</a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -85,10 +85,10 @@
|
||||
|
||||
{{#if create}}
|
||||
<div class="inputs">
|
||||
<div class="label">{{I18n "admin.customize.theme.create_name"}}</div>
|
||||
<div class="label">{{i18n "admin.customize.theme.create_name"}}</div>
|
||||
{{input value=name placeholder=placeholder}}
|
||||
|
||||
<div class="label">{{I18n "admin.customize.theme.create_type"}}</div>
|
||||
<div class="label">{{i18n "admin.customize.theme.create_type"}}</div>
|
||||
{{combo-box
|
||||
valueProperty="value"
|
||||
content=createTypes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div>
|
||||
{{#d-modal-body title="admin.logs.staff_actions.modal_title"}}
|
||||
{{{diff}}}
|
||||
{{html-safe diff}}
|
||||
{{/d-modal-body}}
|
||||
<div class="modal-footer">
|
||||
{{d-button
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
</div>
|
||||
<div class="popular-theme-buttons">
|
||||
{{#if theme.installed}}
|
||||
<span>{{I18n "admin.customize.theme.installed"}}</span>
|
||||
<span>{{i18n "admin.customize.theme.installed"}}</span>
|
||||
{{else}}
|
||||
{{d-button class='btn-small'
|
||||
label="admin.customize.theme.install"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<div class='fps-topic'>
|
||||
<div class='topic'>
|
||||
<a class='search-link' href={{result.url}}>
|
||||
{{topic-status topic=result.topic disableActions=true}}<span class='topic-title'>{{#highlight-text highlight=term}}{{{result.topic.fancyTitle}}}{{/highlight-text}}</span>
|
||||
{{topic-status topic=result.topic disableActions=true}}<span class='topic-title'>{{#highlight-text highlight=term}}{{html-safe result.topic.fancyTitle}}{{/highlight-text}}</span>
|
||||
</a>
|
||||
|
||||
<div class='search-category'>
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
{{#if result.blurb}}
|
||||
{{#highlight-text highlight=term}}
|
||||
{{{result.blurb}}}
|
||||
{{html-safe result.blurb}}
|
||||
{{/highlight-text}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
<div class="field">{{i18n "user.avatar.title"}}</div>
|
||||
<div class="value">{{avatar model imageSize="large"}}</div>
|
||||
<div class="controls">
|
||||
{{{i18n "admin.user.visit_profile" url=preferencesPath}}}
|
||||
{{i18n "admin.user.visit_profile" url=preferencesPath}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -509,7 +509,7 @@
|
||||
<h1>{{i18n "admin.groups.title"}}</h1>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.groups.automatic"}}</div>
|
||||
<div class="value">{{{automaticGroups}}}</div>
|
||||
<div class="value">{{html-safe automaticGroups}}</div>
|
||||
</div>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.groups.custom"}}</div>
|
||||
@@ -616,11 +616,11 @@
|
||||
</div>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "admin.user.time_read"}}</div>
|
||||
<div class="value">{{{format-duration model.time_read}}}</div>
|
||||
<div class="value">{{format-duration model.time_read}}</div>
|
||||
</div>
|
||||
<div class="display-row">
|
||||
<div class="field">{{i18n "user.invited.days_visited"}}</div>
|
||||
<div class="value">{{{model.days_visited}}}</div>
|
||||
<div class="value">{{html-safe model.days_visited}}</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -53,11 +53,11 @@
|
||||
</td>
|
||||
<td class="last-emailed">
|
||||
<div class="label">{{i18n 'admin.users.last_emailed'}}</div>
|
||||
<div>{{{format-duration user.last_emailed_age}}}</div>
|
||||
<div>{{format-duration user.last_emailed_age}}</div>
|
||||
</td>
|
||||
<td class="last-seen">
|
||||
<div class="label">{{i18n 'last_seen'}}</div>
|
||||
<div>{{{format-duration user.last_seen_age}}}</div>
|
||||
<div>{{format-duration user.last_seen_age}}</div>
|
||||
</td>
|
||||
<td class="topics-entered">
|
||||
<div class="label">{{i18n 'admin.user.topics_entered'}}</div>
|
||||
@@ -69,12 +69,12 @@
|
||||
</td>
|
||||
<td class="time-read">
|
||||
<div class="label">{{i18n 'admin.user.time_read'}}</div>
|
||||
<div>{{{format-duration user.time_read}}}</div>
|
||||
<div>{{format-duration user.time_read}}</div>
|
||||
</td>
|
||||
|
||||
<td class="created">
|
||||
<div class="label">{{i18n 'created'}}</div>
|
||||
<div>{{{format-duration user.created_at_age}}}</div>
|
||||
<div>{{format-duration user.created_at_age}}</div>
|
||||
</td>
|
||||
|
||||
{{#if siteSettings.must_approve_users}}
|
||||
|
||||
Reference in New Issue
Block a user